@underverse-ui/underverse 1.0.121 → 1.0.123
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/CHANGELOG.md +1 -1
- package/api-reference.json +1 -1
- package/dist/index.cjs +24 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,7 @@ All notable changes to `@underverse-ui/underverse` are documented in this file.
|
|
|
6
6
|
|
|
7
7
|
### Fixed
|
|
8
8
|
|
|
9
|
-
- `Tooltip` now closes immediately when its trigger is pressed or when document-level pointer
|
|
9
|
+
- `Tooltip` now closes immediately when its trigger is pressed, when `Escape` is pressed, or when document-level pointer interactions show the pointer is outside the trigger. This prevents portal tooltips from sticking on screen after opening dropdowns, popovers, modals, or when a modal/portal layout misses the trigger `mouseleave`.
|
|
10
10
|
|
|
11
11
|
## [1.0.34] - 2026-02-24
|
|
12
12
|
|
package/api-reference.json
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -3047,6 +3047,7 @@ var Tooltip = React10.forwardRef(({
|
|
|
3047
3047
|
const panelRef = React10.useRef(null);
|
|
3048
3048
|
const timeoutRef = React10.useRef(void 0);
|
|
3049
3049
|
const lastAppliedRef = React10.useRef(null);
|
|
3050
|
+
const openedByPointerRef = React10.useRef(false);
|
|
3050
3051
|
const triggerSelector = React10.useId();
|
|
3051
3052
|
const delayOpen = typeof delay === "object" ? delay.open || 700 : delay;
|
|
3052
3053
|
const delayClose = typeof delay === "object" ? delay.close || 300 : delay;
|
|
@@ -3090,6 +3091,7 @@ var Tooltip = React10.forwardRef(({
|
|
|
3090
3091
|
}, [placement]);
|
|
3091
3092
|
const handleMouseEnter = () => {
|
|
3092
3093
|
if (disabled) return;
|
|
3094
|
+
openedByPointerRef.current = true;
|
|
3093
3095
|
clearTimeout(timeoutRef.current);
|
|
3094
3096
|
timeoutRef.current = setTimeout(() => {
|
|
3095
3097
|
setIsOpen(true);
|
|
@@ -3103,13 +3105,16 @@ var Tooltip = React10.forwardRef(({
|
|
|
3103
3105
|
};
|
|
3104
3106
|
const closeNow = React10.useCallback(() => {
|
|
3105
3107
|
clearTimeout(timeoutRef.current);
|
|
3108
|
+
openedByPointerRef.current = false;
|
|
3106
3109
|
setIsOpen(false);
|
|
3107
3110
|
}, []);
|
|
3108
3111
|
const handleFocus = () => {
|
|
3109
3112
|
if (disabled) return;
|
|
3113
|
+
openedByPointerRef.current = false;
|
|
3110
3114
|
setIsOpen(true);
|
|
3111
3115
|
};
|
|
3112
3116
|
const handleBlur = () => {
|
|
3117
|
+
openedByPointerRef.current = false;
|
|
3113
3118
|
setIsOpen(false);
|
|
3114
3119
|
};
|
|
3115
3120
|
React10.useEffect(() => {
|
|
@@ -3167,11 +3172,25 @@ var Tooltip = React10.forwardRef(({
|
|
|
3167
3172
|
const handleDocumentKeyDown = (event) => {
|
|
3168
3173
|
if (event.key === "Escape") closeNow();
|
|
3169
3174
|
};
|
|
3175
|
+
const handleDocumentPointerMove = (event) => {
|
|
3176
|
+
if (!openedByPointerRef.current) return;
|
|
3177
|
+
const triggerEl = triggerRef.current;
|
|
3178
|
+
if (!triggerEl) {
|
|
3179
|
+
closeNow();
|
|
3180
|
+
return;
|
|
3181
|
+
}
|
|
3182
|
+
const rect = triggerEl.getBoundingClientRect();
|
|
3183
|
+
const tolerance = 2;
|
|
3184
|
+
const insideTrigger = event.clientX >= rect.left - tolerance && event.clientX <= rect.right + tolerance && event.clientY >= rect.top - tolerance && event.clientY <= rect.bottom + tolerance;
|
|
3185
|
+
if (!insideTrigger) closeNow();
|
|
3186
|
+
};
|
|
3170
3187
|
document.addEventListener("pointerdown", closeNow, true);
|
|
3171
3188
|
document.addEventListener("keydown", handleDocumentKeyDown);
|
|
3189
|
+
document.addEventListener("pointermove", handleDocumentPointerMove, true);
|
|
3172
3190
|
return () => {
|
|
3173
3191
|
document.removeEventListener("pointerdown", closeNow, true);
|
|
3174
3192
|
document.removeEventListener("keydown", handleDocumentKeyDown);
|
|
3193
|
+
document.removeEventListener("pointermove", handleDocumentPointerMove, true);
|
|
3175
3194
|
};
|
|
3176
3195
|
}, [closeNow, isOpen]);
|
|
3177
3196
|
const childProps = children.props;
|
|
@@ -19309,6 +19328,7 @@ function Carousel({
|
|
|
19309
19328
|
sideOpacity: effectiveAnimation === "stack" ? 0.8 : 0.86,
|
|
19310
19329
|
farOpacity: effectiveAnimation === "stack" ? 0.5 : 0.48,
|
|
19311
19330
|
sideOffset: effectiveAnimation === "stack" ? 20 : 28,
|
|
19331
|
+
verticalOffset: 0,
|
|
19312
19332
|
rotate: 24,
|
|
19313
19333
|
depthStep: effectiveAnimation === "stack" ? 60 : 90,
|
|
19314
19334
|
blur: 1.1,
|
|
@@ -19478,22 +19498,23 @@ function Carousel({
|
|
|
19478
19498
|
}
|
|
19479
19499
|
if (effectiveAnimation === "stack") {
|
|
19480
19500
|
const xOffset2 = distance * mergedEffectOptions.stackOffset;
|
|
19481
|
-
const
|
|
19501
|
+
const yOffset2 = absDistance * mergedEffectOptions.stackLift;
|
|
19482
19502
|
const scale2 = distance === 0 ? mergedEffectOptions.mainScale : distance === 1 || distance === -1 ? mergedEffectOptions.sideScale : mergedEffectOptions.farScale;
|
|
19483
19503
|
return {
|
|
19484
19504
|
opacity: distance === 0 ? 1 : distance === 1 || distance === -1 ? mergedEffectOptions.sideOpacity : mergedEffectOptions.farOpacity,
|
|
19485
|
-
transform: `translate3d(${xOffset2}px, ${
|
|
19505
|
+
transform: `translate3d(${xOffset2}px, ${yOffset2}px, -${absDistance * mergedEffectOptions.depthStep}px) scale(${scale2})`,
|
|
19486
19506
|
filter: distance === 0 ? "blur(0px)" : `blur(${Math.min(absDistance, 2) * mergedEffectOptions.blur}px)`,
|
|
19487
19507
|
pointerEvents: "auto",
|
|
19488
19508
|
zIndex: 30 - absDistance
|
|
19489
19509
|
};
|
|
19490
19510
|
}
|
|
19491
19511
|
const xOffset = distance * mergedEffectOptions.sideOffset;
|
|
19512
|
+
const yOffset = mergedEffectOptions.verticalOffset ?? 0;
|
|
19492
19513
|
const rotateY = distance * -mergedEffectOptions.rotate;
|
|
19493
19514
|
const scale = distance === 0 ? mergedEffectOptions.mainScale : distance === 1 || distance === -1 ? mergedEffectOptions.sideScale : mergedEffectOptions.farScale;
|
|
19494
19515
|
return {
|
|
19495
19516
|
opacity: distance === 0 ? 1 : distance === 1 || distance === -1 ? mergedEffectOptions.sideOpacity : mergedEffectOptions.farOpacity,
|
|
19496
|
-
transform: `translate3d(${xOffset}%,
|
|
19517
|
+
transform: `translate3d(${xOffset}%, ${yOffset}px, -${absDistance * mergedEffectOptions.depthStep}px) rotateY(${rotateY}deg) scale(${scale})`,
|
|
19497
19518
|
filter: distance === 0 ? "blur(0px)" : `blur(${Math.min(absDistance, 2) * mergedEffectOptions.blur}px)`,
|
|
19498
19519
|
pointerEvents: "auto",
|
|
19499
19520
|
zIndex: 30 - absDistance
|