@veltra/desktop 1.1.25 → 1.1.27

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 (243) hide show
  1. package/dist/components/action/action-group.vue.d.ts +2 -2
  2. package/dist/components/action/action.js.map +1 -1
  3. package/dist/components/action/action.vue.d.ts +1 -1
  4. package/dist/components/badge/badge.js.map +1 -1
  5. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  6. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  7. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  8. package/dist/components/batch-edit/batch-edit.vue.d.ts +2 -2
  9. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  10. package/dist/components/button/button-group.js.map +1 -1
  11. package/dist/components/button/button.js.map +1 -1
  12. package/dist/components/calendar/calendar.js.map +1 -1
  13. package/dist/components/card/card-action.js.map +1 -1
  14. package/dist/components/card/card-content.js.map +1 -1
  15. package/dist/components/card/card-cover.js.map +1 -1
  16. package/dist/components/card/card.js.map +1 -1
  17. package/dist/components/cascade/cascade-panel-item.js.map +1 -1
  18. package/dist/components/cascade/cascade.js.map +1 -1
  19. package/dist/components/cascade/cascade.vue.d.ts +3 -3
  20. package/dist/components/check-tag/check-tag.js.map +1 -1
  21. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  22. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  23. package/dist/components/checkbox/checkbox.js.map +1 -1
  24. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  25. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
  26. package/dist/components/code-editor/code-editor.js.map +1 -1
  27. package/dist/components/collapse/collapse-item.js.map +1 -1
  28. package/dist/components/collapse/collapse.js.map +1 -1
  29. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  30. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  31. package/dist/components/context-menu/context-menu-item.js.map +1 -1
  32. package/dist/components/context-menu/context-menu.js.map +1 -1
  33. package/dist/components/date-panel/date-panel.js.map +1 -1
  34. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  35. package/dist/components/date-panel/headers/day.js.map +1 -1
  36. package/dist/components/date-panel/headers/month.js.map +1 -1
  37. package/dist/components/date-panel/headers/year.js.map +1 -1
  38. package/dist/components/date-panel/panels/day.js.map +1 -1
  39. package/dist/components/date-panel/panels/month.js.map +1 -1
  40. package/dist/components/date-panel/panels/year.js.map +1 -1
  41. package/dist/components/date-picker/date-picker.js.map +1 -1
  42. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  43. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  44. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  45. package/dist/components/dialog/dialog.js.map +1 -1
  46. package/dist/components/drawer/drawer.js.map +1 -1
  47. package/dist/components/empty/empty.js.map +1 -1
  48. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  49. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  50. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  51. package/dist/components/file-picker/file-picker.js.map +1 -1
  52. package/dist/components/file-picker/file-picker.vue.d.ts +1 -1
  53. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  54. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  55. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  56. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  57. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  58. package/dist/components/float-button/float-button.js.map +1 -1
  59. package/dist/components/form/form-model.d.ts +2 -2
  60. package/dist/components/form/form-model.js.map +1 -1
  61. package/dist/components/form/form.js.map +1 -1
  62. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  64. package/dist/components/grid/grid-item.js.map +1 -1
  65. package/dist/components/grid/grid.js.map +1 -1
  66. package/dist/components/grid-input/grid-input.js.map +1 -1
  67. package/dist/components/group-input/group-input.js.map +1 -1
  68. package/dist/components/icon/icon.js.map +1 -1
  69. package/dist/components/input/input.js.map +1 -1
  70. package/dist/components/input/input.vue.d.ts +2 -2
  71. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/layout/layout-resizer.js.map +1 -1
  73. package/dist/components/layout/layout.js.map +1 -1
  74. package/dist/components/list/list-item.js.map +1 -1
  75. package/dist/components/list/list.js.map +1 -1
  76. package/dist/components/loading/loading.js.map +1 -1
  77. package/dist/components/menu/menu-icon.js.map +1 -1
  78. package/dist/components/menu/menu-sub-collapsed.js.map +1 -1
  79. package/dist/components/menu/menu.js.map +1 -1
  80. package/dist/components/message/message-box.js.map +1 -1
  81. package/dist/components/message/message.js.map +1 -1
  82. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  83. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  84. package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
  85. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +3 -3
  86. package/dist/components/notification/notification.js.map +1 -1
  87. package/dist/components/notification/notification.vue.d.ts +1 -1
  88. package/dist/components/number/number.js.map +1 -1
  89. package/dist/components/number/number.vue.d.ts +1 -1
  90. package/dist/components/number-input/number-input.js.map +1 -1
  91. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  92. package/dist/components/paginator/paginator.js.map +1 -1
  93. package/dist/components/palette/palette-alpha.js.map +1 -1
  94. package/dist/components/palette/palette-color-switch.js.map +1 -1
  95. package/dist/components/palette/palette-hue.js.map +1 -1
  96. package/dist/components/palette/palette-sv.js.map +1 -1
  97. package/dist/components/palette/palette.js.map +1 -1
  98. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  99. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
  100. package/dist/components/progress/progress.js.map +1 -1
  101. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  102. package/dist/components/radio/radio.js.map +1 -1
  103. package/dist/components/radio-group/radio-group.js.map +1 -1
  104. package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
  105. package/dist/components/scroll/scroll-bar.js.map +1 -1
  106. package/dist/components/scroll/scroll.js.map +1 -1
  107. package/dist/components/select/select.vue.d.ts +2 -2
  108. package/dist/components/slider/slider-thumb.js.map +1 -1
  109. package/dist/components/slider/slider.js.map +1 -1
  110. package/dist/components/steps/steps.js.map +1 -1
  111. package/dist/components/switch/switch.js.map +1 -1
  112. package/dist/components/table/table-body.js.map +1 -1
  113. package/dist/components/table/table-cell.js.map +1 -1
  114. package/dist/components/table/table-foot.js.map +1 -1
  115. package/dist/components/table/table.vue.d.ts +2 -2
  116. package/dist/components/table-editor/table-editor.js.map +1 -1
  117. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  118. package/dist/components/tabs/tabs-horizontal.vue.d.ts +3 -3
  119. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  120. package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
  121. package/dist/components/tabs/tabs.js.map +1 -1
  122. package/dist/components/tabs/tabs.vue.d.ts +3 -3
  123. package/dist/components/tag/tag.js.map +1 -1
  124. package/dist/components/text/text.js.map +1 -1
  125. package/dist/components/textarea/textarea.js.map +1 -1
  126. package/dist/components/textarea/textarea.vue.d.ts +3 -3
  127. package/dist/components/theme/theme.js.map +1 -1
  128. package/dist/components/tip/tip.js.map +1 -1
  129. package/dist/components/tip/tip.vue.d.ts +1 -1
  130. package/dist/components/tree/tree-node.js.map +1 -1
  131. package/dist/components/tree/tree.js.map +1 -1
  132. package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
  133. package/dist/components/watermark/watermark.js.map +1 -1
  134. package/package.json +6 -6
  135. package/src/components/action/action.vue +1 -4
  136. package/src/components/badge/badge.vue +3 -9
  137. package/src/components/batch-edit/batch-edit-form.vue +1 -5
  138. package/src/components/batch-edit/batch-edit-list.vue +2 -6
  139. package/src/components/batch-edit/batch-edit.vue +2 -12
  140. package/src/components/breadcrumb/breadcrumb.vue +4 -13
  141. package/src/components/button/button-group.vue +2 -6
  142. package/src/components/button/button.vue +3 -9
  143. package/src/components/calendar/calendar.vue +1 -3
  144. package/src/components/card/card-action.vue +1 -3
  145. package/src/components/card/card-content.vue +1 -6
  146. package/src/components/card/card-cover.vue +1 -3
  147. package/src/components/card/card.vue +2 -6
  148. package/src/components/cascade/cascade-panel-item.vue +2 -8
  149. package/src/components/cascade/cascade.vue +5 -37
  150. package/src/components/check-tag/check-tag.vue +1 -3
  151. package/src/components/checkbox/checkbox-button.vue +2 -6
  152. package/src/components/checkbox/checkbox.vue +1 -3
  153. package/src/components/checkbox-group/checkbox-group.vue +1 -3
  154. package/src/components/code-editor/code-editor.vue +4 -12
  155. package/src/components/collapse/collapse-item.vue +1 -3
  156. package/src/components/collapse/collapse.vue +2 -8
  157. package/src/components/condition-editor/components/condition-row.vue +2 -8
  158. package/src/components/condition-editor/condition-editor.vue +2 -6
  159. package/src/components/context-menu/context-menu-item.vue +3 -10
  160. package/src/components/context-menu/context-menu.vue +5 -17
  161. package/src/components/date-panel/date-panel.vue +3 -11
  162. package/src/components/date-panel/headers/day.vue +1 -3
  163. package/src/components/date-panel/headers/month.vue +1 -3
  164. package/src/components/date-panel/headers/year.vue +1 -3
  165. package/src/components/date-panel/panels/day.vue +1 -4
  166. package/src/components/date-panel/panels/month.vue +1 -3
  167. package/src/components/date-panel/panels/year.vue +1 -3
  168. package/src/components/date-picker/date-picker.vue +1 -3
  169. package/src/components/date-range-picker/date-range-picker.vue +1 -3
  170. package/src/components/dialog/dialog.vue +7 -24
  171. package/src/components/drawer/drawer.vue +3 -11
  172. package/src/components/empty/empty.vue +2 -7
  173. package/src/components/expression-editor/components/path-preview.vue +2 -6
  174. package/src/components/expression-editor/components/variable-picker.vue +1 -3
  175. package/src/components/expression-editor/expression-editor.vue +2 -6
  176. package/src/components/expression-editor/style.scss +1 -1
  177. package/src/components/file-picker/file-picker.vue +2 -7
  178. package/src/components/file-viewer/file-viewer.vue +4 -22
  179. package/src/components/file-viewer/previewers/pdf-previewer.vue +1 -5
  180. package/src/components/file-viewer/previewers/pdf-viewport-scroll.vue +1 -7
  181. package/src/components/file-viewer/previewers/pdf-zoom-bridge.vue +2 -7
  182. package/src/components/file-viewer/previewers/sheet-previewer.vue +4 -10
  183. package/src/components/float-button/float-button.vue +1 -3
  184. package/src/components/form/form-model.ts +9 -2
  185. package/src/components/form/form.vue +3 -13
  186. package/src/components/gantt-chart/gantt-chart.vue +1 -3
  187. package/src/components/grid/grid-item.vue +3 -9
  188. package/src/components/grid/grid.vue +5 -18
  189. package/src/components/grid-input/grid-input.vue +2 -6
  190. package/src/components/group-input/group-input.vue +2 -7
  191. package/src/components/icon/icon.vue +2 -6
  192. package/src/components/input/input.vue +2 -6
  193. package/src/components/layout/layout-resizer.vue +1 -3
  194. package/src/components/layout/layout.vue +3 -9
  195. package/src/components/list/list-item.vue +1 -3
  196. package/src/components/list/list.vue +2 -6
  197. package/src/components/loading/loading.vue +3 -9
  198. package/src/components/menu/menu-icon.vue +2 -6
  199. package/src/components/menu/menu-sub-collapsed.vue +2 -8
  200. package/src/components/menu/menu.vue +3 -9
  201. package/src/components/menu/style.scss +1 -1
  202. package/src/components/message/message-box.vue +3 -10
  203. package/src/components/message/message.vue +3 -9
  204. package/src/components/message-confirm/message-confirm.vue +2 -6
  205. package/src/components/multi-select/multi-select-option.vue +3 -9
  206. package/src/components/notification/notification.vue +3 -11
  207. package/src/components/number/number.vue +4 -14
  208. package/src/components/number-input/number-input.vue +7 -36
  209. package/src/components/number-range-input/number-range-input.vue +4 -17
  210. package/src/components/paginator/paginator.vue +7 -22
  211. package/src/components/palette/palette-alpha.vue +2 -6
  212. package/src/components/palette/palette-color-switch.vue +1 -3
  213. package/src/components/palette/palette-hue.vue +2 -6
  214. package/src/components/palette/palette-sv.vue +5 -17
  215. package/src/components/palette/palette.vue +2 -12
  216. package/src/components/pop-confirm/pop-confirm.vue +2 -6
  217. package/src/components/progress/progress.vue +2 -7
  218. package/src/components/progress-nodes/progress-nodes.vue +2 -7
  219. package/src/components/radio/radio.vue +2 -6
  220. package/src/components/radio-group/radio-group.vue +1 -3
  221. package/src/components/scroll/scroll-bar.vue +5 -17
  222. package/src/components/scroll/scroll.vue +5 -16
  223. package/src/components/slider/slider-thumb.vue +4 -12
  224. package/src/components/slider/slider.vue +3 -14
  225. package/src/components/steps/steps.vue +3 -10
  226. package/src/components/switch/switch.vue +2 -7
  227. package/src/components/table/table-body.vue +2 -8
  228. package/src/components/table/table-cell.vue +2 -7
  229. package/src/components/table/table-foot.vue +2 -9
  230. package/src/components/table-editor/table-editor.vue +1 -3
  231. package/src/components/tabs/tabs-horizontal.vue +2 -6
  232. package/src/components/tabs/tabs-vertical.vue +1 -3
  233. package/src/components/tabs/tabs.vue +1 -3
  234. package/src/components/tag/tag.vue +2 -6
  235. package/src/components/text/text.vue +3 -9
  236. package/src/components/textarea/textarea.vue +1 -3
  237. package/src/components/theme/group-item.vue +1 -3
  238. package/src/components/theme/group.vue +1 -3
  239. package/src/components/theme/theme.vue +6 -26
  240. package/src/components/tip/tip.vue +1 -3
  241. package/src/components/tree/tree-node.vue +1 -3
  242. package/src/components/tree/tree.vue +7 -30
  243. package/src/components/watermark/watermark.vue +4 -15
