@rc-component/util 1.2.1 → 1.3.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.
@@ -0,0 +1,8 @@
1
+ type Updater<T> = (updater: T | ((origin: T) => T)) => void;
2
+ /**
3
+ * Similar to `useState` but will use props value if provided.
4
+ * From React 18, we do not need safe `useState` since it will not throw for unmounted update.
5
+ * This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
6
+ */
7
+ export default function useControlledState<T>(defaultStateValue: T | (() => T), value?: T): [T, Updater<T>];
8
+ export {};
@@ -0,0 +1,21 @@
1
+ import { useState } from 'react';
2
+ import useLayoutEffect from "./useLayoutEffect";
3
+ /**
4
+ * Similar to `useState` but will use props value if provided.
5
+ * From React 18, we do not need safe `useState` since it will not throw for unmounted update.
6
+ * This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
7
+ */
8
+ export default function useControlledState(defaultStateValue, value) {
9
+ const [innerValue, setInnerValue] = useState(defaultStateValue);
10
+ const mergedValue = value !== undefined ? value : innerValue;
11
+ useLayoutEffect(mount => {
12
+ if (!mount) {
13
+ setInnerValue(value);
14
+ }
15
+ }, [value]);
16
+ return [
17
+ // Value
18
+ mergedValue,
19
+ // Update function
20
+ setInnerValue];
21
+ }
@@ -1,5 +1,6 @@
1
1
  type Updater<T> = (updater: T | ((origin: T) => T), ignoreDestroy?: boolean) => void;
2
2
  /**
3
+ * @deprecated Please use `useControlledState` instead if not need support < React 18.
3
4
  * Similar to `useState` but will use props value if provided.
4
5
  * Note that internal use rc-util `useState` hook.
5
6
  */
@@ -7,6 +7,7 @@ function hasValue(value) {
7
7
  }
8
8
 
9
9
  /**
10
+ * @deprecated Please use `useControlledState` instead if not need support < React 18.
10
11
  * Similar to `useState` but will use props value if provided.
11
12
  * Note that internal use rc-util `useState` hook.
12
13
  */
package/es/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  export { default as useEvent } from './hooks/useEvent';
2
2
  export { default as useMergedState } from './hooks/useMergedState';
3
+ export { default as useControlledState } from './hooks/useControlledState';
3
4
  export { supportNodeRef, supportRef, useComposeRef } from './ref';
4
5
  export { default as get } from './utils/get';
5
- export { default as set } from './utils/set';
6
- export { default as warning } from './warning';
6
+ export { default as set, merge } from './utils/set';
7
+ export { default as warning, noteOnce } from './warning';
8
+ export { default as omit } from './omit';
9
+ export { default as toArray } from './Children/toArray';
package/es/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  export { default as useEvent } from "./hooks/useEvent";
2
2
  export { default as useMergedState } from "./hooks/useMergedState";
3
+ export { default as useControlledState } from "./hooks/useControlledState";
3
4
  export { supportNodeRef, supportRef, useComposeRef } from "./ref";
4
5
  export { default as get } from "./utils/get";
