@opentiny/vue-docs 3.27.1 → 3.28.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 (419) hide show
  1. package/demos/apis/base-select.js +2 -2
  2. package/demos/apis/chart-attributes-demo.js +4 -4
  3. package/demos/apis/chart-demo.js +4 -4
  4. package/demos/apis/chart-docs.js +4 -4
  5. package/demos/apis/chart-events.js +4 -4
  6. package/demos/apis/chart-question.js +4 -4
  7. package/demos/apis/chart.js +4 -4
  8. package/demos/apis/color-picker.js +1 -1
  9. package/demos/apis/color-select-panel.js +1 -1
  10. package/demos/apis/drawer.js +14 -0
  11. package/demos/apis/dropdown.js +6 -2
  12. package/demos/apis/grid-select.js +20 -21
  13. package/demos/apis/grid.js +1 -1
  14. package/demos/apis/modal.js +15 -1
  15. package/demos/apis/select-wrapper.js +1067 -0
  16. package/demos/apis/select.js +25 -13
  17. package/demos/apis/switch.js +15 -0
  18. package/demos/apis/time-line.js +14 -0
  19. package/demos/apis/tree-menu.js +7 -4
  20. package/demos/apis/tree-select.js +41 -0
  21. package/demos/mobile-first/app/base-select/all-text.vue +43 -0
  22. package/demos/mobile-first/app/base-select/allow-create.vue +51 -0
  23. package/demos/mobile-first/app/base-select/automatic-dropdown.vue +60 -0
  24. package/demos/mobile-first/app/base-select/basic-usage.vue +47 -0
  25. package/demos/mobile-first/app/base-select/binding-obj.vue +44 -0
  26. package/demos/mobile-first/app/base-select/cache-usage.vue +55 -0
  27. package/demos/mobile-first/app/base-select/clear-no-match-value.vue +52 -0
  28. package/demos/mobile-first/app/base-select/clearable.vue +34 -0
  29. package/demos/mobile-first/app/base-select/collapse-tags.vue +49 -0
  30. package/demos/mobile-first/app/base-select/copy-multi.vue +55 -0
  31. package/demos/mobile-first/app/base-select/copy-single.vue +158 -0
  32. package/demos/mobile-first/app/base-select/disabled.vue +107 -0
  33. package/demos/mobile-first/app/base-select/events.vue +112 -0
  34. package/demos/mobile-first/app/base-select/filter-method.vue +83 -0
  35. package/demos/mobile-first/app/base-select/filter-mode.vue +57 -0
  36. package/demos/mobile-first/app/base-select/hide-drop.vue +34 -0
  37. package/demos/mobile-first/app/base-select/is-drop-inherit-width.vue +49 -0
  38. package/demos/mobile-first/app/base-select/manual-focus-blur.vue +90 -0
  39. package/demos/mobile-first/app/base-select/map-field.vue +42 -0
  40. package/demos/mobile-first/app/base-select/memoize-usage.vue +66 -0
  41. package/demos/mobile-first/app/base-select/multiple-mix.vue +156 -0
  42. package/demos/mobile-first/app/base-select/multiple.vue +98 -0
  43. package/demos/mobile-first/app/base-select/native-properties.vue +34 -0
  44. package/demos/mobile-first/app/base-select/no-data-text.vue +40 -0
  45. package/demos/mobile-first/app/base-select/optimization.vue +55 -0
  46. package/demos/mobile-first/app/base-select/option-group.vue +105 -0
  47. package/demos/mobile-first/app/base-select/popup-style-position.vue +40 -0
  48. package/demos/mobile-first/app/base-select/remote-method.vue +286 -0
  49. package/demos/mobile-first/app/base-select/show-alloption.vue +34 -0
  50. package/demos/mobile-first/app/base-select/show-tip.vue +34 -0
  51. package/demos/mobile-first/app/base-select/size.vue +48 -0
  52. package/demos/mobile-first/app/base-select/slot-default.vue +95 -0
  53. package/demos/mobile-first/app/base-select/slot-empty.vue +41 -0
  54. package/demos/mobile-first/app/base-select/slot-footer.vue +45 -0
  55. package/demos/mobile-first/app/base-select/slot-label.vue +85 -0
  56. package/demos/mobile-first/app/base-select/slot-panel.vue +155 -0
  57. package/demos/mobile-first/app/base-select/slot-prefix.vue +39 -0
  58. package/demos/mobile-first/app/base-select/slot-reference.vue +41 -0
  59. package/demos/mobile-first/app/base-select/tag-type.vue +36 -0
  60. package/demos/mobile-first/app/base-select/webdoc/base-select.cn.md +7 -0
  61. package/demos/mobile-first/app/base-select/webdoc/base-select.en.md +7 -0
  62. package/demos/mobile-first/app/base-select/webdoc/base-select.js +590 -0
  63. package/demos/mobile-first/app/button/webdoc/button.js +2 -2
  64. package/demos/mobile-first/app/file-upload/show-title.vue +2 -3
  65. package/demos/mobile-first/app/grid-select/basic-usage.vue +70 -0
  66. package/demos/mobile-first/app/grid-select/config.vue +88 -0
  67. package/demos/mobile-first/app/grid-select/extra-query-params.vue +126 -0
  68. package/demos/mobile-first/app/grid-select/init-query.vue +124 -0
  69. package/demos/mobile-first/app/grid-select/radio-bigdata.vue +46 -0
  70. package/demos/mobile-first/app/grid-select/remote.vue +90 -0
  71. package/demos/mobile-first/app/grid-select/webdoc/grid-select.cn.md +7 -0
  72. package/demos/mobile-first/app/grid-select/webdoc/grid-select.en.md +8 -0
  73. package/demos/mobile-first/app/grid-select/webdoc/grid-select.js +92 -0
  74. package/demos/mobile-first/app/select-wrapper/all-text.vue +43 -0
  75. package/demos/mobile-first/app/select-wrapper/allow-create.vue +77 -0
  76. package/demos/mobile-first/app/select-wrapper/automatic-dropdown.vue +62 -0
  77. package/demos/mobile-first/app/select-wrapper/basic-usage.vue +47 -0
  78. package/demos/mobile-first/app/select-wrapper/binding-obj.vue +44 -0
  79. package/demos/mobile-first/app/select-wrapper/cache-usage.vue +49 -0
  80. package/demos/mobile-first/app/select-wrapper/clear-no-match-value.vue +54 -0
  81. package/demos/mobile-first/app/select-wrapper/clearable.vue +34 -0
  82. package/demos/mobile-first/app/select-wrapper/collapse-tags.vue +58 -0
  83. package/demos/mobile-first/app/select-wrapper/copy-multi.vue +77 -0
  84. package/demos/mobile-first/app/select-wrapper/copy-single.vue +157 -0
  85. package/demos/mobile-first/app/select-wrapper/disabled.vue +108 -0
  86. package/demos/mobile-first/app/select-wrapper/events.vue +112 -0
  87. package/demos/mobile-first/app/select-wrapper/extra-query-params.vue +157 -0
  88. package/demos/mobile-first/app/select-wrapper/filter-method.vue +85 -0
  89. package/demos/mobile-first/app/select-wrapper/filter-mode.vue +46 -0
  90. package/demos/mobile-first/app/select-wrapper/hide-drop.vue +34 -0
  91. package/demos/mobile-first/app/select-wrapper/init-label.vue +74 -0
  92. package/demos/mobile-first/app/select-wrapper/is-drop-inherit-width.vue +51 -0
  93. package/demos/mobile-first/app/select-wrapper/manual-focus-blur.vue +90 -0
  94. package/demos/mobile-first/app/select-wrapper/map-field.vue +68 -0
  95. package/demos/mobile-first/app/select-wrapper/memoize-usage.vue +66 -0
  96. package/demos/mobile-first/app/select-wrapper/multiple-mix.vue +84 -0
  97. package/demos/mobile-first/app/select-wrapper/multiple.vue +133 -0
  98. package/demos/mobile-first/app/select-wrapper/native-properties.vue +34 -0
  99. package/demos/mobile-first/app/select-wrapper/nest-grid-disable.vue +122 -0
  100. package/demos/mobile-first/app/select-wrapper/nest-grid-init-query.vue +129 -0
  101. package/demos/mobile-first/app/select-wrapper/nest-grid-remote.vue +144 -0
  102. package/demos/mobile-first/app/select-wrapper/nest-grid.vue +106 -0
  103. package/demos/mobile-first/app/select-wrapper/nest-radio-grid-much-data.vue +50 -0
  104. package/demos/mobile-first/app/select-wrapper/nest-tree.vue +164 -0
  105. package/demos/mobile-first/app/select-wrapper/no-data-text.vue +48 -0
  106. package/demos/mobile-first/app/select-wrapper/optimization.vue +59 -0
  107. package/demos/mobile-first/app/select-wrapper/option-group.vue +105 -0
  108. package/demos/mobile-first/app/select-wrapper/popup-style-position.vue +40 -0
  109. package/demos/mobile-first/app/select-wrapper/remote-method.vue +286 -0
  110. package/demos/mobile-first/app/select-wrapper/show-alloption.vue +34 -0
  111. package/demos/mobile-first/app/select-wrapper/show-tip.vue +28 -0
  112. package/demos/mobile-first/app/select-wrapper/size.vue +57 -0
  113. package/demos/mobile-first/app/select-wrapper/slot-default.vue +95 -0
  114. package/demos/mobile-first/app/select-wrapper/slot-empty.vue +44 -0
  115. package/demos/mobile-first/app/select-wrapper/slot-header-footer.vue +55 -0
  116. package/demos/mobile-first/app/select-wrapper/slot-label.vue +85 -0
  117. package/demos/mobile-first/app/select-wrapper/slot-prefix.vue +39 -0
  118. package/demos/mobile-first/app/select-wrapper/slot-reference.vue +41 -0
  119. package/demos/mobile-first/app/select-wrapper/tag-type.vue +36 -0
  120. package/demos/mobile-first/app/select-wrapper/webdoc/select-wrapper.cn.md +7 -0
  121. package/demos/mobile-first/app/select-wrapper/webdoc/select-wrapper.en.md +7 -0
  122. package/demos/mobile-first/app/select-wrapper/webdoc/select-wrapper.js +695 -0
  123. package/demos/mobile-first/app/space/space-size.vue +1 -1
  124. package/demos/mobile-first/app/tree-select/basic-usage.vue +63 -0
  125. package/demos/mobile-first/app/tree-select/collapse-tags.vue +77 -0
  126. package/demos/mobile-first/app/tree-select/copy.vue +77 -0
  127. package/demos/mobile-first/app/tree-select/disabled.vue +76 -0
  128. package/demos/mobile-first/app/tree-select/lazy.vue +59 -0
  129. package/demos/mobile-first/app/tree-select/map-field.vue +63 -0
  130. package/demos/mobile-first/app/tree-select/multiple.vue +63 -0
  131. package/demos/mobile-first/app/tree-select/native-properties.vue +69 -0
  132. package/demos/mobile-first/app/tree-select/panel-style.vue +80 -0
  133. package/demos/mobile-first/app/tree-select/reference-style.vue +79 -0
  134. package/demos/mobile-first/app/tree-select/size.vue +78 -0
  135. package/demos/mobile-first/app/tree-select/webdoc/tree-select.cn.md +7 -0
  136. package/demos/mobile-first/app/tree-select/webdoc/tree-select.en.md +7 -0
  137. package/demos/mobile-first/app/tree-select/webdoc/tree-select.js +220 -0
  138. package/demos/mobile-first/menus.js +14 -0
  139. package/demos/pc/app/amount/custom-service.spec.js +4 -4
  140. package/demos/pc/app/base-select/all-text.spec.ts +2 -2
  141. package/demos/pc/app/base-select/allow-create.spec.ts +3 -3
  142. package/demos/pc/app/base-select/automatic-dropdown.spec.ts +2 -2
  143. package/demos/pc/app/base-select/basic-usage.spec.ts +4 -4
  144. package/demos/pc/app/base-select/binding-obj.spec.ts +2 -2
  145. package/demos/pc/app/base-select/cache-usage.spec.ts +2 -2
  146. package/demos/pc/app/base-select/clearable.spec.ts +2 -2
  147. package/demos/pc/app/base-select/input-box-type.spec.ts +0 -2
  148. package/demos/pc/app/base-select/multiple.spec.ts +1 -1
  149. package/demos/pc/app/base-select/searchable.spec.ts +1 -1
  150. package/demos/pc/app/base-select/slot-reference.spec.ts +1 -1
  151. package/demos/pc/app/base-select/webdoc/base-select.js +3 -3
  152. package/demos/pc/app/checkbox/checkbox-disabled-composition-api.vue +10 -0
  153. package/demos/pc/app/checkbox/checkbox-disabled.spec.ts +22 -0
  154. package/demos/pc/app/checkbox/checkbox-disabled.vue +18 -0
  155. package/demos/pc/app/checkbox/vertical-checkbox.spec.ts +4 -4
  156. package/demos/pc/app/checkbox/webdoc/checkbox.js +13 -0
  157. package/demos/pc/app/color-picker/webdoc/color-picker.js +2 -2
  158. package/demos/pc/app/color-select-panel/format.spec.ts +3 -3
  159. package/demos/pc/app/country/fields.spec.js +1 -1
  160. package/demos/pc/app/currency/basic-usage.spec.ts +1 -1
  161. package/demos/pc/app/currency/custom-service.spec.ts +3 -3
  162. package/demos/pc/app/date-panel/shortcuts.vue +23 -23
  163. package/demos/pc/app/date-panel/unlink-panels.spec.ts +12 -8
  164. package/demos/pc/app/dept/custom-service.spec.ts +6 -6
  165. package/demos/pc/app/directives/webdoc/directives-auto-tip.js +2 -0
  166. package/demos/pc/app/drawer/close-on-press-escape-composition-api.vue +29 -0
  167. package/demos/pc/app/drawer/close-on-press-escape.spec.ts +19 -0
  168. package/demos/pc/app/drawer/close-on-press-escape.vue +38 -0
  169. package/demos/pc/app/drawer/webdoc/drawer.js +12 -0
  170. package/demos/pc/app/drop-roles/custom-service.spec.ts +1 -1
  171. package/demos/pc/app/drop-times/basic-usage.spec.ts +2 -2
  172. package/demos/pc/app/drop-times/start-end-step.spec.ts +1 -1
  173. package/demos/pc/app/dropdown/trigger-composition-api.vue +13 -0
  174. package/demos/pc/app/dropdown/trigger.spec.ts +13 -0
  175. package/demos/pc/app/dropdown/trigger.vue +13 -0
  176. package/demos/pc/app/dropdown/webdoc/dropdown.js +4 -4
  177. package/demos/pc/app/file-upload/upload-file-list-saas.spec.ts +0 -2
  178. package/demos/pc/app/form/basic-usage.spec.ts +2 -2
  179. package/demos/pc/app/form/custom-validation-string-length.vue +38 -0
  180. package/demos/pc/app/form/webdoc/form.js +12 -0
  181. package/demos/pc/app/grid/custom/column-simple.spec.js +2 -2
  182. package/demos/pc/app/grid/data-source/undefined-field-defalut-value-composition-api.vue +51 -0
  183. package/demos/pc/app/grid/data-source/undefined-field-defalut-value.spec.js +52 -0
  184. package/demos/pc/app/grid/data-source/undefined-field-defalut-value.vue +61 -0
  185. package/demos/pc/app/grid/editor/custom-editor-select-composition-api.vue +6 -1
  186. package/demos/pc/app/grid/editor/custom-editor-select.spec.js +5 -4
  187. package/demos/pc/app/grid/editor/custom-editor-select.vue +5 -1
  188. package/demos/pc/app/grid/editor/mutil-render.spec.js +4 -1
  189. package/demos/pc/app/grid/filter/server-filter-composition-api.vue +1 -1
  190. package/demos/pc/app/grid/filter/server-filter.vue +1 -1
  191. package/demos/pc/app/grid/webdoc/grid-data-source.js +12 -0
  192. package/demos/pc/app/grid-select/basic-usage-composition-api.vue +29 -1
  193. package/demos/pc/app/grid-select/basic-usage.vue +30 -1
  194. package/demos/pc/app/grid-select/config.spec.ts +24 -0
  195. package/demos/pc/app/grid-select/config.vue +1 -1
  196. package/demos/pc/app/grid-select/extra-query-params-composition-api.vue +110 -0
  197. package/demos/pc/app/grid-select/extra-query-params.spec.ts +21 -0
  198. package/demos/pc/app/grid-select/extra-query-params.vue +129 -0
  199. package/demos/pc/app/grid-select/init-query-composition-api.vue +119 -0
  200. package/demos/pc/app/grid-select/init-query.spec.ts +30 -0
  201. package/demos/pc/app/grid-select/init-query.vue +127 -0
  202. package/demos/pc/app/grid-select/radio-bigdata-composition-api.vue +44 -0
  203. package/demos/pc/app/grid-select/radio-bigdata.spec.ts +19 -0
  204. package/demos/pc/app/grid-select/radio-bigdata.vue +52 -0
  205. package/demos/pc/app/grid-select/remote.spec.ts +23 -0
  206. package/demos/pc/app/grid-select/remote.vue +2 -1
  207. package/demos/pc/app/grid-select/webdoc/grid-select.js +48 -29
  208. package/demos/pc/app/guide/basic-usage-composition-api.vue +4 -1
  209. package/demos/pc/app/guide/basic-usage.vue +4 -1
  210. package/demos/pc/app/guide/callback-composition-api.vue +1 -0
  211. package/demos/pc/app/guide/callback.vue +1 -0
  212. package/demos/pc/app/icon/advance-icons.js +412 -0
  213. package/demos/pc/app/icon/advance-usage-composition-api.vue +174 -0
  214. package/demos/pc/app/icon/advance-usage.vue +200 -0
  215. package/demos/pc/app/icon/webdoc/icon.js +20 -0
  216. package/demos/pc/app/modal/modal-header.vue +16 -2
  217. package/demos/pc/app/modal/webdoc/modal.js +7 -6
  218. package/demos/pc/app/query-builder/webdoc/query-builder.js +17 -14
  219. package/demos/pc/app/scroll-text/scroll-direction.spec.ts +4 -4
  220. package/demos/pc/app/select/allow-create.spec.ts +3 -3
  221. package/demos/pc/app/select/automatic-dropdown.spec.ts +2 -2
  222. package/demos/pc/app/select/basic-usage.spec.ts +3 -3
  223. package/demos/pc/app/select/binding-obj.spec.ts +2 -2
  224. package/demos/pc/app/select/cache-usage.spec.ts +2 -2
  225. package/demos/pc/app/select/clearable.spec.ts +1 -1
  226. package/demos/pc/app/select/webdoc/select.js +17 -11
  227. package/demos/pc/app/select-wrapper/all-text-composition-api.vue +35 -0
  228. package/demos/pc/app/select-wrapper/all-text.spec.ts +13 -0
  229. package/demos/pc/app/select-wrapper/all-text.vue +43 -0
  230. package/demos/pc/app/select-wrapper/allow-create-composition-api.vue +102 -0
  231. package/demos/pc/app/select-wrapper/allow-create.spec.ts +50 -0
  232. package/demos/pc/app/select-wrapper/allow-create.vue +112 -0
  233. package/demos/pc/app/select-wrapper/automatic-dropdown-composition-api.vue +54 -0
  234. package/demos/pc/app/select-wrapper/automatic-dropdown.spec.ts +31 -0
  235. package/demos/pc/app/select-wrapper/automatic-dropdown.vue +62 -0
  236. package/demos/pc/app/select-wrapper/basic-usage-composition-api.vue +38 -0
  237. package/demos/pc/app/select-wrapper/basic-usage.spec.ts +47 -0
  238. package/demos/pc/app/select-wrapper/basic-usage.vue +47 -0
  239. package/demos/pc/app/select-wrapper/binding-obj-composition-api.vue +35 -0
  240. package/demos/pc/app/select-wrapper/binding-obj.spec.ts +21 -0
  241. package/demos/pc/app/select-wrapper/binding-obj.vue +44 -0
  242. package/demos/pc/app/select-wrapper/cache-usage-composition-api.vue +39 -0
  243. package/demos/pc/app/select-wrapper/cache-usage.spec.ts +19 -0
  244. package/demos/pc/app/select-wrapper/cache-usage.vue +49 -0
  245. package/demos/pc/app/select-wrapper/clear-no-match-value-composition-api.vue +46 -0
  246. package/demos/pc/app/select-wrapper/clear-no-match-value.spec.ts +24 -0
  247. package/demos/pc/app/select-wrapper/clear-no-match-value.vue +54 -0
  248. package/demos/pc/app/select-wrapper/clearable-composition-api.vue +25 -0
  249. package/demos/pc/app/select-wrapper/clearable.spec.ts +21 -0
  250. package/demos/pc/app/select-wrapper/clearable.vue +34 -0
  251. package/demos/pc/app/select-wrapper/collapse-tags-composition-api.vue +54 -0
  252. package/demos/pc/app/select-wrapper/collapse-tags.spec.ts +32 -0
  253. package/demos/pc/app/select-wrapper/collapse-tags.vue +62 -0
  254. package/demos/pc/app/select-wrapper/copy-multi-composition-api.vue +66 -0
  255. package/demos/pc/app/select-wrapper/copy-multi.spec.ts +65 -0
  256. package/demos/pc/app/select-wrapper/copy-multi.vue +77 -0
  257. package/demos/pc/app/select-wrapper/copy-single-composition-api.vue +150 -0
  258. package/demos/pc/app/select-wrapper/copy-single.spec.ts +76 -0
  259. package/demos/pc/app/select-wrapper/copy-single.vue +157 -0
  260. package/demos/pc/app/select-wrapper/disabled-composition-api.vue +101 -0
  261. package/demos/pc/app/select-wrapper/disabled.spec.ts +88 -0
  262. package/demos/pc/app/select-wrapper/disabled.vue +108 -0
  263. package/demos/pc/app/select-wrapper/events-composition-api.vue +109 -0
  264. package/demos/pc/app/select-wrapper/events.spec.ts +72 -0
  265. package/demos/pc/app/select-wrapper/events.vue +112 -0
  266. package/demos/pc/app/select-wrapper/extra-query-params-composition-api.vue +155 -0
  267. package/demos/pc/app/select-wrapper/extra-query-params.vue +157 -0
  268. package/demos/pc/app/select-wrapper/filter-method-composition-api.vue +75 -0
  269. package/demos/pc/app/select-wrapper/filter-method.spec.ts +89 -0
  270. package/demos/pc/app/select-wrapper/filter-method.vue +85 -0
  271. package/demos/pc/app/select-wrapper/filter-mode-composition-api.vue +37 -0
  272. package/demos/pc/app/select-wrapper/filter-mode.vue +46 -0
  273. package/demos/pc/app/select-wrapper/hide-drop-composition-api.vue +25 -0
  274. package/demos/pc/app/select-wrapper/hide-drop.spec.ts +12 -0
  275. package/demos/pc/app/select-wrapper/hide-drop.vue +34 -0
  276. package/demos/pc/app/select-wrapper/init-label-composition-api.vue +57 -0
  277. package/demos/pc/app/select-wrapper/init-label.vue +65 -0
  278. package/demos/pc/app/select-wrapper/input-box-type-composition-api.vue +49 -0
  279. package/demos/pc/app/select-wrapper/input-box-type.spec.ts +71 -0
  280. package/demos/pc/app/select-wrapper/input-box-type.vue +58 -0
  281. package/demos/pc/app/select-wrapper/is-drop-inherit-width-composition-api.vue +42 -0
  282. package/demos/pc/app/select-wrapper/is-drop-inherit-width.spec.ts +34 -0
  283. package/demos/pc/app/select-wrapper/is-drop-inherit-width.vue +51 -0
  284. package/demos/pc/app/select-wrapper/manual-focus-blur-composition-api.vue +88 -0
  285. package/demos/pc/app/select-wrapper/manual-focus-blur.spec.ts +18 -0
  286. package/demos/pc/app/select-wrapper/manual-focus-blur.vue +90 -0
  287. package/demos/pc/app/select-wrapper/map-field-composition-api.vue +61 -0
  288. package/demos/pc/app/select-wrapper/map-field.spec.ts +60 -0
  289. package/demos/pc/app/select-wrapper/map-field.vue +68 -0
  290. package/demos/pc/app/select-wrapper/memoize-usage-composition-api.vue +52 -0
  291. package/demos/pc/app/select-wrapper/memoize-usage.spec.ts +19 -0
  292. package/demos/pc/app/select-wrapper/memoize-usage.vue +66 -0
  293. package/demos/pc/app/select-wrapper/multiple-composition-api.vue +139 -0
  294. package/demos/pc/app/select-wrapper/multiple-mix-composition-api.vue +75 -0
  295. package/demos/pc/app/select-wrapper/multiple-mix.vue +84 -0
  296. package/demos/pc/app/select-wrapper/multiple.spec.ts +52 -0
  297. package/demos/pc/app/select-wrapper/multiple.vue +146 -0
  298. package/demos/pc/app/select-wrapper/native-properties-composition-api.vue +25 -0
  299. package/demos/pc/app/select-wrapper/native-properties.spec.ts +16 -0
  300. package/demos/pc/app/select-wrapper/native-properties.vue +34 -0
  301. package/demos/pc/app/select-wrapper/nest-grid-composition-api.vue +99 -0
  302. package/demos/pc/app/select-wrapper/nest-grid-disable-composition-api.vue +88 -0
  303. package/demos/pc/app/select-wrapper/nest-grid-disable.spec.ts +41 -0
  304. package/demos/pc/app/select-wrapper/nest-grid-disable.vue +122 -0
  305. package/demos/pc/app/select-wrapper/nest-grid-init-query-composition-api.vue +122 -0
  306. package/demos/pc/app/select-wrapper/nest-grid-init-query.vue +129 -0
  307. package/demos/pc/app/select-wrapper/nest-grid-remote-composition-api.vue +127 -0
  308. package/demos/pc/app/select-wrapper/nest-grid-remote.spec.ts +136 -0
  309. package/demos/pc/app/select-wrapper/nest-grid-remote.vue +144 -0
  310. package/demos/pc/app/select-wrapper/nest-grid.spec.ts +95 -0
  311. package/demos/pc/app/select-wrapper/nest-grid.vue +106 -0
  312. package/demos/pc/app/select-wrapper/nest-radio-grid-much-data-composition-api.vue +43 -0
  313. package/demos/pc/app/select-wrapper/nest-radio-grid-much-data.spec.ts +35 -0
  314. package/demos/pc/app/select-wrapper/nest-radio-grid-much-data.vue +50 -0
  315. package/demos/pc/app/select-wrapper/nest-tree-composition-api.vue +97 -0
  316. package/demos/pc/app/select-wrapper/nest-tree.spec.ts +84 -0
  317. package/demos/pc/app/select-wrapper/nest-tree.vue +164 -0
  318. package/demos/pc/app/select-wrapper/no-data-text-composition-api.vue +39 -0
  319. package/demos/pc/app/select-wrapper/no-data-text.spec.ts +39 -0
  320. package/demos/pc/app/select-wrapper/no-data-text.vue +48 -0
  321. package/demos/pc/app/select-wrapper/optimization-composition-api.vue +50 -0
  322. package/demos/pc/app/select-wrapper/optimization.spec.ts +46 -0
  323. package/demos/pc/app/select-wrapper/optimization.vue +59 -0
  324. package/demos/pc/app/select-wrapper/option-group-composition-api.vue +96 -0
  325. package/demos/pc/app/select-wrapper/option-group.spec.ts +22 -0
  326. package/demos/pc/app/select-wrapper/option-group.vue +105 -0
  327. package/demos/pc/app/select-wrapper/popup-style-position-composition-api.vue +31 -0
  328. package/demos/pc/app/select-wrapper/popup-style-position.spec.ts +16 -0
  329. package/demos/pc/app/select-wrapper/popup-style-position.vue +40 -0
  330. package/demos/pc/app/select-wrapper/remote-method-composition-api.vue +283 -0
  331. package/demos/pc/app/select-wrapper/remote-method.spec.ts +68 -0
  332. package/demos/pc/app/select-wrapper/remote-method.vue +286 -0
  333. package/demos/pc/app/select-wrapper/searchable-composition-api.vue +46 -0
  334. package/demos/pc/app/select-wrapper/searchable.spec.ts +66 -0
  335. package/demos/pc/app/select-wrapper/searchable.vue +55 -0
  336. package/demos/pc/app/select-wrapper/show-alloption-composition-api.vue +25 -0
  337. package/demos/pc/app/select-wrapper/show-alloption.spec.ts +15 -0
  338. package/demos/pc/app/select-wrapper/show-alloption.vue +34 -0
  339. package/demos/pc/app/select-wrapper/show-tip-composition-api.vue +19 -0
  340. package/demos/pc/app/select-wrapper/show-tip.vue +28 -0
  341. package/demos/pc/app/select-wrapper/size-composition-api.vue +49 -0
  342. package/demos/pc/app/select-wrapper/size.spec.ts +61 -0
  343. package/demos/pc/app/select-wrapper/size.vue +57 -0
  344. package/demos/pc/app/select-wrapper/slot-default-composition-api.vue +86 -0
  345. package/demos/pc/app/select-wrapper/slot-default.spec.ts +18 -0
  346. package/demos/pc/app/select-wrapper/slot-default.vue +95 -0
  347. package/demos/pc/app/select-wrapper/slot-empty-composition-api.vue +35 -0
  348. package/demos/pc/app/select-wrapper/slot-empty.spec.ts +16 -0
  349. package/demos/pc/app/select-wrapper/slot-empty.vue +44 -0
  350. package/demos/pc/app/select-wrapper/slot-header-footer-composition-api.vue +45 -0
  351. package/demos/pc/app/select-wrapper/slot-header-footer.spec.ts +17 -0
  352. package/demos/pc/app/select-wrapper/slot-header-footer.vue +55 -0
  353. package/demos/pc/app/select-wrapper/slot-label-composition-api.vue +77 -0
  354. package/demos/pc/app/select-wrapper/slot-label.vue +85 -0
  355. package/demos/pc/app/select-wrapper/slot-prefix-composition-api.vue +31 -0
  356. package/demos/pc/app/select-wrapper/slot-prefix.spec.ts +18 -0
  357. package/demos/pc/app/select-wrapper/slot-prefix.vue +39 -0
  358. package/demos/pc/app/select-wrapper/slot-reference-composition-api.vue +33 -0
  359. package/demos/pc/app/select-wrapper/slot-reference.spec.ts +16 -0
  360. package/demos/pc/app/select-wrapper/slot-reference.vue +41 -0
  361. package/demos/pc/app/select-wrapper/tag-type-composition-api.vue +27 -0
  362. package/demos/pc/app/select-wrapper/tag-type.spec.ts +13 -0
  363. package/demos/pc/app/select-wrapper/tag-type.vue +36 -0
  364. package/demos/pc/app/select-wrapper/webdoc/select-wrapper.cn.md +7 -0
  365. package/demos/pc/app/select-wrapper/webdoc/select-wrapper.en.md +7 -0
  366. package/demos/pc/app/select-wrapper/webdoc/select-wrapper.js +721 -0
  367. package/demos/pc/app/space/space-size.vue +1 -1
  368. package/demos/pc/app/switch/webdoc/switch.js +12 -0
  369. package/demos/pc/app/switch/width-composition-api.vue +29 -0
  370. package/demos/pc/app/switch/width.spec.ts +17 -0
  371. package/demos/pc/app/switch/width.vue +35 -0
  372. package/demos/pc/app/tabs/header-only-composition-api.vue +56 -0
  373. package/demos/pc/app/tabs/header-only.vue +40 -29
  374. package/demos/pc/app/time-picker/picker-options.spec.ts +3 -4
  375. package/demos/pc/app/time-picker/step.spec.ts +2 -2
  376. package/demos/pc/app/transfer/basic-usage.spec.ts +4 -4
  377. package/demos/pc/app/tree/filter-view.spec.ts +1 -1
  378. package/demos/pc/app/tree-menu/clearable.spec.ts +1 -5
  379. package/demos/pc/app/tree-select/collapse-tags.vue +2 -18
  380. package/demos/pc/app/tree-select/lazy-composition-api.vue +51 -0
  381. package/demos/pc/app/tree-select/lazy-multiple-composition-api.vue +58 -0
  382. package/demos/pc/app/tree-select/lazy-multiple.vue +66 -0
  383. package/demos/pc/app/tree-select/lazy.vue +59 -0
  384. package/demos/pc/app/tree-select/webdoc/tree-select.js +14 -0
  385. package/demos/pc/app/user/custom-service.spec.ts +1 -1
  386. package/demos/pc/menus.js +19 -10
  387. package/demos/pc/webdoc/architecture.png +0 -0
  388. package/demos/pc/webdoc/import-components-en.md +4 -2
  389. package/demos/pc/webdoc/import-components.md +4 -2
  390. package/demos/pc/webdoc/installation-en.md +5 -3
  391. package/demos/pc/webdoc/installation.md +5 -3
  392. package/demos/pc/webdoc/introduce.md +64 -0
  393. package/demos/pc/webdoc/motion-configuration-en.md +183 -0
  394. package/demos/pc/webdoc/motion-configuration.md +183 -0
  395. package/demos/pc/webdoc/theme-en.md +7 -5
  396. package/demos/pc/webdoc/theme.md +12 -7
  397. package/demos/saas/menus.js +14 -1
  398. package/env/.env.saaspages +1 -1
  399. package/package.json +20 -20
  400. package/playground/App.vue +270 -84
  401. package/playground/assets/icon-layout-vertical.svg +4 -0
  402. package/playground/icons/Github.vue +14 -2
  403. package/playground/icons/Layout.vue +18 -0
  404. package/playground/icons/Reverse.vue +115 -0
  405. package/playground/icons/Set.vue +80 -0
  406. package/playground/icons/Share.vue +103 -8
  407. package/playground/icons/Vertical.vue +19 -0
  408. package/public/static/css/design-common.css +1 -0
  409. package/src/assets/custom-block.less +2 -2
  410. package/src/components/anchor.vue +2 -1
  411. package/src/components/api-docs.vue +2 -2
  412. package/src/components/async-highlight.vue +6 -0
  413. package/src/components/header.vue +19 -0
  414. package/src/views/components-doc/common.vue +20 -3
  415. package/src/views/overview.vue +1 -1
  416. package/demos/pc/app/grid-select/filter-composition-api.vue +0 -49
  417. package/demos/pc/app/grid-select/filter.vue +0 -57
  418. package/demos/pc/app/grid-select/multiple-composition-api.vue +0 -38
  419. package/demos/pc/app/grid-select/multiple.vue +0 -45
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@opentiny/vue-docs",
3
3
  "type": "module",
