@para-ui/core 5.0.0-beta.11 → 5.0.0-beta.13

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 (650) 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/es/AlignBox/component.json +89 -0
  103. package/es/AlignBox/index.css +1 -1
  104. package/es/AlignBox/index.d.ts +6 -2
  105. package/es/AlignBox/index.js +1 -1
  106. package/es/AlignBox/style/index.css +1 -1
  107. package/es/Anchor/anchorMenu/index.d.ts +2 -1
  108. package/es/Anchor/anchorMenu/index.js +36 -33
  109. package/es/Anchor/component.json +130 -0
  110. package/es/Anchor/index.js +52 -49
  111. package/es/Anchor/type.d.ts +8 -4
  112. package/es/Argv/component.json +216 -0
  113. package/es/Argv/dataGenerator/index.js +1 -1
  114. package/es/Argv/index.d.ts +5 -6
  115. package/es/Argv/index.js +1 -1
  116. package/es/AutoBox/component.json +133 -0
  117. package/es/AutoBox/index.d.ts +3 -3
  118. package/es/AutoBox/index.js +1 -1
  119. package/es/AutoBox/protal.d.ts +2 -2
  120. package/es/AutoBox/protal.js +33 -30
  121. package/es/AutoButton/component.json +109 -0
  122. package/es/AutoButton/index.js +1 -1
  123. package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  124. package/es/AutoTips/autoTipsMultiline/index.js +1 -1
  125. package/es/AutoTips/component.json +121 -0
  126. package/es/AutoTips/index.js +1 -1
  127. package/es/Badge/component.json +92 -0
  128. package/es/Breadcrumbs/component.json +142 -0
  129. package/es/Breadcrumbs/index.js +1 -1
  130. package/es/Button/SplitButton.d.ts +2 -2
  131. package/es/Button/component.json +168 -0
  132. package/es/Button/index.js +44 -44
  133. package/es/ButtonGroup/component.json +132 -0
  134. package/es/ButtonGroup/index.d.ts +1 -1
  135. package/es/Card/component.json +162 -0
  136. package/es/Card/index.d.ts +2 -2
  137. package/es/Card/index.js +2 -2
  138. package/es/Carousel/component.json +142 -0
  139. package/es/Carousel/index.d.ts +1 -1
  140. package/es/Cascader/Cascader.js +1 -1
  141. package/es/Cascader/OptionList/Column.js +1 -1
  142. package/es/Cascader/OptionList/index.js +1 -1
  143. package/es/Cascader/component.json +196 -0
  144. package/es/Cascader/hooks/useEntities.js +7 -7
  145. package/es/Cascader/interface.d.ts +1 -0
  146. package/es/Cascader/utils/commonUtil.d.ts +1 -1
  147. package/es/Cascader/utils/commonUtil.js +16 -16
  148. package/es/Cascader/utils/treeUtil.d.ts +14 -5
  149. package/es/Cascader/utils/treeUtil.js +1 -1
  150. package/es/Checkbox/component.json +138 -0
  151. package/es/CheckboxGroup/component.json +152 -0
  152. package/es/CheckboxGroup/index.js +1 -1
  153. package/es/CodeEditor/component.json +189 -0
  154. package/es/CodeEditor/index.d.ts +11 -10
  155. package/es/CodeEditor/index.js +19 -19
  156. package/es/Collapse/component.json +166 -0
  157. package/es/Collapse/index.d.ts +1 -1
  158. package/es/Collapse/index.js +23 -22
  159. package/es/CollapseBox/component.json +84 -0
  160. package/es/CollapseLayout/component.json +155 -0
  161. package/es/ColorPicker/component.json +142 -0
  162. package/es/ComboSelect/component.json +181 -0
  163. package/es/ComboSelect/index.js +115 -109
  164. package/es/ComboSelect/interface.d.ts +2 -2
  165. package/es/ComboSelect/utils.d.ts +3 -3
  166. package/es/ComboSelect/utils.js +1 -1
  167. package/es/Container/component.json +111 -0
  168. package/es/ContentBox/component.json +81 -0
  169. package/es/CopyText/component.json +118 -0
  170. package/es/CycleSelector/component.json +98 -0
  171. package/es/CycleSelector/index.js +14 -13
  172. package/es/DatePicker/component.json +192 -0
  173. package/es/DatePicker/generatePicker/generateRangePicker.js +11 -11
  174. package/es/DatePicker/generatePicker/generateSinglePicker.js +2 -2
  175. package/es/Descriptions/component.json +142 -0
  176. package/es/Descriptions/index.d.ts +1 -1
  177. package/es/Desktop/component.json +171 -0
  178. package/es/Desktop/index.js +1 -1
  179. package/es/DragVerify/component.json +114 -0
  180. package/es/DragVerify/index.js +19 -19
  181. package/es/Drawer/component.json +200 -0
  182. package/es/Drawer/index.js +86 -86
  183. package/es/Drawer/interface.d.ts +1 -1
  184. package/es/Drawer/util.d.ts +1 -6
  185. package/es/Drawer/util.js +9 -6
  186. package/es/Dropdown/component.json +147 -0
  187. package/es/Dropdown/index.js +1 -1
  188. package/es/DynamicMultiBox/component.json +278 -0
  189. package/es/DynamicMultiBox/formItem.d.ts +1 -1
  190. package/es/DynamicMultiBox/index.js +1 -1
  191. package/es/DynamicMultiBox/rowForm.d.ts +2 -2
  192. package/es/Empty/component.json +123 -0
  193. package/es/Empty/index.css +1 -1
  194. package/es/Empty/index.d.ts +2 -2
  195. package/es/Empty/index.js +27 -26
  196. package/es/Empty/style/index.css +1 -1
  197. package/es/FieldForm/FieldFormItem/ItemHolder.js +1 -1
  198. package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  199. package/es/FieldForm/FieldFormItem/StatusProvider.js +1 -1
  200. package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
  201. package/es/FieldForm/Form.d.ts +2 -2
  202. package/es/FieldForm/Form.js +1 -1
  203. package/es/FieldForm/FormItemInput.js +1 -1
  204. package/es/FieldForm/FormItemLabel.js +1 -1
  205. package/es/FieldForm/FormList.d.ts +2 -2
  206. package/es/FieldForm/component.json +196 -0
  207. package/es/FieldForm/context.d.ts +5 -1
  208. package/es/FieldForm/context.js +2 -2
  209. package/es/FieldForm/hooks/useForm.d.ts +4 -3
  210. package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
  211. package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  212. package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
  213. package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
  214. package/es/FieldForm/hooks/useItemRef.js +6 -6
  215. package/es/Form/component.json +161 -0
  216. package/es/Form/index.d.ts +52 -49
  217. package/es/Form/index.js +1 -1
  218. package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  219. package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
  220. package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  221. package/es/FormItem/compoments/formFile/index.js +8 -8
  222. package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  223. package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
  224. package/es/FormItem/component.json +171 -0
  225. package/es/FormItem/index.d.ts +5 -5
  226. package/es/FormItem/index.js +23 -23
  227. package/es/FormItem/itemType.js +1 -1
  228. package/es/FunctionModal/component.json +197 -0
  229. package/es/FunctionModal/dialog.d.ts +1 -1
  230. package/es/FunctionModal/modalContext.d.ts +4 -1
  231. package/es/GlobalContext/confirmLocale.js +1 -1
  232. package/es/GlobalContext/index.js +1 -1
  233. package/es/Help/component.json +118 -0
  234. package/es/HelperText/component.json +126 -0
  235. package/es/Image/PreviewGroup.js +1 -1
  236. package/es/Image/component.json +165 -0
  237. package/es/Image/index.js +1 -1
  238. package/es/InputCode/component.json +191 -0
  239. package/es/InputCode/index.d.ts +2 -2
  240. package/es/InputLang/component.json +205 -0
  241. package/es/InputLang/index.js +2 -2
  242. package/es/InputNumber/component.json +162 -0
  243. package/es/Label/component.json +126 -0
  244. package/es/Label/index.d.ts +2 -2
  245. package/es/Loading/component.json +91 -0
  246. package/es/Menu/component.json +180 -0
  247. package/es/Menu/verticalMenuList.js +1 -1
  248. package/es/Message/component.json +246 -0
  249. package/es/Message/index.d.ts +2 -2
  250. package/es/Message/index.js +2 -2
  251. package/es/Modal/Confirm/index.d.ts +1 -1
  252. package/es/Modal/Confirm/index.js +1 -1
  253. package/es/Modal/component.json +277 -0
  254. package/es/Modal/index.d.ts +85 -5
  255. package/es/Modal/index.js +159 -122
  256. package/es/Modal/interface.d.ts +1 -0
  257. package/es/MultiBox/component.json +216 -0
  258. package/es/MultiBox/index.js +19 -14
  259. package/es/Notification/component.json +184 -0
  260. package/es/OperateBtn/component.json +134 -0
  261. package/es/OperateBtn/index.d.ts +3 -3
  262. package/es/PageHeader/component.json +112 -0
  263. package/es/PageHeader/horizontalMeun.js +1 -1
  264. package/es/PageHeader/horizontalMeunRight.js +1 -1
  265. package/es/Pagination/component.json +181 -0
  266. package/es/Pagination/index.js +15 -15
  267. package/es/ParauiProvider/index.js +1 -1
  268. package/es/PasswordRules/component.json +105 -0
  269. package/es/PasswordRules/index.d.ts +4 -4
  270. package/es/PopConfirm/component.json +227 -0
  271. package/es/PopConfirm/index.d.ts +1 -1
  272. package/es/PopConfirm/index.js +1 -1
  273. package/es/PopMenu/component.json +131 -0
  274. package/es/PopMenu/hooks.d.ts +1 -1
  275. package/es/PopMenu/index.js +8 -8
  276. package/es/Popover/component.json +165 -0
  277. package/es/Popover/index.js +1 -1
  278. package/es/Progress/component.json +161 -0
  279. package/es/Prompt/component.json +144 -0
  280. package/es/Querying/component.json +96 -0
  281. package/es/Querying/index.css +1 -1
  282. package/es/Querying/index.d.ts +2 -2
  283. package/es/Querying/index.js +20 -19
  284. package/es/Querying/style/index.css +1 -1
  285. package/es/QuickReply/QuickReplyCode/index.js +1 -1
  286. package/es/QuickReply/component.json +129 -0
  287. package/es/QuickReply/index.d.ts +1 -1
  288. package/es/Radio/component.json +136 -0
  289. package/es/RadioGroup/component.json +149 -0
  290. package/es/RangeInput/component.json +198 -0
  291. package/es/RangeInput/index.js +20 -20
  292. package/es/Result/component.json +104 -0
  293. package/es/ScrollBar/component.json +115 -0
  294. package/es/Search/component.json +177 -0
  295. package/es/Search/index.d.ts +1 -1
  296. package/es/Select/component.json +244 -0
  297. package/es/Select/index.js +114 -114
  298. package/es/SelectInput/component.json +184 -0
  299. package/es/Selector/component.json +203 -0
  300. package/es/Selector/index.js +56 -50
  301. package/es/Selector/interface.d.ts +2 -2
  302. package/es/Selector/selectorData/index.js +1 -1
  303. package/es/Selector/selectorMain/index.js +3 -3
  304. package/es/Selector/selectorNode/index.js +1 -1
  305. package/es/Selector/util.d.ts +3 -3
  306. package/es/Selector/util.js +6 -12
  307. package/es/SelectorPicker/component.json +179 -0
  308. package/es/SelectorPicker/index.d.ts +5 -5
  309. package/es/SelectorPicker/index.js +15 -15
  310. package/es/SingleBox/component.json +151 -0
  311. package/es/SingleBox/index.d.ts +2 -2
  312. package/es/Slider/component.json +181 -0
  313. package/es/SortBox/component.json +108 -0
  314. package/es/Status/component.json +104 -0
  315. package/es/Stepper/component.json +129 -0
  316. package/es/Stepper/index.d.ts +2 -2
  317. package/es/Switch/component.json +207 -0
  318. package/es/Switch/index.css +1 -1
  319. package/es/Switch/index.d.ts +3 -2
  320. package/es/Switch/index.js +60 -59
  321. package/es/Switch/style/index.css +1 -1
  322. package/es/Table/component.json +547 -0
  323. package/es/Table/index.d.ts +2 -2
  324. package/es/Table/index.js +385 -382
  325. package/es/Table/interface.d.ts +30 -0
  326. package/es/Table/tableHead.js +1 -1
  327. package/es/Table/util.d.ts +1 -1
  328. package/es/Table/util.js +3 -12
  329. package/es/Tabs/component.json +227 -0
  330. package/es/Tag/component.json +221 -0
  331. package/es/Tag/index.css +1 -1
  332. package/es/Tag/index.d.ts +1 -1
  333. package/es/Tag/index.js +20 -20
  334. package/es/Tag/style/index.css +1 -1
  335. package/es/TextEditor/component.json +186 -0
  336. package/es/TextEditor/index.d.ts +5 -5
  337. package/es/TextEditor/index.js +1 -1
  338. package/es/TextField/component.json +290 -0
  339. package/es/TextField/index.d.ts +2 -2
  340. package/es/TextField/index.js +1 -1
  341. package/es/TimePicker/component.json +176 -0
  342. package/es/Timeline/component.json +110 -0
  343. package/es/Title/component.json +156 -0
  344. package/es/ToggleButton/component.json +153 -0
  345. package/es/ToggleButton/index.js +1 -1
  346. package/es/Tooltip/component.json +176 -0
  347. package/es/Tooltip/index.js +58 -53
  348. package/es/Tooltip/interface.d.ts +14 -1
  349. package/es/Tooltip/utils.js +6 -6
  350. package/es/Transfer/component.json +157 -0
  351. package/es/Tree/OperateBar/index.js +1 -1
  352. package/es/Tree/Tree.js +3 -3
  353. package/es/Tree/component.json +512 -0
  354. package/es/Tree/interface.d.ts +1 -1
  355. package/es/Upload/component.json +450 -0
  356. package/es/Upload/util.js +1 -1
  357. package/es/Utils/snack-kit-shims.d.ts +18 -0
  358. package/es/Utils/snack-kit-shims.js +19 -0
  359. package/es/Utils/type.d.ts +0 -2
  360. package/es/_virtual/index.js +5 -3
  361. package/es/_virtual/index2.js +2 -5
  362. package/es/index.d.ts +2 -0
  363. package/es/index.js +1 -1
  364. package/es/locale/en_US.d.ts +361 -0
  365. package/es/locale/en_US.js +364 -0
  366. package/es/locale/index.d.ts +1 -723
  367. package/es/locale/index2.js +10 -0
  368. package/es/locale/zh_CN.d.ts +361 -0
  369. package/es/locale/zh_CN.js +364 -0
  370. package/es/node_modules/classnames/index.js +1 -1
  371. package/lib/AlignBox/component.json +89 -0
  372. package/lib/AlignBox/index.css +1 -1
  373. package/lib/AlignBox/index.d.ts +6 -2
  374. package/lib/AlignBox/index.js +1 -1
  375. package/lib/AlignBox/style/index.css +1 -1
  376. package/lib/Anchor/anchorMenu/index.d.ts +2 -1
  377. package/lib/Anchor/anchorMenu/index.js +1 -1
  378. package/lib/Anchor/component.json +130 -0
  379. package/lib/Anchor/index.js +1 -1
  380. package/lib/Anchor/type.d.ts +8 -4
  381. package/lib/Argv/component.json +216 -0
  382. package/lib/Argv/dataGenerator/index.js +1 -1
  383. package/lib/Argv/index.d.ts +5 -6
  384. package/lib/Argv/index.js +1 -1
  385. package/lib/AutoBox/component.json +133 -0
  386. package/lib/AutoBox/index.d.ts +3 -3
  387. package/lib/AutoBox/index.js +1 -1
  388. package/lib/AutoBox/protal.d.ts +2 -2
  389. package/lib/AutoBox/protal.js +1 -1
  390. package/lib/AutoButton/component.json +109 -0
  391. package/lib/AutoButton/index.js +1 -1
  392. package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  393. package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
  394. package/lib/AutoTips/component.json +121 -0
  395. package/lib/AutoTips/index.js +1 -1
  396. package/lib/Badge/component.json +92 -0
  397. package/lib/Breadcrumbs/component.json +142 -0
  398. package/lib/Breadcrumbs/index.js +1 -1
  399. package/lib/Button/SplitButton.d.ts +2 -2
  400. package/lib/Button/component.json +168 -0
  401. package/lib/Button/index.js +1 -1
  402. package/lib/ButtonGroup/component.json +132 -0
  403. package/lib/ButtonGroup/index.d.ts +1 -1
  404. package/lib/Card/component.json +162 -0
  405. package/lib/Card/index.d.ts +2 -2
  406. package/lib/Card/index.js +1 -1
  407. package/lib/Carousel/component.json +142 -0
  408. package/lib/Carousel/index.d.ts +1 -1
  409. package/lib/Cascader/Cascader.js +1 -1
  410. package/lib/Cascader/OptionList/Column.js +1 -1
  411. package/lib/Cascader/OptionList/index.js +1 -1
  412. package/lib/Cascader/component.json +196 -0
  413. package/lib/Cascader/hooks/useEntities.js +1 -1
  414. package/lib/Cascader/interface.d.ts +1 -0
  415. package/lib/Cascader/utils/commonUtil.d.ts +1 -1
  416. package/lib/Cascader/utils/commonUtil.js +1 -1
  417. package/lib/Cascader/utils/treeUtil.d.ts +14 -5
  418. package/lib/Cascader/utils/treeUtil.js +1 -1
  419. package/lib/Checkbox/component.json +138 -0
  420. package/lib/CheckboxGroup/component.json +152 -0
  421. package/lib/CheckboxGroup/index.js +1 -1
  422. package/lib/CodeEditor/component.json +189 -0
  423. package/lib/CodeEditor/index.d.ts +11 -10
  424. package/lib/CodeEditor/index.js +1 -1
  425. package/lib/Collapse/component.json +166 -0
  426. package/lib/Collapse/index.d.ts +1 -1
  427. package/lib/Collapse/index.js +1 -1
  428. package/lib/CollapseBox/component.json +84 -0
  429. package/lib/CollapseLayout/component.json +155 -0
  430. package/lib/ColorPicker/component.json +142 -0
  431. package/lib/ComboSelect/component.json +181 -0
  432. package/lib/ComboSelect/index.js +1 -1
  433. package/lib/ComboSelect/interface.d.ts +2 -2
  434. package/lib/ComboSelect/utils.d.ts +3 -3
  435. package/lib/ComboSelect/utils.js +1 -1
  436. package/lib/Container/component.json +111 -0
  437. package/lib/ContentBox/component.json +81 -0
  438. package/lib/CopyText/component.json +118 -0
  439. package/lib/CycleSelector/component.json +98 -0
  440. package/lib/CycleSelector/index.js +1 -1
  441. package/lib/DatePicker/component.json +192 -0
  442. package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
  443. package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  444. package/lib/Descriptions/component.json +142 -0
  445. package/lib/Descriptions/index.d.ts +1 -1
  446. package/lib/Desktop/component.json +171 -0
  447. package/lib/Desktop/index.js +1 -1
  448. package/lib/DragVerify/component.json +114 -0
  449. package/lib/DragVerify/index.js +1 -1
  450. package/lib/Drawer/component.json +200 -0
  451. package/lib/Drawer/index.js +1 -1
  452. package/lib/Drawer/interface.d.ts +1 -1
  453. package/lib/Drawer/util.d.ts +1 -6
  454. package/lib/Drawer/util.js +1 -1
  455. package/lib/Dropdown/component.json +147 -0
  456. package/lib/Dropdown/index.js +1 -1
  457. package/lib/DynamicMultiBox/component.json +278 -0
  458. package/lib/DynamicMultiBox/formItem.d.ts +1 -1
  459. package/lib/DynamicMultiBox/index.js +1 -1
  460. package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
  461. package/lib/Empty/component.json +123 -0
  462. package/lib/Empty/index.css +1 -1
  463. package/lib/Empty/index.d.ts +2 -2
  464. package/lib/Empty/index.js +1 -1
  465. package/lib/Empty/style/index.css +1 -1
  466. package/lib/FieldForm/FieldFormItem/ItemHolder.js +1 -1
  467. package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  468. package/lib/FieldForm/FieldFormItem/StatusProvider.js +1 -1
  469. package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
  470. package/lib/FieldForm/Form.d.ts +2 -2
  471. package/lib/FieldForm/Form.js +1 -1
  472. package/lib/FieldForm/FormItemInput.js +1 -1
  473. package/lib/FieldForm/FormItemLabel.js +1 -1
  474. package/lib/FieldForm/FormList.d.ts +2 -2
  475. package/lib/FieldForm/component.json +196 -0
  476. package/lib/FieldForm/context.d.ts +5 -1
  477. package/lib/FieldForm/context.js +1 -1
  478. package/lib/FieldForm/hooks/useForm.d.ts +4 -3
  479. package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
  480. package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  481. package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
  482. package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
  483. package/lib/FieldForm/hooks/useItemRef.js +1 -1
  484. package/lib/Form/component.json +161 -0
  485. package/lib/Form/index.d.ts +52 -49
  486. package/lib/Form/index.js +1 -1
  487. package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  488. package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
  489. package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  490. package/lib/FormItem/compoments/formFile/index.js +1 -1
  491. package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  492. package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
  493. package/lib/FormItem/component.json +171 -0
  494. package/lib/FormItem/index.d.ts +5 -5
  495. package/lib/FormItem/index.js +1 -1
  496. package/lib/FormItem/itemType.js +1 -1
  497. package/lib/FunctionModal/component.json +197 -0
  498. package/lib/FunctionModal/dialog.d.ts +1 -1
  499. package/lib/FunctionModal/modalContext.d.ts +4 -1
  500. package/lib/GlobalContext/confirmLocale.js +1 -1
  501. package/lib/GlobalContext/index.js +1 -1
  502. package/lib/Help/component.json +118 -0
  503. package/lib/HelperText/component.json +126 -0
  504. package/lib/Image/PreviewGroup.js +1 -1
  505. package/lib/Image/component.json +165 -0
  506. package/lib/Image/index.js +1 -1
  507. package/lib/InputCode/component.json +191 -0
  508. package/lib/InputCode/index.d.ts +2 -2
  509. package/lib/InputLang/component.json +205 -0
  510. package/lib/InputLang/index.js +1 -1
  511. package/lib/InputNumber/component.json +162 -0
  512. package/lib/Label/component.json +126 -0
  513. package/lib/Label/index.d.ts +2 -2
  514. package/lib/Loading/component.json +91 -0
  515. package/lib/Menu/component.json +180 -0
  516. package/lib/Menu/verticalMenuList.js +1 -1
  517. package/lib/Message/component.json +246 -0
  518. package/lib/Message/index.d.ts +2 -2
  519. package/lib/Message/index.js +1 -1
  520. package/lib/Modal/Confirm/index.d.ts +1 -1
  521. package/lib/Modal/Confirm/index.js +1 -1
  522. package/lib/Modal/component.json +277 -0
  523. package/lib/Modal/index.d.ts +85 -5
  524. package/lib/Modal/index.js +1 -1
  525. package/lib/Modal/interface.d.ts +1 -0
  526. package/lib/MultiBox/component.json +216 -0
  527. package/lib/MultiBox/index.js +1 -1
  528. package/lib/Notification/component.json +184 -0
  529. package/lib/OperateBtn/component.json +134 -0
  530. package/lib/OperateBtn/index.d.ts +3 -3
  531. package/lib/PageHeader/component.json +112 -0
  532. package/lib/PageHeader/horizontalMeun.js +1 -1
  533. package/lib/PageHeader/horizontalMeunRight.js +1 -1
  534. package/lib/Pagination/component.json +181 -0
  535. package/lib/Pagination/index.js +1 -1
  536. package/lib/ParauiProvider/index.js +1 -1
  537. package/lib/PasswordRules/component.json +105 -0
  538. package/lib/PasswordRules/index.d.ts +4 -4
  539. package/lib/PopConfirm/component.json +227 -0
  540. package/lib/PopConfirm/index.d.ts +1 -1
  541. package/lib/PopConfirm/index.js +1 -1
  542. package/lib/PopMenu/component.json +131 -0
  543. package/lib/PopMenu/hooks.d.ts +1 -1
  544. package/lib/PopMenu/index.js +1 -1
  545. package/lib/Popover/component.json +165 -0
  546. package/lib/Popover/index.js +1 -1
  547. package/lib/Progress/component.json +161 -0
  548. package/lib/Prompt/component.json +144 -0
  549. package/lib/Querying/component.json +96 -0
  550. package/lib/Querying/index.css +1 -1
  551. package/lib/Querying/index.d.ts +2 -2
  552. package/lib/Querying/index.js +1 -1
  553. package/lib/Querying/style/index.css +1 -1
  554. package/lib/QuickReply/QuickReplyCode/index.js +1 -1
  555. package/lib/QuickReply/component.json +129 -0
  556. package/lib/QuickReply/index.d.ts +1 -1
  557. package/lib/Radio/component.json +136 -0
  558. package/lib/RadioGroup/component.json +149 -0
  559. package/lib/RangeInput/component.json +198 -0
  560. package/lib/RangeInput/index.js +1 -1
  561. package/lib/Result/component.json +104 -0
  562. package/lib/ScrollBar/component.json +115 -0
  563. package/lib/Search/component.json +177 -0
  564. package/lib/Search/index.d.ts +1 -1
  565. package/lib/Select/component.json +244 -0
  566. package/lib/Select/index.js +1 -1
  567. package/lib/SelectInput/component.json +184 -0
  568. package/lib/Selector/component.json +203 -0
  569. package/lib/Selector/index.js +1 -1
  570. package/lib/Selector/interface.d.ts +2 -2
  571. package/lib/Selector/selectorData/index.js +1 -1
  572. package/lib/Selector/selectorMain/index.js +1 -1
  573. package/lib/Selector/selectorNode/index.js +1 -1
  574. package/lib/Selector/util.d.ts +3 -3
  575. package/lib/Selector/util.js +1 -1
  576. package/lib/SelectorPicker/component.json +179 -0
  577. package/lib/SelectorPicker/index.d.ts +5 -5
  578. package/lib/SelectorPicker/index.js +1 -1
  579. package/lib/SingleBox/component.json +151 -0
  580. package/lib/SingleBox/index.d.ts +2 -2
  581. package/lib/Slider/component.json +181 -0
  582. package/lib/SortBox/component.json +108 -0
  583. package/lib/Status/component.json +104 -0
  584. package/lib/Stepper/component.json +129 -0
  585. package/lib/Stepper/index.d.ts +2 -2
  586. package/lib/Switch/component.json +207 -0
  587. package/lib/Switch/index.css +1 -1
  588. package/lib/Switch/index.d.ts +3 -2
  589. package/lib/Switch/index.js +1 -1
  590. package/lib/Switch/style/index.css +1 -1
  591. package/lib/Table/component.json +547 -0
  592. package/lib/Table/index.d.ts +2 -2
  593. package/lib/Table/index.js +1 -1
  594. package/lib/Table/interface.d.ts +30 -0
  595. package/lib/Table/tableHead.js +1 -1
  596. package/lib/Table/util.d.ts +1 -1
  597. package/lib/Table/util.js +1 -1
  598. package/lib/Tabs/component.json +227 -0
  599. package/lib/Tag/component.json +221 -0
  600. package/lib/Tag/index.css +1 -1
  601. package/lib/Tag/index.d.ts +1 -1
  602. package/lib/Tag/index.js +1 -1
  603. package/lib/Tag/style/index.css +1 -1
  604. package/lib/TextEditor/component.json +186 -0
  605. package/lib/TextEditor/index.d.ts +5 -5
  606. package/lib/TextEditor/index.js +1 -1
  607. package/lib/TextField/component.json +290 -0
  608. package/lib/TextField/index.d.ts +2 -2
  609. package/lib/TextField/index.js +1 -1
  610. package/lib/TimePicker/component.json +176 -0
  611. package/lib/Timeline/component.json +110 -0
  612. package/lib/Title/component.json +156 -0
  613. package/lib/ToggleButton/component.json +153 -0
  614. package/lib/ToggleButton/index.js +1 -1
  615. package/lib/Tooltip/component.json +176 -0
  616. package/lib/Tooltip/index.js +1 -1
  617. package/lib/Tooltip/interface.d.ts +14 -1
  618. package/lib/Tooltip/utils.js +1 -1
  619. package/lib/Transfer/component.json +157 -0
  620. package/lib/Tree/OperateBar/index.js +2 -2
  621. package/lib/Tree/Tree.js +1 -1
  622. package/lib/Tree/component.json +512 -0
  623. package/lib/Tree/interface.d.ts +1 -1
  624. package/lib/Upload/component.json +450 -0
  625. package/lib/Upload/util.js +1 -1
  626. package/lib/Utils/snack-kit-shims.d.ts +18 -0
  627. package/lib/Utils/snack-kit-shims.js +2 -0
  628. package/lib/Utils/type.d.ts +0 -2
  629. package/lib/_virtual/index.js +1 -1
  630. package/lib/_virtual/index2.js +1 -1
  631. package/lib/index.d.ts +2 -0
  632. package/lib/index.js +1 -1
  633. package/lib/locale/en_US.d.ts +361 -0
  634. package/lib/locale/en_US.js +2 -0
  635. package/lib/locale/index.d.ts +1 -723
  636. package/lib/locale/index2.js +2 -0
  637. package/lib/locale/zh_CN.d.ts +361 -0
  638. package/lib/locale/zh_CN.js +2 -0
  639. package/lib/node_modules/classnames/index.js +1 -1
  640. package/package.json +11 -4
  641. package/es/_virtual/index3.js +0 -5
  642. package/es/_virtual/index4.js +0 -5
  643. package/es/node_modules/@para-snack/core/dist/index.js +0 -5231
  644. package/lib/_virtual/index3.js +0 -2
  645. package/lib/_virtual/index4.js +0 -2
  646. package/lib/node_modules/@para-snack/core/dist/index.js +0 -20
  647. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  648. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
  649. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  650. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
