@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.
Files changed (70) hide show
  1. package/dist/index.js +69981 -69817
  2. package/dist/index.prod.js +3 -3
  3. package/es/_mixins/use-css-vars-class.js +5 -3
  4. package/es/_mixins/use-rtl.js +5 -2
  5. package/es/_mixins/use-style.js +4 -2
  6. package/es/_mixins/use-theme.js +4 -2
  7. package/es/config-provider/src/ConfigProvider.d.ts +3 -0
  8. package/es/config-provider/src/ConfigProvider.js +4 -1
  9. package/es/config-provider/src/internal-interface.d.ts +1 -0
  10. package/es/data-table/src/DataTable.d.ts +2 -0
  11. package/es/data-table/src/DataTable.js +71 -4
  12. package/es/data-table/src/TableParts/Body.js +6 -2
  13. package/es/data-table/src/TableParts/Header.js +17 -5
  14. package/es/data-table/src/interface.d.ts +13 -0
  15. package/es/data-table/src/interface.js +1 -1
  16. package/es/data-table/src/use-resizable.d.ts +1 -0
  17. package/es/data-table/src/use-resizable.js +2 -1
  18. package/es/data-table/src/use-sorter.d.ts +1 -0
  19. package/es/data-table/src/use-sorter.js +2 -1
  20. package/es/data-table/src/use-table-data.d.ts +3 -2
  21. package/es/data-table/src/use-table-data.js +5 -1
  22. package/es/data-table/src/use-table-storage.d.ts +4 -0
  23. package/es/data-table/src/use-table-storage.js +43 -0
  24. package/es/data-table/src/utils.js +39 -5
  25. package/es/icon-bar/index.d.ts +4 -4
  26. package/es/icon-bar/index.js +3 -2
  27. package/es/icon-bar/src/IconBar.d.ts +19 -69
  28. package/es/icon-bar/src/IconBar.js +6 -11
  29. package/es/icon-bar/src/IconBarItem.d.ts +81 -65
  30. package/es/icon-bar/src/IconBarItem.js +6 -5
  31. package/es/icon-bar/src/interface.d.ts +112 -0
  32. package/es/icon-bar/src/interface.js +17 -0
  33. package/es/locales/date/enUS.js +1 -1
  34. package/es/version.d.ts +1 -1
  35. package/es/version.js +1 -1
  36. package/lib/_mixins/use-css-vars-class.js +5 -3
  37. package/lib/_mixins/use-rtl.js +4 -1
  38. package/lib/_mixins/use-style.js +4 -2
  39. package/lib/_mixins/use-theme.js +4 -2
  40. package/lib/config-provider/src/ConfigProvider.d.ts +3 -0
  41. package/lib/config-provider/src/ConfigProvider.js +4 -1
  42. package/lib/config-provider/src/internal-interface.d.ts +1 -0
  43. package/lib/data-table/src/DataTable.d.ts +2 -0
  44. package/lib/data-table/src/DataTable.js +70 -3
  45. package/lib/data-table/src/TableParts/Body.js +6 -2
  46. package/lib/data-table/src/TableParts/Header.js +16 -4
  47. package/lib/data-table/src/interface.d.ts +13 -0
  48. package/lib/data-table/src/interface.js +1 -1
  49. package/lib/data-table/src/use-resizable.d.ts +1 -0
  50. package/lib/data-table/src/use-resizable.js +2 -1
  51. package/lib/data-table/src/use-sorter.d.ts +1 -0
  52. package/lib/data-table/src/use-sorter.js +2 -1
  53. package/lib/data-table/src/use-table-data.d.ts +3 -2
  54. package/lib/data-table/src/use-table-data.js +5 -1
  55. package/lib/data-table/src/use-table-storage.d.ts +4 -0
  56. package/lib/data-table/src/use-table-storage.js +48 -0
  57. package/lib/data-table/src/utils.js +39 -5
  58. package/lib/icon-bar/index.d.ts +4 -4
  59. package/lib/icon-bar/index.js +4 -3
  60. package/lib/icon-bar/src/IconBar.d.ts +19 -69
  61. package/lib/icon-bar/src/IconBar.js +6 -12
  62. package/lib/icon-bar/src/IconBarItem.d.ts +81 -65
  63. package/lib/icon-bar/src/IconBarItem.js +6 -6
  64. package/lib/icon-bar/src/interface.d.ts +112 -0
  65. package/lib/icon-bar/src/interface.js +20 -0
  66. package/lib/locales/date/enUS.js +2 -2
  67. package/lib/version.d.ts +1 -1
  68. package/lib/version.js +1 -1
  69. package/package.json +1 -1
  70. package/web-types.json +23 -1
