@rainbow-oh/yee-c 0.8.12 → 0.8.14

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 (82) hide show
  1. package/dist/cjs/Pagination/style/index.less +4 -0
  2. package/dist/cjs/Spin/demo/types.js +1 -1
  3. package/dist/cjs/Spin/indicator.js +4 -2
  4. package/dist/cjs/Spin/style/index.less +2 -8
  5. package/dist/cjs/Table/col-group.d.ts +2 -2
  6. package/dist/cjs/Table/col-group.js +1 -1
  7. package/dist/cjs/Table/demo/sorter-callback.js +3 -2
  8. package/dist/cjs/Table/demo/sorter.js +3 -2
  9. package/dist/cjs/Table/hooks/useExpand.d.ts +2 -2
  10. package/dist/cjs/Table/hooks/useFilter.d.ts +8 -2
  11. package/dist/cjs/Table/hooks/useFilter.js +36 -22
  12. package/dist/cjs/Table/hooks/usePagination.js +8 -8
  13. package/dist/cjs/Table/hooks/useSelection.d.ts +3 -3
  14. package/dist/cjs/Table/hooks/useSelection.js +8 -9
  15. package/dist/cjs/Table/hooks/useSorter.d.ts +6 -3
  16. package/dist/cjs/Table/hooks/useSorter.js +193 -87
  17. package/dist/cjs/Table/interface.d.ts +10 -7
  18. package/dist/cjs/Table/table.js +51 -45
  19. package/dist/cjs/Table/tbody/index.js +13 -5
  20. package/dist/cjs/Table/tbody/lazy-row.js +6 -3
  21. package/dist/cjs/Table/tbody/row.js +5 -4
  22. package/dist/cjs/Table/theader/cell.js +4 -0
  23. package/dist/cjs/Table/theader/filter.js +52 -20
  24. package/dist/cjs/Table/util/index.js +5 -3
  25. package/dist/cjs/style/themes.css +1 -1
  26. package/dist/cjs/style/variables.css +1 -1
  27. package/dist/cjs/version.d.ts +1 -1
  28. package/dist/cjs/version.js +1 -1
  29. package/dist/esm/Pagination/style/index.less +4 -0
  30. package/dist/esm/Spin/demo/types.js +6 -3
  31. package/dist/esm/Spin/indicator.js +4 -2
  32. package/dist/esm/Spin/style/index.less +2 -8
  33. package/dist/esm/Table/col-group.d.ts +2 -2
  34. package/dist/esm/Table/col-group.js +1 -1
  35. package/dist/esm/Table/demo/sorter-callback.js +3 -2
  36. package/dist/esm/Table/demo/sorter.js +3 -2
  37. package/dist/esm/Table/hooks/useExpand.d.ts +2 -2
  38. package/dist/esm/Table/hooks/useFilter.d.ts +8 -2
  39. package/dist/esm/Table/hooks/useFilter.js +52 -32
  40. package/dist/esm/Table/hooks/usePagination.js +8 -10
  41. package/dist/esm/Table/hooks/useSelection.d.ts +3 -3
  42. package/dist/esm/Table/hooks/useSelection.js +16 -11
  43. package/dist/esm/Table/hooks/useSorter.d.ts +6 -3
  44. package/dist/esm/Table/hooks/useSorter.js +218 -105
  45. package/dist/esm/Table/interface.d.ts +10 -7
  46. package/dist/esm/Table/table.js +42 -47
  47. package/dist/esm/Table/tbody/index.js +8 -5
  48. package/dist/esm/Table/tbody/lazy-row.js +7 -3
  49. package/dist/esm/Table/tbody/row.js +7 -6
  50. package/dist/esm/Table/theader/cell.js +7 -1
  51. package/dist/esm/Table/theader/filter.js +75 -27
  52. package/dist/esm/Table/util/index.js +6 -3
  53. package/dist/esm/style/themes.css +1 -1
  54. package/dist/esm/style/variables.css +1 -1
  55. package/dist/esm/version.d.ts +1 -1
  56. package/dist/esm/version.js +1 -1
  57. package/dist/umd/yee-c.min.css +1 -1
  58. package/dist/umd/yee-c.min.js +1 -1
  59. package/package.json +1 -1
  60. package/src/Pagination/style/index.less +4 -0
  61. package/src/Spin/demo/types.tsx +3 -3
  62. package/src/Spin/index.en-US.md +2 -8
  63. package/src/Spin/index.zh-CN.md +2 -8
  64. package/src/Spin/indicator.tsx +2 -0
  65. package/src/Spin/style/index.less +2 -8
  66. package/src/Table/col-group.tsx +1 -1
  67. package/src/Table/demo/sorter-callback.tsx +3 -2
  68. package/src/Table/demo/sorter.tsx +3 -2
  69. package/src/Table/hooks/useExpand.ts +3 -3
  70. package/src/Table/hooks/useFilter.ts +47 -23
  71. package/src/Table/hooks/usePagination.ts +9 -10
  72. package/src/Table/hooks/useSelection.ts +18 -20
  73. package/src/Table/hooks/useSorter.ts +236 -82
  74. package/src/Table/interface.ts +19 -7
  75. package/src/Table/table.tsx +54 -49
  76. package/src/Table/tbody/index.tsx +14 -5
  77. package/src/Table/tbody/lazy-row.tsx +6 -3
  78. package/src/Table/tbody/row.tsx +5 -4
  79. package/src/Table/theader/cell.tsx +10 -0
  80. package/src/Table/theader/filter.tsx +64 -22
  81. package/src/Table/util/index.ts +3 -1
  82. package/src/version.ts +1 -1
