@opentiny/vue-docs 2.2.4 → 2.2.6

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 (414) hide show
  1. package/demos/mobile/app/container/basic-usage.vue +105 -0
  2. package/demos/mobile/app/container/custom-width.vue +93 -0
  3. package/demos/mobile/app/container/webdoc/container.cn.md +7 -0
  4. package/demos/mobile/app/container/webdoc/container.en.md +7 -0
  5. package/demos/mobile/app/container/webdoc/container.js +80 -0
  6. package/demos/mobile/app/pull-refresh/animation-duration.vue +58 -12
  7. package/demos/mobile/app/pull-refresh/base.vue +32 -18
  8. package/demos/mobile/app/pull-refresh/disabled-pull-down.vue +66 -0
  9. package/demos/mobile/app/pull-refresh/disabled-pull-up.vue +67 -0
  10. package/demos/mobile/app/pull-refresh/{hasmore.vue → event.vue} +21 -20
  11. package/demos/mobile/app/pull-refresh/{enhance.vue → has-more.vue} +20 -25
  12. package/demos/mobile/app/pull-refresh/loosing-text.vue +55 -12
  13. package/demos/mobile/app/pull-refresh/pull-refresh-slot.vue +64 -15
  14. package/demos/mobile/app/pull-refresh/pull-up-distance.vue +74 -0
  15. package/demos/mobile/app/pull-refresh/pulling-text.vue +56 -12
  16. package/demos/mobile/app/pull-refresh/webdoc/pull-refresh.js +98 -120
  17. package/demos/mobile/app/tabs/before-leave.vue +3 -3
  18. package/demos/mobile/app/tabs/tabs-events.vue +7 -7
  19. package/demos/mobile/menus.js +4 -1
  20. package/demos/mobile-first/app/tabs/basic-usage.vue +3 -3
  21. package/demos/mobile-first/app/tabs/before-leave.vue +3 -3
  22. package/demos/mobile-first/app/tabs/change-title.vue +2 -2
  23. package/demos/mobile-first/app/tabs/custom-tab-content.vue +3 -3
  24. package/demos/mobile-first/app/tabs/custom-tab-title.vue +3 -3
  25. package/demos/mobile-first/app/tabs/position-bottom.vue +10 -10
  26. package/demos/mobile-first/app/tabs/position-left.vue +10 -10
  27. package/demos/mobile-first/app/tabs/position-right.vue +10 -10
  28. package/demos/mobile-first/app/tabs/position.vue +10 -10
  29. package/demos/mobile-first/app/tabs/prevent-tab-switching.vue +3 -3
  30. package/demos/mobile-first/app/tabs/stretch-wh.vue +3 -3
  31. package/demos/mobile-first/app/tabs/tab-style-bordercard.vue +10 -10
  32. package/demos/mobile-first/app/tabs/tab-style-card.vue +10 -10
  33. package/demos/mobile-first/app/tabs/tabdata-title.vue +4 -4
  34. package/demos/mobile-first/app/tabs/tabs-draggable.vue +1 -1
  35. package/demos/mobile-first/app/tabs/tabs-events-add.vue +3 -3
  36. package/demos/mobile-first/app/tabs/tabs-events-click.vue +3 -3
  37. package/demos/mobile-first/app/tabs/tabs-events-close.vue +4 -4
  38. package/demos/mobile-first/app/tabs/tabs-events-edit.vue +4 -4
  39. package/demos/mobile-first/app/tabs/tabs-separator.vue +8 -8
  40. package/demos/mobile-first/app/tabs/tabs-size.vue +3 -3
  41. package/demos/mobile-first/app/tabs/tabs-tabs.vue +2 -2
  42. package/demos/mobile-first/app/tabs/with-add.vue +1 -1
  43. package/demos/pc/app/action-menu/disabled.vue +2 -1
  44. package/demos/pc/app/action-menu/icon-composition-api.vue +73 -0
  45. package/demos/pc/app/action-menu/icon.vue +79 -0
  46. package/demos/pc/app/action-menu/popper-class.spec.ts +2 -1
  47. package/demos/pc/app/action-menu/webdoc/action-menu.js +42 -1
  48. package/demos/pc/app/autocomplete/webdoc/autocomplete.js +30 -16
  49. package/demos/pc/app/breadcrumb/webdoc/breadcrumb.js +3 -3
  50. package/demos/pc/app/button/basic-usage-composition-api.vue +2 -0
  51. package/demos/pc/app/button/basic-usage.vue +2 -0
  52. package/demos/pc/app/button/click-composition-api.vue +1 -1
  53. package/demos/pc/app/button/click.vue +1 -1
  54. package/demos/pc/app/button/dynamic-disabled-composition-api.vue +10 -1
  55. package/demos/pc/app/button/{dynamic-disabled.spec.js → dynamic-disabled.spec.ts} +4 -0
  56. package/demos/pc/app/button/dynamic-disabled.vue +12 -3
  57. package/demos/pc/app/button/ghost-composition-api.vue +26 -0
  58. package/demos/pc/app/button/ghost.spec.ts +69 -0
  59. package/demos/pc/app/button/ghost.vue +32 -0
  60. package/demos/pc/app/button/icon-composition-api.vue +2 -0
  61. package/demos/pc/app/button/icon.vue +2 -0
  62. package/demos/pc/app/button/loading-composition-api.vue +2 -0
  63. package/demos/pc/app/button/loading.vue +2 -0
  64. package/demos/pc/app/button/size-composition-api.vue +2 -0
  65. package/demos/pc/app/button/size.vue +2 -0
  66. package/demos/pc/app/button/text-composition-api.vue +1 -1
  67. package/demos/pc/app/button/text.vue +1 -1
  68. package/demos/pc/app/button/webdoc/button.js +28 -1
  69. package/demos/pc/app/button-group/button-group-multiple-composition-api.vue +9 -9
  70. package/demos/pc/app/button-group/button-group-multiple.vue +9 -9
  71. package/demos/pc/app/button-group/change-event-composition-api.vue +1 -1
  72. package/demos/pc/app/button-group/change-event.vue +1 -1
  73. package/demos/pc/app/button-group/show-edit-composition-api.vue +1 -1
  74. package/demos/pc/app/button-group/show-edit.vue +1 -1
  75. package/demos/pc/app/button-group/webdoc/button-group.js +2 -3
  76. package/demos/pc/app/carousel/webdoc/carousel.js +82 -49
  77. package/demos/pc/app/cascader/auto-load-checkStrictly-composition-api.vue +2 -1
  78. package/demos/pc/app/cascader/auto-load-checkStrictly.vue +2 -1
  79. package/demos/pc/app/cascader/auto-load-composition-api.vue +3 -1
  80. package/demos/pc/app/cascader/auto-load.vue +2 -1
  81. package/demos/pc/app/cascader/events-composition-api.vue +1 -1
  82. package/demos/pc/app/cascader/expand-trigger-composition-api.vue +195 -2
  83. package/demos/pc/app/cascader/show-all-levels-composition-api.vue +197 -2
  84. package/demos/pc/app/cascader/webdoc/cascader.js +27 -13
  85. package/demos/pc/app/cascader-panel/basic-usage-composition-api.vue +3 -1
  86. package/demos/pc/app/cascader-panel/basic-usage.vue +2 -1
  87. package/demos/pc/app/cascader-panel/cascader-panel-props-composition-api.vue +3 -1
  88. package/demos/pc/app/cascader-panel/cascader-panel-props.vue +3 -1
  89. package/demos/pc/app/cascader-panel/change-composition-api.vue +1 -2
  90. package/demos/pc/app/cascader-panel/change.vue +1 -1
  91. package/demos/pc/app/cascader-panel/webdoc/cascader-panel.js +5 -5
  92. package/demos/pc/app/color-picker/webdoc/color-picker.js +36 -18
  93. package/demos/pc/app/color-select-panel/webdoc/color-select-panel.js +32 -19
  94. package/demos/pc/app/config-provider/basic.spec.ts +9 -0
  95. package/demos/pc/app/config-provider/tag.spec.ts +12 -0
  96. package/demos/pc/app/config-provider/text-direct.spec.ts +11 -0
  97. package/demos/pc/app/config-provider/webdoc/config-provider.en.md +7 -0
  98. package/demos/pc/app/config-provider/webdoc/config-provider.js +27 -12
  99. package/demos/pc/app/container/basic-usage.spec.js +47 -2
  100. package/demos/pc/app/container/custom-with-height.spec.js +10 -2
  101. package/demos/pc/app/crop/webdoc/crop.js +53 -49
  102. package/demos/pc/app/dialog-box/webdoc/dialog-box.js +82 -83
  103. package/demos/pc/app/divider/webdoc/divider.js +25 -21
  104. package/demos/pc/app/dropdown/events-composition-api.vue +1 -1
  105. package/demos/pc/app/dropdown/events.spec.ts +1 -0
  106. package/demos/pc/app/dropdown/multi-level-composition-api.vue +4 -8
  107. package/demos/pc/app/dropdown/multi-level.spec.ts +16 -9
  108. package/demos/pc/app/dropdown/multi-level.vue +3 -7
  109. package/demos/pc/app/dropdown/show-icon-composition-api.vue +44 -21
  110. package/demos/pc/app/dropdown/show-icon.vue +42 -12
  111. package/demos/pc/app/dropdown/webdoc/dropdown.js +29 -8
  112. package/demos/pc/app/fall-menu/custom-menuitem.spec.ts +6 -9
  113. package/demos/pc/app/fall-menu/custom-slider-icon.spec.ts +10 -21
  114. package/demos/pc/app/fall-menu/data-resource.spec.ts +6 -9
  115. package/demos/pc/app/file-upload/abort-quest.spec.ts +6 -5
  116. package/demos/pc/app/file-upload/accept-file-image.spec.ts +9 -4
  117. package/demos/pc/app/file-upload/custom-trigger.spec.ts +1 -1
  118. package/demos/pc/app/file-upload/disabled.spec.ts +4 -5
  119. package/demos/pc/app/file-upload/drag-upload.spec.ts +1 -1
  120. package/demos/pc/app/file-upload/file-picture-card.spec.ts +7 -6
  121. package/demos/pc/app/file-upload/form-validation.spec.ts +2 -2
  122. package/demos/pc/app/file-upload/image-size.spec.ts +2 -2
  123. package/demos/pc/app/file-upload/max-file-count.spec.ts +6 -6
  124. package/demos/pc/app/file-upload/paste-upload-composition-api.vue +2 -2
  125. package/demos/pc/app/file-upload/paste-upload.spec.ts +19 -2
  126. package/demos/pc/app/file-upload/picture-card.spec.ts +6 -5
  127. package/demos/pc/app/file-upload/picture-list.spec.ts +2 -3
  128. package/demos/pc/app/file-upload/prevent-delete-file.spec.ts +1 -1
  129. package/demos/pc/app/file-upload/prevent-upload-file.spec.ts +1 -1
  130. package/demos/pc/app/file-upload/upload-events.spec.ts +6 -4
  131. package/demos/pc/app/file-upload/upload-file-list-slot.spec.ts +18 -0
  132. package/demos/pc/app/file-upload/upload-file-list-thumb-composition-api.vue +4 -3
  133. package/demos/pc/app/file-upload/upload-file-list-thumb.spec.ts +2 -2
  134. package/demos/pc/app/file-upload/upload-file-list-thumb.vue +4 -3
  135. package/demos/pc/app/file-upload/upload-file-list.spec.ts +9 -9
  136. package/demos/pc/app/file-upload/upload-limit.spec.ts +5 -8
  137. package/demos/pc/app/file-upload/upload-request.spec.ts +1 -1
  138. package/demos/pc/app/file-upload/upload-user-head.spec.ts +1 -1
  139. package/demos/pc/app/file-upload/webdoc/file-upload.js +4 -4
  140. package/demos/pc/app/file-upload//346/265/213/350/257/225.txt +1 -0
  141. package/demos/pc/app/form/custom-validation-rule-composition-api.vue +2 -14
  142. package/demos/pc/app/form/custom-validation-rule.vue +2 -8
  143. package/demos/pc/app/form/form-validate-field.vue +2 -2
  144. package/demos/pc/app/form/size.spec.ts +26 -6
  145. package/demos/pc/app/grid/custom-style/body-style-composition-api.vue +1 -1
  146. package/demos/pc/app/grid/custom-style/footer-style-composition-api.vue +64 -19
  147. package/demos/pc/app/grid/drag/row-drag-ctrl-composition-api.vue +4 -4
  148. package/demos/pc/app/grid/edit/trigger-mode-hm-editing-composition-api.vue +2 -2
  149. package/demos/pc/app/grid/edit/trigger-mode-hm-editing.vue +1 -1
  150. package/demos/pc/app/grid/event/cell-mouse-event-composition-api.vue +1 -1
  151. package/demos/pc/app/grid/event/context-menu-event-composition-api.vue +1 -0
  152. package/demos/pc/app/grid/event/edit-event-composition-api.vue +1 -1
  153. package/demos/pc/app/grid/expand/set-row-expansion-composition-api.vue +9 -4
  154. package/demos/pc/app/grid/loading/{grid-loading-off-tip-composition-api.vue → grid-custom-loading-composition-api.vue} +29 -4
  155. package/demos/pc/app/grid/loading/grid-custom-loading.spec.js +7 -0
  156. package/demos/pc/app/grid/loading/{grid-loading-off-tip.vue → grid-custom-loading.vue} +27 -1
  157. package/demos/pc/app/grid/operation-column/clear-and-set-radio-row-composition-api.vue +5 -1
  158. package/demos/pc/app/grid/operation-column/selection-operation-composition-api.vue +32 -0
  159. package/demos/pc/app/grid/size/grid-size-composition-api.vue +17 -0
  160. package/demos/pc/app/grid/slot/editor-slot-composition-api.vue +13 -7
  161. package/demos/pc/app/grid/sort/combinations-sort-composition-api.vue +3 -3
  162. package/demos/pc/app/grid/sort/combinations-sort.spec.js +3 -0
  163. package/demos/pc/app/grid/sort/combinations-sort.vue +3 -3
  164. package/demos/pc/app/grid/toolbar/insert-remove-rows-composition-api.vue +1 -1
  165. package/demos/pc/app/grid/toolbar/insert-remove-rows.vue +1 -1
  166. package/demos/pc/app/grid/toolbar/refresh-grid-composition-api.vue +105 -0
  167. package/demos/pc/app/grid/tree-table/set-tree-expansion-composition-api.vue +4 -4
  168. package/demos/pc/app/grid/validation/before-submit-validation-composition-api.vue +19 -2
  169. package/demos/pc/app/grid/validation/before-submit-validation.spec.js +5 -2
  170. package/demos/pc/app/grid/validation/before-submit-validation.vue +19 -2
  171. package/demos/pc/app/grid/webdoc/grid-loading.js +9 -5
  172. package/demos/pc/app/grid/webdoc/grid-size.js +2 -2
  173. package/demos/pc/app/grid/webdoc/grid-validation.js +1 -1
  174. package/demos/pc/app/grid/webdoc/grid.js +8 -1
  175. package/demos/pc/app/guide/callback-composition-api.vue +2 -2
  176. package/demos/pc/app/guide/callback.vue +2 -2
  177. package/demos/pc/app/guide/highlight-box-composition-api.vue +9 -8
  178. package/demos/pc/app/guide/highlight-box.vue +8 -2
  179. package/demos/pc/app/guide/offset-composition-api.vue +7 -2
  180. package/demos/pc/app/guide/offset.vue +7 -2
  181. package/demos/pc/app/guide/size-composition-api.vue +3 -8
  182. package/demos/pc/app/guide/size.vue +3 -8
  183. package/demos/pc/app/guide/webdoc/guide.js +2 -2
  184. package/demos/pc/app/image/basic-usage.spec.ts +9 -2
  185. package/demos/pc/app/image/events.spec.ts +3 -1
  186. package/demos/pc/app/image/lazy-composition-api.vue +2 -2
  187. package/demos/pc/app/image/lazy.spec.ts +7 -4
  188. package/demos/pc/app/image/lazy.vue +2 -2
  189. package/demos/pc/app/image/preview-in-dialog.spec.ts +15 -1
  190. package/demos/pc/app/image/preview.spec.ts +28 -13
  191. package/demos/pc/app/image/slot.spec.ts +3 -0
  192. package/demos/pc/app/input/webdoc/input.js +11 -11
  193. package/demos/pc/app/link/basic-usage-composition-api.vue +1 -1
  194. package/demos/pc/app/link/basic-usage.spec.ts +1 -1
  195. package/demos/pc/app/link/basic-usage.vue +1 -1
  196. package/demos/pc/app/link/config-href.spec.ts +2 -2
  197. package/demos/pc/app/link/custom-icon.spec.ts +5 -5
  198. package/demos/pc/app/link/dynamic-disable.spec.ts +11 -11
  199. package/demos/pc/app/link/focus-no-underline.spec.ts +3 -3
  200. package/demos/pc/app/link/link-style-composition-api.vue +6 -6
  201. package/demos/pc/app/link/link-style.spec.ts +36 -7
  202. package/demos/pc/app/link/link-style.vue +6 -6
  203. package/demos/pc/app/link/webdoc/link.js +20 -22
  204. package/demos/pc/app/link-menu/webdoc/link-menu.js +22 -22
  205. package/demos/pc/app/milestone/basic-usage-composition-api.vue +6 -6
  206. package/demos/pc/app/milestone/basic-usage.spec.ts +1 -1
  207. package/demos/pc/app/milestone/basic-usage.vue +6 -6
  208. package/demos/pc/app/milestone/line-style-composition-api.vue +6 -6
  209. package/demos/pc/app/milestone/line-style.vue +6 -6
  210. package/demos/pc/app/milestone/show-number-composition-api.vue +9 -7
  211. package/demos/pc/app/milestone/show-number.spec.ts +7 -7
  212. package/demos/pc/app/milestone/show-number.vue +9 -7
  213. package/demos/pc/app/milestone/solid-style-composition-api.vue +7 -7
  214. package/demos/pc/app/milestone/solid-style.spec.ts +7 -7
  215. package/demos/pc/app/milestone/solid-style.vue +7 -7
  216. package/demos/pc/app/milestone/webdoc/milestone.js +31 -12
  217. package/demos/pc/app/modal/webdoc/modal.js +80 -76
  218. package/demos/pc/app/nav-menu/basic-usage.spec.ts +2 -2
  219. package/demos/pc/app/nav-menu/before-skip-prevent.spec.ts +1 -1
  220. package/demos/pc/app/nav-menu/before-skip.spec.ts +1 -1
  221. package/demos/pc/app/nav-menu/custom-service.spec.ts +1 -2
  222. package/demos/pc/app/nav-menu/overflow.spec.ts +2 -2
  223. package/demos/pc/app/nav-menu/slot-logo.spec.ts +1 -1
  224. package/demos/pc/app/nav-menu/slot-toolbar.spec.ts +2 -2
  225. package/demos/pc/app/numeric/webdoc/numeric.js +33 -32
  226. package/demos/pc/app/search/basic-usage.spec.ts +1 -1
  227. package/demos/pc/app/search/clearable.spec.ts +1 -1
  228. package/demos/pc/app/search/events-composition-api.vue +6 -0
  229. package/demos/pc/app/search/events.spec.ts +9 -6
  230. package/demos/pc/app/search/events.vue +5 -0
  231. package/demos/pc/app/search/webdoc/search.js +14 -4
  232. package/demos/pc/app/slide-bar/webdoc/slide-bar.js +18 -12
  233. package/demos/pc/app/slider/webdoc/slider.js +23 -18
  234. package/demos/pc/app/steps/advanced-steps.spec.ts +3 -2
  235. package/demos/pc/app/steps/click-composition-api.vue +0 -1
  236. package/demos/pc/app/steps/click.spec.ts +1 -12
  237. package/demos/pc/app/steps/custom-steps-item.spec.ts +1 -1
  238. package/demos/pc/app/steps/node-status-composition-api.vue +1 -1
  239. package/demos/pc/app/steps/node-status.spec.ts +1 -1
  240. package/demos/pc/app/steps/node-status.vue +1 -1
  241. package/demos/pc/app/steps/normal-steps-composition-api.vue +1 -1
  242. package/demos/pc/app/steps/normal-steps.spec.ts +2 -2
  243. package/demos/pc/app/steps/normal-steps.vue +1 -1
  244. package/demos/pc/app/steps/only-number-composition-api.vue +1 -1
  245. package/demos/pc/app/steps/only-number.spec.ts +1 -1
  246. package/demos/pc/app/steps/only-number.vue +1 -1
  247. package/demos/pc/app/steps/show-divider-composition-api.vue +1 -1
  248. package/demos/pc/app/steps/show-divider.spec.ts +1 -1
  249. package/demos/pc/app/steps/show-divider.vue +1 -1
  250. package/demos/pc/app/steps/size-composition-api.vue +6 -9
  251. package/demos/pc/app/steps/size.spec.ts +1 -4
  252. package/demos/pc/app/steps/size.vue +4 -4
  253. package/demos/pc/app/steps/slot-active-node-desc-composition-api.vue +3 -1
  254. package/demos/pc/app/steps/slot-active-node-desc.spec.ts +1 -1
  255. package/demos/pc/app/steps/slot-active-node-desc.vue +3 -1
  256. package/demos/pc/app/steps/slot-description-composition-api.vue +6 -6
  257. package/demos/pc/app/steps/slot-description.spec.ts +1 -1
  258. package/demos/pc/app/steps/slot-description.vue +5 -5
  259. package/demos/pc/app/steps/slot-item-composition-api.vue +0 -1
  260. package/demos/pc/app/steps/slot-item.spec.ts +1 -7
  261. package/demos/pc/app/steps/slot-item.vue +0 -1
  262. package/demos/pc/app/steps/space.spec.ts +1 -1
  263. package/demos/pc/app/steps/text-position-composition-api.vue +1 -1
  264. package/demos/pc/app/steps/text-position.spec.ts +1 -4
  265. package/demos/pc/app/steps/text-position.vue +1 -1
  266. package/demos/pc/app/steps/vertical-steps.spec.ts +13 -19
  267. package/demos/pc/app/steps/webdoc/steps.js +18 -17
  268. package/demos/pc/app/tabs/basic-usage-composition-api.vue +4 -4
  269. package/demos/pc/app/tabs/basic-usage.vue +4 -4
  270. package/demos/pc/app/tabs/before-leave-composition-api.vue +3 -3
  271. package/demos/pc/app/tabs/before-leave.vue +3 -3
  272. package/demos/pc/app/tabs/custom-more-icon-composition-api.vue +1 -1
  273. package/demos/pc/app/tabs/custom-more-icon.vue +1 -1
  274. package/demos/pc/app/tabs/custom-tab-content-composition-api.vue +3 -3
  275. package/demos/pc/app/tabs/custom-tab-content.vue +3 -3
  276. package/demos/pc/app/tabs/custom-tab-title-composition-api.vue +3 -3
  277. package/demos/pc/app/tabs/custom-tab-title.vue +3 -3
  278. package/demos/pc/app/tabs/lazy-composition-api.vue +5 -3
  279. package/demos/pc/app/tabs/lazy.vue +5 -3
  280. package/demos/pc/app/tabs/position-composition-api.vue +22 -17
  281. package/demos/pc/app/tabs/position.spec.ts +4 -4
  282. package/demos/pc/app/tabs/position.vue +19 -18
  283. package/demos/pc/app/tabs/prevent-tab-switching-composition-api.vue +3 -3
  284. package/demos/pc/app/tabs/prevent-tab-switching.vue +3 -3
  285. package/demos/pc/app/tabs/stretch-wh-composition-api.vue +3 -3
  286. package/demos/pc/app/tabs/stretch-wh.vue +3 -3
  287. package/demos/pc/app/tabs/tab-style-bordercard-composition-api.vue +10 -10
  288. package/demos/pc/app/tabs/tab-style-bordercard.vue +10 -10
  289. package/demos/pc/app/tabs/tab-style-card-composition-api.vue +1 -1
  290. package/demos/pc/app/tabs/tab-style-card.vue +1 -1
  291. package/demos/pc/app/tabs/tabs-draggable-composition-api.vue +1 -1
  292. package/demos/pc/app/tabs/tabs-draggable.spec.ts +1 -7
  293. package/demos/pc/app/tabs/tabs-draggable.vue +1 -1
  294. package/demos/pc/app/tabs/tabs-events-click-composition-api.vue +3 -3
  295. package/demos/pc/app/tabs/tabs-events-click.vue +3 -3
  296. package/demos/pc/app/tabs/tabs-events-close-composition-api.vue +4 -4
  297. package/demos/pc/app/tabs/tabs-events-close.vue +4 -4
  298. package/demos/pc/app/tabs/tabs-events-edit-composition-api.vue +4 -4
  299. package/demos/pc/app/tabs/tabs-events-edit.vue +4 -4
  300. package/demos/pc/app/tabs/tabs-separator-composition-api.vue +7 -7
  301. package/demos/pc/app/tabs/tabs-separator.vue +7 -7
  302. package/demos/pc/app/tabs/tabs-size-composition-api.vue +3 -3
  303. package/demos/pc/app/tabs/tabs-size.vue +3 -3
  304. package/demos/pc/app/tabs/tooltip-composition-api.vue +17 -13
  305. package/demos/pc/app/tabs/tooltip.vue +17 -13
  306. package/demos/pc/app/tabs/webdoc/tabs.js +35 -35
  307. package/demos/pc/app/tabs/with-add-composition-api.vue +1 -1
  308. package/demos/pc/app/tabs/with-add.vue +1 -1
  309. package/demos/pc/app/tag/{before-delete-composition-api.vue → delete-composition-api.vue} +6 -16
  310. package/demos/pc/app/tag/delete.spec.ts +19 -0
  311. package/demos/pc/app/tag/{closable.vue → delete.vue} +22 -5
  312. package/demos/pc/app/tag/webdoc/tag.js +15 -7
  313. package/demos/pc/app/time-line/webdoc/time-line.js +12 -12
  314. package/demos/pc/app/toggle-menu/webdoc/toggle-menu.js +64 -55
  315. package/demos/pc/app/tooltip/content.spec.js +1 -1
  316. package/demos/pc/app/tooltip/custom-popper.spec.js +4 -4
  317. package/demos/pc/app/transfer/basic-usage.spec.ts +7 -20
  318. package/demos/pc/app/transfer/custom-btns.spec.ts +11 -19
  319. package/demos/pc/app/transfer/custom-filter.spec.ts +6 -4
  320. package/demos/pc/app/transfer/custom-footer.spec.ts +1 -2
  321. package/demos/pc/app/transfer/custom-render.spec.ts +7 -5
  322. package/demos/pc/app/transfer/custom-titles.spec.ts +5 -3
  323. package/demos/pc/app/transfer/default-checked.spec.ts +5 -9
  324. package/demos/pc/app/transfer/drop-config.spec.ts +21 -16
  325. package/demos/pc/app/transfer/manual-clear-query.spec.ts +2 -2
  326. package/demos/pc/app/transfer/nested-table.spec.ts +12 -35
  327. package/demos/pc/app/transfer/nested-tree.spec.ts +3 -30
  328. package/demos/pc/app/transfer/target-order.spec.ts +2 -1
  329. package/demos/pc/app/transfer/transfer-events.spec.ts +2 -1
  330. package/demos/pc/app/tree/basic-usage.spec.ts +26 -16
  331. package/demos/pc/app/tree/check-op.spec.ts +37 -19
  332. package/demos/pc/app/tree/checkbox.spec.ts +23 -18
  333. package/demos/pc/app/tree/contextmenu.spec.ts +9 -8
  334. package/demos/pc/app/tree/drag.spec.ts +10 -18
  335. package/demos/pc/app/tree/edit.spec.ts +24 -103
  336. package/demos/pc/app/tree/expand-control.spec.ts +22 -18
  337. package/demos/pc/app/tree/filter-view.spec.ts +16 -18
  338. package/demos/pc/app/tree/icons.spec.ts +20 -18
  339. package/demos/pc/app/tree/lazy.spec.ts +10 -18
  340. package/demos/pc/app/tree/node-hl.spec.ts +27 -18
  341. package/demos/pc/app/tree/node-op-composition-api.vue +12 -6
  342. package/demos/pc/app/tree/node-op.spec.ts +32 -19
  343. package/demos/pc/app/tree/other.spec.ts +5 -18
  344. package/demos/pc/app/tree/props.spec.ts +7 -18
  345. package/demos/pc/app/tree/radio.spec.ts +10 -18
  346. package/demos/pc/app/tree/slot.spec.ts +12 -18
  347. package/demos/pc/app/tree/webdoc/tree.js +2 -2
  348. package/demos/pc/app/tree-menu/accordion.spec.ts +3 -1
  349. package/demos/pc/app/tree-menu/basic-usage.spec.ts +4 -2
  350. package/demos/pc/app/tree-menu/current-node-composition-api.vue +7 -3
  351. package/demos/pc/app/tree-menu/current-node.spec.ts +20 -13
  352. package/demos/pc/app/tree-menu/current-node.vue +8 -6
  353. package/demos/pc/app/tree-menu/custom-icon.spec.ts +12 -2
  354. package/demos/pc/app/tree-menu/data-resource.spec.ts +33 -21
  355. package/demos/pc/app/tree-menu/default-expand-all.spec.ts +25 -8
  356. package/demos/pc/app/tree-menu/default-expanded-keys-highlight.spec.ts +6 -4
  357. package/demos/pc/app/tree-menu/default-expanded-keys.spec.ts +11 -7
  358. package/demos/pc/app/tree-menu/draggable.spec.ts +11 -4
  359. package/demos/pc/app/tree-menu/empty-text.spec.ts +1 -1
  360. package/demos/pc/app/tree-menu/event-allow-draggable.spec.ts +4 -1
  361. package/demos/pc/app/tree-menu/events.spec.ts +56 -28
  362. package/demos/pc/app/tree-menu/expand-on-click-node.spec.ts +32 -3
  363. package/demos/pc/app/tree-menu/filter-node-method.spec.ts +9 -6
  364. package/demos/pc/app/tree-menu/filter-node-method.vue +0 -4
  365. package/demos/pc/app/tree-menu/indent.spec.ts +9 -4
  366. package/demos/pc/app/tree-menu/lazy-load.spec.ts +8 -4
  367. package/demos/pc/app/tree-menu/menu-collapsible.spec.ts +5 -2
  368. package/demos/pc/app/tree-menu/show-checkbox.spec.ts +79 -41
  369. package/demos/pc/app/tree-menu/text-ellipsis.spec.ts +7 -4
  370. package/demos/pc/app/tree-menu/tree-menu-slot.spec.ts +4 -3
  371. package/demos/pc/app/tree-menu/webdoc/tree-menu.cn.md +1 -1
  372. package/demos/pc/app/tree-menu/webdoc/tree-menu.en.md +1 -1
  373. package/demos/pc/app/tree-menu/webdoc/tree-menu.js +3 -3
  374. package/demos/pc/app/user-contact/webdoc/user-contact.js +21 -13
  375. package/demos/pc/app/user-head/icon-user-head.spec.ts +3 -3
  376. package/demos/pc/app/user-head/image-user-head.spec.ts +2 -2
  377. package/demos/pc/app/user-head/webdoc/user-head.js +44 -28
  378. package/demos/pc/webdoc/changelog.md +1 -0
  379. package/demos/pc/webdoc/import-components.md +2 -4
  380. package/demos/pc/webdoc/theme-en.md +8 -4
  381. package/demos/pc/webdoc/theme.md +10 -3
  382. package/package.json +6 -6
  383. package/src/App.vue +0 -2
  384. package/src/i18n/index.js +3 -3
  385. package/src/main.js +2 -7
  386. package/src/menus.jsx +1 -1
  387. package/src/tools/useApiMode.js +2 -2
  388. package/src/tools/useBulletin.jsx +2 -2
  389. package/src/tools/utils.js +2 -2
  390. package/src/views/components/VersionTip.vue +14 -8
  391. package/src/views/components/components.vue +48 -47
  392. package/src/views/components/demo.vue +11 -11
  393. package/src/views/docs/docs.vue +2 -3
  394. package/src/views/layout/layout.vue +17 -19
  395. package/src/views/overview.vue +16 -13
  396. package/vite.config.ts +10 -4
  397. package/demos/mobile/app/pull-refresh/disabled.vue +0 -57
  398. package/demos/mobile/app/pull-refresh/head-height.vue +0 -31
  399. package/demos/mobile/app/pull-refresh/result-text.vue +0 -46
  400. package/demos/mobile/app/pull-refresh/success-duration.vue +0 -31
  401. package/demos/mobile/app/pull-refresh/success-text.vue +0 -27
  402. package/demos/pc/app/grid/loading/grid-loading-off-tip.spec.js +0 -8
  403. package/demos/pc/app/tag/before-delete.vue +0 -64
  404. package/demos/pc/app/tag/closable-composition-api.vue +0 -25
  405. package/demos/pc/app/tag/closable.spec.ts +0 -14
  406. /package/demos/pc/app/button/{autofocus.spec.js → autofocus.spec.ts} +0 -0
  407. /package/demos/pc/app/button/{basic-usage.spec.js → basic-usage.spec.ts} +0 -0
  408. /package/demos/pc/app/button/{click.spec.js → click.spec.ts} +0 -0
  409. /package/demos/pc/app/button/{icon.spec.js → icon.spec.ts} +0 -0
  410. /package/demos/pc/app/button/{image.spec.js → image.spec.ts} +0 -0
  411. /package/demos/pc/app/button/{loading.spec.js → loading.spec.ts} +0 -0
  412. /package/demos/pc/app/button/{reset-time.spec.js → reset-time.spec.ts} +0 -0
  413. /package/demos/pc/app/button/{size.spec.js → size.spec.ts} +0 -0
  414. /package/demos/pc/app/button/{text.spec.js → text.spec.ts} +0 -0
