@veltra/desktop 1.1.4 → 1.1.5

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 (145) hide show
  1. package/dist/components/action/action-group.js +3 -110
  2. package/dist/components/action/action-group.js.map +1 -1
  3. package/dist/components/action/action-group.vue.d.ts +4 -13
  4. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js +105 -0
  5. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -0
  6. package/dist/components/action/action.js +5 -1
  7. package/dist/components/action/action.js.map +1 -1
  8. package/dist/components/action/action.vue.d.ts +1 -1
  9. package/dist/components/action/di.js.map +1 -1
  10. package/dist/components/action/style2.css +17 -14
  11. package/dist/components/auto-complete/auto-complete.js +1 -1
  12. package/dist/components/badge/badge.js +1 -1
  13. package/dist/components/batch-edit/batch-edit-form.js +94 -101
  14. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  15. package/dist/components/batch-edit/batch-edit-list.js +52 -68
  16. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  17. package/dist/components/batch-edit/style2.css +13 -89
  18. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  19. package/dist/components/button/button.js +1 -1
  20. package/dist/components/card/card.js +1 -1
  21. package/dist/components/cascade/cascade-panel-item.js +4 -4
  22. package/dist/components/cascade/cascade.js +2 -2
  23. package/dist/components/cascade/cascade.vue.d.ts +2 -2
  24. package/dist/components/checkbox/checkbox-button.js +1 -1
  25. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  26. package/dist/components/checkbox/checkbox.js +1 -1
  27. package/dist/components/checkbox-group/checkbox-group.js +1 -1
  28. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
  29. package/dist/components/code-editor/code-editor.js +1 -1
  30. package/dist/components/collapse/collapse.js +1 -1
  31. package/dist/components/condition-editor/components/condition-group.js +152 -0
  32. package/dist/components/condition-editor/components/condition-group.js.map +1 -0
  33. package/dist/components/condition-editor/components/condition-row.js +217 -0
  34. package/dist/components/condition-editor/components/condition-row.js.map +1 -0
  35. package/dist/components/condition-editor/condition-editor.js +134 -5
  36. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  37. package/dist/components/condition-editor/condition-editor.vue.d.ts +10 -2
  38. package/dist/components/condition-editor/core/evaluator.js +75 -0
  39. package/dist/components/condition-editor/core/evaluator.js.map +1 -0
  40. package/dist/components/condition-editor/core/operators.js +123 -0
  41. package/dist/components/condition-editor/core/operators.js.map +1 -0
  42. package/dist/components/condition-editor/style.js +7 -0
  43. package/dist/components/condition-editor/style2.css +186 -0
  44. package/dist/components/context-menu/context-menu.js +1 -1
  45. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  46. package/dist/components/date-picker/date-picker.js +2 -2
  47. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  48. package/dist/components/date-range-picker/date-range-picker.js +2 -2
  49. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  50. package/dist/components/dialog/dialog.js +7 -7
  51. package/dist/components/dialog/style2.css +8 -0
  52. package/dist/components/dialog/use-maximum.js +1 -1
  53. package/dist/components/drawer/style2.css +8 -0
  54. package/dist/components/dropdown/dropdown.js +1 -1
  55. package/dist/components/expression-editor/components/variable-picker.js +8 -8
  56. package/dist/components/expression-editor/expression-editor.js +1 -1
  57. package/dist/components/file-viewer/file-viewer.js +13 -13
  58. package/dist/components/form-item/form-item.js.map +1 -1
  59. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +6 -6
  60. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/components/grid-input/grid-input.js +1 -1
  62. package/dist/components/group-input/group-input.js +1 -1
  63. package/dist/components/index.js +154 -154
  64. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js +1 -1
  65. package/dist/components/layout/layout-resizer.js +1 -1
  66. package/dist/components/layout/layout.js +1 -1
  67. package/dist/components/list/list.js +1 -1
  68. package/dist/components/loading/loading.js +1 -1
  69. package/dist/components/menu/menu-sub-collapsed.js +4 -4
  70. package/dist/components/menu/menu.js +1 -1
  71. package/dist/components/message/message.js +1 -1
  72. package/dist/components/message-confirm/message-confirm.js +1 -1
  73. package/dist/components/multi-select/multi-select.js +15 -15
  74. package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
  75. package/dist/components/multi-tree-select/multi-tree-select.js +8 -8
  76. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +3 -3
  77. package/dist/components/notification/notification.js +1 -1
  78. package/dist/components/number/number.vue.d.ts +1 -1
  79. package/dist/components/number-input/number-input.js +2 -2
  80. package/dist/components/number-range-input/number-range-input.js +1 -1
  81. package/dist/components/paginator/paginator.js +6 -6
  82. package/dist/components/paginator/style.js +1 -1
  83. package/dist/components/palette/palette.js +1 -1
  84. package/dist/components/password-input/password-input.js +2 -2
  85. package/dist/components/pop-confirm/pop-confirm.js +1 -1
  86. package/dist/components/progress-nodes/progress-nodes.js +1 -1
  87. package/dist/components/radio/radio.js +1 -1
  88. package/dist/components/radio-group/radio-group.js +1 -1
  89. package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
  90. package/dist/components/rich-text-editor/rich-text-editor.js +1 -1
  91. package/dist/components/scroll/scroll-bar.js +1 -1
  92. package/dist/components/scroll/scroll.js +1 -1
  93. package/dist/components/select/select.js +10 -10
  94. package/dist/components/select/select.vue.d.ts +2 -2
  95. package/dist/components/slider/slider.js +1 -1
  96. package/dist/components/steps/steps.js +2 -2
  97. package/dist/components/switch/switch.js +1 -1
  98. package/dist/components/table/style2.css +4 -1
  99. package/dist/components/table/table.js +2 -2
  100. package/dist/components/table/table.js.map +1 -1
  101. package/dist/components/table/use-columns.js +1 -1
  102. package/dist/components/table/use-fixed-columns.js +8 -31
  103. package/dist/components/table/use-fixed-columns.js.map +1 -1
  104. package/dist/components/table-editor/table-editor.js +1 -1
  105. package/dist/components/tabs/tabs-horizontal.js +1 -1
  106. package/dist/components/tabs/tabs-vertical.js +1 -1
  107. package/dist/components/tabs/tabs.js +1 -1
  108. package/dist/components/tag/tag.js +1 -1
  109. package/dist/components/textarea/textarea.js +1 -1
  110. package/dist/components/theme/style.js +1 -1
  111. package/dist/components/theme/theme.js +11 -11
  112. package/dist/components/tip/tip.js +1 -1
  113. package/dist/components/tree/tree-node.js +1 -1
  114. package/dist/components/tree/tree.js +5 -5
  115. package/dist/components/tree-select/tree-select.js +6 -6
  116. package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
  117. package/dist/index.d.ts +5 -5
  118. package/dist/index.js +83 -83
  119. package/dist/style.js +2 -2
  120. package/dist/types/action.d.ts +5 -11
  121. package/dist/types/condition-editor.d.ts +41 -8
  122. package/dist/types/index.d.ts +4 -4
  123. package/package.json +11 -11
  124. package/src/components/action/action-group.vue +68 -82
  125. package/src/components/action/action.vue +9 -1
  126. package/src/components/action/di.ts +2 -1
  127. package/src/components/action/style.scss +22 -27
  128. package/src/components/batch-edit/batch-edit-form.vue +65 -70
  129. package/src/components/batch-edit/batch-edit-list.vue +35 -41
  130. package/src/components/batch-edit/style.scss +19 -118
  131. package/src/components/condition-editor/components/condition-group.vue +131 -0
  132. package/src/components/condition-editor/components/condition-row.vue +208 -0
  133. package/src/components/condition-editor/condition-editor.vue +145 -6
  134. package/src/components/condition-editor/core/evaluator.ts +93 -0
  135. package/src/components/condition-editor/core/operators.ts +57 -0
  136. package/src/components/condition-editor/style.scss +239 -1
  137. package/src/components/condition-editor/style.ts +7 -0
  138. package/src/components/dialog/style.scss +13 -0
  139. package/src/components/drawer/style.scss +13 -0
  140. package/src/components/form-item/form-item.vue +1 -1
  141. package/src/components/table/style.scss +9 -1
  142. package/src/components/table/table.vue +1 -3
  143. package/src/components/table/use-fixed-columns.ts +5 -49
  144. package/src/types/action.ts +6 -11
  145. package/src/types/condition-editor.ts +39 -7
