stk-table-vue 0.11.12 → 0.11.13
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 +173 -173
- package/lib/index-BzpbBYPO.js +166 -166
- package/lib/src/StkTable/StkTable.vue.d.ts +840 -840
- package/lib/src/StkTable/custom-cells/EditableCell/EditableCell.vue.d.ts +18 -18
- package/lib/src/StkTable/custom-cells/EditableCell/createEditableCell.d.ts +33 -33
- package/lib/src/StkTable/custom-cells/EditableCell/index.d.ts +3 -3
- package/lib/src/StkTable/custom-cells/Filter/Dropdown/index.d.ts +26 -26
- package/lib/src/StkTable/custom-cells/Filter/Dropdown/index.vue.d.ts +16 -16
- package/lib/src/StkTable/custom-cells/Filter/Filter.vue.d.ts +35 -35
- package/lib/src/StkTable/custom-cells/Filter/createFilter.d.ts +23 -23
- package/lib/src/StkTable/custom-cells/Filter/index.d.ts +2 -2
- package/lib/src/StkTable/custom-cells/Filter/types.d.ts +38 -38
- package/lib/src/StkTable/features/const.d.ts +1 -1
- package/lib/src/StkTable/features/index.d.ts +1 -1
- package/lib/src/StkTable/features/useAreaSelection.d.ts +25 -25
- package/lib/src/StkTable/index.d.ts +9 -9
- package/lib/src/StkTable/registerFeature.d.ts +9 -9
- package/lib/src/StkTable/types/index.d.ts +416 -416
- package/lib/src/StkTable/useAutoResize.d.ts +10 -10
- package/lib/src/StkTable/useColResize.d.ts +5 -5
- package/lib/src/StkTable/useFixedCol.d.ts +9 -9
- package/lib/src/StkTable/useFixedStyle.d.ts +16 -16
- package/lib/src/StkTable/useGetFixedColPosition.d.ts +9 -9
- package/lib/src/StkTable/useHighlight.d.ts +8 -8
- package/lib/src/StkTable/useKeyboardArrowScroll.d.ts +10 -10
- package/lib/src/StkTable/useMaxRowSpan.d.ts +4 -4
- package/lib/src/StkTable/useMergeCells.d.ts +7 -7
- package/lib/src/StkTable/useRowExpand.d.ts +9 -9
- package/lib/src/StkTable/useScrollRowByRow.d.ts +3 -3
- package/lib/src/StkTable/useScrollbar.d.ts +45 -45
- package/lib/src/StkTable/useSorter.d.ts +38 -38
- package/lib/src/StkTable/useTableColumns.d.ts +8 -8
- package/lib/src/StkTable/useThDrag.d.ts +7 -7
- package/lib/src/StkTable/useTrDrag.d.ts +7 -7
- package/lib/src/StkTable/useTree.d.ts +10 -10
- package/lib/src/StkTable/useVirtualScroll.d.ts +78 -78
- package/lib/src/StkTable/utils/index.d.ts +73 -71
- package/lib/stk-table-vue.js +4507 -4490
- package/lib/style.css +686 -674
- package/lib/test/defaultSort.test.d.ts +1 -1
- package/lib/test/setSorter.test.d.ts +1 -1
- package/package.json +85 -85
- package/src/StkTable/StkTable.vue +1815 -1799
- 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/Filter/createFilter.ts +1 -1
- package/src/StkTable/features/const.ts +1 -1
- package/src/StkTable/features/index.ts +1 -1
- package/src/StkTable/features/useAreaSelection.ts +951 -951
- package/src/StkTable/index.ts +12 -12
- package/src/StkTable/registerFeature.ts +40 -40
- package/src/StkTable/style.less +765 -749
- package/src/StkTable/types/highlightDimOptions.ts +26 -26
- package/src/StkTable/types/index.ts +437 -437
- package/src/StkTable/useAutoResize.ts +87 -87
- package/src/StkTable/useColResize.ts +202 -202
- package/src/StkTable/useFixedCol.ts +142 -142
- package/src/StkTable/useFixedStyle.ts +75 -75
- package/src/StkTable/useGetFixedColPosition.ts +63 -63
- package/src/StkTable/useHighlight.ts +253 -253
- package/src/StkTable/useKeyboardArrowScroll.ts +114 -114
- package/src/StkTable/useMaxRowSpan.ts +50 -50
- package/src/StkTable/useMergeCells.ts +138 -138
- package/src/StkTable/useRowExpand.ts +81 -81
- package/src/StkTable/useScrollRowByRow.ts +96 -96
- package/src/StkTable/useScrollbar.ts +177 -169
- package/src/StkTable/useSorter.ts +259 -259
- package/src/StkTable/useTableColumns.ts +129 -129
- package/src/StkTable/useThDrag.ts +94 -96
- package/src/StkTable/useTrDrag.ts +100 -100
- package/src/StkTable/useTree.ts +152 -152
- package/src/StkTable/useVirtualScroll.ts +554 -554
- package/src/StkTable/useWheeling.ts +23 -23
- package/src/StkTable/utils/constRefUtils.ts +29 -29
- package/src/StkTable/utils/index.ts +331 -324
- 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
package/lib/index-BzpbBYPO.js
CHANGED
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* name: stk-table-vue
|
|
3
|
-
* version: v0.11.12
|
|
4
|
-
* description: High performance realtime virtual table for vue3 and vue2.7
|
|
5
|
-
* author: japlus
|
|
6
|
-
* homepage: https://ja-plus.github.io/stk-table-vue/
|
|
7
|
-
* license: MIT
|
|
8
|
-
*/
|
|
9
|
-
import { defineComponent, ref, reactive, h, onMounted, onUnmounted, createElementBlock, openBlock, withModifiers, normalizeStyle, normalizeClass, createVNode, createElementVNode, nextTick } from "vue";
|
|
10
|
-
import { StkTable as _sfc_main$1 } from "./stk-table-vue.js";
|
|
11
|
-
const DROPDOWN_DEFAULT_WIDTH = 300;
|
|
12
|
-
const DROPDOWN_DEFAULT_HEIGHT = 400;
|
|
13
|
-
const PADDING = 6;
|
|
14
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
15
|
-
__name: "index",
|
|
16
|
-
setup(__props, { expose: __expose }) {
|
|
17
|
-
const theme = ref("light");
|
|
18
|
-
const checkedTempValueSet = reactive(/* @__PURE__ */ new Set());
|
|
19
|
-
const columns = ref([
|
|
20
|
-
{
|
|
21
|
-
title: "",
|
|
22
|
-
dataIndex: "value",
|
|
23
|
-
width: 30,
|
|
24
|
-
className: "stk-filter-dropdown-checkbox",
|
|
25
|
-
customCell: ({ row }) => h("input", {
|
|
26
|
-
type: "checkbox",
|
|
27
|
-
checked: checkedTempValueSet.has(row.value)
|
|
28
|
-
})
|
|
29
|
-
},
|
|
30
|
-
{ title: "", dataIndex: "label", customCell: ({ row }) => h("span", [row.label]) }
|
|
31
|
-
]);
|
|
32
|
-
const visible = ref(false);
|
|
33
|
-
const position = ref({ x: 0, y: 0 });
|
|
34
|
-
const options = ref([]);
|
|
35
|
-
const dropdownEl = ref();
|
|
36
|
-
onMounted(() => {
|
|
37
|
-
document.addEventListener("click", handleClickOutside);
|
|
38
|
-
});
|
|
39
|
-
onUnmounted(() => {
|
|
40
|
-
document.removeEventListener("click", handleClickOutside);
|
|
41
|
-
});
|
|
42
|
-
let onConfirmFn;
|
|
43
|
-
function getDropdownSize() {
|
|
44
|
-
if (!dropdownEl.value) {
|
|
45
|
-
return [DROPDOWN_DEFAULT_WIDTH, DROPDOWN_DEFAULT_HEIGHT];
|
|
46
|
-
}
|
|
47
|
-
const rect = dropdownEl.value.getBoundingClientRect();
|
|
48
|
-
return [rect.width || DROPDOWN_DEFAULT_WIDTH, rect.height || DROPDOWN_DEFAULT_HEIGHT];
|
|
49
|
-
}
|
|
50
|
-
function calculatePosition(docPos) {
|
|
51
|
-
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
52
|
-
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
53
|
-
const viewportWidth = document.documentElement.clientWidth;
|
|
54
|
-
const viewportHeight = document.documentElement.clientHeight;
|
|
55
|
-
const [dropdownWidth, dropdownHeight] = getDropdownSize();
|
|
56
|
-
let finalX = docPos.x;
|
|
57
|
-
let finalY = docPos.y;
|
|
58
|
-
const relativeX = docPos.x - scrollLeft;
|
|
59
|
-
if (relativeX + dropdownWidth > viewportWidth - PADDING) {
|
|
60
|
-
finalX = viewportWidth - dropdownWidth - PADDING + scrollLeft;
|
|
61
|
-
}
|
|
62
|
-
const relativeY = docPos.y - scrollTop;
|
|
63
|
-
if (relativeY + dropdownHeight > viewportHeight - PADDING) {
|
|
64
|
-
const triggerHeight = docPos.height || 30;
|
|
65
|
-
if (relativeY - triggerHeight >= dropdownHeight + PADDING) {
|
|
66
|
-
finalY = docPos.y - triggerHeight - dropdownHeight - PADDING;
|
|
67
|
-
} else {
|
|
68
|
-
finalY = PADDING + scrollTop;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
finalX = Math.max(PADDING + scrollLeft, finalX);
|
|
72
|
-
finalY = Math.max(PADDING + scrollTop, finalY);
|
|
73
|
-
return { x: finalX, y: finalY };
|
|
74
|
-
}
|
|
75
|
-
async function show(pos, opt, onConfirm) {
|
|
76
|
-
if (dropdownEl.value) {
|
|
77
|
-
dropdownEl.value.style.visibility = "hidden";
|
|
78
|
-
}
|
|
79
|
-
visible.value = true;
|
|
80
|
-
options.value = opt || [];
|
|
81
|
-
initChecked();
|
|
82
|
-
onConfirmFn = onConfirm;
|
|
83
|
-
await nextTick();
|
|
84
|
-
position.value = calculatePosition(pos);
|
|
85
|
-
if (dropdownEl.value) {
|
|
86
|
-
dropdownEl.value.style.visibility = "visible";
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
async function handleClickOutside(e) {
|
|
90
|
-
var _a;
|
|
91
|
-
if (!visible.value || ((_a = dropdownEl.value) == null ? void 0 : _a.contains(e.target))) return;
|
|
92
|
-
hide();
|
|
93
|
-
}
|
|
94
|
-
function initChecked() {
|
|
95
|
-
options.value.forEach((opt) => {
|
|
96
|
-
if (opt.selected) {
|
|
97
|
-
checkedTempValueSet.add(opt.value);
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
function updateChecked(checked, row) {
|
|
102
|
-
if (checked) {
|
|
103
|
-
checkedTempValueSet.add(row.value);
|
|
104
|
-
} else {
|
|
105
|
-
checkedTempValueSet.delete(row.value);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function confirm() {
|
|
109
|
-
options.value.forEach((opt) => opt.selected = checkedTempValueSet.has(opt.value));
|
|
110
|
-
onConfirmFn(Array.from(checkedTempValueSet));
|
|
111
|
-
hide();
|
|
112
|
-
}
|
|
113
|
-
function hide() {
|
|
114
|
-
visible.value = false;
|
|
115
|
-
options.value = [];
|
|
116
|
-
checkedTempValueSet.clear();
|
|
117
|
-
}
|
|
118
|
-
function handleRowClick(e, row) {
|
|
119
|
-
const selected = checkedTempValueSet.has(row.value);
|
|
120
|
-
updateChecked(!selected, row);
|
|
121
|
-
}
|
|
122
|
-
function setTheme(t) {
|
|
123
|
-
theme.value = t;
|
|
124
|
-
}
|
|
125
|
-
function handleClear() {
|
|
126
|
-
checkedTempValueSet.clear();
|
|
127
|
-
confirm();
|
|
128
|
-
}
|
|
129
|
-
__expose({ visible, show, hide, setTheme });
|
|
130
|
-
return (_ctx, _cache) => {
|
|
131
|
-
return openBlock(), createElementBlock("div", {
|
|
132
|
-
ref_key: "dropdownEl",
|
|
133
|
-
ref: dropdownEl,
|
|
134
|
-
class: normalizeClass(["stk-filter-dropdown", [`stk-filter-dropdown--${theme.value}`]]),
|
|
135
|
-
style: normalizeStyle({
|
|
136
|
-
top: position.value.y + "px",
|
|
137
|
-
left: position.value.x + "px",
|
|
138
|
-
display: visible.value ? void 0 : "none"
|
|
139
|
-
}),
|
|
140
|
-
onClick: _cache[0] || (_cache[0] = withModifiers(() => {
|
|
141
|
-
}, ["stop"]))
|
|
142
|
-
}, [
|
|
143
|
-
createVNode(_sfc_main$1, {
|
|
144
|
-
"row-key": "id",
|
|
145
|
-
headless: "",
|
|
146
|
-
virtual: "",
|
|
147
|
-
"no-data-full": "",
|
|
148
|
-
theme: theme.value,
|
|
149
|
-
"row-active": false,
|
|
150
|
-
"row-height": 20,
|
|
151
|
-
bordered: false,
|
|
152
|
-
columns: columns.value,
|
|
153
|
-
"data-source": options.value,
|
|
154
|
-
onRowClick: handleRowClick
|
|
155
|
-
}, null, 8, ["theme", "columns", "data-source"]),
|
|
156
|
-
createElementVNode("footer", null, [
|
|
157
|
-
createElementVNode("button", { onClick: handleClear }, "↺"),
|
|
158
|
-
createElementVNode("button", { onClick: confirm }, "✓")
|
|
159
|
-
])
|
|
160
|
-
], 6);
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
export {
|
|
165
|
-
_sfc_main as default
|
|
166
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* name: stk-table-vue
|
|
3
|
+
* version: v0.11.12
|
|
4
|
+
* description: High performance realtime virtual table for vue3 and vue2.7
|
|
5
|
+
* author: japlus
|
|
6
|
+
* homepage: https://ja-plus.github.io/stk-table-vue/
|
|
7
|
+
* license: MIT
|
|
8
|
+
*/
|
|
9
|
+
import { defineComponent, ref, reactive, h, onMounted, onUnmounted, createElementBlock, openBlock, withModifiers, normalizeStyle, normalizeClass, createVNode, createElementVNode, nextTick } from "vue";
|
|
10
|
+
import { StkTable as _sfc_main$1 } from "./stk-table-vue.js";
|
|
11
|
+
const DROPDOWN_DEFAULT_WIDTH = 300;
|
|
12
|
+
const DROPDOWN_DEFAULT_HEIGHT = 400;
|
|
13
|
+
const PADDING = 6;
|
|
14
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
15
|
+
__name: "index",
|
|
16
|
+
setup(__props, { expose: __expose }) {
|
|
17
|
+
const theme = ref("light");
|
|
18
|
+
const checkedTempValueSet = reactive(/* @__PURE__ */ new Set());
|
|
19
|
+
const columns = ref([
|
|
20
|
+
{
|
|
21
|
+
title: "",
|
|
22
|
+
dataIndex: "value",
|
|
23
|
+
width: 30,
|
|
24
|
+
className: "stk-filter-dropdown-checkbox",
|
|
25
|
+
customCell: ({ row }) => h("input", {
|
|
26
|
+
type: "checkbox",
|
|
27
|
+
checked: checkedTempValueSet.has(row.value)
|
|
28
|
+
})
|
|
29
|
+
},
|
|
30
|
+
{ title: "", dataIndex: "label", customCell: ({ row }) => h("span", [row.label]) }
|
|
31
|
+
]);
|
|
32
|
+
const visible = ref(false);
|
|
33
|
+
const position = ref({ x: 0, y: 0 });
|
|
34
|
+
const options = ref([]);
|
|
35
|
+
const dropdownEl = ref();
|
|
36
|
+
onMounted(() => {
|
|
37
|
+
document.addEventListener("click", handleClickOutside);
|
|
38
|
+
});
|
|
39
|
+
onUnmounted(() => {
|
|
40
|
+
document.removeEventListener("click", handleClickOutside);
|
|
41
|
+
});
|
|
42
|
+
let onConfirmFn;
|
|
43
|
+
function getDropdownSize() {
|
|
44
|
+
if (!dropdownEl.value) {
|
|
45
|
+
return [DROPDOWN_DEFAULT_WIDTH, DROPDOWN_DEFAULT_HEIGHT];
|
|
46
|
+
}
|
|
47
|
+
const rect = dropdownEl.value.getBoundingClientRect();
|
|
48
|
+
return [rect.width || DROPDOWN_DEFAULT_WIDTH, rect.height || DROPDOWN_DEFAULT_HEIGHT];
|
|
49
|
+
}
|
|
50
|
+
function calculatePosition(docPos) {
|
|
51
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
52
|
+
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
53
|
+
const viewportWidth = document.documentElement.clientWidth;
|
|
54
|
+
const viewportHeight = document.documentElement.clientHeight;
|
|
55
|
+
const [dropdownWidth, dropdownHeight] = getDropdownSize();
|
|
56
|
+
let finalX = docPos.x;
|
|
57
|
+
let finalY = docPos.y;
|
|
58
|
+
const relativeX = docPos.x - scrollLeft;
|
|
59
|
+
if (relativeX + dropdownWidth > viewportWidth - PADDING) {
|
|
60
|
+
finalX = viewportWidth - dropdownWidth - PADDING + scrollLeft;
|
|
61
|
+
}
|
|
62
|
+
const relativeY = docPos.y - scrollTop;
|
|
63
|
+
if (relativeY + dropdownHeight > viewportHeight - PADDING) {
|
|
64
|
+
const triggerHeight = docPos.height || 30;
|
|
65
|
+
if (relativeY - triggerHeight >= dropdownHeight + PADDING) {
|
|
66
|
+
finalY = docPos.y - triggerHeight - dropdownHeight - PADDING;
|
|
67
|
+
} else {
|
|
68
|
+
finalY = PADDING + scrollTop;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
finalX = Math.max(PADDING + scrollLeft, finalX);
|
|
72
|
+
finalY = Math.max(PADDING + scrollTop, finalY);
|
|
73
|
+
return { x: finalX, y: finalY };
|
|
74
|
+
}
|
|
75
|
+
async function show(pos, opt, onConfirm) {
|
|
76
|
+
if (dropdownEl.value) {
|
|
77
|
+
dropdownEl.value.style.visibility = "hidden";
|
|
78
|
+
}
|
|
79
|
+
visible.value = true;
|
|
80
|
+
options.value = opt || [];
|
|
81
|
+
initChecked();
|
|
82
|
+
onConfirmFn = onConfirm;
|
|
83
|
+
await nextTick();
|
|
84
|
+
position.value = calculatePosition(pos);
|
|
85
|
+
if (dropdownEl.value) {
|
|
86
|
+
dropdownEl.value.style.visibility = "visible";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function handleClickOutside(e) {
|
|
90
|
+
var _a;
|
|
91
|
+
if (!visible.value || ((_a = dropdownEl.value) == null ? void 0 : _a.contains(e.target))) return;
|
|
92
|
+
hide();
|
|
93
|
+
}
|
|
94
|
+
function initChecked() {
|
|
95
|
+
options.value.forEach((opt) => {
|
|
96
|
+
if (opt.selected) {
|
|
97
|
+
checkedTempValueSet.add(opt.value);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function updateChecked(checked, row) {
|
|
102
|
+
if (checked) {
|
|
103
|
+
checkedTempValueSet.add(row.value);
|
|
104
|
+
} else {
|
|
105
|
+
checkedTempValueSet.delete(row.value);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function confirm() {
|
|
109
|
+
options.value.forEach((opt) => opt.selected = checkedTempValueSet.has(opt.value));
|
|
110
|
+
onConfirmFn(Array.from(checkedTempValueSet));
|
|
111
|
+
hide();
|
|
112
|
+
}
|
|
113
|
+
function hide() {
|
|
114
|
+
visible.value = false;
|
|
115
|
+
options.value = [];
|
|
116
|
+
checkedTempValueSet.clear();
|
|
117
|
+
}
|
|
118
|
+
function handleRowClick(e, row) {
|
|
119
|
+
const selected = checkedTempValueSet.has(row.value);
|
|
120
|
+
updateChecked(!selected, row);
|
|
121
|
+
}
|
|
122
|
+
function setTheme(t) {
|
|
123
|
+
theme.value = t;
|
|
124
|
+
}
|
|
125
|
+
function handleClear() {
|
|
126
|
+
checkedTempValueSet.clear();
|
|
127
|
+
confirm();
|
|
128
|
+
}
|
|
129
|
+
__expose({ visible, show, hide, setTheme });
|
|
130
|
+
return (_ctx, _cache) => {
|
|
131
|
+
return openBlock(), createElementBlock("div", {
|
|
132
|
+
ref_key: "dropdownEl",
|
|
133
|
+
ref: dropdownEl,
|
|
134
|
+
class: normalizeClass(["stk-filter-dropdown", [`stk-filter-dropdown--${theme.value}`]]),
|
|
135
|
+
style: normalizeStyle({
|
|
136
|
+
top: position.value.y + "px",
|
|
137
|
+
left: position.value.x + "px",
|
|
138
|
+
display: visible.value ? void 0 : "none"
|
|
139
|
+
}),
|
|
140
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(() => {
|
|
141
|
+
}, ["stop"]))
|
|
142
|
+
}, [
|
|
143
|
+
createVNode(_sfc_main$1, {
|
|
144
|
+
"row-key": "id",
|
|
145
|
+
headless: "",
|
|
146
|
+
virtual: "",
|
|
147
|
+
"no-data-full": "",
|
|
148
|
+
theme: theme.value,
|
|
149
|
+
"row-active": false,
|
|
150
|
+
"row-height": 20,
|
|
151
|
+
bordered: false,
|
|
152
|
+
columns: columns.value,
|
|
153
|
+
"data-source": options.value,
|
|
154
|
+
onRowClick: handleRowClick
|
|
155
|
+
}, null, 8, ["theme", "columns", "data-source"]),
|
|
156
|
+
createElementVNode("footer", null, [
|
|
157
|
+
createElementVNode("button", { onClick: handleClear }, "↺"),
|
|
158
|
+
createElementVNode("button", { onClick: confirm }, "✓")
|
|
159
|
+
])
|
|
160
|
+
], 6);
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
export {
|
|
165
|
+
_sfc_main as default
|
|
166
|
+
};
|