4
- "version": "3.27.1",
4
+ "version": "3.28.0",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
7
  "@docsearch/css": "^3.8.0",
8
8
  "@docsearch/js": "^3.8.0",
9
9
  "@docsearch/react": "npm:@docsearch/css",
10
- "@opentiny/tiny-vue-mcp": "^0.0.4",
10
+ "@opentiny/tiny-vue-mcp": "^0.0.5",
11
11
  "@opentiny/vue-repl": "^1.1.2",
12
12
  "@opentiny/vue-vite-import": "~1.2.0",
13
13
  "@unocss/reset": "0.38.2",
@@ -27,24 +27,24 @@
27
27
  "vue-i18n": "~9.14.3",
28
28
  "vue-router": "4.1.5",
29
29
  "zod": "^3.24.4",
30
- "@opentiny/utils": "~3.27.0",
31
- "@opentiny/vue": "~3.27.0",
32
- "@opentiny/vue-common": "~3.27.0",
33
- "@opentiny/vue-design-aurora": "~3.27.0",
34
- "@opentiny/vue-design-saas": "~3.27.0",
35
- "@opentiny/vue-design-smb": "~3.27.0",
36
- "@opentiny/vue-directive": "~3.27.0",
37
- "@opentiny/vue-flowchart": "~3.27.0",
38
- "@opentiny/vue-hooks": "~3.27.0",
39
- "@opentiny/vue-huicharts": "~3.27.0",
40
- "@opentiny/vue-icon": "~3.27.0",
41
- "@opentiny/vue-icon-saas": "~3.27.0",
42
- "@opentiny/vue-icon-multicolor": "~3.27.0",
43
- "@opentiny/vue-locale": "~3.27.0",
44
- "@opentiny/vue-renderless": "~3.27.0",
45
- "@opentiny/vue-modal": "~3.27.0",
46
- "@opentiny/vue-theme": "~3.27.0",
47
- "@opentiny/vue-theme-saas": "~3.27.0"
30
+ "@opentiny/utils": "~3.28.0",
31
+ "@opentiny/vue": "~3.28.0",
32
+ "@opentiny/vue-common": "~3.28.0",
33
+ "@opentiny/vue-design-aurora": "~3.28.0",
34
+ "@opentiny/vue-design-saas": "~3.28.0",
35
+ "@opentiny/vue-directive": "~3.28.0",
36
+ "@opentiny/vue-design-smb": "~3.28.0",
37
+ "@opentiny/vue-flowchart": "~3.28.0",
38
+ "@opentiny/vue-huicharts": "~3.28.0",
39
+ "@opentiny/vue-hooks": "~3.28.0",
40
+ "@opentiny/vue-icon": "~3.28.0",
41
+ "@opentiny/vue-icon-multicolor": "~3.28.0",
42
+ "@opentiny/vue-icon-saas": "~3.28.0",
43
+ "@opentiny/vue-locale": "~3.28.0",
44
+ "@opentiny/vue-modal": "~3.28.0",
45
+ "@opentiny/vue-renderless": "~3.28.0",
46
+ "@opentiny/vue-theme": "~3.28.0",
47
+ "@opentiny/vue-theme-saas": "~3.28.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@playwright/test": "~1.49.0",
@@ -1,15 +1,19 @@
1
1
  <script setup lang="jsx">
