@entur/tooltip 5.2.13-beta.9 → 5.2.14
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/Popover.d.ts +1 -2
- package/dist/Tooltip.d.ts +1 -2
- package/dist/index.d.ts +1 -2
- package/dist/styles.css +925 -991
- package/dist/tooltip.cjs.js +308 -0
- package/dist/tooltip.cjs.js.map +1 -0
- package/dist/tooltip.esm.js +248 -278
- package/dist/tooltip.esm.js.map +1 -1
- package/package.json +26 -16
- package/dist/index.js +0 -8
- package/dist/tooltip.cjs.development.js +0 -347
- package/dist/tooltip.cjs.development.js.map +0 -1
- package/dist/tooltip.cjs.production.min.js +0 -2
- package/dist/tooltip.cjs.production.min.js.map +0 -1
package/dist/tooltip.esm.js
CHANGED
|
@@ -1,329 +1,294 @@
|
|
|
1
|
-
import { useRandomId,
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
function _extends() {
|
|
12
|
-
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
13
|
-
for (var e = 1; e < arguments.length; e++) {
|
|
14
|
-
var t = arguments[e];
|
|
15
|
-
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
16
|
-
}
|
|
17
|
-
return n;
|
|
18
|
-
}, _extends.apply(null, arguments);
|
|
19
|
-
}
|
|
20
|
-
function _objectWithoutPropertiesLoose(r, e) {
|
|
21
|
-
if (null == r) return {};
|
|
22
|
-
var t = {};
|
|
23
|
-
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
24
|
-
if (-1 !== e.indexOf(n)) continue;
|
|
25
|
-
t[n] = r[n];
|
|
26
|
-
}
|
|
27
|
-
return t;
|
|
28
|
-
}
|
|
29
|
-
|
|
1
|
+
import { useRandomId, mergeRefs, useOnClickOutside, warnAboutMissingStyles } from "@entur/utils";
|
|
2
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
3
|
+
import React, { useState, useRef, useEffect, cloneElement, createContext, useContext } from "react";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
import { useFloating, offset, flip, shift, arrow, limitShift, autoUpdate } from "@floating-ui/react";
|
|
6
|
+
import { CloseIcon } from "@entur/icons";
|
|
7
|
+
import { IconButton } from "@entur/button";
|
|
8
|
+
import { space, borderRadiuses } from "@entur/tokens";
|
|
9
|
+
import { useFloating as useFloating$1, offset as offset$1, flip as flip$1, shift as shift$1, limitShift as limitShift$1, autoUpdate as autoUpdate$1 } from "@floating-ui/react-dom";
|
|
10
|
+
import { Contrast } from "@entur/layout";
|
|
30
11
|
function standardisePlacement(placement) {
|
|
31
12
|
switch (placement) {
|
|
32
|
-
case
|
|
33
|
-
return
|
|
34
|
-
case
|
|
35
|
-
return
|
|
36
|
-
case
|
|
37
|
-
return
|
|
38
|
-
case
|
|
39
|
-
return
|
|
13
|
+
case "top-left":
|
|
14
|
+
return "top-start";
|
|
15
|
+
case "top-right":
|
|
16
|
+
return "top-end";
|
|
17
|
+
case "bottom-left":
|
|
18
|
+
return "bottom-start";
|
|
19
|
+
case "bottom-right":
|
|
20
|
+
return "bottom-end";
|
|
40
21
|
default:
|
|
41
22
|
return placement;
|
|
42
23
|
}
|
|
43
24
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
open: showTooltip,
|
|
85
|
-
middleware: [offset(space.extraSmall), flip(), shift({
|
|
86
|
-
padding: space.extraSmall,
|
|
87
|
-
limiter: limitShift({
|
|
88
|
-
offset: 8
|
|
89
|
-
})
|
|
90
|
-
}), arrow({
|
|
25
|
+
const error = "error";
|
|
26
|
+
const Tooltip = ({
|
|
27
|
+
placement,
|
|
28
|
+
content,
|
|
29
|
+
children,
|
|
30
|
+
className,
|
|
31
|
+
isOpen,
|
|
32
|
+
onClickCloseButton = () => void 0,
|
|
33
|
+
disableHoverListener = false,
|
|
34
|
+
disableFocusListener = false,
|
|
35
|
+
disableKeyboardListener = true,
|
|
36
|
+
disableClickListner = true,
|
|
37
|
+
showCloseButton = true,
|
|
38
|
+
variant,
|
|
39
|
+
hoverDelay,
|
|
40
|
+
style,
|
|
41
|
+
...rest
|
|
42
|
+
}) => {
|
|
43
|
+
const [showTooltip, setShowTooltip] = useState(isOpen ?? false);
|
|
44
|
+
const tooltipArrowRef = useRef(null);
|
|
45
|
+
const tooltipId = useRandomId("eds-tooltip");
|
|
46
|
+
const hoverOpenTimer = useRef();
|
|
47
|
+
const hoverCloseTimer = useRef();
|
|
48
|
+
const isControlled = isOpen !== void 0;
|
|
49
|
+
const {
|
|
50
|
+
refs,
|
|
51
|
+
floatingStyles,
|
|
52
|
+
middlewareData,
|
|
53
|
+
placement: actualPlacement,
|
|
54
|
+
isPositioned,
|
|
55
|
+
update,
|
|
56
|
+
elements
|
|
57
|
+
} = useFloating({
|
|
58
|
+
placement: standardisePlacement(placement),
|
|
59
|
+
open: showTooltip,
|
|
60
|
+
middleware: [
|
|
61
|
+
offset(space.extraSmall),
|
|
62
|
+
flip(),
|
|
63
|
+
shift({ padding: space.extraSmall, limiter: limitShift({ offset: 8 }) }),
|
|
64
|
+
arrow({
|
|
91
65
|
element: tooltipArrowRef,
|
|
92
66
|
padding: borderRadiuses.medium
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
middlewareData = _useFloating.middlewareData,
|
|
98
|
-
actualPlacement = _useFloating.placement,
|
|
99
|
-
isPositioned = _useFloating.isPositioned,
|
|
100
|
-
update = _useFloating.update,
|
|
101
|
-
elements = _useFloating.elements;
|
|
102
|
-
// Since we use CSS instead of conditional rendering when hiding tooltip
|
|
103
|
-
// we can't use the whileElementsMounted option and need to handle
|
|
104
|
-
// cleanup ourselves. See https://floating-ui.com/docs/autoupdate
|
|
105
|
-
useEffect(function () {
|
|
67
|
+
})
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
useEffect(() => {
|
|
106
71
|
if (showTooltip && elements.reference && elements.floating) {
|
|
107
|
-
|
|
72
|
+
const cleanup = autoUpdate(elements.reference, elements.floating, update);
|
|
108
73
|
return cleanup;
|
|
109
74
|
}
|
|
110
75
|
}, [showTooltip, elements, update]);
|
|
111
|
-
|
|
112
|
-
var _hoverDelay$enter;
|
|
76
|
+
const onMouseEnter = () => {
|
|
113
77
|
if (isControlled) return;
|
|
114
78
|
clearTimeout(hoverCloseTimer.current);
|
|
115
|
-
hoverOpenTimer.current = setTimeout(
|
|
79
|
+
hoverOpenTimer.current = setTimeout(() => {
|
|
116
80
|
setShowTooltip(true);
|
|
117
|
-
},
|
|
81
|
+
}, hoverDelay?.enter ?? 150);
|
|
118
82
|
};
|
|
119
|
-
|
|
120
|
-
var _hoverDelay$leave;
|
|
83
|
+
const onMouseLeave = () => {
|
|
121
84
|
if (isControlled) return;
|
|
122
85
|
clearTimeout(hoverOpenTimer.current);
|
|
123
|
-
hoverCloseTimer.current = setTimeout(
|
|
86
|
+
hoverCloseTimer.current = setTimeout(() => {
|
|
124
87
|
setShowTooltip(false);
|
|
125
|
-
},
|
|
88
|
+
}, hoverDelay?.leave ?? 300);
|
|
126
89
|
};
|
|
127
|
-
React.useEffect(
|
|
128
|
-
return
|
|
90
|
+
React.useEffect(() => {
|
|
91
|
+
return () => {
|
|
129
92
|
clearTimeout(hoverOpenTimer.current);
|
|
130
93
|
clearTimeout(hoverCloseTimer.current);
|
|
131
94
|
};
|
|
132
95
|
}, []);
|
|
133
|
-
React.useEffect(
|
|
134
|
-
if (isOpen !==
|
|
96
|
+
React.useEffect(() => {
|
|
97
|
+
if (isOpen !== void 0) setShowTooltip(isOpen);
|
|
135
98
|
}, [isOpen]);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
onFocus:
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (e.key === 'Escape') setShowTooltip(false);
|
|
153
|
-
if (e.key === ' ' || e.key === 'Enter') {
|
|
154
|
-
e.preventDefault();
|
|
155
|
-
setShowTooltip(!showTooltip);
|
|
99
|
+
const referenceListenerProps = {
|
|
100
|
+
"aria-describedby": showTooltip ? tooltipId : void 0,
|
|
101
|
+
// focusListner
|
|
102
|
+
...!disableFocusListener && !isControlled && { onFocus: () => setShowTooltip(true) },
|
|
103
|
+
...!disableFocusListener && !isControlled && { onBlur: () => setShowTooltip(false) },
|
|
104
|
+
// hoverListner
|
|
105
|
+
...!disableHoverListener && !isControlled && { onMouseEnter },
|
|
106
|
+
...!disableHoverListener && !isControlled && { onMouseLeave },
|
|
107
|
+
// keyboardListner
|
|
108
|
+
...!disableKeyboardListener && !isControlled && {
|
|
109
|
+
onKeyDown: (e) => {
|
|
110
|
+
if (e.key === "Escape") setShowTooltip(false);
|
|
111
|
+
if (e.key === " " || e.key === "Enter") {
|
|
112
|
+
e.preventDefault();
|
|
113
|
+
setShowTooltip(!showTooltip);
|
|
114
|
+
}
|
|
156
115
|
}
|
|
157
|
-
}
|
|
158
|
-
}, !disableClickListner && !isControlled && {
|
|
159
|
-
onClick: function onClick() {
|
|
160
|
-
return setShowTooltip(!showTooltip);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
var displayTooltipStyle = (!isControlled || isPositioned) && showTooltip && content ? undefined : 'none';
|
|
164
|
-
return React.createElement(React.Fragment, null, cloneElement(children, _extends({
|
|
165
|
-
ref: refs.setReference
|
|
166
|
-
}, referenceListenerProps)), React.createElement("div", _extends({
|
|
167
|
-
className: classNames(className, 'eds-tooltip', {
|
|
168
|
-
'eds-tooltip--negative': variant === error || variant === 'negative'
|
|
169
|
-
}),
|
|
170
|
-
ref: refs.setFloating,
|
|
171
|
-
style: _extends({}, floatingStyles, {
|
|
172
|
-
display: displayTooltipStyle
|
|
173
|
-
}, style),
|
|
174
|
-
role: "tooltip",
|
|
175
|
-
id: tooltipId,
|
|
176
|
-
onMouseEnter: !disableHoverListener ? onMouseEnter : undefined,
|
|
177
|
-
onMouseLeave: !disableHoverListener ? onMouseLeave : undefined
|
|
178
|
-
}, rest), content, isOpen && showCloseButton && React.createElement(IconButton, {
|
|
179
|
-
className: "eds-tooltip__close-button",
|
|
180
|
-
onClick: function onClick() {
|
|
181
|
-
setShowTooltip(false);
|
|
182
|
-
onClickCloseButton();
|
|
183
116
|
},
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
"aria-hidden": "true"
|
|
188
|
-
})), React.createElement("div", {
|
|
189
|
-
className: "eds-tooltip__arrow--" + (actualPlacement == null || (_actualPlacement$spli = actualPlacement.split('-')) == null ? void 0 : _actualPlacement$spli[0]),
|
|
190
|
-
ref: tooltipArrowRef,
|
|
191
|
-
style: {
|
|
192
|
-
left: (_middlewareData$arrow = middlewareData.arrow) == null ? void 0 : _middlewareData$arrow.x,
|
|
193
|
-
top: (_middlewareData$arrow2 = middlewareData.arrow) == null ? void 0 : _middlewareData$arrow2.y
|
|
117
|
+
// clickListner
|
|
118
|
+
...!disableClickListner && !isControlled && {
|
|
119
|
+
onClick: () => setShowTooltip(!showTooltip)
|
|
194
120
|
}
|
|
195
|
-
}
|
|
121
|
+
};
|
|
122
|
+
const displayTooltipStyle = (!isControlled || isPositioned) && showTooltip && content ? void 0 : "none";
|
|
123
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
124
|
+
cloneElement(children, {
|
|
125
|
+
ref: refs.setReference,
|
|
126
|
+
...referenceListenerProps
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ jsxs(
|
|
129
|
+
"div",
|
|
130
|
+
{
|
|
131
|
+
className: classNames(className, "eds-tooltip", {
|
|
132
|
+
"eds-tooltip--negative": variant === error || variant === "negative"
|
|
133
|
+
}),
|
|
134
|
+
ref: refs.setFloating,
|
|
135
|
+
style: {
|
|
136
|
+
...floatingStyles,
|
|
137
|
+
display: displayTooltipStyle,
|
|
138
|
+
...style
|
|
139
|
+
},
|
|
140
|
+
role: "tooltip",
|
|
141
|
+
id: tooltipId,
|
|
142
|
+
onMouseEnter: !disableHoverListener ? onMouseEnter : void 0,
|
|
143
|
+
onMouseLeave: !disableHoverListener ? onMouseLeave : void 0,
|
|
144
|
+
...rest,
|
|
145
|
+
children: [
|
|
146
|
+
content,
|
|
147
|
+
isOpen && showCloseButton && /* @__PURE__ */ jsx(
|
|
148
|
+
IconButton,
|
|
149
|
+
{
|
|
150
|
+
className: "eds-tooltip__close-button",
|
|
151
|
+
onClick: () => {
|
|
152
|
+
setShowTooltip(false);
|
|
153
|
+
onClickCloseButton();
|
|
154
|
+
},
|
|
155
|
+
type: "button",
|
|
156
|
+
"aria-label": "Lukk tooltip",
|
|
157
|
+
children: /* @__PURE__ */ jsx(CloseIcon, { "aria-hidden": "true" })
|
|
158
|
+
}
|
|
159
|
+
),
|
|
160
|
+
/* @__PURE__ */ jsx(
|
|
161
|
+
"div",
|
|
162
|
+
{
|
|
163
|
+
className: `eds-tooltip__arrow--${actualPlacement?.split("-")?.[0]}`,
|
|
164
|
+
ref: tooltipArrowRef,
|
|
165
|
+
style: {
|
|
166
|
+
left: middlewareData.arrow?.x,
|
|
167
|
+
top: middlewareData.arrow?.y
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
)
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
] });
|
|
196
175
|
};
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
176
|
+
const Popover = ({
|
|
177
|
+
children,
|
|
178
|
+
placement = "bottom-start",
|
|
179
|
+
showPopover: controlledState,
|
|
180
|
+
setShowPopover: setControlledState
|
|
181
|
+
}) => {
|
|
182
|
+
const [showPopover, setShowPopover, controlled] = useCustomState(
|
|
183
|
+
controlledState,
|
|
184
|
+
setControlledState
|
|
185
|
+
);
|
|
186
|
+
const { refs, floatingStyles, elements, update } = useFloating$1({
|
|
187
|
+
placement: standardisePlacement(placement),
|
|
188
|
+
middleware: [
|
|
189
|
+
offset$1(space.extraSmall),
|
|
190
|
+
flip$1(),
|
|
191
|
+
shift$1({
|
|
213
192
|
padding: space.extraSmall,
|
|
214
|
-
limiter: limitShift$1({
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
refs = _useFloating.refs,
|
|
220
|
-
floatingStyles = _useFloating.floatingStyles,
|
|
221
|
-
elements = _useFloating.elements,
|
|
222
|
-
update = _useFloating.update;
|
|
223
|
-
// Since we use CSS instead of conditional rendering when hiding dropdownlist
|
|
224
|
-
// we can't use the whileElementsMounted option and need to handle
|
|
225
|
-
// cleanup ourselves. See https://floating-ui.com/docs/autoupdate
|
|
226
|
-
useEffect(function () {
|
|
193
|
+
limiter: limitShift$1({ offset: 8 })
|
|
194
|
+
})
|
|
195
|
+
]
|
|
196
|
+
});
|
|
197
|
+
useEffect(() => {
|
|
227
198
|
if (showPopover && elements.reference && elements.floating) {
|
|
228
|
-
|
|
199
|
+
const cleanup = autoUpdate$1(elements.reference, elements.floating, update);
|
|
229
200
|
return cleanup;
|
|
230
201
|
}
|
|
231
202
|
}, [showPopover, elements, update]);
|
|
232
|
-
useOnClickOutside(
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
203
|
+
useOnClickOutside(
|
|
204
|
+
[refs.floating, refs.reference],
|
|
205
|
+
() => setShowPopover(false)
|
|
206
|
+
);
|
|
207
|
+
const popoverTriggerProps = {
|
|
208
|
+
"aria-haspopup": "dialog",
|
|
209
|
+
"aria-expanded": showPopover,
|
|
238
210
|
ref: refs.setReference,
|
|
239
|
-
type:
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
return setShowPopover(function (prev) {
|
|
243
|
-
return !prev;
|
|
244
|
-
});
|
|
211
|
+
type: "button",
|
|
212
|
+
...!controlled && {
|
|
213
|
+
onClick: () => setShowPopover((prev) => !prev)
|
|
245
214
|
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
role:
|
|
249
|
-
|
|
250
|
-
|
|
215
|
+
};
|
|
216
|
+
const popoverContentProps = {
|
|
217
|
+
role: "dialog",
|
|
218
|
+
"aria-modal": false,
|
|
219
|
+
"aria-hidden": !showPopover,
|
|
251
220
|
ref: refs.setFloating,
|
|
252
|
-
style:
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
onKeyDown: function onKeyDown(event) {
|
|
256
|
-
if (event.key === 'Escape') setShowPopover(false);
|
|
221
|
+
style: { ...!showPopover && { display: "none" } },
|
|
222
|
+
onKeyDown: (event) => {
|
|
223
|
+
if (event.key === "Escape") setShowPopover(false);
|
|
257
224
|
},
|
|
258
|
-
onBlur:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
225
|
+
onBlur: (event) => {
|
|
226
|
+
const elementReceivingFocus = event.relatedTarget;
|
|
227
|
+
if (!elementReceivingFocus || elementReceivingFocus.getAttribute("tabindex") === "-1")
|
|
228
|
+
return;
|
|
229
|
+
const focusedElementIsPopover = elementContainsElement(
|
|
230
|
+
refs.floating.current,
|
|
231
|
+
elementReceivingFocus
|
|
232
|
+
);
|
|
233
|
+
const focusedElementIsTrigger = elementContainsElement(
|
|
234
|
+
refs.reference.current,
|
|
235
|
+
elementReceivingFocus
|
|
236
|
+
);
|
|
237
|
+
const popoverShouldClose = !focusedElementIsPopover && !focusedElementIsTrigger;
|
|
265
238
|
if (showPopover && popoverShouldClose) setShowPopover(false);
|
|
266
239
|
}
|
|
267
240
|
};
|
|
268
|
-
|
|
269
|
-
onClick:
|
|
270
|
-
|
|
271
|
-
},
|
|
272
|
-
type: 'button'
|
|
241
|
+
const closeButtonProps = {
|
|
242
|
+
onClick: () => setShowPopover(false),
|
|
243
|
+
type: "button"
|
|
273
244
|
};
|
|
274
|
-
|
|
275
|
-
showPopover
|
|
276
|
-
floatingStyles
|
|
277
|
-
popoverTriggerProps
|
|
278
|
-
popoverContentProps
|
|
279
|
-
closeButtonProps
|
|
245
|
+
const contextValue = {
|
|
246
|
+
showPopover,
|
|
247
|
+
floatingStyles,
|
|
248
|
+
popoverTriggerProps,
|
|
249
|
+
popoverContentProps,
|
|
250
|
+
closeButtonProps
|
|
280
251
|
};
|
|
281
|
-
return
|
|
282
|
-
value: contextValue
|
|
283
|
-
}, children);
|
|
252
|
+
return /* @__PURE__ */ jsx(PopoverContext.Provider, { value: contextValue, children });
|
|
284
253
|
};
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
popoverTriggerProps = _usePopoverContext.popoverTriggerProps;
|
|
289
|
-
var child = React.Children.only(children);
|
|
254
|
+
const PopoverTrigger = ({ children }) => {
|
|
255
|
+
const { popoverTriggerProps } = usePopoverContext();
|
|
256
|
+
const child = React.Children.only(children);
|
|
290
257
|
return cloneElement(child, popoverTriggerProps);
|
|
291
258
|
};
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return cloneElement(children,
|
|
259
|
+
const PopoverCloseButton = ({
|
|
260
|
+
children,
|
|
261
|
+
...rest
|
|
262
|
+
}) => {
|
|
263
|
+
const { closeButtonProps } = usePopoverContext();
|
|
264
|
+
return cloneElement(children, { ...closeButtonProps, ...rest });
|
|
298
265
|
};
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
ref: mergeRefs(popoverContentProps.ref, ref)
|
|
312
|
-
}), children);
|
|
266
|
+
const PopoverContent = React.forwardRef(({ children, className, style }, ref) => {
|
|
267
|
+
const { floatingStyles, popoverContentProps } = usePopoverContext();
|
|
268
|
+
return /* @__PURE__ */ jsx(
|
|
269
|
+
Contrast,
|
|
270
|
+
{
|
|
271
|
+
className: classNames(className, "eds-popover"),
|
|
272
|
+
...popoverContentProps,
|
|
273
|
+
style: { ...floatingStyles, ...popoverContentProps.style, ...style },
|
|
274
|
+
ref: mergeRefs(popoverContentProps.ref, ref),
|
|
275
|
+
children
|
|
276
|
+
}
|
|
277
|
+
);
|
|
313
278
|
});
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
279
|
+
const PopoverContext = createContext(
|
|
280
|
+
void 0
|
|
281
|
+
);
|
|
282
|
+
const usePopoverContext = () => {
|
|
283
|
+
const context = useContext(PopoverContext);
|
|
317
284
|
if (context == null) {
|
|
318
|
-
throw Error(
|
|
285
|
+
throw Error("usePopoverContext must be used within <Popover/>");
|
|
319
286
|
}
|
|
320
287
|
return context;
|
|
321
288
|
};
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
setInternalState = _React$useState[1];
|
|
326
|
-
var controlled = state !== undefined && setState !== undefined;
|
|
289
|
+
const useCustomState = (state, setState) => {
|
|
290
|
+
const [internalState, setInternalState] = React.useState(false);
|
|
291
|
+
const controlled = state !== void 0 && setState !== void 0;
|
|
327
292
|
if (controlled) return [state, setState, controlled];
|
|
328
293
|
return [internalState, setInternalState, controlled];
|
|
329
294
|
};
|
|
@@ -331,8 +296,13 @@ function elementContainsElement(parent, child) {
|
|
|
331
296
|
if (!parent) return false;
|
|
332
297
|
return parent === child || parent.contains(child);
|
|
333
298
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
299
|
+
warnAboutMissingStyles("tooltip");
|
|
300
|
+
export {
|
|
301
|
+
Popover,
|
|
302
|
+
PopoverCloseButton,
|
|
303
|
+
PopoverContent,
|
|
304
|
+
PopoverTrigger,
|
|
305
|
+
Tooltip,
|
|
306
|
+
standardisePlacement
|
|
307
|
+
};
|
|
338
308
|
//# sourceMappingURL=tooltip.esm.js.map
|