@@ -2,34 +2,46 @@ import { test, expect } from '@playwright/test'
2
2
 
3
3
  test('静态数据', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
- await page.goto('http://localhost:7130/pc/tree-menu/data-resource')
5
+ await page.goto('tree-menu#data-resource')
6
6
 
7
- await page.getByTitle('指南', { exact: true }).click()
8
- await expect(page.getByTitle('后端适配器')).toBeVisible()
9
- await page.getByTitle('后端适配器').click()
10
- await expect(page.getByRole('treeitem', { name: '后端适配器' }).first()).toHaveClass(/is-current/)
11
- await page.getByTitle('指南', { exact: true }).click()
12
- await expect(page.getByTitle('后端适配器')).not.toBeVisible()
7
+ const wrap = page.locator('#data-resource')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu').nth(0)
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+
12
+ await expect(treeNode.filter({ hasText: /^后端适配器$/ })).toBeHidden()
13
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
14
+ await expect(treeNode.filter({ hasText: /^后端适配器$/ })).toBeVisible()
15
+ await treeNode.filter({ hasText: /^后端适配器$/ }).click()
16
+ await expect(treeNode.filter({ hasText: /^后端适配器$/ })).toHaveClass(/is-current/)
17
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
18
+ await expect(treeNode.filter({ hasText: /^后端适配器$/ })).toBeHidden()
13
19
 
14
20
  // 过滤功能
15
- await page.locator('#preview').getByPlaceholder('请输入内容进行筛选').locator('input').fill('添加标签页')
21
+ await treeMenu.locator('.tiny-input__inner').fill('添加标签页')
16
22
  await expect(page.getByTitle('添加标签页')).toBeVisible()
17
- await expect(page.getByTitle('指南', { exact: true })).not.toBeVisible()
18
- await page.locator('#preview').getByPlaceholder('请输入内容进行筛选').locator('input').clear()
19
- await expect(page.getByTitle('指南', { exact: true })).toBeVisible()
23
+ await expect(treeNodeContent.filter({ hasText: /^指南$/ })).toBeHidden()
24
+ await treeMenu.locator('.tiny-input__inner').clear()
25
+ await expect(treeNodeContent.filter({ hasText: /^指南$/ })).toBeVisible()
20
26
  })
