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.
- package/README.md +194 -194
- package/lib/{Dropdown-D_9cB0rD.js → Dropdown-BAANgg_5.js} +2 -2
- package/lib/{StkTable-CVcmlZi9.js → StkTable-CGcxwpdb.js} +22 -6
- package/lib/src/StkTable/StkTable.vue.d.ts +18 -4
- package/lib/src/StkTable/types/index.d.ts +4 -1
- package/lib/src/StkTable/useVirtualScroll.d.ts +6 -1
- package/lib/stk-table-vue.js +3 -3
- package/lib/style.css +1 -1
- package/package.json +93 -93
- package/src/StkTable/StkTable.vue +2362 -2338
- package/src/StkTable/components/DragHandle.vue +9 -9
- package/src/StkTable/components/SortIcon.vue +6 -6
- package/src/StkTable/components/TreeNodeCell.vue +19 -19
- package/src/StkTable/components/TriangleIcon.vue +3 -3
- package/src/StkTable/const.ts +50 -50
- package/src/StkTable/custom-cells/ChangeCell/ChangeCell.less +34 -34
- package/src/StkTable/custom-cells/ChangeCell/createChangeCell.ts +90 -90
- package/src/StkTable/custom-cells/ChangeCell/index.ts +4 -4
- package/src/StkTable/custom-cells/CheckboxCell/CheckboxCell.less +14 -14
- package/src/StkTable/custom-cells/CheckboxCell/CheckboxCell.vue +56 -56
- package/src/StkTable/custom-cells/CheckboxCell/createCheckboxCell.ts +146 -146
- package/src/StkTable/custom-cells/CheckboxCell/index.ts +5 -5
- package/src/StkTable/custom-cells/FilterCell/Dropdown/index.ts +16 -16
- package/src/StkTable/custom-cells/FilterCell/Dropdown/index.vue +186 -186
- package/src/StkTable/custom-cells/FilterCell/Filter.less +118 -118
- package/src/StkTable/custom-cells/FilterCell/Filter.vue +66 -66
- package/src/StkTable/custom-cells/FilterCell/createFilterCell.ts +120 -120
- package/src/StkTable/custom-cells/FilterCell/index.ts +6 -6
- package/src/StkTable/custom-cells/FilterCell/types.ts +43 -43
- package/src/StkTable/custom-cells/NumberCell/createNumberCell.ts +43 -43
- package/src/StkTable/custom-cells/NumberCell/index.ts +2 -2
- package/src/StkTable/custom-cells/utils/formatNumber.ts +137 -137
- package/src/StkTable/features/const.ts +1 -1
- package/src/StkTable/features/index.ts +1 -1
- package/src/StkTable/features/useAreaSelection.ts +1240 -1239
- package/src/StkTable/index.ts +20 -20
- package/src/StkTable/mergeCellsCache.ts +69 -69
- package/src/StkTable/registerFeature.ts +40 -40
- package/src/StkTable/style.less +791 -791
- package/src/StkTable/types/highlightDimOptions.ts +28 -28
- package/src/StkTable/types/index.ts +503 -500
- package/src/StkTable/useAutoResize.ts +87 -87
- package/src/StkTable/useColResize.ts +202 -202
- package/src/StkTable/useFixedCol.ts +168 -168
- package/src/StkTable/useFixedStyle.ts +75 -75
- package/src/StkTable/useGetFixedColPosition.ts +63 -63
- package/src/StkTable/useHighlight.ts +270 -270
- package/src/StkTable/useIndexResolver.ts +29 -29
- package/src/StkTable/useKeyboardArrowScroll.ts +114 -114
- package/src/StkTable/useMaxRowSpan.ts +60 -60
- package/src/StkTable/useMergeCells.ts +541 -541
- package/src/StkTable/useRowExpand.ts +81 -81
- package/src/StkTable/useScrollRowByRow.ts +96 -96
- package/src/StkTable/useScrollbar.ts +177 -177
- package/src/StkTable/useSorter.ts +267 -267
- package/src/StkTable/useTableColumns.ts +142 -142
- package/src/StkTable/useThDrag.ts +94 -94
- package/src/StkTable/useTrDrag.ts +100 -100
- package/src/StkTable/useTree.ts +253 -253
- package/src/StkTable/useVirtualScroll.ts +1032 -1025
- package/src/StkTable/useWheeling.ts +23 -23
- package/src/StkTable/utils/constRefUtils.ts +29 -29
- package/src/StkTable/utils/index.ts +331 -331
- package/src/StkTable/utils/rowHeightFenwickTree.ts +74 -74
- package/src/StkTable/utils/useTriggerRef.ts +33 -33
- package/src/VirtualTree.vue +622 -622
- package/src/VirtualTreeSelect.vue +367 -367
- package/src/vite-env.d.ts +10 -10
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 行高 Fenwick 树(树状数组):Float64Array 存储,维护各行高度的累计和。
|
|
3
|
-
* 用于变高(autoRowHeight / 展开列)模式下以 O(log n) 定位视口行范围与推导总高度,
|
|
4
|
-
* 替代原先每滚动帧 O(n) 的逐行累加。
|
|
5
|
-
* 支持:O(n) 建树、O(log n) 单点增量更新、O(log n) 前缀和查询、O(log n) 累计和下界查找(树上二分)。
|
|
6
|
-
*/
|
|
7
|
-
export class RowHeightFenwickTree {
|
|
8
|
-
/** 内部 1-based 索引,bit[0] 不使用 */
|
|
9
|
-
private bit: Float64Array;
|
|
10
|
-
readonly size: number;
|
|
11
|
-
/** 全部行高之和,更新时增量维护 */
|
|
12
|
-
total = 0;
|
|
13
|
-
|
|
14
|
-
constructor(size: number) {
|
|
15
|
-
this.size = size;
|
|
16
|
-
this.bit = new Float64Array(size + 1);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** O(n) 顺序建树:heights[i] 为第 i 行(0-based)高度 */
|
|
20
|
-
build(heights: ArrayLike<number>) {
|
|
21
|
-
const n = this.size;
|
|
22
|
-
const bit = this.bit;
|
|
23
|
-
let total = 0;
|
|
24
|
-
for (let i = 0; i < n; i++) {
|
|
25
|
-
const h = heights[i];
|
|
26
|
-
bit[i + 1] = h;
|
|
27
|
-
total += h;
|
|
28
|
-
}
|
|
29
|
-
// Fenwick 线性建树:节点 i 累加到其父节点
|
|
30
|
-
for (let i = 1; i <= n; i++) {
|
|
31
|
-
const j = i + (i & -i);
|
|
32
|
-
if (j <= n) bit[j] += bit[i];
|
|
33
|
-
}
|
|
34
|
-
this.total = total;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** 单点增量更新:第 index 行(0-based)高度变化 delta,O(log n) */
|
|
38
|
-
add(index: number, delta: number) {
|
|
39
|
-
if (!delta) return;
|
|
40
|
-
this.total += delta;
|
|
41
|
-
const n = this.size;
|
|
42
|
-
for (let i = index + 1; i <= n; i += i & -i) this.bit[i] += delta;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** 前 count 行的累计高度(前缀和),O(log n);count 越界时钳制到 [0, size] */
|
|
46
|
-
query(count: number): number {
|
|
47
|
-
const c = count > this.size ? this.size : count < 0 ? 0 : count;
|
|
48
|
-
let sum = 0;
|
|
49
|
-
for (let i = c; i > 0; i -= i & -i) sum += this.bit[i];
|
|
50
|
-
return sum;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* 累计和下界查找(树上二分,O(log n)):
|
|
55
|
-
* 返回首个「累计高度(含本行)≥ target」的行索引(0-based);
|
|
56
|
-
* 总高不足 target 时返回 size(不存在满足条件的行)。
|
|
57
|
-
*/
|
|
58
|
-
findFirstPrefixGE(target: number): number {
|
|
59
|
-
const n = this.size;
|
|
60
|
-
if (n === 0 || target <= 0) return 0;
|
|
61
|
-
let idx = 0; // 已确定的「前缀和 < target」的行数
|
|
62
|
-
let acc = 0;
|
|
63
|
-
let step = 1;
|
|
64
|
-
while (step << 1 <= n) step <<= 1; // 不超过 n 的最大 2 的幂
|
|
65
|
-
for (; step > 0; step >>= 1) {
|
|
66
|
-
const next = idx + step;
|
|
67
|
-
if (next <= n && acc + this.bit[next] < target) {
|
|
68
|
-
idx = next;
|
|
69
|
-
acc += this.bit[next];
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return idx;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* 行高 Fenwick 树(树状数组):Float64Array 存储,维护各行高度的累计和。
|
|
3
|
+
* 用于变高(autoRowHeight / 展开列)模式下以 O(log n) 定位视口行范围与推导总高度,
|
|
4
|
+
* 替代原先每滚动帧 O(n) 的逐行累加。
|
|
5
|
+
* 支持:O(n) 建树、O(log n) 单点增量更新、O(log n) 前缀和查询、O(log n) 累计和下界查找(树上二分)。
|
|
6
|
+
*/
|
|
7
|
+
export class RowHeightFenwickTree {
|
|
8
|
+
/** 内部 1-based 索引,bit[0] 不使用 */
|
|
9
|
+
private bit: Float64Array;
|
|
10
|
+
readonly size: number;
|
|
11
|
+
/** 全部行高之和,更新时增量维护 */
|
|
12
|
+
total = 0;
|
|
13
|
+
|
|
14
|
+
constructor(size: number) {
|
|
15
|
+
this.size = size;
|
|
16
|
+
this.bit = new Float64Array(size + 1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** O(n) 顺序建树:heights[i] 为第 i 行(0-based)高度 */
|
|
20
|
+
build(heights: ArrayLike<number>) {
|
|
21
|
+
const n = this.size;
|
|
22
|
+
const bit = this.bit;
|
|
23
|
+
let total = 0;
|
|
24
|
+
for (let i = 0; i < n; i++) {
|
|
25
|
+
const h = heights[i];
|
|
26
|
+
bit[i + 1] = h;
|
|
27
|
+
total += h;
|
|
28
|
+
}
|
|
29
|
+
// Fenwick 线性建树:节点 i 累加到其父节点
|
|
30
|
+
for (let i = 1; i <= n; i++) {
|
|
31
|
+
const j = i + (i & -i);
|
|
32
|
+
if (j <= n) bit[j] += bit[i];
|
|
33
|
+
}
|
|
34
|
+
this.total = total;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** 单点增量更新:第 index 行(0-based)高度变化 delta,O(log n) */
|
|
38
|
+
add(index: number, delta: number) {
|
|
39
|
+
if (!delta) return;
|
|
40
|
+
this.total += delta;
|
|
41
|
+
const n = this.size;
|
|
42
|
+
for (let i = index + 1; i <= n; i += i & -i) this.bit[i] += delta;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** 前 count 行的累计高度(前缀和),O(log n);count 越界时钳制到 [0, size] */
|
|
46
|
+
query(count: number): number {
|
|
47
|
+
const c = count > this.size ? this.size : count < 0 ? 0 : count;
|
|
48
|
+
let sum = 0;
|
|
49
|
+
for (let i = c; i > 0; i -= i & -i) sum += this.bit[i];
|
|
50
|
+
return sum;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 累计和下界查找(树上二分,O(log n)):
|
|
55
|
+
* 返回首个「累计高度(含本行)≥ target」的行索引(0-based);
|
|
56
|
+
* 总高不足 target 时返回 size(不存在满足条件的行)。
|
|
57
|
+
*/
|
|
58
|
+
findFirstPrefixGE(target: number): number {
|
|
59
|
+
const n = this.size;
|
|
60
|
+
if (n === 0 || target <= 0) return 0;
|
|
61
|
+
let idx = 0; // 已确定的「前缀和 < target」的行数
|
|
62
|
+
let acc = 0;
|
|
63
|
+
let step = 1;
|
|
64
|
+
while (step << 1 <= n) step <<= 1; // 不超过 n 的最大 2 的幂
|
|
65
|
+
for (; step > 0; step >>= 1) {
|
|
66
|
+
const next = idx + step;
|
|
67
|
+
if (next <= n && acc + this.bit[next] < target) {
|
|
68
|
+
idx = next;
|
|
69
|
+
acc += this.bit[next];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return idx;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { Ref, shallowRef } from 'vue';
|
|
2
|
-
|
|
3
|
-
type UseTriggerRef<T> = {
|
|
4
|
-
getRef: () => Ref<T>;
|
|
5
|
-
getValue: () => T;
|
|
6
|
-
setValue: (v: T) => void;
|
|
7
|
-
triggerRef: () => void;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* 创建一个可触发更新的引用对象。
|
|
11
|
-
* @template T 引用对象的类型。
|
|
12
|
-
* @param initialValue 初始值。
|
|
13
|
-
* @returns 包含获取引用、获取值、设置值和触发更新的函数的对象。
|
|
14
|
-
*/
|
|
15
|
-
export function useTriggerRef<T>(initialValue: T): UseTriggerRef<T> {
|
|
16
|
-
let value = initialValue;
|
|
17
|
-
const ref = shallowRef(value);
|
|
18
|
-
|
|
19
|
-
function getValue() {
|
|
20
|
-
return value;
|
|
21
|
-
}
|
|
22
|
-
function setValue(v: T) {
|
|
23
|
-
value = v;
|
|
24
|
-
}
|
|
25
|
-
function getRef() {
|
|
26
|
-
return ref;
|
|
27
|
-
}
|
|
28
|
-
function triggerRef() {
|
|
29
|
-
ref.value = value;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return { getRef, getValue, setValue, triggerRef };
|
|
33
|
-
}
|
|
1
|
+
import { Ref, shallowRef } from 'vue';
|
|
2
|
+
|
|
3
|
+
type UseTriggerRef<T> = {
|
|
4
|
+
getRef: () => Ref<T>;
|
|
5
|
+
getValue: () => T;
|
|
6
|
+
setValue: (v: T) => void;
|
|
7
|
+
triggerRef: () => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* 创建一个可触发更新的引用对象。
|
|
11
|
+
* @template T 引用对象的类型。
|
|
12
|
+
* @param initialValue 初始值。
|
|
13
|
+
* @returns 包含获取引用、获取值、设置值和触发更新的函数的对象。
|
|
14
|
+
*/
|
|
15
|
+
export function useTriggerRef<T>(initialValue: T): UseTriggerRef<T> {
|
|
16
|
+
let value = initialValue;
|
|
17
|
+
const ref = shallowRef(value);
|
|
18
|
+
|
|
19
|
+
function getValue() {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function setValue(v: T) {
|
|
23
|
+
value = v;
|
|
24
|
+
}
|
|
25
|
+
function getRef() {
|
|
26
|
+
return ref;
|
|
27
|
+
}
|
|
28
|
+
function triggerRef() {
|
|
29
|
+
ref.value = value;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return { getRef, getValue, setValue, triggerRef };
|
|
33
|
+
}
|