2
- import { onMounted, reactive, nextTick } from 'vue'
2
+ import { onMounted, reactive, nextTick, ref } from 'vue'
3
3
  import { Repl, useStore, File } from '@opentiny/vue-repl'
4
4
  import '@opentiny/vue-repl/dist/style.css'
5
5
 
6
6
  import Editor from '@vue/repl/codemirror-editor'
7
- import { TinyButtonGroup, TinyButton, TinySelect, TinyOption, TinySwitch, Notify } from '@opentiny/vue'
7
+ import { TinyButton, TinySelect, TinyOption, Notify, TinyTooltip } from '@opentiny/vue'
8
8
  import { staticDemoPath, getWebdocPath } from '@/views/components-doc/cmp-config'
9
9
  import { fetchDemosFile } from '@/tools/utils'
10
10
  import logoUrl from './assets/opentiny-logo.svg?url'
11
11
  import GitHub from './icons/Github.vue'
12
12
  import Share from './icons/Share.vue'
13
+ import Set from './icons/Set.vue'
14
+ import Layout from './icons/Layout.vue'
15
+ import Reverse from './icons/Reverse.vue'
16
+ import Vertical from './icons/Vertical.vue'
13
17
 
14
18
  const VERSION = 'tiny-vue-version-3.27'
15
19
  const NOTIFY_KEY = 'tiny-vue-playground-notify'
