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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (650) hide show
  1. package/AGENTS.md +315 -0
  2. package/AlignBox/component.json +89 -0
  3. package/Anchor/component.json +130 -0
  4. package/Argv/component.json +216 -0
  5. package/AutoBox/component.json +133 -0
  6. package/AutoButton/component.json +109 -0
  7. package/AutoTips/component.json +121 -0
  8. package/Badge/component.json +92 -0
  9. package/Breadcrumbs/component.json +142 -0
  10. package/Button/component.json +168 -0
  11. package/ButtonGroup/component.json +132 -0
  12. package/Card/component.json +162 -0
  13. package/Carousel/component.json +142 -0
  14. package/Cascader/component.json +196 -0
  15. package/Checkbox/component.json +138 -0
  16. package/CheckboxGroup/component.json +152 -0
  17. package/CodeEditor/component.json +189 -0
  18. package/Collapse/component.json +166 -0
  19. package/CollapseBox/component.json +84 -0
  20. package/CollapseLayout/component.json +155 -0
  21. package/ColorPicker/component.json +142 -0
  22. package/ComboSelect/component.json +181 -0
  23. package/Container/component.json +111 -0
  24. package/ContentBox/component.json +81 -0
  25. package/CopyText/component.json +118 -0
  26. package/CycleSelector/component.json +98 -0
  27. package/DatePicker/component.json +192 -0
  28. package/Descriptions/component.json +142 -0
  29. package/Desktop/component.json +171 -0
  30. package/DragVerify/component.json +114 -0
  31. package/Drawer/component.json +200 -0
  32. package/Dropdown/component.json +147 -0
  33. package/DynamicMultiBox/component.json +278 -0
  34. package/Empty/component.json +123 -0
  35. package/FieldForm/component.json +196 -0
  36. package/Form/component.json +161 -0
  37. package/FormItem/component.json +171 -0
  38. package/FunctionModal/component.json +197 -0
  39. package/Help/component.json +118 -0
  40. package/HelperText/component.json +126 -0
  41. package/Image/component.json +165 -0
  42. package/InputCode/component.json +191 -0
  43. package/InputLang/component.json +205 -0
  44. package/InputNumber/component.json +162 -0
  45. package/Label/component.json +126 -0
  46. package/Loading/component.json +91 -0
  47. package/Menu/component.json +180 -0
  48. package/Message/component.json +246 -0
  49. package/Modal/component.json +277 -0
  50. package/MultiBox/component.json +216 -0
  51. package/Notification/component.json +184 -0
  52. package/OperateBtn/component.json +134 -0
  53. package/PageHeader/component.json +112 -0
  54. package/Pagination/component.json +181 -0
  55. package/PasswordRules/component.json +105 -0
  56. package/PopConfirm/component.json +227 -0
  57. package/PopMenu/component.json +131 -0
  58. package/Popover/component.json +165 -0
  59. package/Progress/component.json +161 -0
  60. package/Prompt/component.json +144 -0
  61. package/Querying/component.json +96 -0
  62. package/QuickReply/component.json +129 -0
  63. package/Radio/component.json +136 -0
  64. package/RadioGroup/component.json +149 -0
  65. package/RangeInput/component.json +198 -0
  66. package/Result/component.json +104 -0
  67. package/ScrollBar/component.json +115 -0
  68. package/Search/component.json +177 -0
  69. package/Select/component.json +244 -0
  70. package/SelectInput/component.json +184 -0
  71. package/Selector/component.json +203 -0
  72. package/SelectorPicker/component.json +179 -0
  73. package/SingleBox/component.json +151 -0
  74. package/Slider/component.json +181 -0
  75. package/SortBox/component.json +108 -0
  76. package/Status/component.json +104 -0
  77. package/Stepper/component.json +129 -0
  78. package/Switch/component.json +207 -0
  79. package/Table/component.json +547 -0
  80. package/Tabs/component.json +227 -0
  81. package/Tag/component.json +221 -0
  82. package/TextEditor/component.json +186 -0
  83. package/TextField/component.json +290 -0
  84. package/TimePicker/component.json +176 -0
  85. package/Timeline/component.json +110 -0
  86. package/Title/component.json +156 -0
  87. package/ToggleButton/component.json +153 -0
  88. package/Tooltip/component.json +176 -0
  89. package/Transfer/component.json +157 -0
  90. package/Tree/component.json +512 -0
  91. package/Upload/component.json +450 -0
  92. package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
  93. package/ai-workflows/02-rbac-operation-buttons.md +290 -0
  94. package/ai-workflows/03-complex-form-async-cascade.md +350 -0
  95. package/ai-workflows/04-array-field-form.md +281 -0
  96. package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
  97. package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
  98. package/ai-workflows/07-search-filter-table-trio.md +387 -0
  99. package/ai-workflows/08-table-advanced-features.md +365 -0
  100. package/ai-workflows/09-batch-operation-export-progress.md +367 -0
  101. package/ai-workflows/10-cross-component-state-coordination.md +412 -0
  102. package/es/AlignBox/component.json +89 -0
  103. package/es/AlignBox/index.css +1 -1
  104. package/es/AlignBox/index.d.ts +6 -2
  105. package/es/AlignBox/index.js +1 -1
  106. package/es/AlignBox/style/index.css +1 -1
  107. package/es/Anchor/anchorMenu/index.d.ts +2 -1
  108. package/es/Anchor/anchorMenu/index.js +36 -33
  109. package/es/Anchor/component.json +130 -0
  110. package/es/Anchor/index.js +52 -49
  111. package/es/Anchor/type.d.ts +8 -4
  112. package/es/Argv/component.json +216 -0
  113. package/es/Argv/dataGenerator/index.js +1 -1
  114. package/es/Argv/index.d.ts +5 -6
  115. package/es/Argv/index.js +1 -1
  116. package/es/AutoBox/component.json +133 -0
  117. package/es/AutoBox/index.d.ts +3 -3
  118. package/es/AutoBox/index.js +1 -1
  119. package/es/AutoBox/protal.d.ts +2 -2
  120. package/es/AutoBox/protal.js +33 -30
  121. package/es/AutoButton/component.json +109 -0
  122. package/es/AutoButton/index.js +1 -1
  123. package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  124. package/es/AutoTips/autoTipsMultiline/index.js +1 -1
  125. package/es/AutoTips/component.json +121 -0
  126. package/es/AutoTips/index.js +1 -1
  127. package/es/Badge/component.json +92 -0
  128. package/es/Breadcrumbs/component.json +142 -0
  129. package/es/Breadcrumbs/index.js +1 -1
  130. package/es/Button/SplitButton.d.ts +2 -2
  131. package/es/Button/component.json +168 -0
  132. package/es/Button/index.js +44 -44
  133. package/es/ButtonGroup/component.json +132 -0
  134. package/es/ButtonGroup/index.d.ts +1 -1
  135. package/es/Card/component.json +162 -0
  136. package/es/Card/index.d.ts +2 -2
  137. package/es/Card/index.js +2 -2
  138. package/es/Carousel/component.json +142 -0
  139. package/es/Carousel/index.d.ts +1 -1
  140. package/es/Cascader/Cascader.js +1 -1
  141. package/es/Cascader/OptionList/Column.js +1 -1
  142. package/es/Cascader/OptionList/index.js +1 -1
  143. package/es/Cascader/component.json +196 -0
  144. package/es/Cascader/hooks/useEntities.js +7 -7
  145. package/es/Cascader/interface.d.ts +1 -0
  146. package/es/Cascader/utils/commonUtil.d.ts +1 -1
  147. package/es/Cascader/utils/commonUtil.js +16 -16
  148. package/es/Cascader/utils/treeUtil.d.ts +14 -5
  149. package/es/Cascader/utils/treeUtil.js +1 -1
  150. package/es/Checkbox/component.json +138 -0
  151. package/es/CheckboxGroup/component.json +152 -0
  152. package/es/CheckboxGroup/index.js +1 -1
  153. package/es/CodeEditor/component.json +189 -0
  154. package/es/CodeEditor/index.d.ts +11 -10
  155. package/es/CodeEditor/index.js +19 -19
  156. package/es/Collapse/component.json +166 -0
  157. package/es/Collapse/index.d.ts +1 -1
  158. package/es/Collapse/index.js +23 -22
  159. package/es/CollapseBox/component.json +84 -0
  160. package/es/CollapseLayout/component.json +155 -0
  161. package/es/ColorPicker/component.json +142 -0
  162. package/es/ComboSelect/component.json +181 -0
  163. package/es/ComboSelect/index.js +115 -109
  164. package/es/ComboSelect/interface.d.ts +2 -2
  165. package/es/ComboSelect/utils.d.ts +3 -3
  166. package/es/ComboSelect/utils.js +1 -1
  167. package/es/Container/component.json +111 -0
  168. package/es/ContentBox/component.json +81 -0
  169. package/es/CopyText/component.json +118 -0
  170. package/es/CycleSelector/component.json +98 -0
  171. package/es/CycleSelector/index.js +14 -13
  172. package/es/DatePicker/component.json +192 -0
  173. package/es/DatePicker/generatePicker/generateRangePicker.js +11 -11
  174. package/es/DatePicker/generatePicker/generateSinglePicker.js +2 -2
  175. package/es/Descriptions/component.json +142 -0
  176. package/es/Descriptions/index.d.ts +1 -1
  177. package/es/Desktop/component.json +171 -0
  178. package/es/Desktop/index.js +1 -1
  179. package/es/DragVerify/component.json +114 -0
  180. package/es/DragVerify/index.js +19 -19
  181. package/es/Drawer/component.json +200 -0
  182. package/es/Drawer/index.js +86 -86
  183. package/es/Drawer/interface.d.ts +1 -1
  184. package/es/Drawer/util.d.ts +1 -6
  185. package/es/Drawer/util.js +9 -6
  186. package/es/Dropdown/component.json +147 -0
  187. package/es/Dropdown/index.js +1 -1
  188. package/es/DynamicMultiBox/component.json +278 -0
  189. package/es/DynamicMultiBox/formItem.d.ts +1 -1
  190. package/es/DynamicMultiBox/index.js +1 -1
  191. package/es/DynamicMultiBox/rowForm.d.ts +2 -2
  192. package/es/Empty/component.json +123 -0
  193. package/es/Empty/index.css +1 -1
  194. package/es/Empty/index.d.ts +2 -2
  195. package/es/Empty/index.js +27 -26
  196. package/es/Empty/style/index.css +1 -1
  197. package/es/FieldForm/FieldFormItem/ItemHolder.js +1 -1
  198. package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  199. package/es/FieldForm/FieldFormItem/StatusProvider.js +1 -1
  200. package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
  201. package/es/FieldForm/Form.d.ts +2 -2
  202. package/es/FieldForm/Form.js +1 -1
  203. package/es/FieldForm/FormItemInput.js +1 -1
  204. package/es/FieldForm/FormItemLabel.js +1 -1
  205. package/es/FieldForm/FormList.d.ts +2 -2
  206. package/es/FieldForm/component.json +196 -0
  207. package/es/FieldForm/context.d.ts +5 -1
  208. package/es/FieldForm/context.js +2 -2
  209. package/es/FieldForm/hooks/useForm.d.ts +4 -3
  210. package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
  211. package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  212. package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
  213. package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
  214. package/es/FieldForm/hooks/useItemRef.js +6 -6
  215. package/es/Form/component.json +161 -0
  216. package/es/Form/index.d.ts +52 -49
  217. package/es/Form/index.js +1 -1
  218. package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  219. package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
  220. package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  221. package/es/FormItem/compoments/formFile/index.js +8 -8
  222. package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  223. package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
  224. package/es/FormItem/component.json +171 -0
  225. package/es/FormItem/index.d.ts +5 -5
  226. package/es/FormItem/index.js +23 -23
  227. package/es/FormItem/itemType.js +1 -1
  228. package/es/FunctionModal/component.json +197 -0
  229. package/es/FunctionModal/dialog.d.ts +1 -1
  230. package/es/FunctionModal/modalContext.d.ts +4 -1
  231. package/es/GlobalContext/confirmLocale.js +1 -1
  232. package/es/GlobalContext/index.js +1 -1
  233. package/es/Help/component.json +118 -0
  234. package/es/HelperText/component.json +126 -0
  235. package/es/Image/PreviewGroup.js +1 -1
  236. package/es/Image/component.json +165 -0
  237. package/es/Image/index.js +1 -1
  238. package/es/InputCode/component.json +191 -0
  239. package/es/InputCode/index.d.ts +2 -2
  240. package/es/InputLang/component.json +205 -0
  241. package/es/InputLang/index.js +2 -2
  242. package/es/InputNumber/component.json +162 -0
  243. package/es/Label/component.json +126 -0
  244. package/es/Label/index.d.ts +2 -2
  245. package/es/Loading/component.json +91 -0
  246. package/es/Menu/component.json +180 -0
  247. package/es/Menu/verticalMenuList.js +1 -1
  248. package/es/Message/component.json +246 -0
  249. package/es/Message/index.d.ts +2 -2
  250. package/es/Message/index.js +2 -2
  251. package/es/Modal/Confirm/index.d.ts +1 -1
  252. package/es/Modal/Confirm/index.js +1 -1
  253. package/es/Modal/component.json +277 -0
  254. package/es/Modal/index.d.ts +85 -5
  255. package/es/Modal/index.js +159 -122
  256. package/es/Modal/interface.d.ts +1 -0
  257. package/es/MultiBox/component.json +216 -0
  258. package/es/MultiBox/index.js +19 -14
  259. package/es/Notification/component.json +184 -0
  260. package/es/OperateBtn/component.json +134 -0
  261. package/es/OperateBtn/index.d.ts +3 -3
  262. package/es/PageHeader/component.json +112 -0
  263. package/es/PageHeader/horizontalMeun.js +1 -1
  264. package/es/PageHeader/horizontalMeunRight.js +1 -1
  265. package/es/Pagination/component.json +181 -0
  266. package/es/Pagination/index.js +15 -15
  267. package/es/ParauiProvider/index.js +1 -1
  268. package/es/PasswordRules/component.json +105 -0
  269. package/es/PasswordRules/index.d.ts +4 -4
  270. package/es/PopConfirm/component.json +227 -0
  271. package/es/PopConfirm/index.d.ts +1 -1
  272. package/es/PopConfirm/index.js +1 -1
  273. package/es/PopMenu/component.json +131 -0
  274. package/es/PopMenu/hooks.d.ts +1 -1
  275. package/es/PopMenu/index.js +8 -8
  276. package/es/Popover/component.json +165 -0
  277. package/es/Popover/index.js +1 -1
  278. package/es/Progress/component.json +161 -0
  279. package/es/Prompt/component.json +144 -0
  280. package/es/Querying/component.json +96 -0
  281. package/es/Querying/index.css +1 -1
  282. package/es/Querying/index.d.ts +2 -2
  283. package/es/Querying/index.js +20 -19
  284. package/es/Querying/style/index.css +1 -1
  285. package/es/QuickReply/QuickReplyCode/index.js +1 -1
  286. package/es/QuickReply/component.json +129 -0
  287. package/es/QuickReply/index.d.ts +1 -1
  288. package/es/Radio/component.json +136 -0
  289. package/es/RadioGroup/component.json +149 -0
  290. package/es/RangeInput/component.json +198 -0
  291. package/es/RangeInput/index.js +20 -20
  292. package/es/Result/component.json +104 -0
  293. package/es/ScrollBar/component.json +115 -0
  294. package/es/Search/component.json +177 -0
  295. package/es/Search/index.d.ts +1 -1
  296. package/es/Select/component.json +244 -0
  297. package/es/Select/index.js +114 -114
  298. package/es/SelectInput/component.json +184 -0
  299. package/es/Selector/component.json +203 -0
  300. package/es/Selector/index.js +56 -50
  301. package/es/Selector/interface.d.ts +2 -2
  302. package/es/Selector/selectorData/index.js +1 -1
  303. package/es/Selector/selectorMain/index.js +3 -3
  304. package/es/Selector/selectorNode/index.js +1 -1
  305. package/es/Selector/util.d.ts +3 -3
  306. package/es/Selector/util.js +6 -12
  307. package/es/SelectorPicker/component.json +179 -0
  308. package/es/SelectorPicker/index.d.ts +5 -5
  309. package/es/SelectorPicker/index.js +15 -15
  310. package/es/SingleBox/component.json +151 -0
  311. package/es/SingleBox/index.d.ts +2 -2
  312. package/es/Slider/component.json +181 -0
  313. package/es/SortBox/component.json +108 -0
  314. package/es/Status/component.json +104 -0
  315. package/es/Stepper/component.json +129 -0
  316. package/es/Stepper/index.d.ts +2 -2
  317. package/es/Switch/component.json +207 -0
  318. package/es/Switch/index.css +1 -1
  319. package/es/Switch/index.d.ts +3 -2
  320. package/es/Switch/index.js +60 -59
  321. package/es/Switch/style/index.css +1 -1
  322. package/es/Table/component.json +547 -0
  323. package/es/Table/index.d.ts +2 -2
  324. package/es/Table/index.js +385 -382
  325. package/es/Table/interface.d.ts +30 -0
  326. package/es/Table/tableHead.js +1 -1
  327. package/es/Table/util.d.ts +1 -1
  328. package/es/Table/util.js +3 -12
  329. package/es/Tabs/component.json +227 -0
  330. package/es/Tag/component.json +221 -0
  331. package/es/Tag/index.css +1 -1
  332. package/es/Tag/index.d.ts +1 -1
  333. package/es/Tag/index.js +20 -20
  334. package/es/Tag/style/index.css +1 -1
  335. package/es/TextEditor/component.json +186 -0
  336. package/es/TextEditor/index.d.ts +5 -5
  337. package/es/TextEditor/index.js +1 -1
  338. package/es/TextField/component.json +290 -0
  339. package/es/TextField/index.d.ts +2 -2
  340. package/es/TextField/index.js +1 -1
  341. package/es/TimePicker/component.json +176 -0
  342. package/es/Timeline/component.json +110 -0
  343. package/es/Title/component.json +156 -0
  344. package/es/ToggleButton/component.json +153 -0
  345. package/es/ToggleButton/index.js +1 -1
  346. package/es/Tooltip/component.json +176 -0
  347. package/es/Tooltip/index.js +58 -53
  348. package/es/Tooltip/interface.d.ts +14 -1
  349. package/es/Tooltip/utils.js +6 -6
  350. package/es/Transfer/component.json +157 -0
  351. package/es/Tree/OperateBar/index.js +1 -1
  352. package/es/Tree/Tree.js +3 -3
  353. package/es/Tree/component.json +512 -0
  354. package/es/Tree/interface.d.ts +1 -1
  355. package/es/Upload/component.json +450 -0
  356. package/es/Upload/util.js +1 -1
  357. package/es/Utils/snack-kit-shims.d.ts +18 -0
  358. package/es/Utils/snack-kit-shims.js +19 -0
  359. package/es/Utils/type.d.ts +0 -2
  360. package/es/_virtual/index.js +5 -3
  361. package/es/_virtual/index2.js +2 -5
  362. package/es/index.d.ts +2 -0
  363. package/es/index.js +1 -1
  364. package/es/locale/en_US.d.ts +361 -0
  365. package/es/locale/en_US.js +364 -0
  366. package/es/locale/index.d.ts +1 -723
  367. package/es/locale/index2.js +10 -0
  368. package/es/locale/zh_CN.d.ts +361 -0
  369. package/es/locale/zh_CN.js +364 -0
  370. package/es/node_modules/classnames/index.js +1 -1
  371. package/lib/AlignBox/component.json +89 -0
  372. package/lib/AlignBox/index.css +1 -1
  373. package/lib/AlignBox/index.d.ts +6 -2
  374. package/lib/AlignBox/index.js +1 -1
  375. package/lib/AlignBox/style/index.css +1 -1
  376. package/lib/Anchor/anchorMenu/index.d.ts +2 -1
  377. package/lib/Anchor/anchorMenu/index.js +1 -1
  378. package/lib/Anchor/component.json +130 -0
  379. package/lib/Anchor/index.js +1 -1
  380. package/lib/Anchor/type.d.ts +8 -4
  381. package/lib/Argv/component.json +216 -0
  382. package/lib/Argv/dataGenerator/index.js +1 -1
  383. package/lib/Argv/index.d.ts +5 -6
  384. package/lib/Argv/index.js +1 -1
  385. package/lib/AutoBox/component.json +133 -0
  386. package/lib/AutoBox/index.d.ts +3 -3
  387. package/lib/AutoBox/index.js +1 -1
  388. package/lib/AutoBox/protal.d.ts +2 -2
  389. package/lib/AutoBox/protal.js +1 -1
  390. package/lib/AutoButton/component.json +109 -0
  391. package/lib/AutoButton/index.js +1 -1
  392. package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  393. package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
  394. package/lib/AutoTips/component.json +121 -0
  395. package/lib/AutoTips/index.js +1 -1
  396. package/lib/Badge/component.json +92 -0
  397. package/lib/Breadcrumbs/component.json +142 -0
  398. package/lib/Breadcrumbs/index.js +1 -1
  399. package/lib/Button/SplitButton.d.ts +2 -2
  400. package/lib/Button/component.json +168 -0
  401. package/lib/Button/index.js +1 -1
  402. package/lib/ButtonGroup/component.json +132 -0
  403. package/lib/ButtonGroup/index.d.ts +1 -1
  404. package/lib/Card/component.json +162 -0
  405. package/lib/Card/index.d.ts +2 -2
  406. package/lib/Card/index.js +1 -1
  407. package/lib/Carousel/component.json +142 -0
  408. package/lib/Carousel/index.d.ts +1 -1
  409. package/lib/Cascader/Cascader.js +1 -1
  410. package/lib/Cascader/OptionList/Column.js +1 -1
  411. package/lib/Cascader/OptionList/index.js +1 -1
  412. package/lib/Cascader/component.json +196 -0
  413. package/lib/Cascader/hooks/useEntities.js +1 -1
  414. package/lib/Cascader/interface.d.ts +1 -0
  415. package/lib/Cascader/utils/commonUtil.d.ts +1 -1
  416. package/lib/Cascader/utils/commonUtil.js +1 -1
  417. package/lib/Cascader/utils/treeUtil.d.ts +14 -5
  418. package/lib/Cascader/utils/treeUtil.js +1 -1
  419. package/lib/Checkbox/component.json +138 -0
  420. package/lib/CheckboxGroup/component.json +152 -0
  421. package/lib/CheckboxGroup/index.js +1 -1
  422. package/lib/CodeEditor/component.json +189 -0
  423. package/lib/CodeEditor/index.d.ts +11 -10
  424. package/lib/CodeEditor/index.js +1 -1
  425. package/lib/Collapse/component.json +166 -0
  426. package/lib/Collapse/index.d.ts +1 -1
  427. package/lib/Collapse/index.js +1 -1
  428. package/lib/CollapseBox/component.json +84 -0
  429. package/lib/CollapseLayout/component.json +155 -0
  430. package/lib/ColorPicker/component.json +142 -0
  431. package/lib/ComboSelect/component.json +181 -0
  432. package/lib/ComboSelect/index.js +1 -1
  433. package/lib/ComboSelect/interface.d.ts +2 -2
  434. package/lib/ComboSelect/utils.d.ts +3 -3
  435. package/lib/ComboSelect/utils.js +1 -1
  436. package/lib/Container/component.json +111 -0
  437. package/lib/ContentBox/component.json +81 -0
  438. package/lib/CopyText/component.json +118 -0
  439. package/lib/CycleSelector/component.json +98 -0
  440. package/lib/CycleSelector/index.js +1 -1
  441. package/lib/DatePicker/component.json +192 -0
  442. package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
  443. package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  444. package/lib/Descriptions/component.json +142 -0
  445. package/lib/Descriptions/index.d.ts +1 -1
  446. package/lib/Desktop/component.json +171 -0
  447. package/lib/Desktop/index.js +1 -1
  448. package/lib/DragVerify/component.json +114 -0
  449. package/lib/DragVerify/index.js +1 -1
  450. package/lib/Drawer/component.json +200 -0
  451. package/lib/Drawer/index.js +1 -1
  452. package/lib/Drawer/interface.d.ts +1 -1
  453. package/lib/Drawer/util.d.ts +1 -6
  454. package/lib/Drawer/util.js +1 -1
  455. package/lib/Dropdown/component.json +147 -0
  456. package/lib/Dropdown/index.js +1 -1
  457. package/lib/DynamicMultiBox/component.json +278 -0
  458. package/lib/DynamicMultiBox/formItem.d.ts +1 -1
  459. package/lib/DynamicMultiBox/index.js +1 -1
  460. package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
  461. package/lib/Empty/component.json +123 -0
  462. package/lib/Empty/index.css +1 -1
  463. package/lib/Empty/index.d.ts +2 -2
  464. package/lib/Empty/index.js +1 -1
  465. package/lib/Empty/style/index.css +1 -1
  466. package/lib/FieldForm/FieldFormItem/ItemHolder.js +1 -1
  467. package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  468. package/lib/FieldForm/FieldFormItem/StatusProvider.js +1 -1
  469. package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
  470. package/lib/FieldForm/Form.d.ts +2 -2
  471. package/lib/FieldForm/Form.js +1 -1
  472. package/lib/FieldForm/FormItemInput.js +1 -1
  473. package/lib/FieldForm/FormItemLabel.js +1 -1
  474. package/lib/FieldForm/FormList.d.ts +2 -2
  475. package/lib/FieldForm/component.json +196 -0
  476. package/lib/FieldForm/context.d.ts +5 -1
  477. package/lib/FieldForm/context.js +1 -1
  478. package/lib/FieldForm/hooks/useForm.d.ts +4 -3
  479. package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
  480. package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  481. package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
  482. package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
  483. package/lib/FieldForm/hooks/useItemRef.js +1 -1
  484. package/lib/Form/component.json +161 -0
  485. package/lib/Form/index.d.ts +52 -49
  486. package/lib/Form/index.js +1 -1
  487. package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  488. package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
  489. package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  490. package/lib/FormItem/compoments/formFile/index.js +1 -1
  491. package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  492. package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
  493. package/lib/FormItem/component.json +171 -0
  494. package/lib/FormItem/index.d.ts +5 -5
  495. package/lib/FormItem/index.js +1 -1
  496. package/lib/FormItem/itemType.js +1 -1
  497. package/lib/FunctionModal/component.json +197 -0
  498. package/lib/FunctionModal/dialog.d.ts +1 -1
  499. package/lib/FunctionModal/modalContext.d.ts +4 -1
  500. package/lib/GlobalContext/confirmLocale.js +1 -1
  501. package/lib/GlobalContext/index.js +1 -1
  502. package/lib/Help/component.json +118 -0
  503. package/lib/HelperText/component.json +126 -0
  504. package/lib/Image/PreviewGroup.js +1 -1
  505. package/lib/Image/component.json +165 -0
  506. package/lib/Image/index.js +1 -1
  507. package/lib/InputCode/component.json +191 -0
  508. package/lib/InputCode/index.d.ts +2 -2
  509. package/lib/InputLang/component.json +205 -0
  510. package/lib/InputLang/index.js +1 -1
  511. package/lib/InputNumber/component.json +162 -0
  512. package/lib/Label/component.json +126 -0
  513. package/lib/Label/index.d.ts +2 -2
  514. package/lib/Loading/component.json +91 -0
  515. package/lib/Menu/component.json +180 -0
  516. package/lib/Menu/verticalMenuList.js +1 -1
  517. package/lib/Message/component.json +246 -0
  518. package/lib/Message/index.d.ts +2 -2
  519. package/lib/Message/index.js +1 -1
  520. package/lib/Modal/Confirm/index.d.ts +1 -1
  521. package/lib/Modal/Confirm/index.js +1 -1
  522. package/lib/Modal/component.json +277 -0
  523. package/lib/Modal/index.d.ts +85 -5
  524. package/lib/Modal/index.js +1 -1
  525. package/lib/Modal/interface.d.ts +1 -0
  526. package/lib/MultiBox/component.json +216 -0
  527. package/lib/MultiBox/index.js +1 -1
  528. package/lib/Notification/component.json +184 -0
  529. package/lib/OperateBtn/component.json +134 -0
  530. package/lib/OperateBtn/index.d.ts +3 -3
  531. package/lib/PageHeader/component.json +112 -0
  532. package/lib/PageHeader/horizontalMeun.js +1 -1
  533. package/lib/PageHeader/horizontalMeunRight.js +1 -1
  534. package/lib/Pagination/component.json +181 -0
  535. package/lib/Pagination/index.js +1 -1
  536. package/lib/ParauiProvider/index.js +1 -1
  537. package/lib/PasswordRules/component.json +105 -0
  538. package/lib/PasswordRules/index.d.ts +4 -4
  539. package/lib/PopConfirm/component.json +227 -0
  540. package/lib/PopConfirm/index.d.ts +1 -1
  541. package/lib/PopConfirm/index.js +1 -1
  542. package/lib/PopMenu/component.json +131 -0
  543. package/lib/PopMenu/hooks.d.ts +1 -1
  544. package/lib/PopMenu/index.js +1 -1
  545. package/lib/Popover/component.json +165 -0
  546. package/lib/Popover/index.js +1 -1
  547. package/lib/Progress/component.json +161 -0
  548. package/lib/Prompt/component.json +144 -0
  549. package/lib/Querying/component.json +96 -0
  550. package/lib/Querying/index.css +1 -1
  551. package/lib/Querying/index.d.ts +2 -2
  552. package/lib/Querying/index.js +1 -1
  553. package/lib/Querying/style/index.css +1 -1
  554. package/lib/QuickReply/QuickReplyCode/index.js +1 -1
  555. package/lib/QuickReply/component.json +129 -0
  556. package/lib/QuickReply/index.d.ts +1 -1
  557. package/lib/Radio/component.json +136 -0
  558. package/lib/RadioGroup/component.json +149 -0
  559. package/lib/RangeInput/component.json +198 -0
  560. package/lib/RangeInput/index.js +1 -1
  561. package/lib/Result/component.json +104 -0
  562. package/lib/ScrollBar/component.json +115 -0
  563. package/lib/Search/component.json +177 -0
  564. package/lib/Search/index.d.ts +1 -1
  565. package/lib/Select/component.json +244 -0
  566. package/lib/Select/index.js +1 -1
  567. package/lib/SelectInput/component.json +184 -0
  568. package/lib/Selector/component.json +203 -0
  569. package/lib/Selector/index.js +1 -1
  570. package/lib/Selector/interface.d.ts +2 -2
  571. package/lib/Selector/selectorData/index.js +1 -1
  572. package/lib/Selector/selectorMain/index.js +1 -1
  573. package/lib/Selector/selectorNode/index.js +1 -1
  574. package/lib/Selector/util.d.ts +3 -3
  575. package/lib/Selector/util.js +1 -1
  576. package/lib/SelectorPicker/component.json +179 -0
  577. package/lib/SelectorPicker/index.d.ts +5 -5
  578. package/lib/SelectorPicker/index.js +1 -1
  579. package/lib/SingleBox/component.json +151 -0
  580. package/lib/SingleBox/index.d.ts +2 -2
  581. package/lib/Slider/component.json +181 -0
  582. package/lib/SortBox/component.json +108 -0
  583. package/lib/Status/component.json +104 -0
  584. package/lib/Stepper/component.json +129 -0
  585. package/lib/Stepper/index.d.ts +2 -2
  586. package/lib/Switch/component.json +207 -0
  587. package/lib/Switch/index.css +1 -1
  588. package/lib/Switch/index.d.ts +3 -2
  589. package/lib/Switch/index.js +1 -1
  590. package/lib/Switch/style/index.css +1 -1
  591. package/lib/Table/component.json +547 -0
  592. package/lib/Table/index.d.ts +2 -2
  593. package/lib/Table/index.js +1 -1
  594. package/lib/Table/interface.d.ts +30 -0
  595. package/lib/Table/tableHead.js +1 -1
  596. package/lib/Table/util.d.ts +1 -1
  597. package/lib/Table/util.js +1 -1
  598. package/lib/Tabs/component.json +227 -0
  599. package/lib/Tag/component.json +221 -0
  600. package/lib/Tag/index.css +1 -1
  601. package/lib/Tag/index.d.ts +1 -1
  602. package/lib/Tag/index.js +1 -1
  603. package/lib/Tag/style/index.css +1 -1
  604. package/lib/TextEditor/component.json +186 -0
  605. package/lib/TextEditor/index.d.ts +5 -5
  606. package/lib/TextEditor/index.js +1 -1
  607. package/lib/TextField/component.json +290 -0
  608. package/lib/TextField/index.d.ts +2 -2
  609. package/lib/TextField/index.js +1 -1
  610. package/lib/TimePicker/component.json +176 -0
  611. package/lib/Timeline/component.json +110 -0
  612. package/lib/Title/component.json +156 -0
  613. package/lib/ToggleButton/component.json +153 -0
  614. package/lib/ToggleButton/index.js +1 -1
  615. package/lib/Tooltip/component.json +176 -0
  616. package/lib/Tooltip/index.js +1 -1
  617. package/lib/Tooltip/interface.d.ts +14 -1
  618. package/lib/Tooltip/utils.js +1 -1
  619. package/lib/Transfer/component.json +157 -0
  620. package/lib/Tree/OperateBar/index.js +2 -2
  621. package/lib/Tree/Tree.js +1 -1
  622. package/lib/Tree/component.json +512 -0
  623. package/lib/Tree/interface.d.ts +1 -1
  624. package/lib/Upload/component.json +450 -0
  625. package/lib/Upload/util.js +1 -1
  626. package/lib/Utils/snack-kit-shims.d.ts +18 -0
  627. package/lib/Utils/snack-kit-shims.js +2 -0
  628. package/lib/Utils/type.d.ts +0 -2
  629. package/lib/_virtual/index.js +1 -1
  630. package/lib/_virtual/index2.js +1 -1
  631. package/lib/index.d.ts +2 -0
  632. package/lib/index.js +1 -1
  633. package/lib/locale/en_US.d.ts +361 -0
  634. package/lib/locale/en_US.js +2 -0
  635. package/lib/locale/index.d.ts +1 -723
  636. package/lib/locale/index2.js +2 -0
  637. package/lib/locale/zh_CN.d.ts +361 -0
  638. package/lib/locale/zh_CN.js +2 -0
  639. package/lib/node_modules/classnames/index.js +1 -1
  640. package/package.json +11 -4
  641. package/es/_virtual/index3.js +0 -5
  642. package/es/_virtual/index4.js +0 -5
  643. package/es/node_modules/@para-snack/core/dist/index.js +0 -5231
  644. package/lib/_virtual/index3.js +0 -2
  645. package/lib/_virtual/index4.js +0 -2
  646. package/lib/node_modules/@para-snack/core/dist/index.js +0 -20
  647. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  648. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
  649. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  650. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