21
27
 
22
28
  test('服务端数据', async ({ page }) => {
23
29
  page.on('pageerror', (exception) => expect(exception).toBeNull())
24
- await page.goto('http://localhost:7130/pc/tree-menu/get-menu-data-sync')
30
+ await page.goto('tree-menu#data-resource')
31
+
32
+ const wrap = page.locator('#data-resource')
33
+ const treeMenu = wrap.locator('.tiny-tree-menu').nth(1)
34
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
35
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
25
36
 
26
- await page.getByTitle('指南', { exact: true }).click()
27
- await expect(page.getByTitle('引入组件')).toBeVisible()
28
- await expect(page.getByRole('treeitem', { name: '按需引入' })).not.toBeVisible()
29
- await page.getByTitle('引入组件').click()
30
- await expect(page.getByRole('treeitem', { name: '按需引入' }).first()).toBeVisible()
31
- await page.getByTitle('指南', { exact: true }).click()
32
- await expect(page.getByTitle('按需引入')).not.toBeVisible()
33
- await expect(page.getByTitle('组件', { exact: true })).toBeVisible()
34
- await expect(page.getByTitle('规范')).toBeVisible()
37
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ })).toBeHidden()
38
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
39
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ })).toBeVisible()
40
+ await expect(treeNode.filter({ hasText: /^按需引入$/ })).toBeHidden()
41
+ await treeNodeContent.filter({ hasText: /^引入组件$/ }).click()
42
+ await expect(treeNode.filter({ hasText: /^按需引入$/ })).toBeVisible()
43
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
44
+ await expect(treeNode.filter({ hasText: /^按需引入$/ })).toBeHidden()
45
+ await expect(treeNodeContent.filter({ hasText: /^组件$/ })).toBeVisible()
46
+ await expect(treeNode.filter({ hasText: /^规范$/ })).toBeVisible()
35
47
  })
