@radix-ui/react-tooltip 0.1.8-rc.45 → 0.1.8-rc.48

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/dist/index.d.ts CHANGED
@@ -17,6 +17,11 @@ interface TooltipProviderProps {
17
17
  * @defaultValue 300
18
18
  */
19
19
  skipDelayDuration?: number;
20
+ /**
21
+ * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.
22
+ * @defaultValue false
23
+ */
24
+ disableHoverableContent?: boolean;
20
25
  }
21
26
  export const TooltipProvider: React.FC<TooltipProviderProps>;
22
27
  export interface TooltipProps {
@@ -30,6 +35,11 @@ export interface TooltipProps {
30
35
  * @defaultValue 700
31
36
  */
32
37
  delayDuration?: number;
38
+ /**
39
+ * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.
40
+ * @defaultValue false
41
+ */
42
+ disableHoverableContent?: boolean;
33
43
  }
34
44
  export const Tooltip: React.FC<TooltipProps>;
35
45
  type PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;
@@ -1 +1 @@
1
- {"mappings":";;;;;;AAmBA,OAAA,yFAEE,CAAC;AA0BH;IACE,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,OAAA,MAAM,iBAAiB,MAAM,EAAE,CAAC,oBAAoB,CAqCnD,CAAC;AAwBF;IACE,QAAQ,CAAC,EAAE,MAAM,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,OAAA,MAAM,SAAS,MAAM,EAAE,CAAC,YAAY,CA+EnC,CAAC;AAWF,4BAA4B,MAAM,wBAAwB,CAAC,OAAO,UAAU,MAAM,CAAC,CAAC;AACpF,oCAA8B,SAAQ,oBAAoB;CAAG;AAE7D,OAAA,MAAM,6GA4CL,CAAC;AAeF,mBAAmB,MAAM,wBAAwB,CAAC,eAAsB,CAAC,CAAC;AAC1E,mCAA6B,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,SAAS,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,OAAA,MAAM,eAAe,MAAM,EAAE,CAAC,kBAAkB,CAY/C,CAAC;AAWF,oCAA8B,SAAQ,uBAAuB;IAC3D;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,OAAA,MAAM,0GAWL,CAAC;AAGF,6BAA6B,MAAM,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;AACrF,0BAA0B,MAAM,wBAAwB,CAAC,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACzF,iCAAkC,SAAQ,kBAAkB;IAC1D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3D;;;OAGG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;CACtE;AA0ED,wBAAwB,MAAM,wBAAwB,CAAC,OAAO,gBAAgB,KAAK,CAAC,CAAC;AACrF,kCAA4B,SAAQ,gBAAgB;CAAG;AAEvD,OAAA,MAAM,qGAML,CAAC;AAMF,OAAA,MAAM,wCAA0B,CAAC;AACjC,OAAA,MAAM,4BAAc,CAAC;AACrB,OAAA,MAAM,sGAAwB,CAAC;AAC/B,OAAA,MAAM,oCAAsB,CAAC;AAC7B,OAAA,MAAM,mGAAwB,CAAC;AAC/B,OAAA,MAAM,8FAAoB,CAAC","sources":["packages/react/tooltip/src/packages/react/tooltip/src/Tooltip.tsx","packages/react/tooltip/src/packages/react/tooltip/src/index.ts","packages/react/tooltip/src/index.ts"],"sourcesContent":[null,null,"export * from './Tooltip';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
1
+ {"mappings":";;;;;;AAmBA,OAAA,yFAEE,CAAC;AAwBH;IACE,QAAQ,EAAE,MAAM,SAAS,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,OAAA,MAAM,iBAAiB,MAAM,EAAE,CAAC,oBAAoB,CA4CnD,CAAC;AA0BF;IACE,QAAQ,CAAC,EAAE,MAAM,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,OAAA,MAAM,SAAS,MAAM,EAAE,CAAC,YAAY,CA2FnC,CAAC;AAWF,4BAA4B,MAAM,wBAAwB,CAAC,OAAO,UAAU,MAAM,CAAC,CAAC;AACpF,oCAA8B,SAAQ,oBAAoB;CAAG;AAE7D,OAAA,MAAM,6GAyDL,CAAC;AAeF,mBAAmB,MAAM,wBAAwB,CAAC,eAAsB,CAAC,CAAC;AAC1E,mCAA6B,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,SAAS,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,OAAA,MAAM,eAAe,MAAM,EAAE,CAAC,kBAAkB,CAY/C,CAAC;AAWF,oCAA8B,SAAQ,uBAAuB;IAC3D;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,OAAA,MAAM,0GAgBL,CAAC;AA0FF,6BAA6B,MAAM,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;AACrF,0BAA0B,MAAM,wBAAwB,CAAC,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACzF,iCAAkC,SAAQ,kBAAkB;IAC1D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3D;;;OAGG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;CACtE;AA0ED,wBAAwB,MAAM,wBAAwB,CAAC,OAAO,gBAAgB,KAAK,CAAC,CAAC;AACrF,kCAA4B,SAAQ,gBAAgB;CAAG;AAEvD,OAAA,MAAM,qGAML,CAAC;AA+GF,OAAA,MAAM,wCAA0B,CAAC;AACjC,OAAA,MAAM,4BAAc,CAAC;AACrB,OAAA,MAAM,sGAAwB,CAAC;AAC/B,OAAA,MAAM,oCAAsB,CAAC;AAC7B,OAAA,MAAM,mGAAwB,CAAC;AAC/B,OAAA,MAAM,8FAAoB,CAAC","sources":["packages/react/tooltip/src/packages/react/tooltip/src/Tooltip.tsx","packages/react/tooltip/src/packages/react/tooltip/src/index.ts","packages/react/tooltip/src/index.ts"],"sourcesContent":[null,null,"export {\n createTooltipScope,\n //\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n //\n Provider,\n Root,\n Trigger,\n Portal,\n Content,\n Arrow,\n} from './Tooltip';\nexport type {\n TooltipProps,\n TooltipTriggerProps,\n TooltipPortalProps,\n TooltipContentProps,\n TooltipArrowProps,\n} from './Tooltip';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/dist/index.js CHANGED
@@ -13,43 +13,26 @@ var $iVrL9$radixuireactslot = require("@radix-ui/react-slot");
13
13
  var $iVrL9$radixuireactusecontrollablestate = require("@radix-ui/react-use-controllable-state");
14
14
  var $iVrL9$radixuireactvisuallyhidden = require("@radix-ui/react-visually-hidden");
15
15
 
16
- function $parcel$exportWildcard(dest, source) {
17
- Object.keys(source).forEach(function(key) {
18
- if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
19
- return;
20
- }
21
-
22
- Object.defineProperty(dest, key, {
23
- enumerable: true,
24
- get: function get() {
25
- return source[key];
26
- }
27
- });
28
- });
29
-
30
- return dest;
16
+ function $parcel$export(e, n, v, s) {
17
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
31
18
  }
32
19
  function $parcel$interopDefault(a) {
33
20
  return a && a.__esModule ? a.default : a;
34
21
  }
35
- function $parcel$export(e, n, v, s) {
36
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
37
- }
38
- var $c34afbc43c90cc6f$exports = {};
39
22
 
40
- $parcel$export($c34afbc43c90cc6f$exports, "createTooltipScope", () => $c34afbc43c90cc6f$export$1c540a2224f0d865);
41
- $parcel$export($c34afbc43c90cc6f$exports, "TooltipProvider", () => $c34afbc43c90cc6f$export$f78649fb9ca566b8);
42
- $parcel$export($c34afbc43c90cc6f$exports, "Tooltip", () => $c34afbc43c90cc6f$export$28c660c63b792dea);
43
- $parcel$export($c34afbc43c90cc6f$exports, "TooltipTrigger", () => $c34afbc43c90cc6f$export$8c610744efcf8a1d);
44
- $parcel$export($c34afbc43c90cc6f$exports, "TooltipPortal", () => $c34afbc43c90cc6f$export$7b36b8f925ab7497);
45
- $parcel$export($c34afbc43c90cc6f$exports, "TooltipContent", () => $c34afbc43c90cc6f$export$e9003e2be37ec060);
46
- $parcel$export($c34afbc43c90cc6f$exports, "TooltipArrow", () => $c34afbc43c90cc6f$export$c27ee0ad710f7559);
47
- $parcel$export($c34afbc43c90cc6f$exports, "Provider", () => $c34afbc43c90cc6f$export$2881499e37b75b9a);
48
- $parcel$export($c34afbc43c90cc6f$exports, "Root", () => $c34afbc43c90cc6f$export$be92b6f5f03c0fe9);
49
- $parcel$export($c34afbc43c90cc6f$exports, "Trigger", () => $c34afbc43c90cc6f$export$41fb9f06171c75f4);
50
- $parcel$export($c34afbc43c90cc6f$exports, "Portal", () => $c34afbc43c90cc6f$export$602eac185826482c);
51
- $parcel$export($c34afbc43c90cc6f$exports, "Content", () => $c34afbc43c90cc6f$export$7c6e2c02157bb7d2);
52
- $parcel$export($c34afbc43c90cc6f$exports, "Arrow", () => $c34afbc43c90cc6f$export$21b07c8f274aebd5);
23
+ $parcel$export(module.exports, "createTooltipScope", () => $c34afbc43c90cc6f$export$1c540a2224f0d865);
24
+ $parcel$export(module.exports, "TooltipProvider", () => $c34afbc43c90cc6f$export$f78649fb9ca566b8);
25
+ $parcel$export(module.exports, "Tooltip", () => $c34afbc43c90cc6f$export$28c660c63b792dea);
26
+ $parcel$export(module.exports, "TooltipTrigger", () => $c34afbc43c90cc6f$export$8c610744efcf8a1d);
27
+ $parcel$export(module.exports, "TooltipPortal", () => $c34afbc43c90cc6f$export$7b36b8f925ab7497);
28
+ $parcel$export(module.exports, "TooltipContent", () => $c34afbc43c90cc6f$export$e9003e2be37ec060);
29
+ $parcel$export(module.exports, "TooltipArrow", () => $c34afbc43c90cc6f$export$c27ee0ad710f7559);
30
+ $parcel$export(module.exports, "Provider", () => $c34afbc43c90cc6f$export$2881499e37b75b9a);
31
+ $parcel$export(module.exports, "Root", () => $c34afbc43c90cc6f$export$be92b6f5f03c0fe9);
32
+ $parcel$export(module.exports, "Trigger", () => $c34afbc43c90cc6f$export$41fb9f06171c75f4);
33
+ $parcel$export(module.exports, "Portal", () => $c34afbc43c90cc6f$export$602eac185826482c);
34
+ $parcel$export(module.exports, "Content", () => $c34afbc43c90cc6f$export$7c6e2c02157bb7d2);
35
+ $parcel$export(module.exports, "Arrow", () => $c34afbc43c90cc6f$export$21b07c8f274aebd5);
53
36
 
54
37
 
55
38
 
@@ -74,15 +57,11 @@ const $c34afbc43c90cc6f$var$usePopperScope = $iVrL9$radixuireactpopper.createPop
74
57
  * -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$PROVIDER_NAME = 'TooltipProvider';
75
58
  const $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION = 700;
76
59
  const $c34afbc43c90cc6f$var$TOOLTIP_OPEN = 'tooltip.open';
77
- const [$c34afbc43c90cc6f$var$TooltipProviderContextProvider, $c34afbc43c90cc6f$var$useTooltipProviderContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PROVIDER_NAME, {
78
- isOpenDelayed: true,
79
- delayDuration: $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION,
80
- onOpen: ()=>{},
81
- onClose: ()=>{}
82
- });
60
+ const [$c34afbc43c90cc6f$var$TooltipProviderContextProvider, $c34afbc43c90cc6f$var$useTooltipProviderContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PROVIDER_NAME);
83
61
  const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = (props)=>{
84
- const { __scopeTooltip: __scopeTooltip , delayDuration: delayDuration = $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION , skipDelayDuration: skipDelayDuration = 300 , children: children } = props;
62
+ const { __scopeTooltip: __scopeTooltip , delayDuration: delayDuration = $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION , skipDelayDuration: skipDelayDuration = 300 , disableHoverableContent: disableHoverableContent = false , children: children } = props;
85
63
  const [isOpenDelayed, setIsOpenDelayed] = $iVrL9$react.useState(true);
64
+ const isPointerInTransitRef = $iVrL9$react.useRef(false);
86
65
  const skipDelayTimerRef = $iVrL9$react.useRef(0);
87
66
  $iVrL9$react.useEffect(()=>{
88
67
  const skipDelayTimer = skipDelayTimerRef.current;
@@ -103,7 +82,12 @@ const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = (props)=>{
103
82
  , skipDelayDuration);
104
83
  }, [
105
84
  skipDelayDuration
106
- ])
85
+ ]),
86
+ isPointerInTransitRef: isPointerInTransitRef,
87
+ onPointerInTransitChange: $iVrL9$react.useCallback((inTransit)=>{
88
+ isPointerInTransitRef.current = inTransit;
89
+ }, []),
90
+ disableHoverableContent: disableHoverableContent
107
91
  }, children);
108
92
  };
109
93
  /*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$f78649fb9ca566b8, {
@@ -114,28 +98,24 @@ const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = (props)=>{
114
98
  * -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$TOOLTIP_NAME = 'Tooltip';
115
99
  const [$c34afbc43c90cc6f$var$TooltipContextProvider, $c34afbc43c90cc6f$var$useTooltipContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$TOOLTIP_NAME);
116
100
  const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
117
- const { __scopeTooltip: __scopeTooltip , children: children , open: openProp , defaultOpen: defaultOpen = false , onOpenChange: onOpenChange , delayDuration: delayDurationProp } = props;
118
- const context = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$TOOLTIP_NAME, __scopeTooltip);
101
+ const { __scopeTooltip: __scopeTooltip , children: children , open: openProp , defaultOpen: defaultOpen = false , onOpenChange: onOpenChange , disableHoverableContent: disableHoverableContentProp , delayDuration: delayDurationProp } = props;
102
+ const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$TOOLTIP_NAME, props.__scopeTooltip);
119
103
  const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip);
120
104
  const [trigger, setTrigger] = $iVrL9$react.useState(null);
121
105
  const contentId = $iVrL9$radixuireactid.useId();
122
106
  const openTimerRef = $iVrL9$react.useRef(0);
123
- const delayDuration = delayDurationProp !== null && delayDurationProp !== void 0 ? delayDurationProp : context.delayDuration;
107
+ const disableHoverableContent = disableHoverableContentProp !== null && disableHoverableContentProp !== void 0 ? disableHoverableContentProp : providerContext.disableHoverableContent;
108
+ const delayDuration = delayDurationProp !== null && delayDurationProp !== void 0 ? delayDurationProp : providerContext.delayDuration;
124
109
  const wasOpenDelayedRef = $iVrL9$react.useRef(false);
125
- const { onOpen: onOpen , onClose: onClose } = context;
126
110
  const [open1 = false, setOpen] = $iVrL9$radixuireactusecontrollablestate.useControllableState({
127
111
  prop: openProp,
128
112
  defaultProp: defaultOpen,
129
113
  onChange: (open)=>{
130
114
  if (open) {
131
- // we dispatch here so `TooltipProvider` isn't required to
132
- // ensure other tooltips are aware of this one opening.
133
- //
134
- // as `onChange` is called within a lifecycle method we
115
+ providerContext.onOpen(); // as `onChange` is called within a lifecycle method we
135
116
  // avoid dispatching via `dispatchDiscreteCustomEvent`.
136
117
  document.dispatchEvent(new CustomEvent($c34afbc43c90cc6f$var$TOOLTIP_OPEN));
137
- onOpen();
138
- }
118
+ } else providerContext.onClose();
139
119
  onOpenChange === null || onOpenChange === void 0 || onOpenChange(open);
140
120
  }
141
121
  });
@@ -151,6 +131,12 @@ const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
151
131
  }, [
152
132
  setOpen
153
133
  ]);
134
+ const handleClose = $iVrL9$react.useCallback(()=>{
135
+ window.clearTimeout(openTimerRef.current);
136
+ setOpen(false);
137
+ }, [
138
+ setOpen
139
+ ]);
154
140
  const handleDelayedOpen = $iVrL9$react.useCallback(()=>{
155
141
  window.clearTimeout(openTimerRef.current);
156
142
  openTimerRef.current = window.setTimeout(()=>{
@@ -173,24 +159,24 @@ const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
173
159
  trigger: trigger,
174
160
  onTriggerChange: setTrigger,
175
161
  onTriggerEnter: $iVrL9$react.useCallback(()=>{
176
- if (context.isOpenDelayed) handleDelayedOpen();
162
+ if (providerContext.isOpenDelayed) handleDelayedOpen();
177
163
  else handleOpen();
178
164
  }, [
179
- context.isOpenDelayed,
165
+ providerContext.isOpenDelayed,
180
166
  handleDelayedOpen,
181
167
  handleOpen
182
168
  ]),
183
- onOpen: $iVrL9$react.useCallback(handleOpen, [
184
- handleOpen
185
- ]),
186
- onClose: $iVrL9$react.useCallback(()=>{
169
+ onTriggerLeave: $iVrL9$react.useCallback(()=>{
170
+ if (disableHoverableContent) handleClose();
171
+ else // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.
187
172
  window.clearTimeout(openTimerRef.current);
188
- setOpen(false);
189
- onClose();
190
173
  }, [
191
- setOpen,
192
- onClose
193
- ])
174
+ handleClose,
175
+ disableHoverableContent
176
+ ]),
177
+ onOpen: handleOpen,
178
+ onClose: handleClose,
179
+ disableHoverableContent: disableHoverableContent
194
180
  }, children));
195
181
  };
196
182
  /*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$28c660c63b792dea, {
@@ -202,9 +188,12 @@ const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
202
188
  const $c34afbc43c90cc6f$export$8c610744efcf8a1d = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
203
189
  const { __scopeTooltip: __scopeTooltip , ...triggerProps } = props;
204
190
  const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$TRIGGER_NAME, __scopeTooltip);
191
+ const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$TRIGGER_NAME, __scopeTooltip);
205
192
  const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip);
206
- const composedTriggerRef = $iVrL9$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.onTriggerChange);
193
+ const ref = $iVrL9$react.useRef(null);
194
+ const composedRefs = $iVrL9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref, context.onTriggerChange);
207
195
  const isPointerDownRef = $iVrL9$react.useRef(false);
196
+ const hasPointerMoveOpenedRef = $iVrL9$react.useRef(false);
208
197
  const handlePointerUp = $iVrL9$react.useCallback(()=>isPointerDownRef.current = false
209
198
  , []);
210
199
  $iVrL9$react.useEffect(()=>{
@@ -221,11 +210,18 @@ const $c34afbc43c90cc6f$export$8c610744efcf8a1d = /*#__PURE__*/ $iVrL9$react.for
221
210
  "aria-describedby": context.open ? context.contentId : undefined,
222
211
  "data-state": context.stateAttribute
223
212
  }, triggerProps, {
224
- ref: composedTriggerRef,
225
- onPointerEnter: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerEnter, (event)=>{
226
- if (event.pointerType !== 'touch') context.onTriggerEnter();
213
+ ref: composedRefs,
214
+ onPointerMove: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerMove, (event)=>{
215
+ if (event.pointerType === 'touch') return;
216
+ if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {
217
+ context.onTriggerEnter();
218
+ hasPointerMoveOpenedRef.current = true;
219
+ }
220
+ }),
221
+ onPointerLeave: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerLeave, ()=>{
222
+ context.onTriggerLeave();
223
+ hasPointerMoveOpenedRef.current = false;
227
224
  }),
