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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/AGENTS.md +315 -0
  2. package/AlignBox/component.json +89 -0
  3. package/Anchor/component.json +130 -0
  4. package/Argv/component.json +216 -0
  5. package/AutoBox/component.json +133 -0
  6. package/AutoButton/component.json +109 -0
  7. package/AutoTips/component.json +121 -0
  8. package/Badge/component.json +92 -0
  9. package/Breadcrumbs/component.json +142 -0
  10. package/Button/component.json +168 -0
  11. package/ButtonGroup/component.json +132 -0
  12. package/Card/component.json +162 -0
  13. package/Carousel/component.json +142 -0
  14. package/Cascader/component.json +196 -0
  15. package/Checkbox/component.json +138 -0
  16. package/CheckboxGroup/component.json +152 -0
  17. package/CodeEditor/component.json +189 -0
  18. package/Collapse/component.json +166 -0
  19. package/CollapseBox/component.json +84 -0
  20. package/CollapseLayout/component.json +155 -0
  21. package/ColorPicker/component.json +142 -0
  22. package/ComboSelect/component.json +181 -0
  23. package/Container/component.json +111 -0
  24. package/ContentBox/component.json +81 -0
  25. package/CopyText/component.json +118 -0
  26. package/CycleSelector/component.json +98 -0
  27. package/DatePicker/component.json +192 -0
  28. package/Descriptions/component.json +142 -0
  29. package/Desktop/component.json +171 -0
  30. package/DragVerify/component.json +114 -0
  31. package/Drawer/component.json +200 -0
  32. package/Dropdown/component.json +147 -0
  33. package/DynamicMultiBox/component.json +278 -0
  34. package/Empty/component.json +123 -0
  35. package/FieldForm/component.json +196 -0
  36. package/Form/component.json +161 -0
  37. package/FormItem/component.json +171 -0
  38. package/FunctionModal/component.json +197 -0
  39. package/Help/component.json +118 -0
  40. package/HelperText/component.json +126 -0
  41. package/Image/component.json +165 -0
  42. package/InputCode/component.json +191 -0
  43. package/InputLang/component.json +205 -0
  44. package/InputNumber/component.json +162 -0
  45. package/Label/component.json +126 -0
  46. package/Loading/component.json +91 -0
  47. package/Menu/component.json +180 -0
  48. package/Message/component.json +246 -0
  49. package/Modal/component.json +277 -0
  50. package/MultiBox/component.json +216 -0
  51. package/Notification/component.json +184 -0
  52. package/OperateBtn/component.json +134 -0
  53. package/PageHeader/component.json +112 -0
  54. package/Pagination/component.json +181 -0
  55. package/PasswordRules/component.json +105 -0
  56. package/PopConfirm/component.json +227 -0
  57. package/PopMenu/component.json +131 -0
  58. package/Popover/component.json +165 -0
  59. package/Progress/component.json +161 -0
  60. package/Prompt/component.json +144 -0
  61. package/Querying/component.json +96 -0
  62. package/QuickReply/component.json +129 -0
  63. package/Radio/component.json +136 -0
  64. package/RadioGroup/component.json +149 -0
  65. package/RangeInput/component.json +198 -0
  66. package/Result/component.json +104 -0
  67. package/ScrollBar/component.json +115 -0
  68. package/Search/component.json +177 -0
  69. package/Select/component.json +244 -0
  70. package/SelectInput/component.json +184 -0
  71. package/Selector/component.json +203 -0
  72. package/SelectorPicker/component.json +179 -0
  73. package/SingleBox/component.json +151 -0
  74. package/Slider/component.json +181 -0
  75. package/SortBox/component.json +108 -0
  76. package/Status/component.json +104 -0
  77. package/Stepper/component.json +129 -0
  78. package/Switch/component.json +207 -0
  79. package/Table/component.json +547 -0
  80. package/Tabs/component.json +227 -0
  81. package/Tag/component.json +221 -0
  82. package/TextEditor/component.json +186 -0
  83. package/TextField/component.json +290 -0
  84. package/TimePicker/component.json +176 -0
  85. package/Timeline/component.json +110 -0
  86. package/Title/component.json +156 -0
  87. package/ToggleButton/component.json +153 -0
  88. package/Tooltip/component.json +176 -0
  89. package/Transfer/component.json +157 -0
  90. package/Tree/component.json +512 -0
  91. package/Upload/component.json +450 -0
  92. package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
  93. package/ai-workflows/02-rbac-operation-buttons.md +290 -0
  94. package/ai-workflows/03-complex-form-async-cascade.md +350 -0
  95. package/ai-workflows/04-array-field-form.md +281 -0
  96. package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
  97. package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
  98. package/ai-workflows/07-search-filter-table-trio.md +387 -0
  99. package/ai-workflows/08-table-advanced-features.md +365 -0
  100. package/ai-workflows/09-batch-operation-export-progress.md +367 -0
  101. package/ai-workflows/10-cross-component-state-coordination.md +412 -0
  102. package/codemods/modal-onCancel-to-onDismiss.js +69 -0
  103. package/es/AlignBox/component.json +89 -0
  104. package/es/AlignBox/index.css +1 -1
  105. package/es/AlignBox/index.d.ts +6 -2
  106. package/es/AlignBox/index.js +1 -1
  107. package/es/AlignBox/style/index.css +1 -1
  108. package/es/Anchor/anchorMenu/index.d.ts +2 -1
  109. package/es/Anchor/anchorMenu/index.js +36 -33
  110. package/es/Anchor/component.json +130 -0
  111. package/es/Anchor/index.js +50 -47
  112. package/es/Anchor/type.d.ts +8 -4
  113. package/es/Argv/component.json +216 -0
  114. package/es/Argv/index.d.ts +5 -6
  115. package/es/AutoBox/component.json +133 -0
  116. package/es/AutoBox/index.d.ts +3 -3
  117. package/es/AutoBox/index.js +1 -1
  118. package/es/AutoBox/protal.d.ts +2 -2
  119. package/es/AutoBox/protal.js +32 -29
  120. package/es/AutoButton/component.json +109 -0
  121. package/es/AutoButton/index.js +1 -1
  122. package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  123. package/es/AutoTips/autoTipsMultiline/index.js +1 -1
  124. package/es/AutoTips/component.json +121 -0
  125. package/es/Badge/component.json +92 -0
  126. package/es/Breadcrumbs/component.json +142 -0
  127. package/es/Breadcrumbs/index.js +1 -1
  128. package/es/Button/SplitButton.d.ts +2 -2
  129. package/es/Button/component.json +168 -0
  130. package/es/Button/index.js +44 -44
  131. package/es/ButtonGroup/component.json +132 -0
  132. package/es/ButtonGroup/index.d.ts +1 -1
  133. package/es/Card/component.json +162 -0
  134. package/es/Card/index.d.ts +2 -2
  135. package/es/Card/index.js +2 -2
  136. package/es/Carousel/component.json +142 -0
  137. package/es/Carousel/index.d.ts +1 -1
  138. package/es/Cascader/Cascader.js +188 -180
  139. package/es/Cascader/component.json +196 -0
  140. package/es/Cascader/hooks/useEntities.js +7 -7
  141. package/es/Cascader/interface.d.ts +1 -0
  142. package/es/Cascader/utils/commonUtil.d.ts +1 -1
  143. package/es/Cascader/utils/commonUtil.js +16 -16
  144. package/es/Cascader/utils/treeUtil.d.ts +14 -5
  145. package/es/Cascader/utils/treeUtil.js +1 -1
  146. package/es/Checkbox/component.json +138 -0
  147. package/es/CheckboxGroup/component.json +152 -0
  148. package/es/CodeEditor/component.json +189 -0
  149. package/es/CodeEditor/index.d.ts +10 -9
  150. package/es/Collapse/component.json +166 -0
  151. package/es/Collapse/index.d.ts +1 -1
  152. package/es/Collapse/index.js +41 -33
  153. package/es/CollapseBox/component.json +84 -0
  154. package/es/CollapseLayout/component.json +155 -0
  155. package/es/ColorPicker/component.json +142 -0
  156. package/es/ComboSelect/component.json +181 -0
  157. package/es/ComboSelect/index.js +299 -287
  158. package/es/ComboSelect/interface.d.ts +6 -3
  159. package/es/ComboSelect/utils.d.ts +3 -3
  160. package/es/ComboSelect/utils.js +1 -1
  161. package/es/Container/component.json +111 -0
  162. package/es/ContentBox/component.json +81 -0
  163. package/es/CopyText/component.json +118 -0
  164. package/es/CycleSelector/component.json +98 -0
  165. package/es/CycleSelector/index.js +14 -13
  166. package/es/DatePicker/component.json +192 -0
  167. package/es/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
  168. package/es/DatePicker/generatePicker/generateRangePicker.js +73 -65
  169. package/es/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  170. package/es/DatePicker/generatePicker/index.d.ts +11 -4
  171. package/es/Descriptions/component.json +142 -0
  172. package/es/Descriptions/index.d.ts +1 -1
  173. package/es/Desktop/component.json +171 -0
  174. package/es/DragVerify/component.json +114 -0
  175. package/es/DragVerify/index.js +19 -19
  176. package/es/Drawer/component.json +200 -0
  177. package/es/Drawer/index.js +86 -86
  178. package/es/Drawer/interface.d.ts +1 -1
  179. package/es/Drawer/util.d.ts +1 -6
  180. package/es/Drawer/util.js +9 -6
  181. package/es/Dropdown/component.json +147 -0
  182. package/es/DynamicMultiBox/component.json +278 -0
  183. package/es/DynamicMultiBox/formItem.d.ts +1 -1
  184. package/es/DynamicMultiBox/rowForm.d.ts +2 -2
  185. package/es/Empty/component.json +123 -0
  186. package/es/Empty/index.css +1 -1
  187. package/es/Empty/index.d.ts +2 -2
  188. package/es/Empty/index.js +27 -26
  189. package/es/Empty/style/index.css +1 -1
  190. package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  191. package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
  192. package/es/FieldForm/Form.d.ts +2 -2
  193. package/es/FieldForm/FormList.d.ts +2 -2
  194. package/es/FieldForm/component.json +196 -0
  195. package/es/FieldForm/context.d.ts +5 -1
  196. package/es/FieldForm/context.js +2 -2
  197. package/es/FieldForm/hooks/useForm.d.ts +4 -3
  198. package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
  199. package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  200. package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
  201. package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
  202. package/es/FieldForm/hooks/useItemRef.js +6 -6
  203. package/es/Form/component.json +161 -0
  204. package/es/Form/index.d.ts +52 -49
  205. package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  206. package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
  207. package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  208. package/es/FormItem/compoments/formFile/index.js +8 -8
  209. package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  210. package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
  211. package/es/FormItem/component.json +171 -0
  212. package/es/FormItem/index.d.ts +5 -5
  213. package/es/FormItem/index.js +23 -23
  214. package/es/FormItem/itemType.js +1 -1
  215. package/es/FunctionModal/component.json +197 -0
  216. package/es/FunctionModal/dialog.d.ts +1 -1
  217. package/es/FunctionModal/modalContext.d.ts +4 -1
  218. package/es/Help/component.json +118 -0
  219. package/es/HelperText/component.json +126 -0
  220. package/es/Image/component.json +165 -0
  221. package/es/InputCode/component.json +191 -0
  222. package/es/InputCode/index.d.ts +2 -2
  223. package/es/InputLang/component.json +205 -0
  224. package/es/InputLang/index.js +1 -1
  225. package/es/InputNumber/component.json +162 -0
  226. package/es/Label/component.json +126 -0
  227. package/es/Label/index.d.ts +2 -2
  228. package/es/Loading/component.json +91 -0
  229. package/es/Menu/component.json +180 -0
  230. package/es/Message/component.json +246 -0
  231. package/es/Message/index.d.ts +2 -2
  232. package/es/Message/index.js +2 -2
  233. package/es/Modal/Confirm/index.d.ts +1 -1
  234. package/es/Modal/Confirm/index.js +81 -75
  235. package/es/Modal/component.json +277 -0
  236. package/es/Modal/index.d.ts +97 -6
  237. package/es/Modal/index.js +174 -122
  238. package/es/Modal/interface.d.ts +1 -0
  239. package/es/MultiBox/component.json +216 -0
  240. package/es/MultiBox/index.js +19 -14
  241. package/es/Notification/component.json +184 -0
  242. package/es/OperateBtn/component.json +134 -0
  243. package/es/OperateBtn/index.d.ts +3 -3
  244. package/es/PageHeader/component.json +112 -0
  245. package/es/Pagination/component.json +181 -0
  246. package/es/Pagination/index.js +15 -15
  247. package/es/PasswordRules/component.json +105 -0
  248. package/es/PasswordRules/index.d.ts +4 -4
  249. package/es/PopConfirm/component.json +227 -0
  250. package/es/PopConfirm/index.d.ts +1 -1
  251. package/es/PopConfirm/index.js +1 -1
  252. package/es/PopMenu/component.json +131 -0
  253. package/es/PopMenu/hooks.d.ts +1 -1
  254. package/es/PopMenu/index.js +8 -8
  255. package/es/Popover/component.json +165 -0
  256. package/es/Popover/index.js +1 -1
  257. package/es/Progress/component.json +161 -0
  258. package/es/Prompt/component.json +144 -0
  259. package/es/Querying/component.json +96 -0
  260. package/es/Querying/index.css +1 -1
  261. package/es/Querying/index.d.ts +2 -2
  262. package/es/Querying/index.js +20 -19
  263. package/es/Querying/style/index.css +1 -1
  264. package/es/QuickReply/component.json +129 -0
  265. package/es/QuickReply/index.d.ts +1 -1
  266. package/es/Radio/component.json +136 -0
  267. package/es/RadioGroup/component.json +149 -0
  268. package/es/RangeInput/component.json +198 -0
  269. package/es/RangeInput/index.js +1 -1
  270. package/es/Result/component.json +104 -0
  271. package/es/ScrollBar/component.json +115 -0
  272. package/es/Search/component.json +177 -0
  273. package/es/Search/index.d.ts +1 -1
  274. package/es/Select/component.json +244 -0
  275. package/es/Select/index.js +113 -113
  276. package/es/SelectInput/component.json +184 -0
  277. package/es/Selector/component.json +203 -0
  278. package/es/Selector/index.js +28 -27
  279. package/es/Selector/interface.d.ts +1 -1
  280. package/es/Selector/selectorMain/index.js +2 -2
  281. package/es/Selector/selectorNode/index.js +1 -1
  282. package/es/Selector/util.d.ts +2 -2
  283. package/es/SelectorPicker/component.json +179 -0
  284. package/es/SelectorPicker/index.d.ts +5 -5
  285. package/es/SelectorPicker/index.js +15 -15
  286. package/es/SingleBox/component.json +151 -0
  287. package/es/SingleBox/index.d.ts +2 -2
  288. package/es/Slider/component.json +181 -0
  289. package/es/SortBox/component.json +108 -0
  290. package/es/Status/component.json +104 -0
  291. package/es/Stepper/component.json +129 -0
  292. package/es/Stepper/index.d.ts +2 -2
  293. package/es/Switch/component.json +207 -0
  294. package/es/Switch/index.css +1 -1
  295. package/es/Switch/index.d.ts +3 -2
  296. package/es/Switch/index.js +60 -59
  297. package/es/Switch/style/index.css +1 -1
  298. package/es/Table/component.json +547 -0
  299. package/es/Table/index.d.ts +2 -2
  300. package/es/Table/index.js +414 -414
  301. package/es/Table/interface.d.ts +6 -0
  302. package/es/Tabs/component.json +227 -0
  303. package/es/Tag/component.json +221 -0
  304. package/es/Tag/index.css +1 -1
  305. package/es/Tag/index.d.ts +1 -1
  306. package/es/Tag/index.js +20 -20
  307. package/es/Tag/style/index.css +1 -1
  308. package/es/TextEditor/component.json +186 -0
  309. package/es/TextEditor/index.d.ts +5 -5
  310. package/es/TextField/component.json +290 -0
  311. package/es/TextField/index.d.ts +2 -2
  312. package/es/TimePicker/component.json +176 -0
  313. package/es/Timeline/component.json +110 -0
  314. package/es/Title/component.json +156 -0
  315. package/es/ToggleButton/component.json +153 -0
  316. package/es/Tooltip/component.json +176 -0
  317. package/es/Tooltip/index.js +74 -63
  318. package/es/Tooltip/interface.d.ts +14 -1
  319. package/es/Tooltip/utils.js +6 -6
  320. package/es/Transfer/component.json +157 -0
  321. package/es/Tree/component.json +512 -0
  322. package/es/Upload/component.json +450 -0
  323. package/es/Utils/type.d.ts +0 -2
  324. package/es/index.d.ts +2 -0
  325. package/es/index.js +1 -1
  326. package/es/locale/en_US.d.ts +361 -0
  327. package/es/locale/en_US.js +364 -0
  328. package/es/locale/index.d.ts +1 -723
  329. package/es/locale/index2.js +10 -0
  330. package/es/locale/zh_CN.d.ts +361 -0
  331. package/es/locale/zh_CN.js +364 -0
  332. package/lib/AlignBox/component.json +89 -0
  333. package/lib/AlignBox/index.css +1 -1
  334. package/lib/AlignBox/index.d.ts +6 -2
  335. package/lib/AlignBox/index.js +1 -1
  336. package/lib/AlignBox/style/index.css +1 -1
  337. package/lib/Anchor/anchorMenu/index.d.ts +2 -1
  338. package/lib/Anchor/anchorMenu/index.js +1 -1
  339. package/lib/Anchor/component.json +130 -0
  340. package/lib/Anchor/index.js +1 -1
  341. package/lib/Anchor/type.d.ts +8 -4
  342. package/lib/Argv/component.json +216 -0
  343. package/lib/Argv/index.d.ts +5 -6
  344. package/lib/AutoBox/component.json +133 -0
  345. package/lib/AutoBox/index.d.ts +3 -3
  346. package/lib/AutoBox/index.js +1 -1
  347. package/lib/AutoBox/protal.d.ts +2 -2
  348. package/lib/AutoBox/protal.js +1 -1
  349. package/lib/AutoButton/component.json +109 -0
  350. package/lib/AutoButton/index.js +1 -1
  351. package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  352. package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
  353. package/lib/AutoTips/component.json +121 -0
  354. package/lib/Badge/component.json +92 -0
  355. package/lib/Breadcrumbs/component.json +142 -0
  356. package/lib/Breadcrumbs/index.js +1 -1
  357. package/lib/Button/SplitButton.d.ts +2 -2
  358. package/lib/Button/component.json +168 -0
  359. package/lib/Button/index.js +1 -1
  360. package/lib/ButtonGroup/component.json +132 -0
  361. package/lib/ButtonGroup/index.d.ts +1 -1
  362. package/lib/Card/component.json +162 -0
  363. package/lib/Card/index.d.ts +2 -2
  364. package/lib/Card/index.js +1 -1
  365. package/lib/Carousel/component.json +142 -0
  366. package/lib/Carousel/index.d.ts +1 -1
  367. package/lib/Cascader/Cascader.js +1 -1
  368. package/lib/Cascader/component.json +196 -0
  369. package/lib/Cascader/hooks/useEntities.js +1 -1
  370. package/lib/Cascader/interface.d.ts +1 -0
  371. package/lib/Cascader/utils/commonUtil.d.ts +1 -1
  372. package/lib/Cascader/utils/commonUtil.js +1 -1
  373. package/lib/Cascader/utils/treeUtil.d.ts +14 -5
  374. package/lib/Cascader/utils/treeUtil.js +1 -1
  375. package/lib/Checkbox/component.json +138 -0
  376. package/lib/CheckboxGroup/component.json +152 -0
  377. package/lib/CodeEditor/component.json +189 -0
  378. package/lib/CodeEditor/index.d.ts +10 -9
  379. package/lib/Collapse/component.json +166 -0
  380. package/lib/Collapse/index.d.ts +1 -1
  381. package/lib/Collapse/index.js +1 -1
  382. package/lib/CollapseBox/component.json +84 -0
  383. package/lib/CollapseLayout/component.json +155 -0
  384. package/lib/ColorPicker/component.json +142 -0
  385. package/lib/ComboSelect/component.json +181 -0
  386. package/lib/ComboSelect/index.js +1 -1
  387. package/lib/ComboSelect/interface.d.ts +6 -3
  388. package/lib/ComboSelect/utils.d.ts +3 -3
  389. package/lib/ComboSelect/utils.js +1 -1
  390. package/lib/Container/component.json +111 -0
  391. package/lib/ContentBox/component.json +81 -0
  392. package/lib/CopyText/component.json +118 -0
  393. package/lib/CycleSelector/component.json +98 -0
  394. package/lib/CycleSelector/index.js +1 -1
  395. package/lib/DatePicker/component.json +192 -0
  396. package/lib/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
  397. package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
  398. package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  399. package/lib/DatePicker/generatePicker/index.d.ts +11 -4
  400. package/lib/Descriptions/component.json +142 -0
  401. package/lib/Descriptions/index.d.ts +1 -1
  402. package/lib/Desktop/component.json +171 -0
  403. package/lib/DragVerify/component.json +114 -0
  404. package/lib/DragVerify/index.js +1 -1
  405. package/lib/Drawer/component.json +200 -0
  406. package/lib/Drawer/index.js +1 -1
  407. package/lib/Drawer/interface.d.ts +1 -1
  408. package/lib/Drawer/util.d.ts +1 -6
  409. package/lib/Drawer/util.js +1 -1
  410. package/lib/Dropdown/component.json +147 -0
  411. package/lib/DynamicMultiBox/component.json +278 -0
  412. package/lib/DynamicMultiBox/formItem.d.ts +1 -1
  413. package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
  414. package/lib/Empty/component.json +123 -0
  415. package/lib/Empty/index.css +1 -1
  416. package/lib/Empty/index.d.ts +2 -2
  417. package/lib/Empty/index.js +1 -1
  418. package/lib/Empty/style/index.css +1 -1
  419. package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  420. package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
  421. package/lib/FieldForm/Form.d.ts +2 -2
  422. package/lib/FieldForm/FormList.d.ts +2 -2
  423. package/lib/FieldForm/component.json +196 -0
  424. package/lib/FieldForm/context.d.ts +5 -1
  425. package/lib/FieldForm/context.js +1 -1
  426. package/lib/FieldForm/hooks/useForm.d.ts +4 -3
  427. package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
  428. package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  429. package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
  430. package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
  431. package/lib/FieldForm/hooks/useItemRef.js +1 -1
  432. package/lib/Form/component.json +161 -0
  433. package/lib/Form/index.d.ts +52 -49
  434. package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  435. package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
  436. package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  437. package/lib/FormItem/compoments/formFile/index.js +1 -1
  438. package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  439. package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
  440. package/lib/FormItem/component.json +171 -0
  441. package/lib/FormItem/index.d.ts +5 -5
  442. package/lib/FormItem/index.js +1 -1
  443. package/lib/FormItem/itemType.js +1 -1
  444. package/lib/FunctionModal/component.json +197 -0
  445. package/lib/FunctionModal/dialog.d.ts +1 -1
  446. package/lib/FunctionModal/modalContext.d.ts +4 -1
  447. package/lib/Help/component.json +118 -0
  448. package/lib/HelperText/component.json +126 -0
  449. package/lib/Image/component.json +165 -0
  450. package/lib/InputCode/component.json +191 -0
  451. package/lib/InputCode/index.d.ts +2 -2
  452. package/lib/InputLang/component.json +205 -0
  453. package/lib/InputLang/index.js +1 -1
  454. package/lib/InputNumber/component.json +162 -0
  455. package/lib/Label/component.json +126 -0
  456. package/lib/Label/index.d.ts +2 -2
  457. package/lib/Loading/component.json +91 -0
  458. package/lib/Menu/component.json +180 -0
  459. package/lib/Message/component.json +246 -0
  460. package/lib/Message/index.d.ts +2 -2
  461. package/lib/Message/index.js +1 -1
  462. package/lib/Modal/Confirm/index.d.ts +1 -1
  463. package/lib/Modal/Confirm/index.js +1 -1
  464. package/lib/Modal/component.json +277 -0
  465. package/lib/Modal/index.d.ts +97 -6
  466. package/lib/Modal/index.js +1 -1
  467. package/lib/Modal/interface.d.ts +1 -0
  468. package/lib/MultiBox/component.json +216 -0
  469. package/lib/MultiBox/index.js +1 -1
  470. package/lib/Notification/component.json +184 -0
  471. package/lib/OperateBtn/component.json +134 -0
  472. package/lib/OperateBtn/index.d.ts +3 -3
  473. package/lib/PageHeader/component.json +112 -0
  474. package/lib/Pagination/component.json +181 -0
  475. package/lib/Pagination/index.js +1 -1
  476. package/lib/PasswordRules/component.json +105 -0
  477. package/lib/PasswordRules/index.d.ts +4 -4
  478. package/lib/PopConfirm/component.json +227 -0
  479. package/lib/PopConfirm/index.d.ts +1 -1
  480. package/lib/PopConfirm/index.js +1 -1
  481. package/lib/PopMenu/component.json +131 -0
  482. package/lib/PopMenu/hooks.d.ts +1 -1
  483. package/lib/PopMenu/index.js +1 -1
  484. package/lib/Popover/component.json +165 -0
  485. package/lib/Popover/index.js +1 -1
  486. package/lib/Progress/component.json +161 -0
  487. package/lib/Prompt/component.json +144 -0
  488. package/lib/Querying/component.json +96 -0
  489. package/lib/Querying/index.css +1 -1
  490. package/lib/Querying/index.d.ts +2 -2
  491. package/lib/Querying/index.js +1 -1
  492. package/lib/Querying/style/index.css +1 -1
  493. package/lib/QuickReply/component.json +129 -0
  494. package/lib/QuickReply/index.d.ts +1 -1
  495. package/lib/Radio/component.json +136 -0
  496. package/lib/RadioGroup/component.json +149 -0
  497. package/lib/RangeInput/component.json +198 -0
  498. package/lib/RangeInput/index.js +1 -1
  499. package/lib/Result/component.json +104 -0
  500. package/lib/ScrollBar/component.json +115 -0
  501. package/lib/Search/component.json +177 -0
  502. package/lib/Search/index.d.ts +1 -1
  503. package/lib/Select/component.json +244 -0
  504. package/lib/Select/index.js +1 -1
  505. package/lib/SelectInput/component.json +184 -0
  506. package/lib/Selector/component.json +203 -0
  507. package/lib/Selector/index.js +1 -1
  508. package/lib/Selector/interface.d.ts +1 -1
  509. package/lib/Selector/selectorMain/index.js +1 -1
  510. package/lib/Selector/selectorNode/index.js +1 -1
  511. package/lib/Selector/util.d.ts +2 -2
  512. package/lib/SelectorPicker/component.json +179 -0
  513. package/lib/SelectorPicker/index.d.ts +5 -5
  514. package/lib/SelectorPicker/index.js +1 -1
  515. package/lib/SingleBox/component.json +151 -0
  516. package/lib/SingleBox/index.d.ts +2 -2
  517. package/lib/Slider/component.json +181 -0
  518. package/lib/SortBox/component.json +108 -0
  519. package/lib/Status/component.json +104 -0
  520. package/lib/Stepper/component.json +129 -0
  521. package/lib/Stepper/index.d.ts +2 -2
  522. package/lib/Switch/component.json +207 -0
  523. package/lib/Switch/index.css +1 -1
  524. package/lib/Switch/index.d.ts +3 -2
  525. package/lib/Switch/index.js +1 -1
  526. package/lib/Switch/style/index.css +1 -1
  527. package/lib/Table/component.json +547 -0
  528. package/lib/Table/index.d.ts +2 -2
  529. package/lib/Table/index.js +1 -1
  530. package/lib/Table/interface.d.ts +6 -0
  531. package/lib/Tabs/component.json +227 -0
  532. package/lib/Tag/component.json +221 -0
  533. package/lib/Tag/index.css +1 -1
  534. package/lib/Tag/index.d.ts +1 -1
  535. package/lib/Tag/index.js +1 -1
  536. package/lib/Tag/style/index.css +1 -1
  537. package/lib/TextEditor/component.json +186 -0
  538. package/lib/TextEditor/index.d.ts +5 -5
  539. package/lib/TextField/component.json +290 -0
  540. package/lib/TextField/index.d.ts +2 -2
  541. package/lib/TimePicker/component.json +176 -0
  542. package/lib/Timeline/component.json +110 -0
  543. package/lib/Title/component.json +156 -0
  544. package/lib/ToggleButton/component.json +153 -0
  545. package/lib/Tooltip/component.json +176 -0
  546. package/lib/Tooltip/index.js +1 -1
  547. package/lib/Tooltip/interface.d.ts +14 -1
  548. package/lib/Tooltip/utils.js +1 -1
  549. package/lib/Transfer/component.json +157 -0
  550. package/lib/Tree/component.json +512 -0
  551. package/lib/Upload/component.json +450 -0
  552. package/lib/Utils/type.d.ts +0 -2
  553. package/lib/index.d.ts +2 -0
  554. package/lib/index.js +1 -1
  555. package/lib/locale/en_US.d.ts +361 -0
  556. package/lib/locale/en_US.js +2 -0
  557. package/lib/locale/index.d.ts +1 -723
  558. package/lib/locale/index2.js +2 -0
  559. package/lib/locale/zh_CN.d.ts +361 -0
  560. package/lib/locale/zh_CN.js +2 -0
  561. package/package.json +10 -3
  562. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  563. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
  564. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  565. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
