@rainbow-oh/yee-c 0.10.0 → 0.11.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/cjs/Button/demo/icon.js +1 -1
- package/dist/cjs/Table/demo/resizable.d.ts +3 -0
- package/dist/cjs/Table/demo/resizable.js +143 -0
- package/dist/cjs/Table/hooks/useColumnResize.d.ts +30 -0
- package/dist/cjs/Table/hooks/useColumnResize.js +217 -0
- package/dist/cjs/Table/hooks/useColumns.d.ts +3 -1
- package/dist/cjs/Table/hooks/useColumns.js +14 -3
- package/dist/cjs/Table/interface.d.ts +49 -0
- package/dist/cjs/Table/style/index.less +42 -0
- package/dist/cjs/Table/table.js +62 -9
- package/dist/cjs/Table/theader/cell.js +46 -4
- package/dist/cjs/Table/util/index.d.ts +19 -1
- package/dist/cjs/Table/util/index.js +22 -0
- package/dist/cjs/Tabs/interface.d.ts +1 -1
- package/dist/cjs/Tabs/tab-header/index.js +2 -1
- package/dist/cjs/locale/interface.d.ts +1 -0
- package/dist/cjs/locale/lang/en_US.js +2 -1
- package/dist/cjs/locale/lang/ja_JP.js +2 -1
- package/dist/cjs/locale/lang/zh_CN.js +2 -1
- package/dist/cjs/locale/lang/zh_TW.js +2 -1
- package/dist/cjs/style/size.css +1 -0
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +2 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Button/demo/icon.js +7 -4
- package/dist/esm/Table/demo/resizable.d.ts +3 -0
- package/dist/esm/Table/demo/resizable.js +110 -0
- package/dist/esm/Table/hooks/useColumnResize.d.ts +30 -0
- package/dist/esm/Table/hooks/useColumnResize.js +206 -0
- package/dist/esm/Table/hooks/useColumns.d.ts +3 -1
- package/dist/esm/Table/hooks/useColumns.js +9 -4
- package/dist/esm/Table/interface.d.ts +49 -0
- package/dist/esm/Table/style/index.less +42 -0
- package/dist/esm/Table/table.js +83 -13
- package/dist/esm/Table/theader/cell.js +38 -3
- package/dist/esm/Table/util/index.d.ts +19 -1
- package/dist/esm/Table/util/index.js +37 -0
- package/dist/esm/Tabs/interface.d.ts +1 -1
- package/dist/esm/Tabs/tab-header/index.js +2 -1
- package/dist/esm/locale/interface.d.ts +1 -0
- package/dist/esm/locale/lang/en_US.js +2 -1
- package/dist/esm/locale/lang/ja_JP.js +2 -1
- package/dist/esm/locale/lang/zh_CN.js +2 -1
- package/dist/esm/locale/lang/zh_TW.js +2 -1
- package/dist/esm/style/size.css +1 -0
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +2 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +2 -2
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Button/demo/icon.tsx +5 -3
- package/src/Table/demo/resizable.tsx +106 -0
- package/src/Table/hooks/useColumnResize.ts +224 -0
- package/src/Table/hooks/useColumns.ts +18 -3
- package/src/Table/index.en-US.md +7 -0
- package/src/Table/index.zh-CN.md +7 -0
- package/src/Table/interface.ts +52 -0
- package/src/Table/style/index.less +42 -0
- package/src/Table/table-resize.test.tsx +234 -0
- package/src/Table/table.tsx +90 -13
- package/src/Table/theader/cell.tsx +52 -2
- package/src/Table/util/index.ts +44 -1
- package/src/Tabs/interface.ts +1 -1
- package/src/Tabs/tab-header/index.tsx +2 -1
- package/src/locale/interface.ts +1 -0
- package/src/locale/lang/en_US.ts +1 -0
- package/src/locale/lang/ja_JP.ts +1 -0
- package/src/locale/lang/zh_CN.ts +1 -0
- package/src/locale/lang/zh_TW.ts +1 -0
- package/src/style/size.css +1 -0
- package/src/version.ts +1 -1
package/dist/cjs/Table/table.js
CHANGED
|
@@ -68,6 +68,7 @@ var import_Spin = __toESM(require("../Spin"));
|
|
|
68
68
|
var import_col_group = __toESM(require("./col-group"));
|
|
69
69
|
var import_footer = __toESM(require("./footer"));
|
|
70
70
|
var import_header = __toESM(require("./header"));
|
|
71
|
+
var import_useColumnResize = __toESM(require("./hooks/useColumnResize"));
|
|
71
72
|
var import_useColumns = __toESM(require("./hooks/useColumns"));
|
|
72
73
|
var import_useExpand = __toESM(require("./hooks/useExpand"));
|
|
73
74
|
var import_useSelection = __toESM(require("./hooks/useSelection"));
|
|
@@ -75,7 +76,6 @@ var import_tbody = __toESM(require("./tbody"));
|
|
|
75
76
|
var import_tfooter = __toESM(require("./tfooter"));
|
|
76
77
|
var import_theader = __toESM(require("./theader"));
|
|
77
78
|
var import_Config_Provider = require("../Config-Provider");
|
|
78
|
-
var import_useLatest = __toESM(require("../hooks/useLatest"));
|
|
79
79
|
var import_mergeContextToProps = __toESM(require("../utils/mergeContextToProps"));
|
|
80
80
|
var import_omit = __toESM(require("../utils/omit"));
|
|
81
81
|
var import_types = require("../utils/types");
|
|
@@ -97,6 +97,9 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
97
97
|
rowKey = "key",
|
|
98
98
|
bordered,
|
|
99
99
|
tableLayout,
|
|
100
|
+
resizable,
|
|
101
|
+
onColumnResize,
|
|
102
|
+
onColumnResizeEnd,
|
|
100
103
|
loading = false,
|
|
101
104
|
showHeader = true,
|
|
102
105
|
pagination: propPagination = true,
|
|
@@ -123,6 +126,9 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
123
126
|
"rowKey",
|
|
124
127
|
"bordered",
|
|
125
128
|
"tableLayout",
|
|
129
|
+
"resizable",
|
|
130
|
+
"onColumnResize",
|
|
131
|
+
"onColumnResizeEnd",
|
|
126
132
|
"loading",
|
|
127
133
|
"showHeader",
|
|
128
134
|
"pagination",
|
|
@@ -142,6 +148,22 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
142
148
|
]);
|
|
143
149
|
const dataAttrs = (0, import_types.pickDataAttrs)(rest);
|
|
144
150
|
const [measuredColumnWidths, setMeasuredColumnWidths] = import_react.default.useState();
|
|
151
|
+
const contentRef = (0, import_react.useRef)(null);
|
|
152
|
+
const tableRef = (0, import_react.useRef)(null);
|
|
153
|
+
const wrapedColumnsRef = (0, import_react.useRef)([]);
|
|
154
|
+
const {
|
|
155
|
+
resizedWidths,
|
|
156
|
+
resizingKey,
|
|
157
|
+
onResizeStart,
|
|
158
|
+
onResizeStep,
|
|
159
|
+
resetResizedWidths
|
|
160
|
+
} = (0, import_useColumnResize.default)({
|
|
161
|
+
tableRef,
|
|
162
|
+
columnsRef: wrapedColumnsRef,
|
|
163
|
+
onColumnResize,
|
|
164
|
+
onColumnResizeEnd
|
|
165
|
+
});
|
|
166
|
+
const hasResizeSnapshot = Object.keys(resizedWidths).length > 0;
|
|
145
167
|
const getRowKey = import_react.default.useCallback(
|
|
146
168
|
(record, key = rowKey) => {
|
|
147
169
|
return typeof key === "function" ? key(record) : record[key];
|
|
@@ -156,8 +178,31 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
156
178
|
columns: propColumns,
|
|
157
179
|
expandable,
|
|
158
180
|
rowSelection,
|
|
159
|
-
measuredColumnWidths
|
|
181
|
+
measuredColumnWidths: hasResizeSnapshot ? void 0 : measuredColumnWidths,
|
|
182
|
+
resizable,
|
|
183
|
+
resizedWidths
|
|
160
184
|
});
|
|
185
|
+
wrapedColumnsRef.current = wrapedColumns;
|
|
186
|
+
const resizeTotalWidth = (0, import_react.useMemo)(() => {
|
|
187
|
+
if (!wrapedColumns.length)
|
|
188
|
+
return void 0;
|
|
189
|
+
let total = 0;
|
|
190
|
+
for (const column of wrapedColumns) {
|
|
191
|
+
const width = column.resizeKey ? resizedWidths[column.resizeKey] : void 0;
|
|
192
|
+
if (!width || !Number.isFinite(width))
|
|
193
|
+
return void 0;
|
|
194
|
+
total += width;
|
|
195
|
+
}
|
|
196
|
+
return total;
|
|
197
|
+
}, [wrapedColumns, resizedWidths]);
|
|
198
|
+
const resizeActive = resizeTotalWidth !== void 0;
|
|
199
|
+
const resizeKeysSignature = (0, import_react.useMemo)(
|
|
200
|
+
() => wrapedColumns.map((column) => column.resizeKey).join("|"),
|
|
201
|
+
[wrapedColumns]
|
|
202
|
+
);
|
|
203
|
+
(0, import_react.useEffect)(() => {
|
|
204
|
+
resetResizedWidths();
|
|
205
|
+
}, [resizeKeysSignature, resetResizedWidths]);
|
|
161
206
|
const {
|
|
162
207
|
data: filteredData,
|
|
163
208
|
filterRecords,
|
|
@@ -215,8 +260,6 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
215
260
|
onChange: onSelectionChange
|
|
216
261
|
} = (0, import_useSelection.default)({ pageData, dataSource, getRowKey, rowSelection, allKeys });
|
|
217
262
|
const prevFilterRecordsRef = (0, import_react.useRef)(filterRecords);
|
|
218
|
-
const contentRef = (0, import_react.useRef)(null);
|
|
219
|
-
const tableRef = (0, import_react.useRef)(null);
|
|
220
263
|
const [horizontalScroll, setHorizontalScroll] = import_react.default.useState({
|
|
221
264
|
left: false,
|
|
222
265
|
right: false
|
|
@@ -244,7 +287,6 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
244
287
|
).join("|"),
|
|
245
288
|
[wrapedColumns]
|
|
246
289
|
);
|
|
247
|
-
const wrapedColumnsRef = (0, import_useLatest.default)(wrapedColumns);
|
|
248
290
|
const updateMeasuredColumnWidths = import_react.default.useCallback(() => {
|
|
249
291
|
var _a2;
|
|
250
292
|
const columns = wrapedColumnsRef.current;
|
|
@@ -345,7 +387,10 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
345
387
|
sorters,
|
|
346
388
|
onSort: handleSort,
|
|
347
389
|
onCheckAll,
|
|
348
|
-
onInternalFilter: onFilterInternal
|
|
390
|
+
onInternalFilter: onFilterInternal,
|
|
391
|
+
resizingKey,
|
|
392
|
+
onResizeStart,
|
|
393
|
+
onResizeStep
|
|
349
394
|
})
|
|
350
395
|
);
|
|
351
396
|
};
|
|
@@ -373,8 +418,12 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
373
418
|
const renderTable = () => {
|
|
374
419
|
const tableProps = {
|
|
375
420
|
style: __spreadProps(__spreadValues({}, styles == null ? void 0 : styles.table), {
|
|
376
|
-
|
|
377
|
-
|
|
421
|
+
// An explicit total width replaces both `width: 100%` and `scroll.x`:
|
|
422
|
+
// either of those would let the browser stretch the table and redistribute
|
|
423
|
+
// the extra space across the columns, undoing the drag.
|
|
424
|
+
minWidth: resizeActive ? void 0 : scroll == null ? void 0 : scroll.x,
|
|
425
|
+
width: resizeTotalWidth,
|
|
426
|
+
tableLayout: resizeActive ? "fixed" : (pageData == null ? void 0 : pageData.length) ? tableLayout : void 0
|
|
378
427
|
}),
|
|
379
428
|
className: (0, import_clsx.default)(
|
|
380
429
|
{ [`${prefixCls}-bordered`]: bordered },
|
|
@@ -434,7 +483,11 @@ var Table = import_react.default.forwardRef((baseprops, ref) => {
|
|
|
434
483
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
435
484
|
"div",
|
|
436
485
|
__spreadValues({
|
|
437
|
-
className: (0, import_clsx.default)(
|
|
486
|
+
className: (0, import_clsx.default)(
|
|
487
|
+
`${prefixCls}-box`,
|
|
488
|
+
{ [`${prefixCls}-resizing`]: !!resizingKey },
|
|
489
|
+
className
|
|
490
|
+
),
|
|
438
491
|
style,
|
|
439
492
|
ref
|
|
440
493
|
}, dataAttrs),
|
|
@@ -89,9 +89,14 @@ var HeadCell = (props) => {
|
|
|
89
89
|
width,
|
|
90
90
|
colSpan,
|
|
91
91
|
rowSpan,
|
|
92
|
+
resizable,
|
|
93
|
+
resizeKey,
|
|
94
|
+
resizingKey,
|
|
92
95
|
onHeaderCell,
|
|
93
96
|
onSort,
|
|
94
|
-
onInternalFilter
|
|
97
|
+
onInternalFilter,
|
|
98
|
+
onResizeStart,
|
|
99
|
+
onResizeStep
|
|
95
100
|
} = _a, rest = __objRest(_a, [
|
|
96
101
|
"fixed",
|
|
97
102
|
"isFixedLeftLast",
|
|
@@ -112,9 +117,14 @@ var HeadCell = (props) => {
|
|
|
112
117
|
"width",
|
|
113
118
|
"colSpan",
|
|
114
119
|
"rowSpan",
|
|
120
|
+
"resizable",
|
|
121
|
+
"resizeKey",
|
|
122
|
+
"resizingKey",
|
|
115
123
|
"onHeaderCell",
|
|
116
124
|
"onSort",
|
|
117
|
-
"onInternalFilter"
|
|
125
|
+
"onInternalFilter",
|
|
126
|
+
"onResizeStart",
|
|
127
|
+
"onResizeStep"
|
|
118
128
|
]);
|
|
119
129
|
const { prefixCls } = (0, import_react.useContext)(import_table.TableCtx);
|
|
120
130
|
const { locale } = (0, import_locale.useLocale)();
|
|
@@ -208,6 +218,38 @@ var HeadCell = (props) => {
|
|
|
208
218
|
},
|
|
209
219
|
className
|
|
210
220
|
);
|
|
221
|
+
const showResizeHandle = !!(resizable && resizeKey && onResizeStart);
|
|
222
|
+
const isResizing = !!resizeKey && resizingKey === resizeKey;
|
|
223
|
+
const renderResizeHandle = () => {
|
|
224
|
+
if (!showResizeHandle)
|
|
225
|
+
return null;
|
|
226
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
227
|
+
"span",
|
|
228
|
+
{
|
|
229
|
+
role: "separator",
|
|
230
|
+
"aria-orientation": "vertical",
|
|
231
|
+
"aria-label": tableLocale.resizeColumn || "Drag to resize column",
|
|
232
|
+
tabIndex: 0,
|
|
233
|
+
className: (0, import_clsx.default)(`${prefixCls}-resize-handle`, {
|
|
234
|
+
[`${prefixCls}-resize-handle-active`]: isResizing
|
|
235
|
+
}),
|
|
236
|
+
onPointerDown: (event) => onResizeStart == null ? void 0 : onResizeStart(event, resizeKey),
|
|
237
|
+
onClick: (event) => {
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
event.stopPropagation();
|
|
240
|
+
},
|
|
241
|
+
onKeyDown: (event) => {
|
|
242
|
+
if (event.key !== "ArrowLeft" && event.key !== "ArrowRight")
|
|
243
|
+
return;
|
|
244
|
+
event.preventDefault();
|
|
245
|
+
onResizeStep == null ? void 0 : onResizeStep(
|
|
246
|
+
resizeKey,
|
|
247
|
+
event.key === "ArrowLeft" ? -1 : 1
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
};
|
|
211
253
|
const getThProps = () => {
|
|
212
254
|
const styles2 = __spreadProps(__spreadValues({}, style), { width, maxWidth: width, textAlign: align });
|
|
213
255
|
const cellProps = onHeaderCell ? onHeaderCell(props) : {};
|
|
@@ -222,9 +264,9 @@ var HeadCell = (props) => {
|
|
|
222
264
|
const thProps = getThProps();
|
|
223
265
|
const renderCell = () => {
|
|
224
266
|
if (!filter && !sorter) {
|
|
225
|
-
return /* @__PURE__ */ import_react.default.createElement("th", __spreadValues({}, thProps), title);
|
|
267
|
+
return /* @__PURE__ */ import_react.default.createElement("th", __spreadValues({}, thProps), title, renderResizeHandle());
|
|
226
268
|
}
|
|
227
|
-
return /* @__PURE__ */ import_react.default.createElement("th", __spreadValues({}, thProps), renderCellWithAction());
|
|
269
|
+
return /* @__PURE__ */ import_react.default.createElement("th", __spreadValues({}, thProps), renderCellWithAction(), renderResizeHandle());
|
|
228
270
|
};
|
|
229
271
|
const cell = renderCell();
|
|
230
272
|
return cell;
|
|
@@ -1,2 +1,20 @@
|
|
|
1
|
-
import { WrapedColumnProps } from '../interface';
|
|
1
|
+
import { ColumnProps, WrapedColumnProps } from '../interface';
|
|
2
|
+
/**
|
|
3
|
+
* Stable identity for a leaf column, used to key its resized width.
|
|
4
|
+
*
|
|
5
|
+
* `key`/`dataIndex` survive re-ordering and data changes, so they are preferred.
|
|
6
|
+
* Columns declaring neither fall back to their position, which is the best that
|
|
7
|
+
* can be done without asking the caller for an id.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getColumnResizeKey(column: ColumnProps, index: number): string;
|
|
10
|
+
/**
|
|
11
|
+
* Stamp every leaf column with its `resizeKey`, resolve whether it is resizable
|
|
12
|
+
* (column level setting wins over the table level one) and override `width` with
|
|
13
|
+
* the dragged value when there is one.
|
|
14
|
+
*
|
|
15
|
+
* This runs before `handleColumns` so that the colgroup, the header cells, the
|
|
16
|
+
* body cells and the sticky offsets of fixed columns all read the same width
|
|
17
|
+
* from a single place.
|
|
18
|
+
*/
|
|
19
|
+
export declare function applyColumnResize(columns: Array<WrapedColumnProps>, resizable?: boolean, resizedWidths?: Record<string, number>): WrapedColumnProps[];
|
|
2
20
|
export declare function handleColumns(columns: Array<WrapedColumnProps>, measuredColumnWidths?: number[]): WrapedColumnProps[];
|
|
@@ -36,9 +36,31 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
36
36
|
// src/Table/util/index.ts
|
|
37
37
|
var util_exports = {};
|
|
38
38
|
__export(util_exports, {
|
|
39
|
+
applyColumnResize: () => applyColumnResize,
|
|
40
|
+
getColumnResizeKey: () => getColumnResizeKey,
|
|
39
41
|
handleColumns: () => handleColumns
|
|
40
42
|
});
|
|
41
43
|
module.exports = __toCommonJS(util_exports);
|
|
44
|
+
function getColumnResizeKey(column, index) {
|
|
45
|
+
var _a;
|
|
46
|
+
const id = (_a = column.key) != null ? _a : column.dataIndex;
|
|
47
|
+
return id === void 0 || id === null || id === "" ? `index:${index}` : `id:${id}`;
|
|
48
|
+
}
|
|
49
|
+
function applyColumnResize(columns, resizable, resizedWidths) {
|
|
50
|
+
return columns.map((column, index) => {
|
|
51
|
+
var _a, _b;
|
|
52
|
+
const resizeKey = getColumnResizeKey(column, index);
|
|
53
|
+
const resizedWidth = resizedWidths == null ? void 0 : resizedWidths[resizeKey];
|
|
54
|
+
const next = __spreadProps(__spreadValues({}, column), {
|
|
55
|
+
resizeKey,
|
|
56
|
+
resizable: (_b = (_a = column.resizable) != null ? _a : resizable) != null ? _b : false
|
|
57
|
+
});
|
|
58
|
+
if (Number.isFinite(resizedWidth) && resizedWidth > 0) {
|
|
59
|
+
next.width = resizedWidth;
|
|
60
|
+
}
|
|
61
|
+
return next;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
42
64
|
var getColumnWidth = (column, index, measuredColumnWidths) => {
|
|
43
65
|
const measuredWidth = measuredColumnWidths == null ? void 0 : measuredColumnWidths[index];
|
|
44
66
|
if (Number.isFinite(measuredWidth) && measuredWidth && measuredWidth > 0) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { DataAttributeProps } from '../utils/types';
|
|
3
|
-
type SemanticDOM = 'header' | 'content' | 'track' | 'list' | 'activeBar';
|
|
3
|
+
type SemanticDOM = 'header' | 'content' | 'track' | 'list' | 'activeBar' | 'more';
|
|
4
4
|
export type TabItemType = {
|
|
5
5
|
/**
|
|
6
6
|
* Unique key corresponding to activeKey
|
|
@@ -203,7 +203,8 @@ var TabHeader = (props) => {
|
|
|
203
203
|
), moreOpen && /* @__PURE__ */ import_react.default.createElement(import_dropdown_tabs.default, { visible: moreOpen, items: items || [], range }, /* @__PURE__ */ import_react.default.createElement(
|
|
204
204
|
import_Button.default,
|
|
205
205
|
{
|
|
206
|
-
className: `${prefixCls}-nav-more`,
|
|
206
|
+
className: (0, import_clsx.default)(`${prefixCls}-nav-more`, classNames == null ? void 0 : classNames.more),
|
|
207
|
+
style: styles == null ? void 0 : styles.more,
|
|
207
208
|
size: "small",
|
|
208
209
|
icon: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Ellipsis, { size: 14, strokeWidth: 1.5 }),
|
|
209
210
|
type: "text",
|
|
@@ -115,7 +115,8 @@ var locale = {
|
|
|
115
115
|
selectionNone: "Clear Selection on Page",
|
|
116
116
|
sortAscending: "Click to sort ascending",
|
|
117
117
|
sortDescending: "Click to sort descending",
|
|
118
|
-
sortCancel: "Click to cancel sorting"
|
|
118
|
+
sortCancel: "Click to cancel sorting",
|
|
119
|
+
resizeColumn: "Drag to resize column"
|
|
119
120
|
},
|
|
120
121
|
pagination: {
|
|
121
122
|
total: "Total {total} items",
|
|
@@ -115,7 +115,8 @@ var locale = {
|
|
|
115
115
|
selectionNone: "ページ内選択をクリア",
|
|
116
116
|
sortAscending: "クリックで昇順に並べ替え",
|
|
117
117
|
sortDescending: "クリックで降順に並べ替え",
|
|
118
|
-
sortCancel: "クリックで並べ替えを解除"
|
|
118
|
+
sortCancel: "クリックで並べ替えを解除",
|
|
119
|
+
resizeColumn: "ドラッグで列幅を変更"
|
|
119
120
|
},
|
|
120
121
|
pagination: {
|
|
121
122
|
total: "合計 {total} 件",
|
package/dist/cjs/style/size.css
CHANGED
|
@@ -674,6 +674,7 @@
|
|
|
674
674
|
--yee-table-bordered-cell-border-width: 1px;
|
|
675
675
|
--yee-table-bordered-thead-border-width: 1px;
|
|
676
676
|
--yee-table-thead-action-gap: 8px;
|
|
677
|
+
--yee-table-resize-handle-width: 8px;
|
|
677
678
|
--yee-table-filter-popup-padding: 8px;
|
|
678
679
|
--yee-table-content-border-radius: 6px 6px 0 0;
|
|
679
680
|
--yee-table-cell-padding: 13px 16px;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* @rainbow-oh/yee-c CSS Variables
|
|
3
3
|
* Auto-generated, do not edit manually
|
|
4
|
-
* Generated on 2026-09-
|
|
4
|
+
* Generated on 2026-09-10T06:30:03.660Z
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* ========== color.css ========== */
|
|
@@ -1796,6 +1796,7 @@
|
|
|
1796
1796
|
--yee-table-bordered-cell-border-width: 1px;
|
|
1797
1797
|
--yee-table-bordered-thead-border-width: 1px;
|
|
1798
1798
|
--yee-table-thead-action-gap: 8px;
|
|
1799
|
+
--yee-table-resize-handle-width: 8px;
|
|
1799
1800
|
--yee-table-filter-popup-padding: 8px;
|
|
1800
1801
|
--yee-table-content-border-radius: 6px 6px 0 0;
|
|
1801
1802
|
--yee-table-cell-padding: 13px 16px;
|
package/dist/cjs/version.d.ts
CHANGED
package/dist/cjs/version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button } from "../..";
|
|
1
|
+
import { Button, Tooltip } from "../..";
|
|
2
2
|
import { Download, Plus, Search } from 'lucide-react';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
export default (function () {
|
|
@@ -6,7 +6,8 @@ export default (function () {
|
|
|
6
6
|
type: "primary",
|
|
7
7
|
icon: /*#__PURE__*/React.createElement(Search, {
|
|
8
8
|
size: 16
|
|
9
|
-
})
|
|
9
|
+
}),
|
|
10
|
+
title: "search"
|
|
10
11
|
}, "Search"), /*#__PURE__*/React.createElement("span", {
|
|
11
12
|
style: {
|
|
12
13
|
margin: '0 10px'
|
|
@@ -24,13 +25,15 @@ export default (function () {
|
|
|
24
25
|
style: {
|
|
25
26
|
margin: '0 10px'
|
|
26
27
|
}
|
|
27
|
-
}), /*#__PURE__*/React.createElement(
|
|
28
|
+
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
29
|
+
title: "Search"
|
|
30
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
28
31
|
shape: "circle",
|
|
29
32
|
type: "primary",
|
|
30
33
|
icon: /*#__PURE__*/React.createElement(Search, {
|
|
31
34
|
size: 16
|
|
32
35
|
})
|
|
33
|
-
}), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Button, {
|
|
36
|
+
})), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Button, {
|
|
34
37
|
icon: /*#__PURE__*/React.createElement(Search, {
|
|
35
38
|
size: 16
|
|
36
39
|
})
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
11
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
import { Table } from "../..";
|
|
14
|
+
import React from 'react';
|
|
15
|
+
var columns = [{
|
|
16
|
+
title: 'Name',
|
|
17
|
+
dataIndex: 'name',
|
|
18
|
+
key: 'name',
|
|
19
|
+
fixed: 'left',
|
|
20
|
+
width: 140,
|
|
21
|
+
minWidth: 100
|
|
22
|
+
}, {
|
|
23
|
+
title: 'Age',
|
|
24
|
+
dataIndex: 'age',
|
|
25
|
+
key: 'age',
|
|
26
|
+
width: 100,
|
|
27
|
+
sorter: true
|
|
28
|
+
}, {
|
|
29
|
+
title: 'Address',
|
|
30
|
+
dataIndex: 'address',
|
|
31
|
+
key: 'address',
|
|
32
|
+
width: 240
|
|
33
|
+
}, {
|
|
34
|
+
title: 'Company',
|
|
35
|
+
dataIndex: 'company',
|
|
36
|
+
key: 'company',
|
|
37
|
+
width: 180
|
|
38
|
+
}, {
|
|
39
|
+
title: 'Email',
|
|
40
|
+
dataIndex: 'email',
|
|
41
|
+
key: 'email',
|
|
42
|
+
width: 240
|
|
43
|
+
}, {
|
|
44
|
+
// Opt this column out of resizing while the rest stay resizable.
|
|
45
|
+
title: 'Action',
|
|
46
|
+
key: 'action',
|
|
47
|
+
fixed: 'right',
|
|
48
|
+
width: 100,
|
|
49
|
+
resizable: false,
|
|
50
|
+
render: function render(record) {
|
|
51
|
+
return /*#__PURE__*/React.createElement("a", {
|
|
52
|
+
onClick: function onClick() {
|
|
53
|
+
return console.log(record);
|
|
54
|
+
}
|
|
55
|
+
}, "View");
|
|
56
|
+
}
|
|
57
|
+
}];
|
|
58
|
+
var dataSource = [{
|
|
59
|
+
key: '1',
|
|
60
|
+
name: 'John Brown',
|
|
61
|
+
age: 32,
|
|
62
|
+
address: 'New York No. 1 Lake Park',
|
|
63
|
+
company: 'Acme Inc.',
|
|
64
|
+
email: 'john.brown@example.com'
|
|
65
|
+
}, {
|
|
66
|
+
key: '2',
|
|
67
|
+
name: 'Jim Green',
|
|
68
|
+
age: 42,
|
|
69
|
+
address: 'London No. 1 Lake Park',
|
|
70
|
+
company: 'Globex',
|
|
71
|
+
email: 'jim.green@example.com'
|
|
72
|
+
}, {
|
|
73
|
+
key: '3',
|
|
74
|
+
name: 'Joe Black',
|
|
75
|
+
age: 28,
|
|
76
|
+
address: 'Sidney No. 1 Lake Park',
|
|
77
|
+
company: 'Initech',
|
|
78
|
+
email: 'joe.black@example.com'
|
|
79
|
+
}];
|
|
80
|
+
export default (function () {
|
|
81
|
+
var _React$useState = React.useState({}),
|
|
82
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
83
|
+
widths = _React$useState2[0],
|
|
84
|
+
setWidths = _React$useState2[1];
|
|
85
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Table, {
|
|
86
|
+
resizable: true,
|
|
87
|
+
columns: columns,
|
|
88
|
+
dataSource: dataSource,
|
|
89
|
+
rowKey: "key",
|
|
90
|
+
pagination: false,
|
|
91
|
+
scroll: {
|
|
92
|
+
x: 1000
|
|
93
|
+
},
|
|
94
|
+
onColumnResizeEnd: function onColumnResizeEnd(width, column) {
|
|
95
|
+
return setWidths(function (current) {
|
|
96
|
+
var _column$key;
|
|
97
|
+
return _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, String((_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : column.dataIndex), width));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}), /*#__PURE__*/React.createElement("p", {
|
|
101
|
+
style: {
|
|
102
|
+
marginTop: 12
|
|
103
|
+
}
|
|
104
|
+
}, "\u6700\u8FD1\u8C03\u6574\uFF1A", Object.keys(widths).length ? Object.entries(widths).map(function (_ref) {
|
|
105
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
106
|
+
key = _ref2[0],
|
|
107
|
+
width = _ref2[1];
|
|
108
|
+
return "".concat(key, "=").concat(width, "px");
|
|
109
|
+
}).join(',') : '拖动表头右边缘试试'));
|
|
110
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { WrapedColumnProps } from '../interface';
|
|
3
|
+
interface UseColumnResizeOptions {
|
|
4
|
+
tableRef: React.RefObject<HTMLTableElement | null>;
|
|
5
|
+
/**
|
|
6
|
+
* Latest leaf columns. Passed as a ref because the columns are themselves
|
|
7
|
+
* derived from `resizedWidths`; depending on the array would make every
|
|
8
|
+
* width change rebuild the drag handlers mid-drag.
|
|
9
|
+
*/
|
|
10
|
+
columnsRef: React.RefObject<WrapedColumnProps[]>;
|
|
11
|
+
onColumnResize?: (width: number, column: WrapedColumnProps) => void;
|
|
12
|
+
onColumnResizeEnd?: (width: number, column: WrapedColumnProps) => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Pointer (and keyboard) driven column resizing.
|
|
16
|
+
*
|
|
17
|
+
* The table normally lets the browser distribute widths (`width: 100%` with an
|
|
18
|
+
* `auto` layout), which means writing a width onto one column would silently
|
|
19
|
+
* steal space from its neighbours. So the first resize interaction snapshots the
|
|
20
|
+
* rendered width of *every* column; from then on the table is fully px
|
|
21
|
+
* controlled and a drag only moves the column it grabbed.
|
|
22
|
+
*/
|
|
23
|
+
export default function useColumnResize({ tableRef, columnsRef, onColumnResize, onColumnResizeEnd, }: UseColumnResizeOptions): {
|
|
24
|
+
resizedWidths: Record<string, number>;
|
|
25
|
+
resizingKey: string | null;
|
|
26
|
+
onResizeStart: (event: React.PointerEvent<HTMLElement>, resizeKey: string) => void;
|
|
27
|
+
onResizeStep: (resizeKey: string, direction: number) => void;
|
|
28
|
+
resetResizedWidths: () => void;
|
|
29
|
+
};
|
|
30
|
+
export {};
|