@@ -0,0 +1,192 @@
1
+ {
2
+ "name": "DatePicker",
3
+ "category": "Data Entry",
4
+ "description": "输入或选择日期的控件",
5
+ "semantic": {
6
+ "intent": [
7
+ "选择日期",
8
+ "选择时间",
9
+ "选择日期范围"
10
+ ],
11
+ "useCases": [
12
+ "表单日期录入",
13
+ "日程安排",
14
+ "数据报表时间筛选"
15
+ ],
16
+ "riskLevel": "normal"
17
+ },
18
+ "variants": {
19
+ "date": {
20
+ "meaning": "日期选择"
21
+ },
22
+ "range": {
23
+ "meaning": "日期范围选择"
24
+ },
25
+ "time": {
26
+ "meaning": "时间选择"
27
+ }
28
+ },
29
+ "states": [
30
+ "default",
31
+ "disabled",
32
+ "error",
33
+ "open"
34
+ ],
35
+ "idealProps": {
36
+ "value": {
37
+ "type": "Dayjs | null(DatePicker)/ [Dayjs, Dayjs] | null(RangePicker)",
38
+ "description": "当前选中的日期。**受控模式必传**——传入 null 表示未选中(清空状态);与 onChange 配套使用。注意:RangePicker 的 value 才是 dayjs[],DatePicker 不要传数组",
39
+ "_typeNote": "原'dayjs | dayjs[]'写法误导——分别属于 DatePicker / RangePicker,不是同一组件的联合类型"
40
+ },
41
+ "onChange": {
42
+ "type": "function",
43
+ "signature": "(date: Dayjs | null, dateString: string) => void",
44
+ "description": "日期变化回调。date=null 时表示清空(当 allowClear=true 用户点叉触发);dateString 是按 format 格式化后的字符串,清空时为空串"
45
+ },
46
+ "picker": {
47
+ "type": "enum",
48
+ "values": [
49
+ "date",
50
+ "week",
51
+ "month",
52
+ "quarter",
53
+ "year"
54
+ ],
55
+ "default": "date",
56
+ "description": "选择器类型"
57
+ },
58
+ "showTime": {
59
+ "type": "boolean | object",
60
+ "objectShape": {
61
+ "format": { "type": "string", "description": "时间格式,例:'HH:mm:ss'" },
62
+ "defaultValue": { "type": "Dayjs", "description": "时间默认值" },
63
+ "disabledTime": { "type": "function", "description": "禁用时间回调" }
64
+ },
65
+ "default": false,
66
+ "description": "是否增加时间选择功能。传 true 使用默认时间选项;传对象可配置时间选择器参数(format/defaultValue/disabledTime 等)"
67
+ },
68
+ "format": {
69
+ "type": "string | string[]",
70
+ "default": "YYYY-MM-DD",
71
+ "description": "展示的日期格式"
72
+ },
73
+ "disabled": {
74
+ "type": "boolean",
75
+ "default": false,
76
+ "description": "是否禁用"
77
+ },
78
+ "allowClear": {
79
+ "type": "boolean",
80
+ "default": true,
81
+ "description": "是否显示清除按钮"
82
+ },
83
+ "bordered": {
84
+ "type": "boolean",
85
+ "default": true,
86
+ "description": "是否有边框"
87
+ },
88
+ "placeholder": {
89
+ "type": "string(DatePicker) | [string, string](RangePicker,开始日期 + 结束日期 placeholder)",
90
+ "description": "输入框提示文字。DatePicker 接受 string;RangePicker 接受 [string, string] 元组(首/末 placeholder 分别)"
91
+ },
92
+ "disabledDate": {
93
+ "type": "function",
94
+ "signature": "(currentDate: Dayjs) => boolean",
95
+ "description": "不可选择的日期。返回 true 表示该日期不可选。currentDate 在 picker='date' 时为当天 00:00:00(无时分秒),可直接 `current < dayjs().endOf('day')` 比较;在 showTime 模式下含完整时分秒,此时若做日维度比较应用 `dayjs().startOf('day')` / `endOf('day')` 兜底"
96
+ },
97
+ "defaultValue": {
98
+ "type": "Dayjs",
99
+ "required": false,
100
+ "description": "默认日期(非受控)。初始渲染时的默认选中日期;⚠️ 不要同时传 value + defaultValue,受控模式只传 value + onChange,非受控模式只传 defaultValue"
101
+ },
102
+ "onOpenChange": {
103
+ "type": "function",
104
+ "signature": "(open: boolean) => void",
105
+ "required": false,
106
+ "description": "弹出日历/关闭日历时的回调,open=true 表示打开,open=false 表示关闭"
107
+ },
108
+ "open": {
109
+ "type": "boolean",
110
+ "required": false,
111
+ "description": "控制弹层是否展开(受控),配合 onOpenChange 使用"
112
+ },
113
+ "showToday": {
114
+ "type": "boolean",
115
+ "default": "true",
116
+ "required": false,
117
+ "description": "是否展示「今天」快捷按钮,picker='date' 时有效"
118
+ },
119
+ "showNow": {
120
+ "type": "boolean",
121
+ "required": false,
122
+ "description": "showTime=true 时是否展示「此刻」按钮"
123
+ }
124
+ },
125
+ "do": [
126
+ "使用 format 属性统一日期显示格式",
127
+ "对于需要选择范围的场景,使用 DatePicker.RangePicker(从同一导入中解构:`const { RangePicker } = DatePicker`)",
128
+ "受控模式只传 value + onChange,非受控模式只传 defaultValue——不要同时传两者",
129
+ "showTime=true 时,value 必须是含时分秒的 Dayjs 对象;onChange 接收的 date 参数也会含完整时间信息",
130
+ "禁用日期用 disabledDate 回调(返回 true 表示不可选);禁止今天之前:`disabledDate={(cur) => cur && cur < dayjs().startOf('day')}`"
131
+ ],
132
+ "dont": [
133
+ "混用 moment 和 dayjs 对象(本项目统一使用 dayjs,value/defaultValue/disabledDate 参数都是 Dayjs 类型)",
134
+ "在移动端过度依赖复杂的弹出面板",
135
+ "不要对 DatePicker 传 value 数组——RangePicker.value 才是 [Dayjs, Dayjs],DatePicker.value 是单个 Dayjs | null"
136
+ ],
137
+ "events": {
138
+ "onChange": {
139
+ "signature": "(date: Dayjs | null, dateString: string) => void",
140
+ "asyncSupported": false,
141
+ "examples": [
142
+ "日期选中时触发:date 为 Dayjs 对象,dateString 为 format 格式化后的字符串",
143
+ "用户点清空按钮时触发:date=null,dateString=''——需判断 null 再处理",
144
+ "showTime=true 模式下,date 包含完整时分秒(Dayjs),dateString 按 format 含时间部分"
145
+ ],
146
+ "commonMistakes": [
147
+ "只用 dateString 而忽略 date 参数——dateString 是 format 格式化结果,跨时区场景需用 date(Dayjs 对象)再转换",
148
+ "不处理 date=null 的清空场景——allowClear=true 时 user 点叉会触发 onChange(null, ''),此时直接存 date 会把 null 存入 state",
149
+ "RangePicker 的 onChange 签名不同——`(dates: [Dayjs, Dayjs] | null, dateStrings: [string, string]) => void`,不要用 DatePicker 的签名",
150
+ "假设 onChange 仅在确认时触发——date picker 模式(无 showTime)选日期即触发;showTime 模式需点「确定」按钮才触发"
151
+ ]
152
+ },
153
+ "onOpenChange": {
154
+ "signature": "(open: boolean) => void",
155
+ "asyncSupported": false,
156
+ "examples": [
157
+ "弹层打开时触发 onOpenChange(true),关闭时触发 onOpenChange(false)",
158
+ "搭配 open 受控 prop 实现自定义开关逻辑(如点击外部关闭)"
159
+ ],
160
+ "commonMistakes": [
161
+ "在 onOpenChange 中直接做表单提交——open=false 仅表示面板关闭,value 不一定已更新",
162
+ "忘记 RangePicker 关闭时 src 代码会主动调 blur(generateRangePicker.tsx 实证)——不需要手动调"
163
+ ]
164
+ }
165
+ },
166
+ "typescriptPitfalls": [
167
+ {
168
+ "issue": "DatePicker value 类型应为 Dayjs | null,传字符串会导致显示异常",
169
+ "wrong": "value={'2024-01-01'} // 字符串不是 Dayjs 对象,组件内部格式化会失败",
170
+ "right": "value={dayjs('2024-01-01')} // 必须用 dayjs() 转换;清空用 null"
171
+ },
172
+ {
173
+ "issue": "RangePicker 和 DatePicker 的 onChange 签名不同,混用会导致类型错误",
174
+ "wrong": "// RangePicker 中用 DatePicker 的 onChange 签名\nonChange={(date: Dayjs, str: string) => ...} // 应为数组",
175
+ "right": "// RangePicker\nonChange={(dates: [Dayjs, Dayjs] | null, strs: [string, string]) => ...}"
176
+ },
177
+ {
178
+ "issue": "RangePicker value 是 RangeValue<Dayjs> 类型(可 null 的二元元组),不能传普通数组",
179
+ "wrong": "value={[dayjs(), dayjs().add(7, 'day')]} // 推断为 Dayjs[],不匹配 RangeValue<Dayjs>",
180
+ "right": "import type { RangeValue } from '@para-ui/core'; const val: RangeValue<Dayjs> = [dayjs(), dayjs().add(7,'day')]; <DatePicker.RangePicker value={val} />"
181
+ },
182
+ {
183
+ "issue": "disabledDate 参数是 Dayjs 对象不是 Date,直接用 Date 方法会报类型错误",
184
+ "wrong": "disabledDate={(cur) => cur.getTime() < Date.now()} // Dayjs 没有 getTime() 方法",
185
+ "right": "disabledDate={(cur) => cur && cur.isBefore(dayjs().startOf('day'))} // 使用 Dayjs 的 isBefore / isAfter"
186
+ }
187
+ ],
188
+ "mapping": {
189
+ "realComponent": "DatePicker",
190
+ "adapter": null
191
+ }
192
+ }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("../../_virtual/jsx-runtime.js"),o=require("react"),x=require("clsx"),ee=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),re=require("../../node_modules/@para-ui/icons/SortRight/index.js"),te=require("../../node_modules/@para-ui/icons/Calendar/index.js"),se=require("../../node_modules/@para-ui/icons/Time/index.js"),ne=require("rc-picker"),s=require("../util.js"),T=require("./index.js"),w=require("../lang/index.js"),oe=require("../../GlobalContext/index.js"),ae=require("../../Label/index.js"),le=require("../../HelperText/index.js"),y=require("../../GlobalContext/constant.js"),ie=require("@paraview/lib"),I=require("../PickerTag.js"),ue=require("../../Tooltip/index.js");function ce(z){return o.forwardRef((i,L)=>{const{className:O,size:xe,bordered:_=!0,placeholder:H,error:u=!1,helperText:M,style:S,value:V,defaultValue:F,label:d="",labelTooltip:A,required:f=!1,shortcuts:m,presets:j,ranges:de,shortcutsPlacement:R="left",getPopupContainer:D,isolationPopupOnHide:U=!1,disabled:g,disabledTooltip:P,...c}=i,{format:p,showTime:h,picker:n,use12Hours:B}=i,l=o.useRef(null),$=o.useRef(),b=o.useMemo(()=>ie.UUID(),[]),t=`${y.$prefixCls}-picker`,{language:C,locale:q}=o.useContext(oe.default);let E={};if(q){const e=q[C||"zh"];e&&(E=e.DatePicker)}const G=w.default[C||"zh"]||w.default.zh,v=s.mergedLocale(E,G);let a={};a={...a,...h?s.getTimeProps({format:p,picker:n,...h}):{},...n==="time"?s.getTimeProps({format:p,...i,picker:n}):{}},a.style&&delete a.style;const k=e=>{if(!Array.isArray(e))return e;const Y=p??T.pickerFormatMap[n];return e.map(Z=>s.formatPickerValue(Z,Y))},J=()=>d||f?r.jsxRuntimeExports.jsx(ae.default,{label:d,required:f,...A}):null;o.useImperativeHandle(L,()=>({focus:()=>l.current?.focus(),blur:()=>l.current?.blur()}));const N=j?j.map(e=>({label:typeof e.label=="string"?r.jsxRuntimeExports.jsx(I.default,{children:e.label}):e.label,value:e.value})):m?m.map(e=>({label:typeof e.text=="string"?r.jsxRuntimeExports.jsx(I.default,{children:e.text}):e.text,value:typeof e.value=="function"?e.value():e.value})):[],K=!!N?.length,Q=x(b,c.dropdownClassName,`${y.$prefixCls}-scrollbar-small`,{[`${t}-use12Hours`]:B,[`${t}-presets-${R}`]:K}),W=e=>s.getPopupContainer(e,D,$),X=e=>{c.onOpenChange?.(e),U&&s.isolationPopupPollution(e,b),e||l.current?.blur()};return(()=>{const e=r.jsxRuntimeExports.jsxs("div",{ref:$,className:x(`${t}-wrapper`,O),style:S,children:[J(),r.jsxRuntimeExports.jsx(ne.RangePicker,{separator:r.jsxRuntimeExports.jsx("span",{"aria-label":"to",className:`${t}-separator`,children:r.jsxRuntimeExports.jsx(re.SortRight,{})}),ref:l,placeholder:s.getRangePlaceholder(n,v,H),suffixIcon:n==="time"?r.jsxRuntimeExports.jsx(se.Time,{}):r.jsxRuntimeExports.jsx(te.Calendar,{className:"picker-icon"}),clearIcon:r.jsxRuntimeExports.jsx(ee.CloseCircleF,{}),allowClear:!0,disabled:g,...c,...a,defaultValue:k(F),value:k(V),presets:N,className:x({[`${t}-borderless`]:!_,[`${t}-error`]:u,[`${t}-shortcuts-${R}`]:u}),locale:v.lang,prefixCls:t,generateConfig:z,prevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-prev-icon`}),nextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-next-icon`}),superPrevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-prev-icon`}),superNextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-next-icon`}),components:T.Components,direction:"ltr",dropdownClassName:Q,getPopupContainer:W,onOpenChange:X}),r.jsxRuntimeExports.jsx(le.default,{error:u,helperText:M})]});return g&&P?r.jsxRuntimeExports.jsx(ue.Tooltip,{disabled:!0,...P,children:e}):e})()})}exports.default=ce;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("../../_virtual/jsx-runtime.js"),o=require("react"),x=require("clsx"),ee=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),re=require("../../node_modules/@para-ui/icons/SortRight/index.js"),te=require("../../node_modules/@para-ui/icons/Calendar/index.js"),se=require("../../node_modules/@para-ui/icons/Time/index.js"),ne=require("rc-picker"),s=require("../util.js"),T=require("./index.js"),w=require("../lang/index.js"),oe=require("../../GlobalContext/index.js"),le=require("../../Label/index.js"),ae=require("../../HelperText/index.js"),y=require("../../GlobalContext/constant.js"),ie=require("@snack-kit/lib"),I=require("../PickerTag.js"),ue=require("../../Tooltip/index.js");function ce(z){return o.forwardRef((i,L)=>{const{className:O,size:xe,bordered:_=!0,placeholder:H,error:u=!1,helperText:M,style:S,value:V,defaultValue:F,label:d="",labelTooltip:A,required:f=!1,shortcuts:m,presets:j,ranges:de,shortcutsPlacement:R="left",getPopupContainer:D,isolationPopupOnHide:U=!1,disabled:g,disabledTooltip:P,...c}=i,{format:p,showTime:h,picker:n,use12Hours:B}=i,a=o.useRef(null),b=o.useRef(null),C=o.useMemo(()=>ie.UUID(),[]),t=`${y.$prefixCls}-picker`,{language:$,locale:q}=o.useContext(oe.default);let E={};if(q){const e=q[$||"zh"];e&&(E=e.DatePicker)}const G=w.default[$||"zh"]||w.default.zh,v=s.mergedLocale(E,G);let l={};l={...l,...h?s.getTimeProps({format:p,picker:n,...h}):{},...n==="time"?s.getTimeProps({format:p,...i,picker:n}):{}},l.style&&delete l.style;const k=e=>{if(!Array.isArray(e))return e;const Y=p??T.pickerFormatMap[n];return e.map(Z=>s.formatPickerValue(Z,Y))},J=()=>d||f?r.jsxRuntimeExports.jsx(le.default,{label:d,required:f,...A}):null;o.useImperativeHandle(L,()=>({focus:()=>a.current?.focus(),blur:()=>a.current?.blur()}));const N=j?j.map(e=>({label:typeof e.label=="string"?r.jsxRuntimeExports.jsx(I.default,{children:e.label}):e.label,value:e.value})):m?m.map(e=>({label:typeof e.text=="string"?r.jsxRuntimeExports.jsx(I.default,{children:e.text}):e.text,value:typeof e.value=="function"?e.value():e.value})):[],K=!!N?.length,Q=x(C,c.dropdownClassName,`${y.$prefixCls}-scrollbar-small`,{[`${t}-use12Hours`]:B,[`${t}-presets-${R}`]:K}),W=e=>s.getPopupContainer(e,D,b),X=e=>{c.onOpenChange?.(e),U&&s.isolationPopupPollution(e,C),e||a.current?.blur()};return(()=>{const e=r.jsxRuntimeExports.jsxs("div",{ref:b,className:x(`${t}-wrapper`,O),style:S,children:[J(),r.jsxRuntimeExports.jsx(ne.RangePicker,{separator:r.jsxRuntimeExports.jsx("span",{"aria-label":"to",className:`${t}-separator`,children:r.jsxRuntimeExports.jsx(re.SortRight,{})}),ref:a,placeholder:s.getRangePlaceholder(n,v,H),suffixIcon:n==="time"?r.jsxRuntimeExports.jsx(se.Time,{}):r.jsxRuntimeExports.jsx(te.Calendar,{className:"picker-icon"}),clearIcon:r.jsxRuntimeExports.jsx(ee.CloseCircleF,{}),allowClear:!0,disabled:g,...c,...l,defaultValue:k(F),value:k(V),presets:N,className:x({[`${t}-borderless`]:!_,[`${t}-error`]:u,[`${t}-shortcuts-${R}`]:u}),locale:v.lang,prefixCls:t,generateConfig:z,prevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-prev-icon`}),nextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-next-icon`}),superPrevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-prev-icon`}),superNextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-next-icon`}),components:T.Components,direction:"ltr",dropdownClassName:Q,getPopupContainer:W,onOpenChange:X}),r.jsxRuntimeExports.jsx(ae.default,{error:u,helperText:M})]});return g&&P?r.jsxRuntimeExports.jsx(ue.Tooltip,{disabled:!0,...P,children:e}):e})()})}exports.default=ce;
2
2
  //# sourceMappingURL=generateRangePicker.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("../../_virtual/jsx-runtime.js"),l=require("react"),x=require("clsx"),se=require("rc-picker"),ne=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),oe=require("../../node_modules/@para-ui/icons/Calendar/index.js"),ie=require("../../node_modules/@para-ui/icons/Time/index.js"),s=require("../util.js"),E=require("./index.js"),N=require("../lang/index.js"),le=require("../../GlobalContext/index.js"),ae=require("../../Label/index.js"),ce=require("../../HelperText/index.js"),w=require("../../GlobalContext/constant.js"),ue=require("@paraview/lib"),pe=require("../PickerTag.js"),de=require("../../Tooltip/index.js");function xe(y){function n(c,me){return l.forwardRef((a,M)=>{const{className:V,size:Pe,bordered:D=!0,placeholder:F,error:m=!1,helperText:S,style:U,value:G,defaultValue:Q,label:f="",labelTooltip:W,required:P=!1,presets:j,getPopupContainer:Y,isolationPopupOnHide:A=!1,disabled:g,disabledTooltip:k,...u}=a,p=l.useRef(null),R=l.useRef(),{format:d,showTime:C,use12Hours:B}=a,t=`${w.$prefixCls}-picker`,q=l.useMemo(()=>ue.UUID(),[]),{language:b,locale:h}=l.useContext(le.default);let $={};if(h){const e=h[b||"zh"];e&&($=e.DatePicker)}const J=N.default[b||"zh"]||N.default.zh,T=s.mergedLocale($,J),K={showToday:!0};let o={};c&&(o.picker=c);const i=c||a.picker;o={...o,...C?s.getTimeProps({format:d,picker:i,...C}):{},...i==="time"?s.getTimeProps({format:d,...a,picker:i}):{}},o.style&&delete o.style;const v=e=>{const te=d??E.pickerFormatMap[i];return s.formatPickerValue(e,te)},X=()=>f||P?r.jsxRuntimeExports.jsx(ae.default,{label:f,required:P,...W}):null;l.useImperativeHandle(M,()=>({focus:()=>p.current?.focus(),blur:()=>p.current?.blur()}));const Z=j?j.map(e=>({label:typeof e.label=="string"?r.jsxRuntimeExports.jsx(pe.default,{children:e.label}):e.label,value:e.value})):[],ee=e=>s.getPopupContainer(e,Y,R),re=e=>{u.onOpenChange?.(e),A&&s.isolationPopupPollution(e,q)};return(()=>{const e=r.jsxRuntimeExports.jsxs("div",{ref:R,className:x(`${t}-wrapper`,V),style:U,children:[X(),r.jsxRuntimeExports.jsx(se,{ref:p,placeholder:s.getPlaceholder(i,T,F),suffixIcon:i==="time"?r.jsxRuntimeExports.jsx(ie.Time,{}):r.jsxRuntimeExports.jsx(oe.Calendar,{}),clearIcon:r.jsxRuntimeExports.jsx(ne.CloseCircleF,{}),allowClear:!0,disabled:g,...K,...u,...o,defaultValue:v(Q),value:v(G),locale:T.lang,className:x({[`${t}-borderless`]:!D,[`${t}-error`]:m}),prefixCls:t,presets:Z,generateConfig:y,prevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-prev-icon`}),nextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-next-icon`}),superPrevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-prev-icon`}),superNextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-next-icon`}),components:E.Components,direction:"ltr",dropdownClassName:x(q,u.dropdownClassName,B&&`${t}-use12Hours`,`${w.$prefixCls}-scrollbar-small`),getPopupContainer:ee,onOpenChange:re}),r.jsxRuntimeExports.jsx(ce.default,{error:m,helperText:S})]});return g&&k?r.jsxRuntimeExports.jsx(de.Tooltip,{disabled:!0,...k,children:e}):e})()})}const I=n(),z=n("week"),L=n("month"),O=n("year"),_=n("time"),H=n("quarter");return{DatePicker:I,WeekPicker:z,MonthPicker:L,YearPicker:O,TimePicker:_,QuarterPicker:H}}exports.default=xe;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("../../_virtual/jsx-runtime.js"),l=require("react"),x=require("clsx"),se=require("rc-picker"),ne=require("../../node_modules/@para-ui/icons/CloseCircleF/index.js"),oe=require("../../node_modules/@para-ui/icons/Calendar/index.js"),ie=require("../../node_modules/@para-ui/icons/Time/index.js"),s=require("../util.js"),E=require("./index.js"),N=require("../lang/index.js"),le=require("../../GlobalContext/index.js"),ae=require("../../Label/index.js"),ce=require("../../HelperText/index.js"),w=require("../../GlobalContext/constant.js"),ue=require("@snack-kit/lib"),pe=require("../PickerTag.js"),de=require("../../Tooltip/index.js");function xe(y){function n(c,me){return l.forwardRef((a,M)=>{const{className:V,size:Pe,bordered:D=!0,placeholder:F,error:m=!1,helperText:S,style:U,value:G,defaultValue:Q,label:f="",labelTooltip:W,required:P=!1,presets:j,getPopupContainer:Y,isolationPopupOnHide:A=!1,disabled:g,disabledTooltip:k,...u}=a,p=l.useRef(null),R=l.useRef(null),{format:d,showTime:C,use12Hours:B}=a,t=`${w.$prefixCls}-picker`,b=l.useMemo(()=>ue.UUID(),[]),{language:h,locale:q}=l.useContext(le.default);let $={};if(q){const e=q[h||"zh"];e&&($=e.DatePicker)}const J=N.default[h||"zh"]||N.default.zh,T=s.mergedLocale($,J),K={showToday:!0};let o={};c&&(o.picker=c);const i=c||a.picker;o={...o,...C?s.getTimeProps({format:d,picker:i,...C}):{},...i==="time"?s.getTimeProps({format:d,...a,picker:i}):{}},o.style&&delete o.style;const v=e=>{const te=d??E.pickerFormatMap[i];return s.formatPickerValue(e,te)},X=()=>f||P?r.jsxRuntimeExports.jsx(ae.default,{label:f,required:P,...W}):null;l.useImperativeHandle(M,()=>({focus:()=>p.current?.focus(),blur:()=>p.current?.blur()}));const Z=j?j.map(e=>({label:typeof e.label=="string"?r.jsxRuntimeExports.jsx(pe.default,{children:e.label}):e.label,value:e.value})):[],ee=e=>s.getPopupContainer(e,Y,R),re=e=>{u.onOpenChange?.(e),A&&s.isolationPopupPollution(e,b)};return(()=>{const e=r.jsxRuntimeExports.jsxs("div",{ref:R,className:x(`${t}-wrapper`,V),style:U,children:[X(),r.jsxRuntimeExports.jsx(se,{ref:p,placeholder:s.getPlaceholder(i,T,F),suffixIcon:i==="time"?r.jsxRuntimeExports.jsx(ie.Time,{}):r.jsxRuntimeExports.jsx(oe.Calendar,{}),clearIcon:r.jsxRuntimeExports.jsx(ne.CloseCircleF,{}),allowClear:!0,disabled:g,...K,...u,...o,defaultValue:v(Q),value:v(G),locale:T.lang,className:x({[`${t}-borderless`]:!D,[`${t}-error`]:m}),prefixCls:t,presets:Z,generateConfig:y,prevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-prev-icon`}),nextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-next-icon`}),superPrevIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-prev-icon`}),superNextIcon:r.jsxRuntimeExports.jsx("span",{className:`${t}-super-next-icon`}),components:E.Components,direction:"ltr",dropdownClassName:x(b,u.dropdownClassName,B&&`${t}-use12Hours`,`${w.$prefixCls}-scrollbar-small`),getPopupContainer:ee,onOpenChange:re}),r.jsxRuntimeExports.jsx(ce.default,{error:m,helperText:S})]});return g&&k?r.jsxRuntimeExports.jsx(de.Tooltip,{disabled:!0,...k,children:e}):e})()})}const I=n(),z=n("week"),L=n("month"),O=n("year"),_=n("time"),H=n("quarter");return{DatePicker:I,WeekPicker:z,MonthPicker:L,YearPicker:O,TimePicker:_,QuarterPicker:H}}exports.default=xe;
