@underverse-ui/underverse 1.0.119 → 1.0.121

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 CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to `@underverse-ui/underverse` are documented in this file.
4
4
 
5
+ ## Unreleased
6
+
7
+ ### Fixed
8
+
9
+ - `Tooltip` now closes immediately when its trigger is pressed or when document-level pointer/Escape interactions indicate an overlay flow has taken over. This prevents portal tooltips from sticking on screen after opening dropdowns, popovers, or modals from a tooltip trigger, without overriding the normal hover close delay on pointer movement.
10
+
5
11
  ## [1.0.34] - 2026-02-24
6
12
 
7
13
  ### Changed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@underverse-ui/underverse",
3
- "version": "1.0.119",
3
+ "version": "1.0.121",
4
4
  "sourceEntry": "src/index.ts",
5
5
  "totalExports": 232,
6
6
  "exports": [
package/dist/index.cjs CHANGED
@@ -3101,6 +3101,10 @@ var Tooltip = React10.forwardRef(({
3101
3101
  setIsOpen(false);
3102
3102
  }, delayClose);
3103
3103
  };
3104
+ const closeNow = React10.useCallback(() => {
3105
+ clearTimeout(timeoutRef.current);
3106
+ setIsOpen(false);
3107
+ }, []);
3104
3108
  const handleFocus = () => {
3105
3109
  if (disabled) return;
3106
3110
  setIsOpen(true);
@@ -3111,6 +3115,10 @@ var Tooltip = React10.forwardRef(({
3111
3115
  React10.useEffect(() => {
3112
3116
  return () => clearTimeout(timeoutRef.current);
3113
3117
  }, []);
3118
+ React10.useEffect(() => {
3119
+ if (isOpen) return;
3120
+ clearTimeout(timeoutRef.current);
3121
+ }, [isOpen]);
3114
3122
  React10.useLayoutEffect(() => {
3115
3123
  if (!isOpen) {
3116
3124
  lastAppliedRef.current = null;
@@ -3154,6 +3162,18 @@ var Tooltip = React10.forwardRef(({
3154
3162
  if (panelRef.current) ro.observe(panelRef.current);
3155
3163
  return () => ro.disconnect();
3156
3164
  }, [isOpen, updatePosition]);
3165
+ React10.useEffect(() => {
3166
+ if (!isOpen) return;
3167
+ const handleDocumentKeyDown = (event) => {
3168
+ if (event.key === "Escape") closeNow();
3169
+ };
3170
+ document.addEventListener("pointerdown", closeNow, true);
3171
+ document.addEventListener("keydown", handleDocumentKeyDown);
3172
+ return () => {
3173
+ document.removeEventListener("pointerdown", closeNow, true);
3174
+ document.removeEventListener("keydown", handleDocumentKeyDown);
3175
+ };
3176
+ }, [closeNow, isOpen]);
3157
3177
  const childProps = children.props;
3158
3178
  const childRef = childProps.ref;
3159
3179
  const passthroughRef = mergeRefs(forwardedRef, childRef, (node) => {
@@ -3186,6 +3206,22 @@ var Tooltip = React10.forwardRef(({
3186
3206
  handleMouseLeave();
3187
3207
  }
3188
3208
  ),
3209
+ onPointerDown: chainEventHandlers(
3210
+ triggerPassthroughProps.onPointerDown,
3211
+ childProps.onPointerDown,
3212
+ (e) => {
3213
+ triggerRef.current = e.currentTarget;
3214
+ closeNow();
3215
+ }
3216
+ ),
3217
+ onClick: chainEventHandlers(
3218
+ triggerPassthroughProps.onClick,
3219
+ childProps.onClick,
3220
+ (e) => {
3221
+ triggerRef.current = e.currentTarget;
3222
+ closeNow();
3223
+ }
3224
+ ),
3189
3225
  onFocus: chainEventHandlers(
3190
3226
  triggerPassthroughProps.onFocus,
3191
3227
  childProps.onFocus,
@@ -5462,7 +5498,7 @@ var Modal = ({
5462
5498
  {
5463
5499
  ref: modalContentRef,
5464
5500
  className: cn(
5465
- "relative w-full rounded-2xl md:rounded-3xl bg-card text-card-foreground shadow-xl",
5501
+ "relative w-full rounded-2xl md:rounded-3xl border border-border/40 bg-card text-card-foreground shadow-xl",
5466
5502
  "transition-all duration-200 ease-out",
5467
5503
  maxWidthClass,
5468
5504
  fullWidth && "mx-0",