@v-c/util 0.0.1

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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/dist/Children/isFragment.cjs +1 -0
  3. package/dist/Children/isFragment.d.ts +3 -0
  4. package/dist/Children/isFragment.js +7 -0
  5. package/dist/Children/toArray.cjs +1 -0
  6. package/dist/Children/toArray.d.ts +8 -0
  7. package/dist/Children/toArray.js +11 -0
  8. package/dist/Dom/addEventListener.cjs +1 -0
  9. package/dist/Dom/addEventListener.d.ts +8 -0
  10. package/dist/Dom/addEventListener.js +12 -0
  11. package/dist/Dom/canUseDom.cjs +1 -0
  12. package/dist/Dom/canUseDom.d.ts +1 -0
  13. package/dist/Dom/canUseDom.js +6 -0
  14. package/dist/Dom/class.cjs +1 -0
  15. package/dist/Dom/class.d.ts +3 -0
  16. package/dist/Dom/class.js +19 -0
  17. package/dist/Dom/contains.cjs +1 -0
  18. package/dist/Dom/contains.d.ts +1 -0
  19. package/dist/Dom/contains.js +16 -0
  20. package/dist/Dom/css.cjs +1 -0
  21. package/dist/Dom/css.d.ts +20 -0
  22. package/dist/Dom/css.js +75 -0
  23. package/dist/Dom/dynamicCSS.cjs +1 -0
  24. package/dist/Dom/dynamicCSS.d.ts +24 -0
  25. package/dist/Dom/dynamicCSS.js +78 -0
  26. package/dist/Dom/findDOMNode.cjs +1 -0
  27. package/dist/Dom/findDOMNode.d.ts +7 -0
  28. package/dist/Dom/findDOMNode.js +12 -0
  29. package/dist/Dom/focus.cjs +1 -0
  30. package/dist/Dom/focus.d.ts +8 -0
  31. package/dist/Dom/focus.js +40 -0
  32. package/dist/Dom/isVisible.cjs +1 -0
  33. package/dist/Dom/isVisible.d.ts +2 -0
  34. package/dist/Dom/isVisible.js +22 -0
  35. package/dist/Dom/scrollLocker.cjs +1 -0
  36. package/dist/Dom/scrollLocker.d.ts +12 -0
  37. package/dist/Dom/scrollLocker.js +81 -0
  38. package/dist/Dom/shadow.cjs +1 -0
  39. package/dist/Dom/shadow.d.ts +8 -0
  40. package/dist/Dom/shadow.js +14 -0
  41. package/dist/Dom/styleChecker.cjs +1 -0
  42. package/dist/Dom/styleChecker.d.ts +2 -0
  43. package/dist/Dom/styleChecker.js +20 -0
  44. package/dist/Dom/support.cjs +1 -0
  45. package/dist/Dom/support.d.ts +6 -0
  46. package/dist/Dom/support.js +24 -0
  47. package/dist/EventInterface.cjs +1 -0
  48. package/dist/EventInterface.d.ts +18 -0
  49. package/dist/EventInterface.js +1 -0
  50. package/dist/KeyCode.cjs +1 -0
  51. package/dist/KeyCode.d.ts +435 -0
  52. package/dist/KeyCode.js +516 -0
  53. package/dist/Portal.cjs +1 -0
  54. package/dist/Portal.d.ts +8 -0
  55. package/dist/Portal.js +38 -0
  56. package/dist/PortalWrapper.cjs +1 -0
  57. package/dist/PortalWrapper.d.ts +28 -0
  58. package/dist/PortalWrapper.js +114 -0
  59. package/dist/composeProps.cjs +1 -0
  60. package/dist/composeProps.d.ts +2 -0
  61. package/dist/composeProps.js +16 -0
  62. package/dist/createRef.cjs +1 -0
  63. package/dist/createRef.d.ts +12 -0
  64. package/dist/createRef.js +21 -0
  65. package/dist/debug/diff.cjs +1 -0
  66. package/dist/debug/diff.d.ts +1 -0
  67. package/dist/debug/diff.js +41 -0
  68. package/dist/deprecated.cjs +1 -0
  69. package/dist/deprecated.d.ts +1 -0
  70. package/dist/deprecated.js +8 -0
  71. package/dist/getScrollBarSize.cjs +1 -0
  72. package/dist/getScrollBarSize.d.ts +5 -0
  73. package/dist/getScrollBarSize.js +37 -0
  74. package/dist/guid.cjs +1 -0
  75. package/dist/guid.d.ts +1 -0
  76. package/dist/guid.js +7 -0
  77. package/dist/hooks/useId.cjs +1 -0
  78. package/dist/hooks/useId.d.ts +5 -0
  79. package/dist/hooks/useId.js +17 -0
  80. package/dist/hooks/useMemo.cjs +1 -0
  81. package/dist/hooks/useMemo.d.ts +3 -0
  82. package/dist/hooks/useMemo.js +10 -0
  83. package/dist/hooks/useMergedState.cjs +1 -0
  84. package/dist/hooks/useMergedState.d.ts +8 -0
  85. package/dist/hooks/useMergedState.js +21 -0
  86. package/dist/hooks/useState.cjs +1 -0
  87. package/dist/hooks/useState.d.ts +3 -0
  88. package/dist/hooks/useState.js +11 -0
  89. package/dist/index.cjs +1 -0
  90. package/dist/index.d.ts +3 -0
  91. package/dist/index.js +8 -0
  92. package/dist/isEqual.cjs +1 -0
  93. package/dist/isEqual.d.ts +8 -0
  94. package/dist/isEqual.js +32 -0
  95. package/dist/isMobile.cjs +1 -0
  96. package/dist/isMobile.d.ts +2 -0
  97. package/dist/isMobile.js +13 -0
  98. package/dist/omit.cjs +1 -0
  99. package/dist/omit.d.ts +1 -0
  100. package/dist/omit.js +9 -0
  101. package/dist/pickAttrs.cjs +18 -0
  102. package/dist/pickAttrs.d.ts +11 -0
  103. package/dist/pickAttrs.js +41 -0
  104. package/dist/props-util/index.cjs +1 -0
  105. package/dist/props-util/index.d.ts +2 -0
  106. package/dist/props-util/index.js +14 -0
  107. package/dist/raf.cjs +1 -0
  108. package/dist/raf.d.ts +6 -0
  109. package/dist/raf.js +30 -0
  110. package/dist/setStyle.cjs +1 -0
  111. package/dist/setStyle.d.ts +13 -0
  112. package/dist/setStyle.js +13 -0
  113. package/dist/switchScrollingEffect.cjs +1 -0
  114. package/dist/switchScrollingEffect.d.ts +2 -0
  115. package/dist/switchScrollingEffect.js +31 -0
  116. package/dist/test/domHook.cjs +1 -0
  117. package/dist/test/domHook.d.ts +8 -0
  118. package/dist/test/domHook.js +37 -0
  119. package/dist/type.cjs +1 -0
  120. package/dist/type.d.ts +63 -0
  121. package/dist/type.js +49 -0
  122. package/dist/utils/checkSlotProp.cjs +1 -0
  123. package/dist/utils/checkSlotProp.d.ts +1 -0
  124. package/dist/utils/checkSlotProp.js +7 -0
  125. package/dist/utils/get.cjs +1 -0
  126. package/dist/utils/get.d.ts +1 -0
  127. package/dist/utils/get.js +12 -0
  128. package/dist/utils/set.cjs +1 -0
  129. package/dist/utils/set.d.ts +6 -0
  130. package/dist/utils/set.js +41 -0
  131. package/dist/vnode.cjs +1 -0
  132. package/dist/vnode.d.ts +12 -0
  133. package/dist/vnode.js +41 -0
  134. package/dist/warning.cjs +1 -0
  135. package/dist/warning.d.ts +18 -0
  136. package/dist/warning.js +48 -0
  137. package/package.json +37 -0
  138. package/src/Children/isFragment.ts +6 -0
  139. package/src/Children/tests/isFragment.test.tsx +15 -0
  140. package/src/Children/tests/toArray.test.tsx +101 -0
  141. package/src/Children/toArray.ts +27 -0
  142. package/src/Dom/addEventListener.ts +20 -0
  143. package/src/Dom/canUseDom.ts +7 -0
  144. package/src/Dom/class.ts +29 -0
  145. package/src/Dom/contains.ts +19 -0
  146. package/src/Dom/css.ts +113 -0
  147. package/src/Dom/dynamicCSS.ts +173 -0
  148. package/src/Dom/findDOMNode.ts +23 -0
  149. package/src/Dom/focus.ts +96 -0
  150. package/src/Dom/isVisible.ts +23 -0
  151. package/src/Dom/scrollLocker.ts +143 -0
  152. package/src/Dom/shadow.ts +17 -0
  153. package/src/Dom/styleChecker.ts +31 -0
  154. package/src/Dom/support.ts +27 -0
  155. package/src/EventInterface.ts +19 -0
  156. package/src/KeyCode.ts +516 -0
  157. package/src/Portal.tsx +50 -0
  158. package/src/PortalWrapper.tsx +214 -0
  159. package/src/composeProps.ts +23 -0
  160. package/src/createRef.ts +33 -0
  161. package/src/debug/diff.ts +66 -0
  162. package/src/deprecated.ts +8 -0
  163. package/src/getScrollBarSize.tsx +57 -0
  164. package/src/guid.ts +4 -0
  165. package/src/hooks/useId.ts +31 -0
  166. package/src/hooks/useMemo.ts +21 -0
  167. package/src/hooks/useMergedState.ts +44 -0
  168. package/src/hooks/useState.ts +17 -0
  169. package/src/index.ts +3 -0
  170. package/src/isEqual.ts +50 -0
  171. package/src/isMobile.ts +15 -0
  172. package/src/omit.ts +14 -0
  173. package/src/pickAttrs.ts +78 -0
  174. package/src/props-util/index.ts +22 -0
  175. package/src/raf.ts +55 -0
  176. package/src/setStyle.ts +38 -0
  177. package/src/switchScrollingEffect.ts +48 -0
  178. package/src/test/domHook.ts +67 -0
  179. package/src/type.ts +94 -0
  180. package/src/utils/checkSlotProp.ts +10 -0
  181. package/src/utils/get.ts +15 -0
  182. package/src/utils/set.ts +110 -0
  183. package/src/vnode.ts +86 -0
  184. package/src/warning.ts +79 -0
  185. package/tests/Portal.test.tsx +199 -0
  186. package/tsconfig.json +7 -0
  187. package/vite.config.ts +18 -0