@@ -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;
@@ -37,6 +37,7 @@ exports.configProviderProps = {
37
37
  default: 'desktop-first'
38
38
  },
39
39
  preflightStyleDisabled: Boolean,
40
+ styleMountTarget: Object,
40
41
  inlineThemeDisabled: {
41
42
  type: Boolean,
42
43
  default: undefined
@@ -246,6 +247,7 @@ exports.default = (0, vue_1.defineComponent)({
246
247
  });
247
248
  const inlineThemeDisabled = props.inlineThemeDisabled || (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.inlineThemeDisabled);
248
249
  const preflightStyleDisabled = props.preflightStyleDisabled || (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.preflightStyleDisabled);
250
+ const styleMountTarget = props.styleMountTarget || (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget);
249
251
  const mergedThemeHashRef = (0, vue_1.computed)(() => {
250
252
  const { value: theme } = mergedThemeRef;
251
253
  const { value: mergedThemeOverrides } = mergedThemeOverridesRef;
@@ -307,7 +309,8 @@ exports.default = (0, vue_1.defineComponent)({
307
309
  mergedThemeRef,
308
310
  mergedThemeOverridesRef,
309
311
  inlineThemeDisabled: inlineThemeDisabled || false,
310
- preflightStyleDisabled: preflightStyleDisabled || false
312
+ preflightStyleDisabled: preflightStyleDisabled || false,
313
+ styleMountTarget
311
314
  });
312
315
  return {
313
316
  mergedClsPrefix: mergedClsPrefixRef,
@@ -457,4 +457,5 @@ export interface ConfigProviderInjection {
457
457
  activeBreakpointThemeOverridesRef: Ref<GlobalThemeOverrides | undefined>;
458
458
  inlineThemeDisabled: boolean;
459
459
  preflightStyleDisabled: boolean;
460
+ styleMountTarget: ParentNode | undefined;
460
461
  }
@@ -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>;
@@ -18,6 +18,7 @@ const use_resizable_1 = require("./use-resizable");
18
18
  const interface_1 = require("./interface");
19
19
  const use_group_header_1 = require("./use-group-header");
20
20
  const use_expand_1 = require("./use-expand");
21
+ const use_table_storage_1 = require("./use-table-storage");
21
22
  const index_cssr_1 = __importDefault(require("./styles/index.cssr"));
22
23
  exports.default = (0, vue_1.defineComponent)({
23
24
  name: 'DataTable',
@@ -58,10 +59,10 @@ exports.default = (0, vue_1.defineComponent)({
58
59
  const themeRef = (0, _mixins_1.useTheme)('DataTable', '-data-table', index_cssr_1.default, styles_1.dataTableLight, props, mergedClsPrefixRef);
59
60
  const bodyWidthRef = (0, vue_1.ref)(null);
60
61
  const mainTableInstRef = (0, vue_1.ref)(null);
61
- const { getResizableWidth, clearResizableWidth, doUpdateResizableWidth } = (0, use_resizable_1.useResizable)();
62
+ const { getResizableWidth, clearResizableWidth, doUpdateResizableWidth, resizableWidthsRef } = (0, use_resizable_1.useResizable)();
62
63
  const { rowsRef, colsRef, dataRelatedColsRef, hasEllipsisRef } = (0, use_group_header_1.useGroupHeader)(props, getResizableWidth);
63
- const { treeMateRef, mergedCurrentPageRef, paginatedDataRef, rawPaginatedDataRef, selectionColumnRef, hoverKeyRef, mergedPaginationRef, mergedFilterStateRef, mergedSortStateRef, childTriggerColIndexRef, doUpdatePage, doUpdateFilters, onUnstableColumnResize, deriveNextSorter, filter, filters, clearFilter, clearFilters, clearSorter, page, sort } = (0, use_table_data_1.useTableData)(props, { dataRelatedColsRef });
64
- const { doCheckAll, doUncheckAll, doCheck, doUncheck, headerCheckboxDisabledRef, someRowsCheckedRef, allRowsCheckedRef, mergedCheckedRowKeySetRef, mergedInderminateRowKeySetRef } = (0, use_check_1.useCheck)(props, {
64
+ const { treeMateRef, mergedCurrentPageRef, paginatedDataRef, rawPaginatedDataRef, selectionColumnRef, hoverKeyRef, mergedPaginationRef, mergedFilterStateRef, mergedSortStateRef, childTriggerColIndexRef, doUpdatePage, doUpdatePageSize, doUpdateFilters, onUnstableColumnResize, deriveNextSorter, restoreSortState, filter, filters, clearFilter, clearFilters, clearSorter, page, sort } = (0, use_table_data_1.useTableData)(props, { dataRelatedColsRef });
65
+ const { doCheckAll, doUncheckAll, doCheck, doUncheck, doUpdateCheckedRowKeys, mergedCheckedRowKeysRef, headerCheckboxDisabledRef, someRowsCheckedRef, allRowsCheckedRef, mergedCheckedRowKeySetRef, mergedInderminateRowKeySetRef } = (0, use_check_1.useCheck)(props, {
65
66
  selectionColumnRef,
66
67
  treeMateRef,
67
68
  paginatedDataRef
@@ -72,6 +73,72 @@ exports.default = (0, vue_1.defineComponent)({
72
73
  mainTableInstRef,
73
74
  mergedCurrentPageRef
74
75
  });
76
+ (0, vue_1.onMounted)(() => {
77
+ var _a, _b;
78
+ const key = props.localStorageKey;
79
+ if (!key)
80
+ return;
81
+ const stored = (0, use_table_storage_1.loadTableState)(key);
82
+ if (!stored)
83
+ return;
84
+ if (stored.columnWidths && Object.keys(stored.columnWidths).length > 0) {
85
+ resizableWidthsRef.value = Object.assign(Object.assign({}, resizableWidthsRef.value), stored.columnWidths);
86
+ }
87
+ if (props.pagination && stored.page != null) {
88
+ doUpdatePage(stored.page);
89
+ }
90
+ if (props.pagination && stored.pageSize != null) {
91
+ doUpdatePageSize(stored.pageSize);
92
+ }
93
+ if (stored.filters) {
94
+ filter(stored.filters);
95
+ }
96
+ const sortToRestore = (0, use_table_storage_1.restoreSortStateFromStored)(stored.sortState, dataRelatedColsRef.value);
97
+ if (sortToRestore === null || sortToRestore === void 0 ? void 0 : sortToRestore.length) {
98
+ restoreSortState(sortToRestore);
99
+ }
100
+ if ((_a = stored.checkedRowKeys) === null || _a === void 0 ? void 0 : _a.length) {
101
+ doUpdateCheckedRowKeys(stored.checkedRowKeys, undefined, 'check');
102
+ }
103
+ if ((_b = stored.expandedRowKeys) === null || _b === void 0 ? void 0 : _b.length) {
104
+ doUpdateExpandedRowKeys(stored.expandedRowKeys);
105
+ }
106
+ });
107
+ (0, vue_1.watch)(() => {
108
+ var _a, _b;
109
+ return props.localStorageKey
110
+ ? {
111
+ key: props.localStorageKey,
112
+ columnWidths: resizableWidthsRef.value,
113
+ page: (_a = mergedPaginationRef.value) === null || _a === void 0 ? void 0 : _a.page,
114
+ pageSize: (_b = mergedPaginationRef.value) === null || _b === void 0 ? void 0 : _b.pageSize,
115
+ filters: mergedFilterStateRef.value,
116
+ sortState: mergedSortStateRef.value.map((s) => ({
117
+ columnKey: s.columnKey,
118
+ order: s.order
119
+ })),
120
+ checkedRowKeys: mergedCheckedRowKeysRef.value,
121
+ expandedRowKeys: mergedExpandedRowKeysRef.value
122
+ }
123
+ : null;
124
+ }, (state) => {
125
+ var _a, _b;
126
+ if (!(state === null || state === void 0 ? void 0 : state.key))
127
+ return;
128
+ (0, use_table_storage_1.saveTableState)(state.key, {
129
+ columnWidths: state.columnWidths,
130
+ page: state.page,
131
+ pageSize: state.pageSize,
132
+ filters: state.filters,
133
+ sortState: state.sortState.length ? state.sortState : undefined,
134
+ checkedRowKeys: ((_a = state.checkedRowKeys) === null || _a === void 0 ? void 0 : _a.length)
135
+ ? state.checkedRowKeys
136
+ : undefined,
137
+ expandedRowKeys: ((_b = state.expandedRowKeys) === null || _b === void 0 ? void 0 : _b.length)
138
+ ? state.expandedRowKeys
139
+ : undefined
140
+ });
141
+ }, { deep: true });
75
142
  const { localeRef } = (0, _mixins_1.useLocale)('DataTable');
76
143
  const mergedTableLayoutRef = (0, vue_1.computed)(() => {
77
144
  // Layout
@@ -20,6 +20,7 @@ const seemly_1 = require("seemly");
20
20
  const vueuc_1 = require("vueuc");
21
21
  const vooks_1 = require("vooks");
22
22
  const common_1 = require("../../../_mixins/common");
23
+ const context_1 = require("../../../config-provider/src/context");
23
24
  const cssr_1 = require("../../../_utils/cssr");
24
25
  const _internal_1 = require("../../../_internal");
25
26
  const _utils_1 = require("../../../_utils");
@@ -102,6 +103,7 @@ exports.default = (0, vue_1.defineComponent)({
102
103
  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
103
104
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
104
105
  } = (0, vue_1.inject)(interface_1.dataTableInjectionKey);
106
+ const UConfigProvider = (0, vue_1.inject)(context_1.configProviderInjectionKey, null);
105
107
  const scrollbarInstRef = (0, vue_1.ref)(null);
106
108
  const virtualListRef = (0, vue_1.ref)(null);
107
109
  const emptyElRef = (0, vue_1.ref)(null);
@@ -296,13 +298,15 @@ exports.default = (0, vue_1.defineComponent)({
296
298
  id: `u-${componentId}`,
297
299
  force: true,
298
300
  props: cProps,
299
- anchorMetaName: common_1.cssrAnchorMetaName
301
+ anchorMetaName: common_1.cssrAnchorMetaName,
302
+ parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
300
303
  });
301
304
  fixedStyleMounted = true;
302
305
  });
303
306
  (0, vue_1.onUnmounted)(() => {
304
307
  style.unmount({
305
- id: `u-${componentId}`
308
+ id: `u-${componentId}`,
309
+ parent: UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.styleMountTarget
306
310
  });
307
311
  });
308
312
  return Object.assign({ bodyWidth: bodyWidthRef, summaryPlacement: summaryPlacementRef, dataTableSlots,
@@ -28,7 +28,7 @@ exports.default = (0, vue_1.defineComponent)({
28
28
  }
29
29
  },
30
30
  setup() {
31
- const { mergedClsPrefixRef, scrollXRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, allRowsCheckedRef, someRowsCheckedRef, rowsRef, colsRef, mergedThemeRef, checkOptionsRef, mergedSortStateRef, componentId, mergedTableLayoutRef, headerCheckboxDisabledRef, sizeRef, onUnstableColumnResize, doUpdateResizableWidth, handleTableHeaderScroll, deriveNextSorter, doUncheckAll, doCheckAll
31
+ const { mergedClsPrefixRef, scrollXRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, allRowsCheckedRef, someRowsCheckedRef, rowsRef, colsRef, mergedThemeRef, checkOptionsRef, mergedSortStateRef, componentId, mergedTableLayoutRef, headerCheckboxDisabledRef, sizeRef, onUnstableColumnResize, getResizableWidth, doUpdateResizableWidth, handleTableHeaderScroll, deriveNextSorter, doUncheckAll, doCheckAll
32
32
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
33
33
  } = (0, vue_1.inject)(interface_1.dataTableInjectionKey);
34
34
  const cellElsRef = (0, vue_1.ref)({});
@@ -56,13 +56,25 @@ exports.default = (0, vue_1.defineComponent)({
56
56
  deriveNextSorter(nextSorter);
57
57
  }
58
58
  const resizeStartWidthMap = new Map();
59
+ function getColumnStartWidth(column) {
60
+ const actual = getCellActualWidth(column.key);
61
+ if (actual !== undefined && actual > 0)
62
+ return actual;
63
+ const resized = getResizableWidth(column.key);
64
+ if (resized !== undefined && resized > 0)
65
+ return resized;
66
+ return (0, utils_1.getNumberColWidth)(column);
67
+ }
59
68
  function handleColumnResizeStart(column) {
60
- resizeStartWidthMap.set(column.key, getCellActualWidth(column.key));
69
+ resizeStartWidthMap.set(column.key, getColumnStartWidth(column));
61
70
  }
62
71
  function handleColumnResize(column, displacementX) {
63
- const startWidth = resizeStartWidthMap.get(column.key);
72
+ let startWidth = resizeStartWidthMap.get(column.key);
64
73
  if (startWidth === undefined) {
65
- return;
74
+ startWidth = getColumnStartWidth(column);
75
+ if (startWidth === undefined)
76
+ return;
77
+ resizeStartWidthMap.set(column.key, startWidth);
66
78
  }
67
79
  const widthAfterResize = startWidth + displacementX;
68
80
  const limitWidth = (0, utils_1.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;
@@ -53,7 +53,7 @@ exports.dataTableProps = Object.assign(Object.assign({}, _mixins_1.useTheme.prop
53
53
  }, paginationBehaviorOnFilter: {
54
54
  type: String,
55
55
  default: 'current'
56
- }, 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,
56
+ }, 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,
57
57
  // deprecated
58
58
  onPageChange: [Function, Array], onPageSizeChange: [Function, Array], onSorterChange: [Function, Array], onFiltersChange: [Function, Array], onCheckedRowKeysChange: [Function, Array] });
59
59
  exports.dataTableInjectionKey = (0, _utils_1.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
  };
@@ -20,6 +20,7 @@ function useResizable() {
20
20
  return {
21
21
  getResizableWidth,
22
22
  doUpdateResizableWidth,
23
- clearResizableWidth
23
+ clearResizableWidth,
24
+ resizableWidthsRef
24
25
  };
25
26
  }
@@ -16,4 +16,5 @@ export declare function useSorter(props: DataTableSetupProps, { dataRelatedColsR
16
16
  };
17
17
  }[]>;
18
18
  deriveNextSorter: (sortState: SortState | null) => void;
19
+ doUpdateSorter: (sortState: SortState | SortState[] | null) => void;
19
20
  };
@@ -189,6 +189,7 @@ function useSorter(props, { dataRelatedColsRef, filteredDataRef }) {
189
189
  sort,
190
190
  sortedDataRef,
191
191
  mergedSortStateRef,
192
- deriveNextSorter
192
+ deriveNextSorter,
193
+ doUpdateSorter
193
194
  };
194
195
  }
@@ -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: import("./interface").SortState | null) => void;
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;
@@ -131,7 +131,7 @@ function useTableData(props, { dataRelatedColsRef }) {
131
131
  })
132
132
  : [];
133
133
  });
134
- const { sortedDataRef, deriveNextSorter, mergedSortStateRef, sort, clearSorter } = (0, use_sorter_1.useSorter)(props, {
134
+ const { sortedDataRef, deriveNextSorter, mergedSortStateRef, sort, clearSorter, doUpdateSorter } = (0, use_sorter_1.useSorter)(props, {
135
135
  dataRelatedColsRef,
136
136
  filteredDataRef
137
137
  });
@@ -302,6 +302,9 @@ function useTableData(props, { dataRelatedColsRef }) {
302
302
  (0, _utils_1.warn)('data-table', '`filters` is not an object');
303
303
  }
304
304
  }
305
+ function restoreSortState(sortState) {
306
+ doUpdateSorter(sortState);
307
+ }
305
308
  return {
306
309
  treeMateRef,
307
310
  mergedCurrentPageRef: boundedMergedCurrentPageRef,
@@ -318,6 +321,7 @@ function useTableData(props, { dataRelatedColsRef }) {
318
321
  doUpdatePageSize,
319
322
  doUpdatePage,
320
323
  onUnstableColumnResize,
324
+ restoreSortState,
321
325
  // exported methods
322
326
  filter,
323
327
  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,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadTableState = loadTableState;
4
+ exports.saveTableState = saveTableState;
5
+ exports.restoreSortStateFromStored = restoreSortStateFromStored;
6
+ const STORAGE_KEY_PREFIX = 'u-data-table:';
7
+ function getStorageKey(key) {
8
+ return `${STORAGE_KEY_PREFIX}${key}`;
9
+ }
10
+ function loadTableState(localStorageKey) {
11
+ try {
12
+ const raw = localStorage.getItem(getStorageKey(localStorageKey));
13
+ if (!raw)
14
+ return null;
15
+ return JSON.parse(raw);
16
+ }
17
+ catch (_a) {
18
+ return null;
19
+ }
20
+ }
21
+ function saveTableState(localStorageKey, state) {
22
+ try {
23
+ localStorage.setItem(getStorageKey(localStorageKey), JSON.stringify(state));
24
+ }
25
+ catch (_a) {
26
+ console.warn(`Could not set localStorage value for ${localStorageKey}`);
27
+ }
28
+ }
29
+ function restoreSortStateFromStored(stored, dataRelatedCols) {
30
+ if (!(stored === null || stored === void 0 ? void 0 : stored.length))
31
+ return null;
32
+ const result = [];
33
+ for (const item of stored) {
34
+ const column = dataRelatedCols.find((col) => col.type !== 'selection' &&
35
+ col.type !== 'expand' &&
36
+ 'key' in col &&
37
+ col.key === item.columnKey &&
38
+ col.sorter !== undefined);
39
+ if (column === null || column === void 0 ? void 0 : column.sorter) {
40
+ result.push({
41
+ columnKey: item.columnKey,
42
+ order: item.order,
43
+ sorter: column.sorter
44
+ });
45
+ }
46
+ }
47
+ return result.length ? result : null;
48
+ }
@@ -96,15 +96,49 @@ function clampValueFollowCSSRules(value, min, max) {
96
96
  return value;
97
97
  }
98
98
  function createCustomWidthStyle(column, resizedWidth) {
99
+ var _a;
99
100
  if (resizedWidth !== undefined) {
101
+ const numWidth = (0, seemly_1.depx)(resizedWidth);
102
+ const minMaxColumn = column && 'minWidth' in column && 'maxWidth' in column
103
+ ? column
104
+ : null;
105
+ const clampedNum = minMaxColumn
106
+ ? clampValueFollowCSSRules(numWidth, minMaxColumn.minWidth, minMaxColumn.maxWidth)
107
+ : numWidth;
108
+ const clamped = (0, _utils_1.formatLength)(clampedNum);
100
109
  return {
101
- width: resizedWidth,
102
- minWidth: resizedWidth,
103
- maxWidth: resizedWidth
110
+ width: clamped,
111
+ minWidth: clamped,
112
+ maxWidth: clamped
104
113
  };
105
114
  }
106
- const width = getStringColWidth(column);
107
- const { minWidth, maxWidth } = column;
115
+ const explicitNum = (_a = getNumberColWidth(column)) !== null && _a !== void 0 ? _a : undefined;
116
+ const minWidth = column && 'minWidth' in column
117
+ ? column.minWidth
118
+ : undefined;
119
+ const maxWidth = column && 'maxWidth' in column
120
+ ? column.maxWidth
121
+ : undefined;
122
+ let widthNum = explicitNum;
123
+ if (widthNum === undefined &&
124
+ (minWidth !== undefined || maxWidth !== undefined)) {
125
+ widthNum = clampValueFollowCSSRules(maxWidth !== undefined
126
+ ? typeof maxWidth === 'number'
127
+ ? maxWidth
128
+ : parseFloat(maxWidth)
129
+ : minWidth !== undefined
130
+ ? typeof minWidth === 'number'
131
+ ? minWidth
132
+ : parseFloat(minWidth)
133
+ : 0, minWidth, maxWidth);
134
+ }
135
+ else if (widthNum !== undefined &&
136
+ (minWidth !== undefined || maxWidth !== undefined)) {
137
+ widthNum = clampValueFollowCSSRules(widthNum, minWidth, maxWidth);
138
+ }
139
+ const width = widthNum !== undefined
140
+ ? (0, _utils_1.formatLength)(widthNum)
141
+ : getStringColWidth(column);
108
142
  return {
109
143
  width,
110
144
  minWidth: (0, _utils_1.formatLength)(minWidth) || width,
@@ -1,4 +1,4 @@
1
- export { default as UIconBar, iconBarProps } from './src/IconBar';
2
- export type { IconBarProps } from './src/IconBar';
3
- export { default as UIconBarItem, iconBarItemProps } from './src/IconBarItem';
4
- export type { IconBarItemProps } from './src/IconBarItem';
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';
@@ -3,10 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.iconBarItemProps = exports.UIconBarItem = exports.iconBarProps = exports.UIconBar = void 0;
6
+ exports.iconBarItemProps = exports.iconBarProps = exports.UIconBarItem = exports.UIconBar = void 0;
7
7
  var IconBar_1 = require("./src/IconBar");
8
8
  Object.defineProperty(exports, "UIconBar", { enumerable: true, get: function () { return __importDefault(IconBar_1).default; } });
9
- Object.defineProperty(exports, "iconBarProps", { enumerable: true, get: function () { return IconBar_1.iconBarProps; } });
10
9
  var IconBarItem_1 = require("./src/IconBarItem");
11
10
  Object.defineProperty(exports, "UIconBarItem", { enumerable: true, get: function () { return __importDefault(IconBarItem_1).default; } });
12
- Object.defineProperty(exports, "iconBarItemProps", { enumerable: true, get: function () { return IconBarItem_1.iconBarItemProps; } });
11
+ var interface_1 = require("./src/interface");
12
+ Object.defineProperty(exports, "iconBarProps", { enumerable: true, get: function () { return interface_1.iconBarProps; } });
13
+ Object.defineProperty(exports, "iconBarItemProps", { enumerable: true, get: function () { return interface_1.iconBarItemProps; } });
@@ -1,63 +1,7 @@
1
- import { ExtractPublicPropTypes, PropType } from 'vue';
2
- import { IconBarItemProps } from './IconBarItem';
3
- import { GridProps } from '../../grid';
4
- export declare const iconBarProps: {
5
- readonly items: {
6
- readonly type: PropType<IconBarItemProps[]>;
7
- readonly default: () => never[];
8
- };
9
- readonly cols: {
10
- readonly type: NumberConstructor;
11
- readonly default: 6;
12
- };
13
- readonly gridProps: {
14
- readonly type: PropType<Partial<GridProps>>;
15
- };
16
- readonly itemSize: PropType<number | string>;
17
- readonly theme: PropType<import("../../_mixins").Theme<"IconBar", {
18
- itemSize: string;
19
- color: string;
20
- colorHover: string;
21
- itemGap: string;
22
- iconSize: string;
23
- labelColor: string;
24
- labelSizeHover: string;
25
- labelColorHover: string;
26
- boxShadow: string;
27
- span: number;
28
- cols: number;
29
- }, any>>;
30
- readonly themeOverrides: PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
31
- itemSize: string;
32
- color: string;
33
- colorHover: string;
34
- itemGap: string;
35
- iconSize: string;
36
- labelColor: string;
37
- labelSizeHover: string;
38
- labelColorHover: string;
39
- boxShadow: string;
40
- span: number;
41
- cols: number;
42
- }, any>>>;
43
- readonly builtinThemeOverrides: PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
44
- itemSize: string;
45
- color: string;
46
- colorHover: string;
47
- itemGap: string;
48
- iconSize: string;
49
- labelColor: string;
50
- labelSizeHover: string;
51
- labelColorHover: string;
52
- boxShadow: string;
53
- span: number;
54
- cols: number;
55
- }, any>>>;
56
- };
57
- export type IconBarProps = ExtractPublicPropTypes<typeof iconBarProps>;
1
+ import { IconBarItemProps } from './interface';
58
2
  declare const _default: import("vue").DefineComponent<{
59
3
  readonly items: {
60
- readonly type: PropType<IconBarItemProps[]>;
4
+ readonly type: import("vue").PropType<IconBarItemProps[]>;
61
5
  readonly default: () => never[];
62
6
  };
63
7
  readonly cols: {
@@ -65,10 +9,13 @@ declare const _default: import("vue").DefineComponent<{
65
9
  readonly default: 6;
66
10
  };
67
11
  readonly gridProps: {
68
- readonly type: PropType<Partial<GridProps>>;
12
+ readonly type: import("vue").PropType<Partial<import("../../grid").GridProps>>;
69
13
  };
70
- readonly itemSize: PropType<number | string>;
71
- readonly theme: PropType<import("../../_mixins").Theme<"IconBar", {
14
+ readonly typographyProps: {
15
+ readonly type: import("vue").PropType<Partial<import("../..").TextProps>>;
16
+ };
17
+ readonly itemSize: import("vue").PropType<number | string>;
18
+ readonly theme: import("vue").PropType<import("../../_mixins").Theme<"IconBar", {
72
19
  itemSize: string;
73
20
  color: string;
74
21
  colorHover: string;
@@ -81,7 +28,7 @@ declare const _default: import("vue").DefineComponent<{
81
28
  span: number;
82
29
  cols: number;
83
30
  }, any>>;
84
- readonly themeOverrides: PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
31
+ readonly themeOverrides: import("vue").PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
85
32
  itemSize: string;
86
33
  color: string;
87
34
  colorHover: string;
@@ -94,7 +41,7 @@ declare const _default: import("vue").DefineComponent<{
94
41
  span: number;
95
42
  cols: number;
96
43
  }, any>>>;
97
- readonly builtinThemeOverrides: PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
44
+ readonly builtinThemeOverrides: import("vue").PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
98
45
  itemSize: string;
99
46
  color: string;
100
47
  colorHover: string;
@@ -118,7 +65,7 @@ declare const _default: import("vue").DefineComponent<{
118
65
  onRender: (() => void) | undefined;
119
66
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
120
67
  readonly items: {
121
- readonly type: PropType<IconBarItemProps[]>;
68
+ readonly type: import("vue").PropType<IconBarItemProps[]>;
122
69
  readonly default: () => never[];
123
70
  };
124
71
  readonly cols: {
@@ -126,10 +73,13 @@ declare const _default: import("vue").DefineComponent<{
126
73
  readonly default: 6;
127
74
  };
128
75
  readonly gridProps: {
129
- readonly type: PropType<Partial<GridProps>>;
76
+ readonly type: import("vue").PropType<Partial<import("../../grid").GridProps>>;
77
+ };
78
+ readonly typographyProps: {
79
+ readonly type: import("vue").PropType<Partial<import("../..").TextProps>>;
130
80
  };
131
- readonly itemSize: PropType<number | string>;
132
- readonly theme: PropType<import("../../_mixins").Theme<"IconBar", {
81
+ readonly itemSize: import("vue").PropType<number | string>;
82
+ readonly theme: import("vue").PropType<import("../../_mixins").Theme<"IconBar", {
133
83
  itemSize: string;
134
84
  color: string;
135
85
  colorHover: string;
@@ -142,7 +92,7 @@ declare const _default: import("vue").DefineComponent<{
142
92
  span: number;
143
93
  cols: number;
144
94
  }, any>>;
145
- readonly themeOverrides: PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
95
+ readonly themeOverrides: import("vue").PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
146
96
  itemSize: string;
147
97
  color: string;
148
98
  colorHover: string;
@@ -155,7 +105,7 @@ declare const _default: import("vue").DefineComponent<{
155
105
  span: number;
156
106
  cols: number;
157
107
  }, any>>>;
158
- readonly builtinThemeOverrides: PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
108
+ readonly builtinThemeOverrides: import("vue").PropType<import("../../_mixins/use-theme").ExtractThemeOverrides<import("../../_mixins").Theme<"IconBar", {
159
109
  itemSize: string;
160
110
  color: string;
161
111
  colorHover: string;