@@ -4,12 +4,29 @@ test('默认展开全部菜单', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#default-expand-all')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- await expect(treeMenu.getByTitle('首页')).toBeVisible()
9
- await expect(treeMenu.getByTitle('组件').first()).toBeVisible()
10
- await expect(treeMenu.getByTitle('引入组件')).toBeVisible()
11
- await expect(treeMenu.getByRole('link', { name: 'Button 按钮' })).toBeVisible()
12
- await expect(treeMenu.getByTitle('教程')).toBeVisible()
13
- await expect(treeMenu.getByTitle('页面布局')).toBeVisible()
14
- await expect(treeMenu.getByTitle('列表属性配置')).toBeVisible()
7
+ const wrap = page.locator('#default-expand-all')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+
12
+ await expect(treeNode.filter({ hasText: /^指南/ })).toHaveClass(/is-expanded/)
13
+ await expect(treeNode.filter({ hasText: /^引入组件/ })).toHaveClass(/is-expanded/)
14
+ await expect(treeNode.filter({ hasText: /^组件/ })).toHaveClass(/is-expanded/)
15
+ await expect(treeNode.filter({ hasText: /^表单组件/ })).toHaveClass(/is-expanded/)
16
+ await expect(treeNode.filter({ hasText: /^教程/ })).toHaveClass(/is-expanded/)
17
+ await expect(treeNode.filter({ hasText: /^页面布局/ })).toHaveClass(/is-expanded/)
18
+ await expect(treeNode.filter({ hasText: /^查询功能/ })).toHaveClass(/is-expanded/)
19
+ await expect(treeNode.filter({ hasText: /^新增功能/ })).toHaveClass(/is-expanded/)
20
+ await expect(treeNode.filter({ hasText: /^编辑功能/ })).toHaveClass(/is-expanded/)
21
+
22
+ await expect(treeNodeContent.filter({ hasText: /^首页$/ })).toBeVisible()
23
+ await expect(treeNodeContent.filter({ hasText: /^按需引入$/ })).toBeVisible()
24
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ })).toBeVisible()
25
+ await expect(treeNodeContent.filter({ hasText: /^Button 按钮$/ })).toBeVisible()
26
+ await expect(treeNodeContent.filter({ hasText: /^业务组件$/ })).toBeVisible()
27
+ await expect(treeNodeContent.filter({ hasText: /^添加标签页$/ })).toBeVisible()
28
+ await expect(treeNodeContent.filter({ hasText: /^添加查询页面$/ })).toBeVisible()
29
+ await expect(treeNodeContent.filter({ hasText: /^表单新增功能$/ })).toBeVisible()
30
+ await expect(treeNodeContent.filter({ hasText: /^开启编辑功能$/ })).toBeVisible()
31
+ await expect(treeNodeContent.filter({ hasText: /^更新日志$/ })).toBeVisible()
15
32
  })