@@ -21,15 +25,16 @@ const tinyMode = searchObj.get('mode')
21
25
  const tinyTheme = searchObj.get('theme')
22
26
  const isMobileFirst = tinyMode === 'mobile-first'
23
27
  const isSaas = tinyTheme === 'saas'
24
- const isPreview = searchObj.get('openMode') === 'preview' // 是否多端弹窗预览
25
-
28
+ const isPreview = searchObj.get('openMode') === 'preview'
26
29
  const versions = ['3.27', '3.26', '3.25']
30
+ const manualShow = ref(false)
31
+
27
32
  const getVersion = () => {
28
33
  if (isPreview) {
29
34
  return versions[0]
30
35
  }
31
36
  if (versions.includes(localStorage.getItem(VERSION))) {
32
- localStorage.getItem(VERSION)
37
+ return localStorage.getItem(VERSION)
33
38
  }
34
39
  return versions[0]
35
40
  }
@@ -52,7 +57,7 @@ const showNotify = () => {
52
57
  message: () => (
53
58
  <div>
54
59
  <div>演练场仅保留最新的三个版本可选。</div>
55
- <div style="text-align: right;margin-top: 12px;">
60
+ <div style="text-align: right; margin-top: 12px;">
56
61
  <TinyButton onClick={muteNotify} type={'primary'}>
57
62
  不再提示
58
63
  </TinyButton>
@@ -93,9 +98,7 @@ const createImportMap = (version) => {
93
98
  imports['@opentiny/vue-common'] = `${getRuntime(version)}tiny-vue-saas-common.mjs`
94
99
  imports['@opentiny/vue'] = `${getRuntime(version)}tiny-vue-all.mjs`
95
100
  }
96
- return {
97
- imports
98
- }
101
+ return { imports }
99
102
  }
100
103
 
101
104
  const getTinyTheme = (version) => {
@@ -103,9 +106,8 @@ const getTinyTheme = (version) => {
103
106
  return `${getRuntime(version)}tailwind.css`
104
107
  }
105
108
  let theme = tinyTheme
106
- if (!['aurora', 'saas'].includes(theme)) {
107
- theme = 'default'
108
- }
109
+ if (!['aurora', 'saas'].includes(theme)) theme = 'default'
110
+
109
111
  const tinyThemeMap = {
110
112
  default: `${cdnHost}/@opentiny/vue-theme${versionDelimiter}${version}/${fileDelimiter}index.css`,
111
113
  aurora: `${cdnHost}/@opentiny/vue-theme${versionDelimiter}${version}/${fileDelimiter}index.css`,
@@ -114,7 +116,7 @@ const getTinyTheme = (version) => {
114
116
  return tinyThemeMap[theme]
115
117
  }
116
118
 
117
- // 如果hash有效,它格式为: 3.8.4|eNqIVV9p.............
119
+ // 如果hash有效,它格式为: 3.8.4|eNqIVV9p............."
118
120
  const hash = location.hash.slice(1)
119
121
  const shareData = hash.split('|')
120
122
 
@@ -149,13 +151,45 @@ const designThemeMap = {
149
151
  old: 'tinyOldTheme'
150
152
  }
151
153
 
154
+ // 定义选项数据
155
+ const layoutItems = [
156
+ {
157
+ id: 1,
158
+ text: '水平布局',
159
+ iconPath: 'Layout'
160
+ },
161
+ {
162
+ id: 2,
163
+ text: '垂直布局',
164
+ iconPath: 'Vertical'
165
+ },
166
+ {
167
+ id: 3,
168
+ text: '布局反转',
169
+ iconPath: 'Reverse'
170
+ }
171
+ ]
172
+
173
+ // 选中状态管理
174
+ const selectedIndex = ref(0)
175
+
176
+ // 选择 item 函数
177
+ const selectItem = (index) => {
178
+ selectedIndex.value = index
179
+ if (index === 0) {
180
+ changeLayout('horizon')
181
+ } else if (index === 1) {
182
+ changeLayout('vertical')
183
+ } else {
184
+ changeReserve()
185
+ }
186
+ }
187
+
152
188
  function setTinyDesign() {
153
189
  let importCode = ''
154
190
  let useCode = ''
155
191
 
156
- if (isMobileFirst) {
157
- useCode += 'app.provide("TinyMode", "mobile-first");\n'
158
- }
192
+ if (isMobileFirst) useCode += 'app.provide("TinyMode", "mobile-first");\n'
159
193
 
160
194
  if (['aurora', 'saas', 'smb'].includes(tinyTheme)) {
161
195
  importCode += `import designConfig from '@opentiny/vue-design-${tinyTheme}';
@@ -170,10 +204,7 @@ function setTinyDesign() {
170
204
  useCode += `const theme = new TinyThemeTool(${designTheme});\n`
171
205
  }
172
206
 
173
- state.previewOptions.customCode = {
174
- importCode,
175
- useCode
176
- }
207
+ state.previewOptions.customCode = { importCode, useCode }
177
208
  }
178
209
 
179
210
  function selectVersion(version) {
@@ -189,13 +220,15 @@ function versionChange(version) {
189
220
 
190
221
  function insertStyleDom(version) {
191
222
  nextTick(() => {
192
- if (!document.querySelector('iframe')) return
223
+ const iframe = document.querySelector('iframe')
224
+ if (!iframe) return
193
225
 
194
- const iframeWin = document.querySelector('iframe').contentWindow
226
+ const iframeWin = iframe.contentWindow
195
227
  const link = iframeWin.document.createElement('link')
196
228
  link.id = 'tiny-theme'
197
229
  link.rel = 'stylesheet'
198
230
  link.href = getTinyTheme(version)
231
+
199
232
  iframeWin.addEventListener('DOMContentLoaded', () => {
200
233
  iframeWin.document.head.append(link)
201
234
 
@@ -209,29 +242,25 @@ function insertStyleDom(version) {
209
242
 
210
243
  function changeLayout(layout) {
211
244
  localStorage.setItem(LAYOUT, layout)
245
+ state.layout = layout
212
246
  }
213
247
 
214
- function changeReserve(isReserve) {
248
+ function changeReserve() {
249
+ state.layoutReverse = !state.layoutReverse
250
+ localStorage.setItem(LAYOUT_REVERSE, state.layoutReverse)
215
251
  insertStyleDom(state.selectVersion)
216
- localStorage.setItem(LAYOUT_REVERSE, isReserve)
217
252
  }
218
253
 
219
254
  function getDemoName(name, apiMode) {
220
255
  return name.replace(/\.vue$/, `${apiMode === 'Options' ? '' : '-composition-api'}.vue`)
221
256
  }
222
257
 
223
- // eslint-disable-next-line unused-imports/no-unused-vars
224
258
  const getDemoCode = async ({ cmpId, fileName, apiMode, mode }) => {
225
259
  const demoName = getDemoName(`${getWebdocPath(cmpId)}/${fileName}`, apiMode)
226
260
  const path = tinyMode === 'mobile-first' ? `@demos/mobile-first/app/${demoName}` : `${staticDemoPath}/${demoName}`
227
261
  const code = await fetchDemosFile(path)
228
- .then((code) => {
229
- return code
230
- })
231
- .catch(() => {
232
- return `${demoName}示例资源不存在,请检查文件名是否正确?`
233
- })
234
-
262
+ .then((code) => code)
263
+ .catch(() => `${demoName}示例资源不存在,请检查文件名是否正确?`)
235
264
  return code
236
265
  }
237
266
 
@@ -243,21 +272,35 @@ const loadFileCode = async ({ cmpId, fileName, apiMode, mode }) => {
243
272
  versionChange(latestVersion)
244
273
  }
245
274
 
275
+ // 分享功能
276
+ const share = () => {
277
+ const hash = store.serialize()
278
+ const shareUrl = `${location.origin}${import.meta.env.VITE_PLAYGROUND_URL}?mode=${tinyMode}&theme=${tinyTheme}#${state.selectVersion}|${hash}`
279
+
280
+ navigator.clipboard.writeText(shareUrl)
281
+ Notify({
282
+ type: 'success',
283
+ title: '分享',
284
+ message: '当前URL已被复制到剪贴板.',
285
+ duration: 2000
286
+ })
287
+ }
288
+
246
289
  onMounted(() => {
247
290
  setTinyDesign()
248
- // 初始加载,有分享则加载分享,否则加载默认版本的默认文件
291
+ // 初始加载,有分享则加载分享,否则加载默认版本的默认文件
249
292
  if (shareData.length === 2) {
250
293
  const demoFile = Object.values(store.state.files).find(
251
294
  (file) =>
252
295
  file.filename.startsWith('src/') &&
253
296
  file.filename.endsWith('.vue') &&
254
- file.filename !== 'src/App.vue' &&
255
- file.filename !== 'src/PlaygroundMain.vue'
297
+ !['src/App.vue', 'src/PlaygroundMain.vue'].includes(file.filename)
256
298
  )
257
-
258
- store.state.mainFile = demoFile.filename
259
- store.state.activeFile = demoFile
260
- versionChange(shareData[0])
299
+ if (demoFile) {
300
+ store.state.mainFile = demoFile.filename
301
+ store.state.activeFile = demoFile
302
+ versionChange(shareData[0])
303
+ }
261
304
  } else {
262
305
  const fileName = searchObj.get('fileName')
263
306
  const cmpId = searchObj.get('cmpId')
@@ -268,72 +311,82 @@ onMounted(() => {
268
311
  }
269
312
  }
270
313
  })
271
- // 分享功能
272
- function share() {
273
- const hash = store.serialize()
274
- const shareUrl =
275
- location.origin +
276
- `${import.meta.env.VITE_PLAYGROUND_URL}?mode=${tinyMode}&theme=${tinyTheme}#` +
277
- state.selectVersion +
278
- '|' +
279
- hash
280
-
281
- navigator.clipboard.writeText(shareUrl)
282
- Notify({
283
- type: 'success',
284
- title: '分享',
285
- message: '当前URL已被复制到剪贴板.',
286
- duration: 2000
287
- })
288
- }
289
314
  </script>
290
315
 
291
316
  <template>
292
317
  <div class="header">
293
- <div class="title"><img class="logo" :src="logoUrl" /> <span class="mobile-hide">OpenTiny Vue 演练场</span></div>
318
+ <div class="title">
319
+ <img class="logo" :src="logoUrl" />
320
+ <span class="mobile-hide">OpenTiny Vue 演练场</span>
321
+ </div>
294
322
  <div>
295
- <span class="ml20 mobile-hide">
296
- 布局方向:
297
- <tiny-button-group
298
- :data="state.layoutOptions"
299
- v-model="state.layout"
300
- @change="changeLayout"
301
- ></tiny-button-group>
302
- </span>
303
- <span class="ml20 mobile-hide">
304
- 布局反转:
305
- <tiny-switch v-model="state.layoutReverse" mini @change="changeReserve"></tiny-switch>
306
- </span>
307
- <span class="ml20">
308
- <span class="mobile-hide">OpenTiny Vue 版本: </span>
323
+ <div class="select-opt">
309
324
  <tiny-select
310
325
  v-model="state.selectVersion"
311
- style="width: 150px"
326
+ style="width: 200px"
312
327
  :disabled="isPreview"
313
328
  @change="selectVersion"
314
329
  @click="showNotify"
330
+ size="medium"
315
331
  >
316
- <tiny-option v-for="item in state.versions" :key="item.value" :label="item.value" :value="item.value">
317
- </tiny-option>
332
+ <tiny-option
333
+ v-for="item in state.versions"
334
+ :key="item.value"
335
+ :label="`版本:${item.value}`"
336
+ :value="item.value"
337
+ />
318
338
  </tiny-select>
319
- </span>
320
- <Share @click="share" title="分享" class="share" />
339
+ </div>
340
+ <tiny-tooltip v-model="manualShow" placement="top" effect="light" manual>
341
+ <template #content>
342
+ <div class="tip-ctn">
343
+ <p class="tip-ctn-title">设置布局</p>
344
+ <div class="tip-container">
345
+ <div
346
+ v-for="(item, index) in layoutItems"
347
+ :key="item.id"
348
+ class="tip-element"
349
+ :class="{ active: selectedIndex === index }"
350
+ @click="selectItem(index)"
351
+ >
352
+ <span class="tip-element-text">{{ item.text }}</span>
353
+ <span>
354
+ <Layout class="tip-element-icon" v-if="item.iconPath === 'Layout'" />
355
+ </span>
356
+ <span>
357
+ <Vertical class="tip-element-icon" v-if="item.iconPath === 'Vertical'" />
358
+ </span>
359
+ <span>
360
+ <Reverse class="tip-element-icon" v-if="item.iconPath === 'Reverse'" />
361
+ </span>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </template>
366
+ <div class="icon-wrapper">
367
+ <Set title="设置" class="icon-ref" :class="{ active: manualShow }" @click="manualShow = !manualShow" />
368
+ </div>
369
+ </tiny-tooltip>
370
+ <div class="icon-wrapper">
371
+ <Share @click="share" title="分享" class="icon-ref" />
372
+ </div>
321
373
  <a style="display: flex" href="https://github.com/opentiny/tiny-vue" target="_blank">
322
374
  <GitHub class="github" />
323
375
  </a>
324
376
  </div>
325
377
  </div>
326
378
  <Repl
379
+ ref="replRef"
327
380
  :editor="Editor"
328
381
  :store="store"
329
382
  :preview-options="state.previewOptions"
330
383
  :clear-console="false"
331
384
  :layout="state.layout"
332
385
  :layout-reverse="state.layoutReverse"
333
- ></Repl>
386
+ />
334
387
  </template>
335
388
 
336
- <style>
389
+ <style lang="less" scoped>
337
390
  * {
338
391
  box-sizing: border-box;
339
392
  }
@@ -377,18 +430,151 @@ function share() {
377
430
  }
378
431
 
379
432
  .vue-repl {
380
- /* 16px 是body默认margin*/
433
+ /* 16px 是body默认margin */
381
434
  height: calc(100vh - 36px - 16px) !important;
435
+ transition: width 0.3s ease; /* 添加宽度过渡 */
436
+ }
437
+
438
+ .github {
439
+ width: 32px;
440
+ height: 32px;
441
+ margin: 0 15px;
442
+ cursor: pointer;
382
443
  }
383
444
 
384
- .github,
385
445
  .share {
386
446
  width: 20px;
387
- margin-right: 10px;
447
+ height: 20px;
448
+ margin: 0 15px;
388
449
  cursor: pointer;
389
450
  }
390
451
 
391
- .share {
392
- margin-left: 10px;
452
+ .tip-ctn {
453
+ background: #fff;
454
+ padding: 8px 10px;
455
+
456
+ &-title {
457
+ margin: 0 0 10px 0;
458
+ }
459
+ }
460
+
461
+ .split-line {
462
+ width: 1px;
463
+ height: 12px;
464
+ background-color: #dbdbdb;
465
+ margin: 0 15px;
466
+ }
467
+
468
+ .select-opt {
469
+ margin-right: 15px;
470
+ .tiny-select .tiny-input .tiny-input__inner {
471
+ height: 32px;
472
+ }
473
+ }
474
+
475
+ .icon-wrapper {
476
+ padding: 9px;
477
+ margin: 0 6px;
478
+
479
+ &:hover {
480
+ background-color: #f5f5f5;
481
+ border-radius: 50%;
482
+ }
483
+
484
+ &:active {
485
+ background-color: #f5f5f5;
486
+ border-radius: 50%;
487
+ }
488
+ }
489
+
490
+ .icon-ref {
491
+ width: 14px;
492
+ height: 14px;
493
+ cursor: pointer;
494
+ display: block;
495
+ }
496
+
497
+ /* 添加高亮样式 */
498
+ .header img {
499
+ border: 2px solid transparent;
500
+ border-radius: 4px;
501
+ transition: all 0.3s ease;
502
+ margin: 0 2px;
503
+ }
504
+
505
+ .header img.active {
506
+ border-color: #1476ff;
507
+ background-color: rgba(64, 158, 255, 0.1);
508
+ box-shadow: 0 0 8px rgba(64, 158, 255, 0.5);
509
+ }
510
+
511
+ .screen-title {
512
+ display: inline-block;
513
+ vertical-align: top;
514
+ margin-right: 4px;
515
+ }
516
+
517
+ .tip-container {
518
+ display: flex;
519
+ flex-direction: row;
520
+ padding: 4px 2px;
521
+ gap: 20px;
522
+ backdrop-filter: blur(10px);
523
+ border-radius: 16px;
524
+ border: 1px solid rgba(255, 255, 255, 0.5);
525
+ }
526
+
527
+ .tip-element {
528
+ width: 112px;
529
+ height: 40px;
530
+ background-color: #fafafa;
531
+ border: 1px solid transparent;
532
+ border-radius: 8px;
533
+ display: flex;
534
+ align-items: center;
535
+ justify-content: space-between;
536
+ padding: 0 12px;
537
+ box-sizing: border-box;
538
+ cursor: pointer;
539
+ transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
540
+ user-select: none;
541
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
542
+ }
543
+
544
+ .tip-element:hover {
545
+ background-color: #f5f5f5;
546
+ transform: translateY(-2px);
547
+ }
548
+
549
+ .tip-element.active {
550
+ border: 1px solid #191919;
551
+ background-color: #f5f5f5;
552
+ }
553
+
554
+ .tip-element-text {
555
+ color: #191919;
556
+ font-size: 12px;
557
+ font-weight: 400;
558
+ margin-right: 8px;
559
+ letter-spacing: 0.2px;
560
+ }
561
+
562
+ .tip-element-icon {
563
+ width: 24px;
564
+ height: 24px;
565
+ margin-top: 6px;
566
+ transition: all 0.3s ease;
567
+ }
568
+
569
+ .tip-element.active .tip-element-icon {
570
+ transform: scale(1.1);
571
+ }
572
+
573
+ .tip-element:active {
574
+ transform: scale(0.98);
575
+ }
576
+
577
+ .tip-element.active:active {
578
+ transform: scale(0.98);
393
579
  }
394
580
  </style>
@@ -0,0 +1,4 @@
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none">
2
+ <rect id="上下布局" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
3
+ <path id="矢量 1" d="M5.4 1.2C6.06 1.2 6.6 1.74 6.6 2.4L6.6 14.4C6.6 15.06 6.06 15.6 5.4 15.6L2.4 15.6C1.74 15.6 1.2 15.06 1.2 14.4L1.2 2.4C1.2 1.74 1.74 1.2 2.4 1.2L5.4 1.2ZM5.4 0L2.4 0C1.08 0 0 1.08 0 2.4L0 14.4C0 15.72 1.08 16.8 2.4 16.8L5.4 16.8C6.72 16.8 7.8 15.72 7.8 14.4L7.8 2.4C7.8 1.08 6.72 0 5.4 0ZM16.8 2.4L16.8 14.4C16.8 15.72 15.72 16.8 14.4 16.8L11.4 16.8C10.08 16.8 9 15.72 9 14.4L9 2.4C9 1.08 10.08 0 11.4 0L14.4 0C15.72 0 16.8 1.08 16.8 2.4Z" fill="rgb(0,0,0)" fill-rule="nonzero" transform="matrix(0,1,1,0,3.6001,3.84009)" />
4
+ </svg>
@@ -1,7 +1,19 @@
1
1
  <template>
2
- <svg viewBox="0 0 24 24" fill="currentColor">
2
+ <svg
3
+ viewBox="0 0 32 32"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ xmlns:xlink="http://www.w3.org/1999/xlink"
6
+ width="32.000000"
7
+ height="32.000000"
8
+ fill="none"
9
+ customFrame="#000000"
10
+ >
11
+ <rect id="git" width="32.000000" height="32.000000" x="0.000000" y="0.000000" />
3
12
  <path
4
- d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.387.6.113.82-.258.82-.577v-2.234c-3.338.724-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.088-.744.083-.729.083-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.807 1.305 3.364.998.108-.788.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.933 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0112 5.803c1.02-.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.218.694.824.576C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12z"
13
+ id="Fill"
14
+ d="M15.9999 2.00008C9.13479 2.00101 3.28319 6.9797 2.18278 13.756C1.08237 20.5323 5.05785 27.1068 11.5699 29.2801C12.2699 29.4101 12.5699 28.9801 12.5699 28.6101C12.5699 28.2401 12.5699 27.4001 12.5699 26.2301C8.67987 27.0701 7.85988 24.3501 7.85988 24.3501C7.58633 23.4929 7.0106 22.7644 6.23987 22.3001C4.96987 21.4401 6.33988 21.4501 6.33988 21.4501C7.23883 21.5771 8.02868 22.1123 8.47987 22.9001C9.28646 24.3468 11.1128 24.866 12.5599 24.0601C12.6163 23.3506 12.9291 22.6858 13.4399 22.1901C10.3399 21.8301 7.06987 20.6301 7.06987 15.2701C7.0472 13.878 7.5631 12.5309 8.50987 11.5101C8.08134 10.3043 8.13144 8.98006 8.64988 7.81008C8.64988 7.81008 9.81988 7.43008 12.4999 9.24008C14.7913 8.61503 17.2084 8.61503 19.4999 9.24008C22.1699 7.43008 23.3399 7.81008 23.3399 7.81008C23.8583 8.98006 23.9084 10.3043 23.4799 11.5101C24.4266 12.5309 24.9425 13.878 24.9199 15.2701C24.9199 20.6501 21.6499 21.8301 18.5299 22.1801C19.2061 22.8655 19.5525 23.81 19.4799 24.7701C19.4799 26.6401 19.4799 28.1501 19.4799 28.6101C19.4799 29.0701 19.7299 29.4201 20.4799 29.2801C27.001 27.1039 30.9772 20.515 29.8632 13.7313C28.7491 6.94749 22.8745 1.97633 15.9999 2.00008Z"
15
+ fill="rgb(25,25,25)"
16
+ fill-rule="evenodd"
5
17
  />
6
18
  </svg>
7
19
  </template>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <svg
3
+ viewBox="0 0 24 24"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ xmlns:xlink="http://www.w3.org/1999/xlink"
6
+ width="24.000000"
7
+ height="24.000000"
8
+ fill="none"
9
+ >
10
+ <rect id="左右布局" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
11
+ <path
12
+ id="矢量 1"
13
+ d="M9.0001 5.04009C9.6601 5.04009 10.2001 5.58009 10.2001 6.24009L10.2001 18.2401C10.2001 18.9001 9.6601 19.4401 9.0001 19.4401L6.0001 19.4401C5.3401 19.4401 4.8001 18.9001 4.8001 18.2401L4.8001 6.24009C4.8001 5.58009 5.3401 5.04009 6.0001 5.04009L9.0001 5.04009ZM9.0001 3.84009L6.0001 3.84009C4.6801 3.84009 3.6001 4.92009 3.6001 6.24009L3.6001 18.2401C3.6001 19.5601 4.6801 20.6401 6.0001 20.6401L9.0001 20.6401C10.3201 20.6401 11.4001 19.5601 11.4001 18.2401L11.4001 6.24009C11.4001 4.92009 10.3201 3.84009 9.0001 3.84009ZM20.4001 6.24009L20.4001 18.2401C20.4001 19.5601 19.3201 20.6401 18.0001 20.6401L15.0001 20.6401C13.6801 20.6401 12.6001 19.5601 12.6001 18.2401L12.6001 6.24009C12.6001 4.92009 13.6801 3.84009 15.0001 3.84009L18.0001 3.84009C19.3201 3.84009 20.4001 4.92009 20.4001 6.24009Z"
14
+ fill="rgb(0,0,0)"
15
+ fill-rule="nonzero"
16
+ />
17
+ </svg>
18
+ </template>