@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,246 @@
1
+ {
2
+ "name": "Message",
3
+ "category": "Feedback",
4
+ "description": "全局展示操作反馈信息(顶部条状提示)。**通过 4 个静态方法触发,非 React 组件挂载**。**关键 API 形态:`Message.{type}(config, duration?)` —— config 是 MsgTypeProps 对象或纯 string,duration 是【独立的第 2 参数】,不是 MsgTypeProps 的字段**(见 commonMisconceptions.M1)",
5
+ "semantic": {
6
+ "intent": [
7
+ "通知用户操作结果",
8
+ "瞬态状态提示",
9
+ "顶部条状反馈"
10
+ ],
11
+ "useCases": [
12
+ "提交成功 / 失败反馈",
13
+ "操作警告(无需用户确认的轻提示)",
14
+ "瞬态错误信息",
15
+ "loading 场景(workaround,无原生 loading 类型,见 limitations.L2)"
16
+ ],
17
+ "riskLevel": "low"
18
+ },
19
+ "protocolSummary": "**4 类型 × 2 参数签名**:\n```\nMessage.info(config, duration?)\nMessage.success(config, duration?)\nMessage.warn(config, duration?)\nMessage.error(config, duration?)\n```\n- `config: string | MsgTypeProps` —— 字符串(直接当 text)或对象(完整配置)\n- `duration?: number` —— **独立第 2 参数**(毫秒),默认 5000,传 0 / 负数 / NaN 时不自动关闭\n\n**3 个全局方法**:\n```\nMessage.clear() // 关闭当前所有 Message\nMessage.destroyAll() // clear 的别名\nMessage.config({ maxCount?, duration? }) // 修改全局默认值\n```",
20
+ "limitations": {
21
+ "L1_no_onClose_callback": {
22
+ "issue": "**MsgTypeProps 不支持 onClose / onDismiss / onAfterClose 回调** —— 用户手动关闭或自动关闭后无法触发回调",
23
+ "rootCause": "src/Message/index.tsx 未暴露 callback 字段",
24
+ "workaround": "如果业务需要'关闭后执行 X':\n1. **如果是自动关闭**:用 `setTimeout(handler, duration)` 自己计时(精度误差 ~50ms)\n2. **如果是手动关闭(close 按钮)**:Message 本身没法监听,需要换 Toast / Snackbar / Modal 组件"
25
+ },
26
+ "L2_no_loading_variant": {
27
+ "issue": "**没有 Message.loading 方法 / loading variant** —— variants 只有 info/success/warn/error 4 种",
28
+ "rootCause": "src/Message/index.tsx 未实现 loading 静态方法",
29
+ "workaround": "用 `Message.info({ text: '加载中...', icon: <Loading />, close: true }, 0)`(duration=0 不自动关闭),loading 完成后调 `Message.clear()` 关闭。**注意**:icon prop 需要传入 Loading 图标组件 ReactNode",
30
+ "alternative": "需要真正的 loading 视觉(spinner / 进度) → 用 Loading 组件 / Spin 组件,不要硬塞 Message"
31
+ }
32
+ },
33
+ "variants": {
34
+ "info": {
35
+ "meaning": "普通信息(蓝色 i 图标)"
36
+ },
37
+ "success": {
38
+ "meaning": "操作成功(绿色 ✓ 图标)"
39
+ },
40
+ "warn": {
41
+ "meaning": "警告(黄色 ! 图标)"
42
+ },
43
+ "error": {
44
+ "meaning": "错误(红色 × 图标)"
45
+ }
46
+ },
47
+ "states": [
48
+ "opening",
49
+ "closing"
50
+ ],
51
+ "idealProps": {
52
+ "text": {
53
+ "type": "string",
54
+ "description": "主文本(标题)。也可以把整个 config 简化成纯字符串:`Message.info('提交成功', 3000)` 等同于 `Message.info({ text: '提交成功' }, 3000)`"
55
+ },
56
+ "desc": {
57
+ "type": "string",
58
+ "description": "副描述文案;**出现时 text 会自动加粗变标题**,desc 作为下方说明文本"
59
+ },
60
+ "icon": {
61
+ "type": "ReactNode",
62
+ "description": "自定义图标(覆盖 type 默认图标)。loading 场景常传入 `<Loading />` 图标组件配合 duration=0。**与 hideIcon 互斥**(同时传 hideIcon 优先)"
63
+ },
64
+ "hideIcon": {
65
+ "type": "boolean",
66
+ "default": false,
67
+ "description": "隐藏图标,显示纯文本提示。**与 icon 互斥**"
68
+ },
69
+ "close": {
70
+ "type": "boolean",
71
+ "description": "**强制显示关闭按钮**。undefined 时按 duration 推断:duration>0 不显示关闭按钮(自动关闭即可),duration<=0 或 NaN 显示关闭按钮(需要用户手动关闭)"
72
+ },
73
+ "maxCount": {
74
+ "type": "number",
75
+ "default": "Infinity",
76
+ "description": "同时显示最大条数。per-call(MsgTypeProps.maxCount)或全局(Message.config({ maxCount: N }))"
77
+ },
78
+ "html": {
79
+ "type": "boolean",
80
+ "default": false,
81
+ "description": "是否把 text 当 innerHTML 渲染。**仅可信来源使用**(避免 XSS)"
82
+ },
83
+ "className": {
84
+ "type": "string",
85
+ "description": "提示容器的 className"
86
+ },
87
+ "style": {
88
+ "type": "React.CSSProperties",
89
+ "description": "提示容器的 style"
90
+ }
91
+ },
92
+ "staticMethods": {
93
+ "info": {
94
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void",
95
+ "callExample": "// 正确:\nMessage.info('提交成功', 3000)\nMessage.info({ text: '提交成功', desc: '已保存到草稿' }, 3000)\nMessage.info({ text: '加载中', icon: <Loading />, close: true }, 0)\n\n// 错误(M1):\nMessage.info({ text: '提交成功', duration: 3000 }) // ❌ duration 不是 MsgTypeProps 的字段!"
96
+ },
97
+ "success": {
98
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void"
99
+ },
100
+ "warn": {
101
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void"
102
+ },
103
+ "error": {
104
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void"
105
+ },
106
+ "clear": {
107
+ "signature": "() => void",
108
+ "description": "关闭当前页面所有 Message 实例"
109
+ },
110
+ "destroyAll": {
111
+ "signature": "() => void",
112
+ "description": "clear 的别名(deprecated 倾向 —— **新代码推荐 clear**)"
113
+ },
114
+ "config": {
115
+ "signature": "(config: { maxCount?: number; duration?: number }) => void",
116
+ "description": "修改全局默认值(影响后续 Message.{type} 调用)"
117
+ }
118
+ },
119
+ "commonMisconceptions": {
120
+ "M1": {
121
+ "wrong": "把 duration 写进 MsgTypeProps 对象: `Message.info({ text: '提交成功', duration: 3000 })`",
122
+ "result": "**TS 报错 TS2353 'duration does not exist in type MsgTypeProps'** —— R23 Message-005 fail 根因",
123
+ "fix": "duration 是 Message.{type}() 的**独立第 2 参数**: `Message.info({ text: '提交成功' }, 3000)` 或纯字符串形式 `Message.info('提交成功', 3000)`"
124
+ },
125
+ "M2": {
126
+ "wrong": "传 onClose / onDismiss / onAfterClose 回调期望关闭时触发: `Message.info({ text: '已删除', onClose: handleAfterClose })`",
127
+ "result": "**MsgTypeProps 无 callback 字段**——TS 报错 或者字段被静默忽略,handleAfterClose 永不触发(L1)",
128
+ "fix": "1. 自动关闭后回调:用 `setTimeout(handleAfterClose, duration)`(精度 ~50ms 误差)。2. 手动关闭监听:Message 不支持,换 Toast / Snackbar"
129
+ },
130
+ "M3": {
131
+ "wrong": "调用 `Message.loading('加载中...', 0)` 期望显示 loading 类型",
132
+ "result": "**Message 没有 loading 静态方法**(只有 info/success/warn/error)——runtime 报 `Message.loading is not a function`(L2)",
133
+ "fix": "用 `Message.info({ text: '加载中...', icon: <Loading />, close: true }, 0)` workaround(duration=0 + Loading 图标),完成后 `Message.clear()`。或者用真正的 Loading 组件而不是 Message"
134
+ },
135
+ "M4": {
136
+ "wrong": "默认 duration 是 0(永远不自动关闭): `Message.info('已保存')` 期望一直显示",
137
+ "result": "默认 duration = 5000 ms(自动 5 秒后关闭) —— `Message.info('已保存')` 会 5 秒后消失",
138
+ "fix": "想永久显示用 `Message.info('已保存', 0)` 或显式传 `0` / 负数 / NaN"
139
+ },
140
+ "M5": {
141
+ "wrong": "用 `Message.config({ duration: 0 })` 永久禁用全局自动关闭,然后期望每次 `Message.info('x')` 不自动消失",
142
+ "result": "**Message.config 修改的是全局默认值**,生效但 per-call 第 2 参数会覆盖。可以用,但容易和 per-call duration 互相覆盖出 bug",
143
+ "fix": "per-call 显式传 duration 更直观: `Message.info('x', 0)`。全局 config 适合统一调小默认 duration(如 3000)"
144
+ }
145
+ },
146
+ "completeExample": "// 1. 最基础:字符串简写 + 默认 5 秒自动关闭\nimport Message from '@para-ui/core/Message';\nMessage.info('提交成功');\nMessage.success('保存成功', 3000); // 3 秒后自动关闭\n\n// 2. 完整对象配置(text + desc + icon)\nMessage.info({\n text: '操作成功',\n desc: '订单 #1234 已提交,5 个工作日内处理完成'\n}, 8000);\n\n// 3. 不自动关闭 + 显示关闭按钮\nMessage.warn({\n text: '需要用户确认',\n close: true\n}, 0); // duration=0 不自动关闭\n\n// 4. loading 场景 workaround (L2)\nimport Loading from '@para-ui/icons/Loading';\nMessage.info({\n text: '上传中...',\n icon: <Loading />,\n close: false\n}, 0); // duration=0 不自动关闭\n// 上传完成后:\nawait uploadFile();\nMessage.clear();\nMessage.success('上传成功', 2000);\n\n// 5. 关闭回调 workaround (L1)\nMessage.info('已保存', 3000);\nsetTimeout(() => onAfterClose(), 3000); // 自己计时,精度 ~50ms\n\n// 6. 全局配置\nMessage.config({ duration: 3000, maxCount: 3 }); // 后续 Message 默认 3 秒,最多 3 条同显",
147
+ "do": [
148
+ "**优先用字符串简写**: `Message.info('提交成功', 3000)` —— 不需要对象时省心",
149
+ "**duration 永远是第 2 参数**(M1) —— 不要写在 MsgTypeProps 对象里",
150
+ "**长内容用 text + desc 双字段**,desc 出现时 text 自动加粗",
151
+ "**永久显示**:传 duration=0 / 负数 / NaN,通常配合 close=true 让用户手动关闭",
152
+ "**全局默认值调整**:用 Message.config({ duration, maxCount }),只在 app 启动时调一次",
153
+ "loading 场景:用 info + Loading icon + duration=0 workaround(L2)"
154
+ ],
155
+ "dont": [
156
+ "**不要**把 duration 写在 MsgTypeProps 对象里——是第 2 参数(M1,这是 R23 Message-005 fail 根因)",
157
+ "**不要**传 onClose / onDismiss 回调——MsgTypeProps 无 callback 字段(M2,L1)",
158
+ "**不要**调 Message.loading —— 不存在,用 info + icon workaround(M3,L2)",
159
+ "**不要**假设默认 duration 是 0——默认 5000 ms(M4)",
160
+ "在 Message 中展示过多文字 / 表单 / 复杂交互 —— 换 Modal",
161
+ "滥用 error 类型 —— 重要错误应结合页面内错误提示"
162
+ ],
163
+ "events": {
164
+ "info": {
165
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void",
166
+ "asyncSupported": false,
167
+ "examples": [
168
+ "Message.info('操作成功') — 字符串简写,默认 5000ms 自动关闭",
169
+ "Message.info({ text: '操作成功', desc: '已保存到草稿' }, 3000) — 对象配置 + 独立 duration 第 2 参数",
170
+ "Message.info({ text: '加载中...', icon: <Loading />, close: true }, 0) — duration=0 不自动关闭,显示关闭按钮"
171
+ ],
172
+ "commonMistakes": [
173
+ "把 duration 写进 MsgTypeProps 对象:Message.info({ text: '成功', duration: 3000 }) → TS2353 报错,duration 不是 MsgTypeProps 字段",
174
+ "调用 Message.loading() → Message 没有 loading 方法,只有 info/success/warn/error,调用报 'not a function'",
175
+ "传 onClose/onAfterClose 回调 → MsgTypeProps 无 callback 字段,静默忽略,回调永不触发"
176
+ ]
177
+ },
178
+ "success": {
179
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void",
180
+ "asyncSupported": false,
181
+ "examples": [
182
+ "Message.success('保存成功', 2000) — 2 秒后自动关闭",
183
+ "Message.success({ text: '上传完成', desc: '共 3 个文件' }) — 含副描述"
184
+ ],
185
+ "commonMistakes": [
186
+ "假设 success 和 info 签名不同 → 4 种类型签名完全相同,都是 (config, duration?) => void"
187
+ ]
188
+ },
189
+ "warn": {
190
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void",
191
+ "asyncSupported": false,
192
+ "examples": [
193
+ "Message.warn({ text: '需要确认', close: true }, 0) — 永久显示 + 显示关闭按钮"
194
+ ],
195
+ "commonMistakes": [
196
+ "传 onClose 期望点击关闭按钮后回调 → 不支持 onClose,只能用 setTimeout 模拟"
197
+ ]
198
+ },
199
+ "error": {
200
+ "signature": "(config: string | MsgTypeProps, duration?: number) => void",
201
+ "asyncSupported": false,
202
+ "examples": [
203
+ "Message.error('操作失败,请重试', 8000) — 错误类型展示 8 秒"
204
+ ],
205
+ "commonMistakes": [
206
+ "假设 error 方法接受 Error 对象 → config 必须是 string 或 MsgTypeProps,需手动取 error.message"
207
+ ]
208
+ }
209
+ },
210
+ "typescriptPitfalls": [
211
+ {
212
+ "issue": "duration 是 Message.{type}() 的独立第 2 参数,不是 MsgTypeProps 对象的字段",
213
+ "wrong": "Message.info({ text: '操作成功', duration: 3000 }) // TS2353: 'duration' does not exist in type MsgTypeProps",
214
+ "right": "Message.info({ text: '操作成功' }, 3000) // 或 Message.info('操作成功', 3000)"
215
+ },
216
+ {
217
+ "issue": "MsgTypeProps 不含 onClose / onAfterClose / onDismiss 回调字段",
218
+ "wrong": "Message.success({ text: '已删除', onClose: () => refetch() }) // TS 报错 或 字段静默被忽略",
219
+ "right": "Message.success('已删除', 3000); setTimeout(() => refetch(), 3000); // 用 setTimeout 自己计时"
220
+ },
221
+ {
222
+ "issue": "Message 没有 loading 静态方法(只有 info/success/warn/error)",
223
+ "wrong": "Message.loading('上传中...') // 运行时 TypeError: Message.loading is not a function",
224
+ "right": "Message.info({ text: '上传中...', close: false }, 0); // duration=0 + 用 Message.clear?.() 关闭"
225
+ },
226
+ {
227
+ "issue": "MessageObject 导出的是对象实例,不是 React 组件,不能写 <Message> JSX",
228
+ "wrong": "import Message from '@para-ui/core/Message'; return <Message type='success' text='ok' />; // JSX 类型错误",
229
+ "right": "import { Message } from '@para-ui/core/Message'; Message.success('ok'); // 命令式调用,不是 JSX 渲染"
230
+ },
231
+ {
232
+ "issue": "从 @para-ui/core 直接导入 Message 拿到的是 JSX 组件(默认导出),不是 MessageObject,所有方法 success/error/info/warn/clear/config 均不存在",
233
+ "wrong": "import { Message } from '@para-ui/core'; // TS2339: Property 'success' does not exist on type '() => Element'",
234
+ "right": "import { Message } from '@para-ui/core/Message'; // 子路径导入拿到具名 MessageObject 实例"
235
+ },
236
+ {
237
+ "issue": "MessageObject 接口的 clear 和 config 是可选方法(带 ?),直接调用不加可选链会报 TS2722",
238
+ "wrong": "Message.clear(); // TS2722: Cannot invoke an object which is possibly 'undefined'\nMessage.config({ duration: 3000 }); // 同上",
239
+ "right": "Message.clear?.(); // 可选链调用\nMessage.config?.({ duration: 3000 }); // 或先检查: if (Message.config) Message.config({ duration: 3000 })"
240
+ }
241
+ ],
242
+ "mapping": {
243
+ "realComponent": "Message",
244
+ "adapter": null
245
+ }
246
+ }
@@ -10,7 +10,7 @@ interface InternalMsgConfig {
10
10
  /** 消息文本 */
11
11
  text: string;
12
12
  /** 图标 */
13
- icon?: any;
13
+ icon?: React.ReactNode;
14
14
  /** 内部消息类型 */
15
15
  type: MsgType;
16
16
  /** 最大显示数 */
@@ -45,7 +45,7 @@ export type MsgTypeProps = {
45
45
  /**
46
46
  * 图标
47
47
  */
48
- icon?: any;
48
+ icon?: React.ReactNode;
49
49
  /**
50
50
  * 最大显示数
51
51
  */
@@ -3,5 +3,5 @@
3
3
  <div class="msg-text"></div>
4
4
  ${l?'<div class="msg-close"></div>':""}
5
5
  </div>
6
- `;const u=t.querySelector(".msg-wrapper"),a=t.querySelector(".msg-text");if(!a||!u)return t;if(n?a.innerHTML=s:a.textContent=s,c){const r=document.createElement("span");r.className="msg-desc",r.textContent=c||"",a.classList.add("msg-text--title"),u.classList.add("msg-wrapper-title"),a.appendChild(r)}d&&a.classList.add("msg-text--noicon");const g=t.querySelector(".msg-close");return g&&g.addEventListener("click",()=>{document.querySelector(`#${o}`)&&(t?.parentNode?.removeChild(t),t=null)}),t},B=e=>{const{className:s,style:o,type:i}=e,n=q(),l=_();let c=M(e.className||"");return s&&(c+=` ${s}`),I.useEffect(()=>{const d=document.getElementById(n);return E(d,{...e,id:l,icon:$[i]},0,!1,!0),()=>{const t=document.querySelector(`#${l}`);t&&d?.removeChild(t)}},[...Object.values(e)]),f.jsxRuntimeExports.jsx("div",{id:n,className:c,style:o})},q=()=>`msgbox_${String(Math.random()*1e5|0+new Date().getTime())}`,x=q(),D=()=>f.jsxRuntimeExports.jsx("div",{className:`${w.$prefixCls}-message-box`,id:x}),E=(e,{icon:s,text:o,id:i,type:n,html:l,close:c,desc:d,hideIcon:t},u,a,g)=>{const r=T({id:i,text:o,icon:s,type:n,html:l,close:c,desc:d,hideIcon:t});g&&r&&r.classList.add("msg-item-fill"),e?.appendChild(r);const C=document.querySelector(`#${i} .msg-icon`);C&&s&&!t&&y.render(s,C);const p=document.querySelector(`#${i} .msg-close`);p&&y.render(f.jsxRuntimeExports.jsx(R.Close,{}),p),a&&setTimeout(()=>{document.querySelector(`#${r.id}`)&&e?.removeChild(r)},u)},h=(e,s,o,i)=>{const n=()=>N().__msg_conf__||{};let l=$[o],c="",d="",t=!1,u,a=!1,g=n().maxCount??1/0,r=n().duration??s,C="";const p=!isNaN(r)&&r>0;typeof e=="string"?c=e:typeof e=="object"&&(c=e.text||"",d=e.desc,l=e.icon||$[o],t=e.html||!1,a=e.hideIcon||!1,e.maxCount>0&&(g=e.maxCount||1/0)),typeof e=="object"&&typeof e.close=="boolean"?u=e.close:u=!p;let m=document.getElementById(i);m||(m=document.createElement("div"),m.id=i,document.body.appendChild(m)),m.className=M(C),m.className+=` ${w.$prefixCls}-message-box--message-float`;const S=_();E(m,{id:S,text:c,icon:l,type:o,html:t,close:u,desc:d,hideIcon:a},r,p),F(m,g)},M=e=>`${w.$prefixCls}-message-box${e?` ${e}`:""}`,_=()=>`msgitem_${String(Math.random()*1e5|0+new Date().getTime())}`,F=(e,s)=>{if(!e||!e.children?.length)return;const o=e.children,i=o.length;if(i>s)for(let n=0;n<i;n++)n<s&&o[n]&&o[n].parentNode?.removeChild(o[n])},j=e=>{const s=document.getElementById(e);s&&(s.innerHTML="")},W=(e={})=>{const s=N();s.__msg_conf__=e},H={info:(e,s=5e3)=>h(e,s,"info",x),warn:(e,s=5e3)=>h(e,s,"warn",x),error:(e,s=5e3)=>h(e,s,"error",x),success:(e,s=5e3)=>h(e,s,"success",x),clear:()=>j(x),destroyAll:()=>j(x),config:e=>W(e)};exports.Message=H;exports.MessageBar=B;exports.default=D;
6
+ `;const u=t.querySelector(".msg-wrapper"),a=t.querySelector(".msg-text");if(!a||!u)return t;if(n?a.innerHTML=s:a.textContent=s,c){const r=document.createElement("span");r.className="msg-desc",r.textContent=c||"",a.classList.add("msg-text--title"),u.classList.add("msg-wrapper-title"),a.appendChild(r)}d&&a.classList.add("msg-text--noicon");const g=t.querySelector(".msg-close");return g&&g.addEventListener("click",()=>{document.querySelector(`#${o}`)&&(t?.parentNode?.removeChild(t),t=null)}),t},B=e=>{const{className:s,style:o,type:i}=e,n=q(),l=_();let c=M(e.className||"");return s&&(c+=` ${s}`),I.useEffect(()=>{const d=document.getElementById(n);return E(d,{...e,id:l,icon:$[i]},0,!1,!0),()=>{const t=document.querySelector(`#${l}`);t&&d?.removeChild(t)}},[...Object.values(e)]),f.jsxRuntimeExports.jsx("div",{id:n,className:c,style:o})},q=()=>`msgbox_${String(Math.random()*1e5|0+new Date().getTime())}`,x=q(),D=()=>f.jsxRuntimeExports.jsx("div",{className:`${w.$prefixCls}-message-box`,id:x}),E=(e,{icon:s,text:o,id:i,type:n,html:l,close:c,desc:d,hideIcon:t},u,a,g)=>{const r=T({id:i,text:o,icon:s,type:n,html:l,close:c,desc:d,hideIcon:t});g&&r&&r.classList.add("msg-item-fill"),e?.appendChild(r);const C=document.querySelector(`#${i} .msg-icon`);C&&s&&!t&&y.render(s,C);const p=document.querySelector(`#${i} .msg-close`);p&&y.render(f.jsxRuntimeExports.jsx(R.Close,{}),p),a&&setTimeout(()=>{document.querySelector(`#${r.id}`)&&e?.removeChild(r)},u)},h=(e,s,o,i)=>{const n=()=>N()?.__msg_conf__||{};let l=$[o],c="",d="",t=!1,u,a=!1,g=n().maxCount??1/0,r=n().duration??s,C="";const p=!isNaN(r)&&r>0;typeof e=="string"?c=e:typeof e=="object"&&(c=e.text||"",d=e.desc,l=e.icon||$[o],t=e.html||!1,a=e.hideIcon||!1,e.maxCount>0&&(g=e.maxCount||1/0)),typeof e=="object"&&typeof e.close=="boolean"?u=e.close:u=!p;let m=document.getElementById(i);m||(m=document.createElement("div"),m.id=i,document.body.appendChild(m)),m.className=M(C),m.className+=` ${w.$prefixCls}-message-box--message-float`;const S=_();E(m,{id:S,text:c,icon:l,type:o,html:t,close:u,desc:d,hideIcon:a},r,p),F(m,g)},M=e=>`${w.$prefixCls}-message-box${e?` ${e}`:""}`,_=()=>`msgitem_${String(Math.random()*1e5|0+new Date().getTime())}`,F=(e,s)=>{if(!e||!e.children?.length)return;const o=e.children,i=o.length;if(i>s)for(let n=0;n<i;n++)n<s&&o[n]&&o[n].parentNode?.removeChild(o[n])},j=e=>{const s=document.getElementById(e);s&&(s.innerHTML="")},W=(e={})=>{const s=N();s&&(s.__msg_conf__=e)},H={info:(e,s=5e3)=>h(e,s,"info",x),warn:(e,s=5e3)=>h(e,s,"warn",x),error:(e,s=5e3)=>h(e,s,"error",x),success:(e,s=5e3)=>h(e,s,"success",x),clear:()=>j(x),destroyAll:()=>j(x),config:e=>W(e)};exports.Message=H;exports.MessageBar=B;exports.default=D;
7
7
  //# sourceMappingURL=index.js.map
@@ -51,7 +51,7 @@ type ConfirmProps = Omit<ConfirmDialogProps, 'open' | 'resolveFn' | 'destroy' |
51
51
  uuid?: string;
52
52
  };
53
53
  interface ConfirmFn {
54
- (config: ConfirmProps | string, callback?: Function): void | Promise<any>;
54
+ (config: ConfirmProps | string, callback?: Function): void | Promise<unknown>;
55
55
  }
56
56
  export interface ConfirmObject {
57
57
  info: ConfirmFn;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const t=require("../../_virtual/jsx-runtime.js"),C=require("react-dom"),A=require("../index.js"),B=require("../../node_modules/@para-ui/icons/Close/index.js"),M=require("../../node_modules/@para-ui/icons/CheckCircleF/index.js"),x=require("../../node_modules/@para-ui/icons/WarningCircleF/index.js"),$=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),h=require("clsx"),m=require("../../Button/index.js"),O=require("@snack-kit/lib");require("../../GlobalContext/index.js");const P=require("../../GlobalContext/constant.js");;/* empty css */const z=require("../../GlobalContext/confirmLocale.js"),D={success:t.jsxRuntimeExports.jsx(M.CheckCircleF,{}),warn:t.jsxRuntimeExports.jsx(x.WarningCircleF,{}),warning:t.jsxRuntimeExports.jsx(x.WarningCircleF,{}),error:t.jsxRuntimeExports.jsx($.CloseCircleF,{}),info:t.jsxRuntimeExports.jsx(x.WarningCircleF,{})},L=e=>{const{type:n="warning",title:o,content:s,icon:r,okText:l,cancelText:c,onOk:R,onCancel:E,className:y,showCancel:q=!0,closable:N=!1,okButtonProps:k,cancelButtonProps:v,resolveFn:d,callback:b,destroy:j,actions:f,showActions:w=!0,...g}=e,F=`${P.$prefixCls}-confirm`,u=()=>{E?.(),d?.(!1),j?.()},p=()=>{R?.(),d?.(!0),b?.(),j?.()},T=()=>w?f?t.jsxRuntimeExports.jsx("div",{className:"confirm-content-actions",children:f}):t.jsxRuntimeExports.jsxs("div",{className:"confirm-content-actions",children:[q&&t.jsxRuntimeExports.jsx(m.Button,{variant:"outlined",size:"small",onClick:u,...v,children:c}),t.jsxRuntimeExports.jsx(m.Button,{variant:"contained",size:"small",onClick:p,...k,children:l})]}):null;return t.jsxRuntimeExports.jsx(A.Modal,{bodyStyle:{minHeight:"auto"},...g,onOk:p,onCancel:u,title:"",footer:"",size:"auto",hideHeader:!0,showActions:!1,className:h(F,y),children:t.jsxRuntimeExports.jsx("div",{className:"confirm-wrapper",children:t.jsxRuntimeExports.jsxs("div",{className:"confirm-content",children:[N&&t.jsxRuntimeExports.jsx(m.Button.IconButton,{variant:"outlined",size:"small",className:"confirm-content-close",onClick:u,children:t.jsxRuntimeExports.jsx(B.Close,{})}),t.jsxRuntimeExports.jsx("span",{className:h("confirm-content-icon",`confirm-content-icon--${n}`),children:r||D[n]}),t.jsxRuntimeExports.jsxs("div",{className:"confirm-content-body",children:[o&&t.jsxRuntimeExports.jsx("span",{className:"confirm-body-title",children:o}),t.jsxRuntimeExports.jsx("div",{className:"confirm-body-desc",children:s})]}),T()]})})})},i=new Map,S=(e,n,o)=>{const s=document.createElement("div"),r=e.uuid||O.UUID();e.uuid&&s.setAttribute("data-confirm-cid",e.uuid),document.body.appendChild(s);const l=()=>{C.unmountComponentAtNode(s)&&s.parentNode&&s.parentNode.removeChild(s),i.delete(r)};i.set(r,l),setTimeout(()=>{const c=z.getConfirmLocale();C.render(t.jsxRuntimeExports.jsx(L,{...e,okText:e.okText??c.ok,cancelText:e.cancelText??c.cancel,open:!0,resolveFn:n,callback:o,destroy:l}),s)})},a=(e,n,o)=>{let s={type:n};return typeof e=="string"?s.content=e:s={...e,type:n},new Promise(r=>{S(s,r,o)})},W=e=>{if(e){const n=i.get(e);n&&n(),i.delete(e);return}i.forEach(n=>{n&&n()}),i.clear()},H={info:(e,n)=>a(e,"info",n),warn:(e,n)=>a(e,"warn",n),error:(e,n)=>a(e,"error",n),success:(e,n)=>a(e,"success",n),destroyAll:W};exports.Confirm=H;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const t=require("../../_virtual/jsx-runtime.js"),R=require("react-dom"),O=require("../index.js"),$=require("../../node_modules/@para-ui/icons/Close/index.js"),P=require("../../node_modules/@para-ui/icons/CheckCircleF/index.js"),d=require("../../node_modules/@para-ui/icons/WarningCircleF/index.js"),D=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),k=require("clsx"),m=require("../../Button/index.js"),z=require("@snack-kit/lib");require("../../GlobalContext/index.js");const L=require("../../GlobalContext/constant.js");;/* empty css */const S=require("../../GlobalContext/confirmLocale.js"),W={success:t.jsxRuntimeExports.jsx(P.CheckCircleF,{}),warn:t.jsxRuntimeExports.jsx(d.WarningCircleF,{}),warning:t.jsxRuntimeExports.jsx(d.WarningCircleF,{}),error:t.jsxRuntimeExports.jsx(D.CloseCircleF,{}),info:t.jsxRuntimeExports.jsx(d.WarningCircleF,{})},H=e=>{const{type:n="warning",title:o,content:s,icon:r,okText:l,cancelText:c,onOk:v,onCancel:y,className:b,showCancel:q=!0,closable:N=!1,okButtonProps:w,cancelButtonProps:g,resolveFn:j,callback:B,destroy:f,actions:p,showActions:F=!0,disableBackdropClick:C,disableEscapeKeyDown:h,...T}=e,x={};C!==void 0&&(x.closeOnBackdrop=!C),h!==void 0&&(x.closeOnEsc=!h);const A=`${L.$prefixCls}-confirm`,a=()=>{y?.(),j?.(!1),f?.()},E=()=>{v?.(),j?.(!0),B?.(),f?.()},M=()=>F?p?t.jsxRuntimeExports.jsx("div",{className:"confirm-content-actions",children:p}):t.jsxRuntimeExports.jsxs("div",{className:"confirm-content-actions",children:[q&&t.jsxRuntimeExports.jsx(m.Button,{variant:"outlined",size:"small",onClick:a,...g,children:c}),t.jsxRuntimeExports.jsx(m.Button,{variant:"contained",size:"small",onClick:E,...w,children:l})]}):null;return t.jsxRuntimeExports.jsx(O.Modal,{bodyStyle:{minHeight:"auto"},...T,...x,onOk:E,onCancel:a,onDismiss:a,title:"",footer:"",size:"auto",hideHeader:!0,showActions:!1,className:k(A,b),children:t.jsxRuntimeExports.jsx("div",{className:"confirm-wrapper",children:t.jsxRuntimeExports.jsxs("div",{className:"confirm-content",children:[N&&t.jsxRuntimeExports.jsx(m.Button.IconButton,{variant:"outlined",size:"small",className:"confirm-content-close",onClick:a,children:t.jsxRuntimeExports.jsx($.Close,{})}),t.jsxRuntimeExports.jsx("span",{className:k("confirm-content-icon",`confirm-content-icon--${n}`),children:r||W[n]}),t.jsxRuntimeExports.jsxs("div",{className:"confirm-content-body",children:[o&&t.jsxRuntimeExports.jsx("span",{className:"confirm-body-title",children:o}),t.jsxRuntimeExports.jsx("div",{className:"confirm-body-desc",children:s})]}),M()]})})})},i=new Map,I=(e,n,o)=>{const s=document.createElement("div"),r=e.uuid||z.UUID();e.uuid&&s.setAttribute("data-confirm-cid",e.uuid),document.body.appendChild(s);const l=()=>{R.unmountComponentAtNode(s)&&s.parentNode&&s.parentNode.removeChild(s),i.delete(r)};i.set(r,l),setTimeout(()=>{const c=S.getConfirmLocale();R.render(t.jsxRuntimeExports.jsx(H,{...e,okText:e.okText??c.ok,cancelText:e.cancelText??c.cancel,open:!0,resolveFn:n,callback:o,destroy:l}),s)})},u=(e,n,o)=>{let s={type:n};return typeof e=="string"?s.content=e:s={...e,type:n},new Promise(r=>{I(s,r,o)})},U=e=>{if(e){const n=i.get(e);n&&n(),i.delete(e);return}i.forEach(n=>{n&&n()}),i.clear()},_={info:(e,n)=>u(e,"info",n),warn:(e,n)=>u(e,"warn",n),error:(e,n)=>u(e,"error",n),success:(e,n)=>u(e,"success",n),destroyAll:U};exports.Confirm=_;
2
2
  //# sourceMappingURL=index.js.map
@@ -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
+ }