@opentiny/vue-docs 3.24.6 → 3.26.0

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 (249) hide show
  1. package/.stylelintrc.js +2 -2
  2. package/demos/apis/button.js +15 -0
  3. package/demos/apis/calendar-view.js +3 -2
  4. package/demos/apis/chart-demo.js +1 -1
  5. package/demos/apis/chart-docs.js +1 -1
  6. package/demos/apis/chart-events.js +1 -1
  7. package/demos/apis/chart-question.js +1 -1
  8. package/demos/apis/chart.js +1 -1
  9. package/demos/apis/form.js +3 -0
  10. package/demos/apis/grid.js +76 -16
  11. package/demos/apis/modal.js +1 -1
  12. package/demos/apis/numeric.js +3 -3
  13. package/demos/apis/search.js +28 -0
  14. package/demos/apis/slider-button.js +22 -0
  15. package/demos/apis/split.js +11 -0
  16. package/demos/apis/steps.js +3 -3
  17. package/demos/apis/tabs.js +12 -0
  18. package/demos/apis/time-line.js +20 -0
  19. package/demos/mobile-first/app/button/type.vue +1 -1
  20. package/demos/mobile-first/app/button/webdoc/button.js +2 -2
  21. package/demos/mobile-first/app/slider-button/basic-usage.vue +5 -5
  22. package/demos/mobile-first/app/slider-button/webdoc/slider-button.js +1 -1
  23. package/demos/mobile-first/app/steps/advanced-steps.vue +8 -1
  24. package/demos/mobile-first/menus.js +16 -9
  25. package/demos/pc/app/action-menu/basic-usage-composition-api.vue +1 -1
  26. package/demos/pc/app/action-menu/basic-usage.vue +1 -1
  27. package/demos/pc/app/action-menu/card-mode-composition-api.vue +1 -1
  28. package/demos/pc/app/action-menu/card-mode.vue +1 -1
  29. package/demos/pc/app/action-menu/disabled-composition-api.vue +2 -2
  30. package/demos/pc/app/action-menu/disabled.vue +2 -2
  31. package/demos/pc/app/action-menu/events-composition-api.vue +1 -1
  32. package/demos/pc/app/action-menu/events.vue +1 -1
  33. package/demos/pc/app/action-menu/icon-composition-api.vue +2 -2
  34. package/demos/pc/app/action-menu/icon.vue +2 -2
  35. package/demos/pc/app/action-menu/max-show-num-composition-api.vue +1 -1
  36. package/demos/pc/app/action-menu/max-show-num.vue +1 -1
  37. package/demos/pc/app/action-menu/more-text-composition-api.vue +1 -1
  38. package/demos/pc/app/action-menu/more-text.vue +1 -1
  39. package/demos/pc/app/action-menu/popper-class-composition-api.vue +1 -1
  40. package/demos/pc/app/action-menu/popper-class.vue +1 -1
  41. package/demos/pc/app/action-menu/slot-item-composition-api.vue +1 -1
  42. package/demos/pc/app/action-menu/slot-item.vue +1 -1
  43. package/demos/pc/app/action-menu/spacing-composition-api.vue +1 -1
  44. package/demos/pc/app/action-menu/spacing.vue +1 -1
  45. package/demos/pc/app/action-menu/text-field-composition-api.vue +1 -1
  46. package/demos/pc/app/action-menu/text-field.spec.ts +1 -1
  47. package/demos/pc/app/action-menu/text-field.vue +1 -1
  48. package/demos/pc/app/amount/custom-service.spec.js +4 -4
  49. package/demos/pc/app/base-select/slot-reference.spec.ts +1 -1
  50. package/demos/pc/app/button/icon-composition-api.vue +3 -1
  51. package/demos/pc/app/button/icon.vue +3 -1
  52. package/demos/pc/app/button/webdoc/button.js +3 -2
  53. package/demos/pc/app/calendar-view/calendar-mode-composition-api.vue +7 -1
  54. package/demos/pc/app/calendar-view/calendar-mode.spec.ts +3 -0
  55. package/demos/pc/app/calendar-view/calendar-mode.vue +7 -1
  56. package/demos/pc/app/carousel/webdoc/carousel.js +0 -18
  57. package/demos/pc/app/color-picker/alpha-composition-api.vue +1 -1
  58. package/demos/pc/app/color-picker/alpha.spec.ts +2 -2
  59. package/demos/pc/app/color-picker/alpha.vue +1 -1
  60. package/demos/pc/app/color-picker/base.spec.ts +2 -2
  61. package/demos/pc/app/color-picker/default-visible.spec.ts +1 -1
  62. package/demos/pc/app/color-picker/event-composition-api.vue +2 -2
  63. package/demos/pc/app/color-picker/event.spec.ts +4 -4
  64. package/demos/pc/app/color-picker/event.vue +1 -1
  65. package/demos/pc/app/color-picker/format.spec.ts +6 -6
  66. package/demos/pc/app/color-picker/history.spec.ts +1 -7
  67. package/demos/pc/app/color-picker/predefine.spec.ts +3 -10
  68. package/demos/pc/app/color-picker/size.spec.ts +4 -4
  69. package/demos/pc/app/color-select-panel/format.spec.ts +2 -8
  70. package/demos/pc/app/color-select-panel/history.spec.ts +0 -2
  71. package/demos/pc/app/color-select-panel/predefine.spec.ts +0 -3
  72. package/demos/pc/app/container/basic-usage-composition-api.vue +10 -10
  73. package/demos/pc/app/container/basic-usage.vue +10 -10
  74. package/demos/pc/app/container/custom-with-height-composition-api.vue +8 -8
  75. package/demos/pc/app/container/custom-with-height.vue +10 -10
  76. package/demos/pc/app/date-panel/custom-week.spec.ts +2 -2
  77. package/demos/pc/app/dialog-select/nest-grid-single.spec.ts +40 -0
  78. package/demos/pc/app/dialog-select/nest-tree-multi.spec.ts +53 -0
  79. package/demos/pc/app/dialog-select/nest-tree-single.spec.ts +25 -0
  80. package/demos/pc/app/dialog-select/set-selection.spec.ts +20 -0
  81. package/demos/pc/app/file-upload/before-upload-limit-composition-api.vue +1 -1
  82. package/demos/pc/app/file-upload/before-upload-limit.spec.ts +1 -1
  83. package/demos/pc/app/file-upload/before-upload-limit.vue +1 -1
  84. package/demos/pc/app/file-upload/custom-trigger-composition-api.vue +1 -1
  85. package/demos/pc/app/file-upload/custom-trigger.spec.ts +1 -1
  86. package/demos/pc/app/file-upload/custom-trigger.vue +1 -1
  87. package/demos/pc/app/file-upload/custom-upload-tip-composition-api.vue +1 -1
  88. package/demos/pc/app/file-upload/custom-upload-tip.vue +1 -1
  89. package/demos/pc/app/file-upload/form-validation-composition-api.vue +1 -1
  90. package/demos/pc/app/file-upload/form-validation.vue +1 -1
  91. package/demos/pc/app/file-upload/image-size-composition-api.vue +1 -1
  92. package/demos/pc/app/file-upload/image-size.spec.ts +1 -1
  93. package/demos/pc/app/file-upload/image-size.vue +1 -1
  94. package/demos/pc/app/file-upload/multiple-file-composition-api.vue +1 -1
  95. package/demos/pc/app/file-upload/multiple-file.spec.ts +1 -1
  96. package/demos/pc/app/file-upload/multiple-file.vue +1 -1
  97. package/demos/pc/app/file-upload/prevent-delete-file-composition-api.vue +1 -1
  98. package/demos/pc/app/file-upload/prevent-delete-file.vue +1 -1
  99. package/demos/pc/app/file-upload/upload-request-composition-api.vue +1 -1
  100. package/demos/pc/app/file-upload/upload-request.spec.ts +2 -2
  101. package/demos/pc/app/file-upload/upload-request.vue +1 -1
  102. package/demos/pc/app/grid/base/basic-usage-composition-api.vue +1 -17
  103. package/demos/pc/app/grid/custom/column-fixed.spec.js +2 -1
  104. package/demos/pc/app/grid/custom/page-size.spec.js +1 -1
  105. package/demos/pc/app/grid/data-source/auto-load.spec.js +0 -1
  106. package/demos/pc/app/grid/data-source/request-service.spec.js +1 -1
  107. package/demos/pc/app/grid/data-source/static-data.spec.js +1 -1
  108. package/demos/pc/app/grid/dynamically-columns/dynamically-columns.spec.js +2 -1
  109. package/demos/pc/app/grid/edit/scrollbar-not-blur-composition-api.vue +119 -0
  110. package/demos/pc/app/grid/edit/scrollbar-not-blur.spec.ts +28 -0
  111. package/demos/pc/app/grid/edit/scrollbar-not-blur.vue +129 -0
  112. package/demos/pc/app/grid/editor/custom-edit.spec.js +7 -2
  113. package/demos/pc/app/grid/empty/empty-data-iscenter.spec.js +1 -1
  114. package/demos/pc/app/grid/event/toolbar-button-click-event.spec.js +1 -1
  115. package/demos/pc/app/grid/expand/expand-trigger-slot-composition-api.vue +85 -0
  116. package/demos/pc/app/grid/expand/expand-trigger-slot.spec.ts +11 -0
  117. package/demos/pc/app/grid/expand/expand-trigger-slot.vue +95 -0
  118. package/demos/pc/app/grid/expand/set-row-expansion.spec.js +4 -0
  119. package/demos/pc/app/grid/filter/custom-filter.spec.js +3 -3
  120. package/demos/pc/app/grid/filter/default-filter-composition-api.vue +6 -0
  121. package/demos/pc/app/grid/filter/default-filter.vue +6 -0
  122. package/demos/pc/app/grid/filter/default-relation.spec.js +1 -1
  123. package/demos/pc/app/grid/filter/server-filter.spec.js +1 -1
  124. package/demos/pc/app/grid/filter/simple-filter.spec.ts +5 -4
  125. package/demos/pc/app/grid/fixed/right-fixed-composition-api.vue +4 -4
  126. package/demos/pc/app/grid/fixed/right-fixed.vue +4 -4
  127. package/demos/pc/app/grid/footer/footer-summation-empty.spec.js +0 -1
  128. package/demos/pc/app/grid/large-data/full-data-loading.spec.js +10 -3
  129. package/demos/pc/app/grid/large-data/virtual-rolling.spec.js +9 -2
  130. package/demos/pc/app/grid/mouse-keyboard/keyboard-navigation.spec.js +4 -1
  131. package/demos/pc/app/grid/renderer/inner-renderer-date-composition-api.vue +4 -3
  132. package/demos/pc/app/grid/renderer/inner-renderer-date.spec.js +2 -2
  133. package/demos/pc/app/grid/renderer/inner-renderer-date.vue +3 -3
  134. package/demos/pc/app/grid/renderer/inner-renderer.spec.js +4 -0
  135. package/demos/pc/app/grid/size/max-min-grid-height.spec.js +2 -2
  136. package/demos/pc/app/grid/slot/slot-conf-composition-api.vue +141 -0
  137. package/demos/pc/app/grid/slot/slot-conf.spec.js +12 -0
  138. package/demos/pc/app/grid/slot/slot-conf.vue +151 -0
  139. package/demos/pc/app/grid/sort/combinations-sort.spec.js +2 -2
  140. package/demos/pc/app/grid/webdoc/grid-edit.js +12 -0
  141. package/demos/pc/app/grid/webdoc/grid-empty.js +1 -1
  142. package/demos/pc/app/grid/webdoc/grid-expand.js +11 -0
  143. package/demos/pc/app/grid/webdoc/grid-slot.js +9 -0
  144. package/demos/pc/app/icon/iconGroups.js +8 -2
  145. package/demos/pc/app/input/basic-usage.spec.ts +1 -1
  146. package/demos/pc/app/loading/background.spec.ts +3 -1
  147. package/demos/pc/app/loading/custom-class.spec.ts +4 -2
  148. package/demos/pc/app/loading/fullscreen.spec.ts +6 -4
  149. package/demos/pc/app/loading/loading-tip-text.spec.ts +3 -1
  150. package/demos/pc/app/loading/size.spec.ts +5 -3
  151. package/demos/pc/app/locales/custom-service-composition-api.vue +3 -3
  152. package/demos/pc/app/locales/custom-service.spec.ts +1 -1
  153. package/demos/pc/app/locales/custom-service.vue +3 -3
  154. package/demos/pc/app/modal/basic-usage.spec.ts +2 -1
  155. package/demos/pc/app/modal/message-close.spec.ts +2 -2
  156. package/demos/pc/app/modal/message-id.spec.ts +2 -2
  157. package/demos/pc/app/modal/modal-fn-slots.spec.ts +5 -7
  158. package/demos/pc/app/modal/modal-header.spec.ts +2 -1
  159. package/demos/pc/app/numeric/input-event-composition-api.vue +26 -0
  160. package/demos/pc/app/numeric/input-event.spec.ts +15 -0
  161. package/demos/pc/app/numeric/input-event.vue +34 -0
  162. package/demos/pc/app/numeric/webdoc/numeric.js +12 -0
  163. package/demos/pc/app/pager/align-composition-api.vue +10 -13
  164. package/demos/pc/app/pager/align.spec.ts +8 -3
  165. package/demos/pc/app/pager/align.vue +11 -5
  166. package/demos/pc/app/pager/page-size-composition-api.vue +2 -2
  167. package/demos/pc/app/pager/page-size.spec.ts +1 -1
  168. package/demos/pc/app/pager/page-size.vue +2 -2
  169. package/demos/pc/app/pager/pager-in-grid-composition-api.vue +0 -1
  170. package/demos/pc/app/pager/pager-in-grid.vue +0 -1
  171. package/demos/pc/app/pager/popper-append-to-body-composition-api.vue +1 -7
  172. package/demos/pc/app/pager/popper-append-to-body.vue +1 -7
  173. package/demos/pc/app/pager/popper-class-composition-api.vue +1 -7
  174. package/demos/pc/app/pager/popper-class.vue +1 -7
  175. package/demos/pc/app/popeditor/conditions.spec.ts +1 -1
  176. package/demos/pc/app/popeditor/suggest.spec.ts +1 -1
  177. package/demos/pc/app/qr-code/icon-composition-api.vue +17 -3
  178. package/demos/pc/app/qr-code/icon.spec.ts +19 -0
  179. package/demos/pc/app/qr-code/icon.vue +25 -4
  180. package/demos/pc/app/qr-code/style-composition-api.vue +2 -9
  181. package/demos/pc/app/qr-code/style.spec.ts +18 -1
  182. package/demos/pc/app/qr-code/style.vue +11 -8
  183. package/demos/pc/app/query-builder/webdoc/query-builder.js +5 -3
  184. package/demos/pc/app/search/events.spec.ts +1 -1
  185. package/demos/pc/app/search/events.vue +9 -0
  186. package/demos/pc/app/search/slot-prefix-suffix.spec.ts +1 -1
  187. package/demos/pc/app/search/webdoc/search.js +12 -4
  188. package/demos/pc/app/select/nest-grid-remote.spec.ts +3 -3
  189. package/demos/pc/app/select/nest-grid.spec.ts +1 -1
  190. package/demos/pc/app/select/nest-radio-grid-much-data.spec.ts +5 -7
  191. package/demos/pc/app/tabs/basic-usage.spec.ts +2 -2
  192. package/demos/pc/app/tabs/header-only.vue +56 -0
  193. package/demos/pc/app/tabs/size.spec.ts +2 -2
  194. package/demos/pc/app/tabs/webdoc/tabs.js +12 -0
  195. package/demos/pc/app/time-line/slot-default-composition-api.vue +81 -0
  196. package/demos/pc/app/time-line/slot-default.spec.ts +13 -0
  197. package/demos/pc/app/time-line/slot-default.vue +95 -0
  198. package/demos/pc/app/time-line/webdoc/time-line.js +12 -0
  199. package/demos/pc/menus.js +20 -10
  200. package/demos/pc/webdoc/changelog-en.md +224 -197
  201. package/demos/pc/webdoc/changelog.md +167 -387
  202. package/demos/pc/webdoc/faq.md +14 -0
  203. package/demos/saas/menus.js +2 -14
  204. package/env/.env +3 -0
  205. package/package.json +25 -24
  206. package/playground/App.vue +2 -2
  207. package/postcss.config.cjs +1 -0
  208. package/src/App.vue +26 -59
  209. package/src/components/anchor.vue +5 -1
  210. package/src/components/demo.vue +18 -7
  211. package/src/components/design-token.vue +90 -0
  212. package/src/components/float-settings.vue +4 -23
  213. package/src/components/mcp-docs.vue +4 -26
  214. package/src/components/version-tip.vue +1 -1
  215. package/src/composable/useTinyRemoter.ts +176 -0
  216. package/src/composable/utils.ts +2 -166
  217. package/src/const.ts +6 -1
  218. package/src/i18n/en.json +2 -0
  219. package/src/i18n/es.json +47 -0
  220. package/src/i18n/index.js +24 -5
  221. package/src/i18n/pt.json +47 -0
  222. package/src/i18n/zh.json +2 -0
  223. package/src/main.js +17 -13
  224. package/src/{menus.jsx → menus.js} +0 -1
  225. package/src/router.js +3 -18
  226. package/src/tools/appData.js +6 -16
  227. package/src/tools/storage.js +5 -3
  228. package/src/tools/useApiMode.js +11 -3
  229. package/src/tools/useBulletin.jsx +9 -8
  230. package/src/tools/useStyleSettings.js +8 -0
  231. package/src/tools/useTemplateMode.js +5 -1
  232. package/src/tools/utils.js +32 -1
  233. package/src/views/components-doc/cmp-config.js +13 -1
  234. package/src/views/components-doc/common.vue +42 -15
  235. package/src/views/layout/layout.vue +5 -8
  236. package/src/views/overview.vue +1 -1
  237. package/tsconfig.node.json +2 -4
  238. package/src/components/MessageCard.vue +0 -117
  239. package/src/components/tiny-robot-chat.vue +0 -128
  240. package/src/composable/DifyModelProvider.ts +0 -65
  241. package/src/composable/useTinyRobot.ts +0 -167
  242. package/src/tools/useAllTaskFinish.ts +0 -0
  243. package/src/views/comprehensive/Demo.vue +0 -212
  244. package/src/views/comprehensive/index.vue +0 -380
  245. package/src/views/comprehensive/products.json +0 -98
  246. package/src/views/comprehensive/types/index.ts +0 -37
  247. package/src/views/remoter/index.vue +0 -63
  248. package/src/views/remoter/sound.vue +0 -349
  249. /package/demos/pc/app/grid/expand/{expand-config.spec.js → expand-config.spec.ts} +0 -0
