@veltra/desktop 1.3.10 → 1.5.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 (451) hide show
  1. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
  2. package/dist/components/action/action.js.map +1 -1
  3. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  4. package/dist/components/badge/badge.js.map +1 -1
  5. package/dist/components/badge/style.d.ts +1 -1
  6. package/dist/components/batch-edit/batch-edit-form.js +8 -12
  7. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  8. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  9. package/dist/components/batch-edit/batch-edit.js +2 -1
  10. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  11. package/dist/components/batch-edit/di.js.map +1 -1
  12. package/dist/components/batch-edit/index.d.ts +2 -2
  13. package/dist/components/batch-edit/use-edit-state.js +11 -9
  14. package/dist/components/batch-edit/use-edit-state.js.map +1 -1
  15. package/dist/components/batch-edit/use-handlers.js.map +1 -1
  16. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  17. package/dist/components/breadcrumb/style.d.ts +1 -1
  18. package/dist/components/button/button-group.js.map +1 -1
  19. package/dist/components/button/button.js.map +1 -1
  20. package/dist/components/calendar/calendar.js.map +1 -1
  21. package/dist/components/calendar/style.d.ts +1 -1
  22. package/dist/components/card/card-action.js.map +1 -1
  23. package/dist/components/card/card-content.js.map +1 -1
  24. package/dist/components/card/card-cover.js.map +1 -1
  25. package/dist/components/card/card-header.js.map +1 -1
  26. package/dist/components/card/card.js.map +1 -1
  27. package/dist/components/card/style.d.ts +1 -1
  28. package/dist/components/cascade/cascade-panel-item.js.map +1 -1
  29. package/dist/components/cascade/cascade.js.map +1 -1
  30. package/dist/components/check-tag/check-tag.js.map +1 -1
  31. package/dist/components/check-tag/style.d.ts +1 -1
  32. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  33. package/dist/components/checkbox/checkbox.js.map +1 -1
  34. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  35. package/dist/components/code-editor/basic-setup.js +2 -2
  36. package/dist/components/code-editor/code-editor.js +2 -2
  37. package/dist/components/code-editor/code-editor.js.map +1 -1
  38. package/dist/components/code-editor/lang-loaders.js +1 -1
  39. package/dist/components/code-editor/shell-extension.js +2 -2
  40. package/dist/components/collapse/collapse-item.js +34 -11
  41. package/dist/components/collapse/collapse-item.js.map +1 -1
  42. package/dist/components/collapse/collapse.js.map +1 -1
  43. package/dist/components/collapse/style.d.ts +1 -1
  44. package/dist/components/collapse/style2.css +29 -51
  45. package/dist/components/condition-editor/components/condition-group.js.map +1 -1
  46. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  47. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  48. package/dist/components/condition-editor/index.d.ts +2 -2
  49. package/dist/components/contextmenu/contextmenu-item.js +13 -6
  50. package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
  51. package/dist/components/contextmenu/contextmenu-panel.js +12 -6
  52. package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
  53. package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
  54. package/dist/components/contextmenu/contextmenu.js.map +1 -1
  55. package/dist/components/contextmenu/di.d.ts +15 -0
  56. package/dist/components/contextmenu/index.d.ts +3 -2
  57. package/dist/components/contextmenu/style2.css +13 -0
  58. package/dist/components/date-panel/date-panel.js.map +1 -1
  59. package/dist/components/date-panel/headers/day.js.map +1 -1
  60. package/dist/components/date-panel/headers/month.js.map +1 -1
  61. package/dist/components/date-panel/headers/year.js.map +1 -1
  62. package/dist/components/date-panel/panels/day.js.map +1 -1
  63. package/dist/components/date-panel/panels/month.js.map +1 -1
  64. package/dist/components/date-panel/panels/year.js.map +1 -1
  65. package/dist/components/date-panel/style.d.ts +1 -1
  66. package/dist/components/date-picker/date-picker.js.map +1 -1
  67. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  68. package/dist/components/dialog/dialog.js.map +1 -1
  69. package/dist/components/drawer/drawer.js.map +1 -1
  70. package/dist/components/dropdown/dropdown.js.map +1 -1
  71. package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
  72. package/dist/components/dual-nav/dual-nav.js.map +1 -1
  73. package/dist/components/empty/empty.js.map +1 -1
  74. package/dist/components/empty/style.d.ts +1 -1
  75. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  76. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  77. package/dist/components/expression-editor/core/editor.js.map +1 -1
  78. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  79. package/dist/components/expression-editor/style.d.ts +1 -1
  80. package/dist/components/file-picker/file-picker.js.map +1 -1
  81. package/dist/components/file-picker/style.d.ts +1 -1
  82. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  83. package/dist/components/file-viewer/helper.js +1 -38
  84. package/dist/components/file-viewer/helper.js.map +1 -1
  85. package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
  86. package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
  87. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  88. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  89. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  90. package/dist/components/file-viewer/previewers/sheet-previewer.js +68 -37
  91. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  92. package/dist/components/file-viewer/previewers/text-previewer.js +2 -2
  93. package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
  94. package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
  95. package/dist/components/file-viewer/style.d.ts +1 -1
  96. package/dist/components/float-button/float-button.js.map +1 -1
  97. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/form/style.d.ts +1 -1
  99. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  100. package/dist/components/form-item/style.d.ts +1 -1
  101. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  102. package/dist/components/gantt-chart/style.d.ts +1 -1
  103. package/dist/components/grid/grid-item.js.map +1 -1
  104. package/dist/components/grid/grid.js +3 -2
  105. package/dist/components/grid/grid.js.map +1 -1
  106. package/dist/components/grid/style.d.ts +1 -1
  107. package/dist/components/grid-input/grid-input.js.map +1 -1
  108. package/dist/components/grid-input/style.d.ts +1 -1
  109. package/dist/components/group-input/group-input.js.map +1 -1
  110. package/dist/components/group-nav/group-nav-item.js.map +1 -1
  111. package/dist/components/group-nav/group-nav.js.map +1 -1
  112. package/dist/components/group-nav/style.d.ts +1 -1
  113. package/dist/components/icon/icon.js.map +1 -1
  114. package/dist/components/icon/style.d.ts +1 -1
  115. package/dist/components/index.d.ts +91 -156
  116. package/dist/components/index.js +4 -1
  117. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/components/kbd/kbd.js.map +1 -1
  119. package/dist/components/kbd/style.d.ts +1 -1
  120. package/dist/components/layout/layout-resizer.js.map +1 -1
  121. package/dist/components/layout/layout.js.map +1 -1
  122. package/dist/components/layout/style.d.ts +1 -1
  123. package/dist/components/list/list-item.js.map +1 -1
  124. package/dist/components/list/list.js.map +1 -1
  125. package/dist/components/loading/directive.js +2 -1
  126. package/dist/components/loading/directive.js.map +1 -1
  127. package/dist/components/loading/index.d.ts +2 -2
  128. package/dist/components/loading/loading.js.map +1 -1
  129. package/dist/components/message/index.d.ts +2 -2
  130. package/dist/components/message/message-box.js.map +1 -1
  131. package/dist/components/message/message.js.map +1 -1
  132. package/dist/components/message/style.d.ts +1 -1
  133. package/dist/components/message-confirm/index.d.ts +2 -2
  134. package/dist/components/message-confirm/message-confirm-box.js.map +1 -1
  135. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  136. package/dist/components/message-confirm/style.d.ts +1 -1
  137. package/dist/components/message-confirm/style2.css +18 -0
  138. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  139. package/dist/components/multi-select/multi-select.js +6 -3
  140. package/dist/components/multi-select/multi-select.js.map +1 -1
  141. package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
  142. package/dist/components/nav/nav-icon.js.map +1 -1
  143. package/dist/components/nav/nav-item-collapsed.js.map +1 -1
  144. package/dist/components/nav/nav-item.js +4 -2
  145. package/dist/components/nav/nav-item.js.map +1 -1
  146. package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
  147. package/dist/components/nav/nav-sub.js.map +1 -1
  148. package/dist/components/nav/nav.js.map +1 -1
  149. package/dist/components/nav/style.d.ts +1 -1
  150. package/dist/components/node-render/style.d.ts +1 -1
  151. package/dist/components/notification/index.d.ts +2 -2
  152. package/dist/components/notification/notification-box.js +2 -2
  153. package/dist/components/notification/notification-box.js.map +1 -1
  154. package/dist/components/notification/notification.js.map +1 -1
  155. package/dist/components/notification/style.d.ts +1 -1
  156. package/dist/components/number/number.js.map +1 -1
  157. package/dist/components/number/style.d.ts +1 -1
  158. package/dist/components/number-input/number-input.js +2 -1
  159. package/dist/components/number-input/number-input.js.map +1 -1
  160. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  161. package/dist/components/paginator/paginator.js.map +1 -1
  162. package/dist/components/palette/palette-alpha.js.map +1 -1
  163. package/dist/components/palette/palette-color-switch.js.map +1 -1
  164. package/dist/components/palette/palette-hue.js.map +1 -1
  165. package/dist/components/palette/palette-sv.js.map +1 -1
  166. package/dist/components/palette/palette.js.map +1 -1
  167. package/dist/components/password-input/password-input.js.map +1 -1
  168. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  169. package/dist/components/progress/progress.js.map +1 -1
  170. package/dist/components/progress/style.d.ts +1 -1
  171. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  172. package/dist/components/progress-nodes/style.d.ts +1 -1
  173. package/dist/components/radio/radio.js.map +1 -1
  174. package/dist/components/radio-group/radio-group.js.map +1 -1
  175. package/dist/components/rich-text-editor/rich-text-editor.js +2 -1
  176. package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
  177. package/dist/components/rich-text-editor/style.d.ts +1 -1
  178. package/dist/components/rich-text-editor/toolbar.js +3 -4
  179. package/dist/components/rich-text-editor/toolbar.js.map +1 -1
  180. package/dist/components/scroll/scroll-bar.js.map +1 -1
  181. package/dist/components/scroll/scroll.js.map +1 -1
  182. package/dist/components/scroll/style.d.ts +1 -1
  183. package/dist/components/select/select.js.map +1 -1
  184. package/dist/components/slider/slider-thumb.js.map +1 -1
  185. package/dist/components/slider/slider.js.map +1 -1
  186. package/dist/components/slider/style.d.ts +1 -1
  187. package/dist/components/steps/steps.js.map +1 -1
  188. package/dist/components/steps/style.d.ts +1 -1
  189. package/dist/components/steps/style2.css +14 -14
  190. package/dist/components/switch/style.d.ts +1 -1
  191. package/dist/components/switch/switch.js.map +1 -1
  192. package/dist/components/table/index.d.ts +2 -2
  193. package/dist/components/table/node/col.d.ts +1 -49
  194. package/dist/components/table/table-body.js.map +1 -1
  195. package/dist/components/table/table-cell.js.map +1 -1
  196. package/dist/components/table/table-foot.js.map +1 -1
  197. package/dist/components/table/table-row.js +2 -1
  198. package/dist/components/table/table-row.js.map +1 -1
  199. package/dist/components/table/table.js.map +1 -1
  200. package/dist/components/table/use-check.js +2 -1
  201. package/dist/components/table/use-check.js.map +1 -1
  202. package/dist/components/table/use-columns.d.ts +1 -1
  203. package/dist/components/table/use-rows.js +2 -1
  204. package/dist/components/table/use-rows.js.map +1 -1
  205. package/dist/components/table-editor/table-editor.js.map +1 -1
  206. package/dist/components/tabs/tabs-horizontal.js +2 -1
  207. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  208. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  209. package/dist/components/tabs/tabs.js.map +1 -1
  210. package/dist/components/tabs/use-tabs-bar.js +10 -25
  211. package/dist/components/tabs/use-tabs-bar.js.map +1 -1
  212. package/dist/components/tag/style.d.ts +1 -1
  213. package/dist/components/tag/tag.js.map +1 -1
  214. package/dist/components/text/style.d.ts +1 -1
  215. package/dist/components/text/text.js.map +1 -1
  216. package/dist/components/textarea/textarea.js.map +1 -1
  217. package/dist/components/theme/theme.js +3 -2
  218. package/dist/components/theme/theme.js.map +1 -1
  219. package/dist/components/tip/style.d.ts +1 -1
  220. package/dist/components/tip/tip.js.map +1 -1
  221. package/dist/components/tree/tree-node.js.map +1 -1
  222. package/dist/components/tree/tree.js.map +1 -1
  223. package/dist/components/tree-select/tree-select.js.map +1 -1
  224. package/dist/components/watermark/style.d.ts +1 -1
  225. package/dist/components/watermark/watermark.js.map +1 -1
  226. package/dist/index.d.ts +93 -97
  227. package/dist/index.js +2 -1
  228. package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js +2 -2
  229. package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js.map +1 -1
  230. package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js +3 -3
  231. package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js.map +1 -1
  232. package/dist/node_modules/.bun/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js.map +1 -1
  233. package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js +5 -4
  234. package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js.map +1 -1
  235. package/dist/node_modules/.bun/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js +2 -2
  236. package/dist/node_modules/.bun/{@codemirror_lang-markdown@6.5.1 → @codemirror_lang-markdown@6.5.2}/node_modules/@codemirror/lang-markdown/dist/index.js +4 -3
  237. package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js.map +1 -0
  238. package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js +2 -1
  239. package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js.map +1 -1
  240. package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js +2 -2
  241. package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js.map +1 -1
  242. package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js +4 -3
  243. package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js.map +1 -1
  244. package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js +2 -2
  245. package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js.map +1 -1
  246. package/dist/node_modules/.bun/{@codemirror_state@6.7.0 → @codemirror_state@6.7.1}/node_modules/@codemirror/state/dist/index.js +13 -3
  247. package/dist/node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js.map +1 -0
  248. package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js +1 -1
  249. package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js.map +1 -1
  250. package/dist/node_modules/.bun/{@codemirror_view@6.43.4 → @codemirror_view@6.43.8}/node_modules/@codemirror/view/dist/index.js +86 -64
  251. package/dist/node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js.map +1 -0
  252. package/dist/node_modules/.bun/@lezer_common@1.5.2/node_modules/@lezer/common/dist/index.js.map +1 -1
  253. package/dist/node_modules/.bun/@lezer_css@1.3.4/node_modules/@lezer/css/dist/index.js.map +1 -1
  254. package/dist/node_modules/.bun/@lezer_highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js.map +1 -1
  255. package/dist/node_modules/.bun/@lezer_html@1.3.13/node_modules/@lezer/html/dist/index.js.map +1 -1
  256. package/dist/node_modules/.bun/@lezer_javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js.map +1 -1
  257. package/dist/node_modules/.bun/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.js.map +1 -1
  258. package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js +1 -1
  259. package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js.map +1 -1
  260. package/dist/node_modules/.bun/@marijn_find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js.map +1 -1
  261. package/dist/node_modules/.bun/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js.map +1 -1
  262. package/dist/types/collapse.d.ts +23 -4
  263. package/dist/types/contextmenu.d.ts +10 -4
  264. package/dist/types/index.d.ts +2 -8
  265. package/package.json +34 -30
  266. package/src/components/batch-edit/__test__/batch-edit.test.ts +199 -0
  267. package/src/components/batch-edit/batch-edit-form.vue +8 -8
  268. package/src/components/batch-edit/batch-edit.vue +2 -1
  269. package/src/components/batch-edit/di.ts +2 -0
  270. package/src/components/batch-edit/use-edit-state.ts +19 -12
  271. package/src/components/collapse/__test__/collapse.test.ts +178 -1
  272. package/src/components/collapse/collapse-item.vue +40 -12
  273. package/src/components/collapse/style.scss +26 -62
  274. package/src/components/contextmenu/__test__/contextmenu.test.ts +165 -0
  275. package/src/components/contextmenu/contextmenu-item.vue +7 -4
  276. package/src/components/contextmenu/contextmenu-panel.vue +7 -4
  277. package/src/components/contextmenu/index.ts +1 -0
  278. package/src/components/contextmenu/style.scss +16 -0
  279. package/src/components/file-viewer/helper.ts +0 -53
  280. package/src/components/file-viewer/previewers/sheet-previewer.vue +91 -46
  281. package/src/components/message-confirm/style.scss +19 -0
  282. package/src/components/notification/style.scss +16 -4
  283. package/src/components/radio-group/style.scss +1 -1
  284. package/src/components/slider/style.scss +1 -1
  285. package/src/components/steps/style.scss +2 -2
  286. package/src/components/tabs/use-tabs-bar.ts +15 -20
  287. package/src/types/collapse.ts +25 -3
  288. package/src/types/contextmenu.ts +10 -4
  289. package/dist/components/action/action-group.vue.d.ts +0 -25
  290. package/dist/components/action/action.vue.d.ts +0 -33
  291. package/dist/components/action/index.d.ts +0 -3
  292. package/dist/components/auto-complete/auto-complete.vue.d.ts +0 -41
  293. package/dist/components/auto-complete/index.d.ts +0 -2
  294. package/dist/components/badge/badge.vue.d.ts +0 -20
  295. package/dist/components/badge/index.d.ts +0 -2
  296. package/dist/components/batch-edit/batch-edit.vue.d.ts +0 -45
  297. package/dist/components/breadcrumb/breadcrumb.vue.d.ts +0 -24
  298. package/dist/components/breadcrumb/index.d.ts +0 -2
  299. package/dist/components/button/button-group.vue.d.ts +0 -19
  300. package/dist/components/button/button.vue.d.ts +0 -27
  301. package/dist/components/button/index.d.ts +0 -3
  302. package/dist/components/calendar/calendar.vue.d.ts +0 -17
  303. package/dist/components/calendar/index.d.ts +0 -2
  304. package/dist/components/card/card-action.vue.d.ts +0 -18
  305. package/dist/components/card/card-content.vue.d.ts +0 -18
  306. package/dist/components/card/card-cover.vue.d.ts +0 -8
  307. package/dist/components/card/card-header.vue.d.ts +0 -16
  308. package/dist/components/card/card.vue.d.ts +0 -18
  309. package/dist/components/card/index.d.ts +0 -6
  310. package/dist/components/cascade/cascade.vue.d.ts +0 -31
  311. package/dist/components/cascade/index.d.ts +0 -2
  312. package/dist/components/check-tag/check-tag.vue.d.ts +0 -22
  313. package/dist/components/check-tag/index.d.ts +0 -2
  314. package/dist/components/checkbox/checkbox-button.vue.d.ts +0 -35
  315. package/dist/components/checkbox/checkbox.vue.d.ts +0 -34
  316. package/dist/components/checkbox/index.d.ts +0 -3
  317. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +0 -24
  318. package/dist/components/checkbox-group/index.d.ts +0 -2
  319. package/dist/components/code-editor/code-editor.vue.d.ts +0 -30
  320. package/dist/components/code-editor/index.d.ts +0 -2
  321. package/dist/components/collapse/collapse-item.vue.d.ts +0 -24
  322. package/dist/components/collapse/collapse.vue.d.ts +0 -27
  323. package/dist/components/collapse/index.d.ts +0 -3
  324. package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -15
  325. package/dist/components/contextmenu/contextmenu.vue.d.ts +0 -14
  326. package/dist/components/date-panel/date-panel.vue.d.ts +0 -17
  327. package/dist/components/date-panel/index.d.ts +0 -2
  328. package/dist/components/date-picker/date-picker.vue.d.ts +0 -18
  329. package/dist/components/date-picker/index.d.ts +0 -2
  330. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +0 -18
  331. package/dist/components/date-range-picker/index.d.ts +0 -2
  332. package/dist/components/dialog/dialog.vue.d.ts +0 -43
  333. package/dist/components/dialog/index.d.ts +0 -2
  334. package/dist/components/drawer/drawer.vue.d.ts +0 -36
  335. package/dist/components/drawer/index.d.ts +0 -2
  336. package/dist/components/dropdown/dropdown.vue.d.ts +0 -30
  337. package/dist/components/dropdown/index.d.ts +0 -2
  338. package/dist/components/dual-nav/dual-nav.vue.d.ts +0 -15
  339. package/dist/components/dual-nav/index.d.ts +0 -2
  340. package/dist/components/empty/empty.vue.d.ts +0 -11
  341. package/dist/components/empty/index.d.ts +0 -2
  342. package/dist/components/expression-editor/expression-editor.vue.d.ts +0 -16
  343. package/dist/components/expression-editor/index.d.ts +0 -2
  344. package/dist/components/file-picker/file-picker.vue.d.ts +0 -27
  345. package/dist/components/file-picker/index.d.ts +0 -2
  346. package/dist/components/file-viewer/file-viewer.vue.d.ts +0 -40
  347. package/dist/components/file-viewer/index.d.ts +0 -2
  348. package/dist/components/file-viewer/sheet-parser.js +0 -46
  349. package/dist/components/file-viewer/sheet-parser.js.map +0 -1
  350. package/dist/components/float-button/float-button.vue.d.ts +0 -12
  351. package/dist/components/float-button/index.d.ts +0 -2
  352. package/dist/components/form/form.vue.d.ts +0 -23
  353. package/dist/components/form/index.d.ts +0 -2
  354. package/dist/components/form-item/form-item.vue.d.ts +0 -21
  355. package/dist/components/form-item/index.d.ts +0 -2
  356. package/dist/components/gantt-chart/gantt-chart.vue.d.ts +0 -8
  357. package/dist/components/gantt-chart/index.d.ts +0 -2
  358. package/dist/components/grid/grid-item.vue.d.ts +0 -20
  359. package/dist/components/grid/grid.vue.d.ts +0 -27
  360. package/dist/components/grid/index.d.ts +0 -3
  361. package/dist/components/grid-input/grid-input.vue.d.ts +0 -19
  362. package/dist/components/grid-input/index.d.ts +0 -2
  363. package/dist/components/group-input/group-input.vue.d.ts +0 -26
  364. package/dist/components/group-input/index.d.ts +0 -2
  365. package/dist/components/group-nav/group-nav.vue.d.ts +0 -12
  366. package/dist/components/group-nav/index.d.ts +0 -2
  367. package/dist/components/icon/icon.vue.d.ts +0 -18
  368. package/dist/components/icon/index.d.ts +0 -2
  369. package/dist/components/input/index.d.ts +0 -2
  370. package/dist/components/input/input.vue.d.ts +0 -50
  371. package/dist/components/kbd/kbd.vue.d.ts +0 -16
  372. package/dist/components/layout/index.d.ts +0 -2
  373. package/dist/components/layout/layout.vue.d.ts +0 -20
  374. package/dist/components/list/index.d.ts +0 -3
  375. package/dist/components/list/list-item.vue.d.ts +0 -16
  376. package/dist/components/list/list.vue.d.ts +0 -21
  377. package/dist/components/loading/loading.vue.d.ts +0 -11
  378. package/dist/components/message/message.vue.d.ts +0 -16
  379. package/dist/components/message-confirm/message-confirm.vue.d.ts +0 -19
  380. package/dist/components/multi-select/index.d.ts +0 -2
  381. package/dist/components/multi-select/multi-select.vue.d.ts +0 -48
  382. package/dist/components/multi-tree-select/index.d.ts +0 -2
  383. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +0 -44
  384. package/dist/components/nav/index.d.ts +0 -4
  385. package/dist/components/nav/nav-item.vue.d.ts +0 -12
  386. package/dist/components/nav/nav-sub.vue.d.ts +0 -13
  387. package/dist/components/nav/nav.vue.d.ts +0 -19
  388. package/dist/components/notification/notification.vue.d.ts +0 -18
  389. package/dist/components/number/index.d.ts +0 -2
  390. package/dist/components/number/number.vue.d.ts +0 -11
  391. package/dist/components/number-input/index.d.ts +0 -2
  392. package/dist/components/number-input/number-input.vue.d.ts +0 -39
  393. package/dist/components/number-range-input/index.d.ts +0 -2
  394. package/dist/components/number-range-input/number-range-input.vue.d.ts +0 -36
  395. package/dist/components/paginator/index.d.ts +0 -2
  396. package/dist/components/paginator/paginator.vue.d.ts +0 -29
  397. package/dist/components/palette/index.d.ts +0 -2
  398. package/dist/components/palette/palette.vue.d.ts +0 -20
  399. package/dist/components/password-input/index.d.ts +0 -2
  400. package/dist/components/password-input/password-input.vue.d.ts +0 -30
  401. package/dist/components/pop-confirm/index.d.ts +0 -2
  402. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +0 -33
  403. package/dist/components/progress/index.d.ts +0 -2
  404. package/dist/components/progress/progress.vue.d.ts +0 -25
  405. package/dist/components/progress-nodes/index.d.ts +0 -2
  406. package/dist/components/progress-nodes/progress-nodes.vue.d.ts +0 -36
  407. package/dist/components/radio/index.d.ts +0 -2
  408. package/dist/components/radio/radio.vue.d.ts +0 -31
  409. package/dist/components/radio-group/index.d.ts +0 -2
  410. package/dist/components/radio-group/radio-group.vue.d.ts +0 -26
  411. package/dist/components/rich-text-editor/index.d.ts +0 -2
  412. package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +0 -23
  413. package/dist/components/scroll/index.d.ts +0 -2
  414. package/dist/components/scroll/scroll.vue.d.ts +0 -28
  415. package/dist/components/select/index.d.ts +0 -2
  416. package/dist/components/select/select.vue.d.ts +0 -38
  417. package/dist/components/slider/index.d.ts +0 -2
  418. package/dist/components/slider/slider.vue.d.ts +0 -21
  419. package/dist/components/steps/index.d.ts +0 -2
  420. package/dist/components/steps/steps.vue.d.ts +0 -29
  421. package/dist/components/switch/index.d.ts +0 -2
  422. package/dist/components/switch/switch.vue.d.ts +0 -24
  423. package/dist/components/table/node/row.d.ts +0 -49
  424. package/dist/components/table/table.vue.d.ts +0 -54
  425. package/dist/components/table-editor/index.d.ts +0 -2
  426. package/dist/components/table-editor/table-editor.vue.d.ts +0 -12
  427. package/dist/components/tabs/index.d.ts +0 -4
  428. package/dist/components/tabs/tabs-horizontal.vue.d.ts +0 -40
  429. package/dist/components/tabs/tabs-vertical.vue.d.ts +0 -39
  430. package/dist/components/tabs/tabs.vue.d.ts +0 -36
  431. package/dist/components/tag/index.d.ts +0 -2
  432. package/dist/components/tag/tag.vue.d.ts +0 -22
  433. package/dist/components/text/index.d.ts +0 -2
  434. package/dist/components/text/text.vue.d.ts +0 -10
  435. package/dist/components/textarea/index.d.ts +0 -2
  436. package/dist/components/textarea/textarea.vue.d.ts +0 -34
  437. package/dist/components/theme/index.d.ts +0 -2
  438. package/dist/components/theme/theme.vue.d.ts +0 -8
  439. package/dist/components/tip/index.d.ts +0 -2
  440. package/dist/components/tip/tip.vue.d.ts +0 -31
  441. package/dist/components/tree/di.d.ts +0 -12
  442. package/dist/components/tree/index.d.ts +0 -2
  443. package/dist/components/tree/tree.vue.d.ts +0 -40
  444. package/dist/components/tree-select/index.d.ts +0 -2
  445. package/dist/components/tree-select/tree-select.vue.d.ts +0 -48
  446. package/dist/components/watermark/index.d.ts +0 -2
  447. package/dist/components/watermark/watermark.vue.d.ts +0 -21
  448. package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.1/node_modules/@codemirror/lang-markdown/dist/index.js.map +0 -1
  449. package/dist/node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js.map +0 -1
  450. package/dist/node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js.map +0 -1
  451. package/src/components/file-viewer/sheet-parser.ts +0 -52
