@rc-component/util 1.0.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.
Files changed (159) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +303 -0
  3. package/es/Children/toArray.d.ts +5 -0
  4. package/es/Children/toArray.js +19 -0
  5. package/es/Dom/canUseDom.d.ts +1 -0
  6. package/es/Dom/canUseDom.js +3 -0
  7. package/es/Dom/contains.d.ts +1 -0
  8. package/es/Dom/contains.js +20 -0
  9. package/es/Dom/dynamicCSS.d.ts +25 -0
  10. package/es/Dom/dynamicCSS.js +153 -0
  11. package/es/Dom/findDOMNode.d.ts +12 -0
  12. package/es/Dom/findDOMNode.js +36 -0
  13. package/es/Dom/focus.d.ts +8 -0
  14. package/es/Dom/focus.js +87 -0
  15. package/es/Dom/isVisible.d.ts +2 -0
  16. package/es/Dom/isVisible.js +27 -0
  17. package/es/Dom/scrollLocker.d.ts +12 -0
  18. package/es/Dom/scrollLocker.js +135 -0
  19. package/es/Dom/shadow.d.ts +8 -0
  20. package/es/Dom/shadow.js +18 -0
  21. package/es/Dom/styleChecker.d.ts +2 -0
  22. package/es/Dom/styleChecker.js +26 -0
  23. package/es/KeyCode.d.ts +436 -0
  24. package/es/KeyCode.js +538 -0
  25. package/es/Portal.d.ts +9 -0
  26. package/es/Portal.js +44 -0
  27. package/es/PortalWrapper.d.ts +51 -0
  28. package/es/PortalWrapper.js +217 -0
  29. package/es/React/isFragment.d.ts +4 -0
  30. package/es/React/isFragment.js +18 -0
  31. package/es/React/render.d.ts +13 -0
  32. package/es/React/render.js +114 -0
  33. package/es/composeProps.d.ts +2 -0
  34. package/es/composeProps.js +24 -0
  35. package/es/getScrollBarSize.d.ts +7 -0
  36. package/es/getScrollBarSize.js +76 -0
  37. package/es/hooks/useEffect.d.ts +2 -0
  38. package/es/hooks/useEffect.js +14 -0
  39. package/es/hooks/useEvent.d.ts +2 -0
  40. package/es/hooks/useEvent.js +16 -0
  41. package/es/hooks/useId.d.ts +4 -0
  42. package/es/hooks/useId.js +69 -0
  43. package/es/hooks/useLayoutEffect.d.ts +4 -0
  44. package/es/hooks/useLayoutEffect.js +30 -0
  45. package/es/hooks/useMemo.d.ts +1 -0
  46. package/es/hooks/useMemo.js +9 -0
  47. package/es/hooks/useMergedState.d.ts +12 -0
  48. package/es/hooks/useMergedState.js +68 -0
  49. package/es/hooks/useMobile.d.ts +6 -0
  50. package/es/hooks/useMobile.js +25 -0
  51. package/es/hooks/useState.d.ts +14 -0
  52. package/es/hooks/useState.js +32 -0
  53. package/es/hooks/useSyncState.d.ts +9 -0
  54. package/es/hooks/useSyncState.js +29 -0
  55. package/es/index.d.ts +6 -0
  56. package/es/index.js +6 -0
  57. package/es/isEqual.d.ts +9 -0
  58. package/es/isEqual.js +55 -0
  59. package/es/isMobile.d.ts +2 -0
  60. package/es/isMobile.js +7 -0
  61. package/es/omit.d.ts +1 -0
  62. package/es/omit.js +9 -0
  63. package/es/pickAttrs.d.ts +11 -0
  64. package/es/pickAttrs.js +51 -0
  65. package/es/proxyObject.d.ts +4 -0
  66. package/es/proxyObject.js +19 -0
  67. package/es/raf.d.ts +6 -0
  68. package/es/raf.js +54 -0
  69. package/es/ref.d.ts +19 -0
  70. package/es/ref.js +89 -0
  71. package/es/setStyle.d.ts +12 -0
  72. package/es/setStyle.js +26 -0
  73. package/es/test/domHook.d.ts +8 -0
  74. package/es/test/domHook.js +64 -0
  75. package/es/utils/get.d.ts +1 -0
  76. package/es/utils/get.js +10 -0
  77. package/es/utils/set.d.ts +6 -0
  78. package/es/utils/set.js +93 -0
  79. package/es/warning.d.ts +32 -0
  80. package/es/warning.js +68 -0
  81. package/lib/Children/toArray.d.ts +5 -0
  82. package/lib/Children/toArray.js +26 -0
  83. package/lib/Dom/canUseDom.d.ts +1 -0
  84. package/lib/Dom/canUseDom.js +9 -0
  85. package/lib/Dom/contains.d.ts +1 -0
  86. package/lib/Dom/contains.js +26 -0
  87. package/lib/Dom/dynamicCSS.d.ts +25 -0
  88. package/lib/Dom/dynamicCSS.js +163 -0
  89. package/lib/Dom/findDOMNode.d.ts +12 -0
  90. package/lib/Dom/findDOMNode.js +45 -0
  91. package/lib/Dom/focus.d.ts +8 -0
  92. package/lib/Dom/focus.js +98 -0
  93. package/lib/Dom/isVisible.d.ts +2 -0
  94. package/lib/Dom/isVisible.js +33 -0
  95. package/lib/Dom/scrollLocker.d.ts +12 -0
  96. package/lib/Dom/scrollLocker.js +141 -0
  97. package/lib/Dom/shadow.d.ts +8 -0
  98. package/lib/Dom/shadow.js +25 -0
  99. package/lib/Dom/styleChecker.d.ts +2 -0
  100. package/lib/Dom/styleChecker.js +33 -0
  101. package/lib/KeyCode.d.ts +436 -0
  102. package/lib/KeyCode.js +544 -0
  103. package/lib/Portal.d.ts +9 -0
  104. package/lib/Portal.js +51 -0
  105. package/lib/PortalWrapper.d.ts +51 -0
  106. package/lib/PortalWrapper.js +226 -0
  107. package/lib/React/isFragment.d.ts +4 -0
  108. package/lib/React/isFragment.js +24 -0
  109. package/lib/React/render.d.ts +13 -0
  110. package/lib/React/render.js +125 -0
  111. package/lib/composeProps.d.ts +2 -0
  112. package/lib/composeProps.js +30 -0
  113. package/lib/getScrollBarSize.d.ts +7 -0
  114. package/lib/getScrollBarSize.js +84 -0
  115. package/lib/hooks/useEffect.d.ts +2 -0
  116. package/lib/hooks/useEffect.js +22 -0
  117. package/lib/hooks/useEvent.d.ts +2 -0
  118. package/lib/hooks/useEvent.js +26 -0
  119. package/lib/hooks/useId.d.ts +4 -0
  120. package/lib/hooks/useId.js +78 -0
  121. package/lib/hooks/useLayoutEffect.d.ts +4 -0
  122. package/lib/hooks/useLayoutEffect.js +39 -0
  123. package/lib/hooks/useMemo.d.ts +1 -0
  124. package/lib/hooks/useMemo.js +18 -0
  125. package/lib/hooks/useMergedState.d.ts +12 -0
  126. package/lib/hooks/useMergedState.js +75 -0
  127. package/lib/hooks/useMobile.d.ts +6 -0
  128. package/lib/hooks/useMobile.js +31 -0
  129. package/lib/hooks/useState.d.ts +14 -0
  130. package/lib/hooks/useState.js +41 -0
  131. package/lib/hooks/useSyncState.d.ts +9 -0
  132. package/lib/hooks/useSyncState.js +39 -0
  133. package/lib/index.d.ts +6 -0
  134. package/lib/index.js +60 -0
  135. package/lib/isEqual.d.ts +9 -0
  136. package/lib/isEqual.js +61 -0
  137. package/lib/isMobile.d.ts +2 -0
  138. package/lib/isMobile.js +13 -0
  139. package/lib/omit.d.ts +1 -0
  140. package/lib/omit.js +15 -0
  141. package/lib/pickAttrs.d.ts +11 -0
  142. package/lib/pickAttrs.js +57 -0
  143. package/lib/proxyObject.d.ts +4 -0
  144. package/lib/proxyObject.js +25 -0
  145. package/lib/raf.d.ts +6 -0
  146. package/lib/raf.js +60 -0
  147. package/lib/ref.d.ts +19 -0
  148. package/lib/ref.js +96 -0
  149. package/lib/setStyle.d.ts +12 -0
  150. package/lib/setStyle.js +32 -0
  151. package/lib/test/domHook.d.ts +8 -0
  152. package/lib/test/domHook.js +71 -0
  153. package/lib/utils/get.d.ts +1 -0
  154. package/lib/utils/get.js +16 -0
  155. package/lib/utils/set.d.ts +6 -0
  156. package/lib/utils/set.js +101 -0
  157. package/lib/warning.d.ts +32 -0
  158. package/lib/warning.js +81 -0
  159. package/package.json +76 -0
