naive-ui 2.21.5 → 2.22.0
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/es/_internal/close/src/styles/index.cssr.js +6 -5
- package/es/_internal/scrollbar/src/ScrollBar.d.ts +15 -0
- package/es/_internal/scrollbar/src/ScrollBar.js +13 -7
- package/es/_internal/selection/src/Selection.js +11 -9
- package/es/_internal/selection/src/styles/index.cssr.js +6 -2
- package/es/alert/src/Alert.d.ts +20 -20
- package/es/alert/src/Alert.js +22 -22
- package/es/alert/src/styles/index.cssr.js +45 -45
- package/es/anchor/src/AnchorAdapter.js +12 -12
- package/es/anchor/src/styles/index.cssr.js +41 -41
- package/es/avatar/src/Avatar.d.ts +5 -3
- package/es/avatar/src/Avatar.js +7 -5
- package/es/avatar/src/styles/index.cssr.js +3 -5
- package/es/button/src/Button.d.ts +33 -33
- package/es/button/src/Button.js +103 -102
- package/es/button/src/styles/button.cssr.js +83 -80
- package/es/button/styles/light.js +1 -1
- package/es/calendar/src/Calendar.d.ts +2 -0
- package/es/cascader/src/Cascader.d.ts +135 -0
- package/es/cascader/src/Cascader.js +2 -4
- package/es/cascader/src/CascaderMenu.d.ts +345 -0
- package/es/cascader/src/CascaderMenu.js +6 -5
- package/es/cascader/src/CascaderOption.d.ts +18 -0
- package/es/cascader/src/CascaderSelectMenu.d.ts +18 -0
- package/es/cascader/src/CascaderSubmenu.d.ts +18 -0
- package/es/cascader/styles/dark.js +3 -1
- package/es/cascader/styles/light.d.ts +13 -0
- package/es/cascader/styles/light.js +3 -1
- package/es/config-provider/src/ConfigProvider.d.ts +6 -0
- package/es/data-table/src/DataTable.js +7 -13
- package/es/data-table/src/MainTable.js +2 -3
- package/es/data-table/src/TableParts/Body.d.ts +15 -4
- package/es/data-table/src/TableParts/Body.js +80 -28
- package/es/data-table/src/TableParts/Header.js +1 -1
- package/es/data-table/src/interface.d.ts +4 -1
- package/es/data-table/src/styles/index.cssr.js +4 -3
- package/es/data-table/src/use-check.js +6 -2
- package/es/data-table/src/use-scroll.d.ts +2 -0
- package/es/data-table/src/use-scroll.js +34 -4
- package/es/data-table/src/use-table-data.js +3 -1
- package/es/data-table/styles/_common.js +1 -1
- package/es/date-picker/src/DatePicker.d.ts +25 -1
- package/es/date-picker/src/DatePicker.js +16 -7
- package/es/date-picker/src/config.d.ts +1 -1
- package/es/date-picker/src/interface.d.ts +2 -1
- package/es/date-picker/src/panel/date.d.ts +9 -1
- package/es/date-picker/src/panel/date.js +2 -2
- package/es/date-picker/src/panel/daterange.d.ts +7 -0
- package/es/date-picker/src/panel/daterange.js +2 -2
- package/es/date-picker/src/panel/datetime.d.ts +9 -7
- package/es/date-picker/src/panel/datetime.js +2 -2
- package/es/date-picker/src/panel/datetimerange.d.ts +7 -0
- package/es/date-picker/src/panel/datetimerange.js +2 -2
- package/es/date-picker/src/panel/month.d.ts +13 -11
- package/es/date-picker/src/panel/month.js +23 -12
- package/es/date-picker/src/panel/use-calendar.d.ts +11 -34
- package/es/date-picker/src/panel/use-calendar.js +35 -18
- package/es/date-picker/src/panel/use-dual-calendar.d.ts +7 -31
- package/es/date-picker/src/panel/use-dual-calendar.js +23 -8
- package/es/date-picker/src/panel/use-panel-common.d.ts +7 -27
- package/es/date-picker/src/panel/use-panel-common.js +2 -2
- package/es/date-picker/src/utils.d.ts +19 -3
- package/es/date-picker/src/utils.js +40 -5
- package/es/date-picker/styles/_common.d.ts +2 -0
- package/es/date-picker/styles/_common.js +3 -1
- package/es/date-picker/styles/light.d.ts +4 -0
- package/es/image/src/Image.js +8 -12
- package/es/locales/common/deDE.js +2 -0
- package/es/locales/common/enUS.d.ts +2 -0
- package/es/locales/common/enUS.js +2 -0
- package/es/locales/common/frFR.js +3 -0
- package/es/locales/common/idID.js +2 -0
- package/es/locales/common/jaJP.js +2 -0
- package/es/locales/common/nbNO.js +2 -0
- package/es/locales/common/ruRU.js +2 -0
- package/es/locales/common/ukUA.js +2 -0
- package/es/locales/common/zhCN.js +2 -0
- package/es/locales/common/zhTW.d.ts +3 -0
- package/es/locales/common/zhTW.js +100 -0
- package/es/locales/date/zhTW.d.ts +3 -0
- package/es/locales/date/zhTW.js +6 -0
- package/es/locales/index.d.ts +2 -0
- package/es/locales/index.js +2 -0
- package/es/page-header/src/PageHeader.js +3 -3
- package/es/page-header/src/styles/index.cssr.js +2 -4
- package/es/popover/src/Popover.js +4 -1
- package/es/popover/src/PopoverBody.js +3 -3
- package/es/popselect/src/Popselect.d.ts +2 -11
- package/es/popselect/src/Popselect.js +2 -2
- package/es/popselect/src/PopselectPanel.d.ts +3 -11
- package/es/popselect/src/PopselectPanel.js +17 -11
- package/es/radio/src/Radio.js +3 -3
- package/es/radio/src/RadioButton.js +4 -5
- package/es/radio/src/styles/radio-group.cssr.js +8 -4
- package/es/radio/src/styles/radio.cssr.js +8 -4
- package/es/radio/src/use-radio.d.ts +0 -3
- package/es/radio/src/use-radio.js +1 -26
- package/es/tabs/src/styles/index.cssr.js +1 -0
- package/es/tag/src/styles/index.cssr.js +1 -1
- package/es/tree-select/src/TreeSelect.d.ts +38 -1
- package/es/tree-select/src/TreeSelect.js +25 -10
- package/es/tree-select/src/styles/index.cssr.js +11 -2
- package/es/tree-select/styles/light.d.ts +6 -0
- package/es/tree-select/styles/light.js +5 -2
- package/es/version.d.ts +1 -1
- package/es/version.js +1 -1
- package/lib/_internal/close/src/styles/index.cssr.js +6 -5
- package/lib/_internal/scrollbar/src/ScrollBar.d.ts +15 -0
- package/lib/_internal/scrollbar/src/ScrollBar.js +13 -7
- package/lib/_internal/selection/src/Selection.js +11 -9
- package/lib/_internal/selection/src/styles/index.cssr.js +6 -2
- package/lib/alert/src/Alert.d.ts +20 -20
- package/lib/alert/src/Alert.js +22 -22
- package/lib/alert/src/styles/index.cssr.js +45 -45
- package/lib/anchor/src/AnchorAdapter.js +12 -12
- package/lib/anchor/src/styles/index.cssr.js +41 -41
- package/lib/avatar/src/Avatar.d.ts +5 -3
- package/lib/avatar/src/Avatar.js +7 -5
- package/lib/avatar/src/styles/index.cssr.js +3 -5
- package/lib/button/src/Button.d.ts +33 -33
- package/lib/button/src/Button.js +103 -102
- package/lib/button/src/styles/button.cssr.js +83 -80
- package/lib/button/styles/light.js +1 -1
- package/lib/calendar/src/Calendar.d.ts +2 -0
- package/lib/cascader/src/Cascader.d.ts +135 -0
- package/lib/cascader/src/Cascader.js +2 -4
- package/lib/cascader/src/CascaderMenu.d.ts +345 -0
- package/lib/cascader/src/CascaderMenu.js +6 -5
- package/lib/cascader/src/CascaderOption.d.ts +18 -0
- package/lib/cascader/src/CascaderSelectMenu.d.ts +18 -0
- package/lib/cascader/src/CascaderSubmenu.d.ts +18 -0
- package/lib/cascader/styles/dark.js +3 -1
- package/lib/cascader/styles/light.d.ts +13 -0
- package/lib/cascader/styles/light.js +3 -1
- package/lib/config-provider/src/ConfigProvider.d.ts +6 -0
- package/lib/data-table/src/DataTable.js +6 -12
- package/lib/data-table/src/MainTable.js +1 -2
- package/lib/data-table/src/TableParts/Body.d.ts +15 -4
- package/lib/data-table/src/TableParts/Body.js +78 -26
- package/lib/data-table/src/TableParts/Header.js +1 -1
- package/lib/data-table/src/interface.d.ts +4 -1
- package/lib/data-table/src/styles/index.cssr.js +4 -3
- package/lib/data-table/src/use-check.js +6 -2
- package/lib/data-table/src/use-scroll.d.ts +2 -0
- package/lib/data-table/src/use-scroll.js +34 -4
- package/lib/data-table/src/use-table-data.js +3 -1
- package/lib/data-table/styles/_common.js +1 -1
- package/lib/date-picker/src/DatePicker.d.ts +25 -1
- package/lib/date-picker/src/DatePicker.js +16 -7
- package/lib/date-picker/src/config.d.ts +1 -1
- package/lib/date-picker/src/interface.d.ts +2 -1
- package/lib/date-picker/src/panel/date.d.ts +9 -1
- package/lib/date-picker/src/panel/date.js +1 -1
- package/lib/date-picker/src/panel/daterange.d.ts +7 -0
- package/lib/date-picker/src/panel/daterange.js +1 -1
- package/lib/date-picker/src/panel/datetime.d.ts +9 -7
- package/lib/date-picker/src/panel/datetime.js +1 -1
- package/lib/date-picker/src/panel/datetimerange.d.ts +7 -0
- package/lib/date-picker/src/panel/datetimerange.js +2 -2
- package/lib/date-picker/src/panel/month.d.ts +13 -11
- package/lib/date-picker/src/panel/month.js +23 -12
- package/lib/date-picker/src/panel/use-calendar.d.ts +11 -34
- package/lib/date-picker/src/panel/use-calendar.js +34 -16
- package/lib/date-picker/src/panel/use-dual-calendar.d.ts +7 -31
- package/lib/date-picker/src/panel/use-dual-calendar.js +22 -6
- package/lib/date-picker/src/panel/use-panel-common.d.ts +7 -27
- package/lib/date-picker/src/panel/use-panel-common.js +3 -2
- package/lib/date-picker/src/utils.d.ts +19 -3
- package/lib/date-picker/src/utils.js +41 -4
- package/lib/date-picker/styles/_common.d.ts +2 -0
- package/lib/date-picker/styles/_common.js +3 -1
- package/lib/date-picker/styles/light.d.ts +4 -0
- package/lib/image/src/Image.js +7 -11
- package/lib/locales/common/deDE.js +2 -0
- package/lib/locales/common/enUS.d.ts +2 -0
- package/lib/locales/common/enUS.js +2 -0
- package/lib/locales/common/frFR.js +3 -0
- package/lib/locales/common/idID.js +2 -0
- package/lib/locales/common/jaJP.js +2 -0
- package/lib/locales/common/nbNO.js +2 -0
- package/lib/locales/common/ruRU.js +2 -0
- package/lib/locales/common/ukUA.js +2 -0
- package/lib/locales/common/zhCN.js +2 -0
- package/lib/locales/common/zhTW.d.ts +3 -0
- package/lib/locales/common/zhTW.js +102 -0
- package/lib/locales/date/zhTW.d.ts +3 -0
- package/lib/locales/date/zhTW.js +11 -0
- package/lib/locales/index.d.ts +2 -0
- package/lib/locales/index.js +5 -1
- package/lib/page-header/src/PageHeader.js +3 -3
- package/lib/page-header/src/styles/index.cssr.js +2 -4
- package/lib/popover/src/Popover.js +4 -1
- package/lib/popover/src/PopoverBody.js +3 -3
- package/lib/popselect/src/Popselect.d.ts +2 -11
- package/lib/popselect/src/Popselect.js +2 -2
- package/lib/popselect/src/PopselectPanel.d.ts +3 -11
- package/lib/popselect/src/PopselectPanel.js +16 -10
- package/lib/radio/src/Radio.js +3 -3
- package/lib/radio/src/RadioButton.js +4 -5
- package/lib/radio/src/styles/radio-group.cssr.js +8 -4
- package/lib/radio/src/styles/radio.cssr.js +8 -4
- package/lib/radio/src/use-radio.d.ts +0 -3
- package/lib/radio/src/use-radio.js +1 -26
- package/lib/tabs/src/styles/index.cssr.js +1 -0
- package/lib/tag/src/styles/index.cssr.js +1 -1
- package/lib/tree-select/src/TreeSelect.d.ts +38 -1
- package/lib/tree-select/src/TreeSelect.js +24 -9
- package/lib/tree-select/src/styles/index.cssr.js +11 -2
- package/lib/tree-select/styles/light.d.ts +6 -0
- package/lib/tree-select/styles/light.js +5 -2
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +4 -3
- package/web-types.json +25 -7
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { PropType } from 'vue';
|
|
2
|
-
import { RowKey, TmNode } from '../interface';
|
|
1
|
+
import { PropType, CSSProperties } from 'vue';
|
|
2
|
+
import { RowKey, ColumnKey, TmNode } from '../interface';
|
|
3
3
|
import type { ColItem } from '../use-group-header';
|
|
4
4
|
declare const _default: import("vue").DefineComponent<{
|
|
5
5
|
onResize: PropType<(e: ResizeObserverEntry) => void>;
|
|
6
6
|
showHeader: BooleanConstructor;
|
|
7
7
|
flexHeight: BooleanConstructor;
|
|
8
|
+
bodyStyle: PropType<CSSProperties>;
|
|
8
9
|
}, {
|
|
9
10
|
getScrollContainer: () => HTMLElement | null;
|
|
11
|
+
dataTableSlots: Readonly<{
|
|
12
|
+
[name: string]: import("vue").Slot | undefined;
|
|
13
|
+
}>;
|
|
10
14
|
componentId: string;
|
|
11
15
|
scrollbarInstRef: import("vue").Ref<{
|
|
12
16
|
scrollTo: import("../../../_internal/scrollbar/src/ScrollBar").ScrollTo;
|
|
@@ -20,6 +24,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
20
24
|
itemsElRef: HTMLElement | null;
|
|
21
25
|
scrollTo: import("vueuc/lib/virtual-list/src/VirtualList").ScrollTo;
|
|
22
26
|
} | null>;
|
|
27
|
+
emptyElRef: import("vue").Ref<HTMLElement | null>;
|
|
23
28
|
summary: import("vue").Ref<import("../interface").CreateSummary<import("../interface").InternalRowData> | undefined>;
|
|
24
29
|
mergedClsPrefix: import("vue").Ref<string>;
|
|
25
30
|
mergedTheme: import("vue").Ref<{
|
|
@@ -976,17 +981,21 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
976
981
|
}>;
|
|
977
982
|
scrollX: import("vue").Ref<string | number | undefined>;
|
|
978
983
|
cols: import("vue").Ref<ColItem[]>;
|
|
984
|
+
loading: import("vue").Ref<boolean>;
|
|
985
|
+
bodyShowHeaderOnly: import("vue").ComputedRef<boolean>;
|
|
986
|
+
shouldDisplaySomeTablePart: import("vue").ComputedRef<boolean>;
|
|
987
|
+
empty: import("vue").ComputedRef<boolean>;
|
|
979
988
|
paginatedData: import("vue").ComputedRef<{
|
|
980
989
|
tmNode: TmNode;
|
|
981
990
|
key: import("treemate").Key;
|
|
982
991
|
striped: boolean;
|
|
983
992
|
}[]>;
|
|
984
993
|
rawPaginatedData: import("vue").Ref<import("../interface").InternalRowData[]>;
|
|
985
|
-
fixedColumnLeftMap: import("vue").Ref<Record<
|
|
994
|
+
fixedColumnLeftMap: import("vue").Ref<Record<ColumnKey, {
|
|
986
995
|
start: number;
|
|
987
996
|
end: number;
|
|
988
997
|
} | undefined>>;
|
|
989
|
-
fixedColumnRightMap: import("vue").Ref<Record<
|
|
998
|
+
fixedColumnRightMap: import("vue").Ref<Record<ColumnKey, {
|
|
990
999
|
start: number;
|
|
991
1000
|
end: number;
|
|
992
1001
|
} | undefined>>;
|
|
@@ -1019,11 +1028,13 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
1019
1028
|
onResize?: unknown;
|
|
1020
1029
|
showHeader?: unknown;
|
|
1021
1030
|
flexHeight?: unknown;
|
|
1031
|
+
bodyStyle?: unknown;
|
|
1022
1032
|
} & {
|
|
1023
1033
|
flexHeight: boolean;
|
|
1024
1034
|
showHeader: boolean;
|
|
1025
1035
|
} & {
|
|
1026
1036
|
onResize?: ((e: ResizeObserverEntry) => void) | undefined;
|
|
1037
|
+
bodyStyle?: CSSProperties | undefined;
|
|
1027
1038
|
}>, {
|
|
1028
1039
|
flexHeight: boolean;
|
|
1029
1040
|
showHeader: boolean;
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
-
import { h, ref, defineComponent, inject, watchEffect, onUnmounted, computed } from 'vue';
|
|
2
|
+
import { h, ref, defineComponent, inject, watchEffect, onUnmounted, computed, renderSlot, Fragment } from 'vue';
|
|
3
3
|
import { pxfy, repeat } from 'seemly';
|
|
4
|
-
import { VirtualList } from 'vueuc';
|
|
4
|
+
import { VirtualList, VResizeObserver } from 'vueuc';
|
|
5
5
|
import { c } from '../../../_utils/cssr';
|
|
6
6
|
import { NScrollbar } from '../../../_internal';
|
|
7
7
|
import { formatLength } from '../../../_utils';
|
|
8
|
+
import { NEmpty } from '../../../empty';
|
|
8
9
|
import { dataTableInjectionKey } from '../interface';
|
|
9
10
|
import { createRowClassName, getColKey, isColumnSorting } from '../utils';
|
|
10
11
|
import Cell from './Cell';
|
|
11
12
|
import ExpandTrigger from './ExpandTrigger';
|
|
12
13
|
import RenderSafeCheckbox from './BodyCheckbox';
|
|
13
14
|
import TableHeader from './Header';
|
|
15
|
+
import { useMemo } from 'vooks';
|
|
14
16
|
function flatten(rowInfos, expandedRowKeys) {
|
|
15
17
|
const fRows = [];
|
|
16
18
|
function traverse(rs) {
|
|
@@ -70,14 +72,24 @@ export default defineComponent({
|
|
|
70
72
|
props: {
|
|
71
73
|
onResize: Function,
|
|
72
74
|
showHeader: Boolean,
|
|
73
|
-
flexHeight: Boolean
|
|
75
|
+
flexHeight: Boolean,
|
|
76
|
+
bodyStyle: Object
|
|
74
77
|
},
|
|
75
78
|
setup(props) {
|
|
76
|
-
const { mergedExpandedRowKeysRef, mergedClsPrefixRef, mergedThemeRef, scrollXRef, colsRef, paginatedDataRef, rawPaginatedDataRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, rowClassNameRef, leftActiveFixedColKeyRef, rightActiveFixedColKeyRef, renderExpandRef, hoverKeyRef, summaryRef, mergedSortStateRef, virtualScrollRef, componentId, scrollPartRef, mergedTableLayoutRef, hasChildrenRef, firstContentfulColIndexRef, indentRef, rowPropsRef, maxHeightRef, stripedRef, setHeaderScrollLeft, doUpdateExpandedRowKeys, handleTableBodyScroll, doCheck, doUncheck
|
|
79
|
+
const { slots: dataTableSlots, mergedExpandedRowKeysRef, mergedClsPrefixRef, mergedThemeRef, scrollXRef, colsRef, paginatedDataRef, rawPaginatedDataRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, rowClassNameRef, leftActiveFixedColKeyRef, leftActiveFixedChildrenColKeysRef, rightActiveFixedColKeyRef, rightActiveFixedChildrenColKeysRef, renderExpandRef, hoverKeyRef, summaryRef, mergedSortStateRef, virtualScrollRef, componentId, scrollPartRef, mergedTableLayoutRef, hasChildrenRef, firstContentfulColIndexRef, indentRef, rowPropsRef, maxHeightRef, stripedRef, loadingRef, setHeaderScrollLeft, doUpdateExpandedRowKeys, handleTableBodyScroll, doCheck, doUncheck
|
|
77
80
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
78
81
|
} = inject(dataTableInjectionKey);
|
|
79
82
|
const scrollbarInstRef = ref(null);
|
|
80
83
|
const virtualListRef = ref(null);
|
|
84
|
+
const emptyElRef = ref(null);
|
|
85
|
+
const emptyRef = useMemo(() => paginatedDataRef.value.length === 0);
|
|
86
|
+
// If header is not inside & empty is displayed, no table part would be
|
|
87
|
+
// shown. So to collect a body width, we need to put a ref on empty element
|
|
88
|
+
const shouldDisplaySomeTablePartRef = useMemo(() => props.showHeader || !emptyRef.value);
|
|
89
|
+
// If no body is shown, we shouldn't show scrollbar
|
|
90
|
+
const bodyShowHeaderOnlyRef = useMemo(() => {
|
|
91
|
+
return props.showHeader || emptyRef.value;
|
|
92
|
+
});
|
|
81
93
|
let lastSelectedKey = '';
|
|
82
94
|
const mergedExpandedRowKeySetRef = computed(() => {
|
|
83
95
|
return new Set(mergedExpandedRowKeysRef.value);
|
|
@@ -114,6 +126,15 @@ export default defineComponent({
|
|
|
114
126
|
lastSelectedKey = tmNode.key;
|
|
115
127
|
}
|
|
116
128
|
function getScrollContainer() {
|
|
129
|
+
if (!shouldDisplaySomeTablePartRef.value) {
|
|
130
|
+
const { value: emptyEl } = emptyElRef;
|
|
131
|
+
if (emptyEl) {
|
|
132
|
+
return emptyEl;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
117
138
|
if (virtualScrollRef.value) {
|
|
118
139
|
return virtualListContainer();
|
|
119
140
|
}
|
|
@@ -165,36 +186,47 @@ export default defineComponent({
|
|
|
165
186
|
};
|
|
166
187
|
// manually control shadow style to avoid rerender
|
|
167
188
|
const style = c([
|
|
168
|
-
({ props: cProps }) =>
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
189
|
+
({ props: cProps }) => {
|
|
190
|
+
const createActiveLeftFixedStyle = (leftActiveFixedColKey) => {
|
|
191
|
+
if (leftActiveFixedColKey === null)
|
|
192
|
+
return null;
|
|
193
|
+
return c(`[data-n-id="${cProps.componentId}"] [data-col-key="${leftActiveFixedColKey}"]::after`, { boxShadow: 'var(--box-shadow-after)' });
|
|
194
|
+
};
|
|
195
|
+
const createActiveRightFixedStyle = (rightActiveFixedColKey) => {
|
|
196
|
+
if (rightActiveFixedColKey === null)
|
|
197
|
+
return null;
|
|
198
|
+
return c(`[data-n-id="${cProps.componentId}"] [data-col-key="${rightActiveFixedColKey}"]::before`, { boxShadow: 'var(--box-shadow-before)' });
|
|
199
|
+
};
|
|
200
|
+
return c([
|
|
201
|
+
createActiveLeftFixedStyle(cProps.leftActiveFixedColKey),
|
|
202
|
+
createActiveRightFixedStyle(cProps.rightActiveFixedColKey),
|
|
203
|
+
cProps.leftActiveFixedChildrenColKeys.map((leftActiveFixedColKey) => createActiveLeftFixedStyle(leftActiveFixedColKey)),
|
|
204
|
+
cProps.rightActiveFixedChildrenColKeys.map((rightActiveFixedColKey) => createActiveRightFixedStyle(rightActiveFixedColKey))
|
|
205
|
+
]);
|
|
206
|
+
}
|
|
180
207
|
]);
|
|
181
208
|
let fixedStyleMounted = false;
|
|
182
209
|
watchEffect(() => {
|
|
183
210
|
const { value: leftActiveFixedColKey } = leftActiveFixedColKeyRef;
|
|
211
|
+
const { value: leftActiveFixedChildrenColKeys } = leftActiveFixedChildrenColKeysRef;
|
|
184
212
|
const { value: rightActiveFixedColKey } = rightActiveFixedColKeyRef;
|
|
213
|
+
const { value: rightActiveFixedChildrenColKeys } = rightActiveFixedChildrenColKeysRef;
|
|
185
214
|
if (!fixedStyleMounted &&
|
|
186
215
|
leftActiveFixedColKey === null &&
|
|
187
216
|
rightActiveFixedColKey === null) {
|
|
188
217
|
return;
|
|
189
218
|
}
|
|
219
|
+
const cProps = {
|
|
220
|
+
leftActiveFixedColKey,
|
|
221
|
+
leftActiveFixedChildrenColKeys,
|
|
222
|
+
rightActiveFixedColKey,
|
|
223
|
+
rightActiveFixedChildrenColKeys,
|
|
224
|
+
componentId
|
|
225
|
+
};
|
|
190
226
|
style.mount({
|
|
191
227
|
id: `n-${componentId}`,
|
|
192
228
|
force: true,
|
|
193
|
-
props:
|
|
194
|
-
leftActiveFixedColKey,
|
|
195
|
-
rightActiveFixedColKey,
|
|
196
|
-
componentId
|
|
197
|
-
}
|
|
229
|
+
props: cProps
|
|
198
230
|
});
|
|
199
231
|
fixedStyleMounted = true;
|
|
200
232
|
});
|
|
@@ -203,9 +235,11 @@ export default defineComponent({
|
|
|
203
235
|
id: `n-${componentId}`
|
|
204
236
|
});
|
|
205
237
|
});
|
|
206
|
-
return Object.assign({
|
|
238
|
+
return Object.assign({ dataTableSlots,
|
|
239
|
+
componentId,
|
|
207
240
|
scrollbarInstRef,
|
|
208
|
-
virtualListRef,
|
|
241
|
+
virtualListRef,
|
|
242
|
+
emptyElRef, summary: summaryRef, mergedClsPrefix: mergedClsPrefixRef, mergedTheme: mergedThemeRef, scrollX: scrollXRef, cols: colsRef, loading: loadingRef, bodyShowHeaderOnly: bodyShowHeaderOnlyRef, shouldDisplaySomeTablePart: shouldDisplaySomeTablePartRef, empty: emptyRef, paginatedData: computed(() => {
|
|
209
243
|
const { value: striped } = stripedRef;
|
|
210
244
|
return paginatedDataRef.value.map(striped
|
|
211
245
|
? (tmNode, index) => {
|
|
@@ -247,13 +281,13 @@ export default defineComponent({
|
|
|
247
281
|
};
|
|
248
282
|
if (scrollX)
|
|
249
283
|
contentStyle.width = '100%';
|
|
250
|
-
|
|
284
|
+
const tableNode = (h(NScrollbar, { ref: "scrollbarInstRef", scrollable: scrollable || isBasicAutoLayout, showScrollbar: !this.bodyShowHeaderOnly, class: `${mergedClsPrefix}-data-table-base-table-body`, style: this.bodyStyle, theme: mergedTheme.peers.Scrollbar, themeOverrides: mergedTheme.peerOverrides.Scrollbar, contentStyle: contentStyle, container: virtualScroll ? this.virtualListContainer : undefined, content: virtualScroll ? this.virtualListContent : undefined, horizontalRailStyle: { zIndex: 3 }, verticalRailStyle: { zIndex: 3 }, xScrollable: xScrollable, onScroll: virtualScroll ? undefined : this.handleTableBodyScroll, internalOnUpdateScrollLeft: setHeaderScrollLeft, onResize: onResize }, {
|
|
251
285
|
default: () => {
|
|
252
286
|
// coordinate to pass if there are cells that cross row & col
|
|
253
287
|
const cordToPass = {};
|
|
254
288
|
// coordinate to related hover keys
|
|
255
289
|
const cordKey = {};
|
|
256
|
-
const { cols, paginatedData, mergedTheme, fixedColumnLeftMap, fixedColumnRightMap, currentPage, rowClassName, mergedSortState, mergedExpandedRowKeySet, componentId,
|
|
290
|
+
const { cols, paginatedData, mergedTheme, fixedColumnLeftMap, fixedColumnRightMap, currentPage, rowClassName, mergedSortState, mergedExpandedRowKeySet, componentId, hasChildren, firstContentfulColIndex, rowProps, handleMouseenterTable, handleMouseleaveTable, renderExpand, summary, handleCheckboxUpdateChecked, handleUpdateExpanded } = this;
|
|
257
291
|
const { length: colCount } = cols;
|
|
258
292
|
let mergedData;
|
|
259
293
|
// if there is children in data, we should expand mergedData first
|
|
@@ -338,6 +372,7 @@ export default defineComponent({
|
|
|
338
372
|
this.hoverKey = rowKey;
|
|
339
373
|
}, key: rowKey, class: [
|
|
340
374
|
`${mergedClsPrefix}-data-table-tr`,
|
|
375
|
+
isSummary && `${mergedClsPrefix}-data-table-tr--summary`,
|
|
341
376
|
striped && `${mergedClsPrefix}-data-table-tr--striped`,
|
|
342
377
|
mergedRowClassName
|
|
343
378
|
] }, props), cols.map((col, colIndex) => {
|
|
@@ -436,10 +471,10 @@ export default defineComponent({
|
|
|
436
471
|
tableLayout: this.mergedTableLayout
|
|
437
472
|
} },
|
|
438
473
|
h("colgroup", null, cols.map((col) => (h("col", { key: col.key, style: col.style })))),
|
|
439
|
-
showHeader ? h(TableHeader, { discrete: false }) : null,
|
|
440
|
-
h("tbody", { "data-n-id": componentId, class: `${mergedClsPrefix}-data-table-tbody` }, displayedData.map((rowInfo, rowIndex) => {
|
|
474
|
+
this.showHeader ? h(TableHeader, { discrete: false }) : null,
|
|
475
|
+
!this.empty ? (h("tbody", { "data-n-id": componentId, class: `${mergedClsPrefix}-data-table-tbody` }, displayedData.map((rowInfo, rowIndex) => {
|
|
441
476
|
return renderRow(rowInfo, rowIndex, false);
|
|
442
|
-
}))));
|
|
477
|
+
}))) : null));
|
|
443
478
|
}
|
|
444
479
|
else {
|
|
445
480
|
return (h(VirtualList, { ref: "virtualListRef", items: displayedData, itemSize: 28, visibleItemsTag: VirtualListItemWrapper, visibleItemsProps: {
|
|
@@ -454,5 +489,22 @@ export default defineComponent({
|
|
|
454
489
|
}
|
|
455
490
|
}
|
|
456
491
|
}));
|
|
492
|
+
if (this.empty) {
|
|
493
|
+
const createEmptyNode = () => (h("div", { class: [
|
|
494
|
+
`${mergedClsPrefix}-data-table-empty`,
|
|
495
|
+
this.loading && `${mergedClsPrefix}-data-table-empty--hide`
|
|
496
|
+
], style: this.bodyStyle, ref: "emptyElRef" }, renderSlot(this.dataTableSlots, 'empty', undefined, () => [
|
|
497
|
+
h(NEmpty, { theme: this.mergedTheme.peers.Empty, themeOverrides: this.mergedTheme.peerOverrides.Empty })
|
|
498
|
+
])));
|
|
499
|
+
if (this.shouldDisplaySomeTablePart) {
|
|
500
|
+
return (h(Fragment, null,
|
|
501
|
+
tableNode,
|
|
502
|
+
createEmptyNode()));
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
return (h(VResizeObserver, { onResize: this.onResize }, { default: createEmptyNode }));
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return tableNode;
|
|
457
509
|
}
|
|
458
510
|
});
|
|
@@ -26,7 +26,7 @@ export default defineComponent({
|
|
|
26
26
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
27
27
|
} = inject(dataTableInjectionKey);
|
|
28
28
|
function handleCheckboxUpdateChecked() {
|
|
29
|
-
if (
|
|
29
|
+
if (allRowsCheckedRef.value) {
|
|
30
30
|
doUncheckAll();
|
|
31
31
|
}
|
|
32
32
|
else {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TreeNode } from 'treemate';
|
|
2
|
-
import { CSSProperties, InjectionKey, Ref, VNodeChild, HTMLAttributes } from 'vue';
|
|
2
|
+
import { CSSProperties, InjectionKey, Ref, VNodeChild, HTMLAttributes, Slots } from 'vue';
|
|
3
3
|
import { EllipsisProps } from '../../ellipsis/src/Ellipsis';
|
|
4
4
|
import { NLocale } from '../../locales';
|
|
5
5
|
import { MergedTheme } from '../../_mixins';
|
|
@@ -100,6 +100,7 @@ export declare type DataTableSelectionOptions = Array<DataTableSelectionOption |
|
|
|
100
100
|
onSelect: () => void;
|
|
101
101
|
}>;
|
|
102
102
|
export interface DataTableInjection {
|
|
103
|
+
slots: Slots;
|
|
103
104
|
indentRef: Ref<number>;
|
|
104
105
|
hasChildrenRef: Ref<boolean>;
|
|
105
106
|
firstContentfulColIndexRef: Ref<number>;
|
|
@@ -115,7 +116,9 @@ export interface DataTableInjection {
|
|
|
115
116
|
leftFixedColumnsRef: Ref<TableColumns>;
|
|
116
117
|
rightFixedColumnsRef: Ref<TableColumns>;
|
|
117
118
|
leftActiveFixedColKeyRef: Ref<ColumnKey | null>;
|
|
119
|
+
leftActiveFixedChildrenColKeysRef: Ref<ColumnKey[]>;
|
|
118
120
|
rightActiveFixedColKeyRef: Ref<ColumnKey | null>;
|
|
121
|
+
rightActiveFixedChildrenColKeysRef: Ref<ColumnKey[]>;
|
|
119
122
|
fixedColumnLeftMapRef: Ref<Record<ColumnKey, {
|
|
120
123
|
start: number;
|
|
121
124
|
end: number;
|
|
@@ -53,11 +53,11 @@ export default c([cB('data-table', `
|
|
|
53
53
|
--merged-th-color-hover: var(--th-color-hover);
|
|
54
54
|
--merged-td-color-hover: var(--td-color-hover);
|
|
55
55
|
--merged-td-color-striped: var(--td-color-striped);
|
|
56
|
-
`, [
|
|
56
|
+
`, [cB('data-table-wrapper', `
|
|
57
57
|
flex-grow: 1;
|
|
58
58
|
display: flex;
|
|
59
59
|
flex-direction: column;
|
|
60
|
-
|
|
60
|
+
`), cM('flex-height', [c('>', [cB('data-table-wrapper', [c('>', [cB('data-table-base-table', `
|
|
61
61
|
display: flex;
|
|
62
62
|
flex-direction: column;
|
|
63
63
|
flex-grow: 1;
|
|
@@ -93,7 +93,7 @@ c('&:last-child', 'flex-grow: 1;')])])])])])])]), c('>', [cB('base-loading', `
|
|
|
93
93
|
box-sizing: border-box;
|
|
94
94
|
background-clip: padding-box;
|
|
95
95
|
transition: background-color .3s var(--bezier);
|
|
96
|
-
`, [cM('striped', 'background-color: var(--merged-td-color-striped);', [cB('data-table-td', 'background-color: var(--merged-td-color-striped);')]), c('&:hover', 'background-color: var(--merged-td-color-hover);', [cB('data-table-td', 'background-color: var(--merged-td-color-hover);')])]), cB('data-table-th', `
|
|
96
|
+
`, [cM('striped', 'background-color: var(--merged-td-color-striped);', [cB('data-table-td', 'background-color: var(--merged-td-color-striped);')]), cNotM('summary', [c('&:hover', 'background-color: var(--merged-td-color-hover);', [cB('data-table-td', 'background-color: var(--merged-td-color-hover);')])])]), cB('data-table-th', `
|
|
97
97
|
padding: var(--th-padding);
|
|
98
98
|
position: relative;
|
|
99
99
|
text-align: start;
|
|
@@ -203,6 +203,7 @@ c('&::after', {
|
|
|
203
203
|
padding: 0;
|
|
204
204
|
line-height: 0;
|
|
205
205
|
`), fixedColumnStyle]), cB('data-table-empty', `
|
|
206
|
+
box-sizing: border-box;
|
|
206
207
|
padding: var(--empty-padding);
|
|
207
208
|
flex-grow: 1;
|
|
208
209
|
flex-shrink: 0;
|
|
@@ -58,18 +58,22 @@ export function useCheck(props, data) {
|
|
|
58
58
|
uncontrolledCheckedRowKeysRef.value = keys;
|
|
59
59
|
}
|
|
60
60
|
function doCheck(rowKey) {
|
|
61
|
+
if (props.loading)
|
|
62
|
+
return;
|
|
61
63
|
doUpdateCheckedRowKeys(treeMateRef.value.check(rowKey, mergedCheckedRowKeysRef.value, {
|
|
62
64
|
cascade: props.cascade
|
|
63
65
|
}).checkedKeys);
|
|
64
66
|
}
|
|
65
67
|
function doUncheck(rowKey) {
|
|
68
|
+
if (props.loading)
|
|
69
|
+
return;
|
|
66
70
|
doUpdateCheckedRowKeys(treeMateRef.value.uncheck(rowKey, mergedCheckedRowKeysRef.value, {
|
|
67
71
|
cascade: props.cascade
|
|
68
72
|
}).checkedKeys);
|
|
69
73
|
}
|
|
70
74
|
function doCheckAll(checkWholeTable = false) {
|
|
71
75
|
const { value: column } = selectionColumnRef;
|
|
72
|
-
if (!column)
|
|
76
|
+
if (!column || props.loading)
|
|
73
77
|
return;
|
|
74
78
|
const rowKeysToCheck = [];
|
|
75
79
|
(checkWholeTable
|
|
@@ -86,7 +90,7 @@ export function useCheck(props, data) {
|
|
|
86
90
|
}
|
|
87
91
|
function doUncheckAll(checkWholeTable = false) {
|
|
88
92
|
const { value: column } = selectionColumnRef;
|
|
89
|
-
if (!column)
|
|
93
|
+
if (!column || props.loading)
|
|
90
94
|
return;
|
|
91
95
|
const rowKeysToUncheck = [];
|
|
92
96
|
(checkWholeTable
|
|
@@ -19,7 +19,9 @@ export declare function useScroll(props: DataTableSetupProps, { mainTableInstRef
|
|
|
19
19
|
leftFixedColumnsRef: ComputedRef<TableColumn<any>[]>;
|
|
20
20
|
rightFixedColumnsRef: ComputedRef<TableColumn<any>[]>;
|
|
21
21
|
leftActiveFixedColKeyRef: Ref<ColumnKey | null>;
|
|
22
|
+
leftActiveFixedChildrenColKeysRef: Ref<ColumnKey[]>;
|
|
22
23
|
rightActiveFixedColKeyRef: Ref<ColumnKey | null>;
|
|
24
|
+
rightActiveFixedChildrenColKeysRef: Ref<ColumnKey[]>;
|
|
23
25
|
syncScrollState: () => void;
|
|
24
26
|
handleTableBodyScroll: () => void;
|
|
25
27
|
handleTableHeaderScroll: () => void;
|
|
@@ -6,7 +6,9 @@ import { getColWidth, getColKey } from './utils';
|
|
|
6
6
|
export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyWidthRef, scrollPartRef }) {
|
|
7
7
|
let scrollLeft = 0;
|
|
8
8
|
const leftActiveFixedColKeyRef = ref(null);
|
|
9
|
+
const leftActiveFixedChildrenColKeysRef = ref([]);
|
|
9
10
|
const rightActiveFixedColKeyRef = ref(null);
|
|
11
|
+
const rightActiveFixedChildrenColKeysRef = ref([]);
|
|
10
12
|
const styleScrollXRef = computed(() => {
|
|
11
13
|
return formatLength(props.scrollX);
|
|
12
14
|
});
|
|
@@ -40,7 +42,8 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
40
42
|
const columns = {};
|
|
41
43
|
let right = 0;
|
|
42
44
|
function traverse(cols) {
|
|
43
|
-
cols.
|
|
45
|
+
for (let i = cols.length - 1; i >= 0; --i) {
|
|
46
|
+
const col = cols[i];
|
|
44
47
|
const positionInfo = { start: right, end: 0 };
|
|
45
48
|
columns[getColKey(col)] = positionInfo;
|
|
46
49
|
if ('children' in col) {
|
|
@@ -51,9 +54,9 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
51
54
|
right += getColWidth(col) || 0;
|
|
52
55
|
positionInfo.end = right;
|
|
53
56
|
}
|
|
54
|
-
}
|
|
57
|
+
}
|
|
55
58
|
}
|
|
56
|
-
traverse(rightFixedColumnsRef.value
|
|
59
|
+
traverse(rightFixedColumnsRef.value);
|
|
57
60
|
return columns;
|
|
58
61
|
});
|
|
59
62
|
function deriveActiveLeftFixedColumn() {
|
|
@@ -75,6 +78,18 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
75
78
|
}
|
|
76
79
|
leftActiveFixedColKeyRef.value = leftActiveFixedColKey;
|
|
77
80
|
}
|
|
81
|
+
function deriveActiveLeftFixedChildrenColumns() {
|
|
82
|
+
leftActiveFixedChildrenColKeysRef.value = [];
|
|
83
|
+
let activeLeftFixedColumn = props.columns.find((col) => getColKey(col) === leftActiveFixedColKeyRef.value);
|
|
84
|
+
while (activeLeftFixedColumn && 'children' in activeLeftFixedColumn) {
|
|
85
|
+
const length = activeLeftFixedColumn.children.length;
|
|
86
|
+
if (length === 0)
|
|
87
|
+
break;
|
|
88
|
+
const nextActiveLeftFixedColumn = activeLeftFixedColumn.children[length - 1];
|
|
89
|
+
leftActiveFixedChildrenColKeysRef.value.push(getColKey(nextActiveLeftFixedColumn));
|
|
90
|
+
activeLeftFixedColumn = nextActiveLeftFixedColumn;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
78
93
|
function deriveActiveRightFixedColumn() {
|
|
79
94
|
var _a, _b;
|
|
80
95
|
// target is header element
|
|
@@ -86,7 +101,7 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
86
101
|
let rightWidth = 0;
|
|
87
102
|
let rightActiveFixedColKey = null;
|
|
88
103
|
const { value: fixedColumnRightMap } = fixedColumnRightMapRef;
|
|
89
|
-
for (let i =
|
|
104
|
+
for (let i = rightFixedColumns.length - 1; i >= 0; --i) {
|
|
90
105
|
const key = getColKey(rightFixedColumns[i]);
|
|
91
106
|
if (Math.round(scrollLeft +
|
|
92
107
|
(((_a = fixedColumnRightMap[key]) === null || _a === void 0 ? void 0 : _a.start) || 0) +
|
|
@@ -101,6 +116,17 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
101
116
|
}
|
|
102
117
|
rightActiveFixedColKeyRef.value = rightActiveFixedColKey;
|
|
103
118
|
}
|
|
119
|
+
function deriveActiveRightFixedChildrenColumns() {
|
|
120
|
+
rightActiveFixedChildrenColKeysRef.value = [];
|
|
121
|
+
let activeRightFixedColumn = props.columns.find((col) => getColKey(col) === rightActiveFixedColKeyRef.value);
|
|
122
|
+
while (activeRightFixedColumn &&
|
|
123
|
+
'children' in activeRightFixedColumn &&
|
|
124
|
+
activeRightFixedColumn.children.length) {
|
|
125
|
+
const nextActiveRightFixedColumn = activeRightFixedColumn.children[0];
|
|
126
|
+
rightActiveFixedChildrenColKeysRef.value.push(getColKey(nextActiveRightFixedColumn));
|
|
127
|
+
activeRightFixedColumn = nextActiveRightFixedColumn;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
104
130
|
function getScrollElements() {
|
|
105
131
|
const header = mainTableInstRef.value
|
|
106
132
|
? mainTableInstRef.value.getHeaderElement()
|
|
@@ -157,7 +183,9 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
157
183
|
scrollLeft = body.scrollLeft;
|
|
158
184
|
}
|
|
159
185
|
deriveActiveLeftFixedColumn();
|
|
186
|
+
deriveActiveLeftFixedChildrenColumns();
|
|
160
187
|
deriveActiveRightFixedColumn();
|
|
188
|
+
deriveActiveRightFixedChildrenColumns();
|
|
161
189
|
}
|
|
162
190
|
function setHeaderScrollLeft(left) {
|
|
163
191
|
const { header } = getScrollElements();
|
|
@@ -176,7 +204,9 @@ export function useScroll(props, { mainTableInstRef, mergedCurrentPageRef, bodyW
|
|
|
176
204
|
leftFixedColumnsRef,
|
|
177
205
|
rightFixedColumnsRef,
|
|
178
206
|
leftActiveFixedColKeyRef,
|
|
207
|
+
leftActiveFixedChildrenColKeysRef,
|
|
179
208
|
rightActiveFixedColKeyRef,
|
|
209
|
+
rightActiveFixedChildrenColKeysRef,
|
|
180
210
|
syncScrollState,
|
|
181
211
|
handleTableBodyScroll,
|
|
182
212
|
handleTableHeaderScroll,
|
|
@@ -186,11 +186,13 @@ export function useTableData(props, { dataRelatedColsRef }) {
|
|
|
186
186
|
function mergedOnUpdatePageSize(pageSize) {
|
|
187
187
|
const { pagination } = props;
|
|
188
188
|
if (pagination) {
|
|
189
|
-
const { onPageSizeChange, 'onUpdate:pageSize': onUpdatePageSize } = pagination;
|
|
189
|
+
const { onPageSizeChange, 'onUpdate:pageSize': _onUpdatePageSize, onUpdatePageSize } = pagination;
|
|
190
190
|
if (onPageSizeChange)
|
|
191
191
|
call(onPageSizeChange, pageSize);
|
|
192
192
|
if (onUpdatePageSize)
|
|
193
193
|
call(onUpdatePageSize, pageSize);
|
|
194
|
+
if (_onUpdatePageSize)
|
|
195
|
+
call(_onUpdatePageSize, pageSize);
|
|
194
196
|
doUpdatePageSize(pageSize);
|
|
195
197
|
}
|
|
196
198
|
}
|