package/src/KeyCode.ts ADDED
@@ -0,0 +1,516 @@
1
+ /**
2
+ * some key-codes definition and utils from closure-library
3
+ * @author yiminghe@gmail.com
4
+ */
5
+
6
+ const KeyCode = {
7
+ /**
8
+ * MAC_ENTER
9
+ */
10
+ MAC_ENTER: 3,
11
+ /**
12
+ * BACKSPACE
13
+ */
14
+ BACKSPACE: 8,
15
+ /**
16
+ * TAB
17
+ */
18
+ TAB: 9,
19
+ /**
20
+ * NUMLOCK on FF/Safari Mac
21
+ */
22
+ NUM_CENTER: 12, // NUMLOCK on FF/Safari Mac
23
+ /**
24
+ * ENTER
25
+ */
26
+ ENTER: 13,
27
+ /**
28
+ * SHIFT
29
+ */
30
+ SHIFT: 16,
31
+ /**
32
+ * CTRL
33
+ */
34
+ CTRL: 17,
35
+ /**
36
+ * ALT
37
+ */
38
+ ALT: 18,
39
+ /**
40
+ * PAUSE
41
+ */
42
+ PAUSE: 19,
43
+ /**
44
+ * CAPS_LOCK
45
+ */
46
+ CAPS_LOCK: 20,
47
+ /**
48
+ * ESC
49
+ */
50
+ ESC: 27,
51
+ /**
52
+ * SPACE
53
+ */
54
+ SPACE: 32,
55
+ /**
56
+ * PAGE_UP
57
+ */
58
+ PAGE_UP: 33, // also NUM_NORTH_EAST
59
+ /**
60
+ * PAGE_DOWN
61
+ */
62
+ PAGE_DOWN: 34, // also NUM_SOUTH_EAST
63
+ /**
64
+ * END
65
+ */
66
+ END: 35, // also NUM_SOUTH_WEST
67
+ /**
68
+ * HOME
69
+ */
70
+ HOME: 36, // also NUM_NORTH_WEST
71
+ /**
72
+ * LEFT
73
+ */
74
+ LEFT: 37, // also NUM_WEST
75
+ /**
76
+ * UP
77
+ */
78
+ UP: 38, // also NUM_NORTH
79
+ /**
80
+ * RIGHT
81
+ */
82
+ RIGHT: 39, // also NUM_EAST
83
+ /**
84
+ * DOWN
85
+ */
86
+ DOWN: 40, // also NUM_SOUTH
87
+ /**
88
+ * PRINT_SCREEN
89
+ */
90
+ PRINT_SCREEN: 44,
91
+ /**
92
+ * INSERT
93
+ */
94
+ INSERT: 45, // also NUM_INSERT
95
+ /**
96
+ * DELETE
97
+ */
98
+ DELETE: 46, // also NUM_DELETE
99
+ /**
100
+ * ZERO
101
+ */
102
+ ZERO: 48,
103
+ /**
104
+ * ONE
105
+ */
106
+ ONE: 49,
107
+ /**
108
+ * TWO
109
+ */
110
+ TWO: 50,
111
+ /**
112
+ * THREE
113
+ */
114
+ THREE: 51,
115
+ /**
116
+ * FOUR
117
+ */
118
+ FOUR: 52,
119
+ /**
120
+ * FIVE
121
+ */
122
+ FIVE: 53,
123
+ /**
124
+ * SIX
125
+ */
126
+ SIX: 54,
127
+ /**
128
+ * SEVEN
129
+ */
130
+ SEVEN: 55,
131
+ /**
132
+ * EIGHT
133
+ */
134
+ EIGHT: 56,
135
+ /**
136
+ * NINE
137
+ */
138
+ NINE: 57,
139
+ /**
140
+ * QUESTION_MARK
141
+ */
142
+ QUESTION_MARK: 63, // needs localization
143
+ /**
144
+ * A
145
+ */
146
+ A: 65,
147
+ /**
148
+ * B
149
+ */
150
+ B: 66,
151
+ /**
152
+ * C
153
+ */
154
+ C: 67,
155
+ /**
156
+ * D
157
+ */
158
+ D: 68,
159
+ /**
160
+ * E
161
+ */
162
+ E: 69,
163
+ /**
164
+ * F
165
+ */
166
+ F: 70,
167
+ /**
168
+ * G
169
+ */
170
+ G: 71,
171
+ /**
172
+ * H
173
+ */
174
+ H: 72,
175
+ /**
176
+ * I
177
+ */
178
+ I: 73,
179
+ /**
180
+ * J
181
+ */
182
+ J: 74,
183
+ /**
184
+ * K
185
+ */
186
+ K: 75,
187
+ /**
188
+ * L
189
+ */
190
+ L: 76,
191
+ /**
192
+ * M
193
+ */
194
+ M: 77,
195
+ /**
196
+ * N
197
+ */
198
+ N: 78,
199
+ /**
200
+ * O
201
+ */
202
+ O: 79,
203
+ /**
204
+ * P
205
+ */
206
+ P: 80,
207
+ /**
208
+ * Q
209
+ */
210
+ Q: 81,
211
+ /**
212
+ * R
213
+ */
214
+ R: 82,
215
+ /**
216
+ * S
217
+ */
218
+ S: 83,
219
+ /**
220
+ * T
221
+ */
222
+ T: 84,
223
+ /**
224
+ * U
225
+ */
226
+ U: 85,
227
+ /**
228
+ * V
229
+ */
230
+ V: 86,
231
+ /**
232
+ * W
233
+ */
234
+ W: 87,
235
+ /**
236
+ * X
237
+ */
238
+ X: 88,
239
+ /**
240
+ * Y
241
+ */
242
+ Y: 89,
243
+ /**
244
+ * Z
245
+ */
246
+ Z: 90,
247
+ /**
248
+ * META
249
+ */
250
+ META: 91, // WIN_KEY_LEFT
251
+ /**
252
+ * WIN_KEY_RIGHT
253
+ */
254
+ WIN_KEY_RIGHT: 92,
255
+ /**
256
+ * CONTEXT_MENU
257
+ */
258
+ CONTEXT_MENU: 93,
259
+ /**
260
+ * NUM_ZERO
261
+ */
262
+ NUM_ZERO: 96,
263
+ /**
264
+ * NUM_ONE
265
+ */
266
+ NUM_ONE: 97,
267
+ /**
268
+ * NUM_TWO
269
+ */
270
+ NUM_TWO: 98,
271
+ /**
272
+ * NUM_THREE
273
+ */
274
+ NUM_THREE: 99,
275
+ /**
276
+ * NUM_FOUR
277
+ */
278
+ NUM_FOUR: 100,
279
+ /**
280
+ * NUM_FIVE
281
+ */
282
+ NUM_FIVE: 101,
283
+ /**
284
+ * NUM_SIX
285
+ */
286
+ NUM_SIX: 102,
287
+ /**
288
+ * NUM_SEVEN
289
+ */
290
+ NUM_SEVEN: 103,
291
+ /**
292
+ * NUM_EIGHT
293
+ */
294
+ NUM_EIGHT: 104,
295
+ /**
296
+ * NUM_NINE
297
+ */
298
+ NUM_NINE: 105,
299
+ /**
300
+ * NUM_MULTIPLY
301
+ */
302
+ NUM_MULTIPLY: 106,
303
+ /**
304
+ * NUM_PLUS
305
+ */
306
+ NUM_PLUS: 107,
307
+ /**
308
+ * NUM_MINUS
309
+ */
310
+ NUM_MINUS: 109,
311
+ /**
312
+ * NUM_PERIOD
313
+ */
314
+ NUM_PERIOD: 110,
315
+ /**
316
+ * NUM_DIVISION
317
+ */
318
+ NUM_DIVISION: 111,
319
+ /**
320
+ * F1
321
+ */
322
+ F1: 112,
323
+ /**
324
+ * F2
325
+ */
326
+ F2: 113,
327
+ /**
328
+ * F3
329
+ */
330
+ F3: 114,
331
+ /**
332
+ * F4
333
+ */
334
+ F4: 115,
335
+ /**
336
+ * F5
337
+ */
338
+ F5: 116,
339
+ /**
340
+ * F6
341
+ */
342
+ F6: 117,
343
+ /**
344
+ * F7
345
+ */
346
+ F7: 118,
347
+ /**
348
+ * F8
349
+ */
350
+ F8: 119,
351
+ /**
352
+ * F9
353
+ */
354
+ F9: 120,
355
+ /**
356
+ * F10
357
+ */
358
+ F10: 121,
359
+ /**
360
+ * F11
361
+ */
362
+ F11: 122,
363
+ /**
364
+ * F12
365
+ */
366
+ F12: 123,
367
+ /**
368
+ * NUMLOCK
369
+ */
370
+ NUMLOCK: 144,
371
+ /**
372
+ * SEMICOLON
373
+ */
374
+ SEMICOLON: 186, // needs localization
375
+ /**
376
+ * DASH
377
+ */
378
+ DASH: 189, // needs localization
379
+ /**
380
+ * EQUALS
381
+ */
382
+ EQUALS: 187, // needs localization
383
+ /**
384
+ * COMMA
385
+ */
386
+ COMMA: 188, // needs localization
387
+ /**
388
+ * PERIOD
389
+ */
390
+ PERIOD: 190, // needs localization
391
+ /**
392
+ * SLASH
393
+ */
394
+ SLASH: 191, // needs localization
395
+ /**
396
+ * APOSTROPHE
397
+ */
398
+ APOSTROPHE: 192, // needs localization
399
+ /**
400
+ * SINGLE_QUOTE
401
+ */
402
+ SINGLE_QUOTE: 222, // needs localization
403
+ /**
404
+ * OPEN_SQUARE_BRACKET
405
+ */
406
+ OPEN_SQUARE_BRACKET: 219, // needs localization
407
+ /**
408
+ * BACKSLASH
409
+ */
410
+ BACKSLASH: 220, // needs localization
411
+ /**
412
+ * CLOSE_SQUARE_BRACKET
413
+ */
414
+ CLOSE_SQUARE_BRACKET: 221, // needs localization
415
+ /**
416
+ * WIN_KEY
417
+ */
418
+ WIN_KEY: 224,
419
+ /**
420
+ * MAC_FF_META
421
+ */
422
+ MAC_FF_META: 224, // Firefox (Gecko) fires this for the meta key instead of 91
423
+ /**
424
+ * WIN_IME
425
+ */
426
+ WIN_IME: 229,
427
+
428
+ // ======================== Function ========================
429
+ /**
430
+ * whether text and modified key is entered at the same time.
431
+ */
432
+ isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e: KeyboardEvent) {
433
+ const { keyCode } = e
434
+ if (
435
+ (e.altKey && !e.ctrlKey)
436
+ || e.metaKey
437
+ // Function keys don't generate text
438
+ || (keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12)
439
+ )
440
+ return false
441
+
442
+ // The following keys are quite harmless, even in combination with
443
+ // CTRL, ALT or SHIFT.
444
+ switch (keyCode) {
445
+ case KeyCode.ALT:
446
+ case KeyCode.CAPS_LOCK:
447
+ case KeyCode.CONTEXT_MENU:
448
+ case KeyCode.CTRL:
449
+ case KeyCode.DOWN:
450
+ case KeyCode.END:
451
+ case KeyCode.ESC:
452
+ case KeyCode.HOME:
453
+ case KeyCode.INSERT:
454
+ case KeyCode.LEFT:
455
+ case KeyCode.MAC_FF_META:
456
+ case KeyCode.META:
457
+ case KeyCode.NUMLOCK:
458
+ case KeyCode.NUM_CENTER:
459
+ case KeyCode.PAGE_DOWN:
460
+ case KeyCode.PAGE_UP:
461
+ case KeyCode.PAUSE:
462
+ case KeyCode.PRINT_SCREEN:
463
+ case KeyCode.RIGHT:
464
+ case KeyCode.SHIFT:
465
+ case KeyCode.UP:
466
+ case KeyCode.WIN_KEY:
467
+ case KeyCode.WIN_KEY_RIGHT:
468
+ return false
469
+ default:
470
+ return true
471
+ }
472
+ },
473
+
474
+ /**
475
+ * whether character is entered.
476
+ */
477
+ isCharacterKey: function isCharacterKey(keyCode: number) {
478
+ if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE)
479
+ return true
480
+
481
+ if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY)
482
+ return true
483
+
484
+ if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z)
485
+ return true
486
+
487
+ // Safari sends zero key code for non-latin characters.
488
+ if (window.navigator.userAgent.includes('WebKit') && keyCode === 0)
489
+ return true
490
+
491
+ switch (keyCode) {
492
+ case KeyCode.SPACE:
493
+ case KeyCode.QUESTION_MARK:
494
+ case KeyCode.NUM_PLUS:
495
+ case KeyCode.NUM_MINUS:
496
+ case KeyCode.NUM_PERIOD:
497
+ case KeyCode.NUM_DIVISION:
498
+ case KeyCode.SEMICOLON:
499
+ case KeyCode.DASH:
500
+ case KeyCode.EQUALS:
501
+ case KeyCode.COMMA:
502
+ case KeyCode.PERIOD:
503
+ case KeyCode.SLASH:
504
+ case KeyCode.APOSTROPHE:
505
+ case KeyCode.SINGLE_QUOTE:
506
+ case KeyCode.OPEN_SQUARE_BRACKET:
507
+ case KeyCode.BACKSLASH:
508
+ case KeyCode.CLOSE_SQUARE_BRACKET:
509
+ return true
510
+ default:
511
+ return false
512
+ }
513
+ },
514
+ }
515
+
516
+ export default KeyCode
package/src/Portal.tsx ADDED
@@ -0,0 +1,50 @@
1
+ import { Teleport, defineComponent, onBeforeUnmount, onMounted, onUnmounted, shallowRef } from 'vue'
2
+ import canUseDom from './Dom/canUseDom'
3
+
4
+ export interface PortalProps {
5
+ didUpdate?: (prevProps: PortalProps) => void
6
+ getContainer: () => HTMLElement
7
+ }
8
+
9
+ export interface PortalRef {
10
+
11
+ }
12
+
13
+ const Portal = defineComponent<PortalProps>((props, ctx) => {
14
+ const parentRef = shallowRef()
15
+ const containerRef = shallowRef()
16
+
17
+ // Create container in client side with sync to avoid useEffect not get ref
18
+ const initRef = shallowRef(false)
19
+
20
+ if (!initRef.value && canUseDom()) {
21
+ containerRef.value = props.getContainer()
22
+ parentRef.value = containerRef.value?.parentNode
23
+ initRef.value = true
24
+ }
25
+
26
+ onMounted(() => {
27
+ if (containerRef.value?.parentNode === null && parentRef.value !== null)
28
+ parentRef.value.appendChild(containerRef.value)
29
+ })
30
+
31
+ onBeforeUnmount(() => {
32
+ props.didUpdate?.(props)
33
+ })
34
+
35
+ onUnmounted(() => {
36
+ containerRef.value?.parentNode?.removeChild?.(containerRef.value)
37
+ })
38
+ return () => {
39
+ if (containerRef.value) {
40
+ return (
41
+ <Teleport to={containerRef.value}>
42
+ {ctx.slots.default?.()}
43
+ </Teleport>
44
+ )
45
+ }
46
+ return null
47
+ }
48
+ }, { inheritAttrs: false })
49
+
50
+ export default Portal