package/lib/KeyCode.js ADDED
@@ -0,0 +1,544 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ /**
8
+ * @ignore
9
+ * some key-codes definition and utils from closure-library
10
+ * @author yiminghe@gmail.com
11
+ */
12
+
13
+ var KeyCode = {
14
+ /**
15
+ * MAC_ENTER
16
+ */
17
+ MAC_ENTER: 3,
18
+ /**
19
+ * BACKSPACE
20
+ */
21
+ BACKSPACE: 8,
22
+ /**
23
+ * TAB
24
+ */
25
+ TAB: 9,
26
+ /**
27
+ * NUMLOCK on FF/Safari Mac
28
+ */
29
+ NUM_CENTER: 12,
30
+ // NUMLOCK on FF/Safari Mac
31
+ /**
32
+ * ENTER
33
+ */
34
+ ENTER: 13,
35
+ /**
36
+ * SHIFT
37
+ */
38
+ SHIFT: 16,
39
+ /**
40
+ * CTRL
41
+ */
42
+ CTRL: 17,
43
+ /**
44
+ * ALT
45
+ */
46
+ ALT: 18,
47
+ /**
48
+ * PAUSE
49
+ */
50
+ PAUSE: 19,
51
+ /**
52
+ * CAPS_LOCK
53
+ */
54
+ CAPS_LOCK: 20,
55
+ /**
56
+ * ESC
57
+ */
58
+ ESC: 27,
59
+ /**
60
+ * SPACE
61
+ */
62
+ SPACE: 32,
63
+ /**
64
+ * PAGE_UP
65
+ */
66
+ PAGE_UP: 33,
67
+ // also NUM_NORTH_EAST
68
+ /**
69
+ * PAGE_DOWN
70
+ */
71
+ PAGE_DOWN: 34,
72
+ // also NUM_SOUTH_EAST
73
+ /**
74
+ * END
75
+ */
76
+ END: 35,
77
+ // also NUM_SOUTH_WEST
78
+ /**
79
+ * HOME
80
+ */
81
+ HOME: 36,
82
+ // also NUM_NORTH_WEST
83
+ /**
84
+ * LEFT
85
+ */
86
+ LEFT: 37,
87
+ // also NUM_WEST
88
+ /**
89
+ * UP
90
+ */
91
+ UP: 38,
92
+ // also NUM_NORTH
93
+ /**
94
+ * RIGHT
95
+ */
96
+ RIGHT: 39,
97
+ // also NUM_EAST
98
+ /**
99
+ * DOWN
100
+ */
101
+ DOWN: 40,
102
+ // also NUM_SOUTH
103
+ /**
104
+ * PRINT_SCREEN
105
+ */
106
+ PRINT_SCREEN: 44,
107
+ /**
108
+ * INSERT
109
+ */
110
+ INSERT: 45,
111
+ // also NUM_INSERT
112
+ /**
113
+ * DELETE
114
+ */
115
+ DELETE: 46,
116
+ // also NUM_DELETE
117
+ /**
118
+ * ZERO
119
+ */
120
+ ZERO: 48,
121
+ /**
122
+ * ONE
123
+ */
124
+ ONE: 49,
125
+ /**
126
+ * TWO
127
+ */
128
+ TWO: 50,
129
+ /**
130
+ * THREE
131
+ */
132
+ THREE: 51,
133
+ /**
134
+ * FOUR
135
+ */
136
+ FOUR: 52,
137
+ /**
138
+ * FIVE
139
+ */
140
+ FIVE: 53,
141
+ /**
142
+ * SIX
143
+ */
144
+ SIX: 54,
145
+ /**
146
+ * SEVEN
147
+ */
148
+ SEVEN: 55,
149
+ /**
150
+ * EIGHT
151
+ */
152
+ EIGHT: 56,
153
+ /**
154
+ * NINE
155
+ */
156
+ NINE: 57,
157
+ /**
158
+ * QUESTION_MARK
159
+ */
160
+ QUESTION_MARK: 63,
161
+ // needs localization
162
+ /**
163
+ * A
164
+ */
165
+ A: 65,
166
+ /**
167
+ * B
168
+ */
169
+ B: 66,
170
+ /**
171
+ * C
172
+ */
173
+ C: 67,
174
+ /**
175
+ * D
176
+ */
177
+ D: 68,
178
+ /**
179
+ * E
180
+ */
181
+ E: 69,
182
+ /**
183
+ * F
184
+ */
185
+ F: 70,
186
+ /**
187
+ * G
188
+ */
189
+ G: 71,
190
+ /**
191
+ * H
192
+ */
193
+ H: 72,
194
+ /**
195
+ * I
196
+ */
197
+ I: 73,
198
+ /**
199
+ * J
200
+ */
201
+ J: 74,
202
+ /**
203
+ * K
204
+ */
205
+ K: 75,
206
+ /**
207
+ * L
208
+ */
209
+ L: 76,
210
+ /**
211
+ * M
212
+ */
213
+ M: 77,
214
+ /**
215
+ * N
216
+ */
217
+ N: 78,
218
+ /**
219
+ * O
220
+ */
221
+ O: 79,
222
+ /**
223
+ * P
224
+ */
225
+ P: 80,
226
+ /**
227
+ * Q
228
+ */
229
+ Q: 81,
230
+ /**
231
+ * R
232
+ */
233
+ R: 82,
234
+ /**
235
+ * S
236
+ */
237
+ S: 83,
238
+ /**
239
+ * T
240
+ */
241
+ T: 84,
242
+ /**
243
+ * U
244
+ */
245
+ U: 85,
246
+ /**
247
+ * V
248
+ */
249
+ V: 86,
250
+ /**
251
+ * W
252
+ */
253
+ W: 87,
254
+ /**
255
+ * X
256
+ */
257
+ X: 88,
258
+ /**
259
+ * Y
260
+ */
261
+ Y: 89,
262
+ /**
263
+ * Z
264
+ */
265
+ Z: 90,
266
+ /**
267
+ * META
268
+ */
269
+ META: 91,
270
+ // WIN_KEY_LEFT
271
+ /**
272
+ * WIN_KEY_RIGHT
273
+ */
274
+ WIN_KEY_RIGHT: 92,
275
+ /**
276
+ * CONTEXT_MENU
277
+ */
278
+ CONTEXT_MENU: 93,
279
+ /**
280
+ * NUM_ZERO
281
+ */
282
+ NUM_ZERO: 96,
283
+ /**
284
+ * NUM_ONE
285
+ */
286
+ NUM_ONE: 97,
287
+ /**
288
+ * NUM_TWO
289
+ */
290
+ NUM_TWO: 98,
291
+ /**
292
+ * NUM_THREE
293
+ */
294
+ NUM_THREE: 99,
295
+ /**
296
+ * NUM_FOUR
297
+ */
298
+ NUM_FOUR: 100,
299
+ /**
300
+ * NUM_FIVE
301
+ */
302
+ NUM_FIVE: 101,
303
+ /**
304
+ * NUM_SIX
305
+ */
306
+ NUM_SIX: 102,
307
+ /**
308
+ * NUM_SEVEN
309
+ */
310
+ NUM_SEVEN: 103,
311
+ /**
312
+ * NUM_EIGHT
313
+ */
314
+ NUM_EIGHT: 104,
315
+ /**
316
+ * NUM_NINE
317
+ */
318
+ NUM_NINE: 105,
319
+ /**
320
+ * NUM_MULTIPLY
321
+ */
322
+ NUM_MULTIPLY: 106,
323
+ /**
324
+ * NUM_PLUS
325
+ */
326
+ NUM_PLUS: 107,
327
+ /**
328
+ * NUM_MINUS
329
+ */
330
+ NUM_MINUS: 109,
331
+ /**
332
+ * NUM_PERIOD
333
+ */
334
+ NUM_PERIOD: 110,
335
+ /**
336
+ * NUM_DIVISION
337
+ */
338
+ NUM_DIVISION: 111,
339
+ /**
340
+ * F1
341
+ */
342
+ F1: 112,
343
+ /**
344
+ * F2
345
+ */
346
+ F2: 113,
347
+ /**
348
+ * F3
349
+ */
350
+ F3: 114,
351
+ /**
352
+ * F4
353
+ */
354
+ F4: 115,
355
+ /**
356
+ * F5
357
+ */
358
+ F5: 116,
359
+ /**
360
+ * F6
361
+ */
362
+ F6: 117,
363
+ /**
364
+ * F7
365
+ */
366
+ F7: 118,
367
+ /**
368
+ * F8
369
+ */
370
+ F8: 119,
371
+ /**
372
+ * F9
373
+ */
374
+ F9: 120,
375
+ /**
376
+ * F10
377
+ */
378
+ F10: 121,
379
+ /**
380
+ * F11
381
+ */
382
+ F11: 122,
383
+ /**
384
+ * F12
385
+ */
386
+ F12: 123,
387
+ /**
388
+ * NUMLOCK
389
+ */
390
+ NUMLOCK: 144,
391
+ /**
392
+ * SEMICOLON
393
+ */
394
+ SEMICOLON: 186,
395
+ // needs localization
396
+ /**
397
+ * DASH
398
+ */
399
+ DASH: 189,
400
+ // needs localization
401
+ /**
402
+ * EQUALS
403
+ */
404
+ EQUALS: 187,
405
+ // needs localization
406
+ /**
407
+ * COMMA
408
+ */
409
+ COMMA: 188,
410
+ // needs localization
411
+ /**
412
+ * PERIOD
413
+ */
414
+ PERIOD: 190,
415
+ // needs localization
416
+ /**
417
+ * SLASH
418
+ */
419
+ SLASH: 191,
420
+ // needs localization
421
+ /**
422
+ * APOSTROPHE
423
+ */
424
+ APOSTROPHE: 192,
425
+ // needs localization
426
+ /**
427
+ * SINGLE_QUOTE
428
+ */
429
+ SINGLE_QUOTE: 222,
430
+ // needs localization
431
+ /**
432
+ * OPEN_SQUARE_BRACKET
433
+ */
434
+ OPEN_SQUARE_BRACKET: 219,
435
+ // needs localization
436
+ /**
437
+ * BACKSLASH
438
+ */
439
+ BACKSLASH: 220,
440
+ // needs localization
441
+ /**
442
+ * CLOSE_SQUARE_BRACKET
443
+ */
444
+ CLOSE_SQUARE_BRACKET: 221,
445
+ // needs localization
446
+ /**
447
+ * WIN_KEY
448
+ */
449
+ WIN_KEY: 224,
450
+ /**
451
+ * MAC_FF_META
452
+ */
453
+ MAC_FF_META: 224,
454
+ // Firefox (Gecko) fires this for the meta key instead of 91
455
+ /**
456
+ * WIN_IME
457
+ */
458
+ WIN_IME: 229,
459
+ // ======================== Function ========================
460
+ /**
461
+ * whether text and modified key is entered at the same time.
462
+ */
463
+ isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {
464
+ var keyCode = e.keyCode;
465
+ if (e.altKey && !e.ctrlKey || e.metaKey ||
466
+ // Function keys don't generate text
467
+ keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {
468
+ return false;
469
+ }
470
+
471
+ // The following keys are quite harmless, even in combination with
472
+ // CTRL, ALT or SHIFT.
473
+ switch (keyCode) {
474
+ case KeyCode.ALT:
475
+ case KeyCode.CAPS_LOCK:
476
+ case KeyCode.CONTEXT_MENU:
477
+ case KeyCode.CTRL:
478
+ case KeyCode.DOWN:
479
+ case KeyCode.END:
480
+ case KeyCode.ESC:
481
+ case KeyCode.HOME:
482
+ case KeyCode.INSERT:
483
+ case KeyCode.LEFT:
484
+ case KeyCode.MAC_FF_META:
485
+ case KeyCode.META:
486
+ case KeyCode.NUMLOCK:
487
+ case KeyCode.NUM_CENTER:
488
+ case KeyCode.PAGE_DOWN:
489
+ case KeyCode.PAGE_UP:
490
+ case KeyCode.PAUSE:
491
+ case KeyCode.PRINT_SCREEN:
492
+ case KeyCode.RIGHT:
493
+ case KeyCode.SHIFT:
494
+ case KeyCode.UP:
495
+ case KeyCode.WIN_KEY:
496
+ case KeyCode.WIN_KEY_RIGHT:
497
+ return false;
498
+ default:
499
+ return true;
500
+ }
501
+ },
502
+ /**
503
+ * whether character is entered.
504
+ */
505
+ isCharacterKey: function isCharacterKey(keyCode) {
506
+ if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {
507
+ return true;
508
+ }
509
+ if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {
510
+ return true;
511
+ }
512
+ if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {
513
+ return true;
514
+ }
515
+
516
+ // Safari sends zero key code for non-latin characters.
517
+ if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {
518
+ return true;
519
+ }
520
+ switch (keyCode) {
521
+ case KeyCode.SPACE:
522
+ case KeyCode.QUESTION_MARK:
523
+ case KeyCode.NUM_PLUS:
524
+ case KeyCode.NUM_MINUS:
525
+ case KeyCode.NUM_PERIOD:
526
+ case KeyCode.NUM_DIVISION:
527
+ case KeyCode.SEMICOLON:
528
+ case KeyCode.DASH:
529
+ case KeyCode.EQUALS:
530
+ case KeyCode.COMMA:
531
+ case KeyCode.PERIOD:
532
+ case KeyCode.SLASH:
533
+ case KeyCode.APOSTROPHE:
534
+ case KeyCode.SINGLE_QUOTE:
535
+ case KeyCode.OPEN_SQUARE_BRACKET:
536
+ case KeyCode.BACKSLASH:
537
+ case KeyCode.CLOSE_SQUARE_BRACKET:
538
+ return true;
539
+ default:
540
+ return false;
541
+ }
542
+ }
543
+ };
544
+ var _default = exports.default = KeyCode;
@@ -0,0 +1,9 @@
1
+ import type * as React from 'react';
2
+ export type PortalRef = {};
3
+ export interface PortalProps {
4
+ didUpdate?: (prevProps: PortalProps) => void;
5
+ getContainer: () => HTMLElement;
6
+ children?: React.ReactNode;
7
+ }
8
+ declare const Portal: React.ForwardRefExoticComponent<PortalProps & React.RefAttributes<PortalRef>>;
9
+ export default Portal;
package/lib/Portal.js ADDED
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _reactDom = _interopRequireDefault(require("react-dom"));
9
+ var _canUseDom = _interopRequireDefault(require("./Dom/canUseDom"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ var Portal = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
12
+ var didUpdate = props.didUpdate,
13
+ getContainer = props.getContainer,
14
+ children = props.children;
15
+ var parentRef = (0, _react.useRef)();
16
+ var containerRef = (0, _react.useRef)();
17
+
18
+ // Ref return nothing, only for wrapper check exist
19
+ (0, _react.useImperativeHandle)(ref, function () {
20
+ return {};
21
+ });
22
+
23
+ // Create container in client side with sync to avoid useEffect not get ref
24
+ var initRef = (0, _react.useRef)(false);
25
+ if (!initRef.current && (0, _canUseDom.default)()) {
26
+ containerRef.current = getContainer();
27
+ parentRef.current = containerRef.current.parentNode;
28
+ initRef.current = true;
29
+ }
30
+
31
+ // [Legacy] Used by `rc-trigger`
32
+ (0, _react.useEffect)(function () {
33
+ didUpdate === null || didUpdate === void 0 || didUpdate(props);
34
+ });
35
+ (0, _react.useEffect)(function () {
36
+ // Restore container to original place
37
+ // React 18 StrictMode will unmount first and mount back for effect test:
38
+ // https://reactjs.org/blog/2022/03/29/react-v18.html#new-strict-mode-behaviors
39
+ if (containerRef.current.parentNode === null && parentRef.current !== null) {
40
+ parentRef.current.appendChild(containerRef.current);
41
+ }
42
+ return function () {
43
+ var _containerRef$current;
44
+ // [Legacy] This should not be handle by Portal but parent PortalWrapper instead.
45
+ // Since some component use `Portal` directly, we have to keep the logic here.
46
+ (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 || (_containerRef$current = _containerRef$current.parentNode) === null || _containerRef$current === void 0 || _containerRef$current.removeChild(containerRef.current);
47
+ };
48
+ }, []);
49
+ return containerRef.current ? /*#__PURE__*/_reactDom.default.createPortal(children, containerRef.current) : null;
50
+ });
51
+ var _default = exports.default = Portal;
@@ -0,0 +1,51 @@
1
+ import * as React from 'react';
2
+ import type { PortalRef } from './Portal';
3
+ import ScrollLocker from './Dom/scrollLocker';
4
+ /** @private Test usage only */
5
+ export declare function getOpenCount(): number;
6
+ export type GetContainer = string | HTMLElement | (() => HTMLElement);
7
+ export interface PortalWrapperProps {
8
+ visible?: boolean;
9
+ getContainer?: GetContainer;
10
+ wrapperClassName?: string;
11
+ forceRender?: boolean;
12
+ children: (info: {
13
+ getOpenCount: () => number;
14
+ getContainer: () => HTMLElement;
15
+ switchScrollingEffect: () => void;
16
+ scrollLocker: ScrollLocker;
17
+ ref?: (c: any) => void;
18
+ }) => React.ReactNode;
19
+ }
20
+ declare class PortalWrapper extends React.Component<PortalWrapperProps> {
21
+ container?: HTMLElement;
22
+ componentRef: React.RefObject<PortalRef>;
23
+ rafId?: number;
24
+ scrollLocker: ScrollLocker;
25
+ constructor(props: PortalWrapperProps);
26
+ renderComponent?: (info: {
27
+ afterClose: (...params: any[]) => void;
28
+ onClose: (...params: any[]) => void;
29
+ visible: boolean;
30
+ }) => void;
31
+ componentDidMount(): void;
32
+ componentDidUpdate(prevProps: PortalWrapperProps): void;
33
+ updateScrollLocker: (prevProps?: Partial<PortalWrapperProps>) => void;
34
+ updateOpenCount: (prevProps?: Partial<PortalWrapperProps>) => void;
35
+ componentWillUnmount(): void;
36
+ attachToParent: (force?: boolean) => boolean;
37
+ getContainer: () => HTMLElement;
38
+ setWrapperClassName: () => void;
39
+ removeCurrentContainer: () => void;
40
+ /**
41
+ * Enhance ./switchScrollingEffect
42
+ * 1. Simulate document body scroll bar with
43
+ * 2. Record body has overflow style and recover when all of PortalWrapper invisible
44
+ * 3. Disable body scroll when PortalWrapper has open
45
+ *
46
+ * @memberof PortalWrapper
47
+ */
48
+ switchScrollingEffect: () => void;
49
+ render(): any;
50
+ }
51
+ export default PortalWrapper;