@king-design/intact 3.0.0-beta.0 → 3.0.0-beta.1

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 (504) hide show
  1. package/README.md +1 -1
  2. package/components/button/demos/basic.md +1 -0
  3. package/components/button/demos/group.md +11 -0
  4. package/components/button/demos/icon.md +1 -0
  5. package/components/button/index.md +1 -1
  6. package/components/button/index.ts +2 -2
  7. package/components/button/styles.ts +6 -1
  8. package/components/cascader/index.md +18 -0
  9. package/components/cascader/index.spec.ts +56 -0
  10. package/components/cascader/index.ts +35 -12
  11. package/components/cascader/index.vdt +9 -8
  12. package/components/cascader/styles.ts +2 -1
  13. package/components/cascader/useFields.ts +22 -0
  14. package/components/cascader/useFilterable.ts +23 -8
  15. package/components/cascader/useLabel.ts +7 -4
  16. package/components/cascader/useLoad.ts +4 -2
  17. package/components/code/demos/basic.md +1 -1
  18. package/components/colorpicker/index.md +16 -0
  19. package/components/colorpicker/index.ts +4 -0
  20. package/components/colorpicker/index.vdt +3 -2
  21. package/components/copy/demos/basic.md +12 -0
  22. package/components/copy/demos/children.md +37 -0
  23. package/components/copy/index.md +21 -0
  24. package/components/copy/index.spec.ts +21 -0
  25. package/components/copy/index.ts +37 -0
  26. package/components/copy/index.vdt +23 -0
  27. package/components/copy/styles.ts +9 -0
  28. package/components/copy/useCopy.ts +91 -0
  29. package/components/datepicker/demos/basic.md +1 -0
  30. package/components/datepicker/index.md +13 -0
  31. package/components/datepicker/index.spec.ts +2 -2
  32. package/components/datepicker/index.vdt +2 -2
  33. package/components/datepicker/styles.ts +10 -4
  34. package/components/dialog/alert.vdt +10 -6
  35. package/components/dialog/index.spec.ts +6 -6
  36. package/components/dropdown/demos/tooltip.md +1 -1
  37. package/components/dropdown/dropdown.ts +51 -79
  38. package/components/dropdown/index.spec.ts +52 -3
  39. package/components/dropdown/item.ts +18 -7
  40. package/components/dropdown/menu.ts +4 -4
  41. package/components/dropdown/usePosition.ts +12 -1
  42. package/components/editable/index.ts +17 -3
  43. package/components/editable/index.vdt +1 -0
  44. package/components/form/index.spec.ts +1 -1
  45. package/components/form/item.vdt +1 -1
  46. package/components/form/styles.ts +20 -25
  47. package/components/grid/useGutter.ts +7 -6
  48. package/components/input/demos/autoRows.md +44 -0
  49. package/components/input/demos/flat.md +16 -0
  50. package/components/input/demos/password.md +12 -0
  51. package/components/input/demos/textarea.md +2 -2
  52. package/components/input/index.md +2 -0
  53. package/components/input/index.spec.ts +97 -1
  54. package/components/input/index.ts +21 -13
  55. package/components/input/index.vdt +30 -6
  56. package/components/input/styles.ts +33 -2
  57. package/components/input/useAutoRows.ts +65 -0
  58. package/components/input/useAutoWidth.ts +12 -3
  59. package/components/input/useShowPassword.ts +27 -0
  60. package/components/menu/demos/collapse.md +1 -1
  61. package/components/menu/index.spec.ts +9 -1
  62. package/components/menu/item.ts +7 -0
  63. package/components/pagination/demos/flat.md +22 -0
  64. package/components/pagination/index.md +1 -1
  65. package/components/pagination/index.spec.ts +23 -0
  66. package/components/pagination/index.ts +4 -3
  67. package/components/pagination/index.vdt +6 -9
  68. package/components/pagination/styles.ts +2 -2
  69. package/components/popover/content.ts +40 -0
  70. package/components/popover/content.vdt +32 -0
  71. package/components/popover/demos/basic.md +47 -0
  72. package/components/popover/demos/button.md +49 -0
  73. package/components/popover/demos/content.md +36 -0
  74. package/components/popover/demos/text.md +38 -0
  75. package/components/popover/demos/type.md +51 -0
  76. package/components/popover/index.md +54 -0
  77. package/components/popover/index.spec.ts +91 -0
  78. package/components/popover/index.ts +52 -0
  79. package/components/popover/styles.ts +45 -0
  80. package/components/portal.ts +4 -4
  81. package/components/position.ts +5 -1
  82. package/components/progress/demos/children.md +1 -1
  83. package/components/progress/demos/circleSize.md +84 -0
  84. package/components/progress/demos/customColor.md +1 -3
  85. package/components/progress/index.ts +1 -1
  86. package/components/progress/index.vdt +36 -7
  87. package/components/progress/styles.ts +34 -21
  88. package/components/rate/styles.ts +1 -0
  89. package/components/select/base.ts +11 -3
  90. package/components/select/base.vdt +39 -35
  91. package/components/select/demos/basic.md +21 -12
  92. package/components/select/demos/creatable.md +1 -1
  93. package/components/select/demos/draggable.md +55 -0
  94. package/components/select/demos/flat.md +42 -0
  95. package/components/select/demos/nowrap.md +24 -0
  96. package/components/select/demos/size.md +41 -1
  97. package/components/select/index.md +12 -0
  98. package/components/select/index.spec.ts +2 -2
  99. package/components/select/menu.vdt +5 -5
  100. package/components/select/styles.ts +52 -38
  101. package/components/select/useDraggble.ts +12 -0
  102. package/components/select/useNowrap.ts +24 -0
  103. package/components/slider/index.spec.ts +32 -1
  104. package/components/slider/index.ts +2 -2
  105. package/components/slider/index.vdt +34 -16
  106. package/components/slider/styles.ts +21 -13
  107. package/components/slider/useValue.ts +15 -3
  108. package/components/spinner/index.md +1 -1
  109. package/components/spinner/index.ts +0 -9
  110. package/components/spinner/index.vdt +7 -4
  111. package/components/spinner/useChange.ts +2 -2
  112. package/components/spinner/useValue.ts +9 -1
  113. package/components/split/index.vdt +13 -3
  114. package/components/split/memo.ts +29 -0
  115. package/components/steps/demos/vertical.md +79 -0
  116. package/components/steps/index.md +1 -0
  117. package/components/steps/index.spec.ts +1 -1
  118. package/components/steps/index.ts +3 -1
  119. package/components/steps/index.vdt +4 -3
  120. package/components/steps/step.vdt +1 -1
  121. package/components/steps/styles.ts +154 -25
  122. package/components/switch/demos/onOff.md +2 -2
  123. package/components/switch/index.spec.ts +15 -10
  124. package/components/table/cell.ts +4 -5
  125. package/components/table/demos/hideHeader.md +33 -0
  126. package/components/table/demos/pagination.md +53 -0
  127. package/components/table/index.md +22 -0
  128. package/components/table/index.spec.ts +73 -1
  129. package/components/table/row.ts +3 -3
  130. package/components/table/styles.ts +5 -0
  131. package/components/table/table.ts +29 -4
  132. package/components/table/table.vdt +21 -3
  133. package/components/table/useChecked.ts +21 -6
  134. package/components/table/useDisableRow.ts +3 -2
  135. package/components/table/useDraggable.ts +12 -8
  136. package/components/table/useGroup.ts +2 -0
  137. package/components/table/useMerge.ts +6 -3
  138. package/components/table/usePagination.ts +71 -0
  139. package/components/table/useRestRowStatus.ts +4 -1
  140. package/components/table/useStickyScrollbar.ts +2 -2
  141. package/components/table/useTree.ts +4 -3
  142. package/components/table/useWidth.ts +2 -2
  143. package/components/tabs/demos/beforeChange.md +2 -2
  144. package/components/tabs/demos/card.md +2 -11
  145. package/components/tabs/demos/closable.md +7 -6
  146. package/components/tabs/demos/scroll.md +104 -0
  147. package/components/tabs/demos/vertical.md +1 -9
  148. package/components/tabs/index.md +1 -1
  149. package/components/tabs/index.spec.ts +36 -0
  150. package/components/tabs/index.ts +11 -12
  151. package/components/tabs/index.vdt +6 -7
  152. package/components/tabs/styles.ts +113 -144
  153. package/components/tabs/useScroll.ts +101 -42
  154. package/components/tag/base.ts +1 -1
  155. package/components/tag/demos/draggable.md +49 -0
  156. package/components/tag/demos/tags.md +72 -0
  157. package/components/tag/index.md +11 -0
  158. package/components/tag/index.spec.ts +70 -2
  159. package/components/tag/index.ts +2 -0
  160. package/components/tag/styles.ts +53 -4
  161. package/components/tag/tags.ts +54 -0
  162. package/components/tag/tags.vdt +49 -0
  163. package/components/tag/useChildren.ts +42 -0
  164. package/components/tag/useDraggable.ts +97 -0
  165. package/components/tag/useNowrap.ts +117 -0
  166. package/components/timepicker/index.md +13 -0
  167. package/components/timepicker/index.spec.ts +1 -1
  168. package/components/tooltip/content.ts +21 -7
  169. package/components/tooltip/content.vdt +14 -8
  170. package/components/tooltip/demos/trigger.md +1 -1
  171. package/components/tooltip/index.md +3 -6
  172. package/components/tooltip/index.spec.ts +69 -40
  173. package/components/tooltip/styles.ts +3 -3
  174. package/components/tooltip/tooltip.ts +7 -1
  175. package/components/treeSelect/index.md +11 -0
  176. package/components/upload/index.spec.ts +4 -4
  177. package/components/upload/index.vdt +1 -1
  178. package/components/upload/styles.ts +0 -2
  179. package/components/utils.ts +25 -4
  180. package/components/virtual.ts +98 -0
  181. package/es/components/button/index.d.ts +1 -1
  182. package/es/components/button/index.js +1 -1
  183. package/es/components/button/styles.js +1 -1
  184. package/es/components/cascader/index.d.ts +22 -11
  185. package/es/components/cascader/index.js +9 -12
  186. package/es/components/cascader/index.spec.js +81 -0
  187. package/es/components/cascader/index.vdt.js +10 -8
  188. package/es/components/cascader/styles.js +1 -1
  189. package/es/components/cascader/useFields.d.ts +2 -0
  190. package/es/components/cascader/useFields.js +18 -0
  191. package/es/components/cascader/useFilterable.d.ts +2 -1
  192. package/es/components/cascader/useFilterable.js +17 -6
  193. package/es/components/cascader/useLabel.d.ts +2 -1
  194. package/es/components/cascader/useLabel.js +4 -4
  195. package/es/components/cascader/useLoad.d.ts +2 -1
  196. package/es/components/cascader/useLoad.js +9 -7
  197. package/es/components/colorpicker/index.d.ts +2 -0
  198. package/es/components/colorpicker/index.js +7 -2
  199. package/es/components/colorpicker/index.vdt.js +3 -6
  200. package/es/components/copy/index.d.ts +17 -0
  201. package/es/components/copy/index.js +43 -0
  202. package/es/components/copy/index.spec.d.ts +1 -0
  203. package/es/components/copy/index.spec.js +52 -0
  204. package/es/components/copy/index.vdt.js +45 -0
  205. package/es/components/copy/styles.d.ts +2 -0
  206. package/es/components/copy/styles.js +14 -0
  207. package/es/components/copy/useCopy.d.ts +4 -0
  208. package/es/components/copy/useCopy.js +90 -0
  209. package/es/components/datepicker/index.spec.js +1 -1
  210. package/es/components/datepicker/index.vdt.js +1 -1
  211. package/es/components/datepicker/styles.js +1 -1
  212. package/es/components/diagram/shapes/callout.d.ts +1 -1
  213. package/es/components/diagram/shapes/circle.d.ts +1 -1
  214. package/es/components/diagram/shapes/document.d.ts +1 -1
  215. package/es/components/diagram/shapes/ellipse.d.ts +1 -1
  216. package/es/components/diagram/shapes/hexagon.d.ts +1 -1
  217. package/es/components/diagram/shapes/image.d.ts +1 -1
  218. package/es/components/diagram/shapes/parallelogram.d.ts +1 -1
  219. package/es/components/diagram/shapes/rectangle.d.ts +1 -1
  220. package/es/components/diagram/shapes/square.d.ts +1 -1
  221. package/es/components/diagram/shapes/text.d.ts +1 -1
  222. package/es/components/dialog/alert.vdt.js +6 -5
  223. package/es/components/dialog/index.spec.js +6 -6
  224. package/es/components/dropdown/dropdown.d.ts +6 -6
  225. package/es/components/dropdown/dropdown.js +58 -75
  226. package/es/components/dropdown/index.spec.js +96 -17
  227. package/es/components/dropdown/item.d.ts +1 -1
  228. package/es/components/dropdown/item.js +19 -7
  229. package/es/components/dropdown/menu.js +1 -1
  230. package/es/components/dropdown/usePosition.js +11 -2
  231. package/es/components/editable/index.d.ts +1 -0
  232. package/es/components/editable/index.js +20 -6
  233. package/es/components/editable/index.vdt.js +2 -1
  234. package/es/components/form/index.spec.js +4 -2
  235. package/es/components/form/item.vdt.js +2 -1
  236. package/es/components/form/styles.js +4 -4
  237. package/es/components/grid/useGutter.js +8 -8
  238. package/es/components/input/index.d.ts +11 -2
  239. package/es/components/input/index.js +13 -13
  240. package/es/components/input/index.spec.js +169 -1
  241. package/es/components/input/index.vdt.js +28 -7
  242. package/es/components/input/styles.js +20 -3
  243. package/es/components/input/useAutoRows.d.ts +2 -0
  244. package/es/components/input/useAutoRows.js +79 -0
  245. package/es/components/input/useAutoWidth.js +13 -3
  246. package/es/components/input/useShowPassword.d.ts +7 -0
  247. package/es/components/input/useShowPassword.js +31 -0
  248. package/es/components/menu/index.spec.js +26 -15
  249. package/es/components/menu/item.d.ts +2 -0
  250. package/es/components/menu/item.js +5 -0
  251. package/es/components/pagination/index.d.ts +1 -1
  252. package/es/components/pagination/index.js +3 -2
  253. package/es/components/pagination/index.spec.js +49 -0
  254. package/es/components/pagination/index.vdt.js +8 -10
  255. package/es/components/pagination/styles.js +1 -1
  256. package/es/components/popover/content.d.ts +19 -0
  257. package/es/components/popover/content.js +31 -0
  258. package/es/components/popover/content.vdt.js +68 -0
  259. package/es/components/popover/index.d.ts +16 -0
  260. package/es/components/popover/index.js +44 -0
  261. package/es/components/popover/index.spec.d.ts +1 -0
  262. package/es/components/popover/index.spec.js +195 -0
  263. package/es/components/popover/styles.d.ts +1 -0
  264. package/es/components/popover/styles.js +22 -0
  265. package/es/components/portal.d.ts +6 -2
  266. package/es/components/portal.js +4 -3
  267. package/es/components/position.js +2 -1
  268. package/es/components/progress/index.js +1 -1
  269. package/es/components/progress/index.vdt.js +46 -8
  270. package/es/components/progress/styles.js +19 -13
  271. package/es/components/rate/styles.js +1 -1
  272. package/es/components/select/base.d.ts +7 -3
  273. package/es/components/select/base.js +9 -3
  274. package/es/components/select/base.vdt.js +46 -35
  275. package/es/components/select/index.spec.js +2 -2
  276. package/es/components/select/menu.vdt.js +1 -1
  277. package/es/components/select/styles.js +11 -5
  278. package/es/components/select/useDraggble.d.ts +2 -0
  279. package/es/components/select/useDraggble.js +11 -0
  280. package/es/components/select/useNowrap.d.ts +3 -0
  281. package/es/components/select/useNowrap.js +19 -0
  282. package/es/components/slider/index.spec.js +48 -9
  283. package/es/components/slider/index.vdt.js +23 -12
  284. package/es/components/slider/styles.js +23 -14
  285. package/es/components/slider/useValue.d.ts +3 -1
  286. package/es/components/slider/useValue.js +12 -0
  287. package/es/components/spinner/index.d.ts +0 -1
  288. package/es/components/spinner/index.js +1 -19
  289. package/es/components/spinner/index.vdt.js +9 -4
  290. package/es/components/spinner/useChange.d.ts +1 -1
  291. package/es/components/spinner/useChange.js +2 -2
  292. package/es/components/spinner/useValue.d.ts +1 -0
  293. package/es/components/spinner/useValue.js +16 -1
  294. package/es/components/split/index.vdt.js +32 -20
  295. package/es/components/split/memo.d.ts +9 -0
  296. package/es/components/split/memo.js +26 -0
  297. package/es/components/steps/index.d.ts +1 -0
  298. package/es/components/steps/index.js +2 -1
  299. package/es/components/steps/index.spec.js +1 -1
  300. package/es/components/steps/index.vdt.js +7 -4
  301. package/es/components/steps/step.vdt.js +0 -1
  302. package/es/components/steps/styles.d.ts +1 -0
  303. package/es/components/steps/styles.js +45 -16
  304. package/es/components/switch/index.spec.js +82 -65
  305. package/es/components/table/cell.js +1 -6
  306. package/es/components/table/index.spec.js +130 -19
  307. package/es/components/table/row.d.ts +1 -1
  308. package/es/components/table/row.js +2 -1
  309. package/es/components/table/styles.js +1 -1
  310. package/es/components/table/table.d.ts +15 -0
  311. package/es/components/table/table.js +16 -7
  312. package/es/components/table/table.vdt.js +20 -6
  313. package/es/components/table/useChecked.d.ts +3 -2
  314. package/es/components/table/useChecked.js +23 -12
  315. package/es/components/table/useDisableRow.d.ts +2 -1
  316. package/es/components/table/useDisableRow.js +4 -4
  317. package/es/components/table/useDraggable.d.ts +3 -2
  318. package/es/components/table/useDraggable.js +11 -15
  319. package/es/components/table/useGroup.js +3 -0
  320. package/es/components/table/useMerge.d.ts +2 -1
  321. package/es/components/table/useMerge.js +5 -4
  322. package/es/components/table/usePagination.d.ts +8 -0
  323. package/es/components/table/usePagination.js +81 -0
  324. package/es/components/table/useStickyScrollbar.js +2 -2
  325. package/es/components/table/useTree.d.ts +2 -1
  326. package/es/components/table/useTree.js +3 -4
  327. package/es/components/table/useWidth.js +2 -2
  328. package/es/components/tabs/index.d.ts +1 -1
  329. package/es/components/tabs/index.js +1 -1
  330. package/es/components/tabs/index.spec.js +67 -0
  331. package/es/components/tabs/index.vdt.js +4 -4
  332. package/es/components/tabs/styles.js +32 -34
  333. package/es/components/tabs/useScroll.d.ts +1 -1
  334. package/es/components/tabs/useScroll.js +75 -48
  335. package/es/components/tag/base.d.ts +1 -0
  336. package/es/components/tag/base.js +1 -1
  337. package/es/components/tag/index.d.ts +1 -0
  338. package/es/components/tag/index.js +2 -1
  339. package/es/components/tag/index.spec.js +147 -4
  340. package/es/components/tag/styles.d.ts +67 -0
  341. package/es/components/tag/styles.js +33 -8
  342. package/es/components/tag/tags.d.ts +27 -0
  343. package/es/components/tag/tags.js +51 -0
  344. package/es/components/tag/tags.vdt.js +79 -0
  345. package/es/components/tag/useChildren.d.ts +2 -0
  346. package/es/components/tag/useChildren.js +39 -0
  347. package/es/components/tag/useDraggable.d.ts +3 -0
  348. package/es/components/tag/useDraggable.js +89 -0
  349. package/es/components/tag/useNowrap.d.ts +7 -0
  350. package/es/components/tag/useNowrap.js +115 -0
  351. package/es/components/timepicker/index.spec.js +1 -1
  352. package/es/components/tooltip/content.d.ts +3 -2
  353. package/es/components/tooltip/content.js +18 -1
  354. package/es/components/tooltip/content.vdt.js +22 -10
  355. package/es/components/tooltip/index.spec.js +147 -92
  356. package/es/components/tooltip/styles.d.ts +23 -0
  357. package/es/components/tooltip/styles.js +2 -2
  358. package/es/components/tooltip/tooltip.d.ts +1 -1
  359. package/es/components/tooltip/tooltip.js +11 -11
  360. package/es/components/upload/index.spec.js +5 -6
  361. package/es/components/upload/index.vdt.js +3 -1
  362. package/es/components/utils.d.ts +2 -0
  363. package/es/components/utils.js +24 -3
  364. package/es/components/virtual.d.ts +8 -0
  365. package/es/components/virtual.js +126 -0
  366. package/es/hooks/useResizeObserver.d.ts +1 -1
  367. package/es/hooks/useResizeObserver.js +19 -6
  368. package/es/i18n/en-US.d.ts +4 -1
  369. package/es/i18n/en-US.js +6 -2
  370. package/es/index.d.ts +5 -3
  371. package/es/index.js +5 -3
  372. package/es/packages/kpc-react/__tests__/components/cascader.spec.d.ts +1 -0
  373. package/es/packages/kpc-react/__tests__/components/cascader.spec.js +79 -0
  374. package/es/packages/kpc-react/__tests__/components/drawer.spec.js +74 -6
  375. package/es/site/data/components/button/demos/basic/react.js +3 -1
  376. package/es/site/data/components/button/demos/group/react.js +26 -0
  377. package/es/site/data/components/button/demos/icon/react.js +6 -0
  378. package/es/site/data/components/copy/demos/basic/react.js +23 -0
  379. package/es/site/data/components/copy/demos/children/react.js +44 -0
  380. package/es/site/data/components/copy/index.d.ts +57 -0
  381. package/es/site/data/components/copy/index.js +42 -0
  382. package/es/site/data/components/datepicker/demos/basic/react.js +8 -0
  383. package/es/site/data/components/dropdown/demos/tooltip/react.js +2 -1
  384. package/es/site/data/components/input/demos/autoRows/index.d.ts +9 -0
  385. package/es/site/data/components/input/demos/autoRows/index.js +24 -0
  386. package/es/site/data/components/input/demos/autoRows/react.d.ts +8 -0
  387. package/es/site/data/components/input/demos/autoRows/react.js +62 -0
  388. package/es/site/data/components/input/demos/flat/index.d.ts +5 -0
  389. package/es/site/data/components/input/demos/flat/index.js +17 -0
  390. package/es/site/data/components/input/demos/flat/react.d.ts +4 -0
  391. package/es/site/data/components/input/demos/flat/react.js +29 -0
  392. package/es/site/data/components/input/demos/password/index.d.ts +5 -0
  393. package/es/site/data/components/input/demos/password/index.js +17 -0
  394. package/es/site/data/components/input/demos/password/react.d.ts +5 -0
  395. package/es/site/data/components/input/demos/password/react.js +41 -0
  396. package/es/site/data/components/input/demos/textarea/react.js +4 -2
  397. package/es/site/data/components/menu/demos/collapse/index.js +1 -1
  398. package/es/site/data/components/menu/demos/collapse/react.js +1 -1
  399. package/es/site/data/components/pagination/demos/flat/index.d.ts +6 -0
  400. package/es/site/data/components/pagination/demos/flat/index.js +18 -0
  401. package/es/site/data/components/pagination/demos/flat/react.d.ts +5 -0
  402. package/es/site/data/components/pagination/demos/{noBoard → flat}/react.js +12 -8
  403. package/es/site/data/components/popover/demos/basic/react.d.ts +8 -0
  404. package/es/site/data/components/{tooltip/demos/confirm → popover/demos/basic}/react.js +14 -9
  405. package/es/site/data/components/popover/demos/button/index.d.ts +8 -0
  406. package/es/site/data/components/popover/demos/button/index.js +42 -0
  407. package/es/site/data/components/popover/demos/button/react.d.ts +8 -0
  408. package/es/site/data/components/popover/demos/button/react.js +73 -0
  409. package/es/site/data/components/popover/demos/content/index.d.ts +7 -0
  410. package/es/site/data/components/popover/demos/content/index.js +28 -0
  411. package/es/site/data/components/{tooltip/demos/confirm → popover/demos/content}/react.d.ts +0 -1
  412. package/es/site/data/components/popover/demos/content/react.js +43 -0
  413. package/es/site/data/components/popover/demos/text/index.d.ts +7 -0
  414. package/es/site/data/components/popover/demos/text/index.js +28 -0
  415. package/es/site/data/components/popover/demos/text/react.d.ts +6 -0
  416. package/es/site/data/components/popover/demos/text/react.js +36 -0
  417. package/es/site/data/components/popover/demos/type/index.d.ts +11 -0
  418. package/es/site/data/components/popover/demos/type/index.js +34 -0
  419. package/es/site/data/components/popover/demos/type/react.d.ts +11 -0
  420. package/es/site/data/components/popover/demos/type/react.js +58 -0
  421. package/es/site/data/components/popover/index.d.ts +57 -0
  422. package/es/site/data/components/popover/index.js +42 -0
  423. package/es/site/data/components/progress/demos/children/react.js +4 -4
  424. package/es/site/data/components/progress/demos/circleSize/index.d.ts +14 -0
  425. package/es/site/data/components/progress/demos/circleSize/index.js +43 -0
  426. package/es/site/data/components/progress/demos/circleSize/react.d.ts +14 -0
  427. package/es/site/data/components/progress/demos/circleSize/react.js +98 -0
  428. package/es/site/data/components/progress/demos/customColor/react.js +4 -4
  429. package/es/site/data/components/select/demos/basic/react.js +19 -7
  430. package/es/site/data/components/select/demos/creatable/react.js +2 -1
  431. package/es/site/data/components/select/demos/draggable/index.d.ts +10 -0
  432. package/es/site/data/components/select/demos/draggable/index.js +24 -0
  433. package/es/site/data/components/select/demos/draggable/react.d.ts +10 -0
  434. package/es/site/data/components/select/demos/draggable/react.js +85 -0
  435. package/es/site/data/components/select/demos/flat/index.d.ts +5 -0
  436. package/es/site/data/components/select/demos/flat/index.js +17 -0
  437. package/es/site/data/components/select/demos/flat/react.d.ts +4 -0
  438. package/es/site/data/components/select/demos/flat/react.js +73 -0
  439. package/es/site/data/components/select/demos/inline/index.d.ts +5 -0
  440. package/es/site/data/components/select/demos/inline/index.js +17 -0
  441. package/es/site/data/components/select/demos/inline/react.d.ts +4 -0
  442. package/es/site/data/components/select/demos/nowrap/index.d.ts +5 -0
  443. package/es/site/data/components/select/demos/nowrap/index.js +17 -0
  444. package/es/site/data/components/select/demos/nowrap/react.d.ts +4 -0
  445. package/es/site/data/components/select/demos/nowrap/react.js +41 -0
  446. package/es/site/data/components/select/demos/size/index.d.ts +1 -0
  447. package/es/site/data/components/select/demos/size/index.js +2 -1
  448. package/es/site/data/components/select/demos/size/react.d.ts +1 -0
  449. package/es/site/data/components/select/demos/size/react.js +93 -1
  450. package/es/site/data/components/steps/demos/vertical/index.d.ts +14 -0
  451. package/es/site/data/components/steps/demos/vertical/index.js +40 -0
  452. package/es/site/data/components/steps/demos/vertical/react.d.ts +14 -0
  453. package/es/site/data/components/steps/demos/vertical/react.js +124 -0
  454. package/es/site/data/components/switch/demos/onOff/react.js +1 -3
  455. package/es/site/data/components/table/demos/hideHeader/index.d.ts +12 -0
  456. package/es/site/data/components/table/demos/hideHeader/index.js +30 -0
  457. package/es/site/data/components/table/demos/hideHeader/react.d.ts +11 -0
  458. package/es/site/data/components/table/demos/hideHeader/react.js +60 -0
  459. package/es/site/data/components/table/demos/pagination/index.d.ts +12 -0
  460. package/es/site/data/components/table/demos/pagination/index.js +35 -0
  461. package/es/site/data/components/table/demos/pagination/react.d.ts +16 -0
  462. package/es/site/data/components/table/demos/pagination/react.js +65 -0
  463. package/es/site/data/components/tabs/demos/card/react.js +1 -15
  464. package/es/site/data/components/tabs/demos/closable/index.js +1 -1
  465. package/es/site/data/components/tabs/demos/closable/react.js +9 -3
  466. package/es/site/data/components/tabs/demos/scroll/index.d.ts +18 -0
  467. package/es/site/data/components/tabs/demos/scroll/index.js +87 -0
  468. package/es/site/data/components/tabs/demos/scroll/react.d.ts +18 -0
  469. package/es/site/data/components/tabs/demos/scroll/react.js +166 -0
  470. package/es/site/data/components/tabs/demos/vertical/react.js +1 -16
  471. package/es/site/data/components/tag/demos/draggable/index.d.ts +11 -0
  472. package/es/site/data/components/tag/demos/draggable/index.js +24 -0
  473. package/es/site/data/components/tag/demos/draggable/react.d.ts +11 -0
  474. package/es/site/data/components/tag/demos/draggable/react.js +62 -0
  475. package/es/site/data/components/tag/demos/tags/index.d.ts +12 -0
  476. package/es/site/data/components/tag/demos/tags/index.js +39 -0
  477. package/es/site/data/components/tag/demos/tags/react.d.ts +12 -0
  478. package/es/site/data/components/tag/demos/tags/react.js +83 -0
  479. package/es/site/src/pages/document/index.js +2 -3
  480. package/es/styles/fonts/iconfont.js +1 -1
  481. package/es/styles/fonts/ionicons.js +3 -3
  482. package/es/styles/global.js +1 -1
  483. package/hooks/useResizeObserver.ts +19 -7
  484. package/i18n/en-US.ts +6 -1
  485. package/index.ts +5 -3
  486. package/package.json +9 -5
  487. package/styles/fonts/iconfont.ts +1 -1
  488. package/styles/fonts/ionicons.ts +2 -3
  489. package/styles/global.ts +3 -3
  490. package/components/pagination/demos/noBoard.md +0 -22
  491. package/components/table/useResizeObserver.ts +0 -22
  492. package/components/tooltip/demos/confirm.md +0 -41
  493. package/es/components/table/useResizeObserver.d.ts +0 -2
  494. package/es/components/table/useResizeObserver.js +0 -20
  495. /package/components/select/demos/{noBorder.md → inline.md} +0 -0
  496. /package/es/site/data/components/{select/demos/noBorder → copy/demos/basic}/index.d.ts +0 -0
  497. /package/es/site/data/components/{select/demos/noBorder → copy/demos/basic}/index.js +0 -0
  498. /package/es/site/data/components/{select/demos/noBorder → copy/demos/basic}/react.d.ts +0 -0
  499. /package/es/site/data/components/{pagination/demos/noBoard → copy/demos/children}/index.d.ts +0 -0
  500. /package/es/site/data/components/{pagination/demos/noBoard → copy/demos/children}/index.js +0 -0
  501. /package/es/site/data/components/{pagination/demos/noBoard → copy/demos/children}/react.d.ts +0 -0
  502. /package/es/site/data/components/{tooltip/demos/confirm → popover/demos/basic}/index.d.ts +0 -0
  503. /package/es/site/data/components/{tooltip/demos/confirm → popover/demos/basic}/index.js +0 -0
  504. /package/es/site/data/components/select/demos/{noBorder → inline}/react.js +0 -0