@@ -1 +1 @@
1
- {"version":3,"file":"tip.js","names":[],"sources":["../../../src/components/tip/tip.vue"],"sourcesContent":["<template>\n <!-- 触发 -->\n <UNodeRender v-bind=\"eventsHandlers\" :content=\"renderDefaultSlotTrigger()\" ref=\"triggerRef\" />\n\n <!-- 弹出内容 -->\n <teleport :to=\"`#${popperContainerId}`\">\n <transition name=\"tip\">\n <component\n v-if=\"tipVisible\"\n :is=\"contentTag\"\n :class=\"contentClass\"\n :style=\"[style, { zIndex: zIndex() }]\"\n ref=\"contentRef\"\n @mouseenter=\"eventsHandlers.onMouseenter\"\n @mouseleave=\"eventsHandlers.onMouseleave\"\n @click.stop\n v-click-outside=\"handleClickOutside\"\n >\n <UNodeRender v-if=\"externalNode\" :content=\"externalNode\" />\n\n <slot name=\"content\">{{ content }}</slot>\n\n <div :class=\"cls.e('arrow')\" v-if=\"!hideArrow\" ref=\"arrowRef\"></div>\n </component>\n </transition>\n </teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps, usePop } from '@veltra/compositions'\nimport { vClickOutside } from '@veltra/directives'\nimport { bem, extractNormalVNodes, zIndex } from '@veltra/utils'\nimport { shallowRef, computed, useSlots, onBeforeUnmount, toRef, watch, nextTick } from 'vue'\n\nimport type { TipProps, ComponentSize, TipEmits } from '../../types'\nimport { UNodeRender } from '../node-render'\nimport { useNest } from './use-nest'\n\ndefineOptions({ name: 'Tip' })\n\nconst props = withDefaults(defineProps<TipProps>(), {\n content: '',\n trigger: 'hover',\n direction: 'top',\n alignment: 'center',\n contentTag: 'div',\n visible: undefined\n})\n\nconst emit = defineEmits<TipEmits>()\n\nconst cls = bem('tip')\nconst slots = useSlots()\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst contentClass = computed(() => {\n const fixed = [cls.e('content'), cls.m(size.value)]\n const className = props.class\n if (!Array.isArray(className)) {\n return [...fixed, className]\n }\n return [...fixed, ...className]\n})\n\nconst triggerRef = shallowRef<InstanceType<typeof UNodeRender>>()\nconst contentRef = shallowRef<HTMLElement>()\nconst arrowRef = shallowRef<HTMLElement>()\n\nconst _visible = shallowRef(false)\n\nconst visible = computed(() => {\n return props.visible !== undefined ? props.visible : _visible.value\n})\n\nfunction updateVisible(v: boolean) {\n if (props.visible === undefined) {\n _visible.value = v\n } else {\n emit('update:visible', v)\n }\n}\n\nconst tipVisible = useNest(visible)\n\nfunction renderDefaultSlotTrigger() {\n const nodes = slots.default?.()\n if (!nodes?.length) return null\n return extractNormalVNodes(nodes)[0]\n}\n\nconst eventsHandlers = computed(() => {\n const { trigger, disabled } = props\n\n const handlers: Record<string, Function> = {}\n\n if (disabled) return handlers\n\n if (trigger === 'click') {\n handlers.onClick = open\n } else if (trigger === 'hover') {\n handlers.onMouseenter = open\n handlers.onMouseleave = close\n }\n\n return handlers\n})\n\nconst handleClickOutside = (e: MouseEvent) => {\n if (props.trigger === 'hover') return\n\n // 点击的元素在触发元素中则啥也\n if (props.trigger === 'click' && triggerDom.value.contains(e.target as Node)) {\n return\n }\n close()\n}\n\nlet closeTimer: number | undefined = undefined\n\n/** 弹出 */\nconst open = (e?: PointerEvent) => {\n e?.stopPropagation()\n closeTimer !== undefined && clearTimeout(closeTimer)\n\n updateVisible(true)\n}\n/** 关闭 */\nconst close = () => {\n if (props.trigger === 'hover') {\n closeTimer = setTimeout(() => {\n updateVisible(false)\n }, 250)\n } else {\n updateVisible(false)\n }\n}\n\nconst triggerDom = computed(() => {\n return props.triggerDom || triggerRef.value?.$el\n})\n\nconst { update, popperContainerId } = usePop({\n triggerRef: triggerDom,\n contentRef,\n arrowRef,\n direction: toRef(() => props.direction),\n alignment: toRef(() => props.alignment),\n onTriggerPositionChange() {\n close()\n }\n})\n\nwatch(triggerDom, (dom) => {\n // TODO: 看起来不是很优雅\n if (dom?.nodeType === Node.ELEMENT_NODE && visible.value) {\n nextTick(() => {\n void update()\n })\n }\n})\n\n/** 外部节点 */\nconst externalNode = shallowRef<any>()\n\nonBeforeUnmount(() => {\n clearTimeout(closeTimer)\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"tip.js","names":[],"sources":["../../../src/components/tip/tip.vue"],"sourcesContent":["<template>\n <!-- 触发 -->\n <UNodeRender v-bind=\"eventsHandlers\" :content=\"renderDefaultSlotTrigger()\" ref=\"triggerRef\" />\n\n <!-- 弹出内容 -->\n <teleport :to=\"`#${popperContainerId}`\">\n <transition name=\"tip\">\n <component\n v-if=\"tipVisible\"\n :is=\"contentTag\"\n :class=\"contentClass\"\n :style=\"[style, { zIndex: zIndex() }]\"\n ref=\"contentRef\"\n @mouseenter=\"eventsHandlers.onMouseenter\"\n @mouseleave=\"eventsHandlers.onMouseleave\"\n @click.stop\n v-click-outside=\"handleClickOutside\"\n >\n <UNodeRender v-if=\"externalNode\" :content=\"externalNode\" />\n\n <slot name=\"content\">{{ content }}</slot>\n\n <div :class=\"cls.e('arrow')\" v-if=\"!hideArrow\" ref=\"arrowRef\"></div>\n </component>\n </transition>\n </teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps, usePop } from '@veltra/compositions'\nimport { vClickOutside } from '@veltra/directives'\nimport { bem, extractNormalVNodes, zIndex } from '@veltra/utils'\nimport { shallowRef, computed, useSlots, onBeforeUnmount, toRef, watch, nextTick } from 'vue'\n\nimport type { TipProps, ComponentSize, TipEmits } from '../../types'\nimport { UNodeRender } from '../node-render'\nimport { useNest } from './use-nest'\n\ndefineOptions({ name: 'Tip' })\n\nconst props = withDefaults(defineProps<TipProps>(), {\n content: '',\n trigger: 'hover',\n direction: 'top',\n alignment: 'center',\n contentTag: 'div',\n visible: undefined\n})\n\nconst emit = defineEmits<TipEmits>()\n\nconst cls = bem('tip')\nconst slots = useSlots()\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst contentClass = computed(() => {\n const fixed = [cls.e('content'), cls.m(size.value)]\n const className = props.class\n if (!Array.isArray(className)) {\n return [...fixed, className]\n }\n return [...fixed, ...className]\n})\n\nconst triggerRef = shallowRef<InstanceType<typeof UNodeRender>>()\nconst contentRef = shallowRef<HTMLElement>()\nconst arrowRef = shallowRef<HTMLElement>()\n\nconst _visible = shallowRef(false)\n\nconst visible = computed(() => {\n return props.visible !== undefined ? props.visible : _visible.value\n})\n\nfunction updateVisible(v: boolean) {\n if (props.visible === undefined) {\n _visible.value = v\n } else {\n emit('update:visible', v)\n }\n}\n\nconst tipVisible = useNest(visible)\n\nfunction renderDefaultSlotTrigger() {\n const nodes = slots.default?.()\n if (!nodes?.length) return null\n return extractNormalVNodes(nodes)[0]\n}\n\nconst eventsHandlers = computed(() => {\n const { trigger, disabled } = props\n\n const handlers: Record<string, Function> = {}\n\n if (disabled) return handlers\n\n if (trigger === 'click') {\n handlers.onClick = open\n } else if (trigger === 'hover') {\n handlers.onMouseenter = open\n handlers.onMouseleave = close\n }\n\n return handlers\n})\n\nconst handleClickOutside = (e: MouseEvent) => {\n if (props.trigger === 'hover') return\n\n // 点击的元素在触发元素中则啥也\n if (props.trigger === 'click' && triggerDom.value.contains(e.target as Node)) {\n return\n }\n close()\n}\n\nlet closeTimer: number | undefined = undefined\n\n/** 弹出 */\nconst open = (e?: PointerEvent) => {\n e?.stopPropagation()\n closeTimer !== undefined && clearTimeout(closeTimer)\n\n updateVisible(true)\n}\n/** 关闭 */\nconst close = () => {\n if (props.trigger === 'hover') {\n closeTimer = setTimeout(() => {\n updateVisible(false)\n }, 250)\n } else {\n updateVisible(false)\n }\n}\n\nconst triggerDom = computed(() => {\n return props.triggerDom || triggerRef.value?.$el\n})\n\nconst { update, popperContainerId } = usePop({\n triggerRef: triggerDom,\n contentRef,\n arrowRef,\n direction: toRef(() => props.direction),\n alignment: toRef(() => props.alignment),\n onTriggerPositionChange() {\n close()\n }\n})\n\nwatch(triggerDom, (dom) => {\n // TODO: 看起来不是很优雅\n if (dom?.nodeType === Node.ELEMENT_NODE && visible.value) {\n nextTick(() => {\n void update()\n })\n }\n})\n\n/** 外部节点 */\nconst externalNode = shallowRef<any>()\n\nonBeforeUnmount(() => {\n clearTimeout(closeTimer)\n})\n</script>\n"],"mappings":"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"}
@@ -14,8 +14,8 @@ declare const __VLS_base: _$vue.DefineComponent<TipProps, {}, {}, {}, {}, _$vue.
14
14
  trigger: "hover" | "click";
