@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.
Files changed (74) hide show
  1. package/dist/cjs/Button/demo/icon.js +1 -1
  2. package/dist/cjs/Table/demo/resizable.d.ts +3 -0
  3. package/dist/cjs/Table/demo/resizable.js +143 -0
  4. package/dist/cjs/Table/hooks/useColumnResize.d.ts +30 -0
  5. package/dist/cjs/Table/hooks/useColumnResize.js +217 -0
  6. package/dist/cjs/Table/hooks/useColumns.d.ts +3 -1
  7. package/dist/cjs/Table/hooks/useColumns.js +14 -3
  8. package/dist/cjs/Table/interface.d.ts +49 -0
  9. package/dist/cjs/Table/style/index.less +42 -0
  10. package/dist/cjs/Table/table.js +62 -9
  11. package/dist/cjs/Table/theader/cell.js +46 -4
  12. package/dist/cjs/Table/util/index.d.ts +19 -1
  13. package/dist/cjs/Table/util/index.js +22 -0
  14. package/dist/cjs/Tabs/interface.d.ts +1 -1
  15. package/dist/cjs/Tabs/tab-header/index.js +2 -1
  16. package/dist/cjs/locale/interface.d.ts +1 -0
  17. package/dist/cjs/locale/lang/en_US.js +2 -1
  18. package/dist/cjs/locale/lang/ja_JP.js +2 -1
  19. package/dist/cjs/locale/lang/zh_CN.js +2 -1
  20. package/dist/cjs/locale/lang/zh_TW.js +2 -1
  21. package/dist/cjs/style/size.css +1 -0
  22. package/dist/cjs/style/themes.css +1 -1
  23. package/dist/cjs/style/variables.css +2 -1
  24. package/dist/cjs/version.d.ts +1 -1
  25. package/dist/cjs/version.js +1 -1
  26. package/dist/esm/Button/demo/icon.js +7 -4
  27. package/dist/esm/Table/demo/resizable.d.ts +3 -0
  28. package/dist/esm/Table/demo/resizable.js +110 -0
  29. package/dist/esm/Table/hooks/useColumnResize.d.ts +30 -0
  30. package/dist/esm/Table/hooks/useColumnResize.js +206 -0
  31. package/dist/esm/Table/hooks/useColumns.d.ts +3 -1
  32. package/dist/esm/Table/hooks/useColumns.js +9 -4
  33. package/dist/esm/Table/interface.d.ts +49 -0
  34. package/dist/esm/Table/style/index.less +42 -0
  35. package/dist/esm/Table/table.js +83 -13
  36. package/dist/esm/Table/theader/cell.js +38 -3
  37. package/dist/esm/Table/util/index.d.ts +19 -1
  38. package/dist/esm/Table/util/index.js +37 -0
  39. package/dist/esm/Tabs/interface.d.ts +1 -1
  40. package/dist/esm/Tabs/tab-header/index.js +2 -1
  41. package/dist/esm/locale/interface.d.ts +1 -0
  42. package/dist/esm/locale/lang/en_US.js +2 -1
  43. package/dist/esm/locale/lang/ja_JP.js +2 -1
  44. package/dist/esm/locale/lang/zh_CN.js +2 -1
  45. package/dist/esm/locale/lang/zh_TW.js +2 -1
  46. package/dist/esm/style/size.css +1 -0
  47. package/dist/esm/style/themes.css +1 -1
  48. package/dist/esm/style/variables.css +2 -1
  49. package/dist/esm/version.d.ts +1 -1
  50. package/dist/esm/version.js +1 -1
  51. package/dist/umd/yee-c.min.css +2 -2
  52. package/dist/umd/yee-c.min.js +1 -1
  53. package/package.json +1 -1
  54. package/src/Button/demo/icon.tsx +5 -3
  55. package/src/Table/demo/resizable.tsx +106 -0
  56. package/src/Table/hooks/useColumnResize.ts +224 -0
  57. package/src/Table/hooks/useColumns.ts +18 -3
  58. package/src/Table/index.en-US.md +7 -0
  59. package/src/Table/index.zh-CN.md +7 -0
  60. package/src/Table/interface.ts +52 -0
  61. package/src/Table/style/index.less +42 -0
  62. package/src/Table/table-resize.test.tsx +234 -0
  63. package/src/Table/table.tsx +90 -13
  64. package/src/Table/theader/cell.tsx +52 -2
  65. package/src/Table/util/index.ts +44 -1
  66. package/src/Tabs/interface.ts +1 -1
  67. package/src/Tabs/tab-header/index.tsx +2 -1
  68. package/src/locale/interface.ts +1 -0
  69. package/src/locale/lang/en_US.ts +1 -0
  70. package/src/locale/lang/ja_JP.ts +1 -0
  71. package/src/locale/lang/zh_CN.ts +1 -0
  72. package/src/locale/lang/zh_TW.ts +1 -0
  73. package/src/style/size.css +1 -0
  74. package/src/version.ts +1 -1
@@ -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
- minWidth: scroll == null ? void 0 : scroll.x,
377
- tableLayout: (pageData == null ? void 0 : pageData.length) ? tableLayout : void 0
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)(`${prefixCls}-box`, className),
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",
@@ -55,6 +55,7 @@ export interface LocaleTable {
55
55
  sortAscending?: string;
56
56
  sortDescending?: string;
57
57
  sortCancel?: string;
58
+ resizeColumn?: string;
58
59
  }
59
60
  export interface LocalePagination {
60
61
  total?: string;
@@ -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} 件",
@@ -106,7 +106,8 @@ var locale = {
106
106
  selectionNone: "清空当页选择",
107
107
  sortAscending: "点击升序排列",
108
108
  sortDescending: "点击降序排列",
109
- sortCancel: "点击取消排序"
109
+ sortCancel: "点击取消排序",
110
+ resizeColumn: "拖动调整列宽"
110
111
  },
111
112
  pagination: {
112
113
  total: "共 {total} 条",
@@ -106,7 +106,8 @@ var locale = {
106
106
  selectionNone: "清空當頁選擇",
107
107
  sortAscending: "點擊升序排列",
108
108
  sortDescending: "點擊降序排列",
109
- sortCancel: "點擊取消排序"
109
+ sortCancel: "點擊取消排序",
110
+ resizeColumn: "拖動調整欄寬"
110
111
  },
111
112
  pagination: {
112
113
  total: "共 {total} 條",
@@ -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-02T06:10:08.769Z
4
+ * Generated on 2026-09-10T06:30:03.660Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -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-02T06:10:08.769Z
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;
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.10.0";
6
+ export declare const version = "0.11.0";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.10.0";
25
+ var version = "0.11.0";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -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(Button, {
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,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;
@@ -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 {};