@@ -0,0 +1,21 @@
1
+ import BasicDemo from '~/components/copy/demos/basic';
2
+ import {mount, unmount, dispatchEvent, wait, getElement} from '../../test/utils';
3
+
4
+ describe('Copy', () => {
5
+ afterEach(async () => {
6
+ unmount();
7
+ });
8
+
9
+ it('should copy', async function() {
10
+ const [instance, element] = mount(BasicDemo);
11
+
12
+ element.click();
13
+ try {
14
+ const text = await navigator.clipboard.readText();
15
+ expect(text).to.eql('Hello King Desgin!');
16
+ } catch (e) {
17
+ // Read permisson denied
18
+ console.log(e);
19
+ }
20
+ });
21
+ });
@@ -0,0 +1,37 @@
1
+ import { Component, TypeDefs } from 'intact';
2
+ import template from './index.vdt';
3
+ import { useCopy } from './useCopy';
4
+ import { Events } from '../types';
5
+
6
+ export interface CopyProps {
7
+ text: string;
8
+ showMessage?: boolean;
9
+ }
10
+
11
+ export interface CopyEvents {
12
+ success: [string]
13
+ error: []
14
+ }
15
+
16
+ const typeDefs: Required<TypeDefs<CopyProps>> = {
17
+ text: String,
18
+ showMessage: Boolean,
19
+ };
20
+
21
+ const defaults = (): Partial<CopyProps> => ({
22
+ showMessage: true,
23
+ });
24
+
25
+ const events: Events<CopyEvents> = {
26
+ success: true,
27
+ error: true,
28
+ };
29
+
30
+ export class Copy extends Component<CopyProps, CopyEvents> {
31
+ static template = template;
32
+ static typeDefs = typeDefs;
33
+ static defaults = defaults;
34
+ static events = events;
35
+
36
+ private copy = useCopy()
37
+ }
@@ -0,0 +1,23 @@
1
+ import { Icon } from '../icon';
2
+ import { getRestProps } from '../utils';
3
+ import { Virtual } from '../virtual';
4
+ import { Transition } from 'intact';
5
+ import { makeStyles } from './styles';
6
+ import { _$ } from '../../i18n';
7
+
8
+ const { children, className } = this.get();
9
+ const { startCopy, success } = this.copy;
10
+
11
+ const classNameObj = {
12
+ [`k-copy`]: true,
13
+ [makeStyles()]: true,
14
+ [className]: className,
15
+ }
16
+
17
+ <Transition name="k-fade">
18
+ <Virtual ev-click={startCopy} class={classNameObj} {...getRestProps(this)}>
19
+ <template v-if={children}>{children}</template>
20
+ <Icon key="1" v-else-if={!success.value} class="k-icon-clone" hoverable title={_$('复制')} />
21
+ <Icon key="2" v-else class="k-icon-truth" hoverable color="success" />
22
+ </Virtual>
23
+ </Transition>
@@ -0,0 +1,9 @@
1
+ import {css} from '@emotion/css';
2
+ import '../../styles/global';
3
+
4
+ export function makeStyles() {
5
+ return css`
6
+ cursor: pointer;
7
+ vertical-align: middle;
8
+ `
9
+ }
@@ -0,0 +1,91 @@
1
+ import { Message } from '../message';
2
+ import { useInstance } from 'intact';
3
+ import type { Copy } from './';
4
+ import { selectValue } from '../utils';
5
+ import { useState } from '../../hooks/useState';
6
+ import { _$ } from '../../i18n';
7
+
8
+ export function useCopy() {
9
+ const instance = useInstance() as Copy;
10
+ const success = useState(false);
11
+ let timer: number;
12
+
13
+ return {
14
+ startCopy: () => {
15
+ const { text, showMessage } = instance.get();
16
+
17
+ if (clipboardCopy(text) || commandCopy(text)) {
18
+ showMessage && Message.success({ content: _$('复制成功') });
19
+ success.set(true);
20
+ clearTimeout(timer);
21
+ timer = window.setTimeout(() => {
22
+ success.set(false);
23
+ }, 1000);
24
+ instance.trigger('success', text);
25
+ } else {
26
+ showMessage && Message.error({ content: _$('复制失败') });
27
+ success.set(false);
28
+ instance.trigger('error');
29
+ }
30
+ },
31
+ success,
32
+ };
33
+ }
34
+
35
+ // @reference: https://github.com/zenorocha/clipboard.js/blob/master/src/common/create-fake-element.js
36
+ function createFakeElement(value: string) {
37
+ const isRTL = document.documentElement.getAttribute('dir') === 'rtl';
38
+ const fakeElement = document.createElement('textarea');
39
+ // Prevent zooming on iOS
40
+ fakeElement.style.fontSize = '12pt';
41
+ // Reset box model
42
+ fakeElement.style.border = '0';
43
+ fakeElement.style.padding = '0';
44
+ fakeElement.style.margin = '0';
45
+ // Move element out of screen horizontally
46
+ fakeElement.style.position = 'absolute';
47
+ fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px';
48
+ // Move element to the same position vertically
49
+ let yPosition = window.pageYOffset || document.documentElement.scrollTop;
50
+ fakeElement.style.top = `${yPosition}px`;
51
+
52
+ fakeElement.setAttribute('readonly', '');
53
+ fakeElement.value = value;
54
+
55
+ return fakeElement;
56
+ }
57
+
58
+ function clipboardCopy(text: string) {
59
+ try {
60
+ navigator.clipboard.writeText(text);
61
+
62
+ return true;
63
+ } catch (e) {
64
+ if (process.env.NODE_ENV !== 'production') {
65
+ console.log(e);
66
+ }
67
+ return false;
68
+ }
69
+ }
70
+
71
+ function commandCopy(text: string) {
72
+ const fakeElement = createFakeElement(text);
73
+ document.body.appendChild(fakeElement);
74
+ selectValue(fakeElement);
75
+
76
+ let result: boolean;
77
+ try {
78
+ document.execCommand('copy');
79
+ result = true;
80
+ } catch (e) {
81
+ if (process.env.NODE_ENV !== 'production') {
82
+ console.log(e);
83
+ }
84
+ result = false;
85
+ }
86
+
87
+ document.body.removeChild(fakeElement);
88
+
89
+ return result;
90
+ }
91
+
@@ -10,6 +10,7 @@ import {Datepicker} from 'kpc';
10
10
 
