stk-table-vue 1.2.4 → 1.2.6

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 (68) hide show
  1. package/README.md +194 -194
  2. package/lib/{Dropdown-D_9cB0rD.js → Dropdown-BAANgg_5.js} +2 -2
  3. package/lib/{StkTable-CVcmlZi9.js → StkTable-CGcxwpdb.js} +22 -6
  4. package/lib/src/StkTable/StkTable.vue.d.ts +18 -4
  5. package/lib/src/StkTable/types/index.d.ts +4 -1
  6. package/lib/src/StkTable/useVirtualScroll.d.ts +6 -1
  7. package/lib/stk-table-vue.js +3 -3
  8. package/lib/style.css +1 -1
  9. package/package.json +93 -93
  10. package/src/StkTable/StkTable.vue +2362 -2338
  11. package/src/StkTable/components/DragHandle.vue +9 -9
  12. package/src/StkTable/components/SortIcon.vue +6 -6
  13. package/src/StkTable/components/TreeNodeCell.vue +19 -19
  14. package/src/StkTable/components/TriangleIcon.vue +3 -3
  15. package/src/StkTable/const.ts +50 -50
  16. package/src/StkTable/custom-cells/ChangeCell/ChangeCell.less +34 -34
  17. package/src/StkTable/custom-cells/ChangeCell/createChangeCell.ts +90 -90
  18. package/src/StkTable/custom-cells/ChangeCell/index.ts +4 -4
  19. package/src/StkTable/custom-cells/CheckboxCell/CheckboxCell.less +14 -14
  20. package/src/StkTable/custom-cells/CheckboxCell/CheckboxCell.vue +56 -56
  21. package/src/StkTable/custom-cells/CheckboxCell/createCheckboxCell.ts +146 -146
  22. package/src/StkTable/custom-cells/CheckboxCell/index.ts +5 -5
  23. package/src/StkTable/custom-cells/FilterCell/Dropdown/index.ts +16 -16
  24. package/src/StkTable/custom-cells/FilterCell/Dropdown/index.vue +186 -186
  25. package/src/StkTable/custom-cells/FilterCell/Filter.less +118 -118
  26. package/src/StkTable/custom-cells/FilterCell/Filter.vue +66 -66
  27. package/src/StkTable/custom-cells/FilterCell/createFilterCell.ts +120 -120
  28. package/src/StkTable/custom-cells/FilterCell/index.ts +6 -6
  29. package/src/StkTable/custom-cells/FilterCell/types.ts +43 -43
  30. package/src/StkTable/custom-cells/NumberCell/createNumberCell.ts +43 -43
  31. package/src/StkTable/custom-cells/NumberCell/index.ts +2 -2
  32. package/src/StkTable/custom-cells/utils/formatNumber.ts +137 -137
  33. package/src/StkTable/features/const.ts +1 -1
  34. package/src/StkTable/features/index.ts +1 -1
  35. package/src/StkTable/features/useAreaSelection.ts +1240 -1239
  36. package/src/StkTable/index.ts +20 -20
  37. package/src/StkTable/mergeCellsCache.ts +69 -69
  38. package/src/StkTable/registerFeature.ts +40 -40
  39. package/src/StkTable/style.less +791 -791
  40. package/src/StkTable/types/highlightDimOptions.ts +28 -28
  41. package/src/StkTable/types/index.ts +503 -500
  42. package/src/StkTable/useAutoResize.ts +87 -87
  43. package/src/StkTable/useColResize.ts +202 -202
  44. package/src/StkTable/useFixedCol.ts +168 -168
  45. package/src/StkTable/useFixedStyle.ts +75 -75
  46. package/src/StkTable/useGetFixedColPosition.ts +63 -63
  47. package/src/StkTable/useHighlight.ts +270 -270
  48. package/src/StkTable/useIndexResolver.ts +29 -29
  49. package/src/StkTable/useKeyboardArrowScroll.ts +114 -114
  50. package/src/StkTable/useMaxRowSpan.ts +60 -60
  51. package/src/StkTable/useMergeCells.ts +541 -541
  52. package/src/StkTable/useRowExpand.ts +81 -81
  53. package/src/StkTable/useScrollRowByRow.ts +96 -96
  54. package/src/StkTable/useScrollbar.ts +177 -177
  55. package/src/StkTable/useSorter.ts +267 -267
  56. package/src/StkTable/useTableColumns.ts +142 -142
  57. package/src/StkTable/useThDrag.ts +94 -94
  58. package/src/StkTable/useTrDrag.ts +100 -100
  59. package/src/StkTable/useTree.ts +253 -253
  60. package/src/StkTable/useVirtualScroll.ts +1032 -1025
  61. package/src/StkTable/useWheeling.ts +23 -23
  62. package/src/StkTable/utils/constRefUtils.ts +29 -29
  63. package/src/StkTable/utils/index.ts +331 -331
  64. package/src/StkTable/utils/rowHeightFenwickTree.ts +74 -74
  65. package/src/StkTable/utils/useTriggerRef.ts +33 -33
  66. package/src/VirtualTree.vue +622 -622
  67. package/src/VirtualTreeSelect.vue +367 -367
  68. package/src/vite-env.d.ts +10 -10