@@ -4,9 +4,11 @@ test('默认展开某节点', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#default-expanded-keys-highlight')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- const node = treeMenu.locator('.tiny-tree-node').filter({ hasText: '按需引入' }).nth(2)
7
+ const wrap = page.locator('#default-expanded-keys-highlight')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
9
10
 
10
- await page.getByRole('button', { name: 'highlight' }).click()
11
- await expect(node).toHaveClass(/is-current/)
11
+ await expect(treeNode.filter({ hasText: /^Button 按钮$/ })).toHaveClass(/is-current/)
12
+ await wrap.getByRole('button', { name: '设置展开并高亮' }).click()
13
+ await expect(treeNode.filter({ hasText: /^页面布局/ })).toHaveClass(/is-current/)
12
14
  })
@@ -4,15 +4,19 @@ test('默认展开某节点', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#default-expanded-keys')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
7
+ const wrap = page.locator('#default-expanded-keys')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+
8
12
  // 默认展开节点
9
- await expect(treeMenu.getByTitle('数据组件')).toBeVisible()
13
+ await expect(treeNodeContent.filter({ hasText: /^数据组件$/ })).toBeVisible()
10
14
  // 默认展开节点的祖先节点展开
11
- await expect(treeMenu.getByTitle('组件', { exact: true }).first()).toBeVisible()
15
+ await expect(treeNodeContent.filter({ hasText: /^组件/ })).toBeVisible()
12
16
  // 默认展开节点兄弟节点展开
13
- await expect(treeMenu.getByTitle('导航组件')).toBeVisible()
17
+ await expect(treeNodeContent.filter({ hasText: /^导航组件$/ })).toBeVisible()
14
18
  // 默认展开节点的下一层次节点不展开
15
- await expect(treeMenu.getByTitle('Datepicker 日期')).not.toBeVisible()
19
+ await expect(treeNodeContent.filter({ hasText: /^Datepicker 日期$/ })).toBeVisible()
16
20
  // 非默认展开节点子的祖先节点的子节点不展开
17
- await expect(treeMenu.getByTitle('页面布局')).not.toBeVisible()
18
- })
21
+ await expect(treeNodeContent.filter({ hasText: /^页面布局/ })).toBeHidden()
22
+ })
@@ -2,10 +2,15 @@ import { test, expect } from '@playwright/test'
2
2
 