@@ -68,27 +68,27 @@ export default {
68
68
  }
69
69
 
70
70
  .demo-container .tiny-container :deep(.tiny-container__header) {
71
- background-color: var(--tv-color-info-bg-light);
72
- border: 3px solid var(--tv-color-border-container);
73
- color: var(--tv-color-info-text);
71
+ background-color: var(--tv-color-info-bg-light, #0067d1);
72
+ border: 3px solid var(--tv-color-border-container, #fff);
73
+ color: var(--tv-color-info-text, #fff);
74
74
  line-height: 48px;
75
75
  }
76
76
 
77
77
  .demo-container .tiny-container :deep(.tiny-container__aside) {
78
- background-color: var(--tv-color-error-bg-light);
79
- border: 3px solid var(--tv-color-border-container);
80
- color: var(--tv-color-error-text);
78
+ background-color: var(--tv-color-error-bg-light, #0067d180);
79
+ border: 3px solid var(--tv-color-border-container, #fff);
80
+ color: var(--tv-color-error-text, #fff);
81
81
  }
82
82
 
83
83
  .demo-container .tiny-container :deep(.tiny-container__main) {
84
- background-color: var(--tv-color-warn-bg-light);
85
- border: 3px solid var(--tv-color-border-container);
84
+ background-color: var(--tv-color-warn-bg-light, #0067d133);
85
+ border: 3px solid var(--tv-color-border-container, #fff);
86
86
  color: var(--tv-color-warn-text);
87
87
  }
88
88
 
89
89
  .demo-container .tiny-container :deep(.tiny-container__footer) {
90
- background-color: var(--tv-color-success-bg-light);
91
- border: 3px solid var(--tv-color-border-container);
90
+ background-color: var(--tv-color-success-bg-light, #f0f7ff);
91
+ border: 3px solid var(--tv-color-border-container, #fff);
92
92
  color: var(--tv-color-success-text);
93
93
  }
94
94
  .demo-center {
@@ -40,26 +40,26 @@ const headerHeight = ref(80)
40
40
  }
41
41
 
42
42
  .demo-container .tiny-container :deep(.tiny-container__header) {
43
- background-color: var(--tv-color-info-bg-light);
44
- border: 3px solid var(--tv-color-border-container);
43
+ background-color: var(--tv-color-info-bg-light, #0067d1);
44
+ border: 3px solid var(--tv-color-border-container, #fff);
45
45
  color: var(--tv-color-info-text);
46
46
  }
47
47
 
48
48
  .demo-container .tiny-container :deep(.tiny-container__aside) {
49
- background-color: var(--tv-color-error-bg-light);
50
- border: 3px solid var(--tv-color-border-container);
49
+ background-color: var(--tv-color-error-bg-light, #0067d180);
50
+ border: 3px solid var(--tv-color-border-container, #fff);
51
51
  color: var(--tv-color-error-text);
52
52
  }
53
53
 
54
54
  .demo-container .tiny-container :deep(.tiny-container__main) {
55
- background-color: var(--tv-color-warn-bg-light);
56
- border: 3px solid var(--tv-color-border-container);
55
+ background-color: var(--tv-color-warn-bg-light, #0067d133);
56
+ border: 3px solid var(--tv-color-border-container, #fff);
57
57
  color: var(--tv-color-warn-text);
58
58
  }
59
59
 
60
60
  .demo-container .tiny-container :deep(.tiny-container__footer) {
61
- background-color: var(--tv-color-success-bg-light);
62
- border: 3px solid var(--tv-color-border-container);
61
+ background-color: var(--tv-color-success-bg-light, #f0f7ff);
62
+ border: 3px solid var(--tv-color-border-container, #fff);
63
63
  color: var(--tv-color-success-text);
64
64
  }
65
65
 
@@ -49,26 +49,26 @@ export default {
49
49
  }
50
50
 
51
51
  .demo-container .tiny-container :deep(.tiny-container__header) {
52
- background-color: var(--tv-color-info-bg-light);
53
- border: 3px solid var(--tv-color-border-container);
54
- color: var(--tv-color-info-text);
52
+ background-color: var(--tv-color-info-bg-light, #0067d1);
53
+ border: 3px solid var(--tv-color-border-container, #fff);
54
+ color: var(--tv-color-info-text, #fff);
55
55
  }
56
56
 
57
57
  .demo-container .tiny-container :deep(.tiny-container__aside) {
58
- background-color: var(--tv-color-error-bg-light);
59
- border: 3px solid var(--tv-color-border-container);
60
- color: var(--tv-color-error-text);
58
+ background-color: var(--tv-color-error-bg-light, #0067d180);
59
+ border: 3px solid var(--tv-color-border-container, #fff);
60
+ color: var(--tv-color-error-text, #fff);
61
61
  }
62
62
 
63
63
  .demo-container .tiny-container :deep(.tiny-container__main) {
64
- background-color: var(--tv-color-warn-bg-light);
65
- border: 3px solid var(--tv-color-border-container);
64
+ background-color: var(--tv-color-warn-bg-light, #0067d133);
65
+ border: 3px solid var(--tv-color-border-container, #fff);
66
66
  color: var(--tv-color-warn-text);
67
67
  }
68
68
 
69
69
  .demo-container .tiny-container :deep(.tiny-container__footer) {
70
- background-color: var(--tv-color-success-bg-light);
71
- border: 3px solid var(--tv-color-border-container);
70
+ background-color: var(--tv-color-success-bg-light, #f0f7ff);
71
+ border: 3px solid var(--tv-color-border-container, #fff);
72
72
  color: var(--tv-color-success-text);
73
73
  }
74
74
 
@@ -24,7 +24,7 @@ test('[DatePanel] 测试周次序号', async ({ page }) => {
24
24
  await page.locator('div:nth-child(2) > .tiny-date-range-picker__header > button:nth-child(2)').click()
25
25
  await expect(page.getByText('12w')).toBeVisible()
26
26
 
27
- await page.getByText('13').nth(1).click()
28
- await page.getByText('17').nth(2).click()
27
+ await page.locator('#custom-weeks').getByText('13').nth(1).click()
28
+ await page.locator('#custom-weeks').getByText('17').nth(2).click()
29
29
  await expect(page.locator('.value1')).toHaveText('[ "2025-02-13", "2025-02-17" ]')
30
30
  })
@@ -0,0 +1,40 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ test('dialogSelect 表格单选', async ({ page }) => {
4
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
5
+ await page.goto('dialog-select#nest-grid-single')
6
+
7
+ await page.locator('#nest-grid-single').getByRole('button', { name: '打开窗口' }).click()
8
+
9
+ await page.locator('.tiny-grid-body__row').first().waitFor()
10
+ let rows
11
+ rows = await page.locator('.tiny-grid-body__row').all()
12
+ for (const row of rows) {
13
+ const checked = await row.locator('input[type="radio"]').isChecked()
14
+ expect(checked).toBe(false)
15
+ }
16
+
17
+ await page.getByRole('row', { name: 'GFD 科技有限公司 福建 福州' }).locator('path').nth(1).click()
18
+
19
+ rows = await page.locator('.tiny-grid-body__row').all()
20
+ for (let i = 0; i < rows.length; i++) {
21
+ const checked = await rows[i].locator('input[type="radio"]').first().isChecked()
22
+ if (i === 0) {
23
+ expect(checked).toBe(true)
24
+ } else {
25
+ expect(checked).toBe(false)
26
+ }
27
+ }
28
+
29
+ await page.getByRole('row', { name: 'WWW 科技有限公司 广东 深圳' }).locator('path').nth(1).click()
30
+
31
+ rows = await page.locator('.tiny-grid-body__row').all()
32
+ for (let i = 0; i < rows.length; i++) {
33
+ const checked = await rows[i].locator('input[type="radio"]').first().isChecked()
34
+ if (i === 1) {
35
+ expect(checked).toBe(true)
36
+ } else {
37
+ expect(checked).toBe(false)
38
+ }
39
+ }
40
+ })
@@ -0,0 +1,53 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ test('dialogSelect 树多选', async ({ page }) => {
4
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
5
+ await page.goto('dialog-select#nest-tree-multi')
6
+ await page.locator('#nest-tree-multi').getByRole('button', { name: '打开窗口', exact: true }).click()
7
+
8
+ const nodeContent = await page.locator('.tiny-tree-node__content-left label').nth(1)
9
+
10
+ const iconNode = await nodeContent.getAttribute('class')
11
+
12
+ expect(iconNode?.includes('tiny-radio')).toBe(false)
13
+ expect(iconNode?.includes('tiny-checkbox')).toBe(true)
14
+
15
+ let isChecked
16
+
17
+ isChecked = await page
18
+ .getByRole('treeitem', { name: '三级 9' })
19
+ .locator('.tiny-checkbox input[type="checkbox"]')
20
+ .isChecked()
21
+ expect(isChecked).toBeFalsy()
22
+
23
+ let current
24
+ current = await page.getByRole('treeitem', { name: '三级 9' }).locator('path').nth(1)
25
+ await current.click()
26
+
27
+ isChecked = await page
28
+ .getByRole('treeitem', { name: '三级 9' })
29
+ .locator('.tiny-checkbox input[type="checkbox"]')
30
+ .isChecked()
31
+ expect(isChecked).toBeTruthy()
32
+
33
+ await page
34
+ .locator('div')
35
+ .filter({ hasText: /^一级 1二级 4三级 8三级 9暂无数据$/ })
36
+ .getByRole('img')
37
+ .nth(3)
38
+ .click()
39
+
40
+ isChecked = await page
41
+ .getByRole('treeitem', { name: '三级 9' })
42
+ .locator('.tiny-checkbox input[type="checkbox"]')
43
+ .isChecked()
44
+ expect(isChecked).toBeFalsy()
45
+
46
+ await page.getByRole('treeitem', { name: '三级 9' }).locator('path').nth(1).click()
47
+
48
+ isChecked = await page
49
+ .getByRole('treeitem', { name: '三级 9' })
50
+ .locator('.tiny-checkbox input[type="checkbox"]')
51
+ .isChecked()
52
+ expect(isChecked).toBeTruthy()
53
+ })
@@ -0,0 +1,25 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ test('dialogSelect 树单选', async ({ page }) => {
4
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
5
+ await page.goto('dialog-select#nest-tree-single')
6
+ await page.locator('#nest-tree-single').getByRole('button', { name: '打开窗口' }).click()
7
+
8
+ const nodeContent = await page.locator('.tiny-tree-node__content-left label').nth(1)
9
+
10
+ const iconNode = await nodeContent.getAttribute('class')
11
+
12
+ expect(iconNode?.includes('tiny-radio')).toBe(true)
13
+ expect(iconNode?.includes('tiny-checkbox')).toBe(false)
14
+
15
+ let current
16
+ current = await page.getByText('201一级')
17
+ await current.click()
18
+ expect(await current.locator('input[type="radio"]').isChecked()).toBe(true)
19
+
20
+ current = await page.getByRole('treeitem', { name: '二级 6' }).locator('label')
21
+ await current.click()
22
+ expect(await current.locator('input[type="radio"]').isChecked()).toBe(true)
23
+ current = await page.getByText('201一级')
24
+ expect(await current.locator('input[type="radio"]').isChecked()).toBe(false)
25
+ })
@@ -0,0 +1,20 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ test('dialogSelect 设置多选状态', async ({ page }) => {
4
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
5
+ await page.goto('dialog-select#set-selection')
6
+ await page.locator('#set-selection').getByRole('button', { name: '打开窗口' }).click()
7
+ await page.getByRole('button', { name: 'Close' }).click()
8
+ await page.getByRole('button', { name: '切换第二行选中状态' }).click()
9
+ await page.locator('#set-selection').getByRole('button', { name: '打开窗口' }).click()
10
+
11
+ const trs = await page.locator('.tiny-grid table tbody tr').all()
12
+ for (let i = 0; i < trs.length; i++) {
13
+ const classes = await trs[i].getAttribute('class')
14
+ if (i === 1) {
15
+ expect(classes?.includes('row__selected')).toBeTruthy()
16
+ } else {
17
+ expect(classes?.includes('row__selected')).toBeFalsy()
18
+ }
19
+ }
20
+ })
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="uploadRef" :action="action" :file-list="fileList" :before-upload="beforeAvatarUpload">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -9,7 +9,7 @@ test('定义上传前限制', async ({ page }) => {
9
9
  page.on('pageerror', (exception) => expect(exception).toBeNull())
10
10
  await page.goto('file-upload#before-upload-limit')
11
11
 
12
- const upload = page.getByRole('button', { name: '选取文件' })
12
+ const upload = page.getByRole('button', { name: '点击上传' })
13
13
  const modal = page.locator('.tiny-modal').nth(1)
14
14
  const modalCancel = page.getByRole('button', { name: '取消' })
15
15
  const lists = page.locator('.tiny-upload-list__item')
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="upload" :action="action" :file-list="fileList" :before-upload="beforeAvatarUpload">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="uploadRef" :action="action">
3
3
  <template #trigger>
4
- <tiny-button>我是触发源</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -6,5 +6,5 @@ test('触发源插槽', async ({ page }) => {
6
6
 
7
7
  const upload = page.locator('.tiny-upload')
8
8
 
9
- await expect(upload).toHaveText('我是触发源')
9
+ await expect(upload).toHaveText('点击上传')
10
10
  })
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="upload" :action="action">
3
3
  <template #trigger>
4
- <tiny-button>我是触发源</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -8,7 +8,7 @@
8
8
  :re-upload-tip="reUploadTip"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  <template #tip>
14
14
  <div class="tiny-upload__tip">只能上传 jpg/png 文件,且不超过 500 kb</div>
@@ -8,7 +8,7 @@
8
8
  :re-upload-tip="reUploadTip"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  <template #tip>
14
14
  <div class="tiny-upload__tip">只能上传 jpg/png 文件,且不超过 500 kb</div>
@@ -17,7 +17,7 @@
17
17
  @remove="handleRemove"
18
18
  >
19
19
  <template #trigger>
20
- <tiny-button>选取文件</tiny-button>
20
+ <tiny-button>点击上传</tiny-button>
21
21
  </template>
22
22
  <template #tip>
23
23
  <div class="tiny-upload__tip">只能上传 jpg/png 文件</div>
@@ -18,7 +18,7 @@
18
18
  @remove="handleRemove"
19
19
  >
20
20
  <template #trigger>
21
- <tiny-button>选取文件</tiny-button>
21
+ <tiny-button>点击上传</tiny-button>
22
22
  </template>
23
23
  <template #tip>
24
24
  <div class="tiny-upload__tip">只能上传 jpg/png 文件</div>
@@ -7,7 +7,7 @@
7
7
  :before-upload="beforeUpload"
8
8
  >
9
9
  <template #trigger>
10
- <tiny-button>选取文件</tiny-button>
10
+ <tiny-button>点击上传</tiny-button>
11
11
  </template>
12
12
  <template #tip>
13
13
  <div class="tiny-upload__tip">只允许上传 image 类型文件</div>
@@ -9,7 +9,7 @@ test('获取图片的原始尺寸', async ({ page }) => {
9
9
  page.on('pageerror', (exception) => expect(exception).toBeNull())
10
10
  await page.goto('file-upload#image-size')
11
11
 
12
- const upload = page.getByRole('button', { name: '选取文件' })
12
+ const upload = page.getByRole('button', { name: '点击上传' })
13
13
  const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
14
14
  const modal = page.locator('.tiny-modal')
15
15
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload accept="image/*" ref="upload" :action="action" :file-list="fileList" :before-upload="beforeUpload">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  <template #tip>
7
7
  <div class="tiny-upload__tip">只允许上传 image 类型文件</div>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload :action="action" :multiple="true">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -9,7 +9,7 @@ test('文件多选', async ({ page }) => {
9
9
  page.on('pageerror', (exception) => expect(exception).toBeNull())
10
10
  await page.goto('file-upload#multiple-file')
11
11
 
12
- const upload = page.getByRole('button', { name: '选取文件' })
12
+ const upload = page.getByRole('button', { name: '点击上传' })
13
13
  const lists = page.locator('.tiny-upload-list__item')
14
14
  const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
15
15
  const input = page.locator('.tiny-upload__input')
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload :action="action" :multiple="true">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="uploadRef" :action="action" :file-list="fileList" :before-remove="beforeRemove">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="upload" :action="action" :file-list="fileList" :before-remove="beforeRemove">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -8,7 +8,7 @@
8
8
  :before-upload="beforeUpload"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  </tiny-file-upload>
14
14
  </template>
@@ -12,7 +12,7 @@ test.describe('设置上传请求', () => {
12
12
  page.on('pageerror', (exception) => expect(exception).toBeNull())
13
13
  await page.goto('file-upload#upload-request')
14
14
 
15
- const upload = page.getByRole('button', { name: '选取文件' })
15
+ const upload = page.getByRole('button', { name: '点击上传' })
16
16
  const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
17
17
  await fileChooser.setFiles(path1)
18
18
  page.on('requestfailed', (request) => {
@@ -25,7 +25,7 @@ test.describe('设置上传请求', () => {
25
25
  page.on('pageerror', (exception) => expect(exception).toBeNull())
26
26
  await page.goto('file-upload#upload-request')
27
27
 
28
- const upload = page.getByRole('button', { name: '选取文件' })
28
+ const upload = page.getByRole('button', { name: '点击上传' })
29
29
  const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
30
30
  await fileChooser.setFiles(path1)
31
31
  page.on('requestfailed', (request) => {
@@ -8,7 +8,7 @@
8
8
  :before-upload="beforeUpload"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  </tiny-file-upload>
14
14
  </template>
@@ -1,17 +1,6 @@
1
1
  <template>
2
2
  <div>
3
- <tiny-grid
4
- :data="tableData"
5
- :edit-config="{ trigger: 'click', mode: 'cell', showStatus: true }"
6
- height="420px"
7
- :tiny_mcp_config="{
8
- server,
9
- business: {
10
- id: 'company-information',
11
- description: '公司人员信息表'
12
- }
13
- }"
14
- >
3
+ <tiny-grid :data="tableData" :edit-config="{ trigger: 'click', mode: 'cell', showStatus: true }" height="420px">
15
4
  <tiny-grid-column type="index" width="60"></tiny-grid-column>
16
5
  <tiny-grid-column type="selection" width="60"></tiny-grid-column>
17
6
  <tiny-grid-column field="company" title="公司名称"></tiny-grid-column>
@@ -25,7 +14,6 @@
25
14
  <script setup>
26
15
  import { ref } from 'vue'
27
16
  import { TinyGrid, TinyGridColumn } from '@opentiny/vue'
28
- import { useNextServer } from '@opentiny/next-vue'
29
17
 
30
18
  // 初始化表格数据
31
19
  const _table = [
@@ -48,8 +36,4 @@ const _table = [
48
36
  ]
49
37
 
50
38
  const tableData = ref(_table)
51
-
52
- const { server } = useNextServer({
53
- serverInfo: { name: 'company-information', version: '1.0.0' }
54
- })
55
39
  </script>
@@ -3,10 +3,11 @@ import { test, expect } from '@playwright/test'
3
3
  test('列冻结', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  const custom = page.locator('.tiny-grid-custom')
6
+ const demo = page.locator('#custom-column-fixed')
6
7
  await page.goto('grid-custom#custom-column-fixed')
7
8
  await page.locator('.tiny-grid-custom__setting-btn').click()
8
9
  await custom.getByRole('row', { name: '员工数 ' }).getByTitle('未冻结').getByRole('img').click()
9
10
  await custom.getByRole('row', { name: '员工数' }).getByTitle('左冻结').getByRole('img').click()
10
11
  await page.getByRole('button', { name: '确定' }).click()
11
- await expect(page.getByRole('cell', { name: '员工数' })).toHaveCSS('right', '0px')
12
+ await expect(demo.locator('.tiny-grid-header__row th').nth(3)).toHaveText(/员工数/)
12
13
  })
@@ -9,5 +9,5 @@ test('分页条数', async ({ page }) => {
9
9
  await page.getByText('其他设置', { exact: true }).click()
10
10
  await page.locator('label').filter({ hasText: '5' }).locator('path').nth(1).click()
11
11
  await page.getByRole('button', { name: '确定' }).click()
12
- await expect(demo.locator('.tiny-grid-body__row')).toHaveCount(5)
12
+ await expect(demo.locator('.tiny-grid-body__row:visible')).toHaveCount(5)
13
13
  })
@@ -4,7 +4,6 @@ test('自动加载数据', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('grid-data-source#data-source-auto-load')
6
6
  // 判断 auto-load 为 false 时不加载数据
7
- await page.getByRole('paragraph').nth(1).click()
8
7
  const demo = page.locator('#data-source-auto-load')
9
8
  await expect(demo.getByText('暂无数据')).toHaveText('暂无数据')
10
9
  })
@@ -6,5 +6,5 @@ test('开启服务请求', async ({ page }) => {
6
6
  await page.getByRole('button', { name: '筛选华南区数据' }).click()
7
7
 
8
8
  // 判断筛选华南区数据成功
9
- await expect(page.locator('.tiny-grid-body__row')).toHaveCount(3)
9
+ await expect(page.locator('.tiny-grid-body__row:visible')).toHaveCount(3)
10
10
  })
@@ -14,5 +14,5 @@ test('绑定静态数据', async ({ page }) => {
14
14
 
15
15
  // 改变 data 数据引用地址
16
16
  await page.getByRole('button', { name: '改变 tableData 引用地址' }).click()
17
- await expect(page.locator('.tiny-grid-body__row')).toHaveCount(2)
17
+ await expect(page.locator('.tiny-grid-body__row:visible')).toHaveCount(2)
18
18
  })
@@ -3,7 +3,8 @@ import { test, expect } from '@playwright/test'
3
3
  test('根据日期动态生成列', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('grid-dynamically-columns#dynamically-columns-dynamically-columns')
6
- await page.getByRole('textbox').nth(1).click()
6
+ const demo = page.locator('#dynamically-columns-dynamically-columns')
7
+ await demo.locator('.tiny-picker.tiny-date-container').click()
7
8
  await page.getByText('12 月').first().click()
8
9
  await page.getByText('2 月').nth(2).click()
9
10
  await expect(page.getByRole('cell', { name: '12' }).first()).toBeVisible()