@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 +331 -0
- package/lib/esm/index.js +327 -2
- package/lib/type/index.d.ts +73 -2
- package/package.json +6 -5
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
|
-
|
|
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 };
|
package/lib/type/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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": "
|
|
30
|
+
"gitHead": "e03c9c40bc86083ba49fe9f372375a50223191cc",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@cclr/
|
|
33
|
-
"@cclr/
|
|
34
|
-
"@cclr/
|
|
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",
|