3
3
  test('拖动菜单', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
- await page.goto('tree-menu#can-draggable')
5
+ await page.goto('tree-menu#draggable')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- const node = treeMenu.getByTitle('首页')
7
+ const wrap = page.locator('#draggable')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNodeWrapper = treeMenu.locator('.tiny-tree-node__wrapper')
10
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
11
+ const node = treeNodeWrapper.filter({ hasText: /^首页$/ })
12
+
13
+ await page.waitForTimeout(2000)
9
14
 
10
15
  // 同一层次节点拖拽
11
16
  const { x: x0, y: y0 } = await node.boundingBox()
@@ -15,6 +20,8 @@ test('拖动菜单', async ({ page }) => {
15
20
  await page.mouse.move(x0, y0 + 80)
16
21
  await page.mouse.up()
17
22
 
23
+ await node.hover()
24
+
18
25
  // 判断位置是否变化
19
26
  const { x: x1, y: y1 } = await node.boundingBox()
20
27
  expect(y1).toBeGreaterThan(y0)
@@ -26,7 +33,7 @@ test('拖动菜单', async ({ page }) => {
26
33
  await page.mouse.up()
27
34
 
28
35
  // 判断是否放到兄弟节点内
29
- await treeMenu.getByTitle('指南').click()
36
+ await treeNode.filter({ hasText: /^指南/ }).click()
30
37
  await expect(treeMenu.getByRole('treeitem', { name: '指南' }).getByRole('treeitem', { name: '首页' })).toBeVisible()
31
38
 
32
39
  // 拖拽到父节点同级
@@ -4,6 +4,6 @@ test('自定义空数据文本', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#empty-text')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
7
+ const treeMenu = page.locator('#empty-text .tiny-tree-menu')
8
8
  await expect(treeMenu.locator('.tiny-tree__empty-text')).toHaveText('空数据')
9
9
  })
@@ -4,9 +4,12 @@ test('拖拽菜单回调事件', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#event-allow-draggable')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
7
+ const wrap = page.locator('#event-allow-draggable')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
8
9
  const node = treeMenu.getByTitle('首页')
9
10
 
11
+ await page.waitForTimeout(2000)
12
+
10
13
  const { x: x0, y: y0 } = await node.boundingBox()
11
14
  await page.mouse.move(x0, y0)
12
15
  await page.mouse.down()
@@ -2,61 +2,89 @@ import { test, expect } from '@playwright/test'
2
2
 
3
3
  test('节点被点击事件', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
- await page.goto('tree-menu#event-node-click')
5
+ await page.goto('tree-menu#events')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- await treeMenu.getByTitle('首页', { exact: true }).click()
9
- await expect(page.locator('div').filter({ hasText: '节点-首页被点击了' }).nth(1)).toBeVisible()
7
+ const wrap = page.locator('#events')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const modal = page.locator('.tiny-modal')
11
+
12
+ await treeNode.getByTitle('首页', { exact: true }).click()
13
+ await expect(modal.filter({ hasText: '节点-首页被点击了' })).toBeVisible()
10
14
  await treeMenu.getByTitle('指南', { exact: true }).click()
11
- await expect(page.locator('div').filter({ hasText: '节点-指南被点击了' }).nth(1)).toBeVisible()
15
+ await expect(modal.filter({ hasText: '节点-指南被点击了' })).toBeVisible()
12
16
  await treeMenu.getByTitle('后端适配器', { exact: true }).click()
13
- await expect(page.locator('div').filter({ hasText: '节点-后端适配器被点击了' }).nth(1)).toBeVisible()
17
+ await expect(modal.filter({ hasText: '节点-后端适配器被点击了' })).toBeVisible()
14
18
  })
15
19
 
16
-
17
20
  test('当前选中节点变化事件', async ({ page }) => {
18
21
  page.on('pageerror', (exception) => expect(exception).toBeNull())
19
- await page.goto('tree-menu#event-current-change')
22
+ await page.goto('tree-menu#events')
20
23
 
21
- const treeMenu = page.locator('#preview .tiny-tree-menu')
22
- await treeMenu.getByTitle('指南', { exact: true }).click()
23
- await expect(page.locator('div').filter({ hasText: '选中节点变化为:指南' }).nth(1)).toBeVisible()
24
- await treeMenu.getByTitle('后端适配器', { exact: true }).click()
25
- await expect(page.locator('div').filter({ hasText: '选中节点变化为:后端适配器' }).nth(1)).toBeVisible()
24
+ const wrap = page.locator('#events')
25
+ const treeMenu = wrap.locator('.tiny-tree-menu')
26
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
27
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
28
+ const modal = page.locator('.tiny-modal')
29
+
30
+ await treeNodeContent
31
+ .filter({ hasText: /^指南$/ })
32
+ .locator('.tiny-checkbox')
33
+ .click()
34
+ await expect(modal.filter({ hasText: '选中节点变化为:指南' })).toBeVisible()
35
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
36
+ await treeNodeContent
37
+ .filter({ hasText: /^后端适配器$/ })
38
+ .locator('.tiny-checkbox')
39
+ .click()
40
+ await expect(modal.filter({ hasText: '选中节点变化为:后端适配器' })).toBeVisible()
26
41
  })
27
42
 
28
43
  test('节点被折叠时触发的事件', async ({ page }) => {
29
44
  page.on('pageerror', (exception) => expect(exception).toBeNull())
30
- await page.goto('tree-menu#event-node-collapse')
45
+ await page.goto('tree-menu#events')
31
46
 
32
- const treeMenu = page.locator('#preview .tiny-tree-menu')
33
- await treeMenu.getByTitle('指南', { exact: true }).click()
34
- await treeMenu.getByTitle('指南', { exact: true }).click()
35
- await expect(page.locator('.tiny-modal').filter({ hasText: '节点-指南被关闭了' })).toBeVisible()
36
- })
47
+ const wrap = page.locator('#events')
48
+ const treeMenu = wrap.locator('.tiny-tree-menu')
49
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
50
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
51
+ const modal = page.locator('.tiny-modal')
37
52
 
53
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
54
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
55
+ await expect(modal.filter({ hasText: '节点-指南被关闭了' })).toBeVisible()
56
+ })
38
57
 
39
58
  test('节点被展开时触发的事件', async ({ page }) => {
40
59
  page.on('pageerror', (exception) => expect(exception).toBeNull())
41
- await page.goto('tree-menu#event-node-expand')
60
+ await page.goto('tree-menu#events')
42
61
 
43
- const treeMenu = page.locator('#preview .tiny-tree-menu')
44
- await treeMenu.getByTitle('指南', { exact: true }).click()
45
- await expect(page.locator('.tiny-modal').filter({ hasText: '节点-指南被打开了' })).toBeVisible()
46
- })
62
+ const wrap = page.locator('#events')
63
+ const treeMenu = wrap.locator('.tiny-tree-menu')
64
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
65
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
66
+ const modal = page.locator('.tiny-modal')
47
67
 
68
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
69
+ await expect(modal.filter({ hasText: '节点-指南被打开了' })).toBeVisible()
70
+ })
48
71
 
