@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,72 @@
1
+ ---
2
+ title: 标签组
3
+ order: 4
4
+ ---
5
+
6
+ 使用`Tags`包裹`Tag`可以展示标签组,给`Tags`指定`nowrap`可以让标签自适应仅展示成一行,超出的部分会隐藏,
7
+ 同时会展示隐藏的数量
8
+
9
+ ```vdt
10
+ import {Tags, Tag, Split, Tooltip} from 'kpc';
11
+
12
+ <Split style="width: 600px; background: #e1e1e1;">
13
+ <b:first>
14
+ <Tags>
15
+ <Tag v-for={this.get('tags1')}
16
+ key={$value}
17
+ type={$value}
18
+ closable
19
+ ev-close={(e) => this.remove('tags1', $value, e)}
20
+ >{$value}</Tag>
21
+ </Tags>
22
+ </b:first>
23
+ <b:last>
24
+ <Tags nowrap>
25
+ <Tag v-for={this.get('tags2')}
26
+ key={$value}
27
+ type={$value}
28
+ closable
29
+ ev-close={(e) => this.remove('tags2', $value, e)}
30
+ >{$value}</Tag>
31
+ <Tooltip content="test" key="test">
32
+ <Tag>with tooltip</Tag>
33
+ </Tooltip>
34
+ </Tags>
35
+ </b:last>
36
+ </Split>
37
+ ```
38
+
39
+ ```ts
40
+ import {TagProps} from 'kpc';
41
+
42
+ interface Props {
43
+ tags1: Required<TagProps>['type'][]
44
+ tags2: Required<TagProps>['type'][]
45
+ }
46
+
47
+ export default class extends Component<Props> {
48
+ static template = template;
49
+ static defaults() {
50
+ return {
51
+ tags1: ['default', 'primary', 'success', 'warning', 'danger'],
52
+ tags2: ['default', 'primary', 'success', 'warning', 'danger'],
53
+ } as Props;
54
+ }
55
+
56
+ remove(name: keyof Props, type: Required<TagProps>['type'], e: MouseEvent) {
57
+ e.preventDefault();
58
+
59
+ const tags = this.get(name).filter((tag) => tag !== type);
60
+ this.set(name, tags);
61
+ }
62
+ }
63
+ ```
64
+
65
+ ```react-methods
66
+ remove(name: keyof Props, type: Required<TagProps>['type'], e: MouseEvent) {
67
+ e.preventDefault();
68
+
69
+ const tags = this.state[name].filter((tag) => tag !== type);
70
+ this.setState({[name as 'tags1']: tags});
71
+ }
72
+ ```
@@ -7,6 +7,8 @@ sidebar: doc
7
7
 
8
8
  # 属性
9
9
 
10
+ ## Tag
11
+
10
12
  | 属性 | 说明 | 类型 | 默认值 |
11
13
  | --- | --- | --- | --- |
12
14
  | type | 组件类型 | `"default"` &#124; `"primary"` &#124; `"success"` &#124; `"warning"` &#124; `"danger"` | `"default"` |
@@ -16,6 +18,15 @@ sidebar: doc
16
18
  | size | 组件尺寸 | `"large"` &#124; `"default"` &#124; `"small"` &#124; `"mini"` | `"default"` |
17
19
  | border | 定义边框样式 | `"solid"` &#124; `"dashed"` &#124; `"none"` | `"none"` |
18
20
 
21
+ ## Tags
22
+
23
+ | 属性 | 说明 | 类型 | 默认值 |
24
+ | --- | --- | --- | --- |
25
+ | size | 定义“更多”标签尺寸 | `"large"` &#124; `"default"` &#124; `"small"` &#124; `"mini"` | `"default"` |
26
+ | border | 定义“更多”标签边框样式 | `"solid"` &#124; `"dashed"` &#124; `"none"` | `"none"` |
27
+ | nowrap | 是否单行展示标签组,超出的部分会隐藏,仅展示隐藏数量 | `boolean` | `flase` |
28
+ | draggable | 标签是否支持拖动排序 | `boolean` | `false` |
29
+
19
30
  # 事件
