@rc-component/util 1.3.0 → 1.4.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/es/Dom/focus.d.ts CHANGED
@@ -6,3 +6,10 @@ export declare function clearLastFocusNode(): void;
6
6
  /** @deprecated Do not use since this may failed when used in async */
7
7
  export declare function backLastFocusNode(): void;
8
8
  export declare function limitTabRange(node: HTMLElement, e: KeyboardEvent): void;
9
+ export interface InputFocusOptions extends FocusOptions {
10
+ cursor?: 'start' | 'end' | 'all';
11
+ }
12
+ /**
13
+ * Focus element and set cursor position for input/textarea elements.
14
+ */
15
+ export declare function triggerFocus(element?: HTMLElement, option?: InputFocusOptions): void;
package/es/Dom/focus.js CHANGED
@@ -76,4 +76,30 @@ export function limitTabRange(node, e) {
76
76
  e.preventDefault();
77
77
  }
78
78
  }
79
+ }
80
+ // Used for `rc-input` `rc-textarea` `rc-input-number`
81
+ /**
82
+ * Focus element and set cursor position for input/textarea elements.
83
+ */
84
+ export function triggerFocus(element, option) {
85
+ if (!element) return;
86
+ element.focus(option);
87
+
88
+ // Selection content
89
+ const {
90
+ cursor
91
+ } = option || {};
92
+ if (cursor && (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement)) {
93
+ const len = element.value.length;
94
+ switch (cursor) {
95
+ case 'start':
96
+ element.setSelectionRange(0, 0);
97
+ break;
98
+ case 'end':
99
+ element.setSelectionRange(len, len);
100
+ break;
101
+ default:
102
+ element.setSelectionRange(0, len);
103
+ }
104
+ }
79
105
  }
@@ -1,2 +1,2 @@
1
- declare function useEvent<T extends Function>(callback: T): T;
1
+ declare function useEvent<T extends ((...args: any[]) => any) | undefined>(callback: T): undefined extends T ? (...args: Parameters<NonNullable<T>>) => ReturnType<NonNullable<T>> | undefined : T;
2
2
  export default useEvent;
@@ -2,7 +2,7 @@
2
2
  /* eslint-disable react-hooks/exhaustive-deps */
3
3
  import * as React from 'react';
4
4
  function useEvent(callback) {
5
- const fnRef = React.useRef();
5
+ const fnRef = React.useRef(callback);
6
6
  fnRef.current = callback;
7
7
  const memoFn = React.useCallback((...args) => fnRef.current?.(...args), []);
8
8
  return memoFn;
@@ -6,3 +6,10 @@ export declare function clearLastFocusNode(): void;
6
6
  /** @deprecated Do not use since this may failed when used in async */
7
7
  export declare function backLastFocusNode(): void;
8
8
  export declare function limitTabRange(node: HTMLElement, e: KeyboardEvent): void;
9
+ export interface InputFocusOptions extends FocusOptions {
10
+ cursor?: 'start' | 'end' | 'all';
11
+ }
12
+ /**
13
+ * Focus element and set cursor position for input/textarea elements.
14
+ */
15
+ export declare function triggerFocus(element?: HTMLElement, option?: InputFocusOptions): void;
package/lib/Dom/focus.js CHANGED
@@ -8,6 +8,7 @@ exports.clearLastFocusNode = clearLastFocusNode;
8
8
  exports.getFocusNodeList = getFocusNodeList;
9
9
  exports.limitTabRange = limitTabRange;
10
10
  exports.saveLastFocusNode = saveLastFocusNode;
11
+ exports.triggerFocus = triggerFocus;
11
12
  var _isVisible = _interopRequireDefault(require("./isVisible"));
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14
  function focusable(node, includePositive = false) {
@@ -87,4 +88,30 @@ function limitTabRange(node, e) {
87
88
  e.preventDefault();
88
89
  }
89
90
  }
91
+ }
92
+ // Used for `rc-input` `rc-textarea` `rc-input-number`
93
+ /**
94
+ * Focus element and set cursor position for input/textarea elements.
95
+ */
96
+ function triggerFocus(element, option) {
97
+ if (!element) return;
98
+ element.focus(option);
99
+
100
+ // Selection content
101
+ const {
102
+ cursor
103
+ } = option || {};
104
+ if (cursor && (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement)) {
105
+ const len = element.value.length;
106
+ switch (cursor) {
107
+ case 'start':
108
+ element.setSelectionRange(0, 0);
109
+ break;
110
+ case 'end':
111
+ element.setSelectionRange(len, len);
112
+ break;
113
+ default:
114
+ element.setSelectionRange(0, len);
115
+ }
116
+ }
90
117
  }
@@ -1,2 +1,2 @@
1
- declare function useEvent<T extends Function>(callback: T): T;
1
+ declare function useEvent<T extends ((...args: any[]) => any) | undefined>(callback: T): undefined extends T ? (...args: Parameters<NonNullable<T>>) => ReturnType<NonNullable<T>> | undefined : T;
2
2
  export default useEvent;
@@ -11,7 +11,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
11
11
  /* eslint-disable react-hooks/exhaustive-deps */
12
12
 
13
13
  function useEvent(callback) {
14
- const fnRef = React.useRef();
14
+ const fnRef = React.useRef(callback);
15
15
  fnRef.current = callback;
16
16
  const memoFn = React.useCallback((...args) => fnRef.current?.(...args), []);
17
17
  return memoFn;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/util",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Common Utils For React Component",
5
5
  "keywords": [
6
6
  "react",
@@ -45,8 +45,8 @@
45
45
  "@rc-component/father-plugin": "^2.0.1",
46
46
  "@rc-component/np": "^1.0.3",
47
47
  "@testing-library/react": "^16.0.0",
48
- "@types/jest": "^29.4.0",
49
- "@types/node": "^22.5.5",
48
+ "@types/jest": "^30.0.0",
49
+ "@types/node": "^24.6.1",
50
50
  "@types/react": "^18.0.0",
51
51
  "@types/react-dom": "^18.0.0",
52
52
  "@types/react-is": "^19.0.0",
@@ -56,10 +56,10 @@
56
56
  "cross-env": "^7.0.2",
57
57
  "dumi": "^2.1.3",
58
58
  "eslint": "^8.54.0",
59
- "eslint-plugin-jest": "^28.2.0",
59
+ "eslint-plugin-jest": "^29.0.1",
60
60
  "eslint-plugin-unicorn": "^56.0.1",
61
61
  "father": "^4.1.3",
62
- "glob": "^9.2.1",
62
+ "glob": "^11.0.3",
63
63
  "husky": "^9.1.6",
64
64
  "lint-staged": "^15.1.0",
65
65
  "prettier": "^3.3.2",