@@ -23,7 +23,7 @@ export interface ExpandableType {
23
23
  /**
24
24
  * Default expanded rows
25
25
  */
26
- defaultExpandedRowKeys?: string[];
26
+ defaultExpandedRowKeys?: SelectionKeyType[];
27
27
  /**
28
28
  * Expanded rows
29
29
  */
@@ -51,6 +51,7 @@ export interface ExpandableType {
51
51
  expandedRowRender?: (record: object, index: number, page: Record<string, any>) => React.ReactNode;
52
52
  }
53
53
  export type SelectionKeyType = string | number;
54
+ export type FilterValue = string | number;
54
55
  export type ColumnSemanticType = 'inner' | 'action';
55
56
  export interface HeadCellProps extends Omit<WrapedColumnProps, 'title'> {
56
57
  prefixCls?: string;
@@ -186,7 +187,7 @@ export interface ColumnProps {
186
187
  /**
187
188
  * Filter callback function
188
189
  */
189
- onFilter?: (value: string, record: Record<string, any>) => boolean;
190
+ onFilter?: (value: FilterValue, record: Record<string, any>) => boolean;
190
191
  };
191
192
  /**
192
193
  * Sorter config
@@ -195,9 +196,10 @@ export interface ColumnProps {
195
196
  /**
196
197
  * Sort function
197
198
  */
198
- sort?: () => number | boolean;
199
+ sort?: (a: Record<string, unknown>, b: Record<string, unknown>) => number;
199
200
  /**
200
- * Whether to support multi-column sort, if set to a number, it indicates the number of sortable columns
201
+ * Enable multi-column sorting. A positive number limits the active
202
+ * sorters; when exceeded, the earliest activated sorter is removed.
201
203
  */
202
204
  multiple?: boolean | number;
203
205
  /**
@@ -359,6 +361,7 @@ export interface TableRowProps {
359
361
  pageSize: number;
360
362
  index: number;
361
363
  record: Record<string, any>;
364
+ rowKeyValue: SelectionKeyType;
362
365
  columns: ColumnProps[];
363
366
  expandable?: ExpandableType;
364
367
  expandedRowKeys?: Array<string | number>;
@@ -375,7 +378,7 @@ export interface TableRowProps {
375
378
  record: Record<string, any>;
376
379
  index: number;
377
380
  }) => void;
378
- onSelectionChange: (event: ChangeEvent<HTMLInputElement>) => void;
381
+ onSelectionChange: (event: ChangeEvent<HTMLInputElement>, key: SelectionKeyType) => void;
379
382
  }
380
383
  type LazyLoadType = {
381
384
  lazyLoadRows?: number;
@@ -389,7 +392,7 @@ export interface LazyRowProps extends TableRowProps {
389
392
  };
390
393
  lazyLoad?: boolean | LazyLoadType;
391
394
  }
392
- export interface TableBodyProps extends Omit<LazyRowProps, 'index' | 'record'> {
395
+ export interface TableBodyProps extends Omit<LazyRowProps, 'index' | 'record' | 'rowKeyValue'> {
393
396
  pageData: Array<Record<string, any>>;
394
397
  noData?: React.ReactNode;
395
398
  }
@@ -542,7 +545,7 @@ export interface TableProps extends FooterProps, Omit<HeaderProps, 'pageData'>,
542
545
  * Set the unique key for rows
543
546
  * @default id
544
547
  */
545
- rowKey?: string | ((record: Record<string, any>) => string);
548
+ rowKey?: string | ((record: Record<string, any>) => SelectionKeyType);
546
549
  /**
547
550
  * Summary bar
548
551
  */
@@ -93,10 +93,19 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
93
93
 
94
94
  // Filter
95
95
  var _useFilter = useFilter({
96
- data: dataSource
96
+ data: dataSource,
97
+ columns: wrapedColumns
97
98
  }),
98
99
  filteredData = _useFilter.data,
100
+ filterRecords = _useFilter.filterRecords,
99
101
  onFilterInternal = _useFilter.onFilter;
102
+ var filters = useMemo(function () {
103
+ return Object.fromEntries(filterRecords.map(function (_ref) {
104
+ var dataIndex = _ref.dataIndex,
105
+ value = _ref.value;
106
+ return [dataIndex, value];
107
+ }));
108
+ }, [filterRecords]);
100
109
 
101
110
  // Sort
102
111
  var _useSorter = useSorter({
@@ -105,7 +114,7 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
105
114
  }),
106
115
  sortedData = _useSorter.data,
107
116
  sorters = _useSorter.sorters,
108
- onSort = _useSorter.onSort;
117
+ onSortInternal = _useSorter.onSort;
109
118
  // Pagination
110
119
  var _usePagination = usePagination({
111
120
  data: sortedData,
@@ -114,8 +123,7 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
114
123
  onChange({
115
124
  pagination: info,
116
125
  sorter: sorters,
117
- filters: undefined,
118
- // TODO: Extract filter info from onFilterInternal
126
+ filters: filters,
119
127
  currentDataSource: sortedData,
120
128
  action: 'paginate'
121
129
  });
@@ -125,6 +133,19 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
125
133
  current = _usePagination.current,
126
134
  pageSize = _usePagination.pageSize,
127
135
  pagination = _usePagination.pagination;
136
+ var handleSort = React.useCallback(function (dataIndex) {
137
+ var next = onSortInternal(dataIndex);
138
+ onChange === null || onChange === void 0 || onChange({
139
+ pagination: pagination === false ? undefined : {
140
+ current: current,
141
+ pageSize: pageSize
142
+ },
143
+ sorter: next.sorters,
144
+ filters: filters,
145
+ currentDataSource: next.data,
146
+ action: 'sort'
147
+ });
148
+ }, [onSortInternal, onChange, pagination, current, pageSize, filters]);
128
149
 
129
150
  // Expanded row data
130
151
  var _useExpand = useExpand(expandable, allKeys, getRowKey),
@@ -142,8 +163,8 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
142
163
  onCheckAll = _useSelection.onCheckAll,
143
164
  onSelectionChange = _useSelection.onChange;
144
165
 
145
- // Track previous values to determine what action triggered onChange
146
- var prevSortersRef = useRef({});
166
+ // Track filter changes to emit onChange after filtered data is recalculated
167
+ var prevFilterRecordsRef = useRef(filterRecords);
147
168
  var contentWrapperRef = useRef(null);
148
169
  var contentRef = useRef(null);
149
170
  var _React$useState = React.useState({
@@ -168,47 +189,21 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
168
189
  return current.left === next.left && current.right === next.right ? current : next;
169
190
  });
170
191
  }, []);
171
-
172
- // Wrap onFilter to trigger onChange
173
- var onFilter = React.useCallback(function () {
174
- onFilterInternal.apply(void 0, arguments);
175
- // Trigger onChange for filter action
176
- if (onChange) {
177
- onChange({
178
- pagination: pagination === false ? undefined : {
179
- current: current,
180
- pageSize: pageSize
181
- },
182
- sorter: sorters,
183
- filters: undefined,
184
- // TODO: Extract filter info from args
185
- currentDataSource: filteredData,
186
- action: 'filter'
187
- });
188
- }
189
- }, [onChange, pagination, current, pageSize, sorters, filteredData, onFilterInternal]);
190
-
191
- // Trigger onChange when sorter, pagination, or filter changes
192
192
  useEffect(function () {
193
+ if (prevFilterRecordsRef.current === filterRecords) return;
194
+ prevFilterRecordsRef.current = filterRecords;
193
195
  if (!onChange) return;
194
-
195
- // Check if sorters changed
196
- var sortersChanged = JSON.stringify(prevSortersRef.current) !== JSON.stringify(sorters);
197
- if (sortersChanged && prevSortersRef.current !== sorters) {
198
- prevSortersRef.current = sorters;
199
- onChange({
200
- pagination: pagination === false ? undefined : {
201
- current: current,
202
- pageSize: pageSize
203
- },
204
- sorter: sorters,
205
- filters: undefined,
206
- currentDataSource: sortedData,
207
- action: 'sort'
208
- });
209
- return;
210
- }
211
- }, [sorters, current, pageSize, pageData, sortedData, onChange]);
196
+ onChange({
197
+ pagination: pagination === false ? undefined : {
198
+ current: current,
199
+ pageSize: pageSize
200
+ },
201
+ sorter: sorters,
202
+ filters: filters,
203
+ currentDataSource: sortedData,
204
+ action: 'filter'
205
+ });
206
+ }, [filterRecords, filters, sortedData, pagination, current, pageSize, sorters, onChange]);
212
207
  useEffect(function () {
213
208
  updateHorizontalScroll();
214
209
  var wrapper = contentWrapperRef.current;
@@ -246,9 +241,9 @@ var Table = /*#__PURE__*/React.forwardRef(function (baseprops, ref) {
246
241
  headerRows: headerRows,
247
242
  checkedAll: checkedAll,
248
243
  sorters: sorters,
249
- onSort: onSort,
244
+ onSort: handleSort,
250
245
  onCheckAll: onCheckAll,
251
- onInternalFilter: onFilter
246
+ onInternalFilter: onFilterInternal
252
247
  }));
253
248
  };