@@ -1,177 +1,177 @@
1
- import { nextTick, onMounted, onBeforeUnmount, ref, Ref } from 'vue';
2
- import type { VirtualScrollStore, VirtualScrollXStore } from './useVirtualScroll';
3
- import { rafThrottle, throttle } from './utils/index';
4
-
5
- /** Detect if the primary pointer is a touch device (mobile/tablet). */
6
- function isTouchPrimaryDevice(): boolean {
7
- if (typeof window === 'undefined') return false;
8
- return window.matchMedia('(hover: none) and (pointer: coarse)').matches;
9
- }
10
-
11
- export type ScrollbarOptions = {
12
- enabled?: boolean;
13
- /** scroll-y width */
14
- width?: number;
15
- /** scroll-x height */
16
- height?: number;
17
- /** min scroll-y width */
18
- minWidth?: number;
19
- /** min scroll-x height */
20
- minHeight?: number;
21
- };
22
-
23
- /**
24
- * 自定义滚动条hooks
25
- * @param containerRef 滚动容器的ref
26
- * @param options 滚动条配置选项
27
- * @returns 滚动条相关状态和方法
28
- */
29
- export function useScrollbar(
30
- props: any,
31
- containerRef: Ref<HTMLDivElement | undefined>,
32
- virtualScroll: Ref<VirtualScrollStore>,
33
- virtualScrollX: Ref<VirtualScrollXStore>,
34
- updateVirtualScrollY: (sTop?: number) => void,
35
- scrollbarOptions: Ref<Required<ScrollbarOptions>>,
36
- isExperimentalScrollY: Ref<boolean | undefined>,
37
- ) {
38
- const showScrollbar = ref({ x: false, y: false });
39
- const scrollbar = ref({ h: 0, w: 0, t: 0, l: 0 });
40
-
41
- let isDraggingVertical = false;
42
- let isDraggingHorizontal = false;
43
- let dragStartY = 0;
44
- let dragStartX = 0;
45
- let dragStartTop = 0;
46
- let dragStartLeft = 0;
47
-
48
- let resizeObserver: ResizeObserver | null = null;
49
- let currentDragHandler: ((e: MouseEvent | TouchEvent) => void) | undefined;
50
- let isMobileDevice = false;
51
-
52
- const throttledUpdateScrollbar = throttle(() => updateCustomScrollbar(), 200);
53
- // Use requestAnimationFrame for smoother scrollbar dragging performance
54
- const rafUpdateVirtualScrollY = rafThrottle((scrollTop: number) => updateVirtualScrollY(scrollTop));
55
-
56
- onMounted(() => {
57
- isMobileDevice = isTouchPrimaryDevice();
58
- if (scrollbarOptions.value.enabled && !isMobileDevice) {
59
- resizeObserver = new ResizeObserver(throttledUpdateScrollbar);
60
- resizeObserver.observe(containerRef.value!);
61
- }
62
- initScrollbar();
63
- });
64
-
65
- onBeforeUnmount(() => {
66
- // en: Clean up all event listeners to prevent memory leaks
67
- onDragEnd();
68
- resizeObserver?.disconnect();
69
- resizeObserver = null;
70
- });
71
-
72
- function updateCustomScrollbar() {
73
- if (!scrollbarOptions.value.enabled || isMobileDevice) return;
74
- const { scrollHeight, scrollTop, containerHeight } = virtualScroll.value;
75
- const { scrollWidth, scrollLeft, containerWidth } = virtualScrollX.value;
76
-
77
- const needVertical = scrollHeight > containerHeight;
78
- const needHorizontal = scrollWidth > containerWidth;
79
- showScrollbar.value = { x: needHorizontal, y: needVertical };
80
-
81
- if (needVertical) {
82
- const ratio = containerHeight / scrollHeight;
83
- scrollbar.value.h = Math.max(scrollbarOptions.value.minHeight, ratio * containerHeight);
84
- scrollbar.value.t = Math.round((scrollTop / (scrollHeight - containerHeight)) * (containerHeight - scrollbar.value.h));
85
- }
86
-
87
- if (needHorizontal) {
88
- const ratio = containerWidth / scrollWidth;
89
- scrollbar.value.w = Math.max(scrollbarOptions.value.minWidth, ratio * containerWidth);
90
- scrollbar.value.l = Math.round((scrollLeft / (scrollWidth - containerWidth)) * (containerWidth - scrollbar.value.w));
91
- }
92
- }
93
-
94
- function onVerticalScrollbarMouseDown(e: MouseEvent | TouchEvent) {
95
- if (e instanceof MouseEvent) e.preventDefault();
96
- isDraggingVertical = true;
97
- const { scrollTop } = virtualScroll.value;
98
- dragStartTop = scrollTop;
99
- dragStartY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY;
100
- addDragListeners(onVerticalDrag);
101
- }
102
-
103
- function onHorizontalScrollbarMouseDown(e: MouseEvent | TouchEvent) {
104
- if (e instanceof MouseEvent) e.preventDefault();
105
- isDraggingHorizontal = true;
106
- const { scrollLeft } = virtualScrollX.value;
107
- dragStartLeft = scrollLeft;
108
- dragStartX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX;
109
- addDragListeners(onHorizontalDrag);
110
- }
111
-
112
- function addDragListeners(dragHandler: (e: MouseEvent | TouchEvent) => void) {
113
- removeCurrentDragHandlerListeners();
114
- currentDragHandler = dragHandler;
115
- document.addEventListener('mousemove', dragHandler);
116
- document.addEventListener('mouseup', onDragEnd);
117
- document.addEventListener('touchmove', dragHandler, { passive: false });
118
- document.addEventListener('touchend', onDragEnd);
119
- }
120
-
121
- function onVerticalDrag(e: MouseEvent | TouchEvent) {
122
- if (!isDraggingVertical) return;
123
- e.preventDefault();
124
- const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY;
125
- const deltaY = clientY - dragStartY;
126
- const { scrollHeight, containerHeight } = virtualScroll.value;
127
- const scrollRange = scrollHeight - containerHeight;
128
- const trackRange = containerHeight - scrollbar.value.h;
129
- const scrollDelta = (deltaY / trackRange) * scrollRange;
130
-
131
- if (isExperimentalScrollY.value) {
132
- const ratio = containerHeight / scrollHeight;
133
- const top = Math.round((dragStartTop + scrollDelta) * ratio);
134
- const maxTop = containerHeight - scrollbar.value.h;
135
- scrollbar.value.t = top < 0 ? 0 : top > maxTop ? maxTop : top;
136
- rafUpdateVirtualScrollY(dragStartTop + scrollDelta);
137
- } else {
138
- containerRef.value!.scrollTop = dragStartTop + scrollDelta;
139
- }
140
- }
141
-
142
- function onHorizontalDrag(e: MouseEvent | TouchEvent) {
143
- if (!isDraggingHorizontal) return;
144
- e.preventDefault();
145
-
146
- const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX;
147
- const deltaX = clientX - dragStartX;
148
- const { scrollWidth, containerWidth } = virtualScrollX.value;
149
-
150
- const scrollRange = scrollWidth - containerWidth;
151
- const trackRange = containerWidth - scrollbar.value.w;
152
- const scrollDelta = (deltaX / trackRange) * scrollRange;
153
- containerRef.value!.scrollLeft = dragStartLeft + scrollDelta;
154
- }
155
-
156
- function onDragEnd() {
157
- isDraggingVertical = false;
158
- isDraggingHorizontal = false;
159
- removeCurrentDragHandlerListeners();
160
- document.removeEventListener('mouseup', onDragEnd);
161
- document.removeEventListener('touchend', onDragEnd);
162
- }
163
-
164
- function removeCurrentDragHandlerListeners() {
165
- if (currentDragHandler) {
166
- document.removeEventListener('mousemove', currentDragHandler);
167
- document.removeEventListener('touchmove', currentDragHandler);
168
- currentDragHandler = void 0;
169
- }
170
- }
171
-
172
- function initScrollbar() {
173
- nextTick(updateCustomScrollbar);
174
- }
175
-
176
- return [scrollbar, showScrollbar, onVerticalScrollbarMouseDown, onHorizontalScrollbarMouseDown, updateCustomScrollbar] as const;
177
- }
1
+ import { nextTick, onMounted, onBeforeUnmount, ref, Ref } from 'vue';
2
+ import type { VirtualScrollStore, VirtualScrollXStore } from './useVirtualScroll';
3
+ import { rafThrottle, throttle } from './utils/index';
4
+
5
+ /** Detect if the primary pointer is a touch device (mobile/tablet). */
6
+ function isTouchPrimaryDevice(): boolean {
7
+ if (typeof window === 'undefined') return false;
8
+ return window.matchMedia('(hover: none) and (pointer: coarse)').matches;
9
+ }
10
+
11
+ export type ScrollbarOptions = {
12
+ enabled?: boolean;
13
+ /** scroll-y width */
14
+ width?: number;
15
+ /** scroll-x height */
16
+ height?: number;
17
+ /** min scroll-y width */
18
+ minWidth?: number;
19
+ /** min scroll-x height */
20
+ minHeight?: number;
21
+ };
22
+
23
+ /**
24
+ * 自定义滚动条hooks
25
+ * @param containerRef 滚动容器的ref
26
+ * @param options 滚动条配置选项
27
+ * @returns 滚动条相关状态和方法
28
+ */
29
+ export function useScrollbar(
30
+ props: any,
31
+ containerRef: Ref<HTMLDivElement | undefined>,
32
+ virtualScroll: Ref<VirtualScrollStore>,
33
+ virtualScrollX: Ref<VirtualScrollXStore>,
34
+ updateVirtualScrollY: (sTop?: number) => void,
35
+ scrollbarOptions: Ref<Required<ScrollbarOptions>>,
36
+ isExperimentalScrollY: Ref<boolean | undefined>,
37
+ ) {
38
+ const showScrollbar = ref({ x: false, y: false });
39
+ const scrollbar = ref({ h: 0, w: 0, t: 0, l: 0 });
40
+
41
+ let isDraggingVertical = false;
42
+ let isDraggingHorizontal = false;
43
+ let dragStartY = 0;
44
+ let dragStartX = 0;
45
+ let dragStartTop = 0;
46
+ let dragStartLeft = 0;
47
+
48
+ let resizeObserver: ResizeObserver | null = null;
49
+ let currentDragHandler: ((e: MouseEvent | TouchEvent) => void) | undefined;
50
+ let isMobileDevice = false;
51
+
52
+ const throttledUpdateScrollbar = throttle(() => updateCustomScrollbar(), 200);
53
+ // Use requestAnimationFrame for smoother scrollbar dragging performance
54
+ const rafUpdateVirtualScrollY = rafThrottle((scrollTop: number) => updateVirtualScrollY(scrollTop));
55
+
56
+ onMounted(() => {
57
+ isMobileDevice = isTouchPrimaryDevice();
58
+ if (scrollbarOptions.value.enabled && !isMobileDevice) {
59
+ resizeObserver = new ResizeObserver(throttledUpdateScrollbar);
60
+ resizeObserver.observe(containerRef.value!);
61
+ }
62
+ initScrollbar();
63
+ });
64
+
65
+ onBeforeUnmount(() => {
66
+ // en: Clean up all event listeners to prevent memory leaks
67
+ onDragEnd();
68
+ resizeObserver?.disconnect();
69
+ resizeObserver = null;
70
+ });
71
+
72
+ function updateCustomScrollbar() {
73
+ if (!scrollbarOptions.value.enabled || isMobileDevice) return;
74
+ const { scrollHeight, scrollTop, containerHeight } = virtualScroll.value;
75
+ const { scrollWidth, scrollLeft, containerWidth } = virtualScrollX.value;
76
+
77
+ const needVertical = scrollHeight > containerHeight;
78
+ const needHorizontal = scrollWidth > containerWidth;
79
+ showScrollbar.value = { x: needHorizontal, y: needVertical };
80
+
81
+ if (needVertical) {
82
+ const ratio = containerHeight / scrollHeight;
83
+ scrollbar.value.h = Math.max(scrollbarOptions.value.minHeight, ratio * containerHeight);
84
+ scrollbar.value.t = Math.round((scrollTop / (scrollHeight - containerHeight)) * (containerHeight - scrollbar.value.h));
85
+ }
86
+
87
+ if (needHorizontal) {
88
+ const ratio = containerWidth / scrollWidth;
89
+ scrollbar.value.w = Math.max(scrollbarOptions.value.minWidth, ratio * containerWidth);
90
+ scrollbar.value.l = Math.round((scrollLeft / (scrollWidth - containerWidth)) * (containerWidth - scrollbar.value.w));
91
+ }
92
+ }
93
+
94
+ function onVerticalScrollbarMouseDown(e: MouseEvent | TouchEvent) {
95
+ if (e instanceof MouseEvent) e.preventDefault();
96
+ isDraggingVertical = true;
97
+ const { scrollTop } = virtualScroll.value;
98
+ dragStartTop = scrollTop;
99
+ dragStartY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY;
100
+ addDragListeners(onVerticalDrag);
101
+ }
102
+
103
+ function onHorizontalScrollbarMouseDown(e: MouseEvent | TouchEvent) {
104
+ if (e instanceof MouseEvent) e.preventDefault();
105
+ isDraggingHorizontal = true;
106
+ const { scrollLeft } = virtualScrollX.value;
107
+ dragStartLeft = scrollLeft;
108
+ dragStartX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX;
109
+ addDragListeners(onHorizontalDrag);
110
+ }
111
+
112
+ function addDragListeners(dragHandler: (e: MouseEvent | TouchEvent) => void) {
113
+ removeCurrentDragHandlerListeners();
114
+ currentDragHandler = dragHandler;
115
+ document.addEventListener('mousemove', dragHandler);
116
+ document.addEventListener('mouseup', onDragEnd);
117
+ document.addEventListener('touchmove', dragHandler, { passive: false });
118
+ document.addEventListener('touchend', onDragEnd);
119
+ }
120
+
121
+ function onVerticalDrag(e: MouseEvent | TouchEvent) {
122
+ if (!isDraggingVertical) return;
123
+ e.preventDefault();
124
+ const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY;
125
+ const deltaY = clientY - dragStartY;
126
+ const { scrollHeight, containerHeight } = virtualScroll.value;
127
+ const scrollRange = scrollHeight - containerHeight;
128
+ const trackRange = containerHeight - scrollbar.value.h;
129
+ const scrollDelta = (deltaY / trackRange) * scrollRange;
130
+
131
+ if (isExperimentalScrollY.value) {
132
+ const ratio = containerHeight / scrollHeight;
133
+ const top = Math.round((dragStartTop + scrollDelta) * ratio);
134
+ const maxTop = containerHeight - scrollbar.value.h;
135
+ scrollbar.value.t = top < 0 ? 0 : top > maxTop ? maxTop : top;
136
+ rafUpdateVirtualScrollY(dragStartTop + scrollDelta);
137
+ } else {
138
+ containerRef.value!.scrollTop = dragStartTop + scrollDelta;
139
+ }
140
+ }
141
+
142
+ function onHorizontalDrag(e: MouseEvent | TouchEvent) {
143
+ if (!isDraggingHorizontal) return;
144
+ e.preventDefault();
145
+
146
+ const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX;
147
+ const deltaX = clientX - dragStartX;
148
+ const { scrollWidth, containerWidth } = virtualScrollX.value;
149
+
150
+ const scrollRange = scrollWidth - containerWidth;
151
+ const trackRange = containerWidth - scrollbar.value.w;
152
+ const scrollDelta = (deltaX / trackRange) * scrollRange;
153
+ containerRef.value!.scrollLeft = dragStartLeft + scrollDelta;
154
+ }
155
+
156
+ function onDragEnd() {
157
+ isDraggingVertical = false;
158
+ isDraggingHorizontal = false;
159
+ removeCurrentDragHandlerListeners();
160
+ document.removeEventListener('mouseup', onDragEnd);
161
+ document.removeEventListener('touchend', onDragEnd);
162
+ }
163
+
164
+ function removeCurrentDragHandlerListeners() {
165
+ if (currentDragHandler) {
166
+ document.removeEventListener('mousemove', currentDragHandler);
167
+ document.removeEventListener('touchmove', currentDragHandler);
168
+ currentDragHandler = void 0;
169
+ }
170
+ }
171
+
172
+ function initScrollbar() {
173
+ nextTick(updateCustomScrollbar);
174
+ }
175
+
176
+ return [scrollbar, showScrollbar, onVerticalScrollbarMouseDown, onHorizontalScrollbarMouseDown, updateCustomScrollbar] as const;
177
+ }