11
11
  <div>
12
12
  <Datepicker v-model="date" ref="__demo" />
13
+ <Datepicker v-model="date" flat />
13
14
  <Datepicker disabled value="2018-01-01"/>
14
15
  </div>
15
16
  ```
@@ -31,6 +31,9 @@ sidebar: doc
31
31
  | type | 组件类型:`"date"` 只选择日期;`"datetime"` 选择日期和时间;`"year"` 选择年份;`"month"` 选择月份 | `"date"` &#124; `"datetime"` &#124; `"year"` &#124; `"month"` | `"date"` |
32
32
  | shortcuts | 指定快捷方式 | `Shortcut[]` | `undefined` |
33
33
  | show | 是否展示菜单项 | `boolean` | `false` |
34
+ | position | 菜单弹出的位置,默认与触发器左侧对齐向下偏移`8px`的地方 | `Position` &#124; `"left"` &#124; `"bottom"` &#124; `"right"` &#124; `"top"` | `{my: 'left top+8', 'left bottom'}` |
35
+ | flat | 是否展示扁平样式 | `boolean` | `false` |
36
+ | draggable | 多选值是否支持拖动排序 | `boolean` | `false` |
34
37
 
35
38
  ```ts
36
39
  import {Dayjs} from 'dayjs';
@@ -41,6 +44,16 @@ export type Shortcut = {
41
44
  label: (() => string | VNode) | string | VNode
42
45
  value: () => Value | [Value, Value]
43
46
  }
