@cclr/react 0.1.9 → 0.1.11

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/lib/cjs/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var react = require('react');
4
+ var front = require('@cclr/front');
4
5
 
5
6
  /**
6
7
  * 简化 createContext 的使用
@@ -22,4 +23,334 @@ function createCtx(defaultValue, name) {
22
23
  return [useCtx, ctx.Provider];
23
24
  }
24
25
 
26
+ function _arrayLikeToArray(r, a) {
27
+ (null == a || a > r.length) && (a = r.length);
28
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
29
+ return n;
30
+ }
31
+ function _arrayWithHoles(r) {
32
+ if (Array.isArray(r)) return r;
33
+ }
34
+ function _arrayWithoutHoles(r) {
35
+ if (Array.isArray(r)) return _arrayLikeToArray(r);
36
+ }
37
+ function _iterableToArray(r) {
38
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
39
+ }
40
+ function _iterableToArrayLimit(r, l) {
41
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
42
+ if (null != t) {
43
+ var e,
44
+ n,
45
+ i,
46
+ u,
47
+ a = [],
48
+ f = !0,
49
+ o = !1;
50
+ try {
51
+ if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
52
+ } catch (r) {
53
+ o = !0, n = r;
54
+ } finally {
55
+ try {
56
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
57
+ } finally {
58
+ if (o) throw n;
59
+ }
60
+ }
61
+ return a;
62
+ }
63
+ }
64
+ function _nonIterableRest() {
65
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
66
+ }
67
+ function _nonIterableSpread() {
68
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
69
+ }
70
+ function _slicedToArray(r, e) {
71
+ return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
72
+ }
73
+ function _toConsumableArray(r) {
74
+ return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
75
+ }
76
+ function _unsupportedIterableToArray(r, a) {
77
+ if (r) {
78
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
79
+ var t = {}.toString.call(r).slice(8, -1);
80
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * React hook to persist any value between renders,
86
+ * but keeps it up-to-date if it changes.
87
+ *
88
+ * @param value the value or function to persist
89
+ */
90
+ function useCallbackRef(fn, deps) {
91
+ var ref = react.useRef(fn);
92
+ ref.current = fn;
93
+ return react.useCallback(function () {
94
+ var _ref$current;
95
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
96
+ args[_key] = arguments[_key];
97
+ }
98
+ return (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.call.apply(_ref$current, [ref].concat(args));
99
+ }, _toConsumableArray(deps || []));
100
+ }
101
+
102
+ Function.prototype.call.bind(Object.prototype.hasOwnProperty);
103
+ Function.prototype.call.bind(Object.prototype.toString);
104
+
105
+ function c(t, r) {
106
+ (null == r || r > t.length) && (r = t.length);
107
+ for (var n = 0, e = Array(r); n < r; n++) e[n] = t[n];
108
+ return e;
109
+ }
110
+ function y(t, r) {
111
+ return y = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, r) {
112
+ return t.__proto__ = r, t;
113
+ }, y(t, r);
114
+ }
115
+ function h(t) {
116
+ return function (t) {
117
+ if (Array.isArray(t)) return c(t);
118
+ }(t) || function (t) {
119
+ if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"]) return Array.from(t);
120
+ }(t) || b(t) || function () {
121
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
122
+ }();
123
+ }
124
+ function b(t, r) {
125
+ if (t) {
126
+ if ("string" == typeof t) return c(t, r);
127
+ var n = {}.toString.call(t).slice(8, -1);
128
+ return "Object" === n && t.constructor && (n = t.constructor.name), "Map" === n || "Set" === n ? Array.from(t) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? c(t, r) : void 0;
129
+ }
130
+ }
131
+ function m() {
132
+ m = function m(t, r) {
133
+ return new n(t, void 0, r);
134
+ };
135
+ var t = RegExp.prototype,
136
+ r = new WeakMap();
137
+ function n(t, e, o) {
138
+ var u = RegExp(t, e);
139
+ return r.set(u, o || r.get(t)), y(u, n.prototype);
140
+ }
141
+ function e(t, n) {
142
+ var e = r.get(n);
143
+ return Object.keys(e).reduce(function (r, n) {
144
+ var o = e[n];
145
+ if ("number" == typeof o) r[n] = t[o];else {
146
+ for (var u = 0; void 0 === t[o[u]] && u + 1 < o.length;) u++;
147
+ r[n] = t[o[u]];
148
+ }
149
+ return r;
150
+ }, Object.create(null));
151
+ }
152
+ return function (t, r) {
153
+ if ("function" != typeof r && null !== r) throw new TypeError("Super expression must either be null or a function");
154
+ t.prototype = Object.create(r && r.prototype, {
155
+ constructor: {
156
+ value: t,
157
+ writable: !0,
158
+ configurable: !0
159
+ }
160
+ }), Object.defineProperty(t, "prototype", {
161
+ writable: !1
162
+ }), r && y(t, r);
163
+ }(n, RegExp), n.prototype.exec = function (r) {
164
+ var n = t.exec.call(this, r);
165
+ if (n) {
166
+ n.groups = e(n, this);
167
+ var o = n.indices;
168
+ o && (o.groups = e(o, this));
169
+ }
170
+ return n;
171
+ }, n.prototype[Symbol.replace] = function (n, o) {
172
+ if ("string" == typeof o) {
173
+ var u = r.get(this);
174
+ return t[Symbol.replace].call(this, n, o.replace(/\$<([^>]+)>/g, function (t, r) {
175
+ var n = u[r];
176
+ return "$" + (Array.isArray(n) ? n.join("$") : n);
177
+ }));
178
+ }
179
+ if ("function" == typeof o) {
180
+ var i = this;
181
+ return t[Symbol.replace].call(this, n, function () {
182
+ var t = arguments;
183
+ return "object" != typeof t[t.length - 1] && (t = [].slice.call(t)).push(e(t, i)), o.apply(this, t);
184
+ });
185
+ }
186
+ return t[Symbol.replace].call(this, n, o);
187
+ }, m.apply(this, arguments);
188
+ }
189
+ m(/\?([^#]*)/, {
190
+ query: 1
191
+ });
192
+ m(/#(.*)/, {
193
+ hash: 1
194
+ });
195
+ m(/^(?:[a-zA-Z][a-zA-Zd+-.]*:)?(?:\/\/(?:[^@/?#]*@)?[^/?#]*)?([^?#]*)/, {
196
+ pathname: 1
197
+ });
198
+ var w = function w(t, r) {
199
+ var n,
200
+ e,
201
+ o,
202
+ u,
203
+ i,
204
+ a = null == r ? void 0 : r.maxWait,
205
+ l = null !== (n = null == r ? void 0 : r.wait) && void 0 !== n ? n : 500,
206
+ c = null === (e = null == r ? void 0 : r.leading) || void 0 === e || e,
207
+ f = null === (o = null == r ? void 0 : r.trailing) || void 0 === o || o,
208
+ p = !1,
209
+ s = 0,
210
+ y = a && a > l,
211
+ v = function v() {
212
+ clearTimeout(u), u = null;
213
+ },
214
+ b = function b() {
215
+ p = !1, y && (s = Date.now()), t.apply(void 0, h(i));
216
+ },
217
+ _m = function m() {
218
+ clearTimeout(u), u = setTimeout(function () {
219
+ if (p && f) return b(), void _m();
220
+ v();
221
+ }, l);
222
+ },
223
+ d = function d() {
224
+ p = !0;
225
+ for (var t = arguments.length, r = new Array(t), n = 0; n < t; n++) r[n] = arguments[n];
226
+ i = r, u || (c ? b() : y && (s = Date.now())), y && Date.now() - s >= a && (b(), _m()), _m();
227
+ };
228
+ return d.cancel = v, d.flush = function () {
229
+ u && p && (b(), _m());
230
+ }, d;
231
+ },
232
+ P = function P(t, r) {
233
+ var n,
234
+ e,
235
+ o,
236
+ u,
237
+ i,
238
+ a = null !== (n = null == r ? void 0 : r.wait) && void 0 !== n ? n : 500,
239
+ l = null === (e = null == r ? void 0 : r.leading) || void 0 === e || e,
240
+ c = null === (o = null == r ? void 0 : r.trailing) || void 0 === o || o,
241
+ f = !1,
242
+ p = function p() {
243
+ clearTimeout(u), u = null, f = !1;
244
+ },
245
+ s = function s() {
246
+ f = !1, t.apply(void 0, h(i));
247
+ },
248
+ _y = function y() {
249
+ clearTimeout(u), u = setTimeout(function () {
250
+ if (f && c) return s(), void _y();
251
+ p();
252
+ }, a);
253
+ },
254
+ v = function v() {
255
+ f = !0;
256
+ for (var t = arguments.length, r = new Array(t), n = 0; n < t; n++) r[n] = arguments[n];
257
+ i = r, u || (l && s(), _y());
258
+ };
259
+ return v.cancel = p, v.flush = function () {
260
+ u && f && (s(), _y());
261
+ }, v;
262
+ };
263
+
264
+ var useDebounceFn = function useDebounceFn(cb, options) {
265
+ var fun = useCallbackRef(cb);
266
+ return react.useMemo(function () {
267
+ var run = w(fun, options);
268
+ return {
269
+ run: run,
270
+ cancel: run.cancel,
271
+ flush: run.flush
272
+ };
273
+ }, []);
274
+ };
275
+
276
+ /**
277
+ * 使用多个事件监听器
278
+ * @param ref 要绑定事件的 DOM 元素的引用
279
+ * @param eventMap 事件监听器映射
280
+ */
281
+ var useEventListenerMultiple = function useEventListenerMultiple(ref, eventMap) {
282
+ var handleGetEventFun = useCallbackRef(function (key) {
283
+ return eventMap[key];
284
+ });
285
+ react.useEffect(function () {
286
+ if (!ref.current) return;
287
+ var newEventMap = Object.keys(eventMap).reduce(function (acc, key) {
288
+ acc[key] = function (event) {
289
+ var _handleGetEventFun;
290
+ (_handleGetEventFun = handleGetEventFun(key)) === null || _handleGetEventFun === void 0 || _handleGetEventFun(event);
291
+ };
292
+ return acc;
293
+ }, {});
294
+ return front.addEventListenerMultiple(ref.current, newEventMap);
295
+ }, []);
296
+ };
297
+
298
+ /**
299
+ * 使用多个事件监听器
300
+ * @param ref 要绑定事件的 DOM 元素的引用
301
+ * @param eventMap 事件监听器映射
302
+ */
303
+ var useEventListenerMultipleRef = function useEventListenerMultipleRef(eventMap) {
304
+ var ref = react.useRef(null);
305
+ var handleGetEventFun = useCallbackRef(function (key) {
306
+ return eventMap[key];
307
+ });
308
+ react.useEffect(function () {
309
+ if (!ref.current) return;
310
+ var newEventMap = Object.keys(eventMap).reduce(function (acc, key) {
311
+ acc[key] = function (event) {
312
+ var _handleGetEventFun2;
313
+ (_handleGetEventFun2 = handleGetEventFun(key)) === null || _handleGetEventFun2 === void 0 || _handleGetEventFun2(event);
314
+ };
315
+ return acc;
316
+ }, {});
317
+ return front.addEventListenerMultiple(ref.current, newEventMap);
318
+ }, []);
319
+ return {
320
+ ref: ref
321
+ };
322
+ };
323
+
324
+ /**
325
+ * 节流
326
+ * @param cb
327
+ * @returns
328
+ */
329
+ var useThrottleFn = function useThrottleFn(cb, options) {
330
+ var fun = useCallbackRef(cb);
331
+ return react.useMemo(function () {
332
+ var run = P(fun, options);
333
+ return {
334
+ run: run,
335
+ cancel: run.cancel,
336
+ flush: run.flush
337
+ };
338
+ }, []);
339
+ };
340
+
341
+ var useUpdate = function useUpdate() {
342
+ var _useState = react.useState({}),
343
+ _useState2 = _slicedToArray(_useState, 2),
344
+ update = _useState2[1];
345
+ return function () {
346
+ return update({});
347
+ };
348
+ };
349
+
25
350
  exports.createCtx = createCtx;
351
+ exports.useCallbackRef = useCallbackRef;
352
+ exports.useDebounceFn = useDebounceFn;
353
+ exports.useEventListenerMultiple = useEventListenerMultiple;
354
+ exports.useEventListenerMultipleRef = useEventListenerMultipleRef;
355
+ exports.useThrottleFn = useThrottleFn;
356
+ exports.useUpdate = useUpdate;
package/lib/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import { createContext, useContext } from 'react';
1
+ import { createContext, useContext, useRef, useCallback, useMemo, useEffect, useState } from 'react';
2
+ import { addEventListenerMultiple } from '@cclr/front';
2
3
 
3
4
  /**
4
5
  * 简化 createContext 的使用
@@ -20,4 +21,328 @@ function createCtx(defaultValue, name) {
20
21
  return [useCtx, ctx.Provider];
21
22
  }
22
23
 
23
- export { createCtx };
24
+ function _arrayLikeToArray(r, a) {
25
+ (null == a || a > r.length) && (a = r.length);
26
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
27
+ return n;
28
+ }
29
+ function _arrayWithHoles(r) {
30
+ if (Array.isArray(r)) return r;
31
+ }
32
+ function _arrayWithoutHoles(r) {
33
+ if (Array.isArray(r)) return _arrayLikeToArray(r);
34
+ }
35
+ function _iterableToArray(r) {
36
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
37
+ }
38
+ function _iterableToArrayLimit(r, l) {
39
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
40
+ if (null != t) {
41
+ var e,
42
+ n,
43
+ i,
44
+ u,
45
+ a = [],
46
+ f = !0,
47
+ o = !1;
48
+ try {
49
+ if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
50
+ } catch (r) {
51
+ o = !0, n = r;
52
+ } finally {
53
+ try {
54
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
55
+ } finally {
56
+ if (o) throw n;
57
+ }
58
+ }
59
+ return a;
60
+ }
61
+ }
62
+ function _nonIterableRest() {
63
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
64
+ }
65
+ function _nonIterableSpread() {
66
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
67
+ }
68
+ function _slicedToArray(r, e) {
69
+ return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
70
+ }
71
+ function _toConsumableArray(r) {
72
+ return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
73
+ }
74
+ function _unsupportedIterableToArray(r, a) {
75
+ if (r) {
76
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
77
+ var t = {}.toString.call(r).slice(8, -1);
78
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * React hook to persist any value between renders,
84
+ * but keeps it up-to-date if it changes.
85
+ *
86
+ * @param value the value or function to persist
87
+ */
88
+ function useCallbackRef(fn, deps) {
89
+ var ref = useRef(fn);
90
+ ref.current = fn;
91
+ return useCallback(function () {
92
+ var _ref$current;
93
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
94
+ args[_key] = arguments[_key];
95
+ }
96
+ return (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.call.apply(_ref$current, [ref].concat(args));
97
+ }, _toConsumableArray(deps || []));
98
+ }
99
+
100
+ Function.prototype.call.bind(Object.prototype.hasOwnProperty);
101
+ Function.prototype.call.bind(Object.prototype.toString);
102
+
103
+ function c(t, r) {
104
+ (null == r || r > t.length) && (r = t.length);
105
+ for (var n = 0, e = Array(r); n < r; n++) e[n] = t[n];
106
+ return e;
107
+ }
108
+ function y(t, r) {
109
+ return y = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, r) {
110
+ return t.__proto__ = r, t;
111
+ }, y(t, r);
112
+ }
113
+ function h(t) {
114
+ return function (t) {
115
+ if (Array.isArray(t)) return c(t);
116
+ }(t) || function (t) {
117
+ if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"]) return Array.from(t);
118
+ }(t) || b(t) || function () {
119
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
120
+ }();
121
+ }
122
+ function b(t, r) {
123
+ if (t) {
124
+ if ("string" == typeof t) return c(t, r);
125
+ var n = {}.toString.call(t).slice(8, -1);
126
+ return "Object" === n && t.constructor && (n = t.constructor.name), "Map" === n || "Set" === n ? Array.from(t) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? c(t, r) : void 0;
127
+ }
128
+ }
129
+ function m() {
130
+ m = function m(t, r) {
131
+ return new n(t, void 0, r);
132
+ };
133
+ var t = RegExp.prototype,
134
+ r = new WeakMap();
135
+ function n(t, e, o) {
136
+ var u = RegExp(t, e);
137
+ return r.set(u, o || r.get(t)), y(u, n.prototype);
138
+ }
139
+ function e(t, n) {
140
+ var e = r.get(n);
141
+ return Object.keys(e).reduce(function (r, n) {
142
+ var o = e[n];
143
+ if ("number" == typeof o) r[n] = t[o];else {
144
+ for (var u = 0; void 0 === t[o[u]] && u + 1 < o.length;) u++;
145
+ r[n] = t[o[u]];
146
+ }
147
+ return r;
148
+ }, Object.create(null));
149
+ }
150
+ return function (t, r) {
151
+ if ("function" != typeof r && null !== r) throw new TypeError("Super expression must either be null or a function");
152
+ t.prototype = Object.create(r && r.prototype, {
153
+ constructor: {
154
+ value: t,
155
+ writable: !0,
156
+ configurable: !0
157
+ }
158
+ }), Object.defineProperty(t, "prototype", {
159
+ writable: !1
160
+ }), r && y(t, r);
161
+ }(n, RegExp), n.prototype.exec = function (r) {
162
+ var n = t.exec.call(this, r);
163
+ if (n) {
164
+ n.groups = e(n, this);
165
+ var o = n.indices;
166
+ o && (o.groups = e(o, this));
167
+ }
168
+ return n;
169
+ }, n.prototype[Symbol.replace] = function (n, o) {
170
+ if ("string" == typeof o) {
171
+ var u = r.get(this);
172
+ return t[Symbol.replace].call(this, n, o.replace(/\$<([^>]+)>/g, function (t, r) {
173
+ var n = u[r];
174
+ return "$" + (Array.isArray(n) ? n.join("$") : n);
175
+ }));
176
+ }
177
+ if ("function" == typeof o) {
178
+ var i = this;
179
+ return t[Symbol.replace].call(this, n, function () {
180
+ var t = arguments;
181
+ return "object" != typeof t[t.length - 1] && (t = [].slice.call(t)).push(e(t, i)), o.apply(this, t);
182
+ });
183
+ }
184
+ return t[Symbol.replace].call(this, n, o);
185
+ }, m.apply(this, arguments);
186
+ }
187
+ m(/\?([^#]*)/, {
188
+ query: 1
189
+ });
190
+ m(/#(.*)/, {
191
+ hash: 1
192
+ });
193
+ m(/^(?:[a-zA-Z][a-zA-Zd+-.]*:)?(?:\/\/(?:[^@/?#]*@)?[^/?#]*)?([^?#]*)/, {
194
+ pathname: 1
195
+ });
196
+ var w = function w(t, r) {
197
+ var n,
198
+ e,
199
+ o,
200
+ u,
201
+ i,
202
+ a = null == r ? void 0 : r.maxWait,
203
+ l = null !== (n = null == r ? void 0 : r.wait) && void 0 !== n ? n : 500,
204
+ c = null === (e = null == r ? void 0 : r.leading) || void 0 === e || e,
205
+ f = null === (o = null == r ? void 0 : r.trailing) || void 0 === o || o,
206
+ p = !1,
207
+ s = 0,
208
+ y = a && a > l,
209
+ v = function v() {
210
+ clearTimeout(u), u = null;
211
+ },
212
+ b = function b() {
213
+ p = !1, y && (s = Date.now()), t.apply(void 0, h(i));
214
+ },
215
+ _m = function m() {
216
+ clearTimeout(u), u = setTimeout(function () {
217
+ if (p && f) return b(), void _m();
218
+ v();
219
+ }, l);
220
+ },
221
+ d = function d() {
222
+ p = !0;
223
+ for (var t = arguments.length, r = new Array(t), n = 0; n < t; n++) r[n] = arguments[n];
224
+ i = r, u || (c ? b() : y && (s = Date.now())), y && Date.now() - s >= a && (b(), _m()), _m();
225
+ };
226
+ return d.cancel = v, d.flush = function () {
227
+ u && p && (b(), _m());
228
+ }, d;
229
+ },
230
+ P = function P(t, r) {
231
+ var n,
232
+ e,
233
+ o,
234
+ u,
235
+ i,
236
+ a = null !== (n = null == r ? void 0 : r.wait) && void 0 !== n ? n : 500,
237
+ l = null === (e = null == r ? void 0 : r.leading) || void 0 === e || e,
238
+ c = null === (o = null == r ? void 0 : r.trailing) || void 0 === o || o,
239
+ f = !1,
240
+ p = function p() {
241
+ clearTimeout(u), u = null, f = !1;
242
+ },
243
+ s = function s() {
244
+ f = !1, t.apply(void 0, h(i));
245
+ },
246
+ _y = function y() {
247
+ clearTimeout(u), u = setTimeout(function () {
248
+ if (f && c) return s(), void _y();
249
+ p();
250
+ }, a);
251
+ },
252
+ v = function v() {
253
+ f = !0;
254
+ for (var t = arguments.length, r = new Array(t), n = 0; n < t; n++) r[n] = arguments[n];
255
+ i = r, u || (l && s(), _y());
256
+ };
257
+ return v.cancel = p, v.flush = function () {
258
+ u && f && (s(), _y());
259
+ }, v;
260
+ };
261
+
262
+ var useDebounceFn = function useDebounceFn(cb, options) {
263
+ var fun = useCallbackRef(cb);
264
+ return useMemo(function () {
265
+ var run = w(fun, options);
266
+ return {
267
+ run: run,
268
+ cancel: run.cancel,
269
+ flush: run.flush
270
+ };
271
+ }, []);
272
+ };
273
+
274
+ /**
275
+ * 使用多个事件监听器
276
+ * @param ref 要绑定事件的 DOM 元素的引用
277
+ * @param eventMap 事件监听器映射
278
+ */
279
+ var useEventListenerMultiple = function useEventListenerMultiple(ref, eventMap) {
280
+ var handleGetEventFun = useCallbackRef(function (key) {
281
+ return eventMap[key];
282
+ });
283
+ useEffect(function () {
284
+ if (!ref.current) return;
285
+ var newEventMap = Object.keys(eventMap).reduce(function (acc, key) {
286
+ acc[key] = function (event) {
287
+ var _handleGetEventFun;
288
+ (_handleGetEventFun = handleGetEventFun(key)) === null || _handleGetEventFun === void 0 || _handleGetEventFun(event);
289
+ };
290
+ return acc;
291
+ }, {});
292
+ return addEventListenerMultiple(ref.current, newEventMap);
293
+ }, []);
294
+ };
295
+
296
+ /**
297
+ * 使用多个事件监听器
298
+ * @param ref 要绑定事件的 DOM 元素的引用
299
+ * @param eventMap 事件监听器映射
300
+ */
301
+ var useEventListenerMultipleRef = function useEventListenerMultipleRef(eventMap) {
302
+ var ref = useRef(null);
303
+ var handleGetEventFun = useCallbackRef(function (key) {
304
+ return eventMap[key];
305
+ });
306
+ useEffect(function () {
307
+ if (!ref.current) return;
308
+ var newEventMap = Object.keys(eventMap).reduce(function (acc, key) {
309
+ acc[key] = function (event) {
310
+ var _handleGetEventFun2;
311
+ (_handleGetEventFun2 = handleGetEventFun(key)) === null || _handleGetEventFun2 === void 0 || _handleGetEventFun2(event);
312
+ };
313
+ return acc;
314
+ }, {});
315
+ return addEventListenerMultiple(ref.current, newEventMap);
316
+ }, []);
317
+ return {
318
+ ref: ref
319
+ };
320
+ };
321
+
322
+ /**
323
+ * 节流
324
+ * @param cb
325
+ * @returns
326
+ */
327
+ var useThrottleFn = function useThrottleFn(cb, options) {
328
+ var fun = useCallbackRef(cb);
329
+ return useMemo(function () {
330
+ var run = P(fun, options);
331
+ return {
332
+ run: run,
333
+ cancel: run.cancel,
334
+ flush: run.flush
335
+ };
336
+ }, []);
337
+ };
338
+
339
+ var useUpdate = function useUpdate() {
340
+ var _useState = useState({}),
341
+ _useState2 = _slicedToArray(_useState, 2),
342
+ update = _useState2[1];
343
+ return function () {
344
+ return update({});
345
+ };
346
+ };
347
+
348
+ export { createCtx, useCallbackRef, useDebounceFn, useEventListenerMultiple, useEventListenerMultipleRef, useThrottleFn, useUpdate };
@@ -1,5 +1,6 @@
1
1
  import * as react from 'react';
2
- import { TPlainObject } from '@cclr/lang';
2
+ import { TPlainObject, TPlainFunction } from '@cclr/lang';
3
+ import { TEventMap } from '@cclr/front';
3
4
 
4
5
  /**
5
6
  * 简化 createContext 的使用
@@ -10,4 +11,74 @@ import { TPlainObject } from '@cclr/lang';
10
11
  */
11
12
  declare function createCtx<A extends TPlainObject | null>(defaultValue?: A, name?: string): readonly [() => A, react.Provider<A | undefined>];
12
13
 
13
- export { createCtx };
14
+ /**
15
+ * React hook to persist any value between renders,
16
+ * but keeps it up-to-date if it changes.
17
+ *
18
+ * @param value the value or function to persist
19
+ */
20
+ declare function useCallbackRef<T extends (...args: any[]) => unknown>(fn: T | undefined, deps?: React.DependencyList): T;
21
+
22
+ declare const useDebounceFn: <T extends TPlainFunction>(cb: T, options?: {
23
+ /** 等待时间,单位为毫秒 default: 500 */
24
+ wait?: number;
25
+ /** 是否在延迟开始前调用函数 default: false */
26
+ leading?: boolean;
27
+ /** 是否在延迟开始后调用函数 default: true */
28
+ trailing?: boolean;
29
+ /** 最大等待时间,单位为毫秒 */
30
+ maxWait?: number;
31
+ }) => {
32
+ run: T & {
33
+ cancel: () => void;
34
+ flush: () => void;
35
+ };
36
+ cancel: () => void;
37
+ flush: () => void;
38
+ };
39
+
40
+ /**
41
+ * 使用多个事件监听器
42
+ * @param ref 要绑定事件的 DOM 元素的引用
43
+ * @param eventMap 事件监听器映射
44
+ */
45
+ declare const useEventListenerMultiple: <T extends HTMLElement = HTMLElement>(ref: React.RefObject<T>, eventMap: TEventMap) => void;
46
+ /**
47
+ * 使用多个事件监听器
48
+ * @param ref 要绑定事件的 DOM 元素的引用
49
+ * @param eventMap 事件监听器映射
50
+ */
51
+ declare const useEventListenerMultipleRef: <T extends HTMLElement = HTMLElement>(eventMap: TEventMap) => {
52
+ ref: react.RefObject<T>;
53
+ };
54
+
55
+ /**
56
+ * 节流
57
+ * @param cb
58
+ * @returns
59
+ */
60
+ declare const useThrottleFn: <T extends TPlainFunction>(cb: T, options?: {
61
+ /** 等待时间,单位为毫秒 default: 500 */
62
+ wait?: number;
63
+ /** 是否在延迟开始前调用函数 default: true */
64
+ leading?: boolean;
65
+ /** 是否在延迟开始后调用函数 default: true */
66
+ trailing?: boolean;
67
+ }) => {
68
+ run: T & {
69
+ cancel: () => void;
70
+ flush: () => void;
71
+ };
72
+ cancel: () => void;
73
+ flush: () => void;
74
+ };
75
+
76
+ declare const useUpdate: () => () => void;
77
+
78
+ interface ICommonUiProps {
79
+ className?: string;
80
+ style?: React.CSSProperties;
81
+ children?: React.ReactNode;
82
+ }
83
+
84
+ export { type ICommonUiProps, createCtx, useCallbackRef, useDebounceFn, useEventListenerMultiple, useEventListenerMultipleRef, useThrottleFn, useUpdate };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cclr/react",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "react 相关功能",
5
5
  "author": "cclr <18843152354@163.com>",
6
6
  "homepage": "",
@@ -27,11 +27,12 @@
27
27
  "g:test": "vitest run",
28
28
  "g:build": "ccm lib"
29
29
  },
30
- "gitHead": "ebe5ad930f1ae38c11e885ee8d781235558928e9",
30
+ "gitHead": "e03c9c40bc86083ba49fe9f372375a50223191cc",
31
31
  "dependencies": {
32
- "@cclr/lang": "^0.1.9",
33
- "@cclr/model": "^0.1.9",
34
- "@cclr/utils": "^0.1.9",
32
+ "@cclr/front": "0.1.11",
33
+ "@cclr/lang": "0.1.11",
34
+ "@cclr/model": "0.1.11",
35
+ "@cclr/utils": "0.1.11",
35
36
  "@testing-library/react-hooks": "^8.0.1",
36
37
  "@types/react": "^18.3.12",
37
38
  "react": "^18.3.1",