49
72
  test('节点选中状态发生变化时的回调', async ({ page }) => {
50
73
  page.on('pageerror', (exception) => expect(exception).toBeNull())
51
- await page.goto('tree-menu#event-check-change')
74
+ await page.goto('tree-menu#events')
52
75
 
53
- const checkBox = page.getByRole('treeitem', { name: '首页' }).locator('span').nth(2)
76
+ const wrap = page.locator('#events')
77
+ const treeMenu = wrap.locator('.tiny-tree-menu')
78
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
79
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
80
+ const modal = page.locator('.tiny-modal')
81
+ const checkBox = treeNodeContent.filter({ hasText: /^首页$/ }).locator('.tiny-checkbox')
54
82
 
55
83
  // 选中节点
56
84
  await checkBox.click()
57
- await expect(page.locator('.tiny-modal').filter({ hasText: '节点-首页被选中了' })).toBeVisible()
85
+ await expect(modal.filter({ hasText: '节点-首页被选中了' })).toBeVisible()
58
86
 
59
87
  // 取消选中
60
88
  await checkBox.click()
61
- await expect(page.locator('.tiny-modal').filter({ hasText: '节点-首页被取消了' })).toBeVisible()
89
+ await expect(modal.filter({ hasText: '节点-首页被取消了' })).toBeVisible()
62
90
  })
@@ -4,7 +4,36 @@ test('点击文字展开菜单', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#expand-on-click-node')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- await treeMenu.getByTitle('指南', { exact: true }).click()
9
- await expect(treeMenu.getByTitle('后端适配器')).toBeVisible()
7
+ const wrap = page.locator('#expand-on-click-node')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu').nth(0)
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+
12
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
13
+ await expect(treeNodeContent.filter({ hasText: /^后端适配器$/ })).toBeVisible()
14
+ })
15
+
16
+ test('点击展开按钮才可展开菜单', async ({ page }) => {
17
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
18
+ await page.goto('tree-menu#expand-on-click-node')
19
+
20
+ const wrap = page.locator('#expand-on-click-node')
21
+ const treeMenu = wrap.locator('.tiny-tree-menu').nth(1)
22
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
23
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
24
+
25
+ // 点击非展开按钮位置,只高亮,不展开
26
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
27
+ await expect(treeNodeContent.filter({ hasText: /^后端适配器$/ })).toBeHidden()
28
+ await expect(treeNode.filter({ hasText: /^指南/ })).toHaveClass(/is-current/)
29
+ await expect(treeNode.filter({ hasText: /^指南/ })).not.toHaveClass(/is-expanded/)
30
+
31
+ // 点击展开按钮,才展开
32
+ await treeNodeContent
33
+ .filter({ hasText: /^指南$/ })
34
+ .locator('.tree-node-icon')
35
+ .click()
36
+ await expect(treeNodeContent.filter({ hasText: /^后端适配器$/ })).toBeVisible()
37
+ await expect(treeNode.filter({ hasText: /^指南/ })).toHaveClass(/is-expanded/)
38
+ await expect(treeNode.filter({ hasText: /^指南/ })).toHaveClass(/is-current/)
10
39
  })
@@ -1,12 +1,15 @@
1
1
  import { test, expect } from '@playwright/test'
2
2
 
3
3
  test('搜索规则配置 精确匹配', async ({ page }) => {
4
- page.on('pageerror', (exception) => expect(exception).toBeNull())
5
4
  await page.goto('tree-menu#filter-node-method')
6
5
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- await treeMenu.getByPlaceholder('请输入内容进行筛选').locator('input').fill('组件')
9
- await expect(treeMenu.getByRole('group').getByTitle('组件', { exact: true })).toBeVisible()
10
- await expect(treeMenu.getByTitle('引入组件')).not.toBeVisible()
11
- await expect(treeMenu.getByTitle('表单组件')).not.toBeVisible()
6
+ const wrap = page.locator('#filter-node-method')
7
+ const treeMenu = wrap.locator('.tiny-tree-menu')
8
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
9
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
10
+
11
+ await treeMenu.locator('.tiny-input__inner').fill('组件')
12
+ await expect(treeNodeContent.filter({ hasText: /^组件$/ })).toBeVisible()
13
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ })).not.toBeVisible()
14
+ await expect(treeNodeContent.filter({ hasText: /^表单组件$/ })).not.toBeVisible()
12
15
  })
@@ -37,10 +37,6 @@ export default {
37
37
  id: 300,
38
38
  label: '组件',
39
39
  children: [
40
- {
41
- id: 300,
42
- label: '组件'
43
- },
44
40
  {
45
41
  id: 301,
46
42
  label: '表单组件',
@@ -2,10 +2,15 @@ import { test, expect } from '@playwright/test'
2
2
 
3
3
  test('节点水平缩进', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
- await page.goto('tree-menu#tree-menu-indent')
5
+ await page.goto('tree-menu#indent')
6
+
7
+ const wrap = page.locator('#indent')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+ const node = treeNodeContent.filter({ hasText: /^指南$/ })
12
+ const childNode = treeNodeContent.filter({ hasText: /^引入组件$/ })
6
13
 
7
- const node = page.locator('#preview .tiny-tree-menu').getByText('指南', { exact: true })
8
- const childNode = page.locator('#preview .tiny-tree-menu').getByRole('treeitem', { name: '引入组件' }).first()
9
14
  await node.click()
10
- await expect(childNode.locator('.tiny-tree-node__content')).toHaveCSS('padding-left', '50px')
15
+ await expect(childNode.locator('.tiny-tree-node__content-indent')).toHaveCSS('width', '50px')
11
16
  })
@@ -4,10 +4,14 @@ test('懒加载', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#lazy-load')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- await treeMenu.getByTitle('表单组件', { exact: true }).click()
9
- await expect(treeMenu.getByTitle('表单组件1')).not.toBeVisible()
7
+ const wrap = page.locator('#lazy-load')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+
12
+ await treeNodeContent.filter({ hasText: /^表单组件$/ }).click()
13
+ await expect(treeNodeContent.filter({ hasText: /^表单组件1$/ })).not.toBeVisible()
10
14
  // 等到异步加载完成
11
15
  await page.waitForTimeout(600)
12
- await expect(treeMenu.getByTitle('表单组件1')).toBeVisible()
16
+ await expect(treeNodeContent.filter({ hasText: /^表单组件1$/ })).toBeVisible()
13
17
  })
@@ -4,8 +4,8 @@ test('菜单可折叠', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#menu-collapsible')
6
6
 
7
- const preview = page.locator('#preview')
8
- const treeMenu = preview.locator('.tiny-tree-menu')
7
+ const wrap = page.locator('#menu-collapsible')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu')
9
9
  const toggleBtn = treeMenu.locator('.tiny-tree-menu__toggle-button')
10
10
 
11
11
  await expect(toggleBtn).toBeVisible()
@@ -13,4 +13,7 @@ test('菜单可折叠', async ({ page }) => {
13
13
  await toggleBtn.click()
14
14
  await expect(treeMenu).toHaveClass(/is-collapsed/)
15
15
  await expect(treeMenu).toHaveCSS('width', '0px')
16
+ await toggleBtn.click()
17
+ await expect(treeMenu).not.toHaveClass(/is-collapsed/)
18
+ await expect(treeMenu).toHaveCSS('width', '270px')
16
19
  })
@@ -4,65 +4,103 @@ test('节点可勾选', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('tree-menu#show-checkbox')
6
6
 
7
- const treeMenu = page.locator('#preview .tiny-tree-menu')
8
- const node = treeMenu.getByRole('treeitem', { name: '首页' })
7
+ const wrap = page.locator('#show-checkbox')
8
+ const treeMenu = wrap.locator('.tiny-tree-menu').nth(0)
9
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
10
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
11
+ const node = treeNodeContent.filter({ hasText: /^首页$/ })
9
12
  const selectedClass = /is-checked/
10
- await expect(node.locator('.tiny-tree-node__content .tiny-checkbox')).toBeVisible()
11
- await page.getByRole('treeitem', { name: '首页' }).locator('.tiny-checkbox').click()
12
- await expect(node).toHaveClass(/is-current/)
13
- await expect(node.locator('.tiny-tree-node__content .tiny-checkbox')).toHaveClass(selectedClass)
13
+
14
+ // 可勾选节点显示复选框且默认选中
15
+ await expect(node.locator('.tiny-checkbox')).toBeVisible()
16
+ await expect(treeNode.filter({ hasText: /^首页$/ })).toHaveClass(selectedClass)
17
+ await expect(node.locator('.tiny-checkbox')).toHaveClass(selectedClass)
18
+ await node.click()
19
+ await expect(treeNode.filter({ hasText: /^首页$/ })).toHaveClass(/is-current/)
14
20
 
15
21
  // 父级选中, 子孙节点同时都选中
16
- await page.getByRole('treeitem', { name: '指南', exact: true }).locator('.tiny-checkbox').click()
17
- await treeMenu.getByRole('treeitem', { name: '指南' }).click()
18
- await expect(treeMenu.getByRole('treeitem', { name: '引入组件' }).first().locator('.tiny-checkbox')).toHaveClass(
19
- selectedClass
20
- )
21
- await expect(treeMenu.getByRole('treeitem', { name: '后端适配器' }).first().locator('.tiny-checkbox')).toHaveClass(
22
- selectedClass
23
- )
24
- await treeMenu.getByRole('treeitem', { name: '引入组件' }).first().click()
25
- await expect(
26
- treeMenu.getByRole('treeitem', { name: '按需引入' }).first().locator('.tiny-checkbox').first()
27
- ).toHaveClass(selectedClass)
22
+ await treeNodeContent
23
+ .filter({ hasText: /^指南$/ })
24
+ .locator('.tiny-checkbox')
25
+ .click()
26
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
27
+ await expect(treeNodeContent.filter({ hasText: /^指南$/ }).locator('.tiny-checkbox')).toHaveClass(selectedClass)
28
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ }).locator('.tiny-checkbox')).toHaveClass(selectedClass)
29
+ await expect(treeNodeContent.filter({ hasText: /^后端适配器$/ }).locator('.tiny-checkbox')).toHaveClass(selectedClass)
30
+
31
+ await treeNodeContent.filter({ hasText: /^引入组件$/ }).click()
32
+ await expect(treeNodeContent.filter({ hasText: /^按需引入$/ }).locator('.tiny-checkbox')).toHaveClass(selectedClass)
33
+ await expect(treeNodeContent.filter({ hasText: /^完整引入$/ }).locator('.tiny-checkbox')).toHaveClass(selectedClass)
28
34
 