15
15
  contentTag: string;
16
16
  visible: boolean;
17
- direction: TipDirection;
18
17
  content: string;
18
+ direction: TipDirection;
19
19
  alignment: TipAlign;
20
20
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
21
21
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node.js","names":[],"sources":["../../../src/components/tree/tree-node.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.e('node'), bem.is('expanded', node.expanded), bem.is('disabled', node.disabled)]\"\n :ref=\"measureRef\"\n >\n <span v-for=\"i in node.depth\" :key=\"i\" :class=\"cls.e('indent')\" aria-hidden=\"true\"></span>\n\n <u-icon v-if=\"!node.isLeaf\" :class=\"cls.e('expand-icon')\" @click.stop=\"toggleExpand\">\n <ArrowRight />\n </u-icon>\n <u-icon v-else :class=\"cls.e('leaf-icon')\" aria-hidden=\"true\">\n <Dot />\n </u-icon>\n\n <div\n :class=\"cls.e('node-content')\"\n @click=\"handleClick\"\n @contextmenu=\"treeEmit('node-contextmenu', $event, node)\"\n v-ripple=\"\n (treeProps.checkable || treeProps.selectable) && !node.disabled ? cls.e('ripple') : false\n \"\n >\n <u-checkbox\n v-if=\"treeProps.checkable\"\n :class=\"cls.e('checkbox')\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"node.disabled\"\n @change=\"handleChange\"\n @click.stop\n />\n\n <u-node-render :content=\"getTreeSlotsNode({ node, data: node.data })\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { vRipple } from '@veltra/directives'\nimport { ArrowRight, Dot } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject } from 'vue'\n\nimport type { TreeNodeProps } from '../../types'\nimport UCheckbox from '../checkbox/checkbox.vue'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { TreeDIKey } from './di'\n\ndefineOptions({\n name: 'TreeNode'\n})\n\nconst props = defineProps<TreeNodeProps>()\n\nconst { treeProps, treeEmit, cls, getTreeSlotsNode, getFlattedNodes, toggleCheck, handleSelect } =\n inject(TreeDIKey)!\n\nfunction measureRef(el: unknown) {\n if (typeof props.index !== 'number' || !props.measureElement) return\n props.measureElement(props.index, el as Element | null)\n}\n\nfunction toggleExpand() {\n const { node } = props\n node.expanded = !node.expanded\n getFlattedNodes()\n\n treeEmit('expand', node)\n}\n\nfunction handleChange(checked: boolean, e: MouseEvent) {\n toggleCheck(props.node, checked, e.ctrlKey)\n}\n\nfunction handleClick(e: MouseEvent) {\n const { node } = props\n treeEmit('node-click', node)\n\n treeProps.selectable && handleSelect(node)\n treeProps.expandOnClickNode && toggleExpand()\n treeProps.checkable &&\n !node.disabled &&\n !treeProps.expandOnClickNode &&\n toggleCheck(node, !node.checked, e.ctrlKey)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAqDA,MAAM,QAAQ;EAEd,MAAM,EAAE,WAAW,UAAU,KAAK,kBAAkB,iBAAiB,aAAa,iBAChF,OAAO,UAAS;EAElB,SAAS,WAAW,IAAa;GAC/B,IAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,gBAAgB;GAC9D,MAAM,eAAe,MAAM,OAAO,GAAoB;;EAGxD,SAAS,eAAe;GACtB,MAAM,EAAE,SAAS;GACjB,KAAK,WAAW,CAAC,KAAK;GACtB,iBAAgB;GAEhB,SAAS,UAAU,KAAI;;EAGzB,SAAS,aAAa,SAAkB,GAAe;GACrD,YAAY,MAAM,MAAM,SAAS,EAAE,QAAO;;EAG5C,SAAS,YAAY,GAAe;GAClC,MAAM,EAAE,SAAS;GACjB,SAAS,cAAc,KAAI;GAE3B,UAAU,cAAc,aAAa,KAAI;GACzC,UAAU,qBAAqB,cAAa;GAC5C,UAAU,aACR,CAAC,KAAK,YACN,CAAC,UAAU,qBACX,YAAY,MAAM,CAAC,KAAK,SAAS,EAAE,QAAO;;;uBAnF5C,mBAiCM,OAAA;IAhCH,OAAK,eAAA;KAAG,MAAA,IAAA,CAAI,EAAC,OAAA;KAAU,MAAA,IAAA,CAAI,GAAE,YAAa,QAAA,KAAK,SAAQ;KAAG,MAAA,IAAA,CAAI,GAAE,YAAa,QAAA,KAAK,SAAQ;KAAA,CAAA;IAC1F,KAAK;;sBAEN,mBAA0F,UAAA,MAAA,WAAxE,QAAA,KAAK,QAAV,MAAC;yBAAd,mBAA0F,QAAA;MAA3D,KAAK;MAAI,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;MAAY,eAAY;;;KAE7D,QAAA,KAAK,UAAA,WAAA,EAApB,YAES,MAAA,YAAA,EAAA;;KAFoB,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;KAAkB,SAAK,cAAO,cAAY,CAAA,OAAA,CAAA;;4BACnE,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA;;sCAEhB,YAES,MAAA,YAAA,EAAA;;KAFO,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA;KAAe,eAAY;;4BAC9C,CAAP,YAAO,MAAA,IAAA,CAAA,CAAA,CAAA;;;iCAGT,mBAmBM,OAAA;KAlBH,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,eAAA,CAAA;KACZ,SAAO;KACP,eAAW,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,SAAA,CAAQ,oBAAqB,QAAQ,QAAA,KAAI;QAM/C,MAAA,UAAA,CAAU,aAAA,WAAA,EADlB,YAQE,aAAA;;KANC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;KACZ,eAAa,QAAA,KAAK;KAClB,eAAe,QAAA,KAAK;KACpB,UAAU,QAAA,KAAK;KACf,UAAQ;KACR,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;;;;;;4CAGb,YAAwE,MAAA,WAAA,EAAA,EAAxD,SAAS,MAAA,iBAAA,CAAgB;KAAA,MAAG,QAAA;KAAI,MAAQ,QAAA,KAAK;KAAI,CAAA,EAAA,EAAA,MAAA,GAAA,CAAA,UAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAA,CAAA,MAAA,QAAA,GAd7C,MAAA,UAAA,CAAU,aAAa,MAAA,UAAA,CAAU,eAAU,CAAM,QAAA,KAAK,WAAW,MAAA,IAAA,CAAI,EAAC,SAAA,GAAA,MAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"tree-node.js","names":[],"sources":["../../../src/components/tree/tree-node.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.e('node'), bem.is('expanded', node.expanded), bem.is('disabled', node.disabled)]\"\n :ref=\"measureRef\"\n >\n <span v-for=\"i in node.depth\" :key=\"i\" :class=\"cls.e('indent')\" aria-hidden=\"true\"></span>\n\n <u-icon v-if=\"!node.isLeaf\" :class=\"cls.e('expand-icon')\" @click.stop=\"toggleExpand\">\n <ArrowRight />\n </u-icon>\n <u-icon v-else :class=\"cls.e('leaf-icon')\" aria-hidden=\"true\">\n <Dot />\n </u-icon>\n\n <div\n :class=\"cls.e('node-content')\"\n @click=\"handleClick\"\n @contextmenu=\"treeEmit('node-contextmenu', $event, node)\"\n v-ripple=\"\n (treeProps.checkable || treeProps.selectable) && !node.disabled ? cls.e('ripple') : false\n \"\n >\n <u-checkbox\n v-if=\"treeProps.checkable\"\n :class=\"cls.e('checkbox')\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"node.disabled\"\n @change=\"handleChange\"\n @click.stop\n />\n\n <u-node-render :content=\"getTreeSlotsNode({ node, data: node.data })\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { vRipple } from '@veltra/directives'\nimport { ArrowRight, Dot } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject } from 'vue'\n\nimport type { TreeNodeProps } from '../../types'\nimport UCheckbox from '../checkbox/checkbox.vue'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { TreeDIKey } from './di'\n\ndefineOptions({ name: 'TreeNode' })\n\nconst props = defineProps<TreeNodeProps>()\n\nconst { treeProps, treeEmit, cls, getTreeSlotsNode, getFlattedNodes, toggleCheck, handleSelect } =\n inject(TreeDIKey)!\n\nfunction measureRef(el: unknown) {\n if (typeof props.index !== 'number' || !props.measureElement) return\n props.measureElement(props.index, el as Element | null)\n}\n\nfunction toggleExpand() {\n const { node } = props\n node.expanded = !node.expanded\n getFlattedNodes()\n\n treeEmit('expand', node)\n}\n\nfunction handleChange(checked: boolean, e: MouseEvent) {\n toggleCheck(props.node, checked, e.ctrlKey)\n}\n\nfunction handleClick(e: MouseEvent) {\n const { node } = props\n treeEmit('node-click', node)\n\n treeProps.selectable && handleSelect(node)\n treeProps.expandOnClickNode && toggleExpand()\n treeProps.checkable &&\n !node.disabled &&\n !treeProps.expandOnClickNode &&\n toggleCheck(node, !node.checked, e.ctrlKey)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAmDA,MAAM,QAAQ;EAEd,MAAM,EAAE,WAAW,UAAU,KAAK,kBAAkB,iBAAiB,aAAa,iBAChF,OAAO,UAAS;EAElB,SAAS,WAAW,IAAa;GAC/B,IAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,gBAAgB;GAC9D,MAAM,eAAe,MAAM,OAAO,GAAoB;;EAGxD,SAAS,eAAe;GACtB,MAAM,EAAE,SAAS;GACjB,KAAK,WAAW,CAAC,KAAK;GACtB,iBAAgB;GAEhB,SAAS,UAAU,KAAI;;EAGzB,SAAS,aAAa,SAAkB,GAAe;GACrD,YAAY,MAAM,MAAM,SAAS,EAAE,QAAO;;EAG5C,SAAS,YAAY,GAAe;GAClC,MAAM,EAAE,SAAS;GACjB,SAAS,cAAc,KAAI;GAE3B,UAAU,cAAc,aAAa,KAAI;GACzC,UAAU,qBAAqB,cAAa;GAC5C,UAAU,aACR,CAAC,KAAK,YACN,CAAC,UAAU,qBACX,YAAY,MAAM,CAAC,KAAK,SAAS,EAAE,QAAO;;;uBAjF5C,mBAiCM,OAAA;IAhCH,OAAK,eAAA;KAAG,MAAA,IAAA,CAAI,EAAC,OAAA;KAAU,MAAA,IAAA,CAAI,GAAE,YAAa,QAAA,KAAK,SAAQ;KAAG,MAAA,IAAA,CAAI,GAAE,YAAa,QAAA,KAAK,SAAQ;KAAA,CAAA;IAC1F,KAAK;;sBAEN,mBAA0F,UAAA,MAAA,WAAxE,QAAA,KAAK,QAAV,MAAC;yBAAd,mBAA0F,QAAA;MAA3D,KAAK;MAAI,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;MAAY,eAAY;;;KAE7D,QAAA,KAAK,UAAA,WAAA,EAApB,YAES,MAAA,YAAA,EAAA;;KAFoB,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;KAAkB,SAAK,cAAO,cAAY,CAAA,OAAA,CAAA;;4BACnE,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA;;sCAEhB,YAES,MAAA,YAAA,EAAA;;KAFO,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA;KAAe,eAAY;;4BAC9C,CAAP,YAAO,MAAA,IAAA,CAAA,CAAA,CAAA;;;iCAGT,mBAmBM,OAAA;KAlBH,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,eAAA,CAAA;KACZ,SAAO;KACP,eAAW,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,SAAA,CAAQ,oBAAqB,QAAQ,QAAA,KAAI;QAM/C,MAAA,UAAA,CAAU,aAAA,WAAA,EADlB,YAQE,aAAA;;KANC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;KACZ,eAAa,QAAA,KAAK;KAClB,eAAe,QAAA,KAAK;KACpB,UAAU,QAAA,KAAK;KACf,UAAQ;KACR,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;;;;;;4CAGb,YAAwE,MAAA,WAAA,EAAA,EAAxD,SAAS,MAAA,iBAAA,CAAgB;KAAA,MAAG,QAAA;KAAI,MAAQ,QAAA,KAAK;KAAI,CAAA,EAAA,EAAA,MAAA,GAAA,CAAA,UAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAA,CAAA,MAAA,QAAA,GAd7C,MAAA,UAAA,CAAU,aAAa,MAAA,UAAA,CAAU,eAAU,CAAM,QAAA,KAAK,WAAW,MAAA,IAAA,CAAI,EAAC,SAAA,GAAA,MAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","names":[],"sources":["../../../src/components/tree/tree.vue"],"sourcesContent":["<template>\n <u-scroll\n :class=\"className\"\n ref=\"scrollRef\"\n :content-class=\"[cls.e('wrap'), bem.is('virtual', virtualEnabled)]\"\n >\n <template v-if=\"virtualEnabled\">\n <UTreeNode\n v-for=\"{ node, key, offset, index } of virtualNodes\"\n :node=\"node\"\n :key=\"key\"\n :class=\"bem.is('selected', node.data === selectedData)\"\n :index=\"index\"\n :measure-element=\"measureElement\"\n :style=\"{ transform: `translateY(${offset}px)` }\"\n />\n </template>\n <template v-else>\n <UTreeNode\n v-for=\"node of nodes\"\n :node=\"node\"\n :key=\"node.key\"\n :class=\"bem.is('selected', node.data === selectedData)\"\n />\n </template>\n\n <div :class=\"cls.e('empty')\" v-if=\"!nodes.length\">\n <UEmpty />\n </div>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { bem, nextFrame, scrollIntoContainerView } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, useSlots, watch, watchEffect, type VNode } from 'vue'\n\nimport type { TreeProps, TreeEmit, _TreeExposed } from '../../types'\nimport type { ScrollExposed } from '../../types'\nimport { UEmpty } from '../empty'\nimport { UScroll } from '../scroll'\nimport { TreeDIKey, type TreeConText, type TreeSlotsScope } from './di'\nimport UTreeNode from './tree-node.vue'\nimport { useCheck } from './use-check'\nimport { useFilter } from './use-filter'\nimport { useSelect } from './use-select'\nimport { useTreeNodes } from './use-tree-nodes'\n\ndefineOptions({\n name: 'Tree'\n})\n\nconst props = withDefaults(defineProps<TreeProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n childrenKey: 'children',\n expandOnClickNode: false,\n checkStrictly: false,\n data: () => []\n})\n\nconst emit = defineEmits<TreeEmit>()\n\nconst cls = bem('tree')\n\nconst { formProps } = injectFormContext()\n\nconst { size } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default'\n})\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('selectable', props.selectable),\n bem.is('checkable', props.checkable)\n ]\n})\n\ndefineSlots<{\n default: (props: TreeSlotsScope) => any\n}>()\n\nconst slots = useSlots()\n\nfunction getTreeSlotsNode(ctx: TreeSlotsScope): VNode[] | string | undefined {\n return (props.slots?.default ?? slots.default)?.(ctx) ?? ctx.node.label\n}\n\nconst { nodes, forest, getFlattedNodes, nodeDict } = useTreeNodes({\n props\n})\n\nwatch(\n [() => props.selectable, () => props.checkable, forest],\n ([s, c]) => {\n // 如果选择或勾选,则不更新节点\n if (s || c) return\n getFlattedNodes()\n },\n { immediate: true }\n)\n\nconst { filter } = useFilter({ forest, getFlattedNodes })\n\nconst { handleSelect, selectedData } = useSelect({\n props,\n emit,\n nodeDict,\n getFlattedNodes\n})\n\nconst { checkedData, toggleCheck } = useCheck({\n props,\n emit,\n nodeDict,\n getFlattedNodes\n})\n\nconst estimateSize = (): number => {\n // 基于 style.scss 中节点稳态高度推算的默认值;\n // 实际高度仍由 `measureElement` 通过 ResizeObserver 回填覆盖。\n switch (size.value) {\n case 'small':\n return 32\n case 'large':\n return 44\n default:\n return 36\n }\n}\n\n// 80 阈值内化为消费者侧语义;低于此值时不启用虚拟化。\nconst virtualEnabled = computed(() => nodes.value.length > 80)\n\nconst { virtualizer, items } = useVirtualizer({\n count: computed(() => nodes.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n // 仅在虚拟化启用时把内容容器的 height 撑开到 totalSize;\n // 关闭时传 null,hook 会清除此前写入的内联 height,回到 CSS 默认。\n contentEl: () => (virtualEnabled.value ? (scrollRef.value?.contentRef ?? null) : null),\n estimateSize,\n gap: 2,\n // 以节点稳定 key 作为虚拟项身份,展开 / 收起 / 过滤引起的 nodes 数组变更\n // 保留未移动节点的真实测量值,避免再次滚动首屏抖动。\n getItemKey: (i) => nodes.value[i]?.key ?? i\n})\n\n// 身份稳定性已由底层 `getItemKey` 保证;直接以 `node.key` 作为 Vue 层 key。\n// `item.index` 仅作为 nodes / snapshot 竞态边缘的 fallback。\nconst virtualNodes = computed(() => {\n const _nodes = nodes.value\n return items.value.map((item) => {\n const node = _nodes[item.index]!\n return {\n node,\n key: node?.key ?? item.index,\n offset: item.start,\n index: item.index\n }\n })\n})\n\nconst measureElement: (index: number, el: Element | null) => void = (index, el) =>\n virtualizer.measureElement(index, el)\n\nfunction scrollTo(index: number): void {\n virtualizer.scrollToIndex(index, { align: 'center' })\n}\n\nfunction scrollIntoView() {\n const { selectable, checkable, scrollToView } = props\n if (!scrollToView || (!selectable && !checkable) || !nodes.value) return\n let index = -1\n\n if (selectable) {\n if (!selectedData.value) return\n index = nodes.value.findIndex((node) => node.data === selectedData.value)\n } else if (checkable) {\n if (!checkedData.size) return\n index = nodes.value.findIndex((node) => checkedData.has(node.data))\n }\n\n if (virtualEnabled.value) {\n scrollTo(index)\n } else {\n const { contentRef, containerRef } = scrollRef.value ?? {}\n const el = contentRef?.children[index]\n el && scrollIntoContainerView(el as HTMLElement, containerRef ?? null)\n }\n}\n\nwatchEffect(() => {\n nextFrame(() => {\n scrollIntoView()\n })\n})\n\nprovide(TreeDIKey, {\n cls,\n selectedData,\n checkedData,\n getFlattedNodes,\n getTreeSlotsNode,\n treeEmit: emit as TreeEmit,\n treeProps: props as TreeProps,\n toggleCheck: toggleCheck as TreeConText['toggleCheck'],\n handleSelect: handleSelect as TreeConText['handleSelect']\n})\n\ndefineExpose<_TreeExposed>({\n filter,\n forest,\n nodes,\n checkNode: toggleCheck,\n selectNode: handleSelect,\n checkAll(check: boolean) {\n forest.value.roots.forEach((node) => {\n toggleCheck(node, check)\n })\n },\n getSelected() {\n return selectedData\n },\n getChecked() {\n return Array.from(checkedData)\n },\n scrollTo,\n\n expandAll() {\n forest.value.dfs((node) => {\n node.expanded = true\n })\n getFlattedNodes()\n },\n collapseAll() {\n forest.value.dfs((node) => {\n node.expanded = false\n })\n getFlattedNodes()\n }\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"tree.js","names":[],"sources":["../../../src/components/tree/tree.vue"],"sourcesContent":["<template>\n <u-scroll\n :class=\"className\"\n ref=\"scrollRef\"\n :content-class=\"[cls.e('wrap'), bem.is('virtual', virtualEnabled)]\"\n >\n <template v-if=\"virtualEnabled\">\n <UTreeNode\n v-for=\"{ node, key, offset, index } of virtualNodes\"\n :node=\"node\"\n :key=\"key\"\n :class=\"bem.is('selected', node.data === selectedData)\"\n :index=\"index\"\n :measure-element=\"measureElement\"\n :style=\"{ transform: `translateY(${offset}px)` }\"\n />\n </template>\n <template v-else>\n <UTreeNode\n v-for=\"node of nodes\"\n :node=\"node\"\n :key=\"node.key\"\n :class=\"bem.is('selected', node.data === selectedData)\"\n />\n </template>\n\n <div :class=\"cls.e('empty')\" v-if=\"!nodes.length\">\n <UEmpty />\n </div>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { bem, nextFrame, scrollIntoContainerView } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, useSlots, watch, watchEffect, type VNode } from 'vue'\n\nimport type { TreeProps, TreeEmit, _TreeExposed } from '../../types'\nimport type { ScrollExposed } from '../../types'\nimport { UEmpty } from '../empty'\nimport { UScroll } from '../scroll'\nimport { TreeDIKey, type TreeConText, type TreeSlotsScope } from './di'\nimport UTreeNode from './tree-node.vue'\nimport { useCheck } from './use-check'\nimport { useFilter } from './use-filter'\nimport { useSelect } from './use-select'\nimport { useTreeNodes } from './use-tree-nodes'\n\ndefineOptions({ name: 'Tree' })\n\nconst props = withDefaults(defineProps<TreeProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n childrenKey: 'children',\n expandOnClickNode: false,\n checkStrictly: false,\n data: () => []\n})\n\nconst emit = defineEmits<TreeEmit>()\n\nconst cls = bem('tree')\n\nconst { formProps } = injectFormContext()\n\nconst { size } = useFormFallbackProps([formProps ?? {}, props], { size: 'default' })\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('selectable', props.selectable),\n bem.is('checkable', props.checkable)\n ]\n})\n\ndefineSlots<{ default: (props: TreeSlotsScope) => any }>()\n\nconst slots = useSlots()\n\nfunction getTreeSlotsNode(ctx: TreeSlotsScope): VNode[] | string | undefined {\n return (props.slots?.default ?? slots.default)?.(ctx) ?? ctx.node.label\n}\n\nconst { nodes, forest, getFlattedNodes, nodeDict } = useTreeNodes({ props })\n\nwatch(\n [() => props.selectable, () => props.checkable, forest],\n ([s, c]) => {\n // 如果选择或勾选,则不更新节点\n if (s || c) return\n getFlattedNodes()\n },\n { immediate: true }\n)\n\nconst { filter } = useFilter({ forest, getFlattedNodes })\n\nconst { handleSelect, selectedData } = useSelect({ props, emit, nodeDict, getFlattedNodes })\n\nconst { checkedData, toggleCheck } = useCheck({ props, emit, nodeDict, getFlattedNodes })\n\nconst estimateSize = (): number => {\n // 基于 style.scss 中节点稳态高度推算的默认值;\n // 实际高度仍由 `measureElement` 通过 ResizeObserver 回填覆盖。\n switch (size.value) {\n case 'small':\n return 32\n case 'large':\n return 44\n default:\n return 36\n }\n}\n\n// 80 阈值内化为消费者侧语义;低于此值时不启用虚拟化。\nconst virtualEnabled = computed(() => nodes.value.length > 80)\n\nconst { virtualizer, items } = useVirtualizer({\n count: computed(() => nodes.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n // 仅在虚拟化启用时把内容容器的 height 撑开到 totalSize;\n // 关闭时传 null,hook 会清除此前写入的内联 height,回到 CSS 默认。\n contentEl: () => (virtualEnabled.value ? (scrollRef.value?.contentRef ?? null) : null),\n estimateSize,\n gap: 2,\n // 以节点稳定 key 作为虚拟项身份,展开 / 收起 / 过滤引起的 nodes 数组变更\n // 保留未移动节点的真实测量值,避免再次滚动首屏抖动。\n getItemKey: (i) => nodes.value[i]?.key ?? i\n})\n\n// 身份稳定性已由底层 `getItemKey` 保证;直接以 `node.key` 作为 Vue 层 key。\n// `item.index` 仅作为 nodes / snapshot 竞态边缘的 fallback。\nconst virtualNodes = computed(() => {\n const _nodes = nodes.value\n return items.value.map((item) => {\n const node = _nodes[item.index]!\n return { node, key: node?.key ?? item.index, offset: item.start, index: item.index }\n })\n})\n\nconst measureElement: (index: number, el: Element | null) => void = (index, el) =>\n virtualizer.measureElement(index, el)\n\nfunction scrollTo(index: number): void {\n virtualizer.scrollToIndex(index, { align: 'center' })\n}\n\nfunction scrollIntoView() {\n const { selectable, checkable, scrollToView } = props\n if (!scrollToView || (!selectable && !checkable) || !nodes.value) return\n let index = -1\n\n if (selectable) {\n if (!selectedData.value) return\n index = nodes.value.findIndex((node) => node.data === selectedData.value)\n } else if (checkable) {\n if (!checkedData.size) return\n index = nodes.value.findIndex((node) => checkedData.has(node.data))\n }\n\n if (virtualEnabled.value) {\n scrollTo(index)\n } else {\n const { contentRef, containerRef } = scrollRef.value ?? {}\n const el = contentRef?.children[index]\n el && scrollIntoContainerView(el as HTMLElement, containerRef ?? null)\n }\n}\n\nwatchEffect(() => {\n nextFrame(() => {\n scrollIntoView()\n })\n})\n\nprovide(TreeDIKey, {\n cls,\n selectedData,\n checkedData,\n getFlattedNodes,\n getTreeSlotsNode,\n treeEmit: emit as TreeEmit,\n treeProps: props as TreeProps,\n toggleCheck: toggleCheck as TreeConText['toggleCheck'],\n handleSelect: handleSelect as TreeConText['handleSelect']\n})\n\ndefineExpose<_TreeExposed>({\n filter,\n forest,\n nodes,\n checkNode: toggleCheck,\n selectNode: handleSelect,\n checkAll(check: boolean) {\n forest.value.roots.forEach((node) => {\n toggleCheck(node, check)\n })\n },\n getSelected() {\n return selectedData\n },\n getChecked() {\n return Array.from(checkedData)\n },\n scrollTo,\n\n expandAll() {\n forest.value.dfs((node) => {\n node.expanded = true\n })\n getFlattedNodes()\n },\n collapseAll() {\n forest.value.dfs((node) => {\n node.expanded = false\n })\n getFlattedNodes()\n }\n})\n</script>\n"],"mappings":"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"}
@@ -24,15 +24,15 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
24
24
  onClear?: (() => any) | undefined;