@@ -0,0 +1,216 @@
1
+ {
2
+ "name": "MultiBox",
3
+ "category": "Data Entry",
4
+ "description": "键值对列表输入组件(支持增删行、补全、行级禁用)。内部用 Record<string,string>[] 作为受控值类型,默认字段名为 label/value,可通过 replaceFields 改成业务字段名",
5
+ "semantic": {
6
+ "intent": [
7
+ "键值录入",
8
+ "参数配置",
9
+ "可增删行的键值对编辑"
10
+ ],
11
+ "useCases": [
12
+ "HTTP Headers 编辑器",
13
+ "环境变量 / 配置项",
14
+ "URL Query 参数",
15
+ "Dictionary / Map 类型业务数据录入"
16
+ ],
17
+ "riskLevel": "normal"
18
+ },
19
+ "protocolSummary": "**核心:value 类型是 Record<string, string>[],默认字段名 label / value**。业务类型(如 `{key, value}[]` 或 `{name, val}[]`)通过 replaceFields 映射进来。**replaceFields 是 partial override**(L115 实证),只写 `{key: 'k'}` 会保留默认的 `value: 'value'` 映射。onChange 回调返回的字段名跟随 replaceFields(双向联动)",
20
+ "typeCastingGuide": {
21
+ "issue": "R23 通过率 2/5 fail 根因:业务类型如 `{key: string; value: string}[]` 想透传给 MultiBox.value(类型为 `Record<string,string>[]`),sub-agent 写 `value as Record<string,string>[]` —— **TS 5.x nominal 类型严格,即使结构兼容也拒绝直接 as cast** (TS2352 'may be a mistake because neither type sufficiently overlaps')",
22
+ "wrongPattern": "// ❌ 错误:TS 5.x 拒绝\nconst value = headers as Record<string, string>[];\nconst handleChange = (val: Record<string, string>[]) => setHeaders(val as HeaderPair[]);",
23
+ "correctPatternA": "**推荐:不要 cast,直接用 Record<string, string>[] 业务类型**\n```ts\ninterface HttpEditor {\n headers: Record<string, string>[]; // 业务类型直接用 MultiBox 期望类型\n onHeadersChange: (next: Record<string, string>[]) => void;\n}\n<MultiBox value={headers} onChange={onHeadersChange} replaceFields={{ key: 'key', value: 'value' }} />\n```\n业务接口字段名是 `key`/`value` 时,Record<string,string>[] 本来就能容纳,无需自定义业务类型",
24
+ "correctPatternB": "**如必须保留自定义业务类型 + 双向 cast:用 unknown 中转**\n```ts\ninterface HeaderPair { key: string; value: string; }\nconst handleChange = (val: Record<string, string>[]) => {\n onHeadersChange(val as unknown as HeaderPair[]);\n};\n<MultiBox\n value={headers as unknown as Record<string, string>[]}\n onChange={handleChange}\n replaceFields={{ key: 'key', value: 'value' }}\n/>\n```\n**注意 unknown 中转是逃避 TS 严格 cast 校验,业务有责任保证字段名真的兼容**",
25
+ "correctPatternC": "**改 replaceFields 适配业务字段名**(最干净):\n```ts\n// 业务数据是 {name, val}[],不是 {key, value}[]\nconst data: {name: string; val: string}[] = [...];\n<MultiBox\n value={data as unknown as Record<string, string>[]}\n onChange={(v) => setData(v as unknown as {name:string;val:string}[])}\n replaceFields={{ key: 'name', value: 'val' }} // ← 让 src 按 'name'/'val' 解析\n/>\n```"
26
+ },
27
+ "replaceFieldsBehavior": {
28
+ "default": "{ key: 'label', value: 'value' }",
29
+ "mergeSemantics": "**partial override(浅合并)**:src 内部 `{ ...defaultReplaceFields, ...userReplaceFields }`。只写一个字段会保留另一个默认。例如 `replaceFields={{ key: 'name' }}` 等价于 `{ key: 'name', value: 'value' }`",
30
+ "outputBinding": "onChange 回调返回的 val 数组中每项字段名**跟随 replaceFields 设置**(双向联动)。即:`replaceFields={{ key: 'name' }}` 时 onChange 收到的 val 是 `{ name: string; value: string }[]` 形态",
31
+ "warning": "改 replaceFields 后必须同步改 value/defaultValue 元素的字段名,单改一侧(只改 replaceFields 没改 value 数据)会导致 src 找不到字段,显示空内容"
32
+ },
33
+ "variants": {
34
+ "default": {
35
+ "meaning": "默认样式"
36
+ }
37
+ },
38
+ "states": [
39
+ "default",
40
+ "disabled",
41
+ "error"
42
+ ],
43
+ "idealProps": {
44
+ "size": {
45
+ "type": "enum",
46
+ "values": [
47
+ "small",
48
+ "medium",
49
+ "large"
50
+ ],
51
+ "default": "large",
52
+ "description": "控件大小(影响 TextField 行高 + padding,具体像素由 SCSS 变量决定)"
53
+ },
54
+ "label": {
55
+ "type": "ReactNode",
56
+ "description": "标题"
57
+ },
58
+ "labelTooltip": {
59
+ "type": "LabelTooltipProps",
60
+ "description": "标题旁帮助提示"
61
+ },
62
+ "labelSign": {
63
+ "type": "ReactNode",
64
+ "description": "标题旁次级提示(短文本/标签)"
65
+ },
66
+ "placeholderKey": {
67
+ "type": "ReactNode",
68
+ "description": "键侧提示语"
69
+ },
70
+ "placeholderValue": {
71
+ "type": "ReactNode",
72
+ "description": "值侧提示语"
73
+ },
74
+ "separator": {
75
+ "type": "ReactNode",
76
+ "default": "':'",
77
+ "description": "键/值之间的分隔符 UI"
78
+ },
79
+ "value": {
80
+ "type": "Record<string, string>[]",
81
+ "description": "**受控值**。每项是一行键/值对象,默认按 'label'/'value' 字段名解析,可通过 replaceFields 改字段名。**业务类型如 `{key, value}[]` 与 Record<string,string>[] 的 TS cast 处理见 typeCastingGuide**"
82
+ },
83
+ "defaultValue": {
84
+ "type": "Record<string, string>[]",
85
+ "description": "**非受控初始值**;形态同 value。仅 mount + 引用变化时灌入"
86
+ },
87
+ "onChange": {
88
+ "type": "(val: Record<string, string>[]) => void",
89
+ "description": "值变化回调;val 是**完整对象数组**(不是 string[]),字段名跟随 replaceFields 设置"
90
+ },
91
+ "replaceFields": {
92
+ "type": "{ key?: string; value?: string }",
93
+ "default": "{ key: 'label', value: 'value' }",
94
+ "description": "**partial override**(浅合并默认值,见 replaceFieldsBehavior.mergeSemantics)。改后:1) value/defaultValue 元素字段名必须同步改 2) onChange 回调返回的字段名也跟随改(双向联动)。**单改一侧 src 找不到字段,显示空内容**"
95
+ },
96
+ "required": {
97
+ "type": "boolean",
98
+ "default": "false",
99
+ "description": "是否必填(影响 label 后是否显示红星 * 等视觉)"
100
+ },
101
+ "disabled": {
102
+ "type": "boolean | { [name: string]: boolean }[]",
103
+ "default": "false",
104
+ "description": "**两种形态**:1) `true` 整体禁用所有行所有字段;2) `{ [name: string]: boolean }[]` **行级 + 字段级禁用**——数组每项对应一行,对象 key 对应 replaceFields 的字段名(默认 'label'/'value'),value 为 true 时禁用该行该字段。例如 `[{label: true, value: false}, {label: false, value: true}]` 禁用第 1 行的 key 列 + 第 2 行的 value 列"
105
+ },
106
+ "disabledTooltip": {
107
+ "type": "TooltipProps",
108
+ "description": "禁用态 hover 提示"
109
+ },
110
+ "helperText": {
111
+ "type": "ReactNode | Record<string, ReactNode>[]",
112
+ "description": "**两种形态**:① ReactNode/string = 整体错误提示文字(typeof === 'string' 时激活 error 视觉,所有行都标红);② Record<string, ReactNode>[] = **row-level + 字段级错误**,数组每项对应一行,对象 key 对应 replaceFields 字段名,value 为错误文本"
113
+ },
114
+ "hideErrorDom": {
115
+ "type": "boolean | null",
116
+ "description": "见 HelperText 同名 prop:true=无错误不渲染,false=都渲染(布局稳定),null=永不渲染"
117
+ },
118
+ "fetchSuggestionsKey": {
119
+ "type": "(val: string, cb: (data: Record<string, unknown>[]) => void) => void",
120
+ "description": "**键侧补全数据源**(用户输入 key 时调用)。**cb 接受 Record<string, unknown>[]** 不是 string[]。每项至少要有 label 字段(显示在下拉),value 字段(选中后填回)。例:`cb([{label: 'Content-Type', value: 'Content-Type'}, ...])`。**通常与 fetchSuggestionsValue 成对使用**"
121
+ },
122
+ "fetchSuggestionsValue": {
123
+ "type": "(val: string, cb: (data: Record<string, unknown>[]) => void) => void",
124
+ "description": "**值侧补全数据源**;cb 形态同 fetchSuggestionsKey"
125
+ },
126
+ "keyOtherProps": {
127
+ "type": "(index: number, val: string) => TextFieldProps",
128
+ "description": "键侧 TextField 的额外 props(按 index 区分行,可实现某行只读 / 加 prefix 等)"
129
+ },
130
+ "valueOtherProps": {
131
+ "type": "(index: number, val: string) => TextFieldProps",
132
+ "description": "值侧 TextField 的额外 props"
133
+ }
134
+ },
135
+ "commonMisconceptions": {
136
+ "M1": {
137
+ "wrong": "用 `as Record<string, string>[]` 把业务类型 `HeaderPair[]` / `EnvVar[]` 强制转给 MultiBox.value",
138
+ "result": "**TS 5.x 报错 TS2352** 'Conversion may be a mistake because neither type sufficiently overlaps' —— TS nominal 类型严格,即使结构兼容也拒绝。R23 MultiBox-001/002/003 fail 都是这个",
139
+ "fix": "**3 种方案**(详见 typeCastingGuide):A) 业务直接用 Record<string,string>[] 类型(最干净);B) 用 `as unknown as` 中转(逃避 TS 严格 cast);C) 改 replaceFields 适配业务字段名 + unknown 中转"
140
+ },
141
+ "M2": {
142
+ "wrong": "改 replaceFields 字段名但忘记同步改 value 数据: `replaceFields={{ key: 'name' }} value={[{label: 'x', value: 'y'}]}`(value 仍按默认 label/value 字段名)",
143
+ "result": "src 按 replaceFieldsCom.key='name' 在 value 元素里找 `.name` 字段,**找不到 → 显示空内容**",
144
+ "fix": "改 replaceFields 时必须同步改 value 元素字段名:`replaceFields={{ key: 'name' }} value={[{name: 'x', value: 'y'}]}`(注意 value 字段也要保留或同时改 replaceFields.value)"
145
+ },
146
+ "M3": {
147
+ "wrong": "假设 replaceFields 是完全替换语义: `replaceFields={{ key: 'k' }}` 期望 value 字段名也是 'k'",
148
+ "result": "**replaceFields 是 partial override**(浅合并),只写 key 会保留默认 value:'value'。所以 `value={[{k: 'x', val: 'y'}]}` 不工作,需写成 `[{k: 'x', value: 'y'}]`",
149
+ "fix": "1) 单字段改:确保 value 用对应字段名 + 默认 value:'value';2) 双字段都改:`replaceFields={{ key: 'k', value: 'v' }}` 双向同步"
150
+ },
151
+ "M4": {
152
+ "wrong": "假设 disabled 只是 boolean: `disabled={ rowIndex === 0 }`",
153
+ "result": "整体禁用整个 MultiBox,而非'第 1 行禁用'。**disabled 支持 `{ [name]: boolean }[]` 形态做行级 + 字段级禁用**",
154
+ "fix": "用对象数组形态:`disabled={[{label: true, value: false}, {label: false, value: false}]}`(第 1 行 key 列禁用,其他全开)"
155
+ },
156
+ "M5": {
157
+ "wrong": "用 helperText: string 期望某行某列单独红框",
158
+ "result": "**string 形态的 helperText 激活整体错误视觉**(所有行标红),不是 row-level",
159
+ "fix": "row-level + 字段级错误:用 `Record<string, ReactNode>[]` 形态: `helperText={[{label: 'key 重复'}, {}, {value: '格式错误'}]}`(第 1 行 key 列报错 + 第 3 行 value 列报错)"
160
+ }
161
+ },
162
+ "do": [
163
+ "**优先用 Record<string, string>[] 作为业务类型**,避免 TS cast(M1 patternA)",
164
+ "**必须自定义业务类型**:用 `as unknown as` 中转(M1 patternB)",
165
+ "**业务字段名不叫 label/value**:同时改 replaceFields **和** value/defaultValue 数据字段名(M2/M3)",
166
+ "行级禁用:用 `disabled={[{label/value: boolean}]}` 对象数组形态(M4)",
167
+ "行级错误:用 `helperText={[{label/value: errorMsg}]}` 对象数组形态(M5)",
168
+ "自动补全:fetchSuggestionsKey 和 fetchSuggestionsValue 通常成对使用,cb 接受 `{label, value}` 对象数组(不是 string[])"
169
+ ],
170
+ "dont": [
171
+ "**不要**直接 `as Record<string, string>[]` 强制 cast 业务类型——TS5 严格拒绝(M1)",
172
+ "**不要**单改 replaceFields 而不改 value 字段名——src 找不到字段(M2)",
173
+ "**不要**假设 replaceFields 完全替换——是 partial override(M3)",
174
+ "**不要**假设 disabled 只能 boolean——对象数组形态做行级禁用(M4)",
175
+ "**不要**用 string helperText 期望 row-level 错误——整体激活(M5)",
176
+ "键或值过长时不做截断/省略——TextField 自身样式",
177
+ "复杂嵌套对象录入——MultiBox 仅 2 层(key + value),换 FieldForm + dynamicFields"
178
+ ],
179
+ "events": {
180
+ "onChange": {
181
+ "signature": "(val: Record<string, string>[]) => void",
182
+ "asyncSupported": false,
183
+ "examples": [
184
+ "onChange={(val) => setHeaders(val)} — val 是完整对象数组,字段名跟随 replaceFields 设置(默认 label/value)",
185
+ "增/删行也触发 onChange,val 是操作后完整的新数组(不是 diff)",
186
+ "行内 TextField 值变化实时触发 onChange(不是 onBlur)"
187
+ ],
188
+ "commonMistakes": [
189
+ "期望 onChange 返回 string[]——实际返回 Record<string, string>[](对象数组),需取对应字段:val.map(v => v.value)",
190
+ "用 as Record<string, string>[] 把业务类型传给 onChange setter——TS 5.x 拒绝结构兼容 cast,需用 as unknown as 中转",
191
+ "只处理 onChange 不处理新增/删除——增删操作也走同一 onChange,val 是全量数组,不是操作了哪一行"
192
+ ]
193
+ }
194
+ },
195
+ "typescriptPitfalls": [
196
+ {
197
+ "issue": "业务类型 `{key: string; value: string}[]` 与 `Record<string, string>[]` 在 TS 5.x 不能直接 as cast",
198
+ "wrong": "const headers: {key: string; value: string}[] = []; <MultiBox value={headers as Record<string, string>[]} /> // TS2352 拒绝",
199
+ "right": "<MultiBox value={headers as unknown as Record<string, string>[]} replaceFields={{ key: 'key', value: 'value' }} /> // unknown 中转"
200
+ },
201
+ {
202
+ "issue": "改 replaceFields.key 但不改 value 数据字段名,src 找不到字段显示空",
203
+ "wrong": "replaceFields={{ key: 'name' }} value={[{label: 'x', value: 'y'}]} // src 按 'name' 读,label 字段被忽略",
204
+ "right": "replaceFields={{ key: 'name' }} value={[{name: 'x', value: 'y'}]} // replaceFields 和数据字段名必须同步"
205
+ },
206
+ {
207
+ "issue": "disabled 只传 boolean 期望行级禁用——boolean true 是整体禁用,行级需用对象数组",
208
+ "wrong": "disabled={rowIndex === 0} // 期望第一行禁用,实际 disabled=true 时整体禁用所有行",
209
+ "right": "disabled={[{label: true, value: false}, {label: false, value: false}]} // 对象数组:第一行 key 列禁用"
210
+ }
211
+ ],
212
+ "mapping": {
213
+ "realComponent": "MultiBox",
214
+ "adapter": null
215
+ }
216
+ }
@@ -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"),x=require("react"),B=require("../TextField/index.js"),se=require("../Label/index.js"),re=require("../HelperText/index.js"),le=require("../node_modules/@para-ui/icons/Delete/index.js"),oe=require("../node_modules/@para-ui/icons/PlusCircleF/index.js"),f=require("../GlobalContext/constant.js"),ie=require("../GlobalContext/useFormatMessage.js"),ae=require("./lang/index.js"),ne=require("../Tooltip/index.js");;/* empty css */const O=n=>{const{className:y,style:K,size:m="large",placeholderKey:P="",placeholderValue:L="",label:C="",labelTooltip:p,labelSign:R,disabled:o=!1,disabledTooltip:b,required:D=!1,error:I=!1,hideErrorDom:z,separator:h=":",helperText:d="",value:j,replaceFields:v,onChange:a,fetchSuggestionsKey:E,fetchSuggestionsValue:g,keyOtherProps:N,valueOtherProps:$}=n,T=!!(d&&typeof d=="string"),H=d instanceof Array,w=ie.default("MultiBox",ae.default),[l,c]=x.useState([]),[i,G]=x.useState({key:"label",value:"value"});x.useEffect(()=>{n.defaultValue!==void 0&&c([...n.defaultValue])},[]),x.useEffect(()=>{j!==void 0&&c([...j])},[j]),x.useEffect(()=>{if(v){const t={...i,...v};G(t)}},[v]);const q=(t,e)=>{let s={error:!1,helperText:""};if(H){const u=d[t];u&&u[e]&&(s={error:!0,helperText:u[e]})}return s},J=()=>{o!==!0&&(l.push({}),n.value===void 0&&c([...l]),a&&a(l))},Q=t=>()=>{o!==!0&&(l.splice(t,1),n.value===void 0&&c([...l]),a&&a(l))},S=(t,e)=>s=>{l[e][t]=s.target.value,n.value===void 0&&c([...l]),a&&a(l)},U=()=>{if(!C&&!R)return null;const t=()=>{let e="multi-box-label";return p&&p.className&&(e+=` ${p.className}`),e};return r.jsxRuntimeExports.jsx(se.default,{label:C,required:D,labelSign:R,...p,className:t()})},W=(t,e)=>{const s=t[i.key||""]||"",u=t[i.value||""]||"",ee=o instanceof Array?o[e]?.[s]:o,te=o instanceof Array?o[e]?.[u]:o,A=q(e,i.key||""),M=q(e,i.value||"");let _="multi-box-content-item-input";return(A.error||M.error)&&(_+=" multi-box-content-item-input-error"),r.jsxRuntimeExports.jsxs("div",{className:_,children:[r.jsxRuntimeExports.jsx(B.TextField,{className:"multi-box-text-field",size:m,disabled:ee,placeholder:P,value:s,...A,onChange:S(i.key||"",e),fetchSuggestions:E?V("key"):void 0,onSelect:k(i.key||"",e),...N&&N(e,s)}),h&&r.jsxRuntimeExports.jsx("span",{className:"multi-box-separator",children:h}),r.jsxRuntimeExports.jsx(B.TextField,{className:"multi-box-text-field",size:m,disabled:te,placeholder:L,value:u,...M,onChange:S(i.value||"",e),fetchSuggestions:g?V("value"):void 0,onSelect:k(i.value||"",e),...$&&$(e,u)})]})},X=()=>r.jsxRuntimeExports.jsx("div",{className:"multi-box-content",children:l.map((t,e)=>r.jsxRuntimeExports.jsxs("div",{className:"multi-box-content-item",children:[W(t,e),o!==!0&&r.jsxRuntimeExports.jsx("div",{className:"opera-box",children:r.jsxRuntimeExports.jsx("span",{className:"del-box",onClick:Q(e),children:r.jsxRuntimeExports.jsx(le.Delete,{})})})]},e))}),V=t=>(e,s)=>{t==="key"?E&&E(e,s):g&&g(e,s)},k=(t,e)=>s=>{typeof s=="object"&&s!==null?l[e][t]=s.value:l[e][t]=s,n.value===void 0&&c([...l]),a&&a(l)},Y=()=>{let t=`${f.$prefixCls}-multi-box multi-box`;return y&&(t+=` ${y}`),m&&(t+=` ${f.$prefixCls}-multi-box-${m}`),I&&(t+=` ${f.$prefixCls}-multi-box-error`),o===!0&&(t+=` ${f.$prefixCls}-multi-box-disabled`),h&&(t+=` ${f.$prefixCls}-multi-box-separator`),t},F=()=>r.jsxRuntimeExports.jsxs("div",{className:"multi-box-add",onClick:J,children:[r.jsxRuntimeExports.jsx(oe.PlusCircleF,{}),r.jsxRuntimeExports.jsx("span",{children:w({id:"add"})})]}),Z=()=>b?r.jsxRuntimeExports.jsx(ne.Tooltip,{disabled:!0,placement:b.placement||"top",...b,children:F()}):F();return r.jsxRuntimeExports.jsxs("div",{className:Y(),style:K,children:[U(),X(),Z(),r.jsxRuntimeExports.jsx(re.default,{className:"multi-box-error-text",error:T,helperText:T?d:void 0,hideErrorDom:z})]})};exports.MultiBox=O;exports.default=O;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const r=require("../_virtual/jsx-runtime.js"),x=require("react"),B=require("../TextField/index.js"),se=require("../Label/index.js"),re=require("../HelperText/index.js"),le=require("../node_modules/@para-ui/icons/Delete/index.js"),oe=require("../node_modules/@para-ui/icons/PlusCircleF/index.js"),m=require("../GlobalContext/constant.js"),ie=require("../GlobalContext/useFormatMessage.js"),ae=require("./lang/index.js"),ne=require("../Tooltip/index.js");;/* empty css */const O=u=>{const{className:y,style:K,size:f="large",placeholderKey:P="",placeholderValue:L="",label:C="",labelTooltip:p,labelSign:R,disabled:o=!1,disabledTooltip:b,required:D=!1,error:I=!1,hideErrorDom:z,separator:h=":",helperText:d="",value:j,replaceFields:v,onChange:n,fetchSuggestionsKey:E,fetchSuggestionsValue:g,keyOtherProps:N,valueOtherProps:$}=u,T=!!(d&&typeof d=="string"),H=d instanceof Array,w=ie.default("MultiBox",ae.default),[l,c]=x.useState([]),[i,G]=x.useState({key:"label",value:"value"});x.useEffect(()=>{u.defaultValue!==void 0&&c([...u.defaultValue])},[]),x.useEffect(()=>{j!==void 0&&c([...j])},[j]),x.useEffect(()=>{if(v){const t={...i,...v};G(t)}},[v]);const q=(t,e)=>{let s={error:!1,helperText:""};if(H){const a=d[t];a&&a[e]&&(s={error:!0,helperText:a[e]})}return s},J=()=>{o!==!0&&(l.push({}),u.value===void 0&&c([...l]),n&&n(l))},Q=t=>()=>{o!==!0&&(l.splice(t,1),u.value===void 0&&c([...l]),n&&n(l))},S=(t,e)=>s=>{l[e][t]=s.target.value,u.value===void 0&&c([...l]),n&&n(l)},U=()=>{if(!C&&!R)return null;const t=()=>{let e="multi-box-label";return p&&p.className&&(e+=` ${p.className}`),e};return r.jsxRuntimeExports.jsx(se.default,{label:C,required:D,labelSign:R,...p,className:t()})},W=(t,e)=>{const s=t[i.key||""]||"",a=t[i.value||""]||"",ee=o instanceof Array?o[e]?.[s]:o,te=o instanceof Array?o[e]?.[a]:o,A=q(e,i.key||""),M=q(e,i.value||"");let _="multi-box-content-item-input";return(A.error||M.error)&&(_+=" multi-box-content-item-input-error"),r.jsxRuntimeExports.jsxs("div",{className:_,children:[r.jsxRuntimeExports.jsx(B.TextField,{className:"multi-box-text-field",size:f,disabled:ee,placeholder:P,value:s,...A,onChange:S(i.key||"",e),fetchSuggestions:E?V("key"):void 0,onSelect:k(i.key||"",e),...N&&N(e,s)}),h&&r.jsxRuntimeExports.jsx("span",{className:"multi-box-separator",children:h}),r.jsxRuntimeExports.jsx(B.TextField,{className:"multi-box-text-field",size:f,disabled:te,placeholder:L,value:a,...M,onChange:S(i.value||"",e),fetchSuggestions:g?V("value"):void 0,onSelect:k(i.value||"",e),...$&&$(e,a)})]})},X=()=>r.jsxRuntimeExports.jsx("div",{className:"multi-box-content",children:l.map((t,e)=>r.jsxRuntimeExports.jsxs("div",{className:"multi-box-content-item",children:[W(t,e),o!==!0&&r.jsxRuntimeExports.jsx("div",{className:"opera-box",children:r.jsxRuntimeExports.jsx("span",{className:"del-box",onClick:Q(e),children:r.jsxRuntimeExports.jsx(le.Delete,{})})})]},e))}),V=t=>(e,s)=>{t==="key"?E&&E(e,s):g&&g(e,s)},k=(t,e)=>s=>{if(typeof s=="object"&&s!==null){const a=s.value;l[e][t]=a}else l[e][t]=s;u.value===void 0&&c([...l]),n&&n(l)},Y=()=>{let t=`${m.$prefixCls}-multi-box multi-box`;return y&&(t+=` ${y}`),f&&(t+=` ${m.$prefixCls}-multi-box-${f}`),I&&(t+=` ${m.$prefixCls}-multi-box-error`),o===!0&&(t+=` ${m.$prefixCls}-multi-box-disabled`),h&&(t+=` ${m.$prefixCls}-multi-box-separator`),t},F=()=>r.jsxRuntimeExports.jsxs("div",{className:"multi-box-add",onClick:J,children:[r.jsxRuntimeExports.jsx(oe.PlusCircleF,{}),r.jsxRuntimeExports.jsx("span",{children:w({id:"add"})})]}),Z=()=>b?r.jsxRuntimeExports.jsx(ne.Tooltip,{disabled:!0,placement:b.placement||"top",...b,children:F()}):F();return r.jsxRuntimeExports.jsxs("div",{className:Y(),style:K,children:[U(),X(),Z(),r.jsxRuntimeExports.jsx(re.default,{className:"multi-box-error-text",error:T,helperText:T?d:void 0,hideErrorDom:z})]})};exports.MultiBox=O;exports.default=O;
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,184 @@
1
+ {
2
+ "name": "Notification",
3
+ "category": "Feedback",
4
+ "description": "全局通知提醒框,通过命令式 API(Notification.open / .success / .info / .warning / .error)触发,支持角落定位、标题 + 内容 + 操作按钮、可关闭回调、key 管理",
5
+ "semantic": {
6
+ "intent": [
7
+ "系统通知",
8
+ "重要提醒",
9
+ "复杂反馈"
10
+ ],
11
+ "useCases": [
12
+ "系统升级通知",
13
+ "后台任务完成提醒",
14
+ "带操作按钮的系统消息"
15
+ ],
16
+ "riskLevel": "normal"
17
+ },
18
+ "protocolSummary": "**命令式 API,不是 React 组件**。调用方式:\n```\nNotification.success({ message: '标题', description: '内容', duration: 3 })\nNotification.info({ message: '提示', description: '详情' })\nNotification.warning({ message: '警告', description: '说明' })\nNotification.error({ message: '错误', description: '信息' })\nNotification.open({ message: '标题', description: '内容', type: 'success' }) // open 是 success/info/warning/error 的底层\nNotification.close('my-key') // 关闭指定 key 的通知\nNotification.destroy() // 关闭所有通知\nNotification.config({ placement, top, maxCount, duration }) // 全局配置\n```\n**duration 单位是秒**(与 Message.duration 毫秒不同!)。默认 5 秒自动关闭;传 null 不自动关闭。",
19
+ "variants": {
20
+ "success": { "meaning": "成功(绿色 ✓ 图标)" },
21
+ "info": { "meaning": "普通信息(蓝色 i 图标)" },
22
+ "warning": { "meaning": "警告(黄色 ! 图标)" },
23
+ "error": { "meaning": "错误(红色 × 图标)" }
24
+ },
25
+ "states": [
26
+ "opening",
27
+ "closing"
28
+ ],
29
+ "idealProps": {
30
+ "message": {
31
+ "type": "ReactNode",
32
+ "description": "通知标题(必填),通知卡片上方的粗体文字"
33
+ },
34
+ "description": {
35
+ "type": "ReactNode",
36
+ "description": "通知正文内容;与 message 同时出现时,message 作为标题,description 作为正文"
37
+ },
38
+ "duration": {
39
+ "type": "number | null",
40
+ "default": 5,
41
+ "description": "**自动关闭延时,单位秒**(注意:与 Message 组件的毫秒单位不同!);传 null 不自动关闭(需用户点击关闭按钮或调用 Notification.close(key))"
42
+ },
43
+ "placement": {
44
+ "type": "enum",
45
+ "values": ["topLeft", "topRight", "bottomLeft", "bottomRight"],
46
+ "default": "topRight",
47
+ "description": "弹出位置,4 个角落,topRight 最常用"
48
+ },
49
+ "key": {
50
+ "type": "string",
51
+ "description": "通知唯一标志;传了 key 才能用 Notification.close(key) 程序性关闭;同一 key 再次 open 会更新已有通知"
52
+ },
53
+ "onClose": {
54
+ "type": "() => void",
55
+ "description": "关闭时触发(自动关闭 + 用户手动关闭都触发)"
56
+ },
57
+ "onClick": {
58
+ "type": "() => void",
59
+ "description": "点击通知内容区域(非关闭按钮)时触发"
60
+ },
61
+ "btn": {
62
+ "type": "ReactNode",
63
+ "description": "通知卡片底部自定义操作区域(如 '立即更新' 按钮)"
64
+ },
65
+ "icon": {
66
+ "type": "ReactNode",
67
+ "description": "自定义图标,覆盖 type 默认图标"
68
+ },
69
+ "top": {
70
+ "type": "number",
71
+ "default": 20,
72
+ "description": "topLeft/topRight 时距顶部距离(px)"
73
+ },
74
+ "bottom": {
75
+ "type": "number",
76
+ "default": 20,
77
+ "description": "bottomLeft/bottomRight 时距底部距离(px)"
78
+ },
79
+ "getContainer": {
80
+ "type": "() => HTMLElement",
81
+ "description": "渲染容器,默认 document.body"
82
+ }
83
+ },
84
+ "commonPatterns": {
85
+ "basic": "Notification.success({ message: '操作成功', description: '数据已保存', duration: 3 })",
86
+ "persistent": "Notification.warning({ message: '需要确认', description: '请及时处理', duration: null, key: 'warn-1' });\n// 处理完成后:\nNotification.close('warn-1');",
87
+ "withButton": "Notification.info({\n message: '发现新版本',\n description: 'v2.0.0 已发布',\n duration: null,\n key: 'update',\n btn: <Button onClick={() => { window.open(releaseUrl); Notification.close('update'); }}>立即更新</Button>\n});",
88
+ "globalConfig": "Notification.config({ placement: 'topRight', top: 60, maxCount: 5, duration: 3 });"
89
+ },
90
+ "commandApi": {
91
+ "Notification.open": {
92
+ "signature": "(args: ArgsProps) => void",
93
+ "description": "打开通知,所有 ideaProps 字段均为 ArgsProps 的字段"
94
+ },
95
+ "Notification.success": {
96
+ "signature": "(args: ArgsProps) => void",
97
+ "description": "等价于 Notification.open({...args, type: 'success'})"
98
+ },
99
+ "Notification.info": {
100
+ "signature": "(args: ArgsProps) => void"
101
+ },
102
+ "Notification.warning": {
103
+ "signature": "(args: ArgsProps) => void",
104
+ "description": "Notification.warn 是 Notification.warning 的别名"
105
+ },
106
+ "Notification.error": {
107
+ "signature": "(args: ArgsProps) => void"
108
+ },
109
+ "Notification.close": {
110
+ "signature": "(key: string) => void",
111
+ "description": "关闭指定 key 的通知,遍历所有 placement 实例"
112
+ },
113
+ "Notification.destroy": {
114
+ "signature": "() => void",
115
+ "description": "销毁所有通知实例(包括已显示的和正在动画的)"
116
+ },
117
+ "Notification.config": {
118
+ "signature": "(options: ConfigProps) => void",
119
+ "description": "全局配置,应用入口调用一次"
120
+ }
121
+ },
122
+ "do": [
123
+ "用于比 Message 更重要的、需要用户关注的全局通知(如系统升级、任务完成)",
124
+ "**duration 单位是秒**(默认 5),不是毫秒——与 Message 组件不同",
125
+ "需要程序性关闭时传 key 字段并用 Notification.close(key)",
126
+ "App 入口调用 Notification.config 设置全局 placement / maxCount / duration"
127
+ ],
128
+ "dont": [
129
+ "频繁使用 Notification 打断用户操作——轻提示用 Message,重要操作确认用 FunctionModal",
130
+ "堆叠过多——配合 maxCount 限制同时显示数量",
131
+ "把 duration 写成毫秒——duration 是秒,写 3000 会导致通知 3000 秒后才关闭"
132
+ ],
133
+ "events": {
134
+ "onClose": {
135
+ "signature": "() => void",
136
+ "asyncSupported": false,
137
+ "examples": [
138
+ "Notification.info({ message: '提示', onClose: () => console.log('已关闭') }) — 自动关闭和手动关闭都触发",
139
+ "持久通知 + 关闭回调:Notification.warning({ message: '警告', duration: null, key: 'w1', onClose: () => markAsRead() })",
140
+ "配合 key 程序关闭:Notification.close('w1') 也会触发 onClose"
141
+ ],
142
+ "commonMistakes": [
143
+ "期望 onClose 签名是 (e) => void——实际无参 () => void",
144
+ "传了 onClose 但没有显式关闭路径——duration=null 时通知不自动关闭,onClose 永不触发(除非用户点 × 或程序调用 close)",
145
+ "在 onClose 里再次调 Notification.open 期望实现替换效果——会新开一条通知,建议用 key 复用已有实例"
146
+ ]
147
+ },
148
+ "onClick": {
149
+ "signature": "() => void",
150
+ "asyncSupported": false,
151
+ "examples": [
152
+ "Notification.info({ message: '新消息', onClick: () => router.push('/messages') }) — 点击跳转",
153
+ "onClick 不关闭通知——需在 onClick 里手动调 Notification.close(key) 或让 duration 到期",
154
+ "onClick 和 btn 的 onClick 独立——通知区域点击 + 底部按钮点击是两个独立事件"
155
+ ],
156
+ "commonMistakes": [
157
+ "期望点击通知后自动关闭——onClick 不触发关闭,需在 onClick 里手动 Notification.close(args.key)",
158
+ "在 btn 里写关闭逻辑而不传 key——没有 key 就无法调 Notification.close,需预先生成 key",
159
+ "期望 onClick 阻止通知关闭——点击关闭按钮(×)触发的是关闭逻辑,不能被 onClick 拦截"
160
+ ]
161
+ }
162
+ },
163
+ "typescriptPitfalls": [
164
+ {
165
+ "issue": "duration 单位是秒,不是毫秒——与 Message 不一致是常见陷阱",
166
+ "wrong": "Notification.success({ message: '成功', duration: 3000 }) // 3000 秒后才关闭!不是 3 秒",
167
+ "right": "Notification.success({ message: '成功', duration: 3 }) // 3 秒后自动关闭"
168
+ },
169
+ {
170
+ "issue": "Notification 是命令式 API,default export 是 api 对象,不是 React 组件,不能写 JSX",
171
+ "wrong": "import Notification from '@para-ui/core/Notification'; return <Notification message='提示' />; // JSX 类型错误",
172
+ "right": "import Notification from '@para-ui/core/Notification'; Notification.info({ message: '提示' }); // 命令式调用"
173
+ },
174
+ {
175
+ "issue": "message 类型是 ReactNode,但 ArgsProps 中 message 是必填字段,不传会导致 TS 报错",
176
+ "wrong": "Notification.open({ description: '内容' }) // TS2345: Property 'message' is missing",
177
+ "right": "Notification.open({ message: '标题', description: '内容' }) // message 必填"
178
+ }
179
+ ],
180
+ "mapping": {
181
+ "realComponent": "Notification",
182
+ "adapter": null
183
+ }
184
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "name": "OperateBtn",
3
+ "category": "General",
4
+ "description": "表格列操作按钮组,将多个行操作收纳为图标按钮 + 更多浮层,常配合 Table 使用",
5
+ "semantic": {
6
+ "intent": [
7
+ "行操作",
8
+ "批量操作",
9
+ "操作收纳"
10
+ ],
11
+ "useCases": [
12
+ "表格操作列",
13
+ "卡片操作区",
14
+ "工具栏"
15
+ ],
16
+ "riskLevel": "normal"
17
+ },
18
+ "variants": {
19
+ "default": {
20
+ "meaning": "默认样式"
21
+ }
22
+ },
23
+ "states": [
24
+ "default",
25
+ "loading"
26
+ ],
27
+ "idealProps": {
28
+ "list": {
29
+ "type": "OperateBtnListProps[]",
30
+ "itemSchema": {
31
+ "key": { "type": "string", "description": "唯一标识(与组件 key prop 配合,用于 loadingMapping 索引)" },
32
+ "label": { "type": "ReactNode", "description": "按钮显示文案" },
33
+ "icon": { "type": "ReactNode", "description": "按钮图标(外显按钮展示区域,显示 icon 而非 label)" },
34
+ "disabled": { "type": "boolean", "description": "是否禁用" },
35
+ "danger": { "type": "boolean", "description": "是否为危险按钮(红色)" },
36
+ "toolTipTitle": { "type": "ReactNode", "description": "hover tooltip 文案;外显按钮默认取 toolTipTitle ?? label 作 tooltip" },
37
+ "popConfirmProps": { "type": "PopConfirmProps", "description": "点击弹出气泡确认框的配置" },
38
+ "onClick": { "type": "(item: OperateBtnListProps, e: any) => void | Promise<boolean|any>", "description": "单项点击事件(优先级高于组件级 onClick);Promise resolve(false) 关闭 loading" }
39
+ },
40
+ "description": "按钮列表配置(每项含 label/icon/key/disabled/danger/toolTipTitle/popConfirmProps/onClick)"
41
+ },
42
+ "showNum": {
43
+ "type": "number",
44
+ "default": 3,
45
+ "description": "前 N 个按钮外显,超出折叠到更多浮层;⚠️ 仅 list.length > showNum + 1 才出现更多按钮(差值严格大于 1),若 list.length === showNum+1 最后一个也外显不进更多"
46
+ },
47
+ "key": {
48
+ "type": "string",
49
+ "default": "key",
50
+ "description": "指定 list 项中作为 loadingMapping 索引的字段名(不是 React key,是 list 项对象里用于 loadingMapping 映射的字段路径名)"
51
+ },
52
+ "size": {
53
+ "type": "enum",
54
+ "values": ["small", "medium", "large"],
55
+ "default": "small",
56
+ "description": "按钮大小;表格行内推荐 small"
57
+ },
58
+ "placement": {
59
+ "type": "Placement",
60
+ "default": "bottom-end",
61
+ "description": "外显按钮 Tooltip 及更多浮层的定位方向(src/OperateBtn/index.tsx:88 interface 实证,默认 bottom-end)"
62
+ },
63
+ "clickCloseMore": {
64
+ "type": "boolean",
65
+ "default": true,
66
+ "description": "点击 list 项后是否自动关闭更多浮层"
67
+ },
68
+ "onClick": {
69
+ "type": "(item: OperateBtnListProps, e: any) => void | Promise<boolean | any>",
70
+ "description": "组件级点击事件;list 项自带 item.onClick 时对本项失效(item.onClick 优先级更高);非受控 loading 下 Promise resolve(false) 表示失败、保持按钮 loading;resolve(true/undefined) 关闭 loading"
71
+ },
72
+ "loadingMapping": {
73
+ "type": "{[name: string]: boolean}",
74
+ "description": "受控 loading 映射;键 = item[key] 字段值;传入后 onClick 返回值不再控制 loading,由外部控制"
75
+ },
76
+ "popoverClassName": {
77
+ "type": "string",
78
+ "description": "更多浮层的自定义 className(src/OperateBtn/index.tsx:73 interface 实证)"
79
+ }
80
+ },
81
+ "do": [
82
+ "表格行内操作首选 OperateBtn,将编辑/删除/查看等图标按钮组合为一组,超出 showNum 自动收纳到更多",
83
+ "危险操作(删除等)配合 list[i].popConfirmProps 弹二次确认,避免误操作",
84
+ "提供 loading 状态反馈:短请求用内置非受控 loading(onClick 返回 Promise),长请求或多处联动用 loadingMapping 受控",
85
+ "list 每项必须有 icon 或 toolTipTitle 其中之一,外显按钮以图标展示,tooltip 才能给用户提示操作语义"
86
+ ],
87
+ "dont": [
88
+ "不要在 loadingMapping 键中使用数组下标——键应匹配 item[key] 字段(默认 item.key),而非 list 索引",
89
+ "危险操作不加 popConfirmProps 确认直接删除",
90
+ "操作按钮超过 5 个不分组——超出部分应通过 showNum 折叠,或拆分为多个操作区"
91
+ ],
92
+ "events": {
93
+ "onClick": {
94
+ "signature": "(item: OperateBtnListProps, e: any) => void | Promise<boolean | any>",
95
+ "asyncSupported": true,
96
+ "examples": [
97
+ "基本同步点击:onClick={(item, e) => { handleAction(item); }}",
98
+ "异步操作自动 loading:onClick={async (item, e) => { await deleteRow(item.id); return true; }} // resolve(true) 关闭 loading",
99
+ "配合 key prop 做受控 loading:loadingMapping={{ [row.id]: isDeleting }} // 外部控制 loading 状态"
100
+ ],
101
+ "commonMistakes": [
102
+ "item.onClick 与组件级 onClick 混用——item.onClick 存在时组件级 onClick 对该项失效,二选一即可",
103
+ "期望 Promise resolve(false) 关闭 loading——resolve(false) 是失败语义,loading 保持;resolve(true/undefined) 才关闭",
104
+ "同时传 loadingMapping 又在 onClick 里 return Promise——传 loadingMapping 后 Promise 返回值不影响 loading,由外部 state 控制"
105
+ ]
106
+ }
107
+ },
108
+ "typescriptPitfalls": [
109
+ {
110
+ "issue": "OperateBtnListProps 的 key 字段与 React 的 key 属性同名但语义不同",
111
+ "wrong": "// 期望 React key:\nlist={[{ key: 'edit', label: '编辑', icon: <Edit /> }]} // OperateBtn 的 key prop 用于 loadingMapping 索引,不是 React reconcile key",
112
+ "right": "// loadingMapping 键要和 list 项里的 key 字段值对应:\nlist={[{ key: 'edit', label: '编辑', icon: <Edit /> }]}\nloadingMapping={{ edit: isLoading }}"
113
+ },
114
+ {
115
+ "issue": "OperateBtnProps.key 是字符串(字段路径名),不是数组下标",
116
+ "wrong": "<OperateBtn key='id' list={list} loadingMapping={{ 0: true }} /> // 用数组下标做 mapping 键",
117
+ "right": "<OperateBtn key='id' list={list} loadingMapping={{ [list[0].id]: true }} /> // 键应是 item[keyProp] 的值"
118
+ },
119
+ {
120
+ "issue": "list 每项的 onClick 签名是 (item, e),不是单参数 (e)",
121
+ "wrong": "list={[{ icon: <Edit />, onClick: (e) => e.stopPropagation() }]} // 签名不匹配",
122
+ "right": "list={[{ icon: <Edit />, onClick: (item, e) => { e.stopPropagation(); handleEdit(item); } }]}"
123
+ },
124
+ {
125
+ "issue": "@para-ui/icons 中不存在 View 和 Share 图标,使用会导致 TS2307 模块找不到",
126
+ "wrong": "import View from '@para-ui/icons/View'; // TS2307: 找不到模块\nimport Share from '@para-ui/icons/Share'; // TS2307: 找不到模块",
127
+ "right": "import PreviewOpen from '@para-ui/icons/PreviewOpen'; // 查看/预览\nimport More from '@para-ui/icons/More'; // 更多操作\n// 可用图标:Edit, Delete, Copy, More, PreviewOpen, PreviewClose 等"
128
+ }
129
+ ],
130
+ "mapping": {
131
+ "realComponent": "OperateBtn",
132
+ "adapter": null
133
+ }
134
+ }
@@ -21,10 +21,10 @@ export interface OperateBtnListProps {
21
21
  /** 设置危险按钮 */
22
22
  danger?: boolean;
23
23
  /** 点击事件 */
24
- onClick?: (item: OperateBtnListProps, e: any) => void | Promise<boolean | any>;
24
+ onClick?: (item: OperateBtnListProps, e: React.MouseEvent) => void | Promise<boolean | void>;
25
25
  /** 气泡确认框参数 */
26
26
  popConfirmProps?: PopConfirmProps;
27
- [name: string]: any;
27
+ [name: string]: unknown;
28
28
  }
29
29
  export interface OperateBtnProps {
30
30
  /** 样式class */
@@ -50,7 +50,7 @@ export interface OperateBtnProps {
50
50
  /** 点击是否关闭更多 */
51
51
  clickCloseMore?: boolean;
52
52
  /** 点击事件, 如果listItem里面存在onClick事件,则不触发改事件 */
53
- onClick?: (item: OperateBtnListProps, e: any) => void | Promise<boolean | any>;
53
+ onClick?: (item: OperateBtnListProps, e: React.MouseEvent) => void | Promise<boolean | void>;
54
54
  }
55
55
  declare const OperateBtn: FunctionComponent<OperateBtnProps>;
56
56
  export default OperateBtn;