@rainbow-oh/yee-c 0.14.7 → 0.15.1

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 (60) hide show
  1. package/dist/cjs/Form/index.d.ts +1 -1
  2. package/dist/cjs/Input/style/index.less +1 -0
  3. package/dist/cjs/InputNumber/demo/basic.js +1 -1
  4. package/dist/cjs/InputNumber/input-number.js +17 -4
  5. package/dist/cjs/InputNumber/interface.d.ts +3 -3
  6. package/dist/cjs/InputNumber/style/index.less +1 -0
  7. package/dist/cjs/Select/hooks/useSelectKeyboard.js +5 -2
  8. package/dist/cjs/Selector/selector.js +6 -3
  9. package/dist/cjs/TableSelect/hooks/useTableSelectKeyboard.d.ts +27 -0
  10. package/dist/cjs/TableSelect/hooks/useTableSelectKeyboard.js +128 -0
  11. package/dist/cjs/TableSelect/interface.d.ts +9 -4
  12. package/dist/cjs/TableSelect/internal-table.js +27 -14
  13. package/dist/cjs/TableSelect/style/index.less +3 -11
  14. package/dist/cjs/TableSelect/table-select.js +40 -3
  15. package/dist/cjs/style/size.css +1 -1
  16. package/dist/cjs/style/themes.css +1 -1
  17. package/dist/cjs/style/variables.css +2 -2
  18. package/dist/cjs/version.d.ts +1 -1
  19. package/dist/cjs/version.js +1 -1
  20. package/dist/esm/Form/index.d.ts +1 -1
  21. package/dist/esm/Input/style/index.less +1 -0
  22. package/dist/esm/InputNumber/demo/basic.js +1 -1
  23. package/dist/esm/InputNumber/input-number.js +20 -4
  24. package/dist/esm/InputNumber/interface.d.ts +3 -3
  25. package/dist/esm/InputNumber/style/index.less +1 -0
  26. package/dist/esm/Select/hooks/useSelectKeyboard.js +7 -2
  27. package/dist/esm/Selector/selector.js +10 -5
  28. package/dist/esm/TableSelect/hooks/useTableSelectKeyboard.d.ts +27 -0
  29. package/dist/esm/TableSelect/hooks/useTableSelectKeyboard.js +132 -0
  30. package/dist/esm/TableSelect/interface.d.ts +9 -4
  31. package/dist/esm/TableSelect/internal-table.js +6 -2
  32. package/dist/esm/TableSelect/style/index.less +3 -11
  33. package/dist/esm/TableSelect/table-select.js +36 -3
  34. package/dist/esm/style/size.css +1 -1
  35. package/dist/esm/style/themes.css +1 -1
  36. package/dist/esm/style/variables.css +2 -2
  37. package/dist/esm/version.d.ts +1 -1
  38. package/dist/esm/version.js +1 -1
  39. package/dist/umd/yee-c.min.css +2 -2
  40. package/dist/umd/yee-c.min.js +1 -1
  41. package/package.json +1 -1
  42. package/src/Form/index.ts +4 -0
  43. package/src/Input/style/index.less +1 -0
  44. package/src/InputNumber/demo/basic.tsx +1 -1
  45. package/src/InputNumber/index.en-US.md +2 -2
  46. package/src/InputNumber/index.zh-CN.md +2 -2
  47. package/src/InputNumber/input-number.tsx +27 -6
  48. package/src/InputNumber/interface.ts +3 -3
  49. package/src/InputNumber/style/index.less +1 -0
  50. package/src/Select/hooks/useSelectKeyboard.ts +7 -2
  51. package/src/Selector/selector.tsx +10 -5
  52. package/src/TableSelect/hooks/useTableSelectKeyboard.ts +141 -0
  53. package/src/TableSelect/index.en-US.md +47 -44
  54. package/src/TableSelect/index.zh-CN.md +47 -44
  55. package/src/TableSelect/interface.ts +9 -4
  56. package/src/TableSelect/internal-table.tsx +14 -6
  57. package/src/TableSelect/style/index.less +3 -11
  58. package/src/TableSelect/table-select.tsx +45 -3
  59. package/src/style/size.css +1 -1
  60. package/src/version.ts +1 -1
@@ -7,7 +7,7 @@ import { InternalTableProps } from './interface';
7
7
 
8
8
  type SelectedKeyType = string | number;
9
9
 