228
- onPointerLeave: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerLeave, context.onClose),
229
225
  onPointerDown: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerDown, ()=>{
230
226
  isPointerDownRef.current = true;
231
227
  document.addEventListener('pointerup', handlePointerUp, {
@@ -274,13 +270,116 @@ const $c34afbc43c90cc6f$export$7b36b8f925ab7497 = (props)=>{
274
270
  * -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$CONTENT_NAME = 'TooltipContent';
275
271
  const $c34afbc43c90cc6f$export$e9003e2be37ec060 = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
276
272
  const portalContext = $c34afbc43c90cc6f$var$usePortalContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip);
277
- const { forceMount: forceMount = portalContext.forceMount , ...contentProps } = props;
273
+ const { forceMount: forceMount = portalContext.forceMount , side: side = 'top' , ...contentProps } = props;
278
274
  const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip);
279
275
  return /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactpresence.Presence, {
280
276
  present: forceMount || context.open
281
- }, /*#__PURE__*/ $iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentImpl, ($parcel$interopDefault($iVrL9$babelruntimehelpersextends))({
277
+ }, context.disableHoverableContent ? /*#__PURE__*/ $iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentImpl, ($parcel$interopDefault($iVrL9$babelruntimehelpersextends))({
278
+ side: side
279
+ }, contentProps, {
282
280
  ref: forwardedRef
283
- }, contentProps)));
281
+ })) : /*#__PURE__*/ $iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentHoverable, ($parcel$interopDefault($iVrL9$babelruntimehelpersextends))({
282
+ side: side
283
+ }, contentProps, {
284
+ ref: forwardedRef
285
+ })));
286
+ });
287
+ const $c34afbc43c90cc6f$var$TooltipContentHoverable = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
288
+ const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip);
289
+ const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip);
290
+ const ref = $iVrL9$react.useRef(null);
291
+ const composedRefs = $iVrL9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
292
+ const [pointerGraceArea, setPointerGraceArea] = $iVrL9$react.useState(null);
293
+ const { trigger: trigger , onClose: onClose } = context;
294
+ const content = ref.current;
295
+ const { onPointerInTransitChange: onPointerInTransitChange } = providerContext;
296
+ const handleRemoveGraceArea = $iVrL9$react.useCallback(()=>{
297
+ setPointerGraceArea(null);
298
+ onPointerInTransitChange(false);
299
+ }, [
300
+ onPointerInTransitChange
301
+ ]);
302
+ const handleCreateGraceArea = $iVrL9$react.useCallback((event, hoverTarget)=>{
303
+ const currentTarget = event.currentTarget;
304
+ const exitPoint = {
305
+ x: event.clientX,
306
+ y: event.clientY
307
+ };
308
+ const exitSide = $c34afbc43c90cc6f$var$getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());
309
+ const bleed = exitSide === 'right' || exitSide === 'bottom' ? -5 : 5;
310
+ const isXAxis = exitSide === 'right' || exitSide === 'left';
311
+ const startPoint = isXAxis ? {
312
+ x: event.clientX + bleed,
313
+ y: event.clientY
314
+ } : {
315
+ x: event.clientX,
316
+ y: event.clientY + bleed
317
+ };
318
+ const hoverTargetPoints = $c34afbc43c90cc6f$var$getPointsFromRect(hoverTarget.getBoundingClientRect());
319
+ const graceArea = $c34afbc43c90cc6f$var$getHull([
320
+ startPoint,
321
+ ...hoverTargetPoints
322
+ ]);
323
+ setPointerGraceArea(graceArea);
324
+ onPointerInTransitChange(true);
325
+ }, [
326
+ onPointerInTransitChange
327
+ ]);
328
+ $iVrL9$react.useEffect(()=>{
329
+ return ()=>handleRemoveGraceArea()
330
+ ;
331
+ }, [
332
+ handleRemoveGraceArea
333
+ ]);
334
+ $iVrL9$react.useEffect(()=>{
335
+ if (trigger && content) {
336
+ const handleTriggerLeave = (event)=>handleCreateGraceArea(event, content)
337
+ ;
338
+ const handleContentLeave = (event)=>handleCreateGraceArea(event, trigger)
339
+ ;
340
+ trigger.addEventListener('pointerleave', handleTriggerLeave);
341
+ content.addEventListener('pointerleave', handleContentLeave);
342
+ return ()=>{
343
+ trigger.removeEventListener('pointerleave', handleTriggerLeave);
344
+ content.removeEventListener('pointerleave', handleContentLeave);
345
+ };
346
+ }
347
+ }, [
348
+ trigger,
349
+ content,
350
+ handleCreateGraceArea,
351
+ handleRemoveGraceArea
352
+ ]);
353
+ $iVrL9$react.useEffect(()=>{
354
+ if (pointerGraceArea) {
355
+ const handleTrackPointerGrace = (event)=>{
356
+ const target = event.target;
357
+ const pointerPosition = {
358
+ x: event.clientX,
359
+ y: event.clientY
360
+ };
361
+ const hasEnteredTarget = (trigger === null || trigger === void 0 ? void 0 : trigger.contains(target)) || (content === null || content === void 0 ? void 0 : content.contains(target));
362
+ const isPointerOutsideGraceArea = !$c34afbc43c90cc6f$var$isPointInPolygon(pointerPosition, pointerGraceArea);
363
+ if (hasEnteredTarget) handleRemoveGraceArea();
364
+ else if (isPointerOutsideGraceArea) {
365
+ handleRemoveGraceArea();
366
+ onClose();
367
+ }
368
+ };
369
+ document.addEventListener('pointermove', handleTrackPointerGrace);
370
+ return ()=>document.removeEventListener('pointermove', handleTrackPointerGrace)
371
+ ;
372
+ }
373
+ }, [
374
+ trigger,
375
+ content,
376
+ pointerGraceArea,
377
+ onClose,
378
+ handleRemoveGraceArea
379
+ ]);
380
+ return /*#__PURE__*/ $iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentImpl, ($parcel$interopDefault($iVrL9$babelruntimehelpersextends))({}, props, {
381
+ ref: composedRefs
382
+ }));
284
383
  });
