react-tooltip 5.26.4 → 5.27.0-beta.1205.rc.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.
package/README.md CHANGED
@@ -54,9 +54,9 @@ React Tooltip is proud to be sponsored by [Frigade](https://frigade.com/?source=
54
54
 
55
55
  #### Silver Sponsors ✪
56
56
 
57
- <a href="https://dopt.com/?source=react-tooltip">
58
- <img alt="Dopt" style="height: 200px; width: 200px;" src="docs/static/img/sponsors/dopt.png" />
59
- </a>
57
+ <!-- <a href="#">
58
+ <img alt="Slot" style="height: 200px; width: 200px;" src="docs/static/img/sponsors/slot.png" />
59
+ </a> -->
60
60
 
61
61
  ## Powered by
62
62
 
@@ -0,0 +1,77 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+ const util = require('util')
3
+ const exec = util.promisify(require('child_process').exec)
4
+ const package = require('./package.json')
5
+
6
+ const args = require('minimist')(process.argv.slice(2))
7
+
8
+ const issueNumber = args['issue']
9
+
10
+ console.log(issueNumber)
11
+
12
+ const runCommand = async (command) => {
13
+ return new Promise((resolve) => {
14
+ exec(command, (error, stdout, stderr) => {
15
+ resolve({ error, stdout, stderr })
16
+ })
17
+ })
18
+ }
19
+
20
+ const AutoBetaRelease = async () => {
21
+ // get all the versions of the package from npm
22
+ const { stdout } = await runCommand(`npm view . versions --json`)
23
+
24
+ // show npm published versions of this package
25
+ console.log(stdout)
26
+
27
+ // check if there is a beta release with the same issue number on published versions
28
+ const arrayOfBetaReleases = JSON.parse(stdout).filter((version) =>
29
+ version.includes(`${package.version}-beta.${issueNumber}`),
30
+ )
31
+
32
+ let fullLastBetaRelease = null
33
+
34
+ // if yes, get the latest beta release. Output: 1.0.0-beta.1.rc.0
35
+ if (arrayOfBetaReleases.length) {
36
+ fullLastBetaRelease = arrayOfBetaReleases[arrayOfBetaReleases.length - 1]
37
+ }
38
+
39
+ console.log('Last Beta Release: ', fullLastBetaRelease)
40
+
41
+ let nextBetaReleaseVersion = 0
42
+
43
+ if (fullLastBetaRelease) {
44
+ const lastBetaReleaseRCVersionArray = fullLastBetaRelease.match(/rc.+[0-9]+/g)
45
+
46
+ const lastBetaReleaseRCVersion =
47
+ lastBetaReleaseRCVersionArray && lastBetaReleaseRCVersionArray.length
48
+ ? lastBetaReleaseRCVersionArray[0]
49
+ : null
50
+
51
+ const lastBetaReleaseVersion = lastBetaReleaseRCVersion
52
+ ? lastBetaReleaseRCVersion.split('.')[1]
53
+ : 0
54
+
55
+ nextBetaReleaseVersion = parseInt(lastBetaReleaseVersion, 10) + 1
56
+ }
57
+
58
+ // next beta release version. Output: 1.0.0-beta.1.rc.1
59
+ const nextBetaReleaseVesionFull = `${package.version}-beta.${issueNumber}.rc.${nextBetaReleaseVersion}`
60
+
61
+ // update the beta version on package.json
62
+ const { error } = await runCommand(
63
+ `npm version ${nextBetaReleaseVesionFull} --no-git-tag-version`,
64
+ )
65
+
66
+ if (error) {
67
+ console.error(error)
68
+ return
69
+ }
70
+
71
+ // the beta version is already updated on package.json on the next line
72
+ console.log('Next Beta version: ', `${nextBetaReleaseVesionFull}`)
73
+
74
+ await runCommand(`echo "NEW_VERSION=${nextBetaReleaseVesionFull}" >> $GITHUB_ENV`)
75
+ }
76
+
77
+ AutoBetaRelease()
@@ -291,6 +291,14 @@ const getScrollParent = (node) => {
291
291
 
292
292
  const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
293
293
 
294
+ const clearTimeoutRef = (ref) => {
295
+ if (ref.current) {
296
+ clearTimeout(ref.current);
297
+ // eslint-disable-next-line no-param-reassign
298
+ ref.current = null;
299
+ }
300
+ };
301
+
294
302
  const DEFAULT_TOOLTIP_ID = 'DEFAULT_TOOLTIP_ID';
295
303
  const DEFAULT_CONTEXT_DATA = {
296
304
  anchorRefs: new Set(),
@@ -429,8 +437,9 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
429
437
  const actualOpenEvents = openEvents
430
438
  ? { ...openEvents }
431
439
  : {
432
- mouseenter: true,
440
+ mouseover: true,
433
441
  focus: true,
442
+ mouseenter: false,
434
443
  click: false,
435
444
  dblclick: false,
436
445
  mousedown: false,
@@ -439,14 +448,16 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
439
448
  Object.assign(actualOpenEvents, {
440
449
  mouseenter: false,
441
450
  focus: false,
451
+ mouseover: false,
442
452
  click: true,
443
453
  });
444
454
  }
445
455
  const actualCloseEvents = closeEvents
446
456
  ? { ...closeEvents }
447
457
  : {
448
- mouseleave: true,
458
+ mouseout: true,
449
459
  blur: true,
460
+ mouseleave: false,
450
461
  click: false,
451
462
  dblclick: false,
452
463
  mouseup: false,
@@ -455,6 +466,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
455
466
  Object.assign(actualCloseEvents, {
456
467
  mouseleave: false,
457
468
  blur: false,
469
+ mouseout: false,
458
470
  });
459
471
  }
460
472
  const actualGlobalCloseEvents = globalCloseEvents
@@ -541,9 +553,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
541
553
  if (show === wasShowing.current) {
542
554
  return;
543
555
  }
544
- if (missedTransitionTimerRef.current) {
545
- clearTimeout(missedTransitionTimerRef.current);
546
- }
556
+ clearTimeoutRef(missedTransitionTimerRef);
547
557
  wasShowing.current = show;
548
558
  if (show) {
549
559
  afterShow === null || afterShow === void 0 ? void 0 : afterShow();
@@ -572,9 +582,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
572
582
  : newComputedPosition);
573
583
  };
574
584
  const handleShowTooltipDelayed = (delay = delayShow) => {
575
- if (tooltipShowDelayTimerRef.current) {
576
- clearTimeout(tooltipShowDelayTimerRef.current);
577
- }
585
+ clearTimeoutRef(tooltipShowDelayTimerRef);
578
586
  if (rendered) {
579
587
  // if the tooltip is already rendered, ignore delay
580
588
  handleShow(true);
@@ -585,9 +593,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
585
593
  }, delay);
586
594
  };
587
595
  const handleHideTooltipDelayed = (delay = delayHide) => {
588
- if (tooltipHideDelayTimerRef.current) {
589
- clearTimeout(tooltipHideDelayTimerRef.current);
590
- }
596
+ clearTimeoutRef(tooltipHideDelayTimerRef);
591
597
  tooltipHideDelayTimerRef.current = setTimeout(() => {
592
598
  if (hoveringTooltip.current) {
593
599
  return;
@@ -618,9 +624,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
618
624
  }
619
625
  setActiveAnchor(target);
620
626
  setProviderActiveAnchor({ current: target });
621
- if (tooltipHideDelayTimerRef.current) {
622
- clearTimeout(tooltipHideDelayTimerRef.current);
623
- }
627
+ clearTimeoutRef(tooltipHideDelayTimerRef);
624
628
  };
625
629
  const handleHideTooltip = () => {
626
630
  if (clickable) {
@@ -633,9 +637,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
633
637
  else {
634
638
  handleShow(false);
635
639
  }
636
- if (tooltipShowDelayTimerRef.current) {
637
- clearTimeout(tooltipShowDelayTimerRef.current);
638
- }
640
+ clearTimeoutRef(tooltipShowDelayTimerRef);
639
641
  };
640
642
  const handleTooltipPosition = ({ x, y }) => {
641
643
  var _a;
@@ -696,9 +698,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
696
698
  return;
697
699
  }
698
700
  handleShow(false);
699
- if (tooltipShowDelayTimerRef.current) {
700
- clearTimeout(tooltipShowDelayTimerRef.current);
701
- }
701
+ clearTimeoutRef(tooltipShowDelayTimerRef);
702
702
  };
703
703
  // debounce handler to prevent call twice when
704
704
  // mouse enter and focus events being triggered toggether
@@ -836,7 +836,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
836
836
  }
837
837
  handleHideTooltip();
838
838
  };
839
- const regularEvents = ['mouseenter', 'mouseleave', 'focus', 'blur'];
839
+ const regularEvents = ['mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'focus', 'blur'];
840
840
  const clickEvents = ['click', 'dblclick', 'mousedown', 'mouseup'];
841
841
  Object.entries(actualOpenEvents).forEach(([event, enabled]) => {
842
842
  if (!enabled) {
@@ -982,12 +982,8 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
982
982
  setRendered(false);
983
983
  handleShow(false);
984
984
  setActiveAnchor(null);
985
- if (tooltipShowDelayTimerRef.current) {
986
- clearTimeout(tooltipShowDelayTimerRef.current);
987
- }
988
- if (tooltipHideDelayTimerRef.current) {
989
- clearTimeout(tooltipHideDelayTimerRef.current);
990
- }
985
+ clearTimeoutRef(tooltipShowDelayTimerRef);
986
+ clearTimeoutRef(tooltipHideDelayTimerRef);
991
987
  return true;
992
988
  }
993
989
  return false;
@@ -1066,12 +1062,8 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
1066
1062
  handleShow(true);
1067
1063
  }
1068
1064
  return () => {
1069
- if (tooltipShowDelayTimerRef.current) {
1070
- clearTimeout(tooltipShowDelayTimerRef.current);
1071
- }
1072
- if (tooltipHideDelayTimerRef.current) {
1073
- clearTimeout(tooltipHideDelayTimerRef.current);
1074
- }
1065
+ clearTimeoutRef(tooltipShowDelayTimerRef);
1066
+ clearTimeoutRef(tooltipHideDelayTimerRef);
1075
1067
  };
1076
1068
  }, []);
1077
1069
  React.useEffect(() => {
@@ -1094,7 +1086,11 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
1094
1086
  }, [id, anchorSelect, imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.anchorSelect]);
1095
1087
  React.useEffect(() => {
1096
1088
  if (tooltipShowDelayTimerRef.current) {
1097
- clearTimeout(tooltipShowDelayTimerRef.current);
1089
+ /**
1090
+ * if the delay changes while the tooltip is waiting to show,
1091
+ * reset the timer with the new delay
1092
+ */
1093
+ clearTimeoutRef(tooltipShowDelayTimerRef);
1098
1094
  handleShowTooltipDelayed(delayShow);
1099
1095
  }
1100
1096
  }, [delayShow]);
@@ -1135,9 +1131,7 @@ content, contentWrapperRef, isOpen, defaultIsOpen = false, setIsOpen, activeAnch
1135
1131
  isOpen: Boolean(rendered && !hidden && actualContent && canShow),
1136
1132
  }));
1137
1133
  return rendered && !hidden && actualContent ? (React__default["default"].createElement(WrapperElement, { id: id, role: role, className: classNames__default["default"]('react-tooltip', coreStyles['tooltip'], styles['tooltip'], styles[variant], className, `react-tooltip__place-${computedPosition.place}`, coreStyles[canShow ? 'show' : 'closing'], canShow ? 'react-tooltip__show' : 'react-tooltip__closing', positionStrategy === 'fixed' && coreStyles['fixed'], clickable && coreStyles['clickable']), onTransitionEnd: (event) => {
1138
- if (missedTransitionTimerRef.current) {
1139
- clearTimeout(missedTransitionTimerRef.current);
1140
- }
1134
+ clearTimeoutRef(missedTransitionTimerRef);
1141
1135
  if (show || event.propertyName !== 'opacity') {
1142
1136
  return;
1143
1137
  }