2
2
  //# sourceMappingURL=generateSinglePicker.js.map
@@ -0,0 +1,142 @@
1
+ {
2
+ "name": "Descriptions",
3
+ "category": "Data Display",
4
+ "description": "描述列表,成组展示多个只读键值对字段,支持折叠展开和边框模式",
5
+ "semantic": {
6
+ "intent": [
7
+ "信息展示",
8
+ "详情查看",
9
+ "键值对展示"
10
+ ],
11
+ "useCases": [
12
+ "用户信息",
13
+ "订单详情",
14
+ "配置概览"
15
+ ],
16
+ "riskLevel": "low"
17
+ },
18
+ "variants": {
19
+ "default": {
20
+ "meaning": "标准描述列表(无边框,horizontal 布局)"
21
+ },
22
+ "bordered": {
23
+ "meaning": "带边框描述列表(border=true)"
24
+ }
25
+ },
26
+ "states": [
27
+ "default",
28
+ "collapsed",
29
+ "expanded"
30
+ ],
31
+ "idealProps": {
32
+ "list": {
33
+ "type": "DescriptionsListProps[]",
34
+ "description": "列表配置数组;DescriptionsListProps 字段:label(ReactNode 标题)、content(ReactNode 内容)、column(number 占比列数,默认 1)。**不是 antd 风格的 items 字段——para-ui 用 list**"
35
+ },
36
+ "layout": {
37
+ "type": "enum",
38
+ "values": [
39
+ "horizontal",
40
+ "vertical"
41
+ ],
42
+ "default": "horizontal",
43
+ "description": "布局方向;horizontal=标题+内容在同一行,vertical=标题在上内容在下(各占一行)"
44
+ },
45
+ "column": {
46
+ "type": "number",
47
+ "description": "每行显示的列数;horizontal 无 border 默认 4,horizontal 有 border 默认 3,vertical 默认 4;也可通过 list 每项的 column 字段单独设置跨列数"
48
+ },
49
+ "border": {
50
+ "type": "boolean",
51
+ "default": false,
52
+ "description": "是否显示边框(table 形式);border=true 时 collapse 功能不可用(src/Descriptions/index.tsx:235 实证:collapse && !border 才启用折叠)"
53
+ },
54
+ "title": {
55
+ "type": "string | TitleProps",
56
+ "description": "标题;传 string 时自动包装为 TitleProps;传 TitleProps 对象可自定义 title/subtitle/action 等"
57
+ },
58
+ "collapse": {
59
+ "type": "boolean",
60
+ "default": false,
61
+ "description": "是否启用折叠(仅 horizontal 无 border 时有效);启用后显示展开/收起按钮,配合 collapsedHeight 控制收起最小高度"
62
+ },
63
+ "collapsedHeight": {
64
+ "type": "string | number",
65
+ "default": 60,
66
+ "description": "收起状态最小高度(default 60);仅 collapse=true 且 border=false 时生效"
67
+ },
68
+ "defaultOpen": {
69
+ "type": "boolean",
70
+ "default": false,
71
+ "description": "初始是否展开(非受控,仅首次渲染生效)"
72
+ },
73
+ "open": {
74
+ "type": "boolean",
75
+ "description": "受控展开状态;传入后外部可控制展开/收起;不传时组件内部维护状态"
76
+ },
77
+ "onCollapse": {
78
+ "type": "(bol: boolean) => void",
79
+ "description": "折叠状态变化回调;bol=true 表示展开"
80
+ },
81
+ "paddingRight": {
82
+ "type": "number | string",
83
+ "default": 40,
84
+ "description": "横向模式每个字段的右内边距(控制标题与内容间距)"
85
+ },
86
+ "className": {
87
+ "type": "string",
88
+ "description": "根容器自定义类名"
89
+ },
90
+ "style": {
91
+ "type": "React.CSSProperties",
92
+ "description": "根容器自定义样式"
93
+ }
94
+ },
95
+ "do": [
96
+ "用于展示键值对形式的详情数据——list 每项传 { label, content } 即可",
97
+ "根据内容量决定 column:内容较少用 column=2,内容较多用 column=3/4",
98
+ "需要折叠功能:传 collapse=true(仅 horizontal + 无 border 时有效),配合 collapsedHeight 设置预览高度"
99
+ ],
100
+ "dont": [
101
+ "在 Descriptions 中放入可编辑表单——应使用 Form 组件",
102
+ "Label 过长导致排版错乱——label 超过 6 个字时建议配合 AutoTips 或缩短文案",
103
+ "border=true 时传 collapse=true 期望折叠生效——两者互斥(src 实证:border=true 时 collapse 被忽略)",
104
+ "用 items 字段传数据(antd 风格)——para-ui Descriptions 用 list 字段"
105
+ ],
106
+ "events": {
107
+ "onCollapse": {
108
+ "signature": "(bol: boolean) => void",
109
+ "asyncSupported": false,
110
+ "examples": [
111
+ "受控折叠:<Descriptions collapse open={isOpen} onCollapse={(bol) => setIsOpen(bol)} />",
112
+ "仅监听不受控:<Descriptions collapse onCollapse={(bol) => trackEvent(bol ? 'expand' : 'collapse')} />",
113
+ "bol=true 表示用户点击展开,bol=false 表示用户点击收起"
114
+ ],
115
+ "commonMistakes": [
116
+ "期望 border=true 时 onCollapse 触发——collapse 功能在 border=true 时不可用,onCollapse 永不触发",
117
+ "传 open 不传 onCollapse,以为可以完全受控——open prop 变化会同步状态,但不传 onCollapse 用户点击无法反向通知父端"
118
+ ]
119
+ }
120
+ },
121
+ "typescriptPitfalls": [
122
+ {
123
+ "issue": "list 字段名是 list,不是 antd 风格的 items",
124
+ "wrong": "<Descriptions items={[{ label: '姓名', children: '张三' }]} /> // items/children 是 antd 风格,para-ui 不支持",
125
+ "right": "<Descriptions list={[{ label: '姓名', content: '张三' }]} /> // 用 list + content"
126
+ },
127
+ {
128
+ "issue": "border=true 时 collapse 不生效,两者在 TS 层面不互斥但运行时 border 优先级更高",
129
+ "wrong": "<Descriptions border collapse /> // border=true 时 collapse 被忽略,无折叠按钮",
130
+ "right": "<Descriptions collapse /> // 折叠功能只在 border=false(默认)时可用"
131
+ },
132
+ {
133
+ "issue": "title 同时接受 string 和 TitleProps 对象,混用导致 TS 联合类型错误",
134
+ "wrong": "title={{ text: '标题' }} // TitleProps 字段是 title,不是 text",
135
+ "right": "title='标题' // 字符串即可;或 title={{ title: '标题', subtitle: '副标题' }}"
136
+ }
137
+ ],
138
+ "mapping": {
139
+ "realComponent": "Descriptions",
140
+ "adapter": null
141
+ }
142
+ }
@@ -7,7 +7,7 @@ export interface DescriptionsListProps {
7
7
  content?: ReactNode;
8
8
  /** 占比列,默认占比1 */
9
9
  column?: number;
10
- [name: string]: any;
10
+ [name: string]: unknown;
11
11
  }