254
249
  var renderTBody = function renderTBody() {
@@ -39,26 +39,29 @@ var TableBody = function TableBody(props) {
39
39
  if (lazyLoad) {
40
40
  return /*#__PURE__*/React.createElement(LazyRow, _extends({}, rest, {
41
41
  pageData: pageData,
42
- columns: columns
42
+ columns: columns,
43
+ resolveRowKey: resolveRowKey
43
44
  }));
44
45
  }
45
46
  return pageData.map(function (record, index) {
47
+ var resolvedRowKey = resolveRowKey(record);
48
+
46
49
  // 整行接管:由外部组件渲染 <tr> + 单元格(可放拖拽手柄等)
47
50
  if (RowRenderer) {
48
- var rk = resolveRowKey(record);
49
51
  return /*#__PURE__*/React.createElement(RowRenderer, {
50
- key: rk !== null && rk !== void 0 ? rk : index,
52
+ key: resolvedRowKey !== null && resolvedRowKey !== void 0 ? resolvedRowKey : index,
51
53
  record: record,
52
54
  index: index,
53
55
  columns: columns,
54
- rowKey: rk
56
+ rowKey: resolvedRowKey
55
57
  });
56
58
  }
57
59
  return /*#__PURE__*/React.createElement(TableRow, _extends({}, rest, {
58
60
  columns: columns,
59
61
  record: record,
62
+ rowKeyValue: resolvedRowKey,
60
63
  index: index,
61
- key: "row-".concat(record.key || index)
64
+ key: resolvedRowKey !== null && resolvedRowKey !== void 0 ? resolvedRowKey : "row-".concat(index)
62
65
  }));
63
66
  });
64
67
  };
@@ -1,4 +1,4 @@
1
- var _excluded = ["range", "pageData", "columns"];
1
+ var _excluded = ["range", "pageData", "columns", "resolveRowKey"];
2
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
3
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
4
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
@@ -17,6 +17,7 @@ var LazyRow = function LazyRow(props) {
17
17
  var range = props.range,
18
18
  pageData = props.pageData,
19
19
  columns = props.columns,
20
+ resolveRowKey = props.resolveRowKey,
20
21
  rest = _objectWithoutProperties(props, _excluded);
21
22
  var start = range.start,
22
23
  end = range.end;
@@ -25,11 +26,14 @@ var LazyRow = function LazyRow(props) {
25
26
  var startBlank = createBlank(start, 'row-start');
26
27
  result = result.concat(startBlank);
27
28
  for (var i = start; i < (end > pl ? pl : end); i++) {
29
+ var record = pageData[i];
30
+ var rowKeyValue = resolveRowKey(record);
28
31
  result.push( /*#__PURE__*/React.createElement(TableRow, _extends({}, rest, {
29
32
  columns: columns,
30
- record: pageData[i],
33
+ record: record,
34
+ rowKeyValue: rowKeyValue,
31
35
  index: i,
32
- key: 'row-' + i
36
+ key: rowKeyValue !== null && rowKeyValue !== void 0 ? rowKeyValue : "row-".concat(i)
33
37
  })));
34
38
  }
35
39
  var maxLength = end > pl ? 0 : pl - end;
@@ -1,5 +1,5 @@
1
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
- var _excluded = ["index", "record", "columns", "highlight", "stripe", "expandedKeyType", "expandedRowKeys", "selectedRowKeys", "expandable", "onExpand", "onRow", "rowClassName", "rowStyle", "onDoubleClick", "onSelectionChange"];
2
+ var _excluded = ["index", "record", "rowKeyValue", "columns", "highlight", "stripe", "expandedKeyType", "expandedRowKeys", "selectedRowKeys", "expandable", "onExpand", "onRow", "rowClassName", "rowStyle", "onDoubleClick", "onSelectionChange"];
3
3
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
4
  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; }
5
5
  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; }
@@ -20,6 +20,7 @@ import { TableCtx } from "../table";
20
20
  var TableRow = function TableRow(props) {
21
21
  var index = props.index,
22
22
  record = props.record,
23
+ rowKeyValue = props.rowKeyValue,
23
24
  columns = props.columns,
24
25
  highlight = props.highlight,
25
26
  stripe = props.stripe,
@@ -35,9 +36,8 @@ var TableRow = function TableRow(props) {
35
36
  onSelectionChange = props.onSelectionChange,
36
37
  rest = _objectWithoutProperties(props, _excluded);
37
38
  var _useContext = useContext(TableCtx),
38
- prefixCls = _useContext.prefixCls,
39
- rowKey = _useContext.rowKey;
40
- var expanded = expandedRowKeys === null || expandedRowKeys === void 0 ? void 0 : expandedRowKeys.includes(expandedKeyType === 'index' ? index + 1 : record[rowKey]);
39
+ prefixCls = _useContext.prefixCls;
40
+ var expanded = expandedRowKeys === null || expandedRowKeys === void 0 ? void 0 : expandedRowKeys.includes(expandedKeyType === 'index' ? index + 1 : rowKeyValue);
41
41
  var high = React.useMemo(function () {
42
42
  if (typeof highlight === 'undefined') return false;
43
43
  if (highlight === 'odd') {
@@ -59,7 +59,6 @@ var TableRow = function TableRow(props) {
59
59
  var type = column.type,
60
60
  colDisabled = column.disabled,
61
61
  onCell = column.onCell;
62
- var rowKeyValue = record[rowKey];
63
62
  var props = (onCell === null || onCell === void 0 ? void 0 : onCell(record, index)) || {};
64
63
  var checked = selectedRowKeys === null || selectedRowKeys === void 0 ? void 0 : selectedRowKeys.includes(rowKeyValue);
65
64
 
@@ -72,7 +71,9 @@ var TableRow = function TableRow(props) {
72
71
  var commonProps = _objectSpread({
73
72
  checked: checked,
74
73
  value: rowKeyValue,
75
- onChange: onSelectionChange,
74
+ onChange: function onChange(event) {
75
+ return onSelectionChange(event, rowKeyValue);
76
+ },
76
77
  disabled: disabled
77
78
  }, props);
78
79
  if (type === 'checkbox') {
@@ -1,4 +1,3 @@
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
1
  var _excluded = ["fixed", "isFixedLeftLast", "isFixedRightFirst", "align", "title", "dataIndex", "sorter", "filter", "sorters", "className", "styles", "classNames", "showSorterTooltip", "tableActionBarShowOnHover", "internalFilters", "style", "width", "colSpan", "rowSpan", "onHeaderCell", "onSort", "onInternalFilter"];
3
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; }
4
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; }
@@ -6,6 +5,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
6
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
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); }
8
7
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
8
+ 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); }
9
9
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
10
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
11
  import clsx from 'clsx';
@@ -52,12 +52,18 @@ var HeadCell = function HeadCell(props) {
52
52
  // Convert -1 to 2 for UI display (2 = descend)
53
53
  var sortOrder = dataIndex && (sorters === null || sorters === void 0 ? void 0 : sorters[dataIndex]) || 0;
54
54
  var displaySortOrder = sortOrder === -1 ? 2 : sortOrder;
55
+ var currentSortOrder = sortOrder === 1 ? 'ascend' : sortOrder === -1 ? 'descend' : null;
55
56
  var handleSort = function handleSort() {
56
57
  if (dataIndex && onSort) {
57
58
  onSort(dataIndex, sorter);
58
59
  }
59
60
  };
60
61
  var renderSort = function renderSort() {
62
+ if (_typeof(sorter) === 'object' && sorter.icon) {
63
+ return /*#__PURE__*/React.createElement("span", {
64
+ className: "".concat(prefixCls, "-column-sorter")
65
+ }, sorter.icon(currentSortOrder));
66
+ }
61
67
  var trigger = /*#__PURE__*/React.createElement("span", {
62
68
  className: "".concat(prefixCls, "-column-sorter")
63
69
  }, /*#__PURE__*/React.createElement(ArrowIcon, {
@@ -1,3 +1,7 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1
5
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
6
  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."); }
3
7
  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); }
@@ -21,6 +25,15 @@ var getStrLower = function getStrLower(str) {
21
25
  }
22
26
  return str;
23
27
  };
28
+ var areFilterValuesEqual = function areFilterValuesEqual(a, b) {
29
+ if (!Array.isArray(a) || !Array.isArray(b)) return a === b;
30
+ return a.length === b.length && a.every(function (value, index) {
31
+ return value === b[index];
32
+ });
33
+ };
34
+ var hasFilterValue = function hasFilterValue(value) {
35
+ return Array.isArray(value) ? value.length > 0 : value !== '';
36
+ };
24
37
  var HeaderFilter = /*#__PURE__*/React.memo(function (props) {
25
38
  var filter = props.filter,
26
39
  column = props.column,
@@ -32,19 +45,35 @@ var HeaderFilter = /*#__PURE__*/React.memo(function (props) {
32
45
  locale = _useLocale.locale;
33
46
  var tableLocale = locale.table;
34
47
  var dataIndex = column.dataIndex;
48
+ var items = filter.items,
49
+ icon = filter.icon,
50
+ _filter$searchable = filter.searchable,
51
+ searchable = _filter$searchable === void 0 ? true : _filter$searchable,
52
+ _filter$filterMode = filter.filterMode,
53
+ filterMode = _filter$filterMode === void 0 ? 'menu' : _filter$filterMode,
54
+ filtered = filter.filtered,
55
+ _filter$filterOnClose = filter.filterOnClose,
56
+ filterOnClose = _filter$filterOnClose === void 0 ? true : _filter$filterOnClose,
57
+ render = filter.render;
35
58
  var inputRef = useRef(null);
36
- var _useState = useState(false),
59
+ var initialValue = items ? [] : '';
60
+ var committedValueRef = useRef(initialValue);
61
+ var _useState = useState(initialValue),
37
62
  _useState2 = _slicedToArray(_useState, 2),
38
- open = _useState2[0],
39
- setOpen = _useState2[1];
40
- var _useState3 = useState([]),
63
+ committedValue = _useState2[0],
64
+ setCommittedValue = _useState2[1];
65
+ var _useState3 = useState(false),
41
66
  _useState4 = _slicedToArray(_useState3, 2),
42
- selectNodes = _useState4[0],
43
- setSelectNodes = _useState4[1];
44
- var _useState5 = useState(''),
67
+ open = _useState4[0],
68
+ setOpen = _useState4[1];
69
+ var _useState5 = useState([]),
45
70
  _useState6 = _slicedToArray(_useState5, 2),
46
- searchValue = _useState6[0],
47
- setSearchValue = _useState6[1];
71
+ selectNodes = _useState6[0],
72
+ setSelectNodes = _useState6[1];
73
+ var _useState7 = useState(''),
74
+ _useState8 = _slicedToArray(_useState7, 2),
75
+ searchValue = _useState8[0],
76
+ setSearchValue = _useState8[1];
48
77
  useEffect(function () {
49
78
  if (!open) return;
50
79
  var raf = requestAnimationFrame(function () {
@@ -65,31 +94,40 @@ var HeaderFilter = /*#__PURE__*/React.memo(function (props) {
65
94
  // setSelectNodes(node);
66
95
  // };
67
96
 
68
- var reset = function reset() {
69
- setSearchValue('');
70
- setSelectNodes([]);
97
+ var getCurrentValue = function getCurrentValue(type) {
98
+ return type === 'search' ? searchValue : selectNodes;
99
+ };
100
+ var commitValue = function commitValue(value) {
101
+ var committed = Array.isArray(value) ? _toConsumableArray(value) : value;
102
+ committedValueRef.current = committed;
103
+ setCommittedValue(committed);
104
+ };
105
+ var applyFilter = function applyFilter(type) {
106
+ var value = getCurrentValue(type);
107
+ commitValue(value);
71
108
  onInternalFilter({
72
109
  dataIndex: dataIndex,
73
- value: '',
110
+ value: value,
111
+ type: type,
74
112
  column: column
75
113
  });
76
114
  };
77
- var ok = function ok(type) {
115
+ var reset = function reset() {
116
+ var value = items ? [] : '';
117
+ setSearchValue('');
118
+ setSelectNodes([]);
119
+ commitValue(value);
78
120
  onInternalFilter({
79
121
  dataIndex: dataIndex,
80
- value: type === 'search' ? searchValue : selectNodes,
81
- type: type,
122
+ value: value,
82
123
  column: column
83
124
  });
125
+ };
126
+ var ok = function ok(type) {
127
+ applyFilter(type);
84
128
  setOpen(false);
85
129
  };
86
130
  var popup;
87
- var items = filter.items,
88
- icon = filter.icon,
89
- _filter$searchable = filter.searchable,
90
- searchable = _filter$searchable === void 0 ? true : _filter$searchable,
91
- _filter$filterMode = filter.filterMode,
92
- filterMode = _filter$filterMode === void 0 ? 'menu' : _filter$filterMode;
93
131
  var searchInputNode = searchable ? /*#__PURE__*/React.createElement(Input, {
94
132
  prefix: /*#__PURE__*/React.createElement(Search, {
95
133
  size: 14,
@@ -105,7 +143,9 @@ var HeaderFilter = /*#__PURE__*/React.memo(function (props) {
105
143
  size: "small",
106
144
  ref: inputRef
107
145
  }) : null;
108
- if (items) {
146
+ if (render) {
147
+ popup = render();
148
+ } else if (items) {
109
149
  var dataSource = [];
110
150
  var inputValue = getStrLower(searchValue);
111
151
  var filteredItems = inputValue ? items.filter(function (item) {
@@ -176,11 +216,19 @@ var HeaderFilter = /*#__PURE__*/React.memo(function (props) {
176
216
  } else {
177
217
  return null;
178
218
  }
179
- var handleOpenChange = function handleOpenChange(o) {
180
- setOpen(o);
219
+ var handleOpenChange = function handleOpenChange(nextOpen) {
220
+ if (!nextOpen && open && filterOnClose && !render) {
221
+ var type = items ? 'filter' : 'search';
222
+ var value = getCurrentValue(type);
223
+ if (!areFilterValuesEqual(value, committedValueRef.current)) {
224
+ applyFilter(type);
225
+ }
226
+ }
227
+ setOpen(nextOpen);
181
228
  };
229
+ var isFiltered = filtered !== null && filtered !== void 0 ? filtered : hasFilterValue(committedValue);
182
230
  var renderTrigger = function renderTrigger() {
183
- var trigger = typeof icon === 'function' ? icon() : /*#__PURE__*/React.createElement(Button, {
231
+ var trigger = typeof icon === 'function' ? icon(isFiltered) : /*#__PURE__*/React.createElement(Button, {
184
232
  icon: items ? /*#__PURE__*/React.createElement(ListFilter, {
185
233
  size: 14,
186
234
  strokeWidth: 1.5
@@ -188,7 +236,7 @@ var HeaderFilter = /*#__PURE__*/React.memo(function (props) {
188
236
  size: 14,
189
237
  strokeWidth: 1.5
190
238
  }),
191
- variant: selectNodes.length || searchValue ? 'filled' : undefined,
239
+ variant: isFiltered ? 'filled' : undefined,
192
240
  type: "text",
193
241
  size: "small"
194
242
  });
@@ -10,11 +10,14 @@ export function handleColumns(columns) {
10
10
  for (var i = 0; i < columns.length; i++) {
11
11
  var col = columns[i] || {};
12
12
  if (col.fixed === true || col.fixed === 'left') {
13
+ var _columns;
13
14
  col.fixed = 'left';
14
15
  col.style = _objectSpread(_objectSpread({}, col.style), {}, {
15
16
  left: leftWidthCount
16
17
  });
17
- if (!columns[i + 1].fixed) {
18
+ var nextFixed = (_columns = columns[i + 1]) === null || _columns === void 0 ? void 0 : _columns.fixed;
19
+ var nextIsFixedLeft = nextFixed === true || nextFixed === 'left';
20
+ if (!nextIsFixedLeft) {
18
21
  col.isFixedLeftLast = true;
19
22
  }
20
23
  leftWidthCount = leftWidthCount + (col.width ? parseFloat(col.width) : 0);
@@ -23,11 +26,11 @@ export function handleColumns(columns) {
23
26
  for (var j = columns.length - 1; j >= 0; j--) {
24
27
  var _col = columns[j] || {};
25
28
  if (_col.fixed === 'right') {
26
- var _columns;
29
+ var _columns2;
27
30
  _col.style = _objectSpread(_objectSpread({}, _col.style), {}, {
28
31
  right: rightWidthCount
29
32
  });
30
- if (((_columns = columns[j - 1]) === null || _columns === void 0 ? void 0 : _columns.fixed) !== 'right') {
33
+ if (((_columns2 = columns[j - 1]) === null || _columns2 === void 0 ? void 0 : _columns2.fixed) !== 'right') {
31
34
  _col.isFixedRightFirst = true;
32
35
  }
33
36
  rightWidthCount = rightWidthCount + (_col.width ? parseFloat(_col.width) : 0);
@@ -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-07-29T04:29:09.688Z
4
+ * Generated on 2026-07-30T09:31:08.775Z
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-07-29T04:29:09.688Z
4
+ * Generated on 2026-07-30T09:31:08.775Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.8.12";
6
+ export declare const version = "0.8.14";
@@ -1,4 +1,4 @@
1
- export var version = "0.8.12";
1
+ export var version = "0.8.14";
2
2
  if (typeof window !== 'undefined') {
3
3
  window.__yee_c_version__ = version;
4
4
  }