@radix-ui/react-tooltip 0.1.8-rc.8 → 1.0.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/dist/index.d.ts +24 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +309 -79
- package/dist/index.js.map +1 -1
- package/dist/index.module.js +296 -66
- package/dist/index.module.js.map +1 -1
- package/package.json +14 -15
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { DismissableLayer } from "@radix-ui/react-dismissable-layer";
|
|
3
3
|
import * as PopperPrimitive from "@radix-ui/react-popper";
|
|
4
|
+
import { Portal as _Portal1 } from "@radix-ui/react-portal";
|
|
4
5
|
import * as Radix from "@radix-ui/react-primitive";
|
|
5
6
|
import { Primitive } from "@radix-ui/react-primitive";
|
|
6
7
|
export const createTooltipScope: import("@radix-ui/react-context").CreateScope;
|
|
7
8
|
interface TooltipProviderProps {
|
|
8
9
|
children: React.ReactNode;
|
|
9
10
|
/**
|
|
10
|
-
* The duration from when the
|
|
11
|
+
* The duration from when the pointer enters the trigger until the tooltip gets opened.
|
|
11
12
|
* @defaultValue 700
|
|
12
13
|
*/
|
|
13
14
|
delayDuration?: number;
|
|
@@ -16,6 +17,11 @@ interface TooltipProviderProps {
|
|
|
16
17
|
* @defaultValue 300
|
|
17
18
|
*/
|
|
18
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;
|
|
19
25
|
}
|
|
20
26
|
export const TooltipProvider: React.FC<TooltipProviderProps>;
|
|
21
27
|
export interface TooltipProps {
|
|
@@ -24,17 +30,32 @@ export interface TooltipProps {
|
|
|
24
30
|
defaultOpen?: boolean;
|
|
25
31
|
onOpenChange?: (open: boolean) => void;
|
|
26
32
|
/**
|
|
27
|
-
* The duration from when the
|
|
33
|
+
* The duration from when the pointer enters the trigger until the tooltip gets opened. This will
|
|
28
34
|
* override the prop with the same name passed to Provider.
|
|
29
35
|
* @defaultValue 700
|
|
30
36
|
*/
|
|
31
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;
|
|
32
43
|
}
|
|
33
44
|
export const Tooltip: React.FC<TooltipProps>;
|
|
34
45
|
type PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;
|
|
35
46
|
export interface TooltipTriggerProps extends PrimitiveButtonProps {
|
|
36
47
|
}
|
|
37
48
|
export const TooltipTrigger: React.ForwardRefExoticComponent<TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
49
|
+
type PortalProps = React.ComponentPropsWithoutRef<typeof _Portal1>;
|
|
50
|
+
export interface TooltipPortalProps extends Omit<PortalProps, 'asChild'> {
|
|
51
|
+
children?: React.ReactNode;
|
|
52
|
+
/**
|
|
53
|
+
* Used to force mounting when more control is needed. Useful when
|
|
54
|
+
* controlling animation with React animation libraries.
|
|
55
|
+
*/
|
|
56
|
+
forceMount?: true;
|
|
57
|
+
}
|
|
58
|
+
export const TooltipPortal: React.FC<TooltipPortalProps>;
|
|
38
59
|
export interface TooltipContentProps extends TooltipContentImplProps {
|
|
39
60
|
/**
|
|
40
61
|
* Used to force mounting when more control is needed. Useful when
|
|
@@ -60,11 +81,6 @@ interface TooltipContentImplProps extends PopperContentProps {
|
|
|
60
81
|
* Can be prevented.
|
|
61
82
|
*/
|
|
62
83
|
onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];
|
|
63
|
-
/**
|
|
64
|
-
* Whether the Tooltip should render in a Portal
|
|
65
|
-
* (default: `true`)
|
|
66
|
-
*/
|
|
67
|
-
portalled?: boolean;
|
|
68
84
|
}
|
|
69
85
|
type PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;
|
|
70
86
|
export interface TooltipArrowProps extends PopperArrowProps {
|
|
@@ -73,6 +89,7 @@ export const TooltipArrow: React.ForwardRefExoticComponent<TooltipArrowProps & R
|
|
|
73
89
|
export const Provider: React.FC<TooltipProviderProps>;
|
|
74
90
|
export const Root: React.FC<TooltipProps>;
|
|
75
91
|
export const Trigger: React.ForwardRefExoticComponent<TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
92
|
+
export const Portal: React.FC<TooltipPortalProps>;
|
|
76
93
|
export const Content: React.ForwardRefExoticComponent<TooltipContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
77
94
|
export const Arrow: React.ForwardRefExoticComponent<TooltipArrowProps & React.RefAttributes<SVGSVGElement>>;
|
|
78
95
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"
|
|
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;AA6FF,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;AA4ED,wBAAwB,MAAM,wBAAwB,CAAC,OAAO,gBAAgB,KAAK,CAAC,CAAC;AACrF,kCAA4B,SAAQ,gBAAgB;CAAG;AAEvD,OAAA,MAAM,qGAcL,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,41 +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$
|
|
17
|
-
Object.
|
|
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(
|
|
41
|
-
$parcel$export(
|
|
42
|
-
$parcel$export(
|
|
43
|
-
$parcel$export(
|
|
44
|
-
$parcel$export(
|
|
45
|
-
$parcel$export(
|
|
46
|
-
$parcel$export(
|
|
47
|
-
$parcel$export(
|
|
48
|
-
$parcel$export(
|
|
49
|
-
$parcel$export(
|
|
50
|
-
$parcel$export(
|
|
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);
|
|
51
36
|
|
|
52
37
|
|
|
53
38
|
|
|
@@ -72,15 +57,11 @@ const $c34afbc43c90cc6f$var$usePopperScope = $iVrL9$radixuireactpopper.createPop
|
|
|
72
57
|
* -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$PROVIDER_NAME = 'TooltipProvider';
|
|
73
58
|
const $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION = 700;
|
|
74
59
|
const $c34afbc43c90cc6f$var$TOOLTIP_OPEN = 'tooltip.open';
|
|
75
|
-
const [$c34afbc43c90cc6f$var$TooltipProviderContextProvider, $c34afbc43c90cc6f$var$useTooltipProviderContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PROVIDER_NAME
|
|
76
|
-
isOpenDelayed: true,
|
|
77
|
-
delayDuration: $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION,
|
|
78
|
-
onOpen: ()=>{},
|
|
79
|
-
onClose: ()=>{}
|
|
80
|
-
});
|
|
60
|
+
const [$c34afbc43c90cc6f$var$TooltipProviderContextProvider, $c34afbc43c90cc6f$var$useTooltipProviderContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PROVIDER_NAME);
|
|
81
61
|
const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = (props)=>{
|
|
82
|
-
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;
|
|
83
63
|
const [isOpenDelayed, setIsOpenDelayed] = $iVrL9$react.useState(true);
|
|
64
|
+
const isPointerInTransitRef = $iVrL9$react.useRef(false);
|
|
84
65
|
const skipDelayTimerRef = $iVrL9$react.useRef(0);
|
|
85
66
|
$iVrL9$react.useEffect(()=>{
|
|
86
67
|
const skipDelayTimer = skipDelayTimerRef.current;
|
|
@@ -101,7 +82,12 @@ const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = (props)=>{
|
|
|
101
82
|
, skipDelayDuration);
|
|
102
83
|
}, [
|
|
103
84
|
skipDelayDuration
|
|
104
|
-
])
|
|
85
|
+
]),
|
|
86
|
+
isPointerInTransitRef: isPointerInTransitRef,
|
|
87
|
+
onPointerInTransitChange: $iVrL9$react.useCallback((inTransit)=>{
|
|
88
|
+
isPointerInTransitRef.current = inTransit;
|
|
89
|
+
}, []),
|
|
90
|
+
disableHoverableContent: disableHoverableContent
|
|
105
91
|
}, children);
|
|
106
92
|
};
|
|
107
93
|
/*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$f78649fb9ca566b8, {
|
|
@@ -112,25 +98,24 @@ const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = (props)=>{
|
|
|
112
98
|
* -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$TOOLTIP_NAME = 'Tooltip';
|
|
113
99
|
const [$c34afbc43c90cc6f$var$TooltipContextProvider, $c34afbc43c90cc6f$var$useTooltipContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$TOOLTIP_NAME);
|
|
114
100
|
const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
|
|
115
|
-
const { __scopeTooltip: __scopeTooltip , children: children , open: openProp , defaultOpen: defaultOpen = false , onOpenChange: onOpenChange , delayDuration: delayDurationProp } = props;
|
|
116
|
-
const
|
|
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);
|
|
117
103
|
const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip);
|
|
118
104
|
const [trigger, setTrigger] = $iVrL9$react.useState(null);
|
|
119
105
|
const contentId = $iVrL9$radixuireactid.useId();
|
|
120
106
|
const openTimerRef = $iVrL9$react.useRef(0);
|
|
121
|
-
const
|
|
107
|
+
const disableHoverableContent = disableHoverableContentProp !== null && disableHoverableContentProp !== void 0 ? disableHoverableContentProp : providerContext.disableHoverableContent;
|
|
108
|
+
const delayDuration = delayDurationProp !== null && delayDurationProp !== void 0 ? delayDurationProp : providerContext.delayDuration;
|
|
122
109
|
const wasOpenDelayedRef = $iVrL9$react.useRef(false);
|
|
123
|
-
const { onOpen: onOpen , onClose: onClose } = context;
|
|
124
110
|
const [open1 = false, setOpen] = $iVrL9$radixuireactusecontrollablestate.useControllableState({
|
|
125
111
|
prop: openProp,
|
|
126
112
|
defaultProp: defaultOpen,
|
|
127
113
|
onChange: (open)=>{
|
|
128
114
|
if (open) {
|
|
129
|
-
//
|
|
130
|
-
//
|
|
115
|
+
providerContext.onOpen(); // as `onChange` is called within a lifecycle method we
|
|
116
|
+
// avoid dispatching via `dispatchDiscreteCustomEvent`.
|
|
131
117
|
document.dispatchEvent(new CustomEvent($c34afbc43c90cc6f$var$TOOLTIP_OPEN));
|
|
132
|
-
|
|
133
|
-
}
|
|
118
|
+
} else providerContext.onClose();
|
|
134
119
|
onOpenChange === null || onOpenChange === void 0 || onOpenChange(open);
|
|
135
120
|
}
|
|
136
121
|
});
|
|
@@ -146,6 +131,12 @@ const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
|
|
|
146
131
|
}, [
|
|
147
132
|
setOpen
|
|
148
133
|
]);
|
|
134
|
+
const handleClose = $iVrL9$react.useCallback(()=>{
|
|
135
|
+
window.clearTimeout(openTimerRef.current);
|
|
136
|
+
setOpen(false);
|
|
137
|
+
}, [
|
|
138
|
+
setOpen
|
|
139
|
+
]);
|
|
149
140
|
const handleDelayedOpen = $iVrL9$react.useCallback(()=>{
|
|
150
141
|
window.clearTimeout(openTimerRef.current);
|
|
151
142
|
openTimerRef.current = window.setTimeout(()=>{
|
|
@@ -168,24 +159,24 @@ const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
|
|
|
168
159
|
trigger: trigger,
|
|
169
160
|
onTriggerChange: setTrigger,
|
|
170
161
|
onTriggerEnter: $iVrL9$react.useCallback(()=>{
|
|
171
|
-
if (
|
|
162
|
+
if (providerContext.isOpenDelayed) handleDelayedOpen();
|
|
172
163
|
else handleOpen();
|
|
173
164
|
}, [
|
|
174
|
-
|
|
165
|
+
providerContext.isOpenDelayed,
|
|
175
166
|
handleDelayedOpen,
|
|
176
167
|
handleOpen
|
|
177
168
|
]),
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
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.
|
|
182
172
|
window.clearTimeout(openTimerRef.current);
|
|
183
|
-
setOpen(false);
|
|
184
|
-
onClose();
|
|
185
173
|
}, [
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
])
|
|
174
|
+
handleClose,
|
|
175
|
+
disableHoverableContent
|
|
176
|
+
]),
|
|
177
|
+
onOpen: handleOpen,
|
|
178
|
+
onClose: handleClose,
|
|
179
|
+
disableHoverableContent: disableHoverableContent
|
|
189
180
|
}, children));
|
|
190
181
|
};
|
|
191
182
|
/*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$28c660c63b792dea, {
|
|
@@ -197,16 +188,19 @@ const $c34afbc43c90cc6f$export$28c660c63b792dea = (props)=>{
|
|
|
197
188
|
const $c34afbc43c90cc6f$export$8c610744efcf8a1d = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
|
|
198
189
|
const { __scopeTooltip: __scopeTooltip , ...triggerProps } = props;
|
|
199
190
|
const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$TRIGGER_NAME, __scopeTooltip);
|
|
191
|
+
const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$TRIGGER_NAME, __scopeTooltip);
|
|
200
192
|
const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip);
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
const
|
|
193
|
+
const ref = $iVrL9$react.useRef(null);
|
|
194
|
+
const composedRefs = $iVrL9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref, context.onTriggerChange);
|
|
195
|
+
const isPointerDownRef = $iVrL9$react.useRef(false);
|
|
196
|
+
const hasPointerMoveOpenedRef = $iVrL9$react.useRef(false);
|
|
197
|
+
const handlePointerUp = $iVrL9$react.useCallback(()=>isPointerDownRef.current = false
|
|
204
198
|
, []);
|
|
205
199
|
$iVrL9$react.useEffect(()=>{
|
|
206
|
-
return ()=>document.removeEventListener('
|
|
200
|
+
return ()=>document.removeEventListener('pointerup', handlePointerUp)
|
|
207
201
|
;
|
|
208
202
|
}, [
|
|
209
|
-
|
|
203
|
+
handlePointerUp
|
|
210
204
|
]);
|
|
211
205
|
return /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactpopper.Anchor, ($parcel$interopDefault($iVrL9$babelruntimehelpersextends))({
|
|
212
206
|
asChild: true
|
|
@@ -216,17 +210,26 @@ const $c34afbc43c90cc6f$export$8c610744efcf8a1d = /*#__PURE__*/ $iVrL9$react.for
|
|
|
216
210
|
"aria-describedby": context.open ? context.contentId : undefined,
|
|
217
211
|
"data-state": context.stateAttribute
|
|
218
212
|
}, triggerProps, {
|
|
219
|
-
ref:
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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;
|
|
224
|
+
}),
|
|
225
|
+
onPointerDown: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerDown, ()=>{
|
|
226
|
+
isPointerDownRef.current = true;
|
|
227
|
+
document.addEventListener('pointerup', handlePointerUp, {
|
|
225
228
|
once: true
|
|
226
229
|
});
|
|
227
230
|
}),
|
|
228
231
|
onFocus: $iVrL9$radixuiprimitive.composeEventHandlers(props.onFocus, ()=>{
|
|
229
|
-
if (!
|
|
232
|
+
if (!isPointerDownRef.current) context.onOpen();
|
|
230
233
|
}),
|
|
231
234
|
onBlur: $iVrL9$radixuiprimitive.composeEventHandlers(props.onBlur, context.onClose),
|
|
232
235
|
onClick: $iVrL9$radixuiprimitive.composeEventHandlers(props.onClick, (event)=>{
|
|
@@ -240,23 +243,151 @@ const $c34afbc43c90cc6f$export$8c610744efcf8a1d = /*#__PURE__*/ $iVrL9$react.for
|
|
|
240
243
|
/*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$8c610744efcf8a1d, {
|
|
241
244
|
displayName: $c34afbc43c90cc6f$var$TRIGGER_NAME
|
|
242
245
|
});
|
|
246
|
+
/* -------------------------------------------------------------------------------------------------
|
|
247
|
+
* TooltipPortal
|
|
248
|
+
* -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$PORTAL_NAME = 'TooltipPortal';
|
|
249
|
+
const [$c34afbc43c90cc6f$var$PortalProvider, $c34afbc43c90cc6f$var$usePortalContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PORTAL_NAME, {
|
|
250
|
+
forceMount: undefined
|
|
251
|
+
});
|
|
252
|
+
const $c34afbc43c90cc6f$export$7b36b8f925ab7497 = (props)=>{
|
|
253
|
+
const { __scopeTooltip: __scopeTooltip , forceMount: forceMount , children: children , container: container } = props;
|
|
254
|
+
const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$PORTAL_NAME, __scopeTooltip);
|
|
255
|
+
return /*#__PURE__*/ $iVrL9$react.createElement($c34afbc43c90cc6f$var$PortalProvider, {
|
|
256
|
+
scope: __scopeTooltip,
|
|
257
|
+
forceMount: forceMount
|
|
258
|
+
}, /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactpresence.Presence, {
|
|
259
|
+
present: forceMount || context.open
|
|
260
|
+
}, /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactportal.Portal, {
|
|
261
|
+
asChild: true,
|
|
262
|
+
container: container
|
|
263
|
+
}, children)));
|
|
264
|
+
};
|
|
265
|
+
/*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$7b36b8f925ab7497, {
|
|
266
|
+
displayName: $c34afbc43c90cc6f$var$PORTAL_NAME
|
|
267
|
+
});
|
|
243
268
|
/* -------------------------------------------------------------------------------------------------
|
|
244
269
|
* TooltipContent
|
|
245
270
|
* -----------------------------------------------------------------------------------------------*/ const $c34afbc43c90cc6f$var$CONTENT_NAME = 'TooltipContent';
|
|
246
271
|
const $c34afbc43c90cc6f$export$e9003e2be37ec060 = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
|
|
247
|
-
const
|
|
272
|
+
const portalContext = $c34afbc43c90cc6f$var$usePortalContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip);
|
|
273
|
+
const { forceMount: forceMount = portalContext.forceMount , side: side = 'top' , ...contentProps } = props;
|
|
248
274
|
const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip);
|
|
249
275
|
return /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactpresence.Presence, {
|
|
250
276
|
present: forceMount || context.open
|
|
251
|
-
}, /*#__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, {
|
|
252
280
|
ref: forwardedRef
|
|
253
|
-
},
|
|
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
|
+
}));
|
|
383
|
+
});
|
|
384
|
+
const [$c34afbc43c90cc6f$var$VisuallyHiddenContentContextProvider, $c34afbc43c90cc6f$var$useVisuallyHiddenContentContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$TOOLTIP_NAME, {
|
|
385
|
+
isInside: false
|
|
254
386
|
});
|
|
255
387
|
const $c34afbc43c90cc6f$var$TooltipContentImpl = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
|
|
256
|
-
const { __scopeTooltip: __scopeTooltip , children: children , 'aria-label': ariaLabel ,
|
|
388
|
+
const { __scopeTooltip: __scopeTooltip , children: children , 'aria-label': ariaLabel , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , ...contentProps } = props;
|
|
257
389
|
const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, __scopeTooltip);
|
|
258
390
|
const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip);
|
|
259
|
-
const PortalWrapper = portalled ? $iVrL9$radixuireactportal.Portal : $iVrL9$react.Fragment;
|
|
260
391
|
const { onClose: onClose } = context; // Close this tooltip if another one opens
|
|
261
392
|
$iVrL9$react.useEffect(()=>{
|
|
262
393
|
document.addEventListener($c34afbc43c90cc6f$var$TOOLTIP_OPEN, onClose);
|
|
@@ -283,7 +414,7 @@ const $c34afbc43c90cc6f$var$TooltipContentImpl = /*#__PURE__*/ $iVrL9$react.forw
|
|
|
283
414
|
context.trigger,
|
|
284
415
|
onClose
|
|
285
416
|
]);
|
|
286
|
-
return /*#__PURE__*/ $iVrL9$react.createElement(
|
|
417
|
+
return /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactdismissablelayer.DismissableLayer, {
|
|
287
418
|
asChild: true,
|
|
288
419
|
disableOutsidePointerEvents: false,
|
|
289
420
|
onEscapeKeyDown: onEscapeKeyDown,
|
|
@@ -300,7 +431,10 @@ const $c34afbc43c90cc6f$var$TooltipContentImpl = /*#__PURE__*/ $iVrL9$react.forw
|
|
|
300
431
|
// re-namespace exposed content custom property
|
|
301
432
|
['--radix-tooltip-content-transform-origin']: 'var(--radix-popper-transform-origin)'
|
|
302
433
|
}
|
|
303
|
-
}), /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactslot.Slottable, null, children), /*#__PURE__*/ $iVrL9$react.createElement($
|
|
434
|
+
}), /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactslot.Slottable, null, children), /*#__PURE__*/ $iVrL9$react.createElement($c34afbc43c90cc6f$var$VisuallyHiddenContentContextProvider, {
|
|
435
|
+
scope: __scopeTooltip,
|
|
436
|
+
isInside: true
|
|
437
|
+
}, /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactvisuallyhidden.Root, {
|
|
304
438
|
id: context.contentId,
|
|
305
439
|
role: "tooltip"
|
|
306
440
|
}, ariaLabel || children))));
|
|
@@ -314,21 +448,117 @@ const $c34afbc43c90cc6f$var$TooltipContentImpl = /*#__PURE__*/ $iVrL9$react.forw
|
|
|
314
448
|
const $c34afbc43c90cc6f$export$c27ee0ad710f7559 = /*#__PURE__*/ $iVrL9$react.forwardRef((props, forwardedRef)=>{
|
|
315
449
|
const { __scopeTooltip: __scopeTooltip , ...arrowProps } = props;
|
|
316
450
|
const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip);
|
|
317
|
-
|
|
451
|
+
const visuallyHiddenContentContext = $c34afbc43c90cc6f$var$useVisuallyHiddenContentContext($c34afbc43c90cc6f$var$ARROW_NAME, __scopeTooltip); // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to
|
|
452
|
+
// prevent issues in positioning the arrow due to the duplicate
|
|
453
|
+
return visuallyHiddenContentContext.isInside ? null : /*#__PURE__*/ $iVrL9$react.createElement($iVrL9$radixuireactpopper.Arrow, ($parcel$interopDefault($iVrL9$babelruntimehelpersextends))({}, popperScope, arrowProps, {
|
|
318
454
|
ref: forwardedRef
|
|
319
455
|
}));
|
|
320
456
|
});
|
|
321
457
|
/*#__PURE__*/ Object.assign($c34afbc43c90cc6f$export$c27ee0ad710f7559, {
|
|
322
458
|
displayName: $c34afbc43c90cc6f$var$ARROW_NAME
|
|
323
459
|
});
|
|
324
|
-
/* -----------------------------------------------------------------------------------------------*/
|
|
460
|
+
/* -----------------------------------------------------------------------------------------------*/ function $c34afbc43c90cc6f$var$getExitSideFromRect(point, rect) {
|
|
461
|
+
const top = Math.abs(rect.top - point.y);
|
|
462
|
+
const bottom = Math.abs(rect.bottom - point.y);
|
|
463
|
+
const right = Math.abs(rect.right - point.x);
|
|
464
|
+
const left = Math.abs(rect.left - point.x);
|
|
465
|
+
switch(Math.min(top, bottom, right, left)){
|
|
466
|
+
case left:
|
|
467
|
+
return 'left';
|
|
468
|
+
case right:
|
|
469
|
+
return 'right';
|
|
470
|
+
case top:
|
|
471
|
+
return 'top';
|
|
472
|
+
case bottom:
|
|
473
|
+
return 'bottom';
|
|
474
|
+
default:
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
function $c34afbc43c90cc6f$var$getPointsFromRect(rect) {
|
|
479
|
+
const { top: top , right: right , bottom: bottom , left: left } = rect;
|
|
480
|
+
return [
|
|
481
|
+
{
|
|
482
|
+
x: left,
|
|
483
|
+
y: top
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
x: right,
|
|
487
|
+
y: top
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
x: right,
|
|
491
|
+
y: bottom
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
x: left,
|
|
495
|
+
y: bottom
|
|
496
|
+
}
|
|
497
|
+
];
|
|
498
|
+
} // Determine if a point is inside of a polygon.
|
|
499
|
+
// Based on https://github.com/substack/point-in-polygon
|
|
500
|
+
function $c34afbc43c90cc6f$var$isPointInPolygon(point, polygon) {
|
|
501
|
+
const { x: x , y: y } = point;
|
|
502
|
+
let inside = false;
|
|
503
|
+
for(let i = 0, j = polygon.length - 1; i < polygon.length; j = i++){
|
|
504
|
+
const xi = polygon[i].x;
|
|
505
|
+
const yi = polygon[i].y;
|
|
506
|
+
const xj = polygon[j].x;
|
|
507
|
+
const yj = polygon[j].y; // prettier-ignore
|
|
508
|
+
const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
|
|
509
|
+
if (intersect) inside = !inside;
|
|
510
|
+
}
|
|
511
|
+
return inside;
|
|
512
|
+
} // Returns a new array of points representing the convex hull of the given set of points.
|
|
513
|
+
// https://www.nayuki.io/page/convex-hull-algorithm
|
|
514
|
+
function $c34afbc43c90cc6f$var$getHull(points) {
|
|
515
|
+
const newPoints = points.slice();
|
|
516
|
+
newPoints.sort((a, b)=>{
|
|
517
|
+
if (a.x < b.x) return -1;
|
|
518
|
+
else if (a.x > b.x) return 1;
|
|
519
|
+
else if (a.y < b.y) return -1;
|
|
520
|
+
else if (a.y > b.y) return 1;
|
|
521
|
+
else return 0;
|
|
522
|
+
});
|
|
523
|
+
return $c34afbc43c90cc6f$var$getHullPresorted(newPoints);
|
|
524
|
+
} // Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.
|
|
525
|
+
function $c34afbc43c90cc6f$var$getHullPresorted(points) {
|
|
526
|
+
if (points.length <= 1) return points.slice();
|
|
527
|
+
const upperHull = [];
|
|
528
|
+
for(let i = 0; i < points.length; i++){
|
|
529
|
+
const p = points[i];
|
|
530
|
+
while(upperHull.length >= 2){
|
|
531
|
+
const q = upperHull[upperHull.length - 1];
|
|
532
|
+
const r = upperHull[upperHull.length - 2];
|
|
533
|
+
if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();
|
|
534
|
+
else break;
|
|
535
|
+
}
|
|
536
|
+
upperHull.push(p);
|
|
537
|
+
}
|
|
538
|
+
upperHull.pop();
|
|
539
|
+
const lowerHull = [];
|
|
540
|
+
for(let i1 = points.length - 1; i1 >= 0; i1--){
|
|
541
|
+
const p = points[i1];
|
|
542
|
+
while(lowerHull.length >= 2){
|
|
543
|
+
const q = lowerHull[lowerHull.length - 1];
|
|
544
|
+
const r = lowerHull[lowerHull.length - 2];
|
|
545
|
+
if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();
|
|
546
|
+
else break;
|
|
547
|
+
}
|
|
548
|
+
lowerHull.push(p);
|
|
549
|
+
}
|
|
550
|
+
lowerHull.pop();
|
|
551
|
+
if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) return upperHull;
|
|
552
|
+
else return upperHull.concat(lowerHull);
|
|
553
|
+
}
|
|
554
|
+
const $c34afbc43c90cc6f$export$2881499e37b75b9a = $c34afbc43c90cc6f$export$f78649fb9ca566b8;
|
|
325
555
|
const $c34afbc43c90cc6f$export$be92b6f5f03c0fe9 = $c34afbc43c90cc6f$export$28c660c63b792dea;
|
|
326
556
|
const $c34afbc43c90cc6f$export$41fb9f06171c75f4 = $c34afbc43c90cc6f$export$8c610744efcf8a1d;
|
|
557
|
+
const $c34afbc43c90cc6f$export$602eac185826482c = $c34afbc43c90cc6f$export$7b36b8f925ab7497;
|
|
327
558
|
const $c34afbc43c90cc6f$export$7c6e2c02157bb7d2 = $c34afbc43c90cc6f$export$e9003e2be37ec060;
|
|
328
559
|
const $c34afbc43c90cc6f$export$21b07c8f274aebd5 = $c34afbc43c90cc6f$export$c27ee0ad710f7559;
|
|
329
560
|
|
|
330
561
|
|
|
331
|
-
$parcel$exportWildcard(module.exports, $c34afbc43c90cc6f$exports);
|
|
332
562
|
|
|
333
563
|
|
|
334
564
|
//# sourceMappingURL=index.js.map
|