@uzum-tech/ui 1.13.1 → 1.14.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/dist/index.js +69981 -69817
- package/dist/index.prod.js +3 -3
- package/es/_mixins/use-css-vars-class.js +5 -3
- package/es/_mixins/use-rtl.js +5 -2
- package/es/_mixins/use-style.js +4 -2
- package/es/_mixins/use-theme.js +4 -2
- package/es/config-provider/src/ConfigProvider.d.ts +3 -0
- package/es/config-provider/src/ConfigProvider.js +4 -1
- package/es/config-provider/src/internal-interface.d.ts +1 -0
- package/es/data-table/src/DataTable.d.ts +2 -0
- package/es/data-table/src/DataTable.js +71 -4
- package/es/data-table/src/TableParts/Body.js +6 -2
- package/es/data-table/src/TableParts/Header.js +17 -5
- package/es/data-table/src/interface.d.ts +13 -0
- package/es/data-table/src/interface.js +1 -1
- package/es/data-table/src/use-resizable.d.ts +1 -0
- package/es/data-table/src/use-resizable.js +2 -1
- package/es/data-table/src/use-sorter.d.ts +1 -0
- package/es/data-table/src/use-sorter.js +2 -1
- package/es/data-table/src/use-table-data.d.ts +3 -2
- package/es/data-table/src/use-table-data.js +5 -1
- package/es/data-table/src/use-table-storage.d.ts +4 -0
- package/es/data-table/src/use-table-storage.js +43 -0
- package/es/data-table/src/utils.js +39 -5
- package/es/icon-bar/index.d.ts +4 -4
- package/es/icon-bar/index.js +3 -2
- package/es/icon-bar/src/IconBar.d.ts +19 -69
- package/es/icon-bar/src/IconBar.js +6 -11
- package/es/icon-bar/src/IconBarItem.d.ts +81 -65
- package/es/icon-bar/src/IconBarItem.js +6 -5
- package/es/icon-bar/src/interface.d.ts +112 -0
- package/es/icon-bar/src/interface.js +17 -0
- package/es/locales/date/enUS.js +1 -1
- package/es/version.d.ts +1 -1
- package/es/version.js +1 -1
- package/lib/_mixins/use-css-vars-class.js +5 -3
- package/lib/_mixins/use-rtl.js +4 -1
- package/lib/_mixins/use-style.js +4 -2
- package/lib/_mixins/use-theme.js +4 -2
- package/lib/config-provider/src/ConfigProvider.d.ts +3 -0
- package/lib/config-provider/src/ConfigProvider.js +4 -1
- package/lib/config-provider/src/internal-interface.d.ts +1 -0
- package/lib/data-table/src/DataTable.d.ts +2 -0
- package/lib/data-table/src/DataTable.js +70 -3
- package/lib/data-table/src/TableParts/Body.js +6 -2
- package/lib/data-table/src/TableParts/Header.js +16 -4
- package/lib/data-table/src/interface.d.ts +13 -0
- package/lib/data-table/src/interface.js +1 -1
- package/lib/data-table/src/use-resizable.d.ts +1 -0
- package/lib/data-table/src/use-resizable.js +2 -1
- package/lib/data-table/src/use-sorter.d.ts +1 -0
- package/lib/data-table/src/use-sorter.js +2 -1
- package/lib/data-table/src/use-table-data.d.ts +3 -2
- package/lib/data-table/src/use-table-data.js +5 -1
- package/lib/data-table/src/use-table-storage.d.ts +4 -0
- package/lib/data-table/src/use-table-storage.js +48 -0
- package/lib/data-table/src/utils.js +39 -5
- package/lib/icon-bar/index.d.ts +4 -4
- package/lib/icon-bar/index.js +4 -3
- package/lib/icon-bar/src/IconBar.d.ts +19 -69
- package/lib/icon-bar/src/IconBar.js +6 -12
- package/lib/icon-bar/src/IconBarItem.d.ts +81 -65
- package/lib/icon-bar/src/IconBarItem.js +6 -6
- package/lib/icon-bar/src/interface.d.ts +112 -0
- package/lib/icon-bar/src/interface.js +20 -0
- package/lib/locales/date/enUS.js +2 -2
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/web-types.json +23 -1
|
@@ -5,10 +5,11 @@ import { configProviderInjectionKey } from '../config-provider/src/context';
|
|
|
5
5
|
import { throwError } from '../_utils';
|
|
6
6
|
import { c } from '../_utils/cssr';
|
|
7
7
|
export function useThemeClass(componentName, hashRef, cssVarsRef, props) {
|
|
8
|
-
var _a;
|
|
9
8
|
if (!cssVarsRef)
|
|
10
9
|
throwError('useThemeClass', 'cssVarsRef is not passed');
|
|
11
|
-
const
|
|
10
|
+
const UConfigProvider = inject(configProviderInjectionKey, null);
|
|
11
|
+
const mergedThemeHashRef = UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedThemeHashRef;
|
|
12
|
+
const styleMountTarget = UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget;
|
|
12
13
|
const themeClassRef = ref('');
|
|
13
14
|
const ssrAdapter = useSsrAdapter();
|
|
14
15
|
let renderCallback;
|
|
@@ -37,7 +38,8 @@ export function useThemeClass(componentName, hashRef, cssVarsRef, props) {
|
|
|
37
38
|
}
|
|
38
39
|
c(`.${finalThemeHash}`, style).mount({
|
|
39
40
|
id: finalThemeHash,
|
|
40
|
-
ssr: ssrAdapter
|
|
41
|
+
ssr: ssrAdapter,
|
|
42
|
+
parent: styleMountTarget
|
|
41
43
|
});
|
|
42
44
|
renderCallback = undefined;
|
|
43
45
|
};
|
package/es/_mixins/use-rtl.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { onBeforeMount, watchEffect, computed } from 'vue';
|
|
1
|
+
import { onBeforeMount, watchEffect, computed, inject } from 'vue';
|
|
2
2
|
import { exists } from 'css-render';
|
|
3
3
|
import { useSsrAdapter } from '@css-render/vue3-ssr';
|
|
4
|
+
import { configProviderInjectionKey } from '../config-provider/src/context';
|
|
4
5
|
import { cssrAnchorMetaName } from './common';
|
|
5
6
|
export function useRtl(mountId, rtlStateRef, clsPrefixRef) {
|
|
6
7
|
if (!rtlStateRef)
|
|
@@ -17,6 +18,7 @@ export function useRtl(mountId, rtlStateRef, clsPrefixRef) {
|
|
|
17
18
|
}
|
|
18
19
|
return componentRtlState;
|
|
19
20
|
});
|
|
21
|
+
const UConfigProvider = inject(configProviderInjectionKey, null);
|
|
20
22
|
const mountStyle = () => {
|
|
21
23
|
watchEffect(() => {
|
|
22
24
|
const { value: clsPrefix } = clsPrefixRef;
|
|
@@ -36,7 +38,8 @@ export function useRtl(mountId, rtlStateRef, clsPrefixRef) {
|
|
|
36
38
|
props: {
|
|
37
39
|
bPrefix: clsPrefix ? `.${clsPrefix}-` : undefined
|
|
38
40
|
},
|
|
39
|
-
ssr: ssrAdapter
|
|
41
|
+
ssr: ssrAdapter,
|
|
42
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
40
43
|
});
|
|
41
44
|
});
|
|
42
45
|
};
|
package/es/_mixins/use-style.js
CHANGED
|
@@ -21,14 +21,16 @@ export default function useStyle(mountId, style, clsPrefixRef) {
|
|
|
21
21
|
props: {
|
|
22
22
|
bPrefix: clsPrefix ? `.${clsPrefix}-` : undefined
|
|
23
23
|
},
|
|
24
|
-
ssr: ssrAdapter
|
|
24
|
+
ssr: ssrAdapter,
|
|
25
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
25
26
|
});
|
|
26
27
|
if (!(UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.preflightStyleDisabled)) {
|
|
27
28
|
globalStyle.mount({
|
|
28
29
|
id: 'u-global',
|
|
29
30
|
head: true,
|
|
30
31
|
anchorMetaName: cssrAnchorMetaName,
|
|
31
|
-
ssr: ssrAdapter
|
|
32
|
+
ssr: ssrAdapter,
|
|
33
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
32
34
|
});
|
|
33
35
|
}
|
|
34
36
|
};
|
package/es/_mixins/use-theme.js
CHANGED
|
@@ -21,14 +21,16 @@ function useTheme(resolveId, mountId, style, defaultTheme, props, clsPrefixRef)
|
|
|
21
21
|
bPrefix: clsPrefix ? `.${clsPrefix}-` : undefined
|
|
22
22
|
},
|
|
23
23
|
anchorMetaName: cssrAnchorMetaName,
|
|
24
|
-
ssr: ssrAdapter
|
|
24
|
+
ssr: ssrAdapter,
|
|
25
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
25
26
|
});
|
|
26
27
|
if (!(UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.preflightStyleDisabled)) {
|
|
27
28
|
globalStyle.mount({
|
|
28
29
|
id: 'u-global',
|
|
29
30
|
head: true,
|
|
30
31
|
anchorMetaName: cssrAnchorMetaName,
|
|
31
|
-
ssr: ssrAdapter
|
|
32
|
+
ssr: ssrAdapter,
|
|
33
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
32
34
|
});
|
|
33
35
|
}
|
|
34
36
|
};
|
|
@@ -36,6 +36,7 @@ export declare const configProviderProps: {
|
|
|
36
36
|
readonly default: "desktop-first";
|
|
37
37
|
};
|
|
38
38
|
readonly preflightStyleDisabled: BooleanConstructor;
|
|
39
|
+
readonly styleMountTarget: PropType<ParentNode | null>;
|
|
39
40
|
readonly inlineThemeDisabled: {
|
|
40
41
|
readonly type: BooleanConstructor;
|
|
41
42
|
readonly default: undefined;
|
|
@@ -79,6 +80,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
79
80
|
readonly default: "desktop-first";
|
|
80
81
|
};
|
|
81
82
|
readonly preflightStyleDisabled: BooleanConstructor;
|
|
83
|
+
readonly styleMountTarget: PropType<ParentNode | null>;
|
|
82
84
|
readonly inlineThemeDisabled: {
|
|
83
85
|
readonly type: BooleanConstructor;
|
|
84
86
|
readonly default: undefined;
|
|
@@ -126,6 +128,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
126
128
|
readonly default: "desktop-first";
|
|
127
129
|
};
|
|
128
130
|
readonly preflightStyleDisabled: BooleanConstructor;
|
|
131
|
+
readonly styleMountTarget: PropType<ParentNode | null>;
|
|
129
132
|
readonly inlineThemeDisabled: {
|
|
130
133
|
readonly type: BooleanConstructor;
|
|
131
134
|
readonly default: undefined;
|
|
@@ -34,6 +34,7 @@ export const configProviderProps = {
|
|
|
34
34
|
default: 'desktop-first'
|
|
35
35
|
},
|
|
36
36
|
preflightStyleDisabled: Boolean,
|
|
37
|
+
styleMountTarget: Object,
|
|
37
38
|
inlineThemeDisabled: {
|
|
38
39
|
type: Boolean,
|
|
39
40
|
default: undefined
|
|
@@ -243,6 +244,7 @@ export default defineComponent({
|
|
|
243
244
|
});
|
|
244
245
|
const inlineThemeDisabled = props.inlineThemeDisabled || (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.inlineThemeDisabled);
|
|
245
246
|
const preflightStyleDisabled = props.preflightStyleDisabled || (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.preflightStyleDisabled);
|
|
247
|
+
const styleMountTarget = props.styleMountTarget || (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget);
|
|
246
248
|
const mergedThemeHashRef = computed(() => {
|
|
247
249
|
const { value: theme } = mergedThemeRef;
|
|
248
250
|
const { value: mergedThemeOverrides } = mergedThemeOverridesRef;
|
|
@@ -304,7 +306,8 @@ export default defineComponent({
|
|
|
304
306
|
mergedThemeRef,
|
|
305
307
|
mergedThemeOverridesRef,
|
|
306
308
|
inlineThemeDisabled: inlineThemeDisabled || false,
|
|
307
|
-
preflightStyleDisabled: preflightStyleDisabled || false
|
|
309
|
+
preflightStyleDisabled: preflightStyleDisabled || false,
|
|
310
|
+
styleMountTarget
|
|
308
311
|
});
|
|
309
312
|
return {
|
|
310
313
|
mergedClsPrefix: mergedClsPrefixRef,
|
|
@@ -85,6 +85,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
85
85
|
readonly default: "current";
|
|
86
86
|
};
|
|
87
87
|
readonly scrollbarProps: import("vue").PropType<import("../..").ScrollbarProps>;
|
|
88
|
+
readonly localStorageKey: StringConstructor;
|
|
88
89
|
readonly renderCell: import("vue").PropType<(value: any, rowData: object, column: TableBaseColumn) => import("vue").VNodeChild>;
|
|
89
90
|
readonly defaultEmptyValue: import("vue").PropType<string | (() => import("vue").VNodeChild) | undefined>;
|
|
90
91
|
readonly renderExpandIcon: import("vue").PropType<import("./interface").RenderExpandIcon>;
|
|
@@ -4498,6 +4499,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
4498
4499
|
readonly default: "current";
|
|
4499
4500
|
};
|
|
4500
4501
|
readonly scrollbarProps: import("vue").PropType<import("../..").ScrollbarProps>;
|
|
4502
|
+
readonly localStorageKey: StringConstructor;
|
|
4501
4503
|
readonly renderCell: import("vue").PropType<(value: any, rowData: object, column: TableBaseColumn) => import("vue").VNodeChild>;
|
|
4502
4504
|
readonly defaultEmptyValue: import("vue").PropType<string | (() => import("vue").VNodeChild) | undefined>;
|
|
4503
4505
|
readonly renderExpandIcon: import("vue").PropType<import("./interface").RenderExpandIcon>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h, computed, defineComponent, ref, provide, toRef, Transition, watchEffect } from 'vue';
|
|
1
|
+
import { h, computed, defineComponent, ref, provide, toRef, onMounted, watch, Transition, watchEffect } from 'vue';
|
|
2
2
|
import { createId } from 'seemly';
|
|
3
3
|
import { useConfig, useLocale, useTheme, useThemeClass } from '../../_mixins';
|
|
4
4
|
import { UBaseLoading } from '../../_internal';
|
|
@@ -13,6 +13,7 @@ import { useResizable } from './use-resizable';
|
|
|
13
13
|
import { dataTableInjectionKey, dataTableProps } from './interface';
|
|
14
14
|
import { useGroupHeader } from './use-group-header';
|
|
15
15
|
import { useExpand } from './use-expand';
|
|
16
|
+
import { loadTableState, saveTableState, restoreSortStateFromStored } from './use-table-storage';
|
|
16
17
|
import style from './styles/index.cssr';
|
|
17
18
|
export default defineComponent({
|
|
18
19
|
name: 'DataTable',
|
|
@@ -53,10 +54,10 @@ export default defineComponent({
|
|
|
53
54
|
const themeRef = useTheme('DataTable', '-data-table', style, dataTableLight, props, mergedClsPrefixRef);
|
|
54
55
|
const bodyWidthRef = ref(null);
|
|
55
56
|
const mainTableInstRef = ref(null);
|
|
56
|
-
const { getResizableWidth, clearResizableWidth, doUpdateResizableWidth } = useResizable();
|
|
57
|
+
const { getResizableWidth, clearResizableWidth, doUpdateResizableWidth, resizableWidthsRef } = useResizable();
|
|
57
58
|
const { rowsRef, colsRef, dataRelatedColsRef, hasEllipsisRef } = useGroupHeader(props, getResizableWidth);
|
|
58
|
-
const { treeMateRef, mergedCurrentPageRef, paginatedDataRef, rawPaginatedDataRef, selectionColumnRef, hoverKeyRef, mergedPaginationRef, mergedFilterStateRef, mergedSortStateRef, childTriggerColIndexRef, doUpdatePage, doUpdateFilters, onUnstableColumnResize, deriveNextSorter, filter, filters, clearFilter, clearFilters, clearSorter, page, sort } = useTableData(props, { dataRelatedColsRef });
|
|
59
|
-
const { doCheckAll, doUncheckAll, doCheck, doUncheck, headerCheckboxDisabledRef, someRowsCheckedRef, allRowsCheckedRef, mergedCheckedRowKeySetRef, mergedInderminateRowKeySetRef } = useCheck(props, {
|
|
59
|
+
const { treeMateRef, mergedCurrentPageRef, paginatedDataRef, rawPaginatedDataRef, selectionColumnRef, hoverKeyRef, mergedPaginationRef, mergedFilterStateRef, mergedSortStateRef, childTriggerColIndexRef, doUpdatePage, doUpdatePageSize, doUpdateFilters, onUnstableColumnResize, deriveNextSorter, restoreSortState, filter, filters, clearFilter, clearFilters, clearSorter, page, sort } = useTableData(props, { dataRelatedColsRef });
|
|
60
|
+
const { doCheckAll, doUncheckAll, doCheck, doUncheck, doUpdateCheckedRowKeys, mergedCheckedRowKeysRef, headerCheckboxDisabledRef, someRowsCheckedRef, allRowsCheckedRef, mergedCheckedRowKeySetRef, mergedInderminateRowKeySetRef } = useCheck(props, {
|
|
60
61
|
selectionColumnRef,
|
|
61
62
|
treeMateRef,
|
|
62
63
|
paginatedDataRef
|
|
@@ -67,6 +68,72 @@ export default defineComponent({
|
|
|
67
68
|
mainTableInstRef,
|
|
68
69
|
mergedCurrentPageRef
|
|
69
70
|
});
|
|
71
|
+
onMounted(() => {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
const key = props.localStorageKey;
|
|
74
|
+
if (!key)
|
|
75
|
+
return;
|
|
76
|
+
const stored = loadTableState(key);
|
|
77
|
+
if (!stored)
|
|
78
|
+
return;
|
|
79
|
+
if (stored.columnWidths && Object.keys(stored.columnWidths).length > 0) {
|
|
80
|
+
resizableWidthsRef.value = Object.assign(Object.assign({}, resizableWidthsRef.value), stored.columnWidths);
|
|
81
|
+
}
|
|
82
|
+
if (props.pagination && stored.page != null) {
|
|
83
|
+
doUpdatePage(stored.page);
|
|
84
|
+
}
|
|
85
|
+
if (props.pagination && stored.pageSize != null) {
|
|
86
|
+
doUpdatePageSize(stored.pageSize);
|
|
87
|
+
}
|
|
88
|
+
if (stored.filters) {
|
|
89
|
+
filter(stored.filters);
|
|
90
|
+
}
|
|
91
|
+
const sortToRestore = restoreSortStateFromStored(stored.sortState, dataRelatedColsRef.value);
|
|
92
|
+
if (sortToRestore === null || sortToRestore === void 0 ? void 0 : sortToRestore.length) {
|
|
93
|
+
restoreSortState(sortToRestore);
|
|
94
|
+
}
|
|
95
|
+
if ((_a = stored.checkedRowKeys) === null || _a === void 0 ? void 0 : _a.length) {
|
|
96
|
+
doUpdateCheckedRowKeys(stored.checkedRowKeys, undefined, 'check');
|
|
97
|
+
}
|
|
98
|
+
if ((_b = stored.expandedRowKeys) === null || _b === void 0 ? void 0 : _b.length) {
|
|
99
|
+
doUpdateExpandedRowKeys(stored.expandedRowKeys);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
watch(() => {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
return props.localStorageKey
|
|
105
|
+
? {
|
|
106
|
+
key: props.localStorageKey,
|
|
107
|
+
columnWidths: resizableWidthsRef.value,
|
|
108
|
+
page: (_a = mergedPaginationRef.value) === null || _a === void 0 ? void 0 : _a.page,
|
|
109
|
+
pageSize: (_b = mergedPaginationRef.value) === null || _b === void 0 ? void 0 : _b.pageSize,
|
|
110
|
+
filters: mergedFilterStateRef.value,
|
|
111
|
+
sortState: mergedSortStateRef.value.map((s) => ({
|
|
112
|
+
columnKey: s.columnKey,
|
|
113
|
+
order: s.order
|
|
114
|
+
})),
|
|
115
|
+
checkedRowKeys: mergedCheckedRowKeysRef.value,
|
|
116
|
+
expandedRowKeys: mergedExpandedRowKeysRef.value
|
|
117
|
+
}
|
|
118
|
+
: null;
|
|
119
|
+
}, (state) => {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
if (!(state === null || state === void 0 ? void 0 : state.key))
|
|
122
|
+
return;
|
|
123
|
+
saveTableState(state.key, {
|
|
124
|
+
columnWidths: state.columnWidths,
|
|
125
|
+
page: state.page,
|
|
126
|
+
pageSize: state.pageSize,
|
|
127
|
+
filters: state.filters,
|
|
128
|
+
sortState: state.sortState.length ? state.sortState : undefined,
|
|
129
|
+
checkedRowKeys: ((_a = state.checkedRowKeys) === null || _a === void 0 ? void 0 : _a.length)
|
|
130
|
+
? state.checkedRowKeys
|
|
131
|
+
: undefined,
|
|
132
|
+
expandedRowKeys: ((_b = state.expandedRowKeys) === null || _b === void 0 ? void 0 : _b.length)
|
|
133
|
+
? state.expandedRowKeys
|
|
134
|
+
: undefined
|
|
135
|
+
});
|
|
136
|
+
}, { deep: true });
|
|
70
137
|
const { localeRef } = useLocale('DataTable');
|
|
71
138
|
const mergedTableLayoutRef = computed(() => {
|
|
72
139
|
// Layout
|
|
@@ -15,6 +15,7 @@ import { pxfy, repeat } from 'seemly';
|
|
|
15
15
|
import { VirtualList, VResizeObserver } from 'vueuc';
|
|
16
16
|
import { useMemo } from 'vooks';
|
|
17
17
|
import { cssrAnchorMetaName } from '../../../_mixins/common';
|
|
18
|
+
import { configProviderInjectionKey } from '../../../config-provider/src/context';
|
|
18
19
|
import { c } from '../../../_utils/cssr';
|
|
19
20
|
import { UScrollbar } from '../../../_internal';
|
|
20
21
|
import { formatLength, resolveSlot, warn } from '../../../_utils';
|
|
@@ -97,6 +98,7 @@ export default defineComponent({
|
|
|
97
98
|
const { slots: dataTableSlots, bodyWidthRef, mergedExpandedRowKeysRef, mergedClsPrefixRef, mergedThemeRef, scrollXRef, colsRef, paginatedDataRef, rawPaginatedDataRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, rowClassNameRef, leftActiveFixedColKeyRef, leftActiveFixedChildrenColKeysRef, rightActiveFixedColKeyRef, rightActiveFixedChildrenColKeysRef, renderExpandRef, hoverKeyRef, summaryRef, mergedSortStateRef, virtualScrollRef, componentId, mergedTableLayoutRef, childTriggerColIndexRef, indentRef, rowPropsRef, maxHeightRef, stripedRef, loadingRef, loadingSkeletonRef, onLoadRef, loadingKeySetRef, expandableRef, stickyExpandedRowsRef, renderExpandIconRef, summaryPlacementRef, treeMateRef, scrollbarPropsRef, setHeaderScrollLeft, doUpdateExpandedRowKeys, handleTableBodyScroll, doCheck, doUncheck, renderCell, defaultEmptyValueRef, emptyPropsRef
|
|
98
99
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
99
100
|
} = inject(dataTableInjectionKey);
|
|
101
|
+
const UConfigProvider = inject(configProviderInjectionKey, null);
|
|
100
102
|
const scrollbarInstRef = ref(null);
|
|
101
103
|
const virtualListRef = ref(null);
|
|
102
104
|
const emptyElRef = ref(null);
|
|
@@ -291,13 +293,15 @@ export default defineComponent({
|
|
|
291
293
|
id: `u-${componentId}`,
|
|
292
294
|
force: true,
|
|
293
295
|
props: cProps,
|
|
294
|
-
anchorMetaName: cssrAnchorMetaName
|
|
296
|
+
anchorMetaName: cssrAnchorMetaName,
|
|
297
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
295
298
|
});
|
|
296
299
|
fixedStyleMounted = true;
|
|
297
300
|
});
|
|
298
301
|
onUnmounted(() => {
|
|
299
302
|
style.unmount({
|
|
300
|
-
id: `u-${componentId}
|
|
303
|
+
id: `u-${componentId}`,
|
|
304
|
+
parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
|
|
301
305
|
});
|
|
302
306
|
});
|
|
303
307
|
return Object.assign({ bodyWidth: bodyWidthRef, summaryPlacement: summaryPlacementRef, dataTableSlots,
|
|
@@ -6,7 +6,7 @@ import { UEllipsis } from '../../../ellipsis';
|
|
|
6
6
|
import SortButton from '../HeaderButton/SortButton';
|
|
7
7
|
import FilterButton from '../HeaderButton/FilterButton';
|
|
8
8
|
import ResizeButton from '../HeaderButton/ResizeButton';
|
|
9
|
-
import { isColumnSortable, isColumnFilterable, createNextSorter, getColKey, isColumnSorting, isColumnResizable, clampValueFollowCSSRules } from '../utils';
|
|
9
|
+
import { isColumnSortable, isColumnFilterable, createNextSorter, getColKey, getNumberColWidth, isColumnSorting, isColumnResizable, clampValueFollowCSSRules } from '../utils';
|
|
10
10
|
import { dataTableInjectionKey } from '../interface';
|
|
11
11
|
import SelectionMenu from './SelectionMenu';
|
|
12
12
|
function renderTitle(column) {
|
|
@@ -23,7 +23,7 @@ export default defineComponent({
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
setup() {
|
|
26
|
-
const { mergedClsPrefixRef, scrollXRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, allRowsCheckedRef, someRowsCheckedRef, rowsRef, colsRef, mergedThemeRef, checkOptionsRef, mergedSortStateRef, componentId, mergedTableLayoutRef, headerCheckboxDisabledRef, sizeRef, onUnstableColumnResize, doUpdateResizableWidth, handleTableHeaderScroll, deriveNextSorter, doUncheckAll, doCheckAll
|
|
26
|
+
const { mergedClsPrefixRef, scrollXRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, allRowsCheckedRef, someRowsCheckedRef, rowsRef, colsRef, mergedThemeRef, checkOptionsRef, mergedSortStateRef, componentId, mergedTableLayoutRef, headerCheckboxDisabledRef, sizeRef, onUnstableColumnResize, getResizableWidth, doUpdateResizableWidth, handleTableHeaderScroll, deriveNextSorter, doUncheckAll, doCheckAll
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
28
28
|
} = inject(dataTableInjectionKey);
|
|
29
29
|
const cellElsRef = ref({});
|
|
@@ -51,13 +51,25 @@ export default defineComponent({
|
|
|
51
51
|
deriveNextSorter(nextSorter);
|
|
52
52
|
}
|
|
53
53
|
const resizeStartWidthMap = new Map();
|
|
54
|
+
function getColumnStartWidth(column) {
|
|
55
|
+
const actual = getCellActualWidth(column.key);
|
|
56
|
+
if (actual !== undefined && actual > 0)
|
|
57
|
+
return actual;
|
|
58
|
+
const resized = getResizableWidth(column.key);
|
|
59
|
+
if (resized !== undefined && resized > 0)
|
|
60
|
+
return resized;
|
|
61
|
+
return getNumberColWidth(column);
|
|
62
|
+
}
|
|
54
63
|
function handleColumnResizeStart(column) {
|
|
55
|
-
resizeStartWidthMap.set(column.key,
|
|
64
|
+
resizeStartWidthMap.set(column.key, getColumnStartWidth(column));
|
|
56
65
|
}
|
|
57
66
|
function handleColumnResize(column, displacementX) {
|
|
58
|
-
|
|
67
|
+
let startWidth = resizeStartWidthMap.get(column.key);
|
|
59
68
|
if (startWidth === undefined) {
|
|
60
|
-
|
|
69
|
+
startWidth = getColumnStartWidth(column);
|
|
70
|
+
if (startWidth === undefined)
|
|
71
|
+
return;
|
|
72
|
+
resizeStartWidthMap.set(column.key, startWidth);
|
|
61
73
|
}
|
|
62
74
|
const widthAfterResize = startWidth + displacementX;
|
|
63
75
|
const limitWidth = clampValueFollowCSSRules(widthAfterResize, column.minWidth, column.maxWidth);
|
|
@@ -96,6 +96,7 @@ export declare const dataTableProps: {
|
|
|
96
96
|
readonly default: "current";
|
|
97
97
|
};
|
|
98
98
|
readonly scrollbarProps: PropType<ScrollbarProps>;
|
|
99
|
+
readonly localStorageKey: StringConstructor;
|
|
99
100
|
readonly renderCell: PropType<(value: any, rowData: object, column: TableBaseColumn) => VNodeChild>;
|
|
100
101
|
readonly defaultEmptyValue: PropType<string | (() => VNodeChild) | undefined>;
|
|
101
102
|
readonly renderExpandIcon: PropType<RenderExpandIcon>;
|
|
@@ -3185,6 +3186,18 @@ export interface MainTableInjection {
|
|
|
3185
3186
|
leftActiveFixedColKey: ColumnKey | null;
|
|
3186
3187
|
rightActiveFixedColKey: ColumnKey | null;
|
|
3187
3188
|
}
|
|
3189
|
+
export interface DataTableStorageState {
|
|
3190
|
+
columnWidths?: Record<string, number>;
|
|
3191
|
+
page?: number;
|
|
3192
|
+
pageSize?: number;
|
|
3193
|
+
filters?: FilterState;
|
|
3194
|
+
sortState?: Array<{
|
|
3195
|
+
columnKey: ColumnKey;
|
|
3196
|
+
order: SortState['order'];
|
|
3197
|
+
}>;
|
|
3198
|
+
checkedRowKeys?: RowKey[];
|
|
3199
|
+
expandedRowKeys?: RowKey[];
|
|
3200
|
+
}
|
|
3188
3201
|
export type RenderFilter = (props: {
|
|
3189
3202
|
active: boolean;
|
|
3190
3203
|
show: boolean;
|
|
@@ -50,7 +50,7 @@ export const dataTableProps = Object.assign(Object.assign({}, useTheme.props), {
|
|
|
50
50
|
}, paginationBehaviorOnFilter: {
|
|
51
51
|
type: String,
|
|
52
52
|
default: 'current'
|
|
53
|
-
}, scrollbarProps: Object, renderCell: Function, defaultEmptyValue: [String, Function], renderExpandIcon: Function, spinProps: { type: Object, default: {} }, emptyProps: Object, onLoad: Function, 'onUpdate:page': [Function, Array], onUpdatePage: [Function, Array], 'onUpdate:pageSize': [Function, Array], onUpdatePageSize: [Function, Array], 'onUpdate:sorter': [Function, Array], onUpdateSorter: [Function, Array], 'onUpdate:filters': [Function, Array], onUpdateFilters: [Function, Array], 'onUpdate:checkedRowKeys': [Function, Array], onUpdateCheckedRowKeys: [Function, Array], 'onUpdate:expandedRowKeys': [Function, Array], onUpdateExpandedRowKeys: [Function, Array], onScroll: Function,
|
|
53
|
+
}, scrollbarProps: Object, localStorageKey: String, renderCell: Function, defaultEmptyValue: [String, Function], renderExpandIcon: Function, spinProps: { type: Object, default: {} }, emptyProps: Object, onLoad: Function, 'onUpdate:page': [Function, Array], onUpdatePage: [Function, Array], 'onUpdate:pageSize': [Function, Array], onUpdatePageSize: [Function, Array], 'onUpdate:sorter': [Function, Array], onUpdateSorter: [Function, Array], 'onUpdate:filters': [Function, Array], onUpdateFilters: [Function, Array], 'onUpdate:checkedRowKeys': [Function, Array], onUpdateCheckedRowKeys: [Function, Array], 'onUpdate:expandedRowKeys': [Function, Array], onUpdateExpandedRowKeys: [Function, Array], onScroll: Function,
|
|
54
54
|
// deprecated
|
|
55
55
|
onPageChange: [Function, Array], onPageSizeChange: [Function, Array], onSorterChange: [Function, Array], onFiltersChange: [Function, Array], onCheckedRowKeysChange: [Function, Array] });
|
|
56
56
|
export const dataTableInjectionKey = createInjectionKey('u-data-table');
|
|
@@ -3,4 +3,5 @@ export declare function useResizable(): {
|
|
|
3
3
|
getResizableWidth: (key: ColumnKey) => number | undefined;
|
|
4
4
|
doUpdateResizableWidth: (column: TableColumn, width: number) => void;
|
|
5
5
|
clearResizableWidth: () => void;
|
|
6
|
+
resizableWidthsRef: import("vue").Ref<Record<ColumnKey, number>>;
|
|
6
7
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ComputedRef } from 'vue';
|
|
2
2
|
import type { PaginationProps } from '../../pagination/src/Pagination';
|
|
3
|
-
import type { ColumnKey, FilterState, TableBaseColumn, TableSelectionColumn, InternalRowData, TmNode, TableExpandColumn, RowKey, DataTableSetupProps } from './interface';
|
|
3
|
+
import type { ColumnKey, FilterState, SortState, TableBaseColumn, TableSelectionColumn, InternalRowData, TmNode, TableExpandColumn, RowKey, DataTableSetupProps } from './interface';
|
|
4
4
|
export declare function useTableData(props: DataTableSetupProps, { dataRelatedColsRef }: {
|
|
5
5
|
dataRelatedColsRef: ComputedRef<Array<TableSelectionColumn | TableBaseColumn | TableExpandColumn>>;
|
|
6
6
|
}): {
|
|
@@ -22,10 +22,11 @@ export declare function useTableData(props: DataTableSetupProps, { dataRelatedCo
|
|
|
22
22
|
selectionColumnRef: ComputedRef<TableSelectionColumn | null>;
|
|
23
23
|
childTriggerColIndexRef: ComputedRef<number>;
|
|
24
24
|
doUpdateFilters: (filters: FilterState, sourceColumn: TableBaseColumn) => void;
|
|
25
|
-
deriveNextSorter: (sortState:
|
|
25
|
+
deriveNextSorter: (sortState: SortState | null) => void;
|
|
26
26
|
doUpdatePageSize: (pageSize: number) => void;
|
|
27
27
|
doUpdatePage: (page: number) => void;
|
|
28
28
|
onUnstableColumnResize: (resizedWidth: number, limitedWidth: number, column: TableBaseColumn, getColumnWidth: (key: ColumnKey) => number | undefined) => void;
|
|
29
|
+
restoreSortState: (sortState: SortState | SortState[] | null) => void;
|
|
29
30
|
filter: (filters: FilterState | null) => void;
|
|
30
31
|
filters: (filters: FilterState | null) => void;
|
|
31
32
|
clearFilter: () => void;
|
|
@@ -128,7 +128,7 @@ export function useTableData(props, { dataRelatedColsRef }) {
|
|
|
128
128
|
})
|
|
129
129
|
: [];
|
|
130
130
|
});
|
|
131
|
-
const { sortedDataRef, deriveNextSorter, mergedSortStateRef, sort, clearSorter } = useSorter(props, {
|
|
131
|
+
const { sortedDataRef, deriveNextSorter, mergedSortStateRef, sort, clearSorter, doUpdateSorter } = useSorter(props, {
|
|
132
132
|
dataRelatedColsRef,
|
|
133
133
|
filteredDataRef
|
|
134
134
|
});
|
|
@@ -299,6 +299,9 @@ export function useTableData(props, { dataRelatedColsRef }) {
|
|
|
299
299
|
warn('data-table', '`filters` is not an object');
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
|
+
function restoreSortState(sortState) {
|
|
303
|
+
doUpdateSorter(sortState);
|
|
304
|
+
}
|
|
302
305
|
return {
|
|
303
306
|
treeMateRef,
|
|
304
307
|
mergedCurrentPageRef: boundedMergedCurrentPageRef,
|
|
@@ -315,6 +318,7 @@ export function useTableData(props, { dataRelatedColsRef }) {
|
|
|
315
318
|
doUpdatePageSize,
|
|
316
319
|
doUpdatePage,
|
|
317
320
|
onUnstableColumnResize,
|
|
321
|
+
restoreSortState,
|
|
318
322
|
// exported methods
|
|
319
323
|
filter,
|
|
320
324
|
filters,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DataTableStorageState, SortState, TableBaseColumn, TableExpandColumn, TableSelectionColumn } from './interface';
|
|
2
|
+
export declare function loadTableState(localStorageKey: string): DataTableStorageState | null;
|
|
3
|
+
export declare function saveTableState(localStorageKey: string, state: DataTableStorageState): void;
|
|
4
|
+
export declare function restoreSortStateFromStored(stored: DataTableStorageState['sortState'], dataRelatedCols: Array<TableSelectionColumn | TableBaseColumn | TableExpandColumn>): SortState[] | null;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const STORAGE_KEY_PREFIX = 'u-data-table:';
|
|
2
|
+
function getStorageKey(key) {
|
|
3
|
+
return `${STORAGE_KEY_PREFIX}${key}`;
|
|
4
|
+
}
|
|
5
|
+
export function loadTableState(localStorageKey) {
|
|
6
|
+
try {
|
|
7
|
+
const raw = localStorage.getItem(getStorageKey(localStorageKey));
|
|
8
|
+
if (!raw)
|
|
9
|
+
return null;
|
|
10
|
+
return JSON.parse(raw);
|
|
11
|
+
}
|
|
12
|
+
catch (_a) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function saveTableState(localStorageKey, state) {
|
|
17
|
+
try {
|
|
18
|
+
localStorage.setItem(getStorageKey(localStorageKey), JSON.stringify(state));
|
|
19
|
+
}
|
|
20
|
+
catch (_a) {
|
|
21
|
+
console.warn(`Could not set localStorage value for ${localStorageKey}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function restoreSortStateFromStored(stored, dataRelatedCols) {
|
|
25
|
+
if (!(stored === null || stored === void 0 ? void 0 : stored.length))
|
|
26
|
+
return null;
|
|
27
|
+
const result = [];
|
|
28
|
+
for (const item of stored) {
|
|
29
|
+
const column = dataRelatedCols.find((col) => col.type !== 'selection' &&
|
|
30
|
+
col.type !== 'expand' &&
|
|
31
|
+
'key' in col &&
|
|
32
|
+
col.key === item.columnKey &&
|
|
33
|
+
col.sorter !== undefined);
|
|
34
|
+
if (column === null || column === void 0 ? void 0 : column.sorter) {
|
|
35
|
+
result.push({
|
|
36
|
+
columnKey: item.columnKey,
|
|
37
|
+
order: item.order,
|
|
38
|
+
sorter: column.sorter
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return result.length ? result : null;
|
|
43
|
+
}
|
|
@@ -79,15 +79,49 @@ export function clampValueFollowCSSRules(value, min, max) {
|
|
|
79
79
|
return value;
|
|
80
80
|
}
|
|
81
81
|
export function createCustomWidthStyle(column, resizedWidth) {
|
|
82
|
+
var _a;
|
|
82
83
|
if (resizedWidth !== undefined) {
|
|
84
|
+
const numWidth = depx(resizedWidth);
|
|
85
|
+
const minMaxColumn = column && 'minWidth' in column && 'maxWidth' in column
|
|
86
|
+
? column
|
|
87
|
+
: null;
|
|
88
|
+
const clampedNum = minMaxColumn
|
|
89
|
+
? clampValueFollowCSSRules(numWidth, minMaxColumn.minWidth, minMaxColumn.maxWidth)
|
|
90
|
+
: numWidth;
|
|
91
|
+
const clamped = formatLength(clampedNum);
|
|
83
92
|
return {
|
|
84
|
-
width:
|
|
85
|
-
minWidth:
|
|
86
|
-
maxWidth:
|
|
93
|
+
width: clamped,
|
|
94
|
+
minWidth: clamped,
|
|
95
|
+
maxWidth: clamped
|
|
87
96
|
};
|
|
88
97
|
}
|
|
89
|
-
const
|
|
90
|
-
const
|
|
98
|
+
const explicitNum = (_a = getNumberColWidth(column)) !== null && _a !== void 0 ? _a : undefined;
|
|
99
|
+
const minWidth = column && 'minWidth' in column
|
|
100
|
+
? column.minWidth
|
|
101
|
+
: undefined;
|
|
102
|
+
const maxWidth = column && 'maxWidth' in column
|
|
103
|
+
? column.maxWidth
|
|
104
|
+
: undefined;
|
|
105
|
+
let widthNum = explicitNum;
|
|
106
|
+
if (widthNum === undefined &&
|
|
107
|
+
(minWidth !== undefined || maxWidth !== undefined)) {
|
|
108
|
+
widthNum = clampValueFollowCSSRules(maxWidth !== undefined
|
|
109
|
+
? typeof maxWidth === 'number'
|
|
110
|
+
? maxWidth
|
|
111
|
+
: parseFloat(maxWidth)
|
|
112
|
+
: minWidth !== undefined
|
|
113
|
+
? typeof minWidth === 'number'
|
|
114
|
+
? minWidth
|
|
115
|
+
: parseFloat(minWidth)
|
|
116
|
+
: 0, minWidth, maxWidth);
|
|
117
|
+
}
|
|
118
|
+
else if (widthNum !== undefined &&
|
|
119
|
+
(minWidth !== undefined || maxWidth !== undefined)) {
|
|
120
|
+
widthNum = clampValueFollowCSSRules(widthNum, minWidth, maxWidth);
|
|
121
|
+
}
|
|
122
|
+
const width = widthNum !== undefined
|
|
123
|
+
? formatLength(widthNum)
|
|
124
|
+
: getStringColWidth(column);
|
|
91
125
|
return {
|
|
92
126
|
width,
|
|
93
127
|
minWidth: formatLength(minWidth) || width,
|
package/es/icon-bar/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as UIconBar
|
|
2
|
-
export
|
|
3
|
-
export {
|
|
4
|
-
export type { IconBarItemProps } from './src/
|
|
1
|
+
export { default as UIconBar } from './src/IconBar';
|
|
2
|
+
export { default as UIconBarItem } from './src/IconBarItem';
|
|
3
|
+
export { iconBarProps, iconBarItemProps } from './src/interface';
|
|
4
|
+
export type { IconBarProps, IconBarItemProps } from './src/interface';
|
package/es/icon-bar/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { default as UIconBar
|
|
2
|
-
export { default as UIconBarItem
|
|
1
|
+
export { default as UIconBar } from './src/IconBar';
|
|
2
|
+
export { default as UIconBarItem } from './src/IconBarItem';
|
|
3
|
+
export { iconBarProps, iconBarItemProps } from './src/interface';
|