@@ -25,6 +25,8 @@ $arrow-size: 12px;
25
25
  $b: &;
26
26
 
27
27
  position: fixed;
28
+ // 与子菜单一致:最小宽度兜底,调用方可用 width: max-content 让内容撑开
29
+ min-width: 120px;
28
30
  @include panel-surface;
29
31
 
30
32
  @include m.e(label) {
@@ -33,6 +35,20 @@ $arrow-size: 12px;
33
35
  @include m.ellipsis;
34
36
  }
35
37
 
38
+ @include m.e(custom) {
39
+ flex: 1;
40
+ min-width: 0;
41
+ }
42
+
43
+ @include m.e(divider) {
44
+ height: 0;
45
+ margin: 4px 8px;
46
+ border: 0;
47
+ border-top: 1px solid fn.use-var(border, color);
48
+ list-style: none;
49
+ pointer-events: none;
50
+ }
51
+
36
52
  @include m.e(item) {
37
53
  position: relative;
38
54
  cursor: pointer;
@@ -104,59 +104,6 @@ export function toBlobUrl(
104
104
  return { url, revoke: () => URL.revokeObjectURL(url) }
105
105
  }
106
106
 
107
- /**
108
- * RFC-4180 子集 CSV 解析:支持 "" 转义、\r\n 与 \n 换行、, 分隔。
109
- * 为性能起见采用状态机而非 split。
110
- */
111
- export function parseCsv(text: string): string[][] {
112
- const rows: string[][] = []
113
- let row: string[] = []
114
- let field = ''
115
- let inQuotes = false
116
- const len = text.length
117
-
118
- for (let i = 0; i < len; i++) {
119
- const ch = text[i]
120
-
121
- if (inQuotes) {
122
- if (ch === '"') {
123
- if (text[i + 1] === '"') {
124
- field += '"'
125
- i++
126
- } else {
127
- inQuotes = false
128
- }
129
- } else {
130
- field += ch
131
- }
132
- continue
133
- }
134
-
135
- if (ch === '"') {
136
- inQuotes = true
137
- } else if (ch === ',') {
138
- row.push(field)
139
- field = ''
140
- } else if (ch === '\n') {
141
- row.push(field)
142
- rows.push(row)
143
- row = []
144
- field = ''
145
- } else if (ch === '\r') {
146
- // swallow CR; LF will commit the row
147
- } else {
148
- field += ch
149
- }
150
- }
151
-
152
- // 最后一行
153
- if (field.length > 0 || row.length > 0) {
154
- row.push(field)
155
- rows.push(row)
156
- }
157
- return rows
158
- }
159
-
160
107
  export function formatBytes(bytes?: number): string {
161
108
  if (bytes === undefined || bytes === null || Number.isNaN(bytes)) return '-'
162
109
  if (bytes < 1024) return `${bytes} B`
@@ -1,33 +1,44 @@
1
1
  <template>
2
2
  <div :class="cls.e('sheet')">
3
- <div v-if="truncated" :class="cls.e('sheet-note')">
4
- 仅展示前 {{ renderedRows.toLocaleString() }} 行(共 {{ totalRows.toLocaleString() }} 行)
3
+ <div v-if="unavailable" :class="cls.e('empty')">
4
+ <u-empty text="无法预览表格:未安装 @veltra/sheet-core" :size="32" />
5
5
  </div>
6
- <div v-if="sheets.length > 1" :class="cls.e('sheet-tabs')">
7
- <button
8
- v-for="(s, i) in sheets"
9
- :key="s.name"
10
- :class="[cls.e('sheet-tab'), bem.is('active', i === activeSheetIndex)]"
11
- @click="activeSheetIndex = i"
12
- >
13
- {{ s.name }}
14
- </button>
15
- </div>
16
- <div ref="container" :class="cls.e('sheet-stage')" />
17
- <div v-if="loading" :class="cls.e('loading')">加载中…</div>
6
+ <template v-else>
7
+ <div v-if="truncated" :class="cls.e('sheet-note')">
8
+ 共 {{ totalRows.toLocaleString() }} 行,超出预览上限
9
+ {{ maxRows.toLocaleString() }} 行,已全量加载
10
+ </div>
11
+ <div v-if="sheets.length > 1" :class="cls.e('sheet-tabs')">
12
+ <button
13
+ v-for="(s, i) in sheets"
14
+ :key="s.name"
15
+ :class="[cls.e('sheet-tab'), bem.is('active', i === activeSheetIndex)]"
16
+ @click="activeSheetIndex = i"
17
+ >
18
+ {{ s.name }}
19
+ </button>
20
+ </div>
21
+ <div ref="container" :class="cls.e('sheet-stage')" />
22
+ <div v-if="loading" :class="cls.e('loading')">加载中…</div>
23
+ </template>
18
24
  </div>
19
25
  </template>
20
26
 
21
27
  <script lang="ts" setup>
22
28
  import { bem } from '@veltra/utils'
23
- import { ListTable } from '@visactor/vtable'
24
29
  import { onBeforeUnmount, ref, shallowRef, useTemplateRef, watch } from 'vue'
25
30
 
26
31
  import type { FileViewerItem } from '../../../types/file-viewer'
27
- import { parseSheetFile, type SheetPreview } from '../sheet-parser'
32
+ import { UEmpty } from '../../empty'
33
+ import { getExtension, toArrayBuffer } from '../helper'
28
34
 
29
35
  defineOptions({ name: 'UFileViewerSheetPreviewer' })
30
36
 
37
+ /** 仅类型查询;运行时通过动态 import 加载,未安装时不炸主入口 */
38
+ type SheetCoreModule = typeof import('@veltra/sheet-core')
39
+ type Sheet = InstanceType<SheetCoreModule['Sheet']>
40
+ type SheetGrid = InstanceType<SheetCoreModule['SheetGrid']>
41
+
31
42
  const props = withDefaults(defineProps<{ file: FileViewerItem; maxRows?: number }>(), {
32
43
  maxRows: 50_000
33
44
  })
@@ -37,72 +48,106 @@ const emit = defineEmits<{ (e: 'error', err: unknown): void }>()
37
48
  const cls = bem('file-viewer')
38
49
  const container = useTemplateRef<HTMLDivElement>('container')
39
50
  const loading = ref(true)
51
+ const unavailable = ref(false)
40
52
  const truncated = ref(false)
41
53
  const totalRows = ref(0)
42
- const renderedRows = ref(0)
43
- const sheets = shallowRef<SheetPreview[]>([])
54
+ const sheets = shallowRef<Sheet[]>([])
44
55
  const activeSheetIndex = ref(0)
45
56
 
46
57
  let controller: AbortController | undefined
47
- let table: ListTable | undefined
48
- let resizeObserver: ResizeObserver | undefined
58
+ /** 递增 token:importXlsx 无 AbortSignal,靠它防止切文件后旧解析结果落地 */
59
+ let loadToken = 0
60
+ let grid: SheetGrid | undefined
61
+ let sheetCore: SheetCoreModule | undefined
62
+
63
+ function releaseGrid() {
64
+ grid?.release()
65
+ grid = undefined
66
+ }
67
+
68
+ /** 动态加载 sheet-core;未安装 optional peer 时返回 undefined */
69
+ async function resolveSheetCore(): Promise<SheetCoreModule | undefined> {
70
+ if (sheetCore) return sheetCore
71
+ try {
72
+ sheetCore = await import('@veltra/sheet-core')
73
+ return sheetCore
74
+ } catch {
75
+ return undefined
76
+ }
77
+ }
49
78
 
50
- function releaseTable() {
51
- table?.release()
52
- table = undefined
79
+ /** 解析文件为 Sheet 列表:xlsx 多表(importXlsx 建工作簿);csv 单表,表名取文件名 */
80
+ async function parseFile(
81
+ core: SheetCoreModule,
82
+ file: FileViewerItem,
83
+ signal?: AbortSignal
84
+ ): Promise<Sheet[]> {
85
+ const buf = await toArrayBuffer(file.src, signal)
86
+ if (getExtension(file.name) === 'csv') {
87
+ const text = new TextDecoder('utf-8', { fatal: false }).decode(buf)
88
+ const sheet = new core.Sheet(file.name)
89
+ core.importCsv(text, sheet)
90
+ return [sheet]
91
+ }
92
+ const workbook = await core.importXlsx(buf)
93
+ return workbook.getSheets()
53
94
  }
54
95
 
55
96
  function renderActive() {
56
97
  const sheet = sheets.value[activeSheetIndex.value]
57
98
  const el = container.value
58
- if (!sheet || !el) return
99
+ releaseGrid()
100
+ if (!sheet || !el || !sheetCore) return
59
101
 
60
- releaseTable()
102
+ // SheetGrid 的 rows 选项是渲染行数下限(构造时数据高水位恒并入渲染尺寸),
103
+ // 不能用作行数上限;deleteRows 硬裁又会让引用被裁区域的公式显示 #REF!,
104
+ // 故 maxRows 只驱动截断提示,不裁模型
105
+ const total = sheet.rowCount
106
+ totalRows.value = total
107
+ truncated.value = props.maxRows > 0 && total > props.maxRows
61
108
 
62
- const limit = props.maxRows > 0 ? Math.min(props.maxRows, sheet.rows.length) : sheet.rows.length
63
- totalRows.value = sheet.rows.length
64
- renderedRows.value = limit
65
- truncated.value = props.maxRows > 0 && sheet.rows.length > props.maxRows
66
-
67
- table = new ListTable(el, {
68
- records: sheet.rows.slice(0, limit),
69
- columns: sheet.headers.map((title, i) => ({ field: String(i), title, width: 'auto' })),
70
- widthMode: 'standard'
71
- })
109
+ grid = new sheetCore.SheetGrid({ container: el, sheet, readonly: true })
72
110
  }
73
111
 
74
112
  async function load() {
113
+ const token = ++loadToken
75
114
  controller?.abort()
76
115
  controller = new AbortController()
77
116
  loading.value = true
117
+ truncated.value = false
118
+ releaseGrid()
78
119
  sheets.value = []
79
120
  activeSheetIndex.value = 0
80
121
 
81
122
  try {
82
- sheets.value = await parseSheetFile(props.file, controller.signal)
83
- if (controller.signal.aborted) return
123
+ const core = await resolveSheetCore()
124
+ if (token !== loadToken) return
125
+ if (!core) {
126
+ unavailable.value = true
127
+ emit('error', new Error('未安装 @veltra/sheet-core,无法预览 Excel/CSV'))
128
+ return
129
+ }
130
+ unavailable.value = false
131
+
132
+ const parsed = await parseFile(core, props.file, controller.signal)
133
+ if (token !== loadToken) return
134
+ sheets.value = parsed
84
135
  renderActive()
85
136
  } catch (err) {
137
+ if (token !== loadToken) return
86
138
  if ((err as { name?: string })?.name === 'AbortError') return
87
139
  emit('error', err)
88
140
  } finally {
89
- loading.value = false
141
+ if (token === loadToken) loading.value = false
90
142
  }
91
143
  }
92
144
 
93
145
  watch(() => props.file, load, { immediate: true })
94
146
  watch(activeSheetIndex, renderActive)
95
- watch(container, (el) => {
96
- resizeObserver?.disconnect()
97
- if (!el) return
98
- resizeObserver = new ResizeObserver(() => table?.resize?.())
99
- resizeObserver.observe(el)
100
- })
101
147
 
102
148
  onBeforeUnmount(() => {
103
149
  controller?.abort()
104
- resizeObserver?.disconnect()
105
- releaseTable()
150
+ releaseGrid()
106
151
  sheets.value = []
107
152
  })
108
153
  </script>
@@ -7,6 +7,12 @@
7
7
  $root-name: message-confirm;
8
8
 
9
9
  @include m.b($root-name) {
10
+ // 根元素必须「平时」就有 transition:Vue transition-group 的 hasTransition 在
11
+ // 添加 leave-active 类之前检查元素当前 computed 样式,只在类上声明 transition
12
+ // 读不到 → 判定无过渡 → after-leave 同步触发(onClosed 在点击事件内同步执行,
13
+ // replaceWorkbook 长任务阻塞弹窗关闭)。与 message 组件对称(mask/box 同此)。
14
+ transition: opacity fn.use-var(transition, normal) fn.use-var(transition, ease);
15
+
10
16
  @include m.e(mask) {
11
17
  background-color: rgba(0, 0, 0, 0.32);
12
18
  position: fixed;
@@ -57,8 +63,21 @@ $root-name: message-confirm;
57
63
  }
58
64
  }
59
65
 
66
+ /* 根元素必须声明 transition:Vue transition-group 通过「被过渡元素自身」的
67
+ computed transition 判定是否走动画。此前动画只写在子元素 mask/box 上,
68
+ 根元素无 transition → Vue 判定无过渡 → after-leave 同步触发(onClosed 在
69
+ 点击事件内同步执行,长任务阻塞弹窗关闭)。与 message 组件对称。 */
70
+ .#{$root-name}-enter-active,
71
+ .#{$root-name}-leave-active {
72
+ transition-duration: fn.use-var(transition, normal);
73
+ transition-timing-function: fn.use-var(transition, ease);
74
+ transition-property: opacity;
75
+ }
76
+
60
77
  .#{$root-name}-enter-from,
61
78
  .#{$root-name}-leave-to {
79
+ opacity: 0;
80
+
62
81
  @include m.bem($root-name, mask) {
63
82
  opacity: 0;
64
83
  }
@@ -7,10 +7,22 @@
7
7
  $root-name: notification;
8
8
  // 方位 => (垂直锚边, 水平锚边)
9
9
  $stack-positions: (
10
- 'bottom-right': (bottom, right),
11
- 'bottom-left': (bottom, left),
12
- 'top-right': (top, right),
13
- 'top-left': (top, left)
10
+ 'bottom-right': (
11
+ bottom,
12
+ right
13
+ ),
14
+ 'bottom-left': (
15
+ bottom,
16
+ left
17
+ ),
18
+ 'top-right': (
19
+ top,
20
+ right
21
+ ),
22
+ 'top-left': (
23
+ top,
24
+ left
25
+ )
14
26
  );
15
27
 
16
28
  @include m.b($root-name) {
@@ -10,7 +10,7 @@
10
10
  margin: 0;
11
11
  }
12
12
 
13
- @include m.size using($size) {
13
+ @include m.size using ($size) {
14
14
  gap: 0 calc(fn.use-var(gap, $size) * 2);
15
15
  }
16
16
 
@@ -87,7 +87,7 @@ $track-size: (
87
87
  }
88
88
  }
89
89
 
90
- @include m.size using($size) {
90
+ @include m.size using ($size) {
91
91
  $slider-size: map.get($slider-size, $size);
92
92
  $track-size: map.get($track-size, $size);
93
93
  $padding-y: math.div($slider-size - $track-size, 2);
@@ -12,14 +12,14 @@ $root-name: steps;
12
12
 
13
13
  @each $type in vars.$color-types {
14
14
  @include m.em(finished, $type) {
15
- @include m.e(item) {
15
+ @include m.bem($root-name, item) {
16
16
  @include m.is(finished) {
17
17
  color: fn.use-var(color, $type);
18
18
  }
19
19
  }
20
20
  }
21
21
  @include m.em(current, $type) {
22
- @include m.e(item) {
22
+ @include m.bem($root-name, item) {
23
23
  @include m.is(current) {
24
24
  color: fn.use-var(color, $type);
25
25
  }
@@ -1,4 +1,10 @@
1
1
  import { useResizeObserver } from '@veltra/compositions'
2
+ import {
3
+ applyWheelHorizontalScroll,
4
+ computeOverflowNavState,
5
+ scrollElementIntoView,
6
+ scrollViewportByStep
7
+ } from '@veltra/utils'
2
8
  import {
3
9
  type ModelRef,
4
10
  type Ref,
@@ -20,7 +26,8 @@ interface UseTabsBarOptions {
20
26
  }
21
27
 
22
28
  /**
23
- * 水平标签栏的溢出滚动逻辑:
29
+ * 水平标签栏的溢出滚动逻辑(滚动几何/滚轮转横滚/元素滚入视野共享
30
+ * @veltra/utils overflow-nav,见 #17;此处保留 useResizeObserver 与 watch 差异):
24
31
  * - 计算 nav 按钮显隐与可用状态
25
32
  * - 提供按步滚动与活动标签自动滚入视野的方法
26
33
  * - 绑定 wheel / scroll / resize 事件
@@ -36,18 +43,17 @@ export function useTabsBar(options: UseTabsBarOptions) {
36
43
  const updateNavState = () => {
37
44
  const vp = viewportRef.value
38
45
  if (!vp) return
39
- const { scrollLeft, scrollWidth, clientWidth } = vp
40
- const overflowing = scrollWidth - clientWidth > 1
41
- showNav.value = overflowing
42
- canPrev.value = overflowing && scrollLeft > 0
43
- canNext.value = overflowing && scrollLeft + clientWidth < scrollWidth - 1
46
+ const state = computeOverflowNavState(vp)
47
+ showNav.value = state.overflowing
48
+ canPrev.value = state.canPrev
49
+ canNext.value = state.canNext
44
50
  }
45
51
 
46
52
  /** 箭头按钮:按视口宽度 80% 的步长平滑滚动 */
47
53
  const scrollByStep = (dir: 1 | -1) => {
48
54
  const vp = viewportRef.value
49
55
  if (!vp) return
50
- vp.scrollTo({ left: vp.scrollLeft + dir * vp.clientWidth * 0.8, behavior: 'smooth' })
56
+ scrollViewportByStep(vp, dir)
51
57
  }
52
58
 
53
59
  /** 活动标签自动滚入视野 */
@@ -61,25 +67,14 @@ export function useTabsBar(options: UseTabsBarOptions) {
61
67
  if (activeIndex < 0) return
62
68
  const el = list.children[activeIndex] as HTMLElement | undefined
63
69
  if (!el) return
64
-
65
- const vpRect = vp.getBoundingClientRect()
66
- const elRect = el.getBoundingClientRect()
67
- if (elRect.left < vpRect.left) {
68
- vp.scrollTo({ left: vp.scrollLeft + (elRect.left - vpRect.left) - 8, behavior: 'smooth' })
69
- } else if (elRect.right > vpRect.right) {
70
- vp.scrollTo({ left: vp.scrollLeft + (elRect.right - vpRect.right) + 8, behavior: 'smooth' })
71
- }
70
+ scrollElementIntoView(vp, el)
72
71
  }
73
72
 
74
73
  /** 鼠标滚轮(纵向)驱动水平滚动;触控板横滑(已有 deltaX)不拦截 */
75
74
  const handleWheel = (e: WheelEvent) => {
76
- if (!showNav.value) return
77
75
  const vp = viewportRef.value
78
76
  if (!vp) return
79
- if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) return
80
- if (e.deltaY === 0) return
81
- e.preventDefault()
82
- vp.scrollLeft += e.deltaY
77
+ applyWheelHorizontalScroll(e, vp, showNav.value)
83
78
  }
84
79
 
85
80
  useResizeObserver({ targets: [viewportRef, listRef], onResize: () => updateNavState() })
@@ -25,7 +25,7 @@ export interface CollapseProps extends ComponentProps {
25
25
  defaultCollapseAll?: boolean
26
26
 
27
27
  /**
28
- * 自定义展开图标组件,活动态会自动旋转 90°。
28
+ * 自定义展开图标组件,活动态会自动旋转 180°。
29
29
  * 接受任意 Vue 组件(SFC、Functional Component 等)。
30
30
  */
31
31
  expandIcon?: Component
@@ -39,12 +39,34 @@ export interface CollapseEmits {
39
39
 
40
40
  /** CollapseItem 组件属性 */
41
41
  export interface CollapseItemProps {
42
- /** 唯一标识 */
43
- value: CollapseValue
42
+ /**
43
+ * 唯一标识;在 `UCollapse` 内使用时必填。
44
+ * 独立使用时可选。
45
+ */
46
+ value?: CollapseValue
47
+
48
+ /**
49
+ * 独立使用时的展开状态(`v-model`)。
50
+ * 在 `UCollapse` 内由父组件 `modelValue` 管理,此属性无效。
51
+ * @default false
52
+ */
53
+ modelValue?: boolean
44
54
 
45
55
  /** 标题文本(也可使用 #title 插槽) */
46
56
  title?: string
47
57
 
48
58
  /** 是否禁用 */
49
59
  disabled?: boolean
60
+
61
+ /**
62
+ * 独立使用时的自定义展开图标,活动态会自动旋转 180°。
63
+ * 在 `UCollapse` 内由父组件 `expandIcon` 统一管理。
64
+ */
65
+ expandIcon?: Component
66
+ }
67
+
68
+ export interface CollapseItemEmits {
69
+ (e: 'update:modelValue', value: boolean): void
70
+ /** 展开状态变更时触发(仅独立使用) */
71
+ (e: 'change', value: boolean): void
50
72
  }
@@ -5,8 +5,8 @@ import type { Component } from 'vue'
5
5
  * 右键菜单项
6
6
  */
7
7
  export interface ContextmenuItem {
8
- /** 菜单名称 */
9
- label: string
8
+ /** 菜单名称(divider 时可空) */
9
+ label?: string
10
10
  /** 菜单描述 */
11
11
  description?: string
12
12
  /** 菜单图标 */
@@ -17,6 +17,12 @@ export interface ContextmenuItem {
17
17
  callback?: () => any
18
18
  /** 是否禁用 */
19
19
  disabled?: boolean | (() => boolean)
20
+ /** 渲染为分割线(忽略其余字段) */
21
+ divider?: boolean
22
+ /** 自定义内容组件(替代 label 文本渲染) */
23
+ render?: Component
24
+ /** 点击本项不触发关闭流程(供内嵌交互组件使用) */
25
+ keepOpen?: boolean
20
26
  }
21
27
 
22
28
  /** 鼠标右键菜单组件属性 */
@@ -24,8 +30,8 @@ export interface ContextmenuProps extends ComponentProps {
24
30
  /** 鼠标位置 */
25
31
  mousePosition: { x: number; y: number }
26
32
  /**
27
- * 菜单宽度
28
- * @default 200
33
+ * 菜单宽度。传数字为固定 px;传 `'max-content'` 时由内容撑开(配合根样式 min-width: 120px)。
34
+ * @default 150
29
35
  */
30
36
  width?: number | string
31
37
  /** 菜单项 */
@@ -1,25 +0,0 @@
1
- import { ActionGroupProps, _ActionGroupExposed } from "../../types/action.js";
2
- import "../../types/index.js";
3
- import { VNode } from "vue";
4
- //#region src/components/action/action-group.vue.d.ts
5
- type __VLS_Slots = {
6
- default?: () => VNode[];
7
- };
8
- declare const __VLS_base: import("vue").DefineComponent<ActionGroupProps, _ActionGroupExposed, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ActionGroupProps> & Readonly<{}>, {
9
- size: "small" | "default" | "large";
10
- type: import("@veltra/utils").ColorType;
11
- max: number;
12
- text: boolean;
13
- circle: boolean;
14
- loading: boolean;
15
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
- declare const _default: typeof __VLS_export;
18
- type __VLS_WithSlots<T, S> = T & {
19
- new (): {
20
- $slots: S;
21
- };
22
- };
23
- //#endregion
24
- export { _default as default };
25
- //# sourceMappingURL=action-group.vue.d.ts.map
@@ -1,33 +0,0 @@
1
- import { ButtonType } from "../../types/button.js";
2
- import { ActionProps } from "../../types/action.js";
3
- import "../../types/index.js";
4
- import "../../index.js";
5
- //#region src/components/action/action.vue.d.ts
6
- declare var __VLS_17: {}, __VLS_28: {};
7
- type __VLS_Slots = {} & {
8
- default?: (props: typeof __VLS_17) => any;
9
- } & {
10
- default?: (props: typeof __VLS_28) => any;
11
- };
12
- declare const __VLS_base: import("vue").DefineComponent<ActionProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
13
- run: () => any;
14
- }, string, import("vue").PublicProps, Readonly<ActionProps> & Readonly<{
15
- onRun?: (() => any) | undefined;
16
- }>, {
17
- size: import("@veltra/utils").ComponentSize;
18
- type: ButtonType;
19
- text: boolean;
20
- circle: boolean;
21
- loading: boolean;
22
- inDropdown: boolean;
23
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
- declare const _default: typeof __VLS_export;
26
- type __VLS_WithSlots<T, S> = T & {
27
- new (): {
28
- $slots: S;
29
- };
30
- };
31
- //#endregion
32
- export { _default as default };
33
- //# sourceMappingURL=action.vue.d.ts.map
@@ -1,3 +0,0 @@
1
- import _default from "./action.vue.js";
2
- import _default$1 from "./action-group.vue.js";
3
- export { _default as UAction, _default$1 as UActionGroup };
@@ -1,41 +0,0 @@
1
- import { AutoCompleteProps, _AutoCompleteExposed } from "../../types/auto-complete.js";
2
- import "../../types/index.js";
3
- //#region src/components/auto-complete/auto-complete.vue.d.ts
4
- type __VLS_Props = AutoCompleteProps;
5
- type __VLS_Slots = {
6
- default?: (props: {
7
- option: string;
8
- index: number;
9
- }) => any;
10
- suffix?: () => any;
11
- prefix?: () => any;
12
- };
13
- type __VLS_ModelProps = {
14
- modelValue?: string;
15
- };
16
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
17
- declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, _AutoCompleteExposed, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
- "update:modelValue": (value: string | undefined) => any;
19
- } & {
20
- "update:modelValue": (value: string) => any;
21
- select: (value: string) => any;
22
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
23
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
24
- onSelect?: ((value: string) => any) | undefined;
25
- }>, {
26
- disabled: boolean;
27
- readonly: boolean;
28
- placeholder: string;
29
- clearable: boolean;
30
- allowCustom: boolean;
31
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
32
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
33
- declare const _default: typeof __VLS_export;
34
- type __VLS_WithSlots<T, S> = T & {
35
- new (): {
36
- $slots: S;
37
- };
38
- };
39
- //#endregion
40
- export { _default as default };
41
- //# sourceMappingURL=auto-complete.vue.d.ts.map
@@ -1,2 +0,0 @@
1
- import _default from "./auto-complete.vue.js";
2
- export { _default as UAutoComplete };
@@ -1,20 +0,0 @@
1
- import { BadgeProps } from "../../types/badge.js";
2
- import "../../types/index.js";
3
- //#region src/components/badge/badge.vue.d.ts
4
- declare var __VLS_1: {};
5
- type __VLS_Slots = {} & {
6
- default?: (props: typeof __VLS_1) => any;
7
- };
8
- declare const __VLS_base: import("vue").DefineComponent<BadgeProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<BadgeProps> & Readonly<{}>, {
9
- max: number;
10
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
- declare const _default: typeof __VLS_export;
13
- type __VLS_WithSlots<T, S> = T & {
14
- new (): {
15
- $slots: S;
16
- };
17
- };
18
- //#endregion
19
- export { _default as default };
20
- //# sourceMappingURL=badge.vue.d.ts.map