285
384
  const $c34afbc43c90cc6f$var$TooltipContentImpl = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
286
385
  const { __scopeTooltip: __scopeTooltip , children: children , 'aria-label': ariaLabel , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , ...contentProps } = props;
@@ -350,7 +449,101 @@ const $c34afbc43c90cc6f$export$c27ee0ad710f7559 = /*#__PURE__*/ $iVrL9$react.for
350
449
  /*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$c27ee0ad710f7559, {
351
450
  displayName: $c34afbc43c90cc6f$var$ARROW_NAME
352
451
  });
353
- /* -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$export$2881499e37b75b9a = $c34afbc43c90cc6f$export$f78649fb9ca566b8;
452
+ /* -----------------------------------------------------------------------------------------------*/ function $c34afbc43c90cc6f$var$getExitSideFromRect(point, rect) {
453
+ const top = Math.abs(rect.top - point.y);
454
+ const bottom = Math.abs(rect.bottom - point.y);
455
+ const right = Math.abs(rect.right - point.x);
456
+ const left = Math.abs(rect.left - point.x);
457
+ switch(Math.min(top, bottom, right, left)){
458
+ case left:
459
+ return 'left';
460
+ case right:
461
+ return 'right';
462
+ case top:
463
+ return 'top';
464
+ case bottom:
465
+ return 'bottom';
466
+ default:
467
+ return null;
468
+ }
469
+ }
470
+ function $c34afbc43c90cc6f$var$getPointsFromRect(rect) {
471
+ const { top: top , right: right , bottom: bottom , left: left } = rect;
472
+ return [
473
+ {
474
+ x: left,
475
+ y: top
476
+ },
477
+ {
478
+ x: right,
479
+ y: top
480
+ },
481
+ {
482
+ x: right,
483
+ y: bottom
484
+ },
485
+ {
486
+ x: left,
487
+ y: bottom
488
+ }
489
+ ];
490
+ } // Determine if a point is inside of a polygon.
491
+ // Based on https://github.com/substack/point-in-polygon
492
+ function $c34afbc43c90cc6f$var$isPointInPolygon(point, polygon) {
493
+ const { x: x , y: y } = point;
494
+ let inside = false;
495
+ for(let i = 0, j = polygon.length - 1; i < polygon.length; j = i++){
496
+ const xi = polygon[i].x;
497
+ const yi = polygon[i].y;
498
+ const xj = polygon[j].x;
499
+ const yj = polygon[j].y; // prettier-ignore
500
+ const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
501
+ if (intersect) inside = !inside;
502
+ }
503
+ return inside;
504
+ } // Returns a new array of points representing the convex hull of the given set of points.
505
+ // https://www.nayuki.io/page/convex-hull-algorithm
506
+ function $c34afbc43c90cc6f$var$getHull(points) {
507
+ const newPoints = points.slice();
508
+ newPoints.sort((a, b)=>{
509
+ if (a.x < b.x) return -1;
510
+ else if (a.x > b.x) return 1;
511
+ else if (a.y < b.y) return -1;
512
+ else if (a.y > b.y) return 1;
513
+ else return 0;
514
+ });
515
+ return $c34afbc43c90cc6f$var$getHullPresorted(newPoints);
516
+ } // Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.
517
+ function $c34afbc43c90cc6f$var$getHullPresorted(points) {
518
+ if (points.length <= 1) return points.slice();
519
+ const upperHull = [];
520
+ for(let i = 0; i < points.length; i++){
521
+ const p = points[i];
522
+ while(upperHull.length >= 2){
523
+ const q = upperHull[upperHull.length - 1];
524
+ const r = upperHull[upperHull.length - 2];
525
+ if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();
526
+ else break;
527
+ }
528
+ upperHull.push(p);
529
+ }
530
+ upperHull.pop();
531
+ const lowerHull = [];
532
+ for(let i1 = points.length - 1; i1 >= 0; i1--){
533
+ const p = points[i1];
534
+ while(lowerHull.length >= 2){
535
+ const q = lowerHull[lowerHull.length - 1];
536
+ const r = lowerHull[lowerHull.length - 2];
537
+ if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();
538
+ else break;
539
+ }
540
+ lowerHull.push(p);
541
+ }
542
+ lowerHull.pop();
543
+ if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) return upperHull;
544
+ else return upperHull.concat(lowerHull);
545
+ }
546
+ const $c34afbc43c90cc6f$export$2881499e37b75b9a = $c34afbc43c90cc6f$export$f78649fb9ca566b8;
354
547
  const $c34afbc43c90cc6f$export$be92b6f5f03c0fe9 = $c34afbc43c90cc6f$export$28c660c63b792dea;
355
548
  const $c34afbc43c90cc6f$export$41fb9f06171c75f4 = $c34afbc43c90cc6f$export$8c610744efcf8a1d;
356
549
  const $c34afbc43c90cc6f$export$602eac185826482c = $c34afbc43c90cc6f$export$7b36b8f925ab7497;
@@ -358,7 +551,6 @@ const $c34afbc43c90cc6f$export$7c6e2c02157bb7d2 = $c34afbc43c90cc6f$export$e9003
358
551
  const $c34afbc43c90cc6f$export$21b07c8f274aebd5 = $c34afbc43c90cc6f$export$c27ee0ad710f7559;
359
552
 
360
553
 
361
- $parcel$exportWildcard(module.exports, $c34afbc43c90cc6f$exports);
362
554
 
363
555
 
364
556
  //# sourceMappingURL=index.js.map