25
25
  "onUpdate:text"?: ((text?: string | undefined) => any) | undefined;
26
26
  }>, {
27
+ disabled: boolean;
28
+ readonly: boolean;
27
29
  expandAll: boolean;
28
30
  labelKey: string;
29
31
  valueKey: string;
30
- disabled: boolean;
31
- readonly: boolean;
32
+ minWidth: string;
32
33
  placeholder: string;
33
34
  clearable: boolean;
34
35
  filterable: boolean;
35
- minWidth: string;
36
36
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
37
37
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
38
38
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- {"version":3,"file":"watermark.js","names":[],"sources":["../../../src/components/watermark/watermark.vue"],"sourcesContent":["<template>\n <Teleport v-if=\"appendToBody\" to=\"body\">\n <div :class=\"cls.b\" ref=\"watermark\" :style=\"{ zIndex: zIndex() }\"></div>\n </Teleport>\n\n <div v-else :class=\"cls.b\" ref=\"watermark\" :style=\"{ zIndex: zIndex() }\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { debounce } from '@cat-kit/core'\nimport { bem, setStyles, zIndex } from '@veltra/utils'\nimport { onBeforeUnmount, onMounted, reactive, useTemplateRef } from 'vue'\n\nimport type { WatermarkProps, WatermarkEmits } from '../../types'\n\ndefineOptions({\n name: 'Watermark'\n})\nconst cls = bem('watermark')\nconst props = withDefaults(defineProps<WatermarkProps>(), {\n route: -30,\n fontSize: 60\n})\ndefineEmits<WatermarkEmits>()\n\nconst watermarkRef = useTemplateRef('watermark')\n\nconst styles = reactive({\n fontColor: 'rgba(0,0,0,.1)',\n fontFamily: 'Arial',\n image: props.image\n})\n\nconst setWatermark = debounce(async () => {\n const str = props.text\n const container = watermarkRef.value\n\n if (!container || !str) return\n\n // 创建canvas\n let canvas: HTMLCanvasElement | null = document.createElement('canvas')\n\n // 创建canvs画布\n let ctx = canvas.getContext('2d')!\n // 字体\n ctx.font = `${props.fontSize}px ${styles.fontFamily}`\n\n const textWidth = ctx.measureText(str).width\n canvas = document.createElement('canvas')\n canvas.width = textWidth\n canvas.height = textWidth\n ctx = canvas.getContext('2d')!\n // 字体\n ctx.font = `${props.fontSize}px ${styles.fontFamily}`\n ctx = canvas.getContext('2d')!\n // 字体颜色\n ctx.fillStyle = styles.fontColor\n // 对齐方式\n ctx.textAlign = 'left'\n // 文本基线\n ctx.textBaseline = 'top'\n\n // 逆时旋转\n ctx.translate(textWidth / 2, textWidth / 2)\n ctx.rotate((props.route * Math.PI) / 180)\n ctx.translate(-textWidth / 2, -textWidth / 2)\n // 编制文字\n ctx.fillText(str, 0, (textWidth - props.fontSize) / 2)\n\n setStyles(container, {\n background: `url(${canvas.toDataURL('image/png')}) repeat`\n })\n\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n canvas = null\n}, 150)\n\nwindow.addEventListener('resize', setWatermark)\n\nonBeforeUnmount(() => {\n window.removeEventListener('resize', setWatermark)\n})\n\nonMounted(() => {\n setWatermark()\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;EAoBA,MAAM,MAAM,IAAI,YAAW;EAC3B,MAAM,QAAQ;EAMd,MAAM,eAAe,eAAe,YAAW;EAE/C,MAAM,SAAS,SAAS;GACtB,WAAW;GACX,YAAY;GACZ,OAAO,MAAM;GACd,CAAA;EAED,MAAM,eAAe,SAAS,YAAY;GACxC,MAAM,MAAM,MAAM;GAClB,MAAM,YAAY,aAAa;GAE/B,IAAI,CAAC,aAAa,CAAC,KAAK;GAGxB,IAAI,SAAmC,SAAS,cAAc,SAAQ;GAGtE,IAAI,MAAM,OAAO,WAAW,KAAI;GAEhC,IAAI,OAAO,GAAG,MAAM,SAAS,KAAK,OAAO;GAEzC,MAAM,YAAY,IAAI,YAAY,IAAG,CAAE;GACvC,SAAS,SAAS,cAAc,SAAQ;GACxC,OAAO,QAAQ;GACf,OAAO,SAAS;GAChB,MAAM,OAAO,WAAW,KAAI;GAE5B,IAAI,OAAO,GAAG,MAAM,SAAS,KAAK,OAAO;GACzC,MAAM,OAAO,WAAW,KAAI;GAE5B,IAAI,YAAY,OAAO;GAEvB,IAAI,YAAY;GAEhB,IAAI,eAAe;GAGnB,IAAI,UAAU,YAAY,GAAG,YAAY,EAAC;GAC1C,IAAI,OAAQ,MAAM,QAAQ,KAAK,KAAM,IAAG;GACxC,IAAI,UAAU,CAAC,YAAY,GAAG,CAAC,YAAY,EAAC;GAE5C,IAAI,SAAS,KAAK,IAAI,YAAY,MAAM,YAAY,EAAC;GAErD,UAAU,WAAW,EACnB,YAAY,OAAO,OAAO,UAAU,YAAW,CAAE,WAClD,CAAA;GAED,IAAI,UAAU,GAAG,GAAG,OAAO,OAAO,OAAO,OAAM;GAC/C,SAAS;KACR,IAAG;EAEN,OAAO,iBAAiB,UAAU,aAAY;EAE9C,sBAAsB;GACpB,OAAO,oBAAoB,UAAU,aAAY;IAClD;EAED,gBAAgB;GACd,cAAa;IACd;;UAtFiB,QAAA,gBAAA,WAAA,EAAhB,YAEW,UAAA;;IAFmB,IAAG;OAC/B,mBAAwE,OAAA;IAAlE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAE,KAAI;IAAa,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;kCAG9D,mBAEM,OAAA;;IAFO,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAE,KAAI;IAAa,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;OACjE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"watermark.js","names":[],"sources":["../../../src/components/watermark/watermark.vue"],"sourcesContent":["<template>\n <Teleport v-if=\"appendToBody\" to=\"body\">\n <div :class=\"cls.b\" ref=\"watermark\" :style=\"{ zIndex: zIndex() }\"></div>\n </Teleport>\n\n <div v-else :class=\"cls.b\" ref=\"watermark\" :style=\"{ zIndex: zIndex() }\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { debounce } from '@cat-kit/core'\nimport { bem, setStyles, zIndex } from '@veltra/utils'\nimport { onBeforeUnmount, onMounted, reactive, useTemplateRef } from 'vue'\n\nimport type { WatermarkProps, WatermarkEmits } from '../../types'\n\ndefineOptions({ name: 'Watermark' })\nconst cls = bem('watermark')\nconst props = withDefaults(defineProps<WatermarkProps>(), { route: -30, fontSize: 60 })\ndefineEmits<WatermarkEmits>()\n\nconst watermarkRef = useTemplateRef('watermark')\n\nconst styles = reactive({ fontColor: 'rgba(0,0,0,.1)', fontFamily: 'Arial', image: props.image })\n\nconst setWatermark = debounce(async () => {\n const str = props.text\n const container = watermarkRef.value\n\n if (!container || !str) return\n\n // 创建canvas\n let canvas: HTMLCanvasElement | null = document.createElement('canvas')\n\n // 创建canvs画布\n let ctx = canvas.getContext('2d')!\n // 字体\n ctx.font = `${props.fontSize}px ${styles.fontFamily}`\n\n const textWidth = ctx.measureText(str).width\n canvas = document.createElement('canvas')\n canvas.width = textWidth\n canvas.height = textWidth\n ctx = canvas.getContext('2d')!\n // 字体\n ctx.font = `${props.fontSize}px ${styles.fontFamily}`\n ctx = canvas.getContext('2d')!\n // 字体颜色\n ctx.fillStyle = styles.fontColor\n // 对齐方式\n ctx.textAlign = 'left'\n // 文本基线\n ctx.textBaseline = 'top'\n\n // 逆时旋转\n ctx.translate(textWidth / 2, textWidth / 2)\n ctx.rotate((props.route * Math.PI) / 180)\n ctx.translate(-textWidth / 2, -textWidth / 2)\n // 编制文字\n ctx.fillText(str, 0, (textWidth - props.fontSize) / 2)\n\n setStyles(container, { background: `url(${canvas.toDataURL('image/png')}) repeat` })\n\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n canvas = null\n}, 150)\n\nwindow.addEventListener('resize', setWatermark)\n\nonBeforeUnmount(() => {\n window.removeEventListener('resize', setWatermark)\n})\n\nonMounted(() => {\n setWatermark()\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;EAkBA,MAAM,MAAM,IAAI,YAAW;EAC3B,MAAM,QAAQ;EAGd,MAAM,eAAe,eAAe,YAAW;EAE/C,MAAM,SAAS,SAAS;GAAE,WAAW;GAAkB,YAAY;GAAS,OAAO,MAAM;GAAO,CAAA;EAEhG,MAAM,eAAe,SAAS,YAAY;GACxC,MAAM,MAAM,MAAM;GAClB,MAAM,YAAY,aAAa;GAE/B,IAAI,CAAC,aAAa,CAAC,KAAK;GAGxB,IAAI,SAAmC,SAAS,cAAc,SAAQ;GAGtE,IAAI,MAAM,OAAO,WAAW,KAAI;GAEhC,IAAI,OAAO,GAAG,MAAM,SAAS,KAAK,OAAO;GAEzC,MAAM,YAAY,IAAI,YAAY,IAAG,CAAE;GACvC,SAAS,SAAS,cAAc,SAAQ;GACxC,OAAO,QAAQ;GACf,OAAO,SAAS;GAChB,MAAM,OAAO,WAAW,KAAI;GAE5B,IAAI,OAAO,GAAG,MAAM,SAAS,KAAK,OAAO;GACzC,MAAM,OAAO,WAAW,KAAI;GAE5B,IAAI,YAAY,OAAO;GAEvB,IAAI,YAAY;GAEhB,IAAI,eAAe;GAGnB,IAAI,UAAU,YAAY,GAAG,YAAY,EAAC;GAC1C,IAAI,OAAQ,MAAM,QAAQ,KAAK,KAAM,IAAG;GACxC,IAAI,UAAU,CAAC,YAAY,GAAG,CAAC,YAAY,EAAC;GAE5C,IAAI,SAAS,KAAK,IAAI,YAAY,MAAM,YAAY,EAAC;GAErD,UAAU,WAAW,EAAE,YAAY,OAAO,OAAO,UAAU,YAAW,CAAE,WAAW,CAAA;GAEnF,IAAI,UAAU,GAAG,GAAG,OAAO,OAAO,OAAO,OAAM;GAC/C,SAAS;KACR,IAAG;EAEN,OAAO,iBAAiB,UAAU,aAAY;EAE9C,sBAAsB;GACpB,OAAO,oBAAoB,UAAU,aAAY;IAClD;EAED,gBAAgB;GACd,cAAa;IACd;;UA3EiB,QAAA,gBAAA,WAAA,EAAhB,YAEW,UAAA;;IAFmB,IAAG;OAC/B,mBAAwE,OAAA;IAAlE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAE,KAAI;IAAa,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;kCAG9D,mBAEM,OAAA;;IAFO,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAE,KAAI;IAAa,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;OACjE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veltra/desktop",
3
- "version": "1.1.25",
3
+ "version": "1.1.27",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -68,11 +68,11 @@
68
68
  "@cat-kit/core": ">=1.1.5",
69
69
  "@cat-kit/excel": ">=1.0.0",
70
70
  "@cat-kit/fe": "^1.1.5",
71
- "@veltra/compositions": "1.1.25",
72
- "@veltra/directives": "1.1.25",
73
- "@veltra/icons": "1.1.25",
74
- "@veltra/styles": "1.1.25",
75
- "@veltra/utils": "1.1.25",
71
+ "@veltra/compositions": "1.1.27",
72
+ "@veltra/directives": "1.1.27",
73
+ "@veltra/icons": "1.1.27",
74
+ "@veltra/styles": "1.1.27",
75
+ "@veltra/utils": "1.1.27",
76
76
  "vue": ">=3.5.0"
77
77
  }
78
78
  }
@@ -42,10 +42,7 @@ import { UButton } from '../button'
42
42
  import { UPopConfirm } from '../pop-confirm'
43
43
  import { ActionDIKey } from './di'
44
44
 
45
- defineOptions({
46
- name: 'Action',
47
- inheritAttrs: false
48
- })
45
+ defineOptions({ name: 'Action', inheritAttrs: false })
49
46
 
50
47
  // 这里所有可继承自 `<u-action-group>` 的默认值都强制为 `undefined`,
51
48
  // 否则 Vue 对 Boolean 类型 prop 的默认值(false)会让 `??` 兜底始终失效
@@ -12,19 +12,13 @@ import { computed, nextTick, onMounted, shallowRef, watch } from 'vue'
12
12
 
13
13
  import type { BadgeProps, ComponentSize } from '../../types'
14
14
 
15
- defineOptions({
16
- name: 'Badge'
17
- })
15
+ defineOptions({ name: 'Badge' })
18
16
 
19
17
  const cls = bem('badge')
20
18
 
21
- const props = withDefaults(defineProps<BadgeProps>(), {
22
- max: 99
23
- })
19
+ const props = withDefaults(defineProps<BadgeProps>(), { max: 99 })
24
20
 
25
- const { size } = useFallbackProps([props], {
26
- size: 'default' as ComponentSize
27
- })
21
+ const { size } = useFallbackProps([props], { size: 'default' as ComponentSize })
28
22
 
29
23
  const badgeValue = computed(() => {
30
24
  if (props.dot) return ''
@@ -136,11 +136,7 @@ const headerInfo = computed<HeaderInfo>(() => {
136
136
  }
137
137
  }
138
138
  if (state.type === 'create') {
139
- return {
140
- icon: Plus,
141
- title: '新增',
142
- tone: 'create'
143
- }
139
+ return { icon: Plus, title: '新增', tone: 'create' }
144
140
  }
145
141
  return {
146
142
  icon: EditPen,
@@ -87,13 +87,9 @@ import { UButton } from '../button'
87
87
  import { UTable } from '../table'
88
88
  import { BatchEditDIKey } from './di'
89
89
 
90
- defineOptions({
91
- name: 'BatchEditList'
92
- })
90
+ defineOptions({ name: 'BatchEditList' })
93
91
 
94
- defineProps<{
95
- slots: Slots
96
- }>()
92
+ defineProps<{ slots: Slots }>()
97
93
 
98
94
  const {
99
95
  cls,
@@ -113,9 +113,7 @@ const slots = defineSlots<
113
113
  }) => any
114
114
 
115
115
  header?: () => any
116
- } & Partial<{
117
- [key: `column:${string}`]: (props: TableColumnSlotsScope) => any
118
- }>
116
+ } & Partial<{ [key: `column:${string}`]: (props: TableColumnSlotsScope) => any }>
119
117
  >()
120
118
 
121
119
  const cls = bem('batch-edit')
@@ -126,15 +124,7 @@ const editCtx = useEdit({ props, emit, tableRef })
126
124
 
127
125
  const { state, handleClose, handleSave, handleDelete, handleCreate } = editCtx
128
126
 
129
- provide(BatchEditDIKey, {
130
- cls,
131
- props,
132
- emit,
133
- tableRef,
134
- staticFeatures,
135
- dynamicFeatures,
136
- ...editCtx
137
- })
127
+ provide(BatchEditDIKey, { cls, props, emit, tableRef, staticFeatures, dynamicFeatures, ...editCtx })
138
128
 
139
129
  const dialogCtx = inject(DialogDIKey, undefined)
140
130
 
@@ -47,26 +47,17 @@ import type {
47
47
  ComponentSize
48
48
  } from '../../types'
49
49
 
50
- defineOptions({
51
- name: 'Breadcrumb'
52
- })
50
+ defineOptions({ name: 'Breadcrumb' })
53
51
 
54
- const props = withDefaults(defineProps<BreadcrumbProps>(), {
55
- lastLinked: false
56
- })
52
+ const props = withDefaults(defineProps<BreadcrumbProps>(), { lastLinked: false })
57
53
 
58
54
  const emit = defineEmits<BreadcrumbEmits>()
59
55
 
60
- defineSlots<{
61
- item?: (scope: BreadcrumbSlotScope) => unknown
62
- separator?: () => unknown
63
- }>()
56
+ defineSlots<{ item?: (scope: BreadcrumbSlotScope) => unknown; separator?: () => unknown }>()
64
57
 
65
58
  const cls = bem('breadcrumb')
66
59
 
67
- const { size } = useFallbackProps([props], {
68
- size: 'default' as ComponentSize
69
- })
60
+ const { size } = useFallbackProps([props], { size: 'default' as ComponentSize })
70
61
 
71
62
  const isLast = (index: number) => index === props.items.length - 1
72
63
 
@@ -9,15 +9,11 @@ import { bem } from '@veltra/utils'
9
9
 
10
10
  import type { ButtonProps } from '../../types'
11
11
 
12
- defineOptions({
13
- name: 'ButtonGroup'
14
- })
12
+ defineOptions({ name: 'ButtonGroup' })
15
13
 
16
14
  const props = defineProps<ButtonProps>()
17
15
 
18
16
  const cls = bem('button-group')
19
17
 
20
- defineSlots<{
21
- default: (props: { props: ButtonProps }) => any
22
- }>()
18
+ defineSlots<{ default: (props: { props: ButtonProps }) => any }>()
23
19
  </script>
@@ -36,9 +36,7 @@ import { computed, shallowRef } from 'vue'
36
36
  import type { ButtonEmits, ButtonProps, _ButtonExposed, ComponentSize } from '../../types'
37
37
  import { UIcon } from '../icon'
38
38
 
39
- defineOptions({
40
- name: 'Button'
41
- })
39
+ defineOptions({ name: 'Button' })
42
40
 
43
41
  const props = withDefaults(defineProps<ButtonProps>(), {
44
42
  iconPosition: 'left',
@@ -47,9 +45,7 @@ const props = withDefaults(defineProps<ButtonProps>(), {
47
45
  propagate: true
48
46
  })
49
47
 
50
- const { size } = useFallbackProps([props], {
51
- size: 'default' as ComponentSize
52
- })
48
+ const { size } = useFallbackProps([props], { size: 'default' as ComponentSize })
53
49
 
54
50
  const emit = defineEmits<ButtonEmits>()
55
51
 
@@ -89,9 +85,7 @@ const handleClick = (e: MouseEvent) => {
89
85
 
90
86
  const buttonRef = shallowRef<HTMLButtonElement>()
91
87
 
92
- const exposed: _ButtonExposed = {
93
- el: buttonRef
94
- }
88
+ const exposed: _ButtonExposed = { el: buttonRef }
95
89
 
96
90
  defineExpose(exposed)
97
91
  </script>
@@ -19,9 +19,7 @@ import { computed } from 'vue'
19
19
  import type { CalendarProps } from '../../types'
20
20
  import { getMonthDays } from './utils'
21
21
 
22
- defineOptions({
23
- name: 'Calendar'
24
- })
22
+ defineOptions({ name: 'Calendar' })
25
23
 
26
24
  defineProps<CalendarProps>()
27
25
 
@@ -15,9 +15,7 @@ defineOptions({ name: 'CardAction' })
15
15
  const props = defineProps<CardActionProps>()
16
16
 
17
17
  const style = computed<CSSProperties>(() => {
18
- return {
19
- textAlign: props.alignRight ? 'right' : undefined
20
- }
18
+ return { textAlign: props.alignRight ? 'right' : undefined }
21
19
  })
22
20
 
23
21
  const injected = inject(CardDIKey)
@@ -15,12 +15,7 @@ defineOptions({ name: 'CardContent' })
15
15
  const props = defineProps<CardContentProps>()
16
16
 
17
17
  const style = computed<CSSProperties | undefined>(() => {
18
- return props.cover
19
- ? {
20
- padding: 0,
21
- fontSize: 0
22
- }
23
- : undefined
18
+ return props.cover ? { padding: 0, fontSize: 0 } : undefined
24
19
  })
25
20
 
26
21
  const injected = inject(CardDIKey)
@@ -29,8 +29,6 @@ if (!injected) {
29
29
  }
30
30
 
31
31
  const style = computed(() => {
32
- return {
33
- height: withUnit(props.height, 'px')
34
- }
32
+ return { height: withUnit(props.height, 'px') }
35
33
  })
36
34
  </script>
@@ -12,9 +12,7 @@ import { computed, provide } from 'vue'
12
12
  import type { CardProps } from '../../types'
13
13
  import { CardDIKey } from './di'
14
14
 
15
- defineOptions({
16
- name: 'Card'
17
- })
15
+ defineOptions({ name: 'Card' })
18
16
 
19
17
  const props = defineProps<CardProps>()
20
18
 
@@ -27,9 +25,7 @@ const classList = computed(() => {
27
25
  })
28
26
 
29
27
  const styles = computed(() => {
30
- return {
31
- width: withUnit(props.width, 'px')
32
- }
28
+ return { width: withUnit(props.width, 'px') }
33
29
  })
34
30
 
35
31
  provide(CardDIKey, { cls, cardProps: props })
@@ -41,15 +41,9 @@ import { UIcon } from '../icon'
41
41
  import { UScroll } from '../scroll'
42
42
  import { CascadeDIKey } from './di'
43
43
 
44
- defineOptions({
45
- name: 'UCascadePanelItem'
46
- })
44
+ defineOptions({ name: 'UCascadePanelItem' })
47
45
 
48
- const props = defineProps<{
49
- data: CascadeNode[]
50
- value?: string
51
- panelIndex: number
52
- }>()
46
+ const props = defineProps<{ data: CascadeNode[]; value?: string; panelIndex: number }>()
53
47
 
54
48
  const emit = defineEmits<{
55
49
  (e: 'click', panelIndex: number, item: CascadeNode): void
@@ -124,9 +124,7 @@ import { useCheck } from './use-check'
124
124
  import { useDataMap } from './use-data-map'
125
125
  import { useSelect } from './use-select'
126
126
 
127
- defineOptions({
128
- name: 'Cascade'
129
- })
127
+ defineOptions({ name: 'Cascade' })
130
128
 
131
129
  const props = withDefaults(defineProps<CascadeProps>(), {
132
130
  labelKey: 'label',
@@ -162,14 +160,7 @@ const forest = computed(() => {
162
160
  childrenKey: props.childrenKey,
163
161
  createNode: (data, index, depth, _forest, parent) => {
164
162
  if (!data) {
165
- return new CascadeNode({
166
- data,
167
- index,
168
- depth,
169
- value: '',
170
- label: '',
171
- parent
172
- })
163
+ return new CascadeNode({ data, index, depth, value: '', label: '', parent })
173
164
  }
174
165
 
175
166
  return new CascadeNode({
@@ -196,26 +187,10 @@ const {
196
187
  getPanelItemList,
197
188
  createPanelItem,
198
189
  selectedNodeKeys
199
- } = useSelect({
200
- props,
201
- emit,
202
- dataMap,
203
- forest,
204
- isUserActive,
205
- dropdownRef
206
- })
190
+ } = useSelect({ props, emit, dataMap, forest, isUserActive, dropdownRef })
207
191
 
208
192
  const { hovered, tags, restTag, updateMultipleValue, handleCloseTag, checkItem, checkedSet } =
209
- useCheck({
210
- props,
211
- forest,
212
- getPanelItemList,
213
- emit,
214
- dataMap,
215
- isUserActive,
216
- disabled,
217
- readonly
218
- })
193
+ useCheck({ props, forest, getPanelItemList, emit, dataMap, isUserActive, disabled, readonly })
219
194
 
220
195
  const commitSingleSelect = userAction((item: CascadeNode) => {
221
196
  if (!props.strict) {
@@ -282,12 +257,5 @@ watch([qs, forest], ([qs, forest]) => {
282
257
  panelItemList.value = [createPanelItem(forest.roots)]
283
258
  })
284
259
 
285
- provide(CascadeDIKey, {
286
- cls,
287
- size,
288
- disabled,
289
- readonly,
290
- cascadeProps: props,
291
- checkedSet
292
- })
260
+ provide(CascadeDIKey, { cls, size, disabled, readonly, cascadeProps: props, checkedSet })
293
261
  </script>
@@ -10,9 +10,7 @@ import { computed } from 'vue'
10
10
 
11
11
  import type { CheckTagEmits, CheckTagProps } from '../../types'
12
12
 
13
- defineOptions({
14
- name: 'CheckTag'
15
- })
13
+ defineOptions({ name: 'CheckTag' })
16
14
 
17
15
  const cls = bem('check-tag')
18
16
 
@@ -21,9 +21,7 @@ import { computed } from 'vue'
21
21
  import type { CheckboxButtonProps, CheckboxButtonEmits } from '../../types'
22
22
  import { UTag } from '../tag'
23
23
 
24
- defineOptions({
25
- name: 'CheckboxButton'
26
- })
24
+ defineOptions({ name: 'CheckboxButton' })
27
25
 
28
26
  const props = withDefaults(defineProps<CheckboxButtonProps>(), {
29
27
  disabled: undefined,
@@ -34,9 +32,7 @@ const props = withDefaults(defineProps<CheckboxButtonProps>(), {
34
32
 
35
33
  const emit = defineEmits<CheckboxButtonEmits>()
36
34
 
37
- const slot = defineSlots<{
38
- default(): any
39
- }>()
35
+ const slot = defineSlots<{ default(): any }>()
40
36
 
41
37
  const cls = bem('checkbox-button')
42
38
 
@@ -25,9 +25,7 @@ import { computed } from 'vue'
25
25
 
26
26
  import type { CheckboxProps, CheckboxEmits } from '../../types'
27
27
 
28
- defineOptions({
29
- name: 'Checkbox'
30
- })
28
+ defineOptions({ name: 'Checkbox' })
31
29
  const props = withDefaults(defineProps<CheckboxProps>(), {
32
30
  disabled: undefined,
33
31
  readonly: undefined
@@ -34,9 +34,7 @@ import type { CheckboxGroupProps, CheckboxGroupEmits } from '../../types'
34
34
  import { UCheckbox } from '../checkbox'
35
35
  import { UTag } from '../tag'
36
36
 
37
- defineOptions({
38
- name: 'CheckboxGroup'
39
- })
37
+ defineOptions({ name: 'CheckboxGroup' })
40
38
 
41
39
  const props = withDefaults(defineProps<CheckboxGroupProps>(), {
42
40
  labelKey: 'label',
@@ -144,9 +144,7 @@ function buildExtensions(): Extension[] {
144
144
  return [
145
145
  basicSetup,
146
146
  tooltips({ parent: document.body }),
147
- EditorView.theme({
148
- '.cm-tooltip': { zIndex: zIndex() }
149
- }),
147
+ EditorView.theme({ '.cm-tooltip': { zIndex: zIndex() } }),
150
148
  themeCompartment.of(props.dark ? oneDark : []),
151
149
  editableCompartment.of(EditorView.editable.of(!disabled.value)),
152
150
  readOnlyCompartment.of(EditorState.readOnly.of(readonly.value)),
@@ -218,22 +216,16 @@ watch(() => props.language, applyLanguage)
218
216
  watch(
219
217
  () => props.dark,
220
218
  (dark) => {
221
- editor.value?.dispatch({
222
- effects: themeCompartment.reconfigure(dark ? oneDark : [])
223
- })
219
+ editor.value?.dispatch({ effects: themeCompartment.reconfigure(dark ? oneDark : []) })
224
220
  }
225
221
  )
226
222
 
227
223
  watch(disabled, (v) => {
228
- editor.value?.dispatch({
229
- effects: editableCompartment.reconfigure(EditorView.editable.of(!v))
230
- })
224
+ editor.value?.dispatch({ effects: editableCompartment.reconfigure(EditorView.editable.of(!v)) })
231
225
  })
232
226
 
233
227
  watch(readonly, (v) => {
234
- editor.value?.dispatch({
235
- effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(v))
236
- })
228
+ editor.value?.dispatch({ effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(v)) })
237
229
  })
238
230
 
239
231
  watch(() => props.defaultLines, syncPhantomLineNumbers)