29
35
  // 子节点取消勾选, 祖先节点改变勾选状态
30
- await treeMenu.getByRole('treeitem', { name: '按需引入' }).first().locator('.tiny-checkbox').first().click()
36
+ await treeNodeContent
37
+ .filter({ hasText: /^完整引入$/ })
38
+ .locator('.tiny-checkbox')
39
+ .click()
40
+ await expect(
41
+ treeNodeContent
42
+ .filter({ hasText: /^引入组件$/ })
43
+ .locator('.tiny-checkbox__input')
44
+ .first()
45
+ ).toHaveClass(/is-indeterminate/)
31
46
  await expect(
32
- treeMenu.getByRole('treeitem', { name: '引入组件' }).first().locator('.tiny-checkbox__input').first()
47
+ treeNodeContent
48
+ .filter({ hasText: /^指南$/ })
49
+ .locator('.tiny-checkbox__input')
50
+ .first()
33
51
  ).toHaveClass(/is-indeterminate/)
34
- await expect(treeMenu.getByRole('treeitem', { name: '指南' }).locator('.tiny-checkbox__input').first()).toHaveClass(
52
+ await treeNodeContent
53
+ .filter({ hasText: /^按需引入$/ })
54
+ .locator('.tiny-checkbox')
55
+ .click()
56
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ }).locator('.tiny-checkbox__input')).not.toHaveClass(
35
57
  /is-indeterminate/
36
58
  )
37
- await treeMenu.getByRole('treeitem', { name: '完整引入' }).first().locator('.tiny-checkbox').first().click()
38
- await expect(
39
- treeMenu.getByRole('treeitem', { name: '引入组件' }).first().locator('.tiny-checkbox__input').first()
40
- ).not.toHaveClass(/is-indeterminate/)
59
+ await expect(treeNode.filter({ hasText: /^引入组件/ })).not.toHaveClass(selectedClass)
60
+ await expect(treeNode.filter({ hasText: /^按需引入$/ })).toHaveClass(/is-current/)
41
61
  })
42
62
 
43
-
44
63
  test('父子级不相关联', async ({ page }) => {
45
64
  page.on('pageerror', (exception) => expect(exception).toBeNull())
46
- await page.goto('tree-menu#check-strictly')
65
+ await page.goto('tree-menu#show-checkbox')
47
66
 
48
- const treeMenu = page.locator('#preview .tiny-tree-menu')
49
- const checkedClass = /is-checked/
67
+ const wrap = page.locator('#show-checkbox')
68
+ const treeMenu = wrap.locator('.tiny-tree-menu').nth(1)
69
+ const treeNode = treeMenu.locator('.tiny-tree-node__wrapper > .tiny-tree-node')
70
+ const treeNodeContent = treeNode.locator('> .tiny-tree-node__content')
50
71
 
51
72
  // 父节点勾选不会改变子节点
52
- await treeMenu.getByRole('treeitem', { name: '指南' }).locator('svg').first().click()
53
- await expect(treeMenu.getByRole('treeitem', { name: '引入组件' }).locator('svg').first()).not.toHaveClass(
54
- checkedClass
73
+ await treeNodeContent
74
+ .filter({ hasText: /^指南$/ })
75
+ .locator('.tiny-checkbox')
76
+ .click()
77
+ await expect(treeNode.filter({ hasText: /^指南/ })).toHaveClass(/is-current is-checked/)
78
+ await treeNodeContent.filter({ hasText: /^指南$/ }).click()
79
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ }).locator('.tiny-checkbox')).not.toHaveClass(
80
+ /is-checked/
55
81
  )
56
- await expect(page.getByRole('treeitem', { name: '构建部署' }).first().locator('span').nth(1)).not.toHaveClass(
57
- checkedClass
82
+ await expect(treeNodeContent.filter({ hasText: /^构建部署$/ }).locator('.tiny-checkbox')).not.toHaveClass(
83
+ /is-checked/
58
84
  )
59
85
 
60
86
  // 子节点勾选不改变父节点
61
- await page.getByRole('treeitem', { name: '引入组件' }).first().click()
62
- await page.getByRole('treeitem', { name: '按需引入' }).locator('span').nth(2).click()
63
- await page.getByRole('treeitem', { name: '完整引入' }).locator('span').nth(2).click()
64
- await expect(page.getByRole('treeitem', { name: '引入组件' }).locator('span').nth(1)).not.toHaveClass(checkedClass)
65
- })
66
-
67
- test('可勾选节点默认选中', async ({ page }) => {
87
+ await treeNodeContent.filter({ hasText: /^引入组件$/ }).click()
88
+ await expect(treeNode.filter({ hasText: /^引入组件/ })).toHaveClass(/is-current is-focusable is-expanded/)
89
+ await expect(treeNode.filter({ hasText: /^引入组件/ })).not.toHaveClass(/is-checked/)
90
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ }).locator('.tiny-checkbox')).not.toHaveClass(
91
+ /is-checked/
92
+ )
93
+ await treeNodeContent
94
+ .filter({ hasText: /^按需引入$/ })
95
+ .locator('.tiny-checkbox')
96
+ .click()
97
+ await treeNodeContent
98
+ .filter({ hasText: /^完整引入$/ })
99
+ .locator('.tiny-checkbox')
100
+ .click()
101
+ await expect(treeNodeContent.filter({ hasText: /^按需引入$/ }).locator('.tiny-checkbox')).toHaveClass(/is-checked/)
102
+ await expect(treeNodeContent.filter({ hasText: /^完整引入$/ }).locator('.tiny-checkbox')).toHaveClass(/is-checked/)
103
+ await expect(treeNodeContent.filter({ hasText: /^引入组件$/ }).locator('.tiny-checkbox')).not.toHaveClass(
104
+ /is-checked/
105
+ )
68
106
  })