@@ -22,15 +22,15 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
22
22
  onClear?: (() => any) | undefined;
23
23
  onChange?: ((checked: Record<string, any>[]) => any) | undefined;
24
24
  }>, {
25
- disabled: boolean;
26
- readonly: boolean;
27
25
  expandAll: boolean;
28
26
  labelKey: string;
29
27
  valueKey: string;
30
- minWidth: string;
28
+ disabled: boolean;
29
+ readonly: boolean;
31
30
  placeholder: string;
32
31
  clearable: boolean;
33
32
  filterable: boolean;
33
+ minWidth: string;
34
34
  visibilityLimit: number;
35
35
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
36
36
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,8 +1,8 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import _sfc_main$2 from "../button/button.js";
3
3
  import { Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, onMounted, openBlock, ref, resolveDynamicComponent, toDisplayString, unref, vShow, withCtx, withDirectives, withModifiers } from "vue";
4
- import { bem } from "@veltra/utils";
5
4
  import { useFallbackProps } from "@veltra/compositions";
5
+ import { bem } from "@veltra/utils";
6
6
  import { CircleCheckFilled, CircleClose, Close, InfoFilled, QuestionFilled, WarningFilled } from "@veltra/icons/normal";
7
7
  //#region src/components/notification/notification.vue
8
8
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -3,8 +3,8 @@ import * as _$vue from "vue";
3
3
 
4
4
  //#region src/components/number/number.vue.d.ts
5
5
  declare const __VLS_export: _$vue.DefineComponent<NumberProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<NumberProps> & Readonly<{}>, {
6
- duration: number;
7
6
  format: "currency" | "percent" | "decimal";
7
+ duration: number;
8
8
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
9
9
  declare const _default: typeof __VLS_export;
10
10
  //#endregion
@@ -1,10 +1,10 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import input_default from "../input/input.js";
3
3
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, normalizeClass, openBlock, renderSlot, shallowRef, toDisplayString, unref, useModel, useSlots, watch, withCtx, withDirectives, withModifiers } from "vue";
4
- import { FORM_EMPTY_CONTENT, Tween, bem, injectFormContext } from "@veltra/utils";
5
4
  import { useFormFallbackProps } from "@veltra/compositions";
6
- import { $n, isUndef, n, o } from "@cat-kit/core";
5
+ import { FORM_EMPTY_CONTENT, Tween, bem, injectFormContext } from "@veltra/utils";
7
6
  import { ArrowDown, ArrowUp, Close } from "@veltra/icons/normal";
7
+ import { $n, isUndef, n, o } from "@cat-kit/core";
8
8
  import { vRipple } from "@veltra/directives";
9
9
  //#region src/components/number-input/number-input.vue
10
10
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,7 +1,7 @@
1
1
  import _sfc_main$1 from "../number-input/number-input.js";
2
2
  import { Fragment, computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeModels, mergeProps, nextTick, normalizeClass, onMounted, openBlock, toDisplayString, unref, useModel, watch } from "vue";
3
- import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
4
3
  import { useFormFallbackProps } from "@veltra/compositions";
4
+ import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
5
5
  import { $n, n, o } from "@cat-kit/core";
6
6
  //#region src/components/number-range-input/number-range-input.vue
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,11 +1,11 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
- import _sfc_main$2 from "../number-input/number-input.js";
3
- import _sfc_main$3 from "../select/select.js";
2
+ import _sfc_main$2 from "../select/select.js";
3
+ import _sfc_main$3 from "../number-input/number-input.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, reactive, renderList, shallowRef, toDisplayString, unref, useModel, withCtx, withDirectives, withKeys } from "vue";
5
- import { bem } from "@veltra/utils";
6
5
  import { useConfig, useFallbackProps } from "@veltra/compositions";
7
- import { n } from "@cat-kit/core";
6
+ import { bem } from "@veltra/utils";
8
7
  import { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from "@veltra/icons/normal";
8
+ import { n } from "@cat-kit/core";
9
9
  import { vRipple } from "@veltra/directives";
10
10
  //#region src/components/paginator/paginator.vue
11
11
  const _hoisted_1 = { key: 0 };
@@ -123,7 +123,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
123
123
  ref: paginatorRef
124
124
  }, [
125
125
  createElementVNode("div", null, "共 " + toDisplayString(__props.total) + " 条", 1),
126
- createVNode(unref(_sfc_main$3), {
126
+ createVNode(unref(_sfc_main$2), {
127
127
  class: normalizeClass(unref(cls).e("size-select")),
128
128
  modelValue: pageSize.value,
129
129
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => pageSize.value = $event),
@@ -182,7 +182,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
182
182
  ], 2)) : createCommentVNode("v-if", true),
183
183
  createElementVNode("div", { class: normalizeClass(unref(cls).e("jumper")) }, [
184
184
  _cache[6] || (_cache[6] = createElementVNode("span", null, "前往", -1)),
185
- createVNode(unref(_sfc_main$2), {
185
+ createVNode(unref(_sfc_main$3), {
186
186
  class: normalizeClass(unref(cls).e("page-input")),
187
187
  size: "small",
188
188
  min: 1,
@@ -1,4 +1,4 @@
1
1
  import "../icon/style.js";
2
- import "../number-input/style.js";
3
2
  import "../select/style.js";
3
+ import "../number-input/style.js";
4
4
  import "./style2.css";
@@ -7,8 +7,8 @@ import _sfc_main$4 from "./palette-hue.js";
7
7
  import _sfc_main$5 from "./palette-sv.js";
8
8
  import { useHSV } from "./use-hsv.js";
9
9
  import { computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, normalizeClass, normalizeStyle, openBlock, provide, shallowRef, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
10
- import { bem, injectFormContext } from "@veltra/utils";
11
10
  import { useFormFallbackProps, useUserAction } from "@veltra/compositions";
11
+ import { bem, injectFormContext } from "@veltra/utils";
12
12
  //#region src/components/palette/palette.vue
13
13
  const _sfc_main = /* @__PURE__ */ defineComponent({
14
14
  name: "Palette",
@@ -1,10 +1,10 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import input_default from "../input/input.js";
3
3
  import { Transition, computed, createBlock, createSlots, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, openBlock, renderSlot, shallowRef, unref, useModel, useSlots, withCtx } from "vue";
4
- import { bem, injectFormContext } from "@veltra/utils";
5
4
  import { useFormFallbackProps } from "@veltra/compositions";
6
- import { o } from "@cat-kit/core";
5
+ import { bem, injectFormContext } from "@veltra/utils";
7
6
  import { Hide, View } from "@veltra/icons/normal";
7
+ import { o } from "@cat-kit/core";
8
8
  //#region src/components/password-input/password-input.vue
9
9
  const passwordChar = "●";
10
10
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -2,8 +2,8 @@ import _sfc_main$1 from "../icon/icon.js";
2
2
  import _sfc_main$2 from "../tip/tip.js";
3
3
  import _sfc_main$3 from "../button/button.js";
4
4
  import { createBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
5
- import { bem, injectFormContext } from "@veltra/utils";
6
5
  import { useFormFallbackProps } from "@veltra/compositions";
6
+ import { bem, injectFormContext } from "@veltra/utils";
7
7
  import { QuestionFilled } from "@veltra/icons/normal";
8
8
  //#region src/components/pop-confirm/pop-confirm.vue
9
9
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,6 +1,6 @@
1
1
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, openBlock, renderList, renderSlot, shallowRef, toDisplayString, toRefs, unref, useTemplateRef, watch } from "vue";
2
- import { bem } from "@veltra/utils";
3
2
  import { useDrag, useResizeObserver } from "@veltra/compositions";
3
+ import { bem } from "@veltra/utils";
4
4
  import { o } from "@cat-kit/core";
5
5
  //#region src/components/progress-nodes/progress-nodes.vue
6
6
  const _hoisted_1 = ["onClick"];
@@ -1,6 +1,6 @@
1
1
  import { Transition, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, renderSlot, toDisplayString, unref, useModel, vModelRadio, withCtx, withDirectives } from "vue";
2
- import { bem, injectFormContext } from "@veltra/utils";
3
2
  import { useFormFallbackProps } from "@veltra/compositions";
3
+ import { bem, injectFormContext } from "@veltra/utils";
4
4
  //#region src/components/radio/radio.vue
5
5
  const _hoisted_1 = ["value", "disabled"];
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,7 +1,7 @@
1
1
  import _sfc_main$1 from "../radio/radio.js";
2
2
  import { Fragment, createBlock, createElementBlock, createTextVNode, defineComponent, mergeModels, normalizeClass, openBlock, renderList, toDisplayString, unref, useModel, withCtx } from "vue";
3
- import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
4
3
  import { useFormFallbackProps } from "@veltra/compositions";
4
+ import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
5
5
  //#region src/components/radio-group/radio-group.vue
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
7
7
  name: "RadioGroup",
@@ -16,10 +16,10 @@ declare const __VLS_export: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {},
16
16
  "onUpdate:modelValue"?: ((value: any) => any) | undefined;
17
17
  onChange?: ((item: Record<string, any>) => any) | undefined;
18
18
  }>, {
19
- disabled: boolean;
20
- readonly: boolean;
21
19
  labelKey: string;
22
20
  valueKey: string;
21
+ disabled: boolean;
22
+ readonly: boolean;
23
23
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
24
24
  declare const _default: typeof __VLS_export;
25
25
  //#endregion
@@ -1,7 +1,7 @@
1
1
  import _sfc_main$1 from "./toolbar.js";
2
2
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeModels, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, shallowRef, toDisplayString, unref, useModel, useTemplateRef, watch } from "vue";
3
- import { bem, injectFormContext } from "@veltra/utils";
4
3
  import { useFormFallbackProps } from "@veltra/compositions";
4
+ import { bem, injectFormContext } from "@veltra/utils";
5
5
  import { createEmptyHistoryState, registerHistory } from "@lexical/history";
6
6
  import { $generateHtmlFromNodes, $generateNodesFromDOM } from "@lexical/html";
7
7
  import { AutoLinkNode, LinkNode } from "@lexical/link";
@@ -1,7 +1,7 @@
1
1
  import { ScrollDIKey } from "./di.js";
2
2
  import { computed, createElementBlock, defineComponent, inject, normalizeClass, normalizeStyle, openBlock, shallowRef, unref, vShow, withDirectives } from "vue";
3
- import { bem } from "@veltra/utils";
4
3
  import { useDrag } from "@veltra/compositions";
4
+ import { bem } from "@veltra/utils";
5
5
  //#region src/components/scroll/scroll-bar.vue
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
7
7
  name: "ScrollBar",
@@ -1,8 +1,8 @@
1
1
  import { ScrollDIKey } from "./di.js";
2
2
  import _sfc_main$1 from "./scroll-bar.js";
3
3
  import { computed, createBlock, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, provide, renderSlot, resolveDynamicComponent, shallowRef, unref, withCtx } from "vue";
4
- import { bem, withUnit } from "@veltra/utils";
5
4
  import { useResizeObserver } from "@veltra/compositions";
5
+ import { bem, withUnit } from "@veltra/utils";
6
6
  import { debounce } from "@cat-kit/core";
7
7
  //#region src/components/scroll/scroll.vue
8
8
  const minSize = 20;
@@ -1,15 +1,15 @@
1
- import _sfc_main$1 from "../scroll/scroll.js";
2
- import _sfc_main$2 from "../icon/icon.js";
3
- import _sfc_main$3 from "../empty/empty.js";
1
+ import _sfc_main$1 from "../icon/icon.js";
2
+ import _sfc_main$2 from "../empty/empty.js";
3
+ import _sfc_main$3 from "../scroll/scroll.js";
4
4
  import _sfc_main$4 from "../dropdown/dropdown.js";
5
5
  import input_default from "../input/input.js";
6
- import { useOptions } from "./use-options.js";
7
6
  import { useKeyboard } from "./use-keyboard.js";
7
+ import { useOptions } from "./use-options.js";
8
8
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createSlots, createTextVNode, createVNode, defineComponent, isRef, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, openBlock, renderList, renderSlot, shallowRef, toDisplayString, unref, useModel, watch, withCtx, withDirectives } from "vue";
9
- import { FORM_EMPTY_CONTENT, bem, injectFormContext, scrollIntoContainerView, withUnit } from "@veltra/utils";
10
9
  import { useFormFallbackProps, useVirtualizer } from "@veltra/compositions";
11
- import { o } from "@cat-kit/core";
10
+ import { FORM_EMPTY_CONTENT, bem, injectFormContext, scrollIntoContainerView, withUnit } from "@veltra/utils";
12
11
  import { ArrowDown, Search } from "@veltra/icons/normal";
12
+ import { o } from "@cat-kit/core";
13
13
  import { vFocus } from "@veltra/directives";
14
14
  //#region src/components/select/select.vue
15
15
  const _hoisted_1 = ["onClick", "data-index"];
@@ -211,7 +211,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
211
211
  onKeydown: unref(handleKeydown),
212
212
  "native-readonly": ""
213
213
  }, createSlots({
214
- suffix: withCtx(() => [createVNode(unref(_sfc_main$2), { class: normalizeClass(unref(cls).e("arrow")) }, {
214
+ suffix: withCtx(() => [createVNode(unref(_sfc_main$1), { class: normalizeClass(unref(cls).e("arrow")) }, {
215
215
  default: withCtx(() => [createVNode(unref(ArrowDown))]),
216
216
  _: 1
217
217
  }, 8, ["class"])]),
@@ -239,14 +239,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
239
239
  modelValue: unref(queryString),
240
240
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(queryString) ? queryString.value = $event : null)
241
241
  }, {
242
- suffix: withCtx(() => [createVNode(unref(_sfc_main$2), null, {
242
+ suffix: withCtx(() => [createVNode(unref(_sfc_main$1), null, {
243
243
  default: withCtx(() => [createVNode(unref(Search))]),
244
244
  _: 1
245
245
  })]),
246
246
  _: 1
247
247
  }, 8, ["modelValue"])), [[unref(vFocus)]])], 2)) : createCommentVNode("v-if", true),
248
248
  createCommentVNode("\n 单选列表。虚拟化启用时,内容容器 height 由 useVirtualizer 命令式写入;\n 此处 content-style 仅承担 grid 相关样式,避免 height 变化触发模板重渲染。\n "),
249
- unref(options).length ? (openBlock(), createBlock(unref(_sfc_main$1), {
249
+ unref(options).length ? (openBlock(), createBlock(unref(_sfc_main$3), {
250
250
  key: 1,
251
251
  tag: "ul",
252
252
  class: normalizeClass(unref(cls).e("options")),
@@ -295,7 +295,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
295
295
  ])) : (openBlock(), createElementBlock("div", {
296
296
  key: 2,
297
297
  class: normalizeClass(unref(cls).e("empty"))
298
- }, [createVNode(unref(_sfc_main$3))], 2))
298
+ }, [createVNode(unref(_sfc_main$2))], 2))
299
299
  ]),
300
300
  _: 3
301
301
  }, 8, [
@@ -26,10 +26,10 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
26
26
  "onUpdate:text"?: ((value: any) => any) | undefined;
27
27
  "onUpdate:label"?: ((label?: string | undefined) => any) | undefined;
28
28
  }>, {
29
- disabled: boolean;
30
- readonly: boolean;
31
29
  labelKey: string;
32
30
  valueKey: string;
31
+ disabled: boolean;
32
+ readonly: boolean;
33
33
  placeholder: string;
34
34
  clearable: boolean;
35
35
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
@@ -2,8 +2,8 @@ import { sliderContextKey } from "./di.js";
2
2
  import _sfc_main$1 from "./slider-thumb.js";
3
3
  import { useSlider } from "./use-slider.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, isRef, normalizeClass, normalizeStyle, openBlock, provide, renderList, toDisplayString, unref, watch, withModifiers } from "vue";
5
- import { bem, injectFormContext } from "@veltra/utils";
6
5
  import { useFormFallbackProps, useUserAction } from "@veltra/compositions";
6
+ import { bem, injectFormContext } from "@veltra/utils";
7
7
  //#region src/components/slider/slider.vue
8
8
  const _hoisted_1 = { key: 1 };
9
9
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -2,10 +2,10 @@ import _sfc_main$1 from "../icon/icon.js";
2
2
  import NodeRender from "../node-render/node-render.js";
3
3
  import _sfc_main$2 from "../tip/tip.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, renderList, renderSlot, shallowRef, toDisplayString, unref, useSlots, useTemplateRef, watch, withCtx } from "vue";
5
- import { bem } from "@veltra/utils";
6
5
  import { useFallbackProps } from "@veltra/compositions";
7
- import { n, o } from "@cat-kit/core";
6
+ import { bem } from "@veltra/utils";
8
7
  import { Check } from "@veltra/icons/normal";
8
+ import { n, o } from "@cat-kit/core";
9
9
  //#region src/components/steps/steps.vue
10
10
  const _hoisted_1 = ["onClick"];
11
11
  const _hoisted_2 = ["onMouseenter"];
@@ -1,6 +1,6 @@
1
1
  import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeModels, normalizeClass, openBlock, toDisplayString, unref, useModel, withModifiers } from "vue";
2
- import { bem, injectFormContext } from "@veltra/utils";
3
2
  import { useFormFallbackProps } from "@veltra/compositions";
3
+ import { bem, injectFormContext } from "@veltra/utils";
4
4
  //#region src/components/switch/switch.vue
5
5
  const _hoisted_1 = ["checked", "disabled"];
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -19,8 +19,8 @@
19
19
  width: 100%;
20
20
  position: relative;
21
21
  border: 1px solid var(--u-table-border-color);
22
- border-bottom: none;
23
22
  overflow: hidden;
23
+ background-color: var(--u-bg-color-top);
24
24
  }
25
25
  .u-table--small {
26
26
  border-radius: var(--u-radius-small);
@@ -147,6 +147,9 @@
147
147
  .u-table__body {
148
148
  will-change: transform;
149
149
  }
150
+ .u-table__body .u-table__row:last-child .u-table__cell {
151
+ border-bottom: none;
152
+ }
150
153
  .u-table__empty {
151
154
  position: sticky;
152
155
  left: 50%;
@@ -10,8 +10,8 @@ import { useFixedColumns } from "./use-fixed-columns.js";
10
10
  import { useRows } from "./use-rows.js";
11
11
  import { useTable } from "./use-table.js";
12
12
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, provide, renderList, renderSlot, shallowRef, toRef, unref, useSlots, useTemplateRef, watch, withCtx } from "vue";
13
- import { bem, withUnit } from "@veltra/utils";
14
13
  import { useFallbackProps, useVirtualizer } from "@veltra/compositions";
14
+ import { bem, withUnit } from "@veltra/utils";
15
15
  //#region src/components/table/table.vue
16
16
  const _hoisted_1 = {
17
17
  key: 0,
@@ -96,7 +96,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
96
96
  cls
97
97
  });
98
98
  const { leafColumns } = columnConfig;
99
- const { handleScroll, leftFixed, rightFixed } = useFixedColumns({ isScrolling: isScrollingRelay });
99
+ const { handleScroll, leftFixed, rightFixed } = useFixedColumns();
100
100
  const { getColumnSlotsNode, getExpandRowSlotsNode, getHeaderSlotsNode, getCellClass, getCellCtx, getHeaderCellClass } = useTable({
101
101
  props,
102
102
  cls,
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.vue"],"sourcesContent":["<template>\n <u-scroll\n :class=\"[\n cls.b,\n cls.m(size),\n bem.is('border', border),\n bem.is('all-expanded', allExpanded),\n bem.is('text-ellipsis', textEllipsis)\n ]\"\n ref=\"scrollRef\"\n :content-class=\"cls.e('content')\"\n @scroll=\"handleScroll\"\n >\n <table :class=\"cls.e('wrap')\">\n <colgroup ref=\"colgroupRef\">\n <col\n v-for=\"column of leafColumns\"\n :key=\"column.key\"\n :class=\"column.fixed\"\n :style=\"{\n width: withUnit(column.width, 'px'),\n minWidth: withUnit(column.minWidth, 'px')\n }\"\n />\n </colgroup>\n <UTableHead />\n\n <!--\n 虚拟滚动上占位:替代 tbody transform,避免 table-layout: fixed 下列宽抖动。\n 高度由 useVirtualizer 命令式写入 `style.height`,不经过模板响应式绑定,\n 因此滚动窗口变化不会引起表格模板重渲染。\n -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"beforeSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-body>\n <slot name=\"body\" :columns=\"leafColumns\" :rows=\"rows\" />\n\n <template #empty v-if=\"slots.empty\">\n <slot name=\"empty\" />\n </template>\n </u-table-body>\n\n <!-- 虚拟滚动下占位(高度由 useVirtualizer 命令式写入) -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"afterSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-foot ref=\"tableFoot\">\n <slot name=\"foot\" :columns=\"leafColumns\" :rows=\"rows\" />\n </u-table-foot>\n </table>\n\n <slot name=\"append\" />\n\n <div v-if=\"showResizeLine\" :class=\"cls.e('resize-line')\" ref=\"resizeLineRef\"></div>\n\n <!-- <u-tip v-if=\"textEllipsis\" ref=\"tip\"> </u-tip> -->\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed, provide, shallowRef, toRef, useTemplateRef, watch } from 'vue'\n\nimport type {\n TableProps,\n TableEmits,\n _TableExposed,\n TableColumnSlotsScope,\n ComponentSize,\n ScrollExposed,\n TableRowSlotsScope\n} from '../../types'\nimport { UScroll } from '../scroll'\nimport { TableDIKey } from './di'\nimport type { ColumnNode } from './node/col'\nimport type { TableRowNode } from './node/row'\nimport UTableBody from './table-body.vue'\nimport UTableFoot from './table-foot.vue'\n// import { UTip } from '../tip'\nimport UTableHead from './table-head'\nimport { useCheck } from './use-check'\nimport { useColResize } from './use-col-resize'\nimport { useColumns } from './use-columns'\nimport { useFixedColumns } from './use-fixed-columns'\nimport { useRows } from './use-rows'\nimport { useTable } from './use-table'\n\ndefineOptions({ name: 'Table' })\n\nconst props = withDefaults(defineProps<TableProps>(), {\n tree: false,\n stripe: true,\n textOverflow: 'line-break',\n virtualThreshold: 80\n})\nconst emit = defineEmits<TableEmits>()\n\nconst slots = defineSlots<{\n [key: `column:${string}`]: (props: TableColumnSlotsScope) => any\n [key: `header:${string}`]: (props: { column: ColumnNode }) => any\n 'row:expand'?: (props: TableRowSlotsScope) => any\n foot?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n body?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n empty?: () => any\n append?: () => any\n}>()\n\nconst cls = bem('table')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\n// 占位 tr 的 DOM 句柄;交给 useVirtualizer 直接命令式写 style.height。\nconst beforeSpacerRef = useTemplateRef<HTMLElement>('beforeSpacerRef')\nconst afterSpacerRef = useTemplateRef<HTMLElement>('afterSpacerRef')\n\n// 行(useRows / useFixedColumns 需要 isScrolling,而虚拟化 hook 又依赖 rows.length;\n// 先用中继占位,下方 isScrolling 到位后 watch 回灌)。\nconst isScrollingRelay = shallowRef(false)\n\nconst {\n rows,\n toggleTreeRowExpand,\n allExpanded,\n toggleAllTreeRowExpand,\n rowForest,\n handleRowClick,\n handleCellClick,\n getRowByData\n} = useRows({ props, emit, isScrolling: isScrollingRelay })\n\nconst { createCheckColumn, createSelectColumn, clearChecked, clearSelected, checkedRows } =\n useCheck({ size, props, rows, rowForest, emit, cls })\n\nconst columnConfig = useColumns({\n props,\n createCheckColumn,\n createSelectColumn,\n toggleAllTreeRowExpand,\n cls\n})\n\nconst { leafColumns } = columnConfig\n\nconst { handleScroll, leftFixed, rightFixed } = useFixedColumns({\n isScrolling: isScrollingRelay\n})\n\nconst {\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass\n} = useTable({ props, cls, leftFixed, rightFixed })\n\nconst { showResizeLine, resizeLineRef, colgroupRef } = useColResize({ scrollRef, leafColumns })\n\nconst { virtualizer, items, isScrolling } = useVirtualizer({\n count: computed(() => rows.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n beforeEl: beforeSpacerRef,\n afterEl: afterSpacerRef,\n estimateSize: () => 41,\n // 注意:getItemKey 在构造期一次性写入底层 Virtualizer;闭包每次读的是当前 rows.value,\n // rows 引用整体替换后 key 仍有效(无需再 setOptions)。\n getItemKey: (i) => rows.value[i]?.uid ?? i\n})\n\nconst virtualEnabled = computed(() => {\n const t = props.virtualThreshold\n return t ? rows.value.length > t : true\n})\n\n// 把虚拟化 isScrolling 回灌到中继,供 useRows / useFixedColumns 读取。\nwatch(isScrolling, (v) => {\n isScrollingRelay.value = v\n})\n\n/**\n * E1:数据替换时的条件置顶。\n *\n * 旧实现无差别地 `scrollTo({ y: 0 })`,在「行内增删 / 排序 / 单行更新」等\n * 场景会把用户当前阅读位置跳走;仅在「翻页 / 显著数据集替换」时才需要复位。\n *\n * 判定阈值:|Δlen| / max(newLen, oldLen) ≥ 0.5,即行数变化量超过更大侧的一半时视为显著变化。\n * 选择 0.5 是因为典型的分页/搜索场景会带来 50% 以上的行数差(通常完全替换数据集),\n * 而行内追加 / 删除个位数通常只带来 <5% 的变化;两者区分度足够宽。\n */\nconst LENGTH_DELTA_RATIO_TO_RESET_SCROLL = 0.5\n\nwatch(\n () => props.data,\n (next, prev) => {\n const nextLen = next?.length ?? 0\n const prevLen = prev?.length ?? 0\n const denom = Math.max(nextLen, prevLen, 1)\n const ratio = Math.abs(nextLen - prevLen) / denom\n if (ratio >= LENGTH_DELTA_RATIO_TO_RESET_SCROLL) {\n scrollRef.value?.scrollTo({ y: 0 })\n }\n }\n)\n\n// const tipRef = useTemplateRef('tip')\n\nprovide(TableDIKey, {\n tableProps: props,\n tableSlots: slots,\n cls,\n rows,\n checkedRows,\n columnConfig,\n handleRowClick,\n handleCellClick,\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass,\n // tipRef,\n toggleTreeRowExpand,\n virtualList: items,\n virtualEnabled,\n measureElement: (index, el) => virtualizer.measureElement(index, el)\n})\n\nconst tableFootRef = useTemplateRef('tableFoot')\n\ndefineExpose<_TableExposed>({\n el: toRef(() => scrollRef.value?.el),\n clearChecked,\n clearSelected,\n getRowByData,\n getSummaryRow: () => tableFootRef.value!.getSummaryRow()\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.vue"],"sourcesContent":["<template>\n <u-scroll\n :class=\"[\n cls.b,\n cls.m(size),\n bem.is('border', border),\n bem.is('all-expanded', allExpanded),\n bem.is('text-ellipsis', textEllipsis)\n ]\"\n ref=\"scrollRef\"\n :content-class=\"cls.e('content')\"\n @scroll=\"handleScroll\"\n >\n <table :class=\"cls.e('wrap')\">\n <colgroup ref=\"colgroupRef\">\n <col\n v-for=\"column of leafColumns\"\n :key=\"column.key\"\n :class=\"column.fixed\"\n :style=\"{\n width: withUnit(column.width, 'px'),\n minWidth: withUnit(column.minWidth, 'px')\n }\"\n />\n </colgroup>\n <UTableHead />\n\n <!--\n 虚拟滚动上占位:替代 tbody transform,避免 table-layout: fixed 下列宽抖动。\n 高度由 useVirtualizer 命令式写入 `style.height`,不经过模板响应式绑定,\n 因此滚动窗口变化不会引起表格模板重渲染。\n -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"beforeSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-body>\n <slot name=\"body\" :columns=\"leafColumns\" :rows=\"rows\" />\n\n <template #empty v-if=\"slots.empty\">\n <slot name=\"empty\" />\n </template>\n </u-table-body>\n\n <!-- 虚拟滚动下占位(高度由 useVirtualizer 命令式写入) -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"afterSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-foot ref=\"tableFoot\">\n <slot name=\"foot\" :columns=\"leafColumns\" :rows=\"rows\" />\n </u-table-foot>\n </table>\n\n <slot name=\"append\" />\n\n <div v-if=\"showResizeLine\" :class=\"cls.e('resize-line')\" ref=\"resizeLineRef\"></div>\n\n <!-- <u-tip v-if=\"textEllipsis\" ref=\"tip\"> </u-tip> -->\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed, provide, shallowRef, toRef, useTemplateRef, watch } from 'vue'\n\nimport type {\n TableProps,\n TableEmits,\n _TableExposed,\n TableColumnSlotsScope,\n ComponentSize,\n ScrollExposed,\n TableRowSlotsScope\n} from '../../types'\nimport { UScroll } from '../scroll'\nimport { TableDIKey } from './di'\nimport type { ColumnNode } from './node/col'\nimport type { TableRowNode } from './node/row'\nimport UTableBody from './table-body.vue'\nimport UTableFoot from './table-foot.vue'\n// import { UTip } from '../tip'\nimport UTableHead from './table-head'\nimport { useCheck } from './use-check'\nimport { useColResize } from './use-col-resize'\nimport { useColumns } from './use-columns'\nimport { useFixedColumns } from './use-fixed-columns'\nimport { useRows } from './use-rows'\nimport { useTable } from './use-table'\n\ndefineOptions({ name: 'Table' })\n\nconst props = withDefaults(defineProps<TableProps>(), {\n tree: false,\n stripe: true,\n textOverflow: 'line-break',\n virtualThreshold: 80\n})\nconst emit = defineEmits<TableEmits>()\n\nconst slots = defineSlots<{\n [key: `column:${string}`]: (props: TableColumnSlotsScope) => any\n [key: `header:${string}`]: (props: { column: ColumnNode }) => any\n 'row:expand'?: (props: TableRowSlotsScope) => any\n foot?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n body?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n empty?: () => any\n append?: () => any\n}>()\n\nconst cls = bem('table')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\n// 占位 tr 的 DOM 句柄;交给 useVirtualizer 直接命令式写 style.height。\nconst beforeSpacerRef = useTemplateRef<HTMLElement>('beforeSpacerRef')\nconst afterSpacerRef = useTemplateRef<HTMLElement>('afterSpacerRef')\n\n// 行(useRows / useFixedColumns 需要 isScrolling,而虚拟化 hook 又依赖 rows.length;\n// 先用中继占位,下方 isScrolling 到位后 watch 回灌)。\nconst isScrollingRelay = shallowRef(false)\n\nconst {\n rows,\n toggleTreeRowExpand,\n allExpanded,\n toggleAllTreeRowExpand,\n rowForest,\n handleRowClick,\n handleCellClick,\n getRowByData\n} = useRows({ props, emit, isScrolling: isScrollingRelay })\n\nconst { createCheckColumn, createSelectColumn, clearChecked, clearSelected, checkedRows } =\n useCheck({ size, props, rows, rowForest, emit, cls })\n\nconst columnConfig = useColumns({\n props,\n createCheckColumn,\n createSelectColumn,\n toggleAllTreeRowExpand,\n cls\n})\n\nconst { leafColumns } = columnConfig\n\nconst { handleScroll, leftFixed, rightFixed } = useFixedColumns()\n\nconst {\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass\n} = useTable({ props, cls, leftFixed, rightFixed })\n\nconst { showResizeLine, resizeLineRef, colgroupRef } = useColResize({ scrollRef, leafColumns })\n\nconst { virtualizer, items, isScrolling } = useVirtualizer({\n count: computed(() => rows.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n beforeEl: beforeSpacerRef,\n afterEl: afterSpacerRef,\n estimateSize: () => 41,\n // 注意:getItemKey 在构造期一次性写入底层 Virtualizer;闭包每次读的是当前 rows.value,\n // rows 引用整体替换后 key 仍有效(无需再 setOptions)。\n getItemKey: (i) => rows.value[i]?.uid ?? i\n})\n\nconst virtualEnabled = computed(() => {\n const t = props.virtualThreshold\n return t ? rows.value.length > t : true\n})\n\n// 把虚拟化 isScrolling 回灌到中继,供 useRows / useFixedColumns 读取。\nwatch(isScrolling, (v) => {\n isScrollingRelay.value = v\n})\n\n/**\n * E1:数据替换时的条件置顶。\n *\n * 旧实现无差别地 `scrollTo({ y: 0 })`,在「行内增删 / 排序 / 单行更新」等\n * 场景会把用户当前阅读位置跳走;仅在「翻页 / 显著数据集替换」时才需要复位。\n *\n * 判定阈值:|Δlen| / max(newLen, oldLen) ≥ 0.5,即行数变化量超过更大侧的一半时视为显著变化。\n * 选择 0.5 是因为典型的分页/搜索场景会带来 50% 以上的行数差(通常完全替换数据集),\n * 而行内追加 / 删除个位数通常只带来 <5% 的变化;两者区分度足够宽。\n */\nconst LENGTH_DELTA_RATIO_TO_RESET_SCROLL = 0.5\n\nwatch(\n () => props.data,\n (next, prev) => {\n const nextLen = next?.length ?? 0\n const prevLen = prev?.length ?? 0\n const denom = Math.max(nextLen, prevLen, 1)\n const ratio = Math.abs(nextLen - prevLen) / denom\n if (ratio >= LENGTH_DELTA_RATIO_TO_RESET_SCROLL) {\n scrollRef.value?.scrollTo({ y: 0 })\n }\n }\n)\n\n// const tipRef = useTemplateRef('tip')\n\nprovide(TableDIKey, {\n tableProps: props,\n tableSlots: slots,\n cls,\n rows,\n checkedRows,\n columnConfig,\n handleRowClick,\n handleCellClick,\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass,\n // tipRef,\n toggleTreeRowExpand,\n virtualList: items,\n virtualEnabled,\n measureElement: (index, el) => virtualizer.measureElement(index, el)\n})\n\nconst tableFootRef = useTemplateRef('tableFoot')\n\ndefineExpose<_TableExposed>({\n el: toRef(() => scrollRef.value?.el),\n clearChecked,\n clearSelected,\n getRowByData,\n getSummaryRow: () => tableFootRef.value!.getSummaryRow()\n})\n</script>\n"],"mappings":"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"}
@@ -3,8 +3,8 @@ import _sfc_main$1 from "../button/button.js";
3
3
  import { ColumnNode } from "./node/col.js";
4
4
  import { computed, createVNode, shallowRef, watch } from "vue";
5
5
  import "@veltra/utils";
6
- import { Forest, dfs, last } from "@cat-kit/core";
7
6
  import { ArrowRight } from "@veltra/icons/normal";
7
+ import { Forest, dfs, last } from "@cat-kit/core";
8
8
  //#region src/components/table/use-columns.ts
9
9
  /**
10
10
  * 定义表格列
@@ -1,41 +1,18 @@
1
- import { ref, watch } from "vue";
1
+ import { ref } from "vue";
2
2
  import { debounce } from "@cat-kit/core";
3
3
  //#region src/components/table/use-fixed-columns.ts
4
- /**
5
- * 固定列
6
- * @returns
7
- */
8
- function useFixedColumns(options = {}) {
9
- const { isScrolling } = options;
4
+ function useFixedColumns() {
10
5
  const leftFixed = ref(false);
11
6
  const rightFixed = ref(false);
12
- let pendingLeft = null;
13
- let pendingRight = null;
14
- const applyImmediate = (nextLeft, nextRight) => {
15
- if (nextLeft !== leftFixed.value) leftFixed.value = nextLeft;
16
- if (nextRight !== rightFixed.value) rightFixed.value = nextRight;
17
- pendingLeft = null;
18
- pendingRight = null;
19
- };
20
- const handleScroll = debounce((e) => {
21
- const nextLeft = e.x > 0;
22
- const nextRight = !(e.cw + e.x + 1 >= e.sw);
23
- if (isScrolling?.value) {
24
- pendingLeft = nextLeft;
25
- pendingRight = nextRight;
26
- return;
27
- }
28
- applyImmediate(nextLeft, nextRight);
29
- }, 50);
30
- if (isScrolling) watch(isScrolling, (v) => {
31
- if (v) return;
32
- if (pendingLeft === null && pendingRight === null) return;
33
- applyImmediate(pendingLeft ?? leftFixed.value, pendingRight ?? rightFixed.value);
34
- });
35
7
  return {
36
8
  leftFixed,
37
9
  rightFixed,
38
- handleScroll
10
+ handleScroll: debounce((e) => {
11
+ const nextLeft = e.x > 0;
12
+ const nextRight = !(e.cw + e.x + 1 >= e.sw);
13
+ if (nextLeft !== leftFixed.value) leftFixed.value = nextLeft;
14
+ if (nextRight !== rightFixed.value) rightFixed.value = nextRight;
15
+ }, 100)
39
16
  };
40
17
  }
41
18
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-fixed-columns.js","names":[],"sources":["../../../src/components/table/use-fixed-columns.ts"],"sourcesContent":["import { debounce } from '@cat-kit/core'\nimport { type ShallowRef, type Ref, ref, watch } from 'vue'\n\nimport type { ScrollPosition } from '../../types'\n\ninterface UseColumnFixedReturned {\n leftFixed: ShallowRef<boolean>\n rightFixed: ShallowRef<boolean>\n handleScroll: (e: Required<ScrollPosition>) => void\n}\n\ninterface Options {\n /**\n * D1:滚动中 (`true`) 暂缓 `leftFixed` / `rightFixed` 的切换,滚动结束后\n * 一次性补算。\n *\n * 背景:固定列的阴影是通过在 cell 上切换 `is-last-fixed` / `is-first-fixed`\n * 等 class 实现的,这些 class 会穿透到 `useTable.getCellClass` 的缓存键,\n * 任何一次切换都会让全表的单元格类名失效重算。滚动本身并不需要实时更新阴影,\n * 因此把切换推迟到 `isScrolling` 归零时做一次即可。\n *\n * 未传入时退化到旧行为(实时切换)。\n */\n isScrolling?: Ref<boolean>\n}\n\n/**\n * 固定列\n * @returns\n */\nexport function useFixedColumns(options: Options = {}): UseColumnFixedReturned {\n const { isScrolling } = options\n\n const leftFixed = ref(false)\n const rightFixed = ref(false)\n\n let pendingLeft: boolean | null = null\n let pendingRight: boolean | null = null\n\n const applyImmediate = (nextLeft: boolean, nextRight: boolean): void => {\n if (nextLeft !== leftFixed.value) leftFixed.value = nextLeft\n if (nextRight !== rightFixed.value) rightFixed.value = nextRight\n pendingLeft = null\n pendingRight = null\n }\n\n const handleScroll = debounce((e: Required<ScrollPosition>) => {\n const nextLeft = e.x > 0\n // 精度修正:浏览器滚动条最后 1px 的误差\n const nextRight = !(e.cw + e.x + 1 >= e.sw)\n\n if (isScrolling?.value) {\n pendingLeft = nextLeft\n pendingRight = nextRight\n return\n }\n\n applyImmediate(nextLeft, nextRight)\n }, 50)\n\n if (isScrolling) {\n watch(isScrolling, (v) => {\n if (v) return\n if (pendingLeft === null && pendingRight === null) return\n applyImmediate(pendingLeft ?? leftFixed.value, pendingRight ?? rightFixed.value)\n })\n }\n\n return { leftFixed, rightFixed, handleScroll }\n}\n"],"mappings":";;;;;;;AA8BA,SAAgB,gBAAgB,UAAmB,EAAE,EAA0B;CAC7E,MAAM,EAAE,gBAAgB;CAExB,MAAM,YAAY,IAAI,MAAM;CAC5B,MAAM,aAAa,IAAI,MAAM;CAE7B,IAAI,cAA8B;CAClC,IAAI,eAA+B;CAEnC,MAAM,kBAAkB,UAAmB,cAA6B;AACtE,MAAI,aAAa,UAAU,MAAO,WAAU,QAAQ;AACpD,MAAI,cAAc,WAAW,MAAO,YAAW,QAAQ;AACvD,gBAAc;AACd,iBAAe;;CAGjB,MAAM,eAAe,UAAU,MAAgC;EAC7D,MAAM,WAAW,EAAE,IAAI;EAEvB,MAAM,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE;AAExC,MAAI,aAAa,OAAO;AACtB,iBAAc;AACd,kBAAe;AACf;;AAGF,iBAAe,UAAU,UAAU;IAClC,GAAG;AAEN,KAAI,YACF,OAAM,cAAc,MAAM;AACxB,MAAI,EAAG;AACP,MAAI,gBAAgB,QAAQ,iBAAiB,KAAM;AACnD,iBAAe,eAAe,UAAU,OAAO,gBAAgB,WAAW,MAAM;GAChF;AAGJ,QAAO;EAAE;EAAW;EAAY;EAAc"}
1
+ {"version":3,"file":"use-fixed-columns.js","names":[],"sources":["../../../src/components/table/use-fixed-columns.ts"],"sourcesContent":["import { debounce } from '@cat-kit/core'\nimport { type ShallowRef, ref } from 'vue'\n\nimport type { ScrollPosition } from '../../types'\n\ninterface UseColumnFixedReturned {\n leftFixed: ShallowRef<boolean>\n rightFixed: ShallowRef<boolean>\n handleScroll: (e: Required<ScrollPosition>) => void\n}\n\nexport function useFixedColumns(): UseColumnFixedReturned {\n const leftFixed = ref(false)\n const rightFixed = ref(false)\n\n const handleScroll = debounce((e: Required<ScrollPosition>) => {\n const nextLeft = e.x > 0\n // 精度修正:浏览器滚动条最后 1px 的误差\n const nextRight = !(e.cw + e.x + 1 >= e.sw)\n\n if (nextLeft !== leftFixed.value) leftFixed.value = nextLeft\n if (nextRight !== rightFixed.value) rightFixed.value = nextRight\n }, 100)\n\n return { leftFixed, rightFixed, handleScroll }\n}\n"],"mappings":";;;AAWA,SAAgB,kBAA0C;CACxD,MAAM,YAAY,IAAI,MAAM;CAC5B,MAAM,aAAa,IAAI,MAAM;AAW7B,QAAO;EAAE;EAAW;EAAY,cATX,UAAU,MAAgC;GAC7D,MAAM,WAAW,EAAE,IAAI;GAEvB,MAAM,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE;AAExC,OAAI,aAAa,UAAU,MAAO,WAAU,QAAQ;AACpD,OAAI,cAAc,WAAW,MAAO,YAAW,QAAQ;KACtD,IAEyC;EAAE"}
@@ -1,8 +1,8 @@
1
1
  import _sfc_main$1 from "../button/button.js";
2
2
  import _sfc_main$2 from "../table/table.js";
3
3
  import { computed, createBlock, createCommentVNode, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, unref, withCtx } from "vue";
4
- import { bem } from "@veltra/utils";
5
4
  import { useComponentProps } from "@veltra/compositions";
5
+ import { bem } from "@veltra/utils";
6
6
  import { Copy, Minus, Plus } from "@veltra/icons/normal";
7
7
  //#region src/components/table-editor/table-editor.vue
8
8
  const _hoisted_1 = { style: {
@@ -1,8 +1,8 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import { useTabsBar } from "./use-tabs-bar.js";
3
3
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, renderList, renderSlot, shallowRef, toDisplayString, unref, useModel, vShow, withCtx, withDirectives, withModifiers } from "vue";
4
- import { bem } from "@veltra/utils";
5
4
  import { useFallbackProps } from "@veltra/compositions";
5
+ import { bem } from "@veltra/utils";
6
6
  import { ArrowLeft, ArrowRight, Close } from "@veltra/icons/normal";
7
7
  //#region src/components/tabs/tabs-horizontal.vue
8
8
  const _hoisted_1 = ["disabled"];
@@ -1,7 +1,7 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, renderList, renderSlot, toDisplayString, unref, useModel, withCtx, withModifiers } from "vue";
3
- import { bem } from "@veltra/utils";
4
3
  import { useFallbackProps } from "@veltra/compositions";
4
+ import { bem } from "@veltra/utils";
5
5
  import { Close } from "@veltra/icons/normal";
6
6
  //#region src/components/tabs/tabs-vertical.vue
7
7
  const _hoisted_1 = ["onClick"];
@@ -2,8 +2,8 @@ import _sfc_main$1 from "../scroll/scroll.js";
2
2
  import _sfc_main$2 from "./tabs-horizontal.js";
3
3
  import _sfc_main$3 from "./tabs-vertical.js";
4
4
  import { KeepAlive, Transition, computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, resolveDynamicComponent, unref, useModel, useSlots, withCtx } from "vue";
5
- import { bem } from "@veltra/utils";
6
5
  import { useFallbackProps } from "@veltra/compositions";
6
+ import { bem } from "@veltra/utils";
7
7
  //#region src/components/tabs/tabs.vue
8
8
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
9
  name: "Tabs",
@@ -1,7 +1,7 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx, withModifiers } from "vue";
3
- import { bem, injectFormContext } from "@veltra/utils";
4
3
  import { useFormFallbackProps } from "@veltra/compositions";
4
+ import { bem, injectFormContext } from "@veltra/utils";
5
5
  import { Close } from "@veltra/icons/normal";
6
6
  //#region src/components/tag/tag.vue
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,8 +1,8 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import { calcTextareaHeight } from "./utils.js";
3
3
  import { Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, ref, shallowRef, toDisplayString, unref, useModel, vModelText, watch, withCtx, withDirectives, withModifiers } from "vue";
4
- import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
5
4
  import { useFocus, useFormFallbackProps } from "@veltra/compositions";
5
+ import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
6
6
  import { Close } from "@veltra/icons/normal";
7
7
  //#region src/components/textarea/textarea.vue
8
8
  const _hoisted_1 = [
@@ -1,6 +1,6 @@
1
1
  import "../button/style.js";
2
2
  import "../input/style.js";
3
- import "../number-input/style.js";
4
3
  import "../select/style.js";
4
+ import "../number-input/style.js";
5
5
  import "../palette/style.js";
6
6
  import "./style2.css";