20
31
 
21
32
  | 事件名 | 说明 | 参数 |
@@ -1,8 +1,10 @@
1
1
  import ClosableDemo from '~/components/tag/demos/closable';
2
- import {mount, unmount, wait} from '../../test/utils';
2
+ import {mount, unmount, wait, dispatchEvent, getElement} from '../../test/utils';
3
+ import TagsDemo from '~/components/tag/demos/tags';
4
+ import DraggableDemo from '~/components/tag/demos/draggable';
3
5
 
4
6
  describe('Tag', () => {
5
- afterEach(() => unmount());
7
+ // afterEach(() => unmount());
6
8
 
7
9
  it('should not close tag if we has prevented default', async () => {
8
10
  const [instance, element] = mount(ClosableDemo);
@@ -18,4 +20,70 @@ describe('Tag', () => {
18
20
  await wait(500);
19
21
  expect(element.innerHTML).to.matchSnapshot();
20
22
  });
23
+
24
+ it('should hide tags that overflow', async () => {
25
+ const [instance, element] = mount(TagsDemo);
26
+
27
+ const lastPanel = element.querySelector<HTMLDivElement>('.k-split-last')!;
28
+
29
+ await wait(0);
30
+ expect(lastPanel.innerHTML).to.matchSnapshot();
31
+
32
+ // show tooltip
33
+ let more = lastPanel.querySelector<HTMLDivElement>('.k-tags-more')!;
34
+ dispatchEvent(more, 'mouseenter');
35
+ await wait();
36
+ let tooltip = getElement('.k-tags-tooltip')!;
37
+ expect(tooltip.querySelectorAll('.k-tag').length).to.eql(3);
38
+
39
+ // remove one tag
40
+ dispatchEvent(lastPanel.querySelector<HTMLElement>('.k-tag-close')!, 'click');
41
+ await wait(0);
42
+ expect(lastPanel.innerHTML).to.matchSnapshot();
43
+
44
+ // resize
45
+ const tags = lastPanel.querySelector<HTMLDivElement>('.k-tags')!;
46
+ tags.style.width = '200px';
47
+ await wait(200);
48
+ expect(lastPanel.innerHTML).to.matchSnapshot();
49
+
50
+ // show tooltip again (the "more" element will be removed and created again)
51
+ more = lastPanel.querySelector<HTMLDivElement>('.k-tags-more')!;
52
+ dispatchEvent(more, 'mouseenter');
53
+ await wait();
54
+ tooltip = getElement('.k-tags-tooltip')!;
55
+ expect(tooltip.querySelectorAll('.k-tag').length).to.eql(3);
56
+ });
57
+
58
+ it('should support drag tags', async () => {
59
+ const [instance, element] = mount(DraggableDemo);
60
+
61
+ async function test(from: HTMLElement, to: HTMLElement) {
62
+ dispatchEvent(from, 'dragstart');
63
+ await wait();
64
+ dispatchEvent(to, 'dragover');
65
+ await wait(500);
66
+ expect(element.innerHTML).to.matchSnapshot();
67
+ dispatchEvent(from, 'dragend');
68
+ await wait();
69
+ expect(element.innerHTML).to.matchSnapshot();
70
+ }
71
+ const [tag1, tag2, , , , tag6] = element.querySelectorAll<HTMLElement>('.k-tag');
72
+ await test(tag1, tag2);
73
+ await test(tag1, tag6);
74
+
75
+ // with more tooltip
76
+ const [tag11, tag22, , , more] = element.querySelectorAll<HTMLElement>('.k-tags:last-of-type .k-tag');
77
+ await test(tag11, tag22);
78
+ await wait(0);
79
+ dispatchEvent(more, 'mouseenter');
80
+ await wait();
81
+ const dropdown = getElement('.k-tags-tooltip')!;
82
+ const [tag55, tag66] = dropdown.querySelectorAll<HTMLElement>('.k-tag');
83
+ await test(tag55, tag11);
84
+ expect(dropdown.innerText).to.eql('warning\nwith tooltip');
85
+
86
+ // should not drag to other tags
87
+ await test(tag11, tag2);
88
+ });
21
89
  });
@@ -1,5 +1,7 @@
1
1
  import {TagProps, TagEvents, TagBlocks, Tag as BaseTag} from './base';
2
2
 
3
+ export * from './tags';
4
+
3
5
  export type {TagProps, TagEvents, TagBlocks}
4
6
 
5
7
  // export declare class _Tag extends BaseTag<
@@ -23,6 +23,11 @@ const defaults = deepDefaults(
23
23
  close: {
24
24
  fontSize: '20px',
25
25
  gap: '8px',
26
+ /**
27
+ * fix the width to calculate the width for nowrap tags,
28
+ * otherwise the width will be decided by font font-icons loaded
29
+ */
30
+ width: '7px',
26
31
  },
27
32
  disabled: {
28
33
  get color() { return theme.color.disabled },
@@ -32,24 +37,28 @@ const defaults = deepDefaults(
32
37
  large: {
33
38
  padding: `0px 8px`,
34
39
  height: '24px',
40
+ get fontSize() { return theme.large.fontSize },
35
41
  close: {
36
- fontSize: '20px',
37
- gap: '12px',
42
+ fontSize: '22px',
43
+ gap: '6px',
38
44
  }
39
45
  },
40
46
  small: {
41
47
  padding: `0 4px`,
42
48
  height: '16px',
49
+ get fontSize() { return theme.small.fontSize },
43
50
  close: {
44
- fontSize: '12px',
51
+ fontSize: '18px',
45
52
  gap: '4px'
46
53
  }
47
54
  },
48
55
  mini: {
49
56
  padding: `0 2px`,
50
57
  height: '14px',
58
+ // get fontSize() { return theme.mini.fontSize },
59
+ fontSize: '11px',
51
60
  close: {
52
- fontSize: '12px',
61
+ fontSize: '16px',
53
62
  gap: '2px'
54
63
  }
55
64
  },
@@ -57,6 +66,9 @@ const defaults = deepDefaults(
57
66
  get bgColor() { return theme.color.bg },
58
67
  },
59
68
 
69
+ tags: {
70
+ gap: '8px',
71
+ }
60
72
  },
61
73
  types.reduce((memo, type) => {
62
74
  if (type === 'disabled') return memo;
@@ -73,6 +85,8 @@ setDefault(() => {
73
85
  tag = deepDefaults(theme, {tag: defaults}).tag;
74
86
  });
75
87
 
88
+ export { tag };
89
+
76
90
  export function makeStyles() {
77
91
  return css`
78
92
  display: inline-flex;
@@ -85,6 +99,7 @@ export function makeStyles() {
85
99
  .k-tag-close {
86
100
  font-size: ${tag.close.fontSize};
87
101
  margin-left: ${tag.close.gap};
102
+ width: ${tag.close.width};
88
103
  }
89
104
 
90
105
  &.k-none {
@@ -110,6 +125,7 @@ export function makeStyles() {
110
125
  &.k-${s} {
111
126
  padding: ${styles.padding};
112
127
  height: ${styles.height};
128
+ font-size: ${styles.fontSize};
113
129
  .k-tag-close {
114
130
  font-size: ${styles.close.fontSize};
115
131
  margin-left: ${styles.close.gap};
@@ -122,5 +138,38 @@ export function makeStyles() {
122
138
  &.k-dashed {
123
139
  border-style: dashed;
124
140
  }
141
+
142
+ // draggable
143
+ &.k-dragging {
144
+ opacity: 0;
145
+ }
146
+ `;
147
+ }
148
+
149
+ export function makeTagsStyles() {
150
+ return css`
151
+ display: flex;
152
+ flex-wrap: wrap;
153
+ gap: ${defaults.tags.gap};
154
+ position: relative;
155
+ overflow: hidden;
156
+ &.k-nowrap {
157
+ flex-wrap: nowrap;
158
+ }
159
+ .k-tag {
160
+ white-space: nowrap;
161
+ overflow: hidden;
162
+ text-overflow: ellipsis;
163
+ flex-shrink: 0;
164
+ }
165
+ .k-tags-more {
166
+ cursor: default;
167
+ font-family: monospace;
168
+ }
169
+
170
+ // draggable
171
+ .k-tag.k-draggable {
172
+ cursor: move;
173
+ }
125
174
  `;
126
175
  }
@@ -0,0 +1,54 @@
1
+ import { Component, TypeDefs, Key } from 'intact';
2
+ import template from './tags.vdt';
3
+ import { useNowrap } from './useNowrap';
4
+ import { TagProps, typeDefs as tagTypeDefs } from './base';
5
+ import { useChildren } from './useChildren';
6
+ import { useDraggable } from './useDraggable';
7
+ import type {Events} from '../types';
8
+
9
+ export interface TagsProps extends Pick<TagProps, 'size' | 'border'> {
10
+ nowrap?: boolean
11
+ draggable?: boolean
12
+ }
13
+
14
+ export type TagsDragStartParam = {
15
+ key: Key
16
+ from: number
17
+ }
18
+
19
+ export type TagsDragEndParam = TagsDragStartParam & {
20
+ to: number
21
+ }
22
+
23
+ export interface TagsEvents {
24
+ dragstart: [TagsDragStartParam]
25
+ dragend: [TagsDragEndParam]
26
+ }
27
+
28
+ const typeDefs: Required<TypeDefs<TagsProps>> = {
29
+ nowrap: Boolean,
30
+ draggable: Boolean,
31
+ size: tagTypeDefs.size,
32
+ border: tagTypeDefs.border,
33
+ };
34
+
35
+ const defaults = (): Partial<TagsProps> => ({
36
+ size: 'default',
37
+ border: 'none',
38
+ });
39
+
40
+ const events: Events<TagsEvents> = {
41
+ dragstart: true,
42
+ dragend: true,
43
+ };
44
+
45
+ export class Tags extends Component<TagsProps, TagsEvents> {
46
+ static template = template;
47
+ static typeDefs = typeDefs;
48
+ static defaults = defaults;
49
+ static events = events;
50
+
51
+ private children = useChildren();
52
+ private draggable = useDraggable(this.children);
53
+ private nowrap = useNowrap(this.draggable);
54
+ }
@@ -0,0 +1,49 @@
1
+ import { TransitionGroup } from 'intact';
2
+ import { getRestProps } from '../utils';
3
+ import { makeTagsStyles } from './styles';
4
+ import { Tag } from './';
5
+ import { Tooltip } from '../tooltip';
6
+ import { Tags } from './tags';
7
+ import { Virtual } from '../virtual';
8
+
9
+ const { className, nowrap, size, border, draggable } = this.get();
10
+
11
+ const classNameObj = {
12
+ 'k-tags': true,
13
+ 'k-nowrap': nowrap,
14
+ 'k-draggable': draggable,
15
+ [makeTagsStyles()]: true,
16
+ [className]: className,
17
+ }
18
+
19
+ const { containerRef, children, hiddenChildren } = this.nowrap;
20
+ const vNodes = children.value;
21
+
22
+ /**
23
+ * We should always render Tooltip in nowrap mode, otherwise it will be removed while we close one tag.
24
+ * Because we will render all tags to calculate the width
25
+ */
26
+ <div class={classNameObj} {...getRestProps(this)} ref={containerRef}>
27
+ <TransitionGroup name="k-fade" v-if={!nowrap}>
28
+ {vNodes}
29
+ </TransitionGroup>
30
+ <template v-else>{vNodes}</template>
31
+ <Tooltip
32
+ v-if={nowrap}
33
+ key="$tooltip"
34
+ hoverable
35
+ theme="light"
36
+ class="k-tags-tooltip"
37
+ >
38
+ <Tag key="$more"
39
+ class={{"k-tags-more": true, 'c-hidden': !hiddenChildren.value.length}}
40
+ size={size}
41
+ border={border}
42
+ >
43
+ +{hiddenChildren.value.length}
44
+ </Tag>
45
+ <b:content>
46
+ <div class={classNameObj}>{hiddenChildren.value}</div>
47
+ </b:content>
48
+ </Tooltip>
49
+ </div>
@@ -0,0 +1,42 @@
1
+ import { VNode, useInstance } from 'intact';
2
+ import type { Tags } from './tags';
3
+ import { eachChildren, findChildren, isComponentVNode, ValidVNode } from '../utils';
4
+ import { isStringOrNumber } from 'intact-shared';
5
+ import { useState } from '../../hooks/useState';
6
+ import { Tag } from './';
7
+ import { Dropdown } from '../dropdown';
8
+ import { Tooltip } from '../tooltip';
9
+
10
+ export function useChildren() {
11
+ const instance = useInstance() as Tags;
12
+ const children = useState<VNode[]>([]);
13
+
14
+ instance.watch('children', (v) => {
15
+ const vNodes: VNode[] = [];
16
+ eachChildren(v, (vNode) => {
17
+ if (isTagOrContainsTag(vNode)) {
18
+ vNodes.push(vNode);
19
+ }
20
+ })
21
+ children.set(vNodes);
22
+ });
23
+
24
+ return children;
25
+ }
26
+
27
+ function isTagOrContainsTag(vNode: ValidVNode): vNode is VNode {
28
+ if (isStringOrNumber(vNode)) return false;
29
+
30
+ if (isComponentVNode(vNode, Tag)) {
31
+ return true;
32
+ }
33
+
34
+ if (isComponentVNode(vNode, Dropdown) || isComponentVNode(vNode, Tooltip)) {
35
+ return !!findChildren(vNode.props?.children, (vNode) => {
36
+ return isTagOrContainsTag(vNode);
37
+ });
38
+ }
39
+
40
+ return false;
41
+ }
42
+
@@ -0,0 +1,97 @@
1
+ import {
2
+ VNode,
3
+ useInstance,
4
+ findDomFromVNode,
5
+ createVNode as h,
6
+ Key,
7
+ } from 'intact';
8
+ import type { Tags } from './tags';
9
+ import { nextFrame, debounce, swap } from '../utils';
10
+ import { useState, watchState, State } from '../../hooks/useState';
11
+ import { Virtual } from '../virtual';
12
+ import { cx } from '@emotion/css';
13
+
14
+ export function useDraggable(originVNodes: State<VNode[]>) {
15
+ const instance = useInstance() as Tags;
16
+ const children = useState<VNode[]>([]);
17
+ const draggingKey = useState<Key | null>(null);
18
+
19
+ let draggingIndex: number = -1;
20
+ let originIndex: number = -1;
21
+ let lastOverIndex: number = -1; /* let the dragover event only trigger once when tags changed order */
22
+
23
+ watchState(originVNodes, render);
24
+ watchState(draggingKey, render);
25
+
26
+ function render() {
27
+ const { draggable } = instance.get();
28
+ children.set(!draggable ? originVNodes.value : originVNodes.value.map((vNode, index) => {
29
+ const key = vNode.key!;
30
+ return h(Virtual, {
31
+ 'ev-dragstart': () => onStart(key, index),
32
+ 'ev-dragover': (e: MouseEvent) => onOver(e, key, index),
33
+ 'ev-dragend': (e: MouseEvent) => onEnd(e),
34
+ key,
35
+ draggable,
36
+ className: cx({
37
+ 'k-dragging': key === draggingKey.value,
38
+ 'k-draggable': draggable,
39
+ })
40
+ }, vNode);
41
+ }));
42
+
43
+ }
44
+
45
+ function onStart(key: Key, index: number) {
46
+ draggingIndex = originIndex = index;
47
+ nextFrame(() => {
48
+ draggingKey.set(key);
49
+ });
50
+
51
+ instance.trigger('dragstart', {
52
+ key,
53
+ from: index,
54
+ });
55
+ }
56
+
57
+ function onOver(e: MouseEvent, key: Key, index: number) {
58
+ e.preventDefault();
59
+ e.stopPropagation();
60
+
61
+ // Dragging the tag of another tags drag to this tags should be ignored
62
+ if (draggingIndex === -1) return;
63
+
64
+ if (lastOverIndex === index) return;
65
+ lastOverIndex = index;
66
+
67
+ if (index === draggingIndex) return;
68
+
69
+ // if the tag has move transition, you cannot drag over it before transition ended.
70
+ const dom = findDomFromVNode(children.value[index], true) as HTMLElement;
71
+ if (dom.classList.contains('k-fade-move')) return;
72
+
73
+ const vNodes = swap(originVNodes.value, draggingIndex, index);
74
+
75
+ lastOverIndex = draggingIndex;
76
+ draggingIndex = index;
77
+
78
+ originVNodes.set(vNodes);
79
+ }
80
+
81
+ function onEnd(e: MouseEvent) {
82
+ e.preventDefault();
83
+
84
+ instance.trigger('dragend', {
85
+ key: draggingKey.value!,
86
+ from: originIndex,
87
+ to: draggingIndex,
88
+ });
89
+
90
+ draggingKey.set(null);
91
+ lastOverIndex = -1;
92
+ draggingIndex = -1;
93
+ originIndex = -1;
94
+ }
95
+
96
+ return children;
97
+ }
@@ -0,0 +1,117 @@
1
+ import {
2
+ NonNullableRefObject,
3
+ VNodeComponentClass,
4
+ VNode,
5
+ useInstance,
6
+ createRef,
7
+ findDomFromVNode,
8
+ onBeforeMount,
9
+ nextTick,
10
+ } from 'intact';
11
+ import type { Tags } from './tags';
12
+ import { useState, State, watchState } from '../../hooks/useState';
13
+ import { tag as tagStyles } from './styles';
14
+ import { getLeft, getRight } from '../../styles/utils';
15
+ import { useReceive } from '../../hooks/useReceive';
16
+ import { useResizeObserver } from '../../hooks/useResizeObserver';
17
+
18
+ export function useNowrap(originVNodes: State<VNode[]>) {
19
+ const instance = useInstance() as Tags;
20
+ const containerRef = createRef<HTMLDivElement>();
21
+ const children = useState<VNode[]>([]);
22
+ const hiddenChildren = useState<VNode[]>([]);
23
+ const estimateMoreElementWidth = useEstimateMoreElementWidth();
24
+ const offsetMap = useChildrenOffset(originVNodes);
25
+
26
+ watchState(originVNodes, (v) => {
27
+ children.set(v);
28
+ nextTick(refresh);
29
+ });
30
+
31
+ // instance.watch('children', refresh, { presented: true })
32
+ useResizeObserver(containerRef, refresh);
33
+
34
+ function refresh() {
35
+ if (!instance.get('nowrap')) return;
36
+
37
+ const container = containerRef.value!;
38
+ const containerWidth = container.offsetWidth;
39
+ const vNodes: VNode[] = [];
40
+ const _originVNodes = originVNodes.value;
41
+ const length = _originVNodes.length;
42
+
43
+ if (_originVNodes.length > 1) {
44
+ _originVNodes.forEach((vNode, index) => {
45
+ const offset = offsetMap.get(vNode)!;
46
+ // estimate the "more" element's with for performance
47
+ const width = estimateMoreElementWidth(length - index - 1);
48
+
49
+ if (offset + width <= containerWidth) {
50
+ vNodes.push(vNode);
51
+ }
52
+ });
53
+ } else {
54
+ vNodes.push(..._originVNodes);
55
+ }
56
+
57
+ /**
58
+ * refresh function will be called in ResizeObserver,
59
+ * state changed will cause container's width to change,
60
+ * and a error will throw (ResizeObserver loop completed with undelivered notifications)
61
+ * so we call setState in requestAnimationFrame
62
+ */
63
+ requestAnimationFrame(() => {
64
+ hiddenChildren.set(_originVNodes.slice(vNodes.length))
65
+ children.set(vNodes);
66
+ });
67
+ }
68
+
69
+ return { containerRef, children, hiddenChildren }
70
+ }
71
+
72
+ function useChildrenOffset(vNodes: State<VNode[]>) {
73
+ const instance = useInstance() as Tags;
74
+ const map: Map<VNode, number> = new Map();
75
+
76
+ // instance.watch('children', updateMap, { presented: true })
77
+ watchState(vNodes, () => nextTick(updateMap));
78
+
79
+ function updateMap() {
80
+ map.clear();
81
+
82
+ if (!instance.get('nowrap')) return;
83
+
84
+ vNodes.value.forEach((vNode) => {
85
+ const dom = findDomFromVNode(vNode, true);
86
+ if (!dom || dom.nodeType !== 1) return;
87
+
88
+ const { offsetLeft, offsetWidth } = dom as HTMLElement;
89
+
90
+ map.set(vNode, offsetLeft + offsetWidth);
91
+ });
92
+ }
93
+
94
+ return map;
95
+ }
96
+
97
+ function useEstimateMoreElementWidth() {
98
+ const instance = useInstance() as Tags;
99
+ const widthPerChar = 7.2;
100
+ let cacheWidth = 0;
101
+
102
+ onBeforeMount(cache);
103
+ useReceive<Tags>(['size', 'border'], cache, true);
104
+
105
+ function cache() {
106
+ const { size, border } = instance.get();
107
+
108
+ cacheWidth = parseInt(tagStyles.tags.gap) + widthPerChar /* the "+" mark */;
109
+ if (border !== 'none') {
110
+ cacheWidth += 2;
111
+ }
112
+ const padding = size === 'default' ? tagStyles.padding : tagStyles[size!].padding;
113
+ cacheWidth += parseInt(getLeft(padding)) + parseInt(getRight(padding));
114
+ }
115
+
116
+ return (count: number) => Math.round(count.toString().length * widthPerChar + cacheWidth);
117
+ }
@@ -29,12 +29,25 @@ sidebar: doc
29
29
  | min | 最小可选时间 | `Value` | `undefind` |
30
30
  | disabledDate | 该属性值是一个函数,用于定义那些日期被禁止选择,函数参数为日期字符串,返回`true`则表示禁用该日期 | `(v: Dayjs) => boolean` | `undefined` |
31
31
  | step | 固定时间点的步长 | `string` | `undefined` |
32
+ | position | 菜单弹出的位置,默认与触发器左侧对齐向下偏移`8px`的地方 | `Position` &#124; `"left"` &#124; `"bottom"` &#124; `"right"` &#124; `"top"` | `{my: 'left top+8', 'left bottom'}` |
33
+ | flat | 是否展示扁平样式 | `boolean` | `false` |
34
+ | draggable | 多选值是否支持拖动排序 | `boolean` | `false` |
32
35
 
33
36
  ```ts
34
37
  import {Dayjs} from 'dayjs';
35
38
  import {VNode} from 'intact';
36
39
 
37
40
  export type Value = string | Date | number | Dayjs;
41
+
42
+ type Position = {
43
+ my?: string | [string, string]
44
+ at?: string | [string, string]
45
+ collision?: Collision | [Collision, Collision]
46
+ collisionDirection?: ['left'] | ['top'] | ['left', 'top']
47
+ }
48
+
49
+ type Collision = 'fit' | 'flip' | 'flipfit' | 'none'
50
+
38
51
  export type Container = string | ((parentDom: Element, anchor: Node | null) => Element)
39
52
  ```
40
53