47
+
48
+ type Position = {
49
+ my?: string | [string, string]
50
+ at?: string | [string, string]
51
+ collision?: Collision | [Collision, Collision]
52
+ collisionDirection?: ['left'] | ['top'] | ['left', 'top']
53
+ }
54
+
55
+ type Collision = 'fit' | 'flip' | 'flipfit' | 'none'
56
+
44
57
  export type Container = string | ((parentDom: Element, anchor: Node | null) => Element)
45
58
  ```
46
59
 
@@ -115,7 +115,7 @@ describe('Datepicker', () => {
115
115
  input.click();
116
116
  await wait();
117
117
  content = getElement('.k-datepicker-content')!;
118
- const [yearDom, monthDom] = Array.from(content.querySelectorAll('.k-month-value'));
118
+ const [yearDom, monthDom] = Array.from(content.querySelectorAll<HTMLElement>('.k-month-value'));
119
119
  yearDom.click();
120
120
  await wait();
121
121
  (content.querySelector('.k-today') as HTMLElement).click();
@@ -282,7 +282,7 @@ describe('Datepicker', () => {
282
282
 
283
283
  await wait();
284
284
  // remove specified item
285
- const close = element.querySelector('.k-select-close') as HTMLElement;
285
+ const close = element.querySelector('.k-tag-close') as HTMLElement;
286
286
  close.click();
287
287
  expect(instance.get('date')).have.lengthOf(0);
288
288
 
@@ -42,7 +42,7 @@ const generatePanel = (flag) => {
42
42
  timeString = valueString[1];
43
43
  }
44
44
  return (
45
- <Tabs type="border-card"
45
+ <Tabs type="card"
46
46
  value={panel.value}
47
47
  ev-$change:value={panel.set}
48
48
  >
@@ -87,7 +87,7 @@ const generatePanel = (flag) => {
87
87
  <div class="k-datepicker-wrapper">
88
88
  <div class="k-datepicker-calendars">
89
89
  {generatePanel(PanelFlags.Start)}
90
- {range ? generatePanel(PanelFlags.End) : null}
90
+ {range ? generatePanel(PanelFlags.End) : null}
91
91
  </div>
92
92
  <div v-if={type === 'datetime'} class="k-datepicker-footer">
93
93
  <Button type="primary" size="small"
@@ -149,20 +149,22 @@ export function makeCalendarStyles() {
149
149
  align-items: center;
150
150
  cursor: pointer;
151
151
  position: relative;
152
- border-radius: ${datepicker.item.borderRadius};
153
- &.k-hover {
152
+ .k-value {
153
+ border-radius: ${datepicker.item.borderRadius};
154
+ }
155
+ &.k-hover .k-value {
154
156
  background: ${datepicker.item.hoverBgColor};
155
157
  }
156
158
  &.k-exceed {
157
159
  color: ${datepicker.item.exceedColor};
158
160
  }
159
- &.k-today {
161
+ &.k-today .k-value {
160
162
  border: ${datepicker.item.todayBorder};
161
163
  }
162
164
  &.k-active {
163
165
  background: ${datepicker.item.active.bgColor};
164
166
  color: ${datepicker.item.active.color};
165
- &.k-today {
167
+ &.k-today .k-value {
166
168
  border-color: ${datepicker.item.active.todayBorderColor};
167
169
  }
168
170
  }
@@ -185,6 +187,10 @@ export function makeCalendarStyles() {
185
187
  }
186
188
  .k-value {
187
189
  flex: 1;
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ height: 100%;
188
194
  }
189
195
  }
190
196
  .k-days {
@@ -19,12 +19,16 @@ const classNameObj = {
19
19
  <b:header />
20
20
  <b:body>
21
21
  <div class="k-dialog-tip-icon">
22
- <Icon class={iconClassName || {
23
- "ion-ios-checkmark": type === 'success',
24
- "ion-ios-information": type === 'warning',
25
- "ion-ios-close": type === 'error',
26
- "ion-ios-help": type === 'confirm',
27
- }} v-if={!hideIcon && !icon} />
22
+ <Icon
23
+ v-if={!hideIcon && !icon}
24
+ class={iconClassName || {
25
+ "k-icon-success-fill": type === 'success',
26
+ "k-icon-warning-fill": type === 'warning',
27
+ "k-icon-error-fill": type === 'error',
28
+ "k-icon-question-fill": type === 'confirm',
29
+ }}
30
+ color={type === 'error' ? 'danger' : type === 'confirm' ? 'primary' : type}
31
+ />
28
32
  {icon}
29
33
  </div>
30
34
  <div class="k-alert-dialog-wrapper">
@@ -87,7 +87,7 @@ describe('Dialog', () => {
87
87
  }
88
88
 
89
89
  const [instance] = mount(Demo);
90
- expect(getElement('.k-dialog-footer')!.innerText).to.eql('dialog footer 确定取消');
90
+ expect(getElement('.k-dialog-footer')!.innerText).to.eql('dialog footer 取消确定');
91
91
  });
92
92
 
93
93
  it('basic test', async () => {
@@ -114,7 +114,7 @@ describe('Dialog', () => {
114
114
  dispatchEvent(document, 'keydown', {keyCode: 27});
115
115
  expect(instance.get('show')).be.false;
116
116
  await wait(500);
117
- expect(document.body.getAttribute('style')).to.be.null;
117
+ expect(!!document.body.getAttribute('style')).to.be.false;
118
118
  });
119
119
 
120
120
  it('methods test', async () => {
@@ -156,7 +156,7 @@ describe('Dialog', () => {
156
156
  unmount();
157
157
  }
158
158
  await wait(500);
159
- expect(document.body.getAttribute('style')).to.be.null;
159
+ expect(!!document.body.getAttribute('style')).to.be.false;
160
160
  });
161
161
 
162
162
  it('async close', async () => {
@@ -193,7 +193,7 @@ describe('Dialog', () => {
193
193
  Dialog.success({content: 'test'}).then(cb);
194
194
  await wait();
195
195
  let dialog = expectDialog();
196
- dialog.querySelector<HTMLElement>('.k-btn')!.click();
196
+ dialog.querySelector<HTMLElement>('.k-dialog-ok')!.click();
197
197
  await wait();
198
198
  expect(cb.callCount).to.eql(1);
199
199
 
@@ -209,7 +209,7 @@ describe('Dialog', () => {
209
209
  Dialog.error({title: 'error', content: 'test'});
210
210
  await wait();
211
211
  dialog = expectDialog();
212
- dialog.querySelector<HTMLElement>('.k-btn')!.click();
212
+ dialog.querySelector<HTMLElement>('.k-dialog-ok')!.click();
213
213
 
214
214
  const cb2 = sinon.spy();
215
215
  Dialog.confirm({content: 'test', closable: false}).then(() => {}, cb2);
@@ -218,7 +218,7 @@ describe('Dialog', () => {
218
218
  overlay.click();
219
219
  await wait();
220
220
  expect(cb2.callCount).to.eql(0);
221
- getElement('.k-dialog')!.querySelector<HTMLElement>('.k-btn')!.click();
221
+ getElement('.k-dialog')!.querySelector<HTMLElement>('.k-dialog-ok')!.click();
222
222
  });
223
223
 
224
224
  it('should double check for closing dialog', async () => {
@@ -19,7 +19,7 @@ import {Dropdown, DropdownMenu, DropdownItem, Button, Tooltip} from 'kpc';
19
19
  <Tooltip content="disabled">
20
20
  <DropdownItem disabled>item 3</DropdownItem>
21
21
  </Tooltip>
22
- <Dropdown position={{my: 'left top', at: 'right top'}}>
22
+ <Dropdown position={{my: 'left top', at: 'right top'}} trigger="click">
23
23
  <Tooltip content="This is a nested Dropdown.">
24
24
  <DropdownItem>item 4</DropdownItem>
25
25
  </Tooltip>
@@ -11,7 +11,7 @@ import {
11
11
  createVNode,
12
12
  nextTick,
13
13
  } from 'intact';
14
- import {bind, isTextChildren} from '../utils';
14
+ import {bind, isTextChildren, getRestProps} from '../utils';
15
15
  import {EMPTY_OBJ, isFunction, noop} from 'intact-shared';
16
16
  import {Options, position, Feedback} from '../position';
17
17
  import {cx} from '@emotion/css';
@@ -21,6 +21,7 @@ import {Portal, PortalProps} from '../portal';
21
21
  import {useShowHideEvents} from '../../hooks/useShowHideEvents';
22
22
  import {usePosition, FeedbackCallback} from './usePosition';
23
23
  import type {Events} from '../types';
24
+ import { Virtual } from '../virtual';
24
25
 
25
26
  export type Position = Options
26
27
  export type PositionShorthand = 'left' | 'bottom' | 'right' | 'top'
@@ -35,6 +36,7 @@ export interface DropdownProps {
35
36
  disabled?: boolean
36
37
  value?: boolean
37
38
  position?: Position | 'left' | 'bottom' | 'right' | 'top'
39
+ collison?: Position['collision']
38
40
  of?: 'self' | 'parent' | Event
39
41
  container?: PortalProps['container']
40
42
  }
@@ -45,6 +47,8 @@ export interface DropdownEvents {
45
47
  hide: []
46
48
  mouseenter: [MouseEvent]
47
49
  mouseleave: [MouseEvent]
50
+ click: [MouseEvent]
51
+ contextmenu: [MouseEvent]
48
52
  positioned: [Feedback]
49
53
  }
50
54
 
@@ -58,11 +62,11 @@ const typeDefs: Required<TypeDefs<DropdownProps>> = {
58
62
  // Event is undefined in NodeJs
59
63
  of: ['self', 'parent', typeof Event === 'undefined' ? undefined : Event],
60
64
  container: [String, Function],
65
+ collison: ['none', 'fit', 'flip', 'flipfit', Array],
61
66
  };
62
67
 
63
68
  const defaults = (): Partial<DropdownProps> => ({
64
69
  trigger: 'hover',
65
- position: {},
66
70
  of: 'self',
67
71
  });
68
72
 
@@ -72,6 +76,8 @@ const events: Events<DropdownEvents> = {
72
76
  hide: true,
73
77
  mouseenter: true,
74
78
  mouseleave: true,
79
+ click: true,
80
+ contextmenu: true,
75
81
  positioned: true,
76
82
  };
77
83
 
@@ -105,31 +111,18 @@ export class Dropdown<
105
111
  }
106
112
 
107
113
  const [trigger, menu] = children as DropdownChildren;
108
- const triggerType = this.get('trigger');
109
- const props = this.initEventCallbacks(triggerType);
110
-
111
- const clonedTrigger = isTextChildren(trigger) ?
112
- createVNode('span', null, trigger) :
113
- directClone(trigger);
114
- const triggerProps = this.triggerProps = this.normalizeTriggerProps(trigger.props || EMPTY_OBJ);
115
- // add a className for opening status
116
- let className = trigger.className || triggerProps.className;
114
+ const props = this.initEventCallbacks();
115
+ let {className, value, container} = this.get();
117
116
  className = cx({
118
- [className]: className,
119
- 'k-dropdown-open': this.get('value'),
117
+ 'k-dropdown-open': value,
118
+ [className!]: !!className,
120
119
  });
121
-
122
- clonedTrigger.props = {...triggerProps, ...props, className};
123
- clonedTrigger.className = className;
124
-
120
+
125
121
  this.menuVNode = menu;
126
122
 
127
123
  return [
128
- clonedTrigger,
129
- // wrap the root dropdown menu to Portal to render into body
130
- this.alwaysPortal || !this.rootDropdown ?
131
- h(Portal, {children: menu, container: this.get('container')}) :
132
- menu
124
+ h(Virtual, {...props, ...getRestProps(this), className}, trigger),
125
+ h(Portal, {children: menu, container})
133
126
  ];
134
127
  };
135
128
 
@@ -139,10 +132,7 @@ export class Dropdown<
139
132
  public showedDropdown: Dropdown | null = null;
140
133
  public positionHook = usePosition();
141
134
 
142
- protected alwaysPortal = false;
143
-
144
- private timer: number | undefined = undefined;
145
- private triggerProps: any = null;
135
+ protected timer: number | undefined = undefined;
146
136
 
147
137
  init() {
148
138
  provide(DROPDOWN, this);
@@ -173,6 +163,12 @@ export class Dropdown<
173
163
  clearTimeout(this.timer);
174
164
  this.set('value', true);
175
165
 
166
+ // should show parent dropdown
167
+ const parentDropdown = this.dropdown;
168
+ if (parentDropdown) {
169
+ parentDropdown.show();
170
+ }
171
+
176
172
  if (shouldFocus) {
177
173
  nextTick(() => {
178
174
  this.focusFirst();
@@ -184,9 +180,15 @@ export class Dropdown<
184
180
  if (this.get('disabled')) return;
185
181
  if (!this.get('value')) return;
186
182
 
183
+ const showedDropdown = this.showedDropdown;
184
+ if (showedDropdown) {
185
+ showedDropdown.hide(immediately);
186
+ }
187
+
187
188
  if (immediately) {
188
189
  this.set('value', false);
189
190
  } else {
191
+ clearTimeout(this.timer);
190
192
  this.timer = window.setTimeout(() => {
191
193
  this.set('value', false);
192
194
  }, 200);
@@ -204,29 +206,27 @@ export class Dropdown<
204
206
 
205
207
  @bind
206
208
  private onEnter(e: MouseEvent) {
207
- this.callOriginalCallback(e.type === 'click' ? 'ev-click' : 'ev-mouseenter', e);
208
-
209
209
  this.show();
210
+ this.trigger(e.type as 'mouseenter', e);
210
211
  }
211
212
 
212
213
  @bind
213
214
  private onContextMenu(e: MouseEvent) {
214
- this.callOriginalCallback('ev-contextmenu', e);
215
-
216
215
  e.preventDefault();
217
216
  this.set('of', e);
218
217
  this.show();
218
+ this.trigger('contextmenu', e);
219
219
  }
220
220
 
221
221
  @bind
222
222
  private onLeave(e: MouseEvent) {
223
- this.callOriginalCallback('ev-mouseleave', e);
224
-
225
223
  this.hide();
224
+ this.trigger(e.type as 'mouseleave', e);
226
225
  }
227
226
 
228
- private initEventCallbacks(trigger: DropdownProps['trigger']) {
229
- const props: Record<string, Function> = {};
227
+ private initEventCallbacks() {
228
+ const trigger = this.get('trigger');
229
+ const props: Record<string, Function | string> = {};
230
230
 
231
231
  switch (trigger) {
232
232
  case 'focus':
@@ -247,56 +247,15 @@ export class Dropdown<
247
247
 
248
248
  return props;
249
249
  }
250
-
251
- private callOriginalCallback(name: string, e: MouseEvent) {
252
- const callback = this.triggerProps[name];
253
- const callbackOnDropdown = this.get<Function>(name);
254
- if (isFunction(callback)) callback(e);
255
- if (isFunction(callbackOnDropdown)) callbackOnDropdown(e);
256
- }
257
-
258
- private normalizeTriggerProps(props: any) {
259
- // if use kpc in react or vue, normalize props by Wrapper.props.vnode;
260
- const vnode = props.vnode;
261
- if (!vnode) return props;
262
-
263
- // maybe we render the intact component in react slot property, in this case
264
- // the $isReact is false. so use the vnode $$typeof field as gauge
265
- if (vnode.$$typeof || (this as any).$isVueNext) {
266
- const _props = vnode.props;
267
- if (!_props) return props;
268
-
269
- return {
270
- vnode,
271
- 'ev-click': _props.onClick,
272
- 'ev-mouseenter': _props.onMouseEnter,
273
- 'ev-mouseleave': _props.onMouseLeave,
274
- 'ev-contextmenu': _props.onContextMenu,
275
- className: _props.className || _props.class /* vue-next */,
276
- };
277
- } else if ((this as any).$isVue) {
278
- const data = vnode.data;
279
- const on = data && data.on || EMPTY_OBJ;
280
- const ret: Record<string, any> = {vnode};
281
- ['click', 'mouseenter', 'mouseleave', 'contextmenu'].forEach(event => {
282
- const method = on[event];
283
- if (method) {
284
- ret[`ev-${event}`] = method;
285
- }
286
- });
287
- return ret;
288
- }
289
-
290
- return props;
291
- }
292
250
  }
293
251
 
294
252
  function useDocumentClickForDropdown(dropdown: Dropdown) {
295
253
  const elementRef = () => findDomFromVNode(dropdown.menuVNode!, true) as Element;
296
254
  const [addDocumentClick, removeDocumentClick] = useDocumentClick(elementRef, (e) => {
297
- // case 1: if click an trigger and the trigger type is hover, ignore it
298
- // case 2: if right click on trigger and the trigger type is contextmenu, ignore it
299
- // case 3: if click on trigger and the trigger type is focus, do nothing
255
+ // case 1: if click a trigger and its trigger type is hover, ignore it
256
+ // case 2: if right click on a trigger and its trigger type is contextmenu, ignore it
257
+ // case 3: if click on a trigger and its trigger type is focus, do nothing
258
+ // case 3: if click on sub-dropdown, we should also show the parent dropdown, so ignore it
300
259
  const trigger = dropdown.get('trigger');
301
260
  if (trigger === 'focus') return;
302
261
 
@@ -310,6 +269,8 @@ function useDocumentClickForDropdown(dropdown: Dropdown) {
310
269
  }
311
270
  }
312
271
 
272
+ if (isSubDropdownElement(e.target as Element, dropdown)) return;
273
+
313
274
  dropdown.hide(true);
314
275
  }, true);
315
276
 
@@ -317,6 +278,17 @@ function useDocumentClickForDropdown(dropdown: Dropdown) {
317
278
  dropdown.on('hide', removeDocumentClick);
318
279
  }
319
280
 
281
+ function isSubDropdownElement(elem: Element, dropdown: Dropdown): boolean {
282
+ const showedDropdown = dropdown.showedDropdown;
283
+ if (!showedDropdown) return false;
284
+
285
+ const subMenuElement = findDomFromVNode(showedDropdown.menuVNode!, true) as Element;
286
+ if (containsOrEqual(subMenuElement, elem)) {
287
+ return true;
288
+ }
289
+ return isSubDropdownElement(elem, showedDropdown);
290
+ }
291
+
320
292
  function useHideLastMenuOnShow(dropdown: Dropdown) {
321
293
  const parentDropdown = dropdown.dropdown;
322
294
  dropdown.on('show', () => {