@@ -0,0 +1,277 @@
1
+ {
2
+ "name": "Modal",
3
+ "category": "Feedback",
4
+ "description": "模态对话框,用于需用户处理事务,又不希望跳转页面的场景",
5
+ "semantic": {
6
+ "intent": [
7
+ "通知",
8
+ "确认",
9
+ "复杂输入",
10
+ "详情查看"
11
+ ],
12
+ "useCases": [
13
+ "删除确认",
14
+ "表单填写",
15
+ "信息详情",
16
+ "重要预警"
17
+ ],
18
+ "riskLevel": "high"
19
+ },
20
+ "variants": {
21
+ "confirm": {
22
+ "meaning": "确认框,通常只包含文本和确定/取消按钮"
23
+ },
24
+ "info": {
25
+ "meaning": "信息框,展示详情或通知"
26
+ }
27
+ },
28
+ "states": [
29
+ "open",
30
+ "loading"
31
+ ],
32
+ "idealProps": {
33
+ "open": {
34
+ "type": "boolean",
35
+ "default": false,
36
+ "description": "模态框是否可见。**`visible` 是同义旧别名**(src:33-35 二者都存在),新代码推荐用 open。**Modal 完全受控**(DEFECT-008):src/Modal/index.tsx:160-167 handleCancel/handleOk **不修改 open 内部状态**,只调 props.onCancel/onOk;父组件必须自行 setOpen(false) 才会关闭。不存在\"非受控自动关闭\"模式。未传 `open` 时可用 `defaultOpen` 启用非受控模式(v5.x.next 议题 #2 新增)"
37
+ },
38
+ "defaultOpen": {
39
+ "type": "boolean",
40
+ "description": "**(v5.x.next 议题 #2 引入)** 非受控模式初始 open 值。未传 `open` 时启用非受控 — Modal 内部维护 open state,关闭路径自动 setOpen(false),业务方不需要手动管理 open state(公告类/一次性 Modal 推荐)。与 React `<input defaultValue>` 惯例一致。同时传 open + defaultOpen → open 优先,dev warn 提示"
41
+ },
42
+ "visible": {
43
+ "type": "boolean",
44
+ "default": false,
45
+ "description": "**@deprecated v5.x.next 改用 `open`(命名对齐业界 antd5/Chakra/Radix/MUI);v6.0 移除(BREAKING-CHANGES §B-Modal-props-rework 子条 #3-A)。** `open` 的旧别名;与 open 二选一即可,新代码推荐用 open"
46
+ },
47
+ "title": {
48
+ "type": "ReactNode",
49
+ "description": "标题"
50
+ },
51
+ "onOk": {
52
+ "type": "function",
53
+ "signature": "() => void",
54
+ "description": "**@deprecated v5.x.next 改用 `onSubmit`(语义更清晰:submit 比 ok 更准确表达\"确认提交\"行为,对齐表单语义);v6.0 移除(BREAKING-CHANGES §B-Modal-props-rework)。** 点击确定回调(旧名)"
55
+ },
56
+ "onSubmit": {
57
+ "type": "function",
58
+ "signature": "(e?: React.MouseEvent) => void | Promise<void>",
59
+ "description": "**(v5.x.next 议题 #M1 引入)** 点击确定回调(推荐新 API,语义清晰)。与 `onOk` 同义但 submit 比 ok 更准确表达\"确认提交\"行为。同时传 `onOk + onSubmit` → `onSubmit` 优先调用,`onOk` 跳过(避免业务函数重复触发);仅传 `onOk` → 旧行为不变(onOk 仍触发)。dev 环境若检测到只传 `onOk` 会 console.warn 1 次提示迁移"
60
+ },
61
+ "onCancel": {
62
+ "type": "function",
63
+ "signature": "() => boolean | void",
64
+ "description": "点击取消、ESC、遮罩、右上角叉的回调;返回 false 阻止关闭"
65
+ },
66
+ "onClose": {
67
+ "type": "function",
68
+ "signature": "(reason: 'cancel' | 'ok' | 'esc' | 'mask' | 'x') => void",
69
+ "description": "@deprecated v5.x.next 改用 onDismiss + onOk + onCancel 三回调;v6.0 移除。**(R6 §B3 阶段 1 引入,最低支持版本 5.x.next)** 任意路径关闭统一回调,reason 字面联合区分关闭来源。**与 onCancel/onOk 共存为叠加触发**(src 实证):取消按钮 → onCancel + onClose('cancel');确定按钮 → onOk + onClose('ok');ESC/蒙层/X → onCancel + onClose('esc'|'mask'|'x')。**推荐写法** — 业务方在 onClose 里统一 setOpen(false) + reason 分支(埋点 / 重置 state),不再写 `onCancel={fn} onOk={fn}` 双绑兜底;若旧代码 onOk + onClose 共存,onOk 应只处理 'ok' 路径(submit),onClose 处理其他 4 种,避免业务函数重复触发(R3 4/9 + R5 5/9 sub-agent 持续踩坑)。**X 按钮在 showCancel=false 时仍显示并触发 reason='x'**(X 由 hideHeader 控制,不受 showCancel 影响);**Modal 完全受控** — onClose 未传或未在 onClose 内 setOpen(false),Modal 不会自动关闭。阶段 3 v6 移除单独 onCancel/onOk(BREAKING)。详见 BREAKING-CHANGES §B3 + discussions/Modal-unified-onClose.md"
70
+ },
71
+ "onDismiss": {
72
+ "type": "function",
73
+ "signature": "(reason: ModalDismissReason) => void",
74
+ "description": "**(v5.x.next γ 方案 议题 #1 引入)** 非按钮关闭路径(X/ESC/蒙层)的专用回调。仅传 onDismiss(不传 onClose)时走新单触发行为:X 按钮仅调 `onDismiss('x')`,ESC 仅调 `onDismiss('esc')`,蒙层仅调 `onDismiss('mask')`。**onOk/onCancel/onDismiss 三回调职责互斥**(对比旧 onClose 5 路径统一触发会导致双触发)。推荐迁移路径:删 onClose,改用 onDismiss 处理非按钮路径。详见 BREAKING-CHANGES §B-Modal-props-rework"
75
+ },
76
+ "showCancel": {
77
+ "type": "boolean",
78
+ "default": true,
79
+ "description": "是否显示取消按钮。**仅控制取消按钮显隐**,不影响右上角 X 按钮(X 由 hideHeader 控制;showCancel=false 时 X 仍显示并仍可点击触发关闭走 onClose reason='x' / onCancel 路径)。showCancel=false 时 onCancel 可省略(走 onClose 统一处理)"
80
+ },
81
+ "showActions": {
82
+ "type": "boolean",
83
+ "default": true,
84
+ "description": "是否显示底部 actions 按钮区(确定 + 取消按钮统一区域)。**典型场景**:登录/复杂表单内嵌时设为 false 隐藏默认底部,业务自行在 children 内放置提交按钮"
85
+ },
86
+ "confirmLoading": {
87
+ "type": "boolean",
88
+ "default": false,
89
+ "description": "确定按钮 loading 状态(顶层快捷方式,等价于 okButtonProps={{ loading }})。**loading 期间确定按钮自动 disabled 不响应点击**(src/Modal/index.tsx:258 透传 Button.loading,Button 自身已 `disabled={disabled \\|\\| hasLoading}`,见 BREAKING-CHANGES §A2)——业务无需再叠 okButtonProps.disabled。"
90
+ },
91
+ "destroyOnClose": {
92
+ "type": "boolean",
93
+ "default": false,
94
+ "description": "关闭时销毁子元素;下次打开重建。表单类内嵌内容用此 prop 重置状态"
95
+ },
96
+ "maskClosable": {
97
+ "type": "boolean",
98
+ "default": false,
99
+ "description": "点击蒙层是否允许关闭。**与 disableBackdropClick 是同一能力的双 prop(DEFECT-001)**,src 实际:`!disableBackdropClick \\|\\| maskClosable`。**强烈推荐用 disableBackdropClick 替代 maskClosable**——后者是冗余且易混淆"
100
+ },
101
+ "closeOnBackdrop": {
102
+ "type": "boolean",
103
+ "description": "**(R6 §B6 阶段 1 引入)** 是否允许蒙层点击关闭(正向命名,业界对齐 antd `maskClosable` / chakra `closeOnOverlayClick`)。显式传值优先 — 未传时 fallback 旧 `disableBackdropClick`(默认 true 即禁用,反业界直觉)。**推荐用 closeOnBackdrop={true}** 替代 `disableBackdropClick={false}` 双重否定写法。阶段 3 v6 移除 disableBackdropClick 后默认 true。详见 BREAKING-CHANGES §B6"
104
+ },
105
+ "disableBackdropClick": {
106
+ "type": "boolean",
107
+ "default": true,
108
+ "description": "**@deprecated v5.x.next 改用 `closeOnBackdrop`(正向命名,业界对齐);v6 移除(BREAKING-CHANGES §B6 阶段 3)**。⚠️ 默认 true(即默认禁用蒙层点击关闭)——与多数 Modal 库默认允许的直觉相反(DEFECT-002,R5 9/9 sub-agent 全部明确感知反业界直觉)。需要允许点击遮罩关闭推荐显式传 `closeOnBackdrop={true}`(新 prop) 或旧写法 `disableBackdropClick={false}`(deprecated)"
109
+ },
110
+ "closeOnEsc": {
111
+ "type": "boolean",
112
+ "description": "**(R6 §B6 阶段 1 引入)** 是否允许 Escape 键关闭(正向命名,业界对齐 antd `keyboard` / chakra `closeOnEsc`)。显式传值优先 — 未传时 fallback 旧 `disableEscapeKeyDown`(默认 true 即禁用,反业界直觉)。**推荐用 closeOnEsc={true}** 替代 `disableEscapeKeyDown={false}` 双重否定。阶段 3 v6 移除 disableEscapeKeyDown 后默认 true。详见 BREAKING-CHANGES §B6"
113
+ },
114
+ "disableEscapeKeyDown": {
115
+ "type": "boolean",
116
+ "default": true,
117
+ "description": "**@deprecated v5.x.next 改用 `closeOnEsc`(正向命名,业界对齐);v6 移除(BREAKING-CHANGES §B6 阶段 3)**。⚠️ 默认 true(即默认禁用 ESC 关闭)——同样与多数库直觉相反"
118
+ },
119
+ "restoreFocusOnClose": {
120
+ "type": "boolean",
121
+ "description": "**(R6 §B6 阶段 1 引入)** 关闭后是否将焦点恢复到原触发元素(正向命名,业界对齐 mui `restoreFocus`)。等价 `focusTriggerAfterClose` 的正向 alias — 显式传值优先,未传时 fallback `focusTriggerAfterClose`(默认 true)。**推荐用 restoreFocusOnClose** 命名;v6 路径只保留 restoreFocusOnClose。详见 BREAKING-CHANGES §B6"
122
+ },
123
+ "size": {
124
+ "type": "enum",
125
+ "values": [
126
+ "sm",
127
+ "md",
128
+ "lg",
129
+ "auto",
130
+ "fullScreen"
131
+ ],
132
+ "default": "md",
133
+ "description": "尺寸枚举。**`size='fullScreen'` 与独立 prop `fullScreen={true}` 是同一能力的双 prop(DEFECT-003)**——src 实际 `fullScreen \\|\\| size === 'fullScreen'`。**推荐用 size='fullScreen'**(与其他尺寸取值同 prop,更一致)"
134
+ },
135
+ "fullScreen": {
136
+ "type": "boolean",
137
+ "default": false,
138
+ "description": "全屏开关;与 size='fullScreen' 同义,推荐用 size='fullScreen'。**全屏模式内容区高度行为**:启用时 dialog 容器追加 `.{prefix}-fullscreen` 类,内容区自动 height: 100vh + overflow: auto;contentStyle padding 由父级控制,无需业务方再写 style 撑高"
139
+ },
140
+ "centered": {
141
+ "type": "boolean",
142
+ "default": true,
143
+ "description": "**Modal 默认垂直居中**(DEFECT-004:src/Modal/index.tsx:64+129+301 实证,默认值 true,启用时根容器追加 `.{prefix}-centered` 类)。无需 style transform 等 hack 实现居中——直接使用默认即可。如需顶部对齐请显式传 `centered={false}`。"
144
+ },
145
+ "style": {
146
+ "type": "React.CSSProperties",
147
+ "description": "落在 Modal **dialog 外层容器**(DEFECT-007:与 contentStyle 区分,后者仅作用于内容区 DOM)。常用于覆盖整体边距 / z-index / position 等容器级属性。"
148
+ },
149
+ "contentStyle": {
150
+ "type": "React.CSSProperties",
151
+ "description": "落在 Modal **内容区 DOM 节点**(DEFECT-007:src/Modal/index.tsx:224 实证)。覆盖 contentHeight 等内容区限定样式。需要整体 dialog 样式请用 style。"
152
+ },
153
+ "width": {
154
+ "type": "string | number",
155
+ "description": "Modal dialog 容器整体宽度。与 `contentWidth` 区分:contentWidth 仅控制内容区,width 控制整体——业务侧『自定义宽度』优先用 width"
156
+ },
157
+ "okText": {
158
+ "type": "string",
159
+ "description": "确认按钮文字"
160
+ },
161
+ "cancelText": {
162
+ "type": "string",
163
+ "description": "取消按钮文字"
164
+ },
165
+ "actions": {
166
+ "type": "function | ReactNode",
167
+ "signature": "((buttons: ReactNode[]) => ReactNode[]) | ReactNode",
168
+ "description": "⚠️ **完全自定义底部操作栏**(src/Modal/index.tsx:69 实证)。两种用法:① 传 `ReactNode` 完全替换底部按钮区(隐藏默认确定/取消按钮,渲染自定义内容);② 传函数 `(buttons) => ReactNode[]` 接收默认按钮数组后按需增删/改造再返回。**与 `footer` 区分**:`footer` 语义相同但 actions 是更语义化的命名(两者 src 并存,任选一即可)。**与 `showActions` 区分**:showActions=false 是整体隐藏,actions 是替换内容——需要完全自定义按钮组合时用 actions,需要隐藏整个底部区域时用 showActions=false"
169
+ }
170
+ },
171
+ "do": [
172
+ "保持模态框内容简洁,避免过于复杂的流程",
173
+ "**新代码统一用 `open` 而非 `visible`**——visible 是旧别名",
174
+ "**`onDismiss` + `onOk` + `onCancel` 三回调首推(v5.x.next γ 方案)**:`onDismiss` 处理非按钮路径(X/ESC/蒙层),`onOk` 处理确定按钮,`onCancel` 处理取消按钮,三者职责互斥,无双触发问题",
175
+ "**旧写法(不推荐)**:`onClose(reason)` 顶层回调在任意路径关闭时触发,v5.x.next 已标 @deprecated,v6.0 移除。如仍使用,在 onClose 里统一 setOpen(false) + reason 分支(reason ∈ 'cancel'|'ok'|'esc'|'mask'|'x')",
176
+ "**全屏模态用 `size='fullScreen'`**——与其他尺寸取值同 prop;fullScreen={true} 是冗余别名",
177
+ "**点击蒙层关闭:用 `closeOnBackdrop={true}`(R6 §B6 阶段 1 推荐,正向命名,业界对齐)** — 替代旧 `disableBackdropClick={false}` 双重否定写法;`maskClosable` 仍是冗余双 prop,推荐用 closeOnBackdrop。同理 `closeOnEsc={true}` 替代 `disableEscapeKeyDown={false}`;`restoreFocusOnClose` 替代旧 `focusTriggerAfterClose` 正向 alias",
178
+ "**Modal 默认垂直居中**(centered=true)——无需 style transform 居中 hack。需要顶部对齐显式传 centered={false}",
179
+ "整体 dialog 样式用 `style`,内容区限定样式用 `contentStyle`——两者作用 DOM 节点不同(DEFECT-007)",
180
+ "整体宽度自定义用 `width`(不是 contentWidth——后者仅控制内容区)",
181
+ "重要操作(如不可逆删除)应使 ESC + 蒙层都不能关闭——保留默认 `closeOnEsc=undefined / closeOnBackdrop=undefined`(fallback 旧 disable* 默认 true 即锁定);旧写法 `disableEscapeKeyDown=true / disableBackdropClick=true` 仍工作但不推荐",
182
+ "需要关闭后重置内嵌表单状态时使用 `destroyOnClose={true}`",
183
+ "确定按钮 loading 状态用 `confirmLoading={true}`——loading 期间按钮自动 disabled,业务无需再叠 okButtonProps.disabled"
184
+ ],
185
+ "dont": [
186
+ "在模态框上再叠加模态框(多层嵌套)",
187
+ "在模态框中放置过长的表单(应考虑独立页面)",
188
+ "不要混用 visible 与 open 双 prop——只传一个",
189
+ "不要既传 fullScreen 又传 size='fullScreen'——只传一个,推荐 size",
190
+ "不要既传 disableBackdropClick 又传 maskClosable——只传一个,推荐 closeOnBackdrop(R6 §B6 阶段 1 引入正向命名)",
191
+ "不要假设 disableBackdropClick / disableEscapeKeyDown 默认值是 false——它们默认 true(即默认禁用),与多数库直觉相反;v6 路径已 rename 为 closeOnBackdrop / closeOnEsc / restoreFocusOnClose 正向 prop"
192
+ ],
193
+ "events": {
194
+ "onSubmit": {
195
+ "signature": "(e?: React.MouseEvent<HTMLElement>) => void | Promise<void>",
196
+ "asyncSupported": true,
197
+ "examples": [
198
+ "推荐新写法:async onSubmit 处理异步提交,confirmLoading 配合显示 loading 状态",
199
+ "onSubmit 与 onOk 同义,同时传时 onSubmit 优先,onOk 被跳过(src/Modal/index.tsx:230-234 实证)",
200
+ "表单提交场景:onSubmit 内调 formRef.current.check?.(),失败 return,成功后关闭 Modal"
201
+ ],
202
+ "commonMistakes": [
203
+ "同时传 onOk + onSubmit,期望两者都执行 → src 优先调 onSubmit,onOk 被跳过",
204
+ "假设 async onSubmit 执行完成后 Modal 自动关闭 → Modal 完全受控,必须在 onSubmit 内手动 setOpen(false)",
205
+ "传 onOk 而不传 onSubmit 时触发 dev warn → src 检测到仅有 onOk 会 console.warn 一次提示迁移到 onSubmit"
206
+ ]
207
+ },
208
+ "onCancel": {
209
+ "signature": "(e?: React.MouseEvent<HTMLElement>) => boolean | void",
210
+ "asyncSupported": false,
211
+ "examples": [
212
+ "点击取消按钮触发,业务方在回调里 setOpen(false) 关闭 Modal",
213
+ "返回 false 阻止关闭(src/Modal/index.tsx:interface 签名实证)",
214
+ "showCancel=false 时用户无法触发 onCancel,X/ESC/蒙层改走 onDismiss"
215
+ ],
216
+ "commonMistakes": [
217
+ "假设 onCancel 在 X 按钮/ESC/蒙层点击时也触发 → v5.x.next 新模式下传了 onDismiss 且不传 onClose 时,X/ESC/mask 仅调 onDismiss,不双触发 onCancel",
218
+ "不在 onCancel 内 setOpen(false) → Modal 是完全受控组件,不自动关闭",
219
+ "假设 onCancel 和 onClose 等价 → onClose 是 deprecated 的统一路径回调(v6 移除),onCancel 只绑取消按钮"
220
+ ]
221
+ },
222
+ "onDismiss": {
223
+ "signature": "(reason: 'esc' | 'mask' | 'x') => void",
224
+ "asyncSupported": false,
225
+ "examples": [
226
+ "推荐新写法(v5.x.next):`onDismiss={(r) => { if (r !== 'esc') setOpen(false); }}` 区分关闭来源",
227
+ "仅传 onDismiss 不传 onClose → 新单触发行为:X/ESC/mask 只调 onDismiss,不再同时触发 onCancel",
228
+ "同时传 onClose(无论是否传 onDismiss)→ 旧兼容行为:维持 R6 双触发(onCancel + onClose)"
229
+ ],
230
+ "commonMistakes": [
231
+ "假设 onDismiss 的 reason 包含 'cancel' 或 'ok' → ModalDismissReason 只有 'esc' | 'mask' | 'x',按钮路径不走这里",
232
+ "同时传 onClose + onDismiss 并期望单触发 → 同时传 onClose 时维持旧双触发行为,只有删 onClose 才能用新单触发",
233
+ "在 onDismiss 内不 setOpen(false) → Modal 完全受控,必须手动关闭"
234
+ ]
235
+ },
236
+ "onClose": {
237
+ "signature": "(reason: 'cancel' | 'ok' | 'esc' | 'mask' | 'x') => void",
238
+ "asyncSupported": false,
239
+ "examples": [
240
+ "(旧写法,已 @deprecated)统一处理所有关闭路径,reason 区分来源",
241
+ "迁移示例:删 onClose 改用 onDismiss + onOk + onCancel 三回调",
242
+ "如仍使用:`onClose={(r) => { setOpen(false); if (r==='ok') submit(); }}` 在 onClose 里统一 setOpen + 分支处理"
243
+ ],
244
+ "commonMistakes": [
245
+ "传了 onClose 后期望 onOk + onClose('ok') 不重复触发业务逻辑 → 两者叠加触发(src:230-237 实证),需在 onOk 只做提交,在 onClose 里判断 reason='ok' 再 setOpen(false)",
246
+ "在 v6 前就依赖 onClose 的确定/取消路径 → v6.0 移除 onClose,应迁移到新三回调模式",
247
+ "假设 onClose 在 Modal 组件 unmount 时触发 → onClose 仅在用户主动关闭时触发,不是生命周期回调"
248
+ ]
249
+ }
250
+ },
251
+ "typescriptPitfalls": [
252
+ {
253
+ "issue": "ModalCloseReason 和 ModalDismissReason 是不同的类型,不能混用",
254
+ "wrong": "onDismiss={(reason: 'cancel' | 'ok' | 'esc' | 'mask' | 'x') => ...} // onDismiss 参数是 ModalDismissReason,无 'cancel'/'ok'",
255
+ "right": "import { ModalDismissReason } from '@para-ui/core'; onDismiss={(reason: ModalDismissReason) => ...} // ModalDismissReason = 'esc' | 'mask' | 'x'"
256
+ },
257
+ {
258
+ "issue": "disableBackdropClick / disableEscapeKeyDown 默认值是 true(禁用),与多数库默认允许的直觉相反",
259
+ "wrong": "// 期望默认允许点击蒙层关闭 → 实际默认 disableBackdropClick=true 即禁用蒙层关闭",
260
+ "right": "<Modal closeOnBackdrop={true} closeOnEsc={true} /> // 正向命名,明确允许蒙层和ESC关闭(src/Modal/index.tsx:201-204 实证)"
261
+ },
262
+ {
263
+ "issue": "onSubmit 支持 async,onOk 的旧签名不明确支持 Promise",
264
+ "wrong": "onOk={async () => { await doSubmit(); setOpen(false); }} // onOk 已 deprecated,且类型签名不含 Promise",
265
+ "right": "onSubmit={async (e) => { await doSubmit(); setOpen(false); }} // onSubmit 签名: (e?) => void | Promise<void>"
266
+ },
267
+ {
268
+ "issue": "actions prop 接受函数形式时返回值类型是 ReactNode[] 不是 ReactNode",
269
+ "wrong": "actions={(btns) => <div>{btns}</div>} // 返回 ReactNode,TS 报类型不匹配",
270
+ "right": "actions={(btns) => [...btns, <Button key='extra'>额外按钮</Button>]} // 返回 ReactNode[] 数组"
271
+ }
272
+ ],
273
+ "mapping": {
274
+ "realComponent": "Modal",
275
+ "adapter": null
276
+ }
277
+ }
@@ -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
+ }