@dreamcommerce/aurora 3.0.0-13 → 3.0.0-15
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/build/cjs/external/@radix-ui/primitive/dist/index.mjs.js +6 -3
- package/build/cjs/external/@radix-ui/primitive/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-arrow/dist/index.mjs.js +19 -15
- package/build/cjs/external/@radix-ui/react-arrow/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-compose-refs/dist/index.mjs.js +14 -4
- package/build/cjs/external/@radix-ui/react-compose-refs/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-context/dist/index.mjs.js +54 -35
- package/build/cjs/external/@radix-ui/react-context/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-dismissable-layer/dist/index.mjs.js +168 -138
- package/build/cjs/external/@radix-ui/react-dismissable-layer/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-id/dist/index.mjs.js +13 -6
- package/build/cjs/external/@radix-ui/react-id/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-popper/dist/index.mjs.js +281 -223
- package/build/cjs/external/@radix-ui/react-popper/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-popper/external/@radix-ui/react-context/dist/index.mjs.js +51 -34
- package/build/cjs/external/@radix-ui/react-popper/external/@radix-ui/react-context/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-portal/dist/index.mjs.js +17 -6
- package/build/cjs/external/@radix-ui/react-portal/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-presence/dist/index.mjs.js +67 -53
- package/build/cjs/external/@radix-ui/react-presence/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-primitive/dist/index.mjs.js +16 -27
- package/build/cjs/external/@radix-ui/react-primitive/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-slot/dist/index.mjs.js +49 -33
- package/build/cjs/external/@radix-ui/react-slot/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-tooltip/dist/index.mjs.js +432 -338
- package/build/cjs/external/@radix-ui/react-tooltip/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-use-callback-ref/dist/index.mjs.js +11 -3
- package/build/cjs/external/@radix-ui/react-use-callback-ref/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-use-controllable-state/dist/index.mjs.js +34 -32
- package/build/cjs/external/@radix-ui/react-use-controllable-state/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-use-escape-keydown/dist/index.mjs.js +13 -6
- package/build/cjs/external/@radix-ui/react-use-escape-keydown/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-use-layout-effect/dist/index.mjs.js +1 -2
- package/build/cjs/external/@radix-ui/react-use-layout-effect/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-use-size/dist/index.mjs.js +26 -13
- package/build/cjs/external/@radix-ui/react-use-size/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/@radix-ui/react-visually-hidden/dist/index.mjs.js +19 -26
- package/build/cjs/external/@radix-ui/react-visually-hidden/dist/index.mjs.js.map +1 -1
- package/build/cjs/external/tailwind-merge/dist/bundle-mjs.mjs.js +2586 -0
- package/build/{esm/external/tailwind-merge/dist/bundle-cjs.js.map → cjs/external/tailwind-merge/dist/bundle-mjs.mjs.js.map} +1 -1
- package/build/cjs/packages/aurora/src/utilities/cn.js +2 -2
- package/build/cjs/packages/aurora/src/utilities/cn.js.map +1 -1
- package/build/esm/external/@floating-ui/dom/dist/floating-ui.dom.mjs.js +1 -1
- package/build/esm/external/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js +1 -1
- package/build/esm/external/@radix-ui/primitive/dist/index.mjs.js +6 -3
- package/build/esm/external/@radix-ui/primitive/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-arrow/dist/index.mjs.js +19 -15
- package/build/esm/external/@radix-ui/react-arrow/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-compose-refs/dist/index.mjs.js +14 -4
- package/build/esm/external/@radix-ui/react-compose-refs/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-context/dist/index.mjs.js +54 -35
- package/build/esm/external/@radix-ui/react-context/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-dismissable-layer/dist/index.mjs.js +169 -139
- package/build/esm/external/@radix-ui/react-dismissable-layer/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-id/dist/index.mjs.js +13 -6
- package/build/esm/external/@radix-ui/react-id/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-popper/dist/index.mjs.js +282 -224
- package/build/esm/external/@radix-ui/react-popper/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-popper/external/@radix-ui/react-context/dist/index.mjs.js +51 -34
- package/build/esm/external/@radix-ui/react-popper/external/@radix-ui/react-context/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-portal/dist/index.mjs.js +17 -6
- package/build/esm/external/@radix-ui/react-portal/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-presence/dist/index.mjs.js +67 -53
- package/build/esm/external/@radix-ui/react-presence/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-primitive/dist/index.mjs.js +16 -27
- package/build/esm/external/@radix-ui/react-primitive/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-slot/dist/index.mjs.js +49 -33
- package/build/esm/external/@radix-ui/react-slot/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-tooltip/dist/index.mjs.js +424 -330
- package/build/esm/external/@radix-ui/react-tooltip/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-use-callback-ref/dist/index.mjs.js +11 -3
- package/build/esm/external/@radix-ui/react-use-callback-ref/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-use-controllable-state/dist/index.mjs.js +34 -32
- package/build/esm/external/@radix-ui/react-use-controllable-state/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-use-escape-keydown/dist/index.mjs.js +13 -6
- package/build/esm/external/@radix-ui/react-use-escape-keydown/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-use-layout-effect/dist/index.mjs.js +1 -2
- package/build/esm/external/@radix-ui/react-use-layout-effect/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-use-size/dist/index.mjs.js +26 -13
- package/build/esm/external/@radix-ui/react-use-size/dist/index.mjs.js.map +1 -1
- package/build/esm/external/@radix-ui/react-visually-hidden/dist/index.mjs.js +19 -26
- package/build/esm/external/@radix-ui/react-visually-hidden/dist/index.mjs.js.map +1 -1
- package/build/esm/external/tailwind-merge/dist/bundle-mjs.mjs.js +2578 -0
- package/build/{cjs/external/tailwind-merge/dist/bundle-cjs.js.map → esm/external/tailwind-merge/dist/bundle-mjs.mjs.js.map} +1 -1
- package/build/esm/packages/aurora/src/utilities/cn.js +2 -2
- package/build/esm/packages/aurora/src/utilities/cn.js.map +1 -1
- package/package.json +1 -1
- package/build/cjs/_virtual/_commonjsHelpers.js +0 -11
- package/build/cjs/_virtual/_commonjsHelpers.js.map +0 -1
- package/build/cjs/external/tailwind-merge/dist/bundle-cjs.js +0 -2671
- package/build/esm/_virtual/_commonjsHelpers.js +0 -7
- package/build/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/build/esm/external/tailwind-merge/dist/bundle-cjs.js +0 -2667
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useState, useRef, useEffect, useCallback, useMemo, forwardRef } from 'react';
|
|
2
|
+
import { slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2, objectWithoutProperties as _objectWithoutProperties, toConsumableArray as _toConsumableArray } from '../../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
3
|
import { composeEventHandlers } from '../../primitive/dist/index.mjs.js';
|
|
3
4
|
import { useComposedRefs } from '../../react-compose-refs/dist/index.mjs.js';
|
|
4
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -7,139 +8,156 @@ import { Slottable } from '../../react-slot/dist/index.mjs.js';
|
|
|
7
8
|
import { Primitive } from '../../react-primitive/dist/index.mjs.js';
|
|
8
9
|
import { DismissableLayer } from '../../react-dismissable-layer/dist/index.mjs.js';
|
|
9
10
|
import { useId } from '../../react-id/dist/index.mjs.js';
|
|
10
|
-
import { createPopperScope, Anchor, Content, Arrow
|
|
11
|
+
import { createPopperScope, Root as Root2, Anchor, Content, Arrow } from '../../react-popper/dist/index.mjs.js';
|
|
11
12
|
import { Portal as Portal$1 } from '../../react-portal/dist/index.mjs.js';
|
|
12
13
|
import { Presence } from '../../react-presence/dist/index.mjs.js';
|
|
13
14
|
import { useControllableState } from '../../react-use-controllable-state/dist/index.mjs.js';
|
|
14
15
|
import { Root } from '../../react-visually-hidden/dist/index.mjs.js';
|
|
15
16
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
]
|
|
17
|
+
var _excluded = ["__scopeTooltip"],
|
|
18
|
+
_excluded2 = ["forceMount", "side"],
|
|
19
|
+
_excluded3 = ["__scopeTooltip", "children", "aria-label", "onEscapeKeyDown", "onPointerDownOutside"],
|
|
20
|
+
_excluded4 = ["__scopeTooltip"];
|
|
21
|
+
var _createContextScope = createContextScope("Tooltip", [createPopperScope]),
|
|
22
|
+
_createContextScope2 = _slicedToArray(_createContextScope, 2),
|
|
23
|
+
createTooltipContext = _createContextScope2[0],
|
|
24
|
+
createTooltipScope = _createContextScope2[1];
|
|
19
25
|
var usePopperScope = createPopperScope();
|
|
20
26
|
var PROVIDER_NAME = "TooltipProvider";
|
|
21
27
|
var DEFAULT_DELAY_DURATION = 700;
|
|
22
28
|
var TOOLTIP_OPEN = "tooltip.open";
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
var _createTooltipContext = createTooltipContext(PROVIDER_NAME),
|
|
30
|
+
_createTooltipContext2 = _slicedToArray(_createTooltipContext, 2),
|
|
31
|
+
TooltipProviderContextProvider = _createTooltipContext2[0],
|
|
32
|
+
useTooltipProviderContext = _createTooltipContext2[1];
|
|
33
|
+
var TooltipProvider = function TooltipProvider(props) {
|
|
34
|
+
var __scopeTooltip = props.__scopeTooltip,
|
|
35
|
+
_props$delayDuration = props.delayDuration,
|
|
36
|
+
delayDuration = _props$delayDuration === void 0 ? DEFAULT_DELAY_DURATION : _props$delayDuration,
|
|
37
|
+
_props$skipDelayDurat = props.skipDelayDuration,
|
|
38
|
+
skipDelayDuration = _props$skipDelayDurat === void 0 ? 300 : _props$skipDelayDurat,
|
|
39
|
+
_props$disableHoverab = props.disableHoverableContent,
|
|
40
|
+
disableHoverableContent = _props$disableHoverab === void 0 ? false : _props$disableHoverab,
|
|
41
|
+
children = props.children;
|
|
42
|
+
var _React$useState = useState(true),
|
|
43
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
44
|
+
isOpenDelayed = _React$useState2[0],
|
|
45
|
+
setIsOpenDelayed = _React$useState2[1];
|
|
46
|
+
var isPointerInTransitRef = useRef(false);
|
|
47
|
+
var skipDelayTimerRef = useRef(0);
|
|
48
|
+
useEffect(function () {
|
|
49
|
+
var skipDelayTimer = skipDelayTimerRef.current;
|
|
50
|
+
return function () {
|
|
51
|
+
return window.clearTimeout(skipDelayTimer);
|
|
52
|
+
};
|
|
38
53
|
}, []);
|
|
39
|
-
return /* @__PURE__ */
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
disableHoverableContent,
|
|
61
|
-
children
|
|
62
|
-
}
|
|
63
|
-
);
|
|
54
|
+
return /* @__PURE__ */jsx(TooltipProviderContextProvider, {
|
|
55
|
+
scope: __scopeTooltip,
|
|
56
|
+
isOpenDelayed: isOpenDelayed,
|
|
57
|
+
delayDuration: delayDuration,
|
|
58
|
+
onOpen: useCallback(function () {
|
|
59
|
+
window.clearTimeout(skipDelayTimerRef.current);
|
|
60
|
+
setIsOpenDelayed(false);
|
|
61
|
+
}, []),
|
|
62
|
+
onClose: useCallback(function () {
|
|
63
|
+
window.clearTimeout(skipDelayTimerRef.current);
|
|
64
|
+
skipDelayTimerRef.current = window.setTimeout(function () {
|
|
65
|
+
return setIsOpenDelayed(true);
|
|
66
|
+
}, skipDelayDuration);
|
|
67
|
+
}, [skipDelayDuration]),
|
|
68
|
+
isPointerInTransitRef: isPointerInTransitRef,
|
|
69
|
+
onPointerInTransitChange: useCallback(function (inTransit) {
|
|
70
|
+
isPointerInTransitRef.current = inTransit;
|
|
71
|
+
}, []),
|
|
72
|
+
disableHoverableContent: disableHoverableContent,
|
|
73
|
+
children: children
|
|
74
|
+
});
|
|
64
75
|
};
|
|
65
76
|
TooltipProvider.displayName = PROVIDER_NAME;
|
|
66
77
|
var TOOLTIP_NAME = "Tooltip";
|
|
67
|
-
var
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
78
|
+
var _createTooltipContext3 = createTooltipContext(TOOLTIP_NAME),
|
|
79
|
+
_createTooltipContext4 = _slicedToArray(_createTooltipContext3, 2),
|
|
80
|
+
TooltipContextProvider = _createTooltipContext4[0],
|
|
81
|
+
useTooltipContext = _createTooltipContext4[1];
|
|
82
|
+
var Tooltip = function Tooltip(props) {
|
|
83
|
+
var __scopeTooltip = props.__scopeTooltip,
|
|
84
|
+
children = props.children,
|
|
85
|
+
openProp = props.open,
|
|
86
|
+
_props$defaultOpen = props.defaultOpen,
|
|
87
|
+
defaultOpen = _props$defaultOpen === void 0 ? false : _props$defaultOpen,
|
|
88
|
+
onOpenChange = props.onOpenChange,
|
|
89
|
+
disableHoverableContentProp = props.disableHoverableContent,
|
|
90
|
+
delayDurationProp = props.delayDuration;
|
|
91
|
+
var providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);
|
|
92
|
+
var popperScope = usePopperScope(__scopeTooltip);
|
|
93
|
+
var _React$useState3 = useState(null),
|
|
94
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
95
|
+
trigger = _React$useState4[0],
|
|
96
|
+
setTrigger = _React$useState4[1];
|
|
97
|
+
var contentId = useId();
|
|
98
|
+
var openTimerRef = useRef(0);
|
|
99
|
+
var disableHoverableContent = disableHoverableContentProp !== null && disableHoverableContentProp !== void 0 ? disableHoverableContentProp : providerContext.disableHoverableContent;
|
|
100
|
+
var delayDuration = delayDurationProp !== null && delayDurationProp !== void 0 ? delayDurationProp : providerContext.delayDuration;
|
|
101
|
+
var wasOpenDelayedRef = useRef(false);
|
|
102
|
+
var _useControllableState = useControllableState({
|
|
103
|
+
prop: openProp,
|
|
104
|
+
defaultProp: defaultOpen,
|
|
105
|
+
onChange: function onChange(open2) {
|
|
106
|
+
if (open2) {
|
|
107
|
+
providerContext.onOpen();
|
|
108
|
+
document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));
|
|
109
|
+
} else {
|
|
110
|
+
providerContext.onClose();
|
|
111
|
+
}
|
|
112
|
+
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(open2);
|
|
95
113
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
114
|
+
}),
|
|
115
|
+
_useControllableState2 = _slicedToArray(_useControllableState, 2),
|
|
116
|
+
_useControllableState3 = _useControllableState2[0],
|
|
117
|
+
open = _useControllableState3 === void 0 ? false : _useControllableState3,
|
|
118
|
+
setOpen = _useControllableState2[1];
|
|
119
|
+
var stateAttribute = useMemo(function () {
|
|
100
120
|
return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
|
|
101
121
|
}, [open]);
|
|
102
|
-
|
|
122
|
+
var handleOpen = useCallback(function () {
|
|
103
123
|
window.clearTimeout(openTimerRef.current);
|
|
104
124
|
openTimerRef.current = 0;
|
|
105
125
|
wasOpenDelayedRef.current = false;
|
|
106
126
|
setOpen(true);
|
|
107
127
|
}, [setOpen]);
|
|
108
|
-
|
|
128
|
+
var handleClose = useCallback(function () {
|
|
109
129
|
window.clearTimeout(openTimerRef.current);
|
|
110
130
|
openTimerRef.current = 0;
|
|
111
131
|
setOpen(false);
|
|
112
132
|
}, [setOpen]);
|
|
113
|
-
|
|
133
|
+
var handleDelayedOpen = useCallback(function () {
|
|
114
134
|
window.clearTimeout(openTimerRef.current);
|
|
115
|
-
openTimerRef.current = window.setTimeout(()
|
|
135
|
+
openTimerRef.current = window.setTimeout(function () {
|
|
116
136
|
wasOpenDelayedRef.current = true;
|
|
117
137
|
setOpen(true);
|
|
118
138
|
openTimerRef.current = 0;
|
|
119
139
|
}, delayDuration);
|
|
120
140
|
}, [delayDuration, setOpen]);
|
|
121
|
-
useEffect(()
|
|
122
|
-
return ()
|
|
141
|
+
useEffect(function () {
|
|
142
|
+
return function () {
|
|
123
143
|
if (openTimerRef.current) {
|
|
124
144
|
window.clearTimeout(openTimerRef.current);
|
|
125
145
|
openTimerRef.current = 0;
|
|
126
146
|
}
|
|
127
147
|
};
|
|
128
148
|
}, []);
|
|
129
|
-
return /* @__PURE__ */
|
|
130
|
-
TooltipContextProvider,
|
|
131
|
-
{
|
|
149
|
+
return /* @__PURE__ */jsx(Root2, _objectSpread2(_objectSpread2({}, popperScope), {}, {
|
|
150
|
+
children: /* @__PURE__ */jsx(TooltipContextProvider, {
|
|
132
151
|
scope: __scopeTooltip,
|
|
133
|
-
contentId,
|
|
134
|
-
open,
|
|
135
|
-
stateAttribute,
|
|
136
|
-
trigger,
|
|
152
|
+
contentId: contentId,
|
|
153
|
+
open: open,
|
|
154
|
+
stateAttribute: stateAttribute,
|
|
155
|
+
trigger: trigger,
|
|
137
156
|
onTriggerChange: setTrigger,
|
|
138
|
-
onTriggerEnter: useCallback(()
|
|
139
|
-
if (providerContext.isOpenDelayed) handleDelayedOpen();
|
|
140
|
-
else handleOpen();
|
|
157
|
+
onTriggerEnter: useCallback(function () {
|
|
158
|
+
if (providerContext.isOpenDelayed) handleDelayedOpen();else handleOpen();
|
|
141
159
|
}, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen]),
|
|
142
|
-
onTriggerLeave: useCallback(()
|
|
160
|
+
onTriggerLeave: useCallback(function () {
|
|
143
161
|
if (disableHoverableContent) {
|
|
144
162
|
handleClose();
|
|
145
163
|
} else {
|
|
@@ -149,126 +167,175 @@ var Tooltip = (props) => {
|
|
|
149
167
|
}, [handleClose, disableHoverableContent]),
|
|
150
168
|
onOpen: handleOpen,
|
|
151
169
|
onClose: handleClose,
|
|
152
|
-
disableHoverableContent,
|
|
153
|
-
children
|
|
154
|
-
}
|
|
155
|
-
|
|
170
|
+
disableHoverableContent: disableHoverableContent,
|
|
171
|
+
children: children
|
|
172
|
+
})
|
|
173
|
+
}));
|
|
156
174
|
};
|
|
157
175
|
Tooltip.displayName = TOOLTIP_NAME;
|
|
158
176
|
var TRIGGER_NAME = "TooltipTrigger";
|
|
159
|
-
var TooltipTrigger = forwardRef(
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
context.
|
|
189
|
-
hasPointerMoveOpenedRef.current =
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
);
|
|
177
|
+
var TooltipTrigger = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
178
|
+
var __scopeTooltip = props.__scopeTooltip,
|
|
179
|
+
triggerProps = _objectWithoutProperties(props, _excluded);
|
|
180
|
+
var context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);
|
|
181
|
+
var providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);
|
|
182
|
+
var popperScope = usePopperScope(__scopeTooltip);
|
|
183
|
+
var ref = useRef(null);
|
|
184
|
+
var composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);
|
|
185
|
+
var isPointerDownRef = useRef(false);
|
|
186
|
+
var hasPointerMoveOpenedRef = useRef(false);
|
|
187
|
+
var handlePointerUp = useCallback(function () {
|
|
188
|
+
return isPointerDownRef.current = false;
|
|
189
|
+
}, []);
|
|
190
|
+
useEffect(function () {
|
|
191
|
+
return function () {
|
|
192
|
+
return document.removeEventListener("pointerup", handlePointerUp);
|
|
193
|
+
};
|
|
194
|
+
}, [handlePointerUp]);
|
|
195
|
+
return /* @__PURE__ */jsx(Anchor, _objectSpread2(_objectSpread2({
|
|
196
|
+
asChild: true
|
|
197
|
+
}, popperScope), {}, {
|
|
198
|
+
children: /* @__PURE__ */jsx(Primitive.button, _objectSpread2(_objectSpread2({
|
|
199
|
+
"aria-describedby": context.open ? context.contentId : void 0,
|
|
200
|
+
"data-state": context.stateAttribute
|
|
201
|
+
}, triggerProps), {}, {
|
|
202
|
+
ref: composedRefs,
|
|
203
|
+
onPointerMove: composeEventHandlers(props.onPointerMove, function (event) {
|
|
204
|
+
if (event.pointerType === "touch") return;
|
|
205
|
+
if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {
|
|
206
|
+
context.onTriggerEnter();
|
|
207
|
+
hasPointerMoveOpenedRef.current = true;
|
|
208
|
+
}
|
|
209
|
+
}),
|
|
210
|
+
onPointerLeave: composeEventHandlers(props.onPointerLeave, function () {
|
|
211
|
+
context.onTriggerLeave();
|
|
212
|
+
hasPointerMoveOpenedRef.current = false;
|
|
213
|
+
}),
|
|
214
|
+
onPointerDown: composeEventHandlers(props.onPointerDown, function () {
|
|
215
|
+
isPointerDownRef.current = true;
|
|
216
|
+
document.addEventListener("pointerup", handlePointerUp, {
|
|
217
|
+
once: true
|
|
218
|
+
});
|
|
219
|
+
}),
|
|
220
|
+
onFocus: composeEventHandlers(props.onFocus, function () {
|
|
221
|
+
if (!isPointerDownRef.current) context.onOpen();
|
|
222
|
+
}),
|
|
223
|
+
onBlur: composeEventHandlers(props.onBlur, context.onClose),
|
|
224
|
+
onClick: composeEventHandlers(props.onClick, context.onClose)
|
|
225
|
+
}))
|
|
226
|
+
}));
|
|
227
|
+
});
|
|
204
228
|
TooltipTrigger.displayName = TRIGGER_NAME;
|
|
205
229
|
var PORTAL_NAME = "TooltipPortal";
|
|
206
|
-
var
|
|
207
|
-
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
230
|
+
var _createTooltipContext5 = createTooltipContext(PORTAL_NAME, {
|
|
231
|
+
forceMount: void 0
|
|
232
|
+
}),
|
|
233
|
+
_createTooltipContext6 = _slicedToArray(_createTooltipContext5, 2),
|
|
234
|
+
PortalProvider = _createTooltipContext6[0],
|
|
235
|
+
usePortalContext = _createTooltipContext6[1];
|
|
236
|
+
var TooltipPortal = function TooltipPortal(props) {
|
|
237
|
+
var __scopeTooltip = props.__scopeTooltip,
|
|
238
|
+
forceMount = props.forceMount,
|
|
239
|
+
children = props.children,
|
|
240
|
+
container = props.container;
|
|
241
|
+
var context = useTooltipContext(PORTAL_NAME, __scopeTooltip);
|
|
242
|
+
return /* @__PURE__ */jsx(PortalProvider, {
|
|
243
|
+
scope: __scopeTooltip,
|
|
244
|
+
forceMount: forceMount,
|
|
245
|
+
children: /* @__PURE__ */jsx(Presence, {
|
|
246
|
+
present: forceMount || context.open,
|
|
247
|
+
children: /* @__PURE__ */jsx(Portal$1, {
|
|
248
|
+
asChild: true,
|
|
249
|
+
container: container,
|
|
250
|
+
children: children
|
|
251
|
+
})
|
|
252
|
+
})
|
|
253
|
+
});
|
|
213
254
|
};
|
|
214
255
|
TooltipPortal.displayName = PORTAL_NAME;
|
|
215
256
|
var CONTENT_NAME = "TooltipContent";
|
|
216
|
-
var TooltipContent = forwardRef(
|
|
217
|
-
(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
257
|
+
var TooltipContent = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
258
|
+
var portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);
|
|
259
|
+
var _props$forceMount = props.forceMount,
|
|
260
|
+
forceMount = _props$forceMount === void 0 ? portalContext.forceMount : _props$forceMount,
|
|
261
|
+
_props$side = props.side,
|
|
262
|
+
side = _props$side === void 0 ? "top" : _props$side,
|
|
263
|
+
contentProps = _objectWithoutProperties(props, _excluded2);
|
|
264
|
+
var context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
|
|
265
|
+
return /* @__PURE__ */jsx(Presence, {
|
|
266
|
+
present: forceMount || context.open,
|
|
267
|
+
children: context.disableHoverableContent ? /* @__PURE__ */jsx(TooltipContentImpl, _objectSpread2(_objectSpread2({
|
|
268
|
+
side: side
|
|
269
|
+
}, contentProps), {}, {
|
|
270
|
+
ref: forwardedRef
|
|
271
|
+
})) : /* @__PURE__ */jsx(TooltipContentHoverable, _objectSpread2(_objectSpread2({
|
|
272
|
+
side: side
|
|
273
|
+
}, contentProps), {}, {
|
|
274
|
+
ref: forwardedRef
|
|
275
|
+
}))
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
var TooltipContentHoverable = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
279
|
+
var context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
|
|
280
|
+
var providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);
|
|
281
|
+
var ref = useRef(null);
|
|
282
|
+
var composedRefs = useComposedRefs(forwardedRef, ref);
|
|
283
|
+
var _React$useState5 = useState(null),
|
|
284
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
285
|
+
pointerGraceArea = _React$useState6[0],
|
|
286
|
+
setPointerGraceArea = _React$useState6[1];
|
|
287
|
+
var trigger = context.trigger,
|
|
288
|
+
onClose = context.onClose;
|
|
289
|
+
var content = ref.current;
|
|
290
|
+
var onPointerInTransitChange = providerContext.onPointerInTransitChange;
|
|
291
|
+
var handleRemoveGraceArea = useCallback(function () {
|
|
234
292
|
setPointerGraceArea(null);
|
|
235
293
|
onPointerInTransitChange(false);
|
|
236
294
|
}, [onPointerInTransitChange]);
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
);
|
|
250
|
-
useEffect(()
|
|
251
|
-
return ()
|
|
295
|
+
var handleCreateGraceArea = useCallback(function (event, hoverTarget) {
|
|
296
|
+
var currentTarget = event.currentTarget;
|
|
297
|
+
var exitPoint = {
|
|
298
|
+
x: event.clientX,
|
|
299
|
+
y: event.clientY
|
|
300
|
+
};
|
|
301
|
+
var exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());
|
|
302
|
+
var paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);
|
|
303
|
+
var hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());
|
|
304
|
+
var graceArea = getHull([].concat(_toConsumableArray(paddedExitPoints), _toConsumableArray(hoverTargetPoints)));
|
|
305
|
+
setPointerGraceArea(graceArea);
|
|
306
|
+
onPointerInTransitChange(true);
|
|
307
|
+
}, [onPointerInTransitChange]);
|
|
308
|
+
useEffect(function () {
|
|
309
|
+
return function () {
|
|
310
|
+
return handleRemoveGraceArea();
|
|
311
|
+
};
|
|
252
312
|
}, [handleRemoveGraceArea]);
|
|
253
|
-
useEffect(()
|
|
313
|
+
useEffect(function () {
|
|
254
314
|
if (trigger && content) {
|
|
255
|
-
|
|
256
|
-
|
|
315
|
+
var handleTriggerLeave = function handleTriggerLeave(event) {
|
|
316
|
+
return handleCreateGraceArea(event, content);
|
|
317
|
+
};
|
|
318
|
+
var handleContentLeave = function handleContentLeave(event) {
|
|
319
|
+
return handleCreateGraceArea(event, trigger);
|
|
320
|
+
};
|
|
257
321
|
trigger.addEventListener("pointerleave", handleTriggerLeave);
|
|
258
322
|
content.addEventListener("pointerleave", handleContentLeave);
|
|
259
|
-
return ()
|
|
323
|
+
return function () {
|
|
260
324
|
trigger.removeEventListener("pointerleave", handleTriggerLeave);
|
|
261
325
|
content.removeEventListener("pointerleave", handleContentLeave);
|
|
262
326
|
};
|
|
263
327
|
}
|
|
264
328
|
}, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);
|
|
265
|
-
useEffect(()
|
|
329
|
+
useEffect(function () {
|
|
266
330
|
if (pointerGraceArea) {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
331
|
+
var handleTrackPointerGrace = function handleTrackPointerGrace(event) {
|
|
332
|
+
var target = event.target;
|
|
333
|
+
var pointerPosition = {
|
|
334
|
+
x: event.clientX,
|
|
335
|
+
y: event.clientY
|
|
336
|
+
};
|
|
337
|
+
var hasEnteredTarget = (trigger === null || trigger === void 0 ? void 0 : trigger.contains(target)) || (content === null || content === void 0 ? void 0 : content.contains(target));
|
|
338
|
+
var isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);
|
|
272
339
|
if (hasEnteredTarget) {
|
|
273
340
|
handleRemoveGraceArea();
|
|
274
341
|
} else if (isPointerOutsideGraceArea) {
|
|
@@ -277,95 +344,104 @@ var TooltipContentHoverable = forwardRef((props, forwardedRef) => {
|
|
|
277
344
|
}
|
|
278
345
|
};
|
|
279
346
|
document.addEventListener("pointermove", handleTrackPointerGrace);
|
|
280
|
-
return ()
|
|
347
|
+
return function () {
|
|
348
|
+
return document.removeEventListener("pointermove", handleTrackPointerGrace);
|
|
349
|
+
};
|
|
281
350
|
}
|
|
282
351
|
}, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);
|
|
283
|
-
return /* @__PURE__ */
|
|
352
|
+
return /* @__PURE__ */jsx(TooltipContentImpl, _objectSpread2(_objectSpread2({}, props), {}, {
|
|
353
|
+
ref: composedRefs
|
|
354
|
+
}));
|
|
355
|
+
});
|
|
356
|
+
var _createTooltipContext7 = createTooltipContext(TOOLTIP_NAME, {
|
|
357
|
+
isInside: false
|
|
358
|
+
}),
|
|
359
|
+
_createTooltipContext8 = _slicedToArray(_createTooltipContext7, 2),
|
|
360
|
+
VisuallyHiddenContentContextProvider = _createTooltipContext8[0],
|
|
361
|
+
useVisuallyHiddenContentContext = _createTooltipContext8[1];
|
|
362
|
+
var TooltipContentImpl = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
363
|
+
var __scopeTooltip = props.__scopeTooltip,
|
|
364
|
+
children = props.children,
|
|
365
|
+
ariaLabel = props["aria-label"],
|
|
366
|
+
onEscapeKeyDown = props.onEscapeKeyDown,
|
|
367
|
+
onPointerDownOutside = props.onPointerDownOutside,
|
|
368
|
+
contentProps = _objectWithoutProperties(props, _excluded3);
|
|
369
|
+
var context = useTooltipContext(CONTENT_NAME, __scopeTooltip);
|
|
370
|
+
var popperScope = usePopperScope(__scopeTooltip);
|
|
371
|
+
var onClose = context.onClose;
|
|
372
|
+
useEffect(function () {
|
|
373
|
+
document.addEventListener(TOOLTIP_OPEN, onClose);
|
|
374
|
+
return function () {
|
|
375
|
+
return document.removeEventListener(TOOLTIP_OPEN, onClose);
|
|
376
|
+
};
|
|
377
|
+
}, [onClose]);
|
|
378
|
+
useEffect(function () {
|
|
379
|
+
if (context.trigger) {
|
|
380
|
+
var handleScroll = function handleScroll(event) {
|
|
381
|
+
var target = event.target;
|
|
382
|
+
if (target !== null && target !== void 0 && target.contains(context.trigger)) onClose();
|
|
383
|
+
};
|
|
384
|
+
window.addEventListener("scroll", handleScroll, {
|
|
385
|
+
capture: true
|
|
386
|
+
});
|
|
387
|
+
return function () {
|
|
388
|
+
return window.removeEventListener("scroll", handleScroll, {
|
|
389
|
+
capture: true
|
|
390
|
+
});
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
}, [context.trigger, onClose]);
|
|
394
|
+
return /* @__PURE__ */jsx(DismissableLayer, {
|
|
395
|
+
asChild: true,
|
|
396
|
+
disableOutsidePointerEvents: false,
|
|
397
|
+
onEscapeKeyDown: onEscapeKeyDown,
|
|
398
|
+
onPointerDownOutside: onPointerDownOutside,
|
|
399
|
+
onFocusOutside: function onFocusOutside(event) {
|
|
400
|
+
return event.preventDefault();
|
|
401
|
+
},
|
|
402
|
+
onDismiss: onClose,
|
|
403
|
+
children: /* @__PURE__ */jsxs(Content, _objectSpread2(_objectSpread2(_objectSpread2({
|
|
404
|
+
"data-state": context.stateAttribute
|
|
405
|
+
}, popperScope), contentProps), {}, {
|
|
406
|
+
ref: forwardedRef,
|
|
407
|
+
style: _objectSpread2(_objectSpread2({}, contentProps.style), {
|
|
408
|
+
"--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)",
|
|
409
|
+
"--radix-tooltip-content-available-width": "var(--radix-popper-available-width)",
|
|
410
|
+
"--radix-tooltip-content-available-height": "var(--radix-popper-available-height)",
|
|
411
|
+
"--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
|
|
412
|
+
"--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
|
|
413
|
+
}),
|
|
414
|
+
children: [/* @__PURE__ */jsx(Slottable, {
|
|
415
|
+
children: children
|
|
416
|
+
}), /* @__PURE__ */jsx(VisuallyHiddenContentContextProvider, {
|
|
417
|
+
scope: __scopeTooltip,
|
|
418
|
+
isInside: true,
|
|
419
|
+
children: /* @__PURE__ */jsx(Root, {
|
|
420
|
+
id: context.contentId,
|
|
421
|
+
role: "tooltip",
|
|
422
|
+
children: ariaLabel || children
|
|
423
|
+
})
|
|
424
|
+
})]
|
|
425
|
+
}))
|
|
426
|
+
});
|
|
284
427
|
});
|
|
285
|
-
var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });
|
|
286
|
-
var TooltipContentImpl = forwardRef(
|
|
287
|
-
(props, forwardedRef) => {
|
|
288
|
-
const {
|
|
289
|
-
__scopeTooltip,
|
|
290
|
-
children,
|
|
291
|
-
"aria-label": ariaLabel,
|
|
292
|
-
onEscapeKeyDown,
|
|
293
|
-
onPointerDownOutside,
|
|
294
|
-
...contentProps
|
|
295
|
-
} = props;
|
|
296
|
-
const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);
|
|
297
|
-
const popperScope = usePopperScope(__scopeTooltip);
|
|
298
|
-
const { onClose } = context;
|
|
299
|
-
useEffect(() => {
|
|
300
|
-
document.addEventListener(TOOLTIP_OPEN, onClose);
|
|
301
|
-
return () => document.removeEventListener(TOOLTIP_OPEN, onClose);
|
|
302
|
-
}, [onClose]);
|
|
303
|
-
useEffect(() => {
|
|
304
|
-
if (context.trigger) {
|
|
305
|
-
const handleScroll = (event) => {
|
|
306
|
-
const target = event.target;
|
|
307
|
-
if (target?.contains(context.trigger)) onClose();
|
|
308
|
-
};
|
|
309
|
-
window.addEventListener("scroll", handleScroll, { capture: true });
|
|
310
|
-
return () => window.removeEventListener("scroll", handleScroll, { capture: true });
|
|
311
|
-
}
|
|
312
|
-
}, [context.trigger, onClose]);
|
|
313
|
-
return /* @__PURE__ */ jsx(
|
|
314
|
-
DismissableLayer,
|
|
315
|
-
{
|
|
316
|
-
asChild: true,
|
|
317
|
-
disableOutsidePointerEvents: false,
|
|
318
|
-
onEscapeKeyDown,
|
|
319
|
-
onPointerDownOutside,
|
|
320
|
-
onFocusOutside: (event) => event.preventDefault(),
|
|
321
|
-
onDismiss: onClose,
|
|
322
|
-
children: /* @__PURE__ */ jsxs(
|
|
323
|
-
Content,
|
|
324
|
-
{
|
|
325
|
-
"data-state": context.stateAttribute,
|
|
326
|
-
...popperScope,
|
|
327
|
-
...contentProps,
|
|
328
|
-
ref: forwardedRef,
|
|
329
|
-
style: {
|
|
330
|
-
...contentProps.style,
|
|
331
|
-
// re-namespace exposed content custom properties
|
|
332
|
-
...{
|
|
333
|
-
"--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)",
|
|
334
|
-
"--radix-tooltip-content-available-width": "var(--radix-popper-available-width)",
|
|
335
|
-
"--radix-tooltip-content-available-height": "var(--radix-popper-available-height)",
|
|
336
|
-
"--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
|
|
337
|
-
"--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
|
|
338
|
-
}
|
|
339
|
-
},
|
|
340
|
-
children: [
|
|
341
|
-
/* @__PURE__ */ jsx(Slottable, { children }),
|
|
342
|
-
/* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(Root, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) })
|
|
343
|
-
]
|
|
344
|
-
}
|
|
345
|
-
)
|
|
346
|
-
}
|
|
347
|
-
);
|
|
348
|
-
}
|
|
349
|
-
);
|
|
350
428
|
TooltipContent.displayName = CONTENT_NAME;
|
|
351
429
|
var ARROW_NAME = "TooltipArrow";
|
|
352
|
-
var TooltipArrow = forwardRef(
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
}
|
|
362
|
-
);
|
|
430
|
+
var TooltipArrow = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
431
|
+
var __scopeTooltip = props.__scopeTooltip,
|
|
432
|
+
arrowProps = _objectWithoutProperties(props, _excluded4);
|
|
433
|
+
var popperScope = usePopperScope(__scopeTooltip);
|
|
434
|
+
var visuallyHiddenContentContext = useVisuallyHiddenContentContext(ARROW_NAME, __scopeTooltip);
|
|
435
|
+
return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */jsx(Arrow, _objectSpread2(_objectSpread2(_objectSpread2({}, popperScope), arrowProps), {}, {
|
|
436
|
+
ref: forwardedRef
|
|
437
|
+
}));
|
|
438
|
+
});
|
|
363
439
|
TooltipArrow.displayName = ARROW_NAME;
|
|
364
440
|
function getExitSideFromRect(point, rect) {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
441
|
+
var top = Math.abs(rect.top - point.y);
|
|
442
|
+
var bottom = Math.abs(rect.bottom - point.y);
|
|
443
|
+
var right = Math.abs(rect.right - point.x);
|
|
444
|
+
var left = Math.abs(rect.left - point.x);
|
|
369
445
|
switch (Math.min(top, bottom, right, left)) {
|
|
370
446
|
case left:
|
|
371
447
|
return "left";
|
|
@@ -379,93 +455,111 @@ function getExitSideFromRect(point, rect) {
|
|
|
379
455
|
throw new Error("unreachable");
|
|
380
456
|
}
|
|
381
457
|
}
|
|
382
|
-
function getPaddedExitPoints(exitPoint, exitSide
|
|
383
|
-
|
|
458
|
+
function getPaddedExitPoints(exitPoint, exitSide) {
|
|
459
|
+
var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5;
|
|
460
|
+
var paddedExitPoints = [];
|
|
384
461
|
switch (exitSide) {
|
|
385
462
|
case "top":
|
|
386
|
-
paddedExitPoints.push(
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
463
|
+
paddedExitPoints.push({
|
|
464
|
+
x: exitPoint.x - padding,
|
|
465
|
+
y: exitPoint.y + padding
|
|
466
|
+
}, {
|
|
467
|
+
x: exitPoint.x + padding,
|
|
468
|
+
y: exitPoint.y + padding
|
|
469
|
+
});
|
|
390
470
|
break;
|
|
391
471
|
case "bottom":
|
|
392
|
-
paddedExitPoints.push(
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
472
|
+
paddedExitPoints.push({
|
|
473
|
+
x: exitPoint.x - padding,
|
|
474
|
+
y: exitPoint.y - padding
|
|
475
|
+
}, {
|
|
476
|
+
x: exitPoint.x + padding,
|
|
477
|
+
y: exitPoint.y - padding
|
|
478
|
+
});
|
|
396
479
|
break;
|
|
397
480
|
case "left":
|
|
398
|
-
paddedExitPoints.push(
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
481
|
+
paddedExitPoints.push({
|
|
482
|
+
x: exitPoint.x + padding,
|
|
483
|
+
y: exitPoint.y - padding
|
|
484
|
+
}, {
|
|
485
|
+
x: exitPoint.x + padding,
|
|
486
|
+
y: exitPoint.y + padding
|
|
487
|
+
});
|
|
402
488
|
break;
|
|
403
489
|
case "right":
|
|
404
|
-
paddedExitPoints.push(
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
490
|
+
paddedExitPoints.push({
|
|
491
|
+
x: exitPoint.x - padding,
|
|
492
|
+
y: exitPoint.y - padding
|
|
493
|
+
}, {
|
|
494
|
+
x: exitPoint.x - padding,
|
|
495
|
+
y: exitPoint.y + padding
|
|
496
|
+
});
|
|
408
497
|
break;
|
|
409
498
|
}
|
|
410
499
|
return paddedExitPoints;
|
|
411
500
|
}
|
|
412
501
|
function getPointsFromRect(rect) {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
502
|
+
var top = rect.top,
|
|
503
|
+
right = rect.right,
|
|
504
|
+
bottom = rect.bottom,
|
|
505
|
+
left = rect.left;
|
|
506
|
+
return [{
|
|
507
|
+
x: left,
|
|
508
|
+
y: top
|
|
509
|
+
}, {
|
|
510
|
+
x: right,
|
|
511
|
+
y: top
|
|
512
|
+
}, {
|
|
513
|
+
x: right,
|
|
514
|
+
y: bottom
|
|
515
|
+
}, {
|
|
516
|
+
x: left,
|
|
517
|
+
y: bottom
|
|
518
|
+
}];
|
|
420
519
|
}
|
|
421
520
|
function isPointInPolygon(point, polygon) {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
521
|
+
var x = point.x,
|
|
522
|
+
y = point.y;
|
|
523
|
+
var inside = false;
|
|
524
|
+
for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
|
|
525
|
+
var xi = polygon[i].x;
|
|
526
|
+
var yi = polygon[i].y;
|
|
527
|
+
var xj = polygon[j].x;
|
|
528
|
+
var yj = polygon[j].y;
|
|
529
|
+
var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
|
|
430
530
|
if (intersect) inside = !inside;
|
|
431
531
|
}
|
|
432
532
|
return inside;
|
|
433
533
|
}
|
|
434
534
|
function getHull(points) {
|
|
435
|
-
|
|
436
|
-
newPoints.sort((a, b)
|
|
437
|
-
if (a.x < b.x) return -1;
|
|
438
|
-
else if (a.x > b.x) return 1;
|
|
439
|
-
else if (a.y < b.y) return -1;
|
|
440
|
-
else if (a.y > b.y) return 1;
|
|
441
|
-
else return 0;
|
|
535
|
+
var newPoints = points.slice();
|
|
536
|
+
newPoints.sort(function (a, b) {
|
|
537
|
+
if (a.x < b.x) return -1;else if (a.x > b.x) return 1;else if (a.y < b.y) return -1;else if (a.y > b.y) return 1;else return 0;
|
|
442
538
|
});
|
|
443
539
|
return getHullPresorted(newPoints);
|
|
444
540
|
}
|
|
445
541
|
function getHullPresorted(points) {
|
|
446
542
|
if (points.length <= 1) return points.slice();
|
|
447
|
-
|
|
448
|
-
for (
|
|
449
|
-
|
|
543
|
+
var upperHull = [];
|
|
544
|
+
for (var i = 0; i < points.length; i++) {
|
|
545
|
+
var p = points[i];
|
|
450
546
|
while (upperHull.length >= 2) {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();
|
|
454
|
-
else break;
|
|
547
|
+
var q = upperHull[upperHull.length - 1];
|
|
548
|
+
var r = upperHull[upperHull.length - 2];
|
|
549
|
+
if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();else break;
|
|
455
550
|
}
|
|
456
551
|
upperHull.push(p);
|
|
457
552
|
}
|
|
458
553
|
upperHull.pop();
|
|
459
|
-
|
|
460
|
-
for (
|
|
461
|
-
|
|
554
|
+
var lowerHull = [];
|
|
555
|
+
for (var _i = points.length - 1; _i >= 0; _i--) {
|
|
556
|
+
var _p = points[_i];
|
|
462
557
|
while (lowerHull.length >= 2) {
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
if ((
|
|
466
|
-
else break;
|
|
558
|
+
var _q = lowerHull[lowerHull.length - 1];
|
|
559
|
+
var _r = lowerHull[lowerHull.length - 2];
|
|
560
|
+
if ((_q.x - _r.x) * (_p.y - _r.y) >= (_q.y - _r.y) * (_p.x - _r.x)) lowerHull.pop();else break;
|
|
467
561
|
}
|
|
468
|
-
lowerHull.push(
|
|
562
|
+
lowerHull.push(_p);
|
|
469
563
|
}
|
|
470
564
|
lowerHull.pop();
|
|
471
565
|
if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {
|