12
12
  export interface DescriptionsProps {
13
13
  /** 样式class */
@@ -0,0 +1,171 @@
1
+ {
2
+ "name": "Desktop",
3
+ "category": "Layout",
4
+ "description": "桌面布局组件,支持拖拽排序的网格布局。**API 设计上有 3 个已知硬约束**(见 limitations):1) onClick/onSort 回调返回完整数组而非单项;2) icon 只接受 base64 string 不接受 ReactNode;3) 无 children / render prop 不支持任意内容渲染",
5
+ "semantic": {
6
+ "intent": [
7
+ "拖拽排序的应用网格",
8
+ "可自定义顺序的图标列表",
9
+ "持久化用户布局偏好"
10
+ ],
11
+ "useCases": [
12
+ "工作台(可拖拽的应用入口集合)",
13
+ "仪表盘首页(应用列表,需要内容用 base64 icon)",
14
+ "个性化首页(顺序持久化到 localStorage)"
15
+ ],
16
+ "riskLevel": "low"
17
+ },
18
+ "limitations": {
19
+ "L1_onClick_returns_full_array": {
20
+ "issue": "**onClick(data) 的 data 是完整 DesktopDataItem 数组,不是被点击的单个 item**。无法直接知道用户点的是第几项",
21
+ "rootCause": "src/Desktop/index.tsx:44 实证:click handler 传 `[...data]` 给外部",
22
+ "workaround": "在 data 项挂 _payload 扩展字段(如 _index / _app),配合 onSort 维护当前顺序的引用,在 onClick 内根据 e.target.closest('[data-key]') 或自维护的 currentClickedKey 反查 —— 但**Desktop 内部没有暴露 click 时的 key,只能改用 data[0] 假设是被点击项或外部加 React 事件代理**。**结构性限制,docs 救不了**",
23
+ "alternative": "**强烈建议**:如果业务需要识别点击项,改用 Container + Card 自行实现网格 + onClick,或者只用 Desktop 做'排序'功能,'打开应用'功能由 data 项上的 children 字段(若需嵌入按钮)在外层另起 UI"
24
+ },
25
+ "L2_icon_no_reactnode": {
26
+ "issue": "**icon 字段只接受 base64 string,不接受 React.ReactNode**(SVG 组件 / 图标组件等)",
27
+ "rootCause": "Desktop 内部用 `<img src={icon} />` 渲染,React.ReactNode 会触发 TypeScript 类型错误或运行时 ReactNode-as-string 错误",
28
+ "workaround": "**适配上层 AppItem.icon: ReactNode 接口的 3 种方式**:\n1. **改业务接口**(推荐):AppItem.icon 改成 `string | { reactNode: ReactNode }`,Desktop 只读 string 分支\n2. **运行时转换**:用 dom-to-image / html-to-image 把 ReactNode 渲染成 base64(performance 代价大)\n3. **降级**:typeof icon === 'string' 时透传,否则不传 icon 字段(显示无图标,只显示 name)\n\n业务方常踩坑写 `<Desktop data={[{key, name, icon: <Icon />}]} />` 直接传 ReactNode,会 tsc 报错",
29
+ "alternative": "需要任意 ReactNode 渲染:换用 Container + 自实现网格,或者 RcDraggable 类组件"
30
+ },
31
+ "L3_no_children_render": {
32
+ "issue": "**Desktop 不支持 children / render prop / itemRender 自定义格子内容**。每个格子只能渲染 icon (img) + name (text)",
33
+ "rootCause": "src/Desktop/index.tsx:33 - DesktopProps 无 children / renderItem / itemRender 等字段",
34
+ "workaround": "无 —— 这是结构性限制",
35
+ "alternative": "需要每格放 React 组件(如 Widget / Card / 按钮组):**不要用 Desktop**,改用 Container + 自己用 react-grid-layout / dnd-kit 实现拖拽网格"
36
+ }
37
+ },
38
+ "adaptationPatterns": {
39
+ "patternA_localStorageOrder": "**持久化排序到 localStorage**(主流场景):\n```ts\n// 1. 读初始顺序\nconst orderKey = 'myApp:desktopOrder';\nconst initialOrder: string[] = JSON.parse(localStorage.getItem(orderKey) || '[]');\n// 2. 按持久化顺序对业务数据排序\nconst orderedApps = useMemo(() => {\n if (!initialOrder.length) return apps;\n return [...apps].sort((a, b) => initialOrder.indexOf(a.id) - initialOrder.indexOf(b.id));\n}, [apps, initialOrder]);\n// 3. onSort 时只保存 key 序列,sort prop 保持 {}\nconst handleSort = (nextData) => {\n setApps(nextData.map(d => d._app));\n localStorage.setItem(orderKey, JSON.stringify(nextData.map(d => d.key)));\n};\n```\n**关键:sort prop 只在'恢复历史 sort 对象'场景才需要,正常持久化 key 序列就够**",
40
+ "patternB_clickIdentification": "**识别点击项 (workaround,有限可靠)**:\nDesktop 的 onClick(data) 不告诉你点了哪项,只能用 DOM 事件代理:\n```ts\n<div onClick={(e) => {\n const cell = (e.target as HTMLElement).closest('[data-id]');\n const id = cell?.getAttribute('data-id');\n if (id) handleAppClick(id);\n}}>\n <Desktop data={dataWithDataIdAttr} ... />\n</div>\n```\n或更**推荐:不依赖 Desktop.onClick,Desktop 只管排序,'打开应用'的点击行为另起方案**",
41
+ "patternC_reactNodeIcon": "**业务接口声明 icon: ReactNode 的衔接**:\n```ts\ninterface BusinessApp { id: string; name: string; icon: ReactNode; iconUrl?: string; }\n// 映射时只取 iconUrl(base64),不传 ReactNode\nconst desktopData = apps.map(app => ({\n key: app.id,\n name: app.name,\n icon: app.iconUrl // 只透传 string,ReactNode 不传\n}));\n```"
42
+ },
43
+ "variants": {
44
+ "default": {
45
+ "meaning": "默认样式"
46
+ }
47
+ },
48
+ "states": [
49
+ "default",
50
+ "dragging"
51
+ ],
52
+ "idealProps": {
53
+ "data": {
54
+ "type": "Array<DesktopDataItem>",
55
+ "required": true,
56
+ "description": "拖拽列表数据;DesktopDataItem 接口 src/Desktop/index.tsx:23 已 export,字段:key(string 必填 唯一)、name(string?)、disable(boolean?)、icon(string? base64,**不支持 React.ReactNode** —— 见 limitations.L2)、disabledTooltip(TooltipProps?)、可挂任意扩展字段(`[k]: string|boolean|number|...`,常用 _payload / _app 挂业务模型)"
57
+ },
58
+ "sort": {
59
+ "type": "{ [key: string]: mapProps[] }",
60
+ "description": "排序映射,**可选受控**;value 为内部 mapProps[](opaque),`interface mapProps` 未 export,**调用方不应手动构造**。**典型用法 1**:首次渲染传 `{}`,组件按 data 顺序推导默认排序(推荐,99% 场景)。**典型用法 2**:从 localStorage 反序列化某次 onSort 后保存的 sort 对象再透传(罕见,通常直接持久化 key 序列即可)。**onSort 回调后通常无需更新 sort prop** —— 组件会基于新 data 顺序自动重排"
61
+ },
62
+ "onSort": {
63
+ "type": "(data: Array<DesktopDataItem>) => void",
64
+ "signature": "(data: Array<DesktopDataItem>) => void",
65
+ "description": "排序变化回调;**⚠️ data 参数为【排序后的完整 DesktopDataItem 数组】,不是 sort 映射对象,也不是 diff**。src/Desktop/index.tsx:42 实证;持久化新顺序时:**推荐保存 data.map(d => d.key) 数组**(简单稳定),而不是 sort 对象(opaque + 易过期)"
66
+ },
67
+ "onClick": {
68
+ "type": "(data: Array<DesktopDataItem>) => void",
69
+ "signature": "(data: Array<DesktopDataItem>) => void",
70
+ "description": "点击回调;**⚠️ data 参数为【完整 DesktopDataItem 数组】,不是被点击的单个 item**(已知 API 限制,见 limitations.L1)。**workaround**:在 Desktop 外层 div 用 React 事件代理 + 自维护 data-id 属性(见 adaptationPatterns.patternB)。**或不用 onClick**——只用 Desktop 排序,'打开应用'另起方案"
71
+ },
72
+ "tipMaxWidth": {
73
+ "type": "number",
74
+ "description": "禁用项 Tooltip 的最大宽度(px);仅在 DesktopDataItem 设置了 disable=true + disabledTooltip 字段时生效"
75
+ }
76
+ },
77
+ "commonMisconceptions": {
78
+ "M1": {
79
+ "wrong": "把 onSort(data) 的 data 当成 sort 映射对象处理:`onSort: (sortObj) => setSort(sortObj)`",
80
+ "result": "**data 实际是数组**,setSort 收到数组而期望对象 → TS 类型错误 + sort prop 状态混乱",
81
+ "fix": "改成 `onSort: (nextData) => setData(nextData)` —— data 是【排序后的完整 DesktopDataItem 数组】。sort prop 通常不需要在 onSort 回调里更新,保持 {} 即可"
82
+ },
83
+ "M2": {
84
+ "wrong": "在 data 项的 icon 字段传 React.ReactNode: `<Desktop data={[{key, name, icon: <Icon />}]} />`",
85
+ "result": "**TS 报错**(icon: string 字段类型不匹配) 或 runtime 渲染 [object Object]",
86
+ "fix": "icon 必须是 base64 string。需要 SVG / 图标组件:**预先用工具转 base64**(`btoa` + SVG 字符串),或**不传 icon**(显示无图标,只显示 name)。见 adaptationPatterns.patternC"
87
+ },
88
+ "M3": {
89
+ "wrong": "期望 onClick(data) 的 data 就是被点击的单项: `onClick: (item) => openApp(item.key)`",
90
+ "result": "**item 实际是完整数组**,`item.key` 是 undefined,openApp(undefined) 触发空指针",
91
+ "fix": "Desktop **结构性不支持识别单项点击**(L1)。两种 workaround:1) 外层 div 事件代理 + data-id(patternB);2) 不依赖 Desktop.onClick,改用 Desktop 仅管排序,点击行为另起 UI"
92
+ },
93
+ "M4": {
94
+ "wrong": "期望 Desktop 接受 children / renderItem 自定义格子内容: `<Desktop>{apps.map(...)}</Desktop>` 或 `<Desktop renderItem={...} />`",
95
+ "result": "**DesktopProps 无 children / renderItem 字段**,传入被静默忽略,格子仍只渲染 icon + name",
96
+ "fix": "需要每格放 React 组件:**不要用 Desktop**,改 Container + react-grid-layout / dnd-kit"
97
+ },
98
+ "M5": {
99
+ "wrong": "手动构造 sort prop 的 mapProps[] 形态: `sort={{ 'group-1': [{type: 'app', key: 'a', index: 0, ...}] }}`",
100
+ "result": "mapProps 接口未 export,字段会变(opaque),手动构造容易引发不可预期的渲染状态",
101
+ "fix": "sort 只用两种值:`{}` (默认,组件按 data 顺序推导) 或 上次 onSort 后从 localStorage 反序列化的整个 sort 对象。**永远不手动写 sort 字面量**"
102
+ }
103
+ },
104
+ "do": [
105
+ "**默认用法**:`<Desktop data={data} sort={{}} onSort={setData} />`(sort 用空对象,Desktop 自动推导)",
106
+ "用户排序偏好:保存 `nextData.map(d => d.key)` 到 localStorage(而非 sort 对象,见 patternA)",
107
+ "业务模型挂在 data 项的扩展字段(`_app`, `_payload` 等),onSort 时 map(_app) 取回",
108
+ "上层接口 icon 是 ReactNode 时:映射时只取 string 字段(iconUrl / iconBase64),不传 ReactNode(patternC)",
109
+ "需要识别点击项:外层 div 事件代理 + data-id 自维护(patternB);或不用 Desktop.onClick"
110
+ ],
111
+ "dont": [
112
+ "**不要**把 onSort 的参数当 sort 对象处理——是数组(M1)",
113
+ "**不要**给 icon 传 React.ReactNode——只接受 base64 string(M2,L2)",
114
+ "**不要**期望 onClick 知道点的是哪一项——是数组(M3,L1)",
115
+ "**不要**用 children / renderItem 自定义格子——不存在(M4,L3)",
116
+ "**不要**手动构造 sort prop 的 mapProps 字面量——opaque(M5)",
117
+ "**不要**在每格需要嵌入任意 React 组件的场景使用 Desktop——换 Container + dnd-kit",
118
+ "拖拽项过多(>100)导致性能问题"
119
+ ],
120
+ "events": {
121
+ "onSort": {
122
+ "signature": "(data: Array<DesktopDataItem>) => void",
123
+ "asyncSupported": false,
124
+ "examples": [
125
+ "基本排序:<Desktop data={data} sort={{}} onSort={(nextData) => setData(nextData)} />",
126
+ "持久化排序:onSort={(nextData) => { setData(nextData); localStorage.setItem('order', JSON.stringify(nextData.map(d => d.key))); }}",
127
+ "onSort 的 data 参数是排序后的完整 DesktopDataItem 数组(不是 diff,不是 sort 映射对象)"
128
+ ],
129
+ "commonMistakes": [
130
+ "把 onSort(data) 的 data 当 sort 映射对象处理:setSort(data)——data 是数组,sort 期望 { [key]: mapProps[] }",
131
+ "期望 onSort 在初始化时触发——只有用户拖拽后才触发",
132
+ "持久化保存整个 data 数组(含业务 _payload 字段)——推荐只保存 data.map(d => d.key) 的 key 序列"
133
+ ]
134
+ },
135
+ "onClick": {
136
+ "signature": "(data: Array<DesktopDataItem>) => void",
137
+ "asyncSupported": false,
138
+ "examples": [
139
+ "注意:data 是完整数组,不是被点击的单项——识别点击项需要外层事件代理",
140
+ "外层事件代理识别点击项:通过 e.target.closest('[data-id]') 反查 id",
141
+ "若不需要识别单项:仅用 onClick 感知'有项被点击'的触发,具体 item 由 sort 顺序推断"
142
+ ],
143
+ "commonMistakes": [
144
+ "期望 onClick(item) 的 item 是被点击的单个 DesktopDataItem——实际是完整数组",
145
+ "item.key 是 undefined(因为 item 是数组):openApp(item.key) 触发空指针",
146
+ "期望通过 children/renderItem 自定义格子点击行为——Desktop 不支持 children/renderItem"
147
+ ]
148
+ }
149
+ },
150
+ "typescriptPitfalls": [
151
+ {
152
+ "issue": "icon 字段只接受 base64 string,传 ReactNode 会 TS 报错或运行时渲染 [object Object]",
153
+ "wrong": "data={[{ key: 'app1', name: '应用1', icon: <AppIcon /> }]} // TS 报错:icon: string 类型不匹配",
154
+ "right": "// icon 必须是 base64 字符串,ReactNode 图标需预先转 base64\ndata={[{ key: 'app1', name: '应用1', icon: 'data:image/png;base64,...' }]}"
155
+ },
156
+ {
157
+ "issue": "onSort/onClick 的参数 data 是完整数组,不是单个 item,类型声明也是 Array<DesktopDataItem>",
158
+ "wrong": "onClick={(item) => openApp(item.key)} // item 实际是数组,item.key 是 undefined",
159
+ "right": "// Desktop 不支持识别单项点击,只能用事件代理:\n<div onClick={(e) => { const id = (e.target as HTMLElement).closest('[data-id]')?.getAttribute('data-id'); }}>\n <Desktop ... />\n</div>"
160
+ },
161
+ {
162
+ "issue": "sort prop 的 mapProps[] 接口未 export,不能手动构造 sort 字面量",
163
+ "wrong": "sort={{ 'group-1': [{ type: 'app', key: 'a', index: 0 }] }} // mapProps 接口未公开,字段会变",
164
+ "right": "sort={{}} // 传空对象,Desktop 自动按 data 顺序推导"
165
+ }
166
+ ],
167
+ "mapping": {
168
+ "realComponent": "Desktop",
169
+ "adapter": null
170
+ }
171
+ }