10
- type InDataType = {
10
+ type TableSelectDataType = {
11
11
  [propName: string]: any;
12
12
  };
13
13
 
@@ -22,12 +22,13 @@ const InternalTable: React.FC<InternalTableProps> = (props) => {
22
22
  isShowFilter = true,
23
23
  rowSelection = {},
24
24
  visible,
25
+ popupRef: externalPopupRef,
25
26
  ...rest
26
27
  } = props;
27
28
 
28
- const [internalDataSource, setInternalDataSource] = useState<InDataType[]>(
29
- [],
30
- );
29
+ const [internalDataSource, setInternalDataSource] = useState<
30
+ TableSelectDataType[]
31
+ >([]);
31
32
  const renderRowSelection = { type, selectedRowKeys: value, ...rowSelection };
32
33
 
33
34
  useEffect(() => {
@@ -45,7 +46,7 @@ const InternalTable: React.FC<InternalTableProps> = (props) => {
45
46
  setInternalDataSource(dataSource);
46
47
  } else {
47
48
  setInternalDataSource(
48
- dataSource.filter((data: InDataType) =>
49
+ dataSource.filter((data: TableSelectDataType) =>
49
50
  (selectedRowKeys as SelectedKeyType[])?.includes(
50
51
  typeof rowKey === 'function' ? rowKey(data) : data[rowKey],
51
52
  ),
@@ -76,7 +77,14 @@ const InternalTable: React.FC<InternalTableProps> = (props) => {
76
77
  return null;
77
78
  };
78
79
  return (
79
- <div className={`${prefixCls}-popup`} tabIndex={0} ref={popupRef}>
80
+ <div
81
+ className={`${prefixCls}-popup`}
82
+ tabIndex={0}
83
+ ref={(node) => {
84
+ popupRef.current = node;
85
+ if (externalPopupRef) externalPopupRef.current = node;
86
+ }}
87
+ >
80
88
  {renderRadio()}
81
89
  <Table
82
90
  {...rest}
@@ -6,16 +6,8 @@
6
6
  margin: 0;
7
7
  padding: 12px 0;
8
8
 
9
- .rb-table-select__radio {
10
- padding: 0 12px;
11
- margin-bottom: 16px;
12
- }
13
- }
14
-
15
- .rb-table-select {
16
- margin-bottom: 0;
17
-
18
- .rb-table-footer-operate {
19
- padding: 0 12px;
9
+ // Keyboard-navigated row (TableSelect arrow keys)
10
+ .yee-table-highlight-row {
11
+ background-color: var(--yee-table-tbody-tr-hover-bg-color);
20
12
  }
21
13
  }
@@ -9,6 +9,7 @@ import Trigger from '../Trigger';
9
9
  import mergeContextToProps from '../utils/mergeContextToProps';
10
10
  import omit from '../utils/omit';
11
11
  import pick from '../utils/pick';
12
+ import useTableSelectKeyboard from './hooks/useTableSelectKeyboard';
12
13
  import type { InternalTableProps, TableSelectProps } from './interface';
13
14
  import InternalTable from './internal-table';
14
15
  import './style/index.less';
@@ -16,7 +17,10 @@ import './style/index.less';
16
17
  const handleState = (
17
18
  value: SelectionKeyType | SelectionKeyType[] | undefined,
18
19
  ) => {
19
- if (typeof value === 'string' || typeof value === 'number') {
20
+ // '' is the empty-value convention for radio; it must not become a key.
21
+ if (value === '') {
22
+ return [];
23
+ } else if (typeof value === 'string' || typeof value === 'number') {
20
24
  return [value];
21
25
  } else if (Array.isArray(value)) {
22
26
  return value;
@@ -144,10 +148,35 @@ const TableSelect = (baseprops: TableSelectProps) => {
144
148
  onChange?.(renderKeys, undefined);
145
149
  };
146
150
 
151
+ const {
152
+ popupRef,
153
+ activeRow,
154
+ handleKeyDown: handleSelectorKeyDown,
155
+ } = useTableSelectKeyboard({
156
+ open,
157
+ disabled,
158
+ dataSource,
159
+ rowKey,
160
+ selectionType,
161
+ selectedRowKeys: mergedValue as SelectionKeyType[],
162
+ searchValue,
163
+ onSelect: onSelectChange,
164
+ onClose: () => onVisibleChange(false),
165
+ });
166
+
167
+ const userHighlight = (rest as { highlight?: 'odd' | 'even' | Array<number> })
168
+ .highlight;
169
+
147
170
  const tableProps = omit(
148
171
  {
149
172
  ...rest,
150
173
  prefixCls,
174
+ // Keyboard navigation reuses the row highlight; it takes precedence over
175
+ // a user-supplied index list while active.
176
+ highlight:
177
+ activeRow > 0
178
+ ? [activeRow, ...(Array.isArray(userHighlight) ? userHighlight : [])]
179
+ : userHighlight,
151
180
  rowSelection: {
152
181
  ...props.rowSelection,
153
182
  onChange: onSelectChange,
@@ -181,8 +210,15 @@ const TableSelect = (baseprops: TableSelectProps) => {
181
210
  selectedKeys: mergedValue,
182
211
  onSearch: handleSearch,
183
212
  onRemove: onTagRemove,
213
+ onClear: () => {
214
+ setMergedValue([]);
215
+ onChange?.(selectionType === 'radio' ? '' : [], undefined);
216
+ },
217
+ onKeyDown: handleSelectorKeyDown,
184
218
  onOpenChange: (open: boolean) => {
185
- if (!open) {
219
+ if (open) {
220
+ onVisibleChange(true);
221
+ } else {
186
222
  clearSearchValue();
187
223
  }
188
224
  },
@@ -193,13 +229,19 @@ const TableSelect = (baseprops: TableSelectProps) => {
193
229
  };
194
230
 
195
231
  const renderPopup = () => (
196
- <InternalTable {...tableProps} value={value} rowKey={rowKey} />
232
+ <InternalTable
233
+ {...tableProps}
234
+ value={value}
235
+ rowKey={rowKey}
236
+ popupRef={popupRef}
237
+ />
197
238
  );
198
239
 
199
240
  return (
200
241
  <Trigger
201
242
  {...rest}
202
243
  trigger="click"
244
+ open={open}
203
245
  popupClassName={`${prefixCls}-popup`}
204
246
  popup={renderPopup()}
205
247
  placement={placement}
@@ -587,7 +587,7 @@
587
587
  --yee-select-popup-max-height: 200px;
588
588
 
589
589
  /* --Selector-- */
590
- --yee-selector-padding: 2px 6px;
590
+ --yee-selector-padding: 3px 6px;
591
591
  --yee-selector-border-width: 1px;
592
592
  --yee-selector-border-radius: 4px;
593
593
  --yee-selector-height: var(--yee-input-height);
package/src/version.ts CHANGED
@@ -4,7 +4,7 @@ declare global {
4
4
  }
5
5
  }
6
6
 
7
- export const version = "0.14.7";
7
+ export const version = "0.15.1";
8
8
 
9
9
  if (typeof window !== 'undefined') {
10
10
  window.__yee_c_version__ = version;