5
- export { default as set } from "./utils/set";
6
- export { default as warning } from "./warning";
6
+ export { default as set, merge } from "./utils/set";
7
+ export { default as warning, noteOnce } from "./warning";
8
+ export { default as omit } from "./omit";
9
+ export { default as toArray } from "./Children/toArray";
package/es/isMobile.js CHANGED
@@ -1,7 +1,8 @@
1
+ import isMobile from 'is-mobile';
2
+ let cached;
1
3
  export default (() => {
2
- if (typeof navigator === 'undefined' || typeof window === 'undefined') {
3
- return false;
4
+ if (typeof cached === 'undefined') {
5
+ cached = isMobile();
4
6
  }
5
- const agent = navigator.userAgent || navigator.vendor || window.opera;
6
- return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(agent?.substr(0, 4));
7
+ return cached;
7
8
  });
@@ -0,0 +1,8 @@
1
+ type Updater<T> = (updater: T | ((origin: T) => T)) => void;
2
+ /**
3
+ * Similar to `useState` but will use props value if provided.
4
+ * From React 18, we do not need safe `useState` since it will not throw for unmounted update.
5
+ * This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
6
+ */
7
+ export default function useControlledState<T>(defaultStateValue: T | (() => T), value?: T): [T, Updater<T>];
8
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useControlledState;
7
+ var _react = require("react");
8
+ var _useLayoutEffect = _interopRequireDefault(require("./useLayoutEffect"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ /**
11
+ * Similar to `useState` but will use props value if provided.
12
+ * From React 18, we do not need safe `useState` since it will not throw for unmounted update.
13
+ * This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.
14
+ */
15
+ function useControlledState(defaultStateValue, value) {
16
+ const [innerValue, setInnerValue] = (0, _react.useState)(defaultStateValue);
17
+ const mergedValue = value !== undefined ? value : innerValue;
18
+ (0, _useLayoutEffect.default)(mount => {
19
+ if (!mount) {
20
+ setInnerValue(value);
21
+ }
22
+ }, [value]);
23
+ return [
24
+ // Value
25
+ mergedValue,
26
+ // Update function
27
+ setInnerValue];
28
+ }
@@ -1,5 +1,6 @@
1
1
  type Updater<T> = (updater: T | ((origin: T) => T), ignoreDestroy?: boolean) => void;
2
2
  /**
3
+ * @deprecated Please use `useControlledState` instead if not need support < React 18.
3
4
  * Similar to `useState` but will use props value if provided.
4
5
  * Note that internal use rc-util `useState` hook.
5
6
  */
@@ -14,6 +14,7 @@ function hasValue(value) {
14
14
  }
15
15
 
16
16
  /**
17
+ * @deprecated Please use `useControlledState` instead if not need support < React 18.
17
18
  * Similar to `useState` but will use props value if provided.
18
19
  * Note that internal use rc-util `useState` hook.
19
20
  */
package/lib/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  export { default as useEvent } from './hooks/useEvent';
2
2
  export { default as useMergedState } from './hooks/useMergedState';
3
+ export { default as useControlledState } from './hooks/useControlledState';
3
4
  export { supportNodeRef, supportRef, useComposeRef } from './ref';
4
5
  export { default as get } from './utils/get';
5
- export { default as set } from './utils/set';
6
- export { default as warning } from './warning';
6
+ export { default as set, merge } from './utils/set';
7
+ export { default as warning, noteOnce } from './warning';
8
+ export { default as omit } from './omit';
9
+ export { default as toArray } from './Children/toArray';
package/lib/index.js CHANGED
@@ -9,6 +9,24 @@ Object.defineProperty(exports, "get", {
9
9
  return _get.default;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "merge", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _set.merge;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "noteOnce", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _warning.noteOnce;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "omit", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _omit.default;
28
+ }
29
+ });
12
30
  Object.defineProperty(exports, "set", {
13
31
  enumerable: true,
14
32
  get: function () {
@@ -27,12 +45,24 @@ Object.defineProperty(exports, "supportRef", {
27
45
  return _ref.supportRef;
28
46
  }
29
47
  });
48
+ Object.defineProperty(exports, "toArray", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _toArray.default;
52
+ }
53
+ });
30
54
  Object.defineProperty(exports, "useComposeRef", {
31
55
  enumerable: true,
32
56
  get: function () {
33
57
  return _ref.useComposeRef;
34
58
  }
35
59
  });
60
+ Object.defineProperty(exports, "useControlledState", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _useControlledState.default;
64
+ }
65
+ });
36
66
  Object.defineProperty(exports, "useEvent", {
37
67
  enumerable: true,
38
68
  get: function () {
@@ -53,8 +83,13 @@ Object.defineProperty(exports, "warning", {
53
83
  });
54
84
  var _useEvent = _interopRequireDefault(require("./hooks/useEvent"));
55
85
  var _useMergedState = _interopRequireDefault(require("./hooks/useMergedState"));
86
+ var _useControlledState = _interopRequireDefault(require("./hooks/useControlledState"));
56
87
  var _ref = require("./ref");
57
88
  var _get = _interopRequireDefault(require("./utils/get"));
58
- var _set = _interopRequireDefault(require("./utils/set"));
59
- var _warning = _interopRequireDefault(require("./warning"));
89
+ var _set = _interopRequireWildcard(require("./utils/set"));
90
+ var _warning = _interopRequireWildcard(require("./warning"));
91
+ var _omit = _interopRequireDefault(require("./omit"));
92
+ var _toArray = _interopRequireDefault(require("./Children/toArray"));
93
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
94
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
60
95
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
package/lib/isMobile.js CHANGED
@@ -4,11 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _isMobile = _interopRequireDefault(require("is-mobile"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ let cached;
7
10
  var _default = () => {
8
- if (typeof navigator === 'undefined' || typeof window === 'undefined') {
9
- return false;
11
+ if (typeof cached === 'undefined') {
12
+ cached = (0, _isMobile.default)();
10
13
  }
11
- const agent = navigator.userAgent || navigator.vendor || window.opera;
12
- return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(agent?.substr(0, 4));
14
+ return cached;
13
15
  };
14
16
  exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/util",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "Common Utils For React Component",
5
5
  "keywords": [
6
6
  "react",
@@ -38,6 +38,7 @@
38
38
  ]
39
39
  },
40
40
  "dependencies": {
41
+ "is-mobile": "^5.0.0",
41
42
  "react-is": "^18.2.0"
42
43
  },
43
44
  "devDependencies": {