react-tooltip 5.5.2 → 5.7.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/README.md +2 -1
- package/dist/react-tooltip.cjs.js +2251 -1925
- package/dist/react-tooltip.cjs.min.js +3 -3
- package/dist/react-tooltip.d.ts +6 -1
- package/dist/react-tooltip.esm.js +2246 -1926
- package/dist/react-tooltip.esm.min.js +3 -3
- package/dist/react-tooltip.umd.js +2251 -1925
- package/dist/react-tooltip.umd.min.js +3 -3
- package/package.json +1 -1
|
@@ -1,2289 +1,2591 @@
|
|
|
1
1
|
import require$$0, { createContext, useState, useCallback, useMemo, useContext, useRef, useEffect } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
function getSide(placement) {
|
|
4
|
+
return placement.split('-')[0];
|
|
5
|
+
}
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
11
|
-
*
|
|
12
|
-
* This source code is licensed under the MIT license found in the
|
|
13
|
-
* LICENSE file in the root directory of this source tree.
|
|
14
|
-
*/
|
|
7
|
+
function getAlignment(placement) {
|
|
8
|
+
return placement.split('-')[1];
|
|
9
|
+
}
|
|
15
10
|
|
|
16
|
-
|
|
11
|
+
function getMainAxisFromPlacement(placement) {
|
|
12
|
+
return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';
|
|
13
|
+
}
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
function getLengthFromAxis(axis) {
|
|
16
|
+
return axis === 'y' ? 'height' : 'width';
|
|
17
|
+
}
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
function computeCoordsFromPlacement(_ref, placement, rtl) {
|
|
20
|
+
let {
|
|
21
|
+
reference,
|
|
22
|
+
floating
|
|
23
|
+
} = _ref;
|
|
24
|
+
const commonX = reference.x + reference.width / 2 - floating.width / 2;
|
|
25
|
+
const commonY = reference.y + reference.height / 2 - floating.height / 2;
|
|
26
|
+
const mainAxis = getMainAxisFromPlacement(placement);
|
|
27
|
+
const length = getLengthFromAxis(mainAxis);
|
|
28
|
+
const commonAlign = reference[length] / 2 - floating[length] / 2;
|
|
29
|
+
const side = getSide(placement);
|
|
30
|
+
const isVertical = mainAxis === 'x';
|
|
31
|
+
let coords;
|
|
22
32
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
exports.Fragment = 0xeacb;
|
|
31
|
-
var REACT_STRICT_MODE_TYPE = 0xeacc;
|
|
32
|
-
var REACT_PROFILER_TYPE = 0xead2;
|
|
33
|
-
var REACT_PROVIDER_TYPE = 0xeacd;
|
|
34
|
-
var REACT_CONTEXT_TYPE = 0xeace;
|
|
35
|
-
var REACT_FORWARD_REF_TYPE = 0xead0;
|
|
36
|
-
var REACT_SUSPENSE_TYPE = 0xead1;
|
|
37
|
-
var REACT_SUSPENSE_LIST_TYPE = 0xead8;
|
|
38
|
-
var REACT_MEMO_TYPE = 0xead3;
|
|
39
|
-
var REACT_LAZY_TYPE = 0xead4;
|
|
40
|
-
var REACT_BLOCK_TYPE = 0xead9;
|
|
41
|
-
var REACT_SERVER_BLOCK_TYPE = 0xeada;
|
|
42
|
-
var REACT_FUNDAMENTAL_TYPE = 0xead5;
|
|
43
|
-
var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
|
|
44
|
-
var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
|
|
33
|
+
switch (side) {
|
|
34
|
+
case 'top':
|
|
35
|
+
coords = {
|
|
36
|
+
x: commonX,
|
|
37
|
+
y: reference.y - floating.height
|
|
38
|
+
};
|
|
39
|
+
break;
|
|
45
40
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
REACT_PROFILER_TYPE = symbolFor('react.profiler');
|
|
53
|
-
REACT_PROVIDER_TYPE = symbolFor('react.provider');
|
|
54
|
-
REACT_CONTEXT_TYPE = symbolFor('react.context');
|
|
55
|
-
REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
|
|
56
|
-
REACT_SUSPENSE_TYPE = symbolFor('react.suspense');
|
|
57
|
-
REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
|
|
58
|
-
REACT_MEMO_TYPE = symbolFor('react.memo');
|
|
59
|
-
REACT_LAZY_TYPE = symbolFor('react.lazy');
|
|
60
|
-
REACT_BLOCK_TYPE = symbolFor('react.block');
|
|
61
|
-
REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
|
|
62
|
-
REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
|
|
63
|
-
symbolFor('react.scope');
|
|
64
|
-
symbolFor('react.opaque.id');
|
|
65
|
-
REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
|
|
66
|
-
symbolFor('react.offscreen');
|
|
67
|
-
REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
|
|
68
|
-
}
|
|
41
|
+
case 'bottom':
|
|
42
|
+
coords = {
|
|
43
|
+
x: commonX,
|
|
44
|
+
y: reference.y + reference.height
|
|
45
|
+
};
|
|
46
|
+
break;
|
|
69
47
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
48
|
+
case 'right':
|
|
49
|
+
coords = {
|
|
50
|
+
x: reference.x + reference.width,
|
|
51
|
+
y: commonY
|
|
52
|
+
};
|
|
53
|
+
break;
|
|
76
54
|
|
|
77
|
-
|
|
55
|
+
case 'left':
|
|
56
|
+
coords = {
|
|
57
|
+
x: reference.x - floating.width,
|
|
58
|
+
y: commonY
|
|
59
|
+
};
|
|
60
|
+
break;
|
|
78
61
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
62
|
+
default:
|
|
63
|
+
coords = {
|
|
64
|
+
x: reference.x,
|
|
65
|
+
y: reference.y
|
|
66
|
+
};
|
|
67
|
+
}
|
|
82
68
|
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
switch (getAlignment(placement)) {
|
|
70
|
+
case 'start':
|
|
71
|
+
coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
|
|
72
|
+
break;
|
|
85
73
|
|
|
86
|
-
|
|
74
|
+
case 'end':
|
|
75
|
+
coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
87
78
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
91
|
-
args[_key2 - 1] = arguments[_key2];
|
|
92
|
-
}
|
|
79
|
+
return coords;
|
|
80
|
+
}
|
|
93
81
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Computes the `x` and `y` coordinates that will place the floating element
|
|
84
|
+
* next to a reference element when it is given a certain positioning strategy.
|
|
85
|
+
*
|
|
86
|
+
* This export does not have any `platform` interface logic. You will need to
|
|
87
|
+
* write one for the platform you are using Floating UI with.
|
|
88
|
+
*/
|
|
97
89
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
const computePosition$1 = async (reference, floating, config) => {
|
|
91
|
+
const {
|
|
92
|
+
placement = 'bottom',
|
|
93
|
+
strategy = 'absolute',
|
|
94
|
+
middleware = [],
|
|
95
|
+
platform
|
|
96
|
+
} = config;
|
|
97
|
+
const validMiddleware = middleware.filter(Boolean);
|
|
98
|
+
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
|
|
104
99
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
100
|
+
{
|
|
101
|
+
if (platform == null) {
|
|
102
|
+
console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));
|
|
103
|
+
}
|
|
110
104
|
|
|
111
|
-
|
|
105
|
+
if (validMiddleware.filter(_ref => {
|
|
106
|
+
let {
|
|
107
|
+
name
|
|
108
|
+
} = _ref;
|
|
109
|
+
return name === 'autoPlacement' || name === 'flip';
|
|
110
|
+
}).length > 1) {
|
|
111
|
+
throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement` middleware', 'detected. This will lead to an infinite loop. Ensure only one of', 'either has been passed to the `middleware` array.'].join(' '));
|
|
112
|
+
}
|
|
112
113
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
if (!reference || !floating) {
|
|
115
|
+
console.error(['Floating UI: The reference and/or floating element was not defined', 'when `computePosition()` was called. Ensure that both elements have', 'been created and can be measured.'].join(' '));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
117
118
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
let rects = await platform.getElementRects({
|
|
120
|
+
reference,
|
|
121
|
+
floating,
|
|
122
|
+
strategy
|
|
123
|
+
});
|
|
124
|
+
let {
|
|
125
|
+
x,
|
|
126
|
+
y
|
|
127
|
+
} = computeCoordsFromPlacement(rects, placement, rtl);
|
|
128
|
+
let statefulPlacement = placement;
|
|
129
|
+
let middlewareData = {};
|
|
130
|
+
let resetCount = 0;
|
|
121
131
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
132
|
+
for (let i = 0; i < validMiddleware.length; i++) {
|
|
133
|
+
const {
|
|
134
|
+
name,
|
|
135
|
+
fn
|
|
136
|
+
} = validMiddleware[i];
|
|
137
|
+
const {
|
|
138
|
+
x: nextX,
|
|
139
|
+
y: nextY,
|
|
140
|
+
data,
|
|
141
|
+
reset
|
|
142
|
+
} = await fn({
|
|
143
|
+
x,
|
|
144
|
+
y,
|
|
145
|
+
initialPlacement: placement,
|
|
146
|
+
placement: statefulPlacement,
|
|
147
|
+
strategy,
|
|
148
|
+
middlewareData,
|
|
149
|
+
rects,
|
|
150
|
+
platform,
|
|
151
|
+
elements: {
|
|
152
|
+
reference,
|
|
153
|
+
floating
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
x = nextX != null ? nextX : x;
|
|
157
|
+
y = nextY != null ? nextY : y;
|
|
158
|
+
middlewareData = { ...middlewareData,
|
|
159
|
+
[name]: { ...middlewareData[name],
|
|
160
|
+
...data
|
|
161
|
+
}
|
|
162
|
+
};
|
|
125
163
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
164
|
+
{
|
|
165
|
+
if (resetCount > 50) {
|
|
166
|
+
console.warn(['Floating UI: The middleware lifecycle appears to be running in an', 'infinite loop. This is usually caused by a `reset` continually', 'being returned without a break condition.'].join(' '));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
129
169
|
|
|
130
|
-
|
|
170
|
+
if (reset && resetCount <= 50) {
|
|
171
|
+
resetCount++;
|
|
131
172
|
|
|
132
|
-
|
|
173
|
+
if (typeof reset === 'object') {
|
|
174
|
+
if (reset.placement) {
|
|
175
|
+
statefulPlacement = reset.placement;
|
|
176
|
+
}
|
|
133
177
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
178
|
+
if (reset.rects) {
|
|
179
|
+
rects = reset.rects === true ? await platform.getElementRects({
|
|
180
|
+
reference,
|
|
181
|
+
floating,
|
|
182
|
+
strategy
|
|
183
|
+
}) : reset.rects;
|
|
184
|
+
}
|
|
138
185
|
|
|
186
|
+
({
|
|
187
|
+
x,
|
|
188
|
+
y
|
|
189
|
+
} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
|
|
190
|
+
}
|
|
139
191
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
192
|
+
i = -1;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
143
196
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
197
|
+
return {
|
|
198
|
+
x,
|
|
199
|
+
y,
|
|
200
|
+
placement: statefulPlacement,
|
|
201
|
+
strategy,
|
|
202
|
+
middlewareData
|
|
203
|
+
};
|
|
204
|
+
};
|
|
149
205
|
|
|
150
|
-
|
|
151
|
-
|
|
206
|
+
function expandPaddingObject(padding) {
|
|
207
|
+
return {
|
|
208
|
+
top: 0,
|
|
209
|
+
right: 0,
|
|
210
|
+
bottom: 0,
|
|
211
|
+
left: 0,
|
|
212
|
+
...padding
|
|
213
|
+
};
|
|
214
|
+
}
|
|
152
215
|
|
|
216
|
+
function getSideObjectFromPadding(padding) {
|
|
217
|
+
return typeof padding !== 'number' ? expandPaddingObject(padding) : {
|
|
218
|
+
top: padding,
|
|
219
|
+
right: padding,
|
|
220
|
+
bottom: padding,
|
|
221
|
+
left: padding
|
|
222
|
+
};
|
|
223
|
+
}
|
|
153
224
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
225
|
+
function rectToClientRect(rect) {
|
|
226
|
+
return { ...rect,
|
|
227
|
+
top: rect.y,
|
|
228
|
+
left: rect.x,
|
|
229
|
+
right: rect.x + rect.width,
|
|
230
|
+
bottom: rect.y + rect.height
|
|
231
|
+
};
|
|
232
|
+
}
|
|
157
233
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
234
|
+
/**
|
|
235
|
+
* Resolves with an object of overflow side offsets that determine how much the
|
|
236
|
+
* element is overflowing a given clipping boundary.
|
|
237
|
+
* - positive = overflowing the boundary by that number of pixels
|
|
238
|
+
* - negative = how many pixels left before it will overflow
|
|
239
|
+
* - 0 = lies flush with the boundary
|
|
240
|
+
* @see https://floating-ui.com/docs/detectOverflow
|
|
241
|
+
*/
|
|
242
|
+
async function detectOverflow(middlewareArguments, options) {
|
|
243
|
+
var _await$platform$isEle;
|
|
161
244
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (/^index\./.test(fileName)) {
|
|
166
|
-
var match = path.match(BEFORE_SLASH_RE);
|
|
245
|
+
if (options === void 0) {
|
|
246
|
+
options = {};
|
|
247
|
+
}
|
|
167
248
|
|
|
168
|
-
|
|
169
|
-
|
|
249
|
+
const {
|
|
250
|
+
x,
|
|
251
|
+
y,
|
|
252
|
+
platform,
|
|
253
|
+
rects,
|
|
254
|
+
elements,
|
|
255
|
+
strategy
|
|
256
|
+
} = middlewareArguments;
|
|
257
|
+
const {
|
|
258
|
+
boundary = 'clippingAncestors',
|
|
259
|
+
rootBoundary = 'viewport',
|
|
260
|
+
elementContext = 'floating',
|
|
261
|
+
altBoundary = false,
|
|
262
|
+
padding = 0
|
|
263
|
+
} = options;
|
|
264
|
+
const paddingObject = getSideObjectFromPadding(padding);
|
|
265
|
+
const altContext = elementContext === 'floating' ? 'reference' : 'floating';
|
|
266
|
+
const element = elements[altBoundary ? altContext : elementContext];
|
|
267
|
+
const clippingClientRect = rectToClientRect(await platform.getClippingRect({
|
|
268
|
+
element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),
|
|
269
|
+
boundary,
|
|
270
|
+
rootBoundary,
|
|
271
|
+
strategy
|
|
272
|
+
}));
|
|
273
|
+
const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
|
|
274
|
+
rect: elementContext === 'floating' ? { ...rects.floating,
|
|
275
|
+
x,
|
|
276
|
+
y
|
|
277
|
+
} : rects.reference,
|
|
278
|
+
offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),
|
|
279
|
+
strategy
|
|
280
|
+
}) : rects[elementContext]);
|
|
281
|
+
return {
|
|
282
|
+
top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
|
|
283
|
+
bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
|
|
284
|
+
left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
|
|
285
|
+
right: elementClientRect.right - clippingClientRect.right + paddingObject.right
|
|
286
|
+
};
|
|
287
|
+
}
|
|
170
288
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
fileName = folderName + '/' + fileName;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
289
|
+
const min$1 = Math.min;
|
|
290
|
+
const max$1 = Math.max;
|
|
178
291
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
292
|
+
function within(min$1$1, value, max$1$1) {
|
|
293
|
+
return max$1(min$1$1, min$1(value, max$1$1));
|
|
294
|
+
}
|
|
183
295
|
|
|
184
|
-
|
|
185
|
-
|
|
296
|
+
/**
|
|
297
|
+
* Positions an inner element of the floating element such that it is centered
|
|
298
|
+
* to the reference element.
|
|
299
|
+
* @see https://floating-ui.com/docs/arrow
|
|
300
|
+
*/
|
|
301
|
+
const arrow = options => ({
|
|
302
|
+
name: 'arrow',
|
|
303
|
+
options,
|
|
186
304
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
305
|
+
async fn(middlewareArguments) {
|
|
306
|
+
// Since `element` is required, we don't Partial<> the type
|
|
307
|
+
const {
|
|
308
|
+
element,
|
|
309
|
+
padding = 0
|
|
310
|
+
} = options != null ? options : {};
|
|
311
|
+
const {
|
|
312
|
+
x,
|
|
313
|
+
y,
|
|
314
|
+
placement,
|
|
315
|
+
rects,
|
|
316
|
+
platform
|
|
317
|
+
} = middlewareArguments;
|
|
191
318
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
319
|
+
if (element == null) {
|
|
320
|
+
{
|
|
321
|
+
console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');
|
|
322
|
+
}
|
|
196
323
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
// Host root, text node or just invalid type.
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
324
|
+
return {};
|
|
325
|
+
}
|
|
202
326
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
327
|
+
const paddingObject = getSideObjectFromPadding(padding);
|
|
328
|
+
const coords = {
|
|
329
|
+
x,
|
|
330
|
+
y
|
|
331
|
+
};
|
|
332
|
+
const axis = getMainAxisFromPlacement(placement);
|
|
333
|
+
const alignment = getAlignment(placement);
|
|
334
|
+
const length = getLengthFromAxis(axis);
|
|
335
|
+
const arrowDimensions = await platform.getDimensions(element);
|
|
336
|
+
const minProp = axis === 'y' ? 'top' : 'left';
|
|
337
|
+
const maxProp = axis === 'y' ? 'bottom' : 'right';
|
|
338
|
+
const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
|
|
339
|
+
const startDiff = coords[axis] - rects.reference[axis];
|
|
340
|
+
const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
|
|
341
|
+
let clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
|
|
208
342
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
343
|
+
if (clientSize === 0) {
|
|
344
|
+
clientSize = rects.floating[length];
|
|
345
|
+
}
|
|
212
346
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
347
|
+
const centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the floating element if the center
|
|
348
|
+
// point is outside the floating element's bounds
|
|
216
349
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
350
|
+
const min = paddingObject[minProp];
|
|
351
|
+
const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];
|
|
352
|
+
const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
|
|
353
|
+
const offset = within(min, center, max); // Make sure that arrow points at the reference
|
|
220
354
|
|
|
221
|
-
|
|
222
|
-
|
|
355
|
+
const alignmentPadding = alignment === 'start' ? paddingObject[minProp] : paddingObject[maxProp];
|
|
356
|
+
const shouldAddOffset = alignmentPadding > 0 && center !== offset && rects.reference[length] <= rects.floating[length];
|
|
357
|
+
const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;
|
|
358
|
+
return {
|
|
359
|
+
[axis]: coords[axis] - alignmentOffset,
|
|
360
|
+
data: {
|
|
361
|
+
[axis]: offset,
|
|
362
|
+
centerOffset: center - offset
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
}
|
|
223
366
|
|
|
224
|
-
|
|
225
|
-
return "Profiler";
|
|
367
|
+
});
|
|
226
368
|
|
|
227
|
-
|
|
228
|
-
|
|
369
|
+
const hash$1 = {
|
|
370
|
+
left: 'right',
|
|
371
|
+
right: 'left',
|
|
372
|
+
bottom: 'top',
|
|
373
|
+
top: 'bottom'
|
|
374
|
+
};
|
|
375
|
+
function getOppositePlacement(placement) {
|
|
376
|
+
return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]);
|
|
377
|
+
}
|
|
229
378
|
|
|
230
|
-
|
|
231
|
-
|
|
379
|
+
function getAlignmentSides(placement, rects, rtl) {
|
|
380
|
+
if (rtl === void 0) {
|
|
381
|
+
rtl = false;
|
|
382
|
+
}
|
|
232
383
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
384
|
+
const alignment = getAlignment(placement);
|
|
385
|
+
const mainAxis = getMainAxisFromPlacement(placement);
|
|
386
|
+
const length = getLengthFromAxis(mainAxis);
|
|
387
|
+
let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
|
|
236
388
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
return 'Context.Consumer';
|
|
389
|
+
if (rects.reference[length] > rects.floating[length]) {
|
|
390
|
+
mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
|
|
391
|
+
}
|
|
241
392
|
|
|
242
|
-
|
|
243
|
-
|
|
393
|
+
return {
|
|
394
|
+
main: mainAlignmentSide,
|
|
395
|
+
cross: getOppositePlacement(mainAlignmentSide)
|
|
396
|
+
};
|
|
397
|
+
}
|
|
244
398
|
|
|
245
|
-
|
|
246
|
-
|
|
399
|
+
const hash = {
|
|
400
|
+
start: 'end',
|
|
401
|
+
end: 'start'
|
|
402
|
+
};
|
|
403
|
+
function getOppositeAlignmentPlacement(placement) {
|
|
404
|
+
return placement.replace(/start|end/g, matched => hash[matched]);
|
|
405
|
+
}
|
|
247
406
|
|
|
248
|
-
|
|
249
|
-
|
|
407
|
+
const sides = ['top', 'right', 'bottom', 'left'];
|
|
408
|
+
const allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + "-start", side + "-end"), []);
|
|
250
409
|
|
|
251
|
-
|
|
252
|
-
|
|
410
|
+
function getPlacementList(alignment, autoAlignment, allowedPlacements) {
|
|
411
|
+
const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);
|
|
412
|
+
return allowedPlacementsSortedByAlignment.filter(placement => {
|
|
413
|
+
if (alignment) {
|
|
414
|
+
return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);
|
|
415
|
+
}
|
|
253
416
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
var resolvedThenable = refineResolvedLazyComponent(thenable);
|
|
417
|
+
return true;
|
|
418
|
+
});
|
|
419
|
+
}
|
|
258
420
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
421
|
+
/**
|
|
422
|
+
* Automatically chooses the `placement` which has the most space available.
|
|
423
|
+
* @see https://floating-ui.com/docs/autoPlacement
|
|
424
|
+
*/
|
|
425
|
+
const autoPlacement = function (options) {
|
|
426
|
+
if (options === void 0) {
|
|
427
|
+
options = {};
|
|
428
|
+
}
|
|
262
429
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
430
|
+
return {
|
|
431
|
+
name: 'autoPlacement',
|
|
432
|
+
options,
|
|
267
433
|
|
|
268
|
-
|
|
269
|
-
|
|
434
|
+
async fn(middlewareArguments) {
|
|
435
|
+
var _middlewareData$autoP, _middlewareData$autoP2, _middlewareData$autoP3, _middlewareData$autoP4, _placementsSortedByLe;
|
|
270
436
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
437
|
+
const {
|
|
438
|
+
x,
|
|
439
|
+
y,
|
|
440
|
+
rects,
|
|
441
|
+
middlewareData,
|
|
442
|
+
placement,
|
|
443
|
+
platform,
|
|
444
|
+
elements
|
|
445
|
+
} = middlewareArguments;
|
|
446
|
+
const {
|
|
447
|
+
alignment = null,
|
|
448
|
+
allowedPlacements = allPlacements,
|
|
449
|
+
autoAlignment = true,
|
|
450
|
+
...detectOverflowOptions
|
|
451
|
+
} = options;
|
|
452
|
+
const placements = getPlacementList(alignment, autoAlignment, allowedPlacements);
|
|
453
|
+
const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);
|
|
454
|
+
const currentIndex = (_middlewareData$autoP = (_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.index) != null ? _middlewareData$autoP : 0;
|
|
455
|
+
const currentPlacement = placements[currentIndex];
|
|
274
456
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
}
|
|
457
|
+
if (currentPlacement == null) {
|
|
458
|
+
return {};
|
|
459
|
+
}
|
|
280
460
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
461
|
+
const {
|
|
462
|
+
main,
|
|
463
|
+
cross
|
|
464
|
+
} = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); // Make `computeCoords` start from the right place
|
|
285
465
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
466
|
+
if (placement !== currentPlacement) {
|
|
467
|
+
return {
|
|
468
|
+
x,
|
|
469
|
+
y,
|
|
470
|
+
reset: {
|
|
471
|
+
placement: placements[0]
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
}
|
|
291
475
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
throw err;
|
|
299
|
-
}
|
|
476
|
+
const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];
|
|
477
|
+
const allOverflows = [...((_middlewareData$autoP3 = (_middlewareData$autoP4 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP4.overflows) != null ? _middlewareData$autoP3 : []), {
|
|
478
|
+
placement: currentPlacement,
|
|
479
|
+
overflows: currentOverflows
|
|
480
|
+
}];
|
|
481
|
+
const nextPlacement = placements[currentIndex + 1]; // There are more placements to check
|
|
300
482
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
483
|
+
if (nextPlacement) {
|
|
484
|
+
return {
|
|
485
|
+
data: {
|
|
486
|
+
index: currentIndex + 1,
|
|
487
|
+
overflows: allOverflows
|
|
488
|
+
},
|
|
489
|
+
reset: {
|
|
490
|
+
placement: nextPlacement
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
}
|
|
305
494
|
|
|
306
|
-
|
|
307
|
-
|
|
495
|
+
const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);
|
|
496
|
+
const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {
|
|
497
|
+
let {
|
|
498
|
+
overflows
|
|
499
|
+
} = _ref;
|
|
500
|
+
return overflows.every(overflow => overflow <= 0);
|
|
501
|
+
})) == null ? void 0 : _placementsSortedByLe.placement;
|
|
502
|
+
const resetPlacement = placementThatFitsOnAllSides != null ? placementThatFitsOnAllSides : placementsSortedByLeastOverflow[0].placement;
|
|
308
503
|
|
|
309
|
-
|
|
504
|
+
if (resetPlacement !== placement) {
|
|
505
|
+
return {
|
|
506
|
+
data: {
|
|
507
|
+
index: currentIndex + 1,
|
|
508
|
+
overflows: allOverflows
|
|
509
|
+
},
|
|
510
|
+
reset: {
|
|
511
|
+
placement: resetPlacement
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
}
|
|
310
515
|
|
|
311
|
-
|
|
312
|
-
|
|
516
|
+
return {};
|
|
517
|
+
}
|
|
313
518
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
// same error.
|
|
317
|
-
loggedTypeFailures[error$1.message] = true;
|
|
318
|
-
setCurrentlyValidatingElement(element);
|
|
519
|
+
};
|
|
520
|
+
};
|
|
319
521
|
|
|
320
|
-
|
|
522
|
+
function getExpandedPlacements(placement) {
|
|
523
|
+
const oppositePlacement = getOppositePlacement(placement);
|
|
524
|
+
return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
|
|
525
|
+
}
|
|
321
526
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
527
|
+
/**
|
|
528
|
+
* Changes the placement of the floating element to one that will fit if the
|
|
529
|
+
* initially specified `placement` does not.
|
|
530
|
+
* @see https://floating-ui.com/docs/flip
|
|
531
|
+
*/
|
|
532
|
+
const flip = function (options) {
|
|
533
|
+
if (options === void 0) {
|
|
534
|
+
options = {};
|
|
535
|
+
}
|
|
328
536
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
key: true,
|
|
333
|
-
ref: true,
|
|
334
|
-
__self: true,
|
|
335
|
-
__source: true
|
|
336
|
-
};
|
|
337
|
-
var specialPropKeyWarningShown;
|
|
338
|
-
var specialPropRefWarningShown;
|
|
339
|
-
var didWarnAboutStringRefs;
|
|
537
|
+
return {
|
|
538
|
+
name: 'flip',
|
|
539
|
+
options,
|
|
340
540
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
}
|
|
541
|
+
async fn(middlewareArguments) {
|
|
542
|
+
var _middlewareData$flip;
|
|
344
543
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
544
|
+
const {
|
|
545
|
+
placement,
|
|
546
|
+
middlewareData,
|
|
547
|
+
rects,
|
|
548
|
+
initialPlacement,
|
|
549
|
+
platform,
|
|
550
|
+
elements
|
|
551
|
+
} = middlewareArguments;
|
|
552
|
+
const {
|
|
553
|
+
mainAxis: checkMainAxis = true,
|
|
554
|
+
crossAxis: checkCrossAxis = true,
|
|
555
|
+
fallbackPlacements: specifiedFallbackPlacements,
|
|
556
|
+
fallbackStrategy = 'bestFit',
|
|
557
|
+
flipAlignment = true,
|
|
558
|
+
...detectOverflowOptions
|
|
559
|
+
} = options;
|
|
560
|
+
const side = getSide(placement);
|
|
561
|
+
const isBasePlacement = side === initialPlacement;
|
|
562
|
+
const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
|
|
563
|
+
const placements = [initialPlacement, ...fallbackPlacements];
|
|
564
|
+
const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);
|
|
565
|
+
const overflows = [];
|
|
566
|
+
let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
|
|
349
567
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
}
|
|
354
|
-
}
|
|
568
|
+
if (checkMainAxis) {
|
|
569
|
+
overflows.push(overflow[side]);
|
|
570
|
+
}
|
|
355
571
|
|
|
356
|
-
|
|
357
|
-
|
|
572
|
+
if (checkCrossAxis) {
|
|
573
|
+
const {
|
|
574
|
+
main,
|
|
575
|
+
cross
|
|
576
|
+
} = getAlignmentSides(placement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));
|
|
577
|
+
overflows.push(overflow[main], overflow[cross]);
|
|
578
|
+
}
|
|
358
579
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
580
|
+
overflowsData = [...overflowsData, {
|
|
581
|
+
placement,
|
|
582
|
+
overflows
|
|
583
|
+
}]; // One or more sides is overflowing
|
|
363
584
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
585
|
+
if (!overflows.every(side => side <= 0)) {
|
|
586
|
+
var _middlewareData$flip$, _middlewareData$flip2;
|
|
369
587
|
|
|
370
|
-
|
|
371
|
-
|
|
588
|
+
const nextIndex = ((_middlewareData$flip$ = (_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) != null ? _middlewareData$flip$ : 0) + 1;
|
|
589
|
+
const nextPlacement = placements[nextIndex];
|
|
372
590
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
591
|
+
if (nextPlacement) {
|
|
592
|
+
// Try next placement and re-run the lifecycle
|
|
593
|
+
return {
|
|
594
|
+
data: {
|
|
595
|
+
index: nextIndex,
|
|
596
|
+
overflows: overflowsData
|
|
597
|
+
},
|
|
598
|
+
reset: {
|
|
599
|
+
placement: nextPlacement
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
}
|
|
377
603
|
|
|
378
|
-
|
|
379
|
-
error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);
|
|
604
|
+
let resetPlacement = 'bottom';
|
|
380
605
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
606
|
+
switch (fallbackStrategy) {
|
|
607
|
+
case 'bestFit':
|
|
608
|
+
{
|
|
609
|
+
var _overflowsData$map$so;
|
|
386
610
|
|
|
387
|
-
|
|
388
|
-
{
|
|
389
|
-
var warnAboutAccessingKey = function () {
|
|
390
|
-
if (!specialPropKeyWarningShown) {
|
|
391
|
-
specialPropKeyWarningShown = true;
|
|
611
|
+
const placement = (_overflowsData$map$so = overflowsData.map(d => [d, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0].placement;
|
|
392
612
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
613
|
+
if (placement) {
|
|
614
|
+
resetPlacement = placement;
|
|
615
|
+
}
|
|
396
616
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
get: warnAboutAccessingKey,
|
|
400
|
-
configurable: true
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
}
|
|
617
|
+
break;
|
|
618
|
+
}
|
|
404
619
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
specialPropRefWarningShown = true;
|
|
620
|
+
case 'initialPlacement':
|
|
621
|
+
resetPlacement = initialPlacement;
|
|
622
|
+
break;
|
|
623
|
+
}
|
|
410
624
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
625
|
+
if (placement !== resetPlacement) {
|
|
626
|
+
return {
|
|
627
|
+
reset: {
|
|
628
|
+
placement: resetPlacement
|
|
629
|
+
}
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
}
|
|
414
633
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
get: warnAboutAccessingRef,
|
|
418
|
-
configurable: true
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Factory method to create a new React element. This no longer adheres to
|
|
424
|
-
* the class pattern, so do not use new to call it. Also, instanceof check
|
|
425
|
-
* will not work. Instead test $$typeof field against Symbol.for('react.element') to check
|
|
426
|
-
* if something is a React Element.
|
|
427
|
-
*
|
|
428
|
-
* @param {*} type
|
|
429
|
-
* @param {*} props
|
|
430
|
-
* @param {*} key
|
|
431
|
-
* @param {string|object} ref
|
|
432
|
-
* @param {*} owner
|
|
433
|
-
* @param {*} self A *temporary* helper to detect places where `this` is
|
|
434
|
-
* different from the `owner` when React.createElement is called, so that we
|
|
435
|
-
* can warn. We want to get rid of owner and replace string `ref`s with arrow
|
|
436
|
-
* functions, and as long as `this` and owner are the same, there will be no
|
|
437
|
-
* change in behavior.
|
|
438
|
-
* @param {*} source An annotation object (added by a transpiler or otherwise)
|
|
439
|
-
* indicating filename, line number, and/or other information.
|
|
440
|
-
* @internal
|
|
441
|
-
*/
|
|
634
|
+
return {};
|
|
635
|
+
}
|
|
442
636
|
|
|
637
|
+
};
|
|
638
|
+
};
|
|
443
639
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
640
|
+
async function convertValueToCoords(middlewareArguments, value) {
|
|
641
|
+
const {
|
|
642
|
+
placement,
|
|
643
|
+
platform,
|
|
644
|
+
elements
|
|
645
|
+
} = middlewareArguments;
|
|
646
|
+
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
|
|
647
|
+
const side = getSide(placement);
|
|
648
|
+
const alignment = getAlignment(placement);
|
|
649
|
+
const isVertical = getMainAxisFromPlacement(placement) === 'x';
|
|
650
|
+
const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
|
|
651
|
+
const crossAxisMulti = rtl && isVertical ? -1 : 1;
|
|
652
|
+
const rawValue = typeof value === 'function' ? value(middlewareArguments) : value; // eslint-disable-next-line prefer-const
|
|
456
653
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
654
|
+
let {
|
|
655
|
+
mainAxis,
|
|
656
|
+
crossAxis,
|
|
657
|
+
alignmentAxis
|
|
658
|
+
} = typeof rawValue === 'number' ? {
|
|
659
|
+
mainAxis: rawValue,
|
|
660
|
+
crossAxis: 0,
|
|
661
|
+
alignmentAxis: null
|
|
662
|
+
} : {
|
|
663
|
+
mainAxis: 0,
|
|
664
|
+
crossAxis: 0,
|
|
665
|
+
alignmentAxis: null,
|
|
666
|
+
...rawValue
|
|
667
|
+
};
|
|
466
668
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
writable: true,
|
|
471
|
-
value: false
|
|
472
|
-
}); // self and source are DEV only properties.
|
|
669
|
+
if (alignment && typeof alignmentAxis === 'number') {
|
|
670
|
+
crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;
|
|
671
|
+
}
|
|
473
672
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
673
|
+
return isVertical ? {
|
|
674
|
+
x: crossAxis * crossAxisMulti,
|
|
675
|
+
y: mainAxis * mainAxisMulti
|
|
676
|
+
} : {
|
|
677
|
+
x: mainAxis * mainAxisMulti,
|
|
678
|
+
y: crossAxis * crossAxisMulti
|
|
679
|
+
};
|
|
680
|
+
}
|
|
681
|
+
/**
|
|
682
|
+
* Displaces the floating element from its reference element.
|
|
683
|
+
* @see https://floating-ui.com/docs/offset
|
|
684
|
+
*/
|
|
481
685
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
value: source
|
|
487
|
-
});
|
|
686
|
+
const offset = function (value) {
|
|
687
|
+
if (value === void 0) {
|
|
688
|
+
value = 0;
|
|
689
|
+
}
|
|
488
690
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
493
|
-
}
|
|
691
|
+
return {
|
|
692
|
+
name: 'offset',
|
|
693
|
+
options: value,
|
|
494
694
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
695
|
+
async fn(middlewareArguments) {
|
|
696
|
+
const {
|
|
697
|
+
x,
|
|
698
|
+
y
|
|
699
|
+
} = middlewareArguments;
|
|
700
|
+
const diffCoords = await convertValueToCoords(middlewareArguments, value);
|
|
701
|
+
return {
|
|
702
|
+
x: x + diffCoords.x,
|
|
703
|
+
y: y + diffCoords.y,
|
|
704
|
+
data: diffCoords
|
|
705
|
+
};
|
|
706
|
+
}
|
|
503
707
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
var propName; // Reserved names are extracted
|
|
708
|
+
};
|
|
709
|
+
};
|
|
507
710
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" />
|
|
512
|
-
// or <div key="Hi" {...props} /> ). We want to deprecate key spread,
|
|
513
|
-
// but as an intermediary step, we will use jsxDEV for everything except
|
|
514
|
-
// <div {...props} key="Hi" />, because we aren't currently able to tell if
|
|
515
|
-
// key is explicitly declared to be undefined or not.
|
|
711
|
+
function getCrossAxis(axis) {
|
|
712
|
+
return axis === 'x' ? 'y' : 'x';
|
|
713
|
+
}
|
|
516
714
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
715
|
+
/**
|
|
716
|
+
* Shifts the floating element in order to keep it in view when it will overflow
|
|
717
|
+
* a clipping boundary.
|
|
718
|
+
* @see https://floating-ui.com/docs/shift
|
|
719
|
+
*/
|
|
720
|
+
const shift = function (options) {
|
|
721
|
+
if (options === void 0) {
|
|
722
|
+
options = {};
|
|
723
|
+
}
|
|
520
724
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
725
|
+
return {
|
|
726
|
+
name: 'shift',
|
|
727
|
+
options,
|
|
524
728
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
729
|
+
async fn(middlewareArguments) {
|
|
730
|
+
const {
|
|
731
|
+
x,
|
|
732
|
+
y,
|
|
733
|
+
placement
|
|
734
|
+
} = middlewareArguments;
|
|
735
|
+
const {
|
|
736
|
+
mainAxis: checkMainAxis = true,
|
|
737
|
+
crossAxis: checkCrossAxis = false,
|
|
738
|
+
limiter = {
|
|
739
|
+
fn: _ref => {
|
|
740
|
+
let {
|
|
741
|
+
x,
|
|
742
|
+
y
|
|
743
|
+
} = _ref;
|
|
744
|
+
return {
|
|
745
|
+
x,
|
|
746
|
+
y
|
|
747
|
+
};
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
...detectOverflowOptions
|
|
751
|
+
} = options;
|
|
752
|
+
const coords = {
|
|
753
|
+
x,
|
|
754
|
+
y
|
|
755
|
+
};
|
|
756
|
+
const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);
|
|
757
|
+
const mainAxis = getMainAxisFromPlacement(getSide(placement));
|
|
758
|
+
const crossAxis = getCrossAxis(mainAxis);
|
|
759
|
+
let mainAxisCoord = coords[mainAxis];
|
|
760
|
+
let crossAxisCoord = coords[crossAxis];
|
|
529
761
|
|
|
762
|
+
if (checkMainAxis) {
|
|
763
|
+
const minSide = mainAxis === 'y' ? 'top' : 'left';
|
|
764
|
+
const maxSide = mainAxis === 'y' ? 'bottom' : 'right';
|
|
765
|
+
const min = mainAxisCoord + overflow[minSide];
|
|
766
|
+
const max = mainAxisCoord - overflow[maxSide];
|
|
767
|
+
mainAxisCoord = within(min, mainAxisCoord, max);
|
|
768
|
+
}
|
|
530
769
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
770
|
+
if (checkCrossAxis) {
|
|
771
|
+
const minSide = crossAxis === 'y' ? 'top' : 'left';
|
|
772
|
+
const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
|
|
773
|
+
const min = crossAxisCoord + overflow[minSide];
|
|
774
|
+
const max = crossAxisCoord - overflow[maxSide];
|
|
775
|
+
crossAxisCoord = within(min, crossAxisCoord, max);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
const limitedCoords = limiter.fn({ ...middlewareArguments,
|
|
779
|
+
[mainAxis]: mainAxisCoord,
|
|
780
|
+
[crossAxis]: crossAxisCoord
|
|
781
|
+
});
|
|
782
|
+
return { ...limitedCoords,
|
|
783
|
+
data: {
|
|
784
|
+
x: limitedCoords.x - x,
|
|
785
|
+
y: limitedCoords.y - y
|
|
786
|
+
}
|
|
787
|
+
};
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
};
|
|
791
|
+
};
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Provides data to change the size of the floating element. For instance,
|
|
795
|
+
* prevent it from overflowing its clipping boundary or match the width of the
|
|
796
|
+
* reference element.
|
|
797
|
+
* @see https://floating-ui.com/docs/size
|
|
798
|
+
*/
|
|
799
|
+
const size = function (options) {
|
|
800
|
+
if (options === void 0) {
|
|
801
|
+
options = {};
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
return {
|
|
805
|
+
name: 'size',
|
|
806
|
+
options,
|
|
807
|
+
|
|
808
|
+
async fn(middlewareArguments) {
|
|
809
|
+
const {
|
|
810
|
+
placement,
|
|
811
|
+
rects,
|
|
812
|
+
platform,
|
|
813
|
+
elements
|
|
814
|
+
} = middlewareArguments;
|
|
815
|
+
const {
|
|
816
|
+
apply = () => {},
|
|
817
|
+
...detectOverflowOptions
|
|
818
|
+
} = options;
|
|
819
|
+
const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);
|
|
820
|
+
const side = getSide(placement);
|
|
821
|
+
const alignment = getAlignment(placement);
|
|
822
|
+
let heightSide;
|
|
823
|
+
let widthSide;
|
|
824
|
+
|
|
825
|
+
if (side === 'top' || side === 'bottom') {
|
|
826
|
+
heightSide = side;
|
|
827
|
+
widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';
|
|
828
|
+
} else {
|
|
829
|
+
widthSide = side;
|
|
830
|
+
heightSide = alignment === 'end' ? 'top' : 'bottom';
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
const xMin = max$1(overflow.left, 0);
|
|
834
|
+
const xMax = max$1(overflow.right, 0);
|
|
835
|
+
const yMin = max$1(overflow.top, 0);
|
|
836
|
+
const yMax = max$1(overflow.bottom, 0);
|
|
837
|
+
const dimensions = {
|
|
838
|
+
availableHeight: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max$1(overflow.top, overflow.bottom)) : overflow[heightSide]),
|
|
839
|
+
availableWidth: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max$1(overflow.left, overflow.right)) : overflow[widthSide])
|
|
840
|
+
};
|
|
841
|
+
await apply({ ...middlewareArguments,
|
|
842
|
+
...dimensions
|
|
843
|
+
});
|
|
844
|
+
const nextDimensions = await platform.getDimensions(elements.floating);
|
|
845
|
+
|
|
846
|
+
if (rects.floating.width !== nextDimensions.width || rects.floating.height !== nextDimensions.height) {
|
|
847
|
+
return {
|
|
848
|
+
reset: {
|
|
849
|
+
rects: true
|
|
850
|
+
}
|
|
851
|
+
};
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
return {};
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
};
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* Provides improved positioning for inline reference elements that can span
|
|
862
|
+
* over multiple lines, such as hyperlinks or range selections.
|
|
863
|
+
* @see https://floating-ui.com/docs/inline
|
|
864
|
+
*/
|
|
865
|
+
const inline = function (options) {
|
|
866
|
+
if (options === void 0) {
|
|
867
|
+
options = {};
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
return {
|
|
871
|
+
name: 'inline',
|
|
872
|
+
options,
|
|
873
|
+
|
|
874
|
+
async fn(middlewareArguments) {
|
|
875
|
+
var _await$platform$getCl;
|
|
876
|
+
|
|
877
|
+
const {
|
|
878
|
+
placement,
|
|
879
|
+
elements,
|
|
880
|
+
rects,
|
|
881
|
+
platform,
|
|
882
|
+
strategy
|
|
883
|
+
} = middlewareArguments; // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a
|
|
884
|
+
// ClientRect's bounds, despite the event listener being triggered. A
|
|
885
|
+
// padding of 2 seems to handle this issue.
|
|
886
|
+
|
|
887
|
+
const {
|
|
888
|
+
padding = 2,
|
|
889
|
+
x,
|
|
890
|
+
y
|
|
891
|
+
} = options;
|
|
892
|
+
const fallback = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
|
|
893
|
+
rect: rects.reference,
|
|
894
|
+
offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),
|
|
895
|
+
strategy
|
|
896
|
+
}) : rects.reference);
|
|
897
|
+
const clientRects = (_await$platform$getCl = await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) != null ? _await$platform$getCl : [];
|
|
898
|
+
const paddingObject = getSideObjectFromPadding(padding);
|
|
899
|
+
|
|
900
|
+
function getBoundingClientRect() {
|
|
901
|
+
// There are two rects and they are disjoined
|
|
902
|
+
if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {
|
|
903
|
+
var _clientRects$find;
|
|
904
|
+
|
|
905
|
+
// Find the first rect in which the point is fully inside
|
|
906
|
+
return (_clientRects$find = clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom)) != null ? _clientRects$find : fallback;
|
|
907
|
+
} // There are 2 or more connected rects
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
if (clientRects.length >= 2) {
|
|
911
|
+
if (getMainAxisFromPlacement(placement) === 'x') {
|
|
912
|
+
const firstRect = clientRects[0];
|
|
913
|
+
const lastRect = clientRects[clientRects.length - 1];
|
|
914
|
+
const isTop = getSide(placement) === 'top';
|
|
915
|
+
const top = firstRect.top;
|
|
916
|
+
const bottom = lastRect.bottom;
|
|
917
|
+
const left = isTop ? firstRect.left : lastRect.left;
|
|
918
|
+
const right = isTop ? firstRect.right : lastRect.right;
|
|
919
|
+
const width = right - left;
|
|
920
|
+
const height = bottom - top;
|
|
921
|
+
return {
|
|
922
|
+
top,
|
|
923
|
+
bottom,
|
|
924
|
+
left,
|
|
925
|
+
right,
|
|
926
|
+
width,
|
|
927
|
+
height,
|
|
928
|
+
x: left,
|
|
929
|
+
y: top
|
|
930
|
+
};
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
const isLeftSide = getSide(placement) === 'left';
|
|
934
|
+
const maxRight = max$1(...clientRects.map(rect => rect.right));
|
|
935
|
+
const minLeft = min$1(...clientRects.map(rect => rect.left));
|
|
936
|
+
const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);
|
|
937
|
+
const top = measureRects[0].top;
|
|
938
|
+
const bottom = measureRects[measureRects.length - 1].bottom;
|
|
939
|
+
const left = minLeft;
|
|
940
|
+
const right = maxRight;
|
|
941
|
+
const width = right - left;
|
|
942
|
+
const height = bottom - top;
|
|
943
|
+
return {
|
|
944
|
+
top,
|
|
945
|
+
bottom,
|
|
946
|
+
left,
|
|
947
|
+
right,
|
|
948
|
+
width,
|
|
949
|
+
height,
|
|
950
|
+
x: left,
|
|
951
|
+
y: top
|
|
952
|
+
};
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
return fallback;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
const resetRects = await platform.getElementRects({
|
|
959
|
+
reference: {
|
|
960
|
+
getBoundingClientRect
|
|
961
|
+
},
|
|
962
|
+
floating: elements.floating,
|
|
963
|
+
strategy
|
|
964
|
+
});
|
|
965
|
+
|
|
966
|
+
if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {
|
|
967
|
+
return {
|
|
968
|
+
reset: {
|
|
969
|
+
rects: resetRects
|
|
970
|
+
}
|
|
971
|
+
};
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
return {};
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
};
|
|
978
|
+
};
|
|
979
|
+
|
|
980
|
+
function isWindow(value) {
|
|
981
|
+
return value && value.document && value.location && value.alert && value.setInterval;
|
|
982
|
+
}
|
|
983
|
+
function getWindow(node) {
|
|
984
|
+
if (node == null) {
|
|
985
|
+
return window;
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
if (!isWindow(node)) {
|
|
989
|
+
const ownerDocument = node.ownerDocument;
|
|
990
|
+
return ownerDocument ? ownerDocument.defaultView || window : window;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
return node;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
function getComputedStyle(element) {
|
|
997
|
+
return getWindow(element).getComputedStyle(element);
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
function getNodeName(node) {
|
|
1001
|
+
return isWindow(node) ? '' : node ? (node.nodeName || '').toLowerCase() : '';
|
|
1002
|
+
}
|
|
536
1003
|
|
|
1004
|
+
function getUAString() {
|
|
1005
|
+
const uaData = navigator.userAgentData;
|
|
537
1006
|
|
|
538
|
-
|
|
539
|
-
|
|
1007
|
+
if (uaData != null && uaData.brands) {
|
|
1008
|
+
return uaData.brands.map(item => item.brand + "/" + item.version).join(' ');
|
|
1009
|
+
}
|
|
540
1010
|
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
props[propName] = defaultProps[propName];
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
}
|
|
1011
|
+
return navigator.userAgent;
|
|
1012
|
+
}
|
|
547
1013
|
|
|
548
|
-
|
|
549
|
-
|
|
1014
|
+
function isHTMLElement(value) {
|
|
1015
|
+
return value instanceof getWindow(value).HTMLElement;
|
|
1016
|
+
}
|
|
1017
|
+
function isElement(value) {
|
|
1018
|
+
return value instanceof getWindow(value).Element;
|
|
1019
|
+
}
|
|
1020
|
+
function isNode(value) {
|
|
1021
|
+
return value instanceof getWindow(value).Node;
|
|
1022
|
+
}
|
|
1023
|
+
function isShadowRoot(node) {
|
|
1024
|
+
// Browsers without `ShadowRoot` support
|
|
1025
|
+
if (typeof ShadowRoot === 'undefined') {
|
|
1026
|
+
return false;
|
|
1027
|
+
}
|
|
550
1028
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
1029
|
+
const OwnElement = getWindow(node).ShadowRoot;
|
|
1030
|
+
return node instanceof OwnElement || node instanceof ShadowRoot;
|
|
1031
|
+
}
|
|
1032
|
+
function isOverflowElement(element) {
|
|
1033
|
+
// Firefox wants us to check `-x` and `-y` variations as well
|
|
1034
|
+
const {
|
|
1035
|
+
overflow,
|
|
1036
|
+
overflowX,
|
|
1037
|
+
overflowY,
|
|
1038
|
+
display
|
|
1039
|
+
} = getComputedStyle(element);
|
|
1040
|
+
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);
|
|
1041
|
+
}
|
|
1042
|
+
function isTableElement(element) {
|
|
1043
|
+
return ['table', 'td', 'th'].includes(getNodeName(element));
|
|
1044
|
+
}
|
|
1045
|
+
function isContainingBlock(element) {
|
|
1046
|
+
// TODO: Try and use feature detection here instead
|
|
1047
|
+
const isFirefox = /firefox/i.test(getUAString());
|
|
1048
|
+
const css = getComputedStyle(element);
|
|
1049
|
+
const backdropFilter = css.backdropFilter || css.WebkitBackdropFilter; // This is non-exhaustive but covers the most common CSS properties that
|
|
1050
|
+
// create a containing block.
|
|
1051
|
+
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
|
554
1052
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
1053
|
+
return css.transform !== 'none' || css.perspective !== 'none' || (backdropFilter ? backdropFilter !== 'none' : false) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective'].some(value => css.willChange.includes(value)) || ['paint', 'layout', 'strict', 'content'].some( // TS 4.1 compat
|
|
1054
|
+
value => {
|
|
1055
|
+
const contain = css.contain;
|
|
1056
|
+
return contain != null ? contain.includes(value) : false;
|
|
1057
|
+
});
|
|
1058
|
+
}
|
|
1059
|
+
function isLayoutViewport() {
|
|
1060
|
+
// Not Safari
|
|
1061
|
+
return !/^((?!chrome|android).)*safari/i.test(getUAString()); // Feature detection for this fails in various ways
|
|
1062
|
+
// • Always-visible scrollbar or not
|
|
1063
|
+
// • Width of <html>, etc.
|
|
1064
|
+
// const vV = win.visualViewport;
|
|
1065
|
+
// return vV ? Math.abs(win.innerWidth / vV.scale - vV.width) < 0.5 : true;
|
|
1066
|
+
}
|
|
1067
|
+
function isLastTraversableNode(node) {
|
|
1068
|
+
return ['html', 'body', '#document'].includes(getNodeName(node));
|
|
1069
|
+
}
|
|
559
1070
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
1071
|
+
const min = Math.min;
|
|
1072
|
+
const max = Math.max;
|
|
1073
|
+
const round = Math.round;
|
|
563
1074
|
|
|
564
|
-
|
|
565
|
-
|
|
1075
|
+
function getBoundingClientRect(element, includeScale, isFixedStrategy) {
|
|
1076
|
+
var _win$visualViewport$o, _win$visualViewport, _win$visualViewport$o2, _win$visualViewport2;
|
|
566
1077
|
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
1078
|
+
if (includeScale === void 0) {
|
|
1079
|
+
includeScale = false;
|
|
1080
|
+
}
|
|
570
1081
|
|
|
571
|
-
|
|
1082
|
+
if (isFixedStrategy === void 0) {
|
|
1083
|
+
isFixedStrategy = false;
|
|
1084
|
+
}
|
|
572
1085
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
/**
|
|
577
|
-
* Verifies the object is a ReactElement.
|
|
578
|
-
* See https://reactjs.org/docs/react-api.html#isvalidelement
|
|
579
|
-
* @param {?object} object
|
|
580
|
-
* @return {boolean} True if `object` is a ReactElement.
|
|
581
|
-
* @final
|
|
582
|
-
*/
|
|
1086
|
+
const clientRect = element.getBoundingClientRect();
|
|
1087
|
+
let scaleX = 1;
|
|
1088
|
+
let scaleY = 1;
|
|
583
1089
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
}
|
|
1090
|
+
if (includeScale && isHTMLElement(element)) {
|
|
1091
|
+
scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
|
|
1092
|
+
scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
|
|
1093
|
+
}
|
|
589
1094
|
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
1095
|
+
const win = isElement(element) ? getWindow(element) : window;
|
|
1096
|
+
const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
|
|
1097
|
+
const x = (clientRect.left + (addVisualOffsets ? (_win$visualViewport$o = (_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) != null ? _win$visualViewport$o : 0 : 0)) / scaleX;
|
|
1098
|
+
const y = (clientRect.top + (addVisualOffsets ? (_win$visualViewport$o2 = (_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) != null ? _win$visualViewport$o2 : 0 : 0)) / scaleY;
|
|
1099
|
+
const width = clientRect.width / scaleX;
|
|
1100
|
+
const height = clientRect.height / scaleY;
|
|
1101
|
+
return {
|
|
1102
|
+
width,
|
|
1103
|
+
height,
|
|
1104
|
+
top: y,
|
|
1105
|
+
right: x + width,
|
|
1106
|
+
bottom: y + height,
|
|
1107
|
+
left: x,
|
|
1108
|
+
x,
|
|
1109
|
+
y
|
|
1110
|
+
};
|
|
1111
|
+
}
|
|
594
1112
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
}
|
|
1113
|
+
function getDocumentElement(node) {
|
|
1114
|
+
return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;
|
|
1115
|
+
}
|
|
599
1116
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
1117
|
+
function getNodeScroll(element) {
|
|
1118
|
+
if (isElement(element)) {
|
|
1119
|
+
return {
|
|
1120
|
+
scrollLeft: element.scrollLeft,
|
|
1121
|
+
scrollTop: element.scrollTop
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
603
1124
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
|
|
610
|
-
}
|
|
1125
|
+
return {
|
|
1126
|
+
scrollLeft: element.pageXOffset,
|
|
1127
|
+
scrollTop: element.pageYOffset
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
611
1130
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
* object keys are not valid. This allows us to keep track of children between
|
|
618
|
-
* updates.
|
|
619
|
-
*/
|
|
1131
|
+
function getWindowScrollBarX(element) {
|
|
1132
|
+
// If <html> has a CSS width greater than the viewport, then this will be
|
|
1133
|
+
// incorrect for RTL.
|
|
1134
|
+
return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;
|
|
1135
|
+
}
|
|
620
1136
|
|
|
1137
|
+
function isScaled(element) {
|
|
1138
|
+
const rect = getBoundingClientRect(element);
|
|
1139
|
+
return round(rect.width) !== element.offsetWidth || round(rect.height) !== element.offsetHeight;
|
|
1140
|
+
}
|
|
621
1141
|
|
|
622
|
-
|
|
1142
|
+
function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
|
|
1143
|
+
const isOffsetParentAnElement = isHTMLElement(offsetParent);
|
|
1144
|
+
const documentElement = getDocumentElement(offsetParent);
|
|
1145
|
+
const rect = getBoundingClientRect(element, // @ts-ignore - checked above (TS 4.1 compat)
|
|
1146
|
+
isOffsetParentAnElement && isScaled(offsetParent), strategy === 'fixed');
|
|
1147
|
+
let scroll = {
|
|
1148
|
+
scrollLeft: 0,
|
|
1149
|
+
scrollTop: 0
|
|
1150
|
+
};
|
|
1151
|
+
const offsets = {
|
|
1152
|
+
x: 0,
|
|
1153
|
+
y: 0
|
|
1154
|
+
};
|
|
623
1155
|
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
1156
|
+
if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {
|
|
1157
|
+
if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
|
|
1158
|
+
scroll = getNodeScroll(offsetParent);
|
|
1159
|
+
}
|
|
627
1160
|
|
|
628
|
-
|
|
629
|
-
|
|
1161
|
+
if (isHTMLElement(offsetParent)) {
|
|
1162
|
+
const offsetRect = getBoundingClientRect(offsetParent, true);
|
|
1163
|
+
offsets.x = offsetRect.x + offsetParent.clientLeft;
|
|
1164
|
+
offsets.y = offsetRect.y + offsetParent.clientTop;
|
|
1165
|
+
} else if (documentElement) {
|
|
1166
|
+
offsets.x = getWindowScrollBarX(documentElement);
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
630
1169
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
1170
|
+
return {
|
|
1171
|
+
x: rect.left + scroll.scrollLeft - offsets.x,
|
|
1172
|
+
y: rect.top + scroll.scrollTop - offsets.y,
|
|
1173
|
+
width: rect.width,
|
|
1174
|
+
height: rect.height
|
|
1175
|
+
};
|
|
1176
|
+
}
|
|
635
1177
|
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
* @param {*} parentType element's parent's type.
|
|
649
|
-
*/
|
|
1178
|
+
function getParentNode(node) {
|
|
1179
|
+
if (getNodeName(node) === 'html') {
|
|
1180
|
+
return node;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
const result = // Step into the shadow DOM of the parent of a slotted node
|
|
1184
|
+
node.assignedSlot || // DOM Element detected
|
|
1185
|
+
node.parentNode || ( // ShadowRoot detected
|
|
1186
|
+
isShadowRoot(node) ? node.host : null) || // Fallback
|
|
1187
|
+
getDocumentElement(node);
|
|
1188
|
+
return isShadowRoot(result) ? result.host : result;
|
|
1189
|
+
}
|
|
650
1190
|
|
|
1191
|
+
function getTrueOffsetParent(element) {
|
|
1192
|
+
if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {
|
|
1193
|
+
return null;
|
|
1194
|
+
}
|
|
651
1195
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
if (!element._store || element._store.validated || element.key != null) {
|
|
655
|
-
return;
|
|
656
|
-
}
|
|
1196
|
+
return element.offsetParent;
|
|
1197
|
+
}
|
|
657
1198
|
|
|
658
|
-
|
|
659
|
-
|
|
1199
|
+
function getContainingBlock(element) {
|
|
1200
|
+
let currentNode = getParentNode(element);
|
|
660
1201
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
1202
|
+
while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
|
|
1203
|
+
if (isContainingBlock(currentNode)) {
|
|
1204
|
+
return currentNode;
|
|
1205
|
+
} else {
|
|
1206
|
+
currentNode = getParentNode(currentNode);
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
664
1209
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
1210
|
+
return null;
|
|
1211
|
+
} // Gets the closest ancestor positioned element. Handles some edge cases,
|
|
1212
|
+
// such as table ancestors and cross browser bugs.
|
|
668
1213
|
|
|
669
|
-
var childOwner = '';
|
|
670
1214
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
}
|
|
1215
|
+
function getOffsetParent(element) {
|
|
1216
|
+
const window = getWindow(element);
|
|
1217
|
+
let offsetParent = getTrueOffsetParent(element);
|
|
675
1218
|
|
|
676
|
-
|
|
1219
|
+
while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
|
|
1220
|
+
offsetParent = getTrueOffsetParent(offsetParent);
|
|
1221
|
+
}
|
|
677
1222
|
|
|
678
|
-
|
|
1223
|
+
if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {
|
|
1224
|
+
return window;
|
|
1225
|
+
}
|
|
679
1226
|
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
}
|
|
683
|
-
/**
|
|
684
|
-
* Ensure that every element either is passed in a static location, in an
|
|
685
|
-
* array with an explicit keys property defined, or in an object literal
|
|
686
|
-
* with valid key property.
|
|
687
|
-
*
|
|
688
|
-
* @internal
|
|
689
|
-
* @param {ReactNode} node Statically passed child of any type.
|
|
690
|
-
* @param {*} parentType node's parent's type.
|
|
691
|
-
*/
|
|
1227
|
+
return offsetParent || getContainingBlock(element) || window;
|
|
1228
|
+
}
|
|
692
1229
|
|
|
1230
|
+
function getDimensions(element) {
|
|
1231
|
+
if (isHTMLElement(element)) {
|
|
1232
|
+
return {
|
|
1233
|
+
width: element.offsetWidth,
|
|
1234
|
+
height: element.offsetHeight
|
|
1235
|
+
};
|
|
1236
|
+
}
|
|
693
1237
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
1238
|
+
const rect = getBoundingClientRect(element);
|
|
1239
|
+
return {
|
|
1240
|
+
width: rect.width,
|
|
1241
|
+
height: rect.height
|
|
1242
|
+
};
|
|
1243
|
+
}
|
|
699
1244
|
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
1245
|
+
function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
|
|
1246
|
+
let {
|
|
1247
|
+
rect,
|
|
1248
|
+
offsetParent,
|
|
1249
|
+
strategy
|
|
1250
|
+
} = _ref;
|
|
1251
|
+
const isOffsetParentAnElement = isHTMLElement(offsetParent);
|
|
1252
|
+
const documentElement = getDocumentElement(offsetParent);
|
|
703
1253
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
}
|
|
708
|
-
} else if (isValidElement(node)) {
|
|
709
|
-
// This element was passed in a valid location.
|
|
710
|
-
if (node._store) {
|
|
711
|
-
node._store.validated = true;
|
|
712
|
-
}
|
|
713
|
-
} else if (node) {
|
|
714
|
-
var iteratorFn = getIteratorFn(node);
|
|
1254
|
+
if (offsetParent === documentElement) {
|
|
1255
|
+
return rect;
|
|
1256
|
+
}
|
|
715
1257
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
1258
|
+
let scroll = {
|
|
1259
|
+
scrollLeft: 0,
|
|
1260
|
+
scrollTop: 0
|
|
1261
|
+
};
|
|
1262
|
+
const offsets = {
|
|
1263
|
+
x: 0,
|
|
1264
|
+
y: 0
|
|
1265
|
+
};
|
|
722
1266
|
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
/**
|
|
734
|
-
* Given an element, validate that its props follow the propTypes definition,
|
|
735
|
-
* provided by the type.
|
|
736
|
-
*
|
|
737
|
-
* @param {ReactElement} element
|
|
738
|
-
*/
|
|
1267
|
+
if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {
|
|
1268
|
+
if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
|
|
1269
|
+
scroll = getNodeScroll(offsetParent);
|
|
1270
|
+
}
|
|
739
1271
|
|
|
1272
|
+
if (isHTMLElement(offsetParent)) {
|
|
1273
|
+
const offsetRect = getBoundingClientRect(offsetParent, true);
|
|
1274
|
+
offsets.x = offsetRect.x + offsetParent.clientLeft;
|
|
1275
|
+
offsets.y = offsetRect.y + offsetParent.clientTop;
|
|
1276
|
+
} // This doesn't appear to be need to be negated.
|
|
1277
|
+
// else if (documentElement) {
|
|
1278
|
+
// offsets.x = getWindowScrollBarX(documentElement);
|
|
1279
|
+
// }
|
|
740
1280
|
|
|
741
|
-
|
|
742
|
-
{
|
|
743
|
-
var type = element.type;
|
|
1281
|
+
}
|
|
744
1282
|
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
1283
|
+
return { ...rect,
|
|
1284
|
+
x: rect.x - scroll.scrollLeft + offsets.x,
|
|
1285
|
+
y: rect.y - scroll.scrollTop + offsets.y
|
|
1286
|
+
};
|
|
1287
|
+
}
|
|
748
1288
|
|
|
749
|
-
|
|
1289
|
+
function getViewportRect(element, strategy) {
|
|
1290
|
+
const win = getWindow(element);
|
|
1291
|
+
const html = getDocumentElement(element);
|
|
1292
|
+
const visualViewport = win.visualViewport;
|
|
1293
|
+
let width = html.clientWidth;
|
|
1294
|
+
let height = html.clientHeight;
|
|
1295
|
+
let x = 0;
|
|
1296
|
+
let y = 0;
|
|
750
1297
|
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
type.$$typeof === REACT_MEMO_TYPE)) {
|
|
756
|
-
propTypes = type.propTypes;
|
|
757
|
-
} else {
|
|
758
|
-
return;
|
|
759
|
-
}
|
|
1298
|
+
if (visualViewport) {
|
|
1299
|
+
width = visualViewport.width;
|
|
1300
|
+
height = visualViewport.height;
|
|
1301
|
+
const layoutViewport = isLayoutViewport();
|
|
760
1302
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
|
|
1303
|
+
if (layoutViewport || !layoutViewport && strategy === 'fixed') {
|
|
1304
|
+
x = visualViewport.offsetLeft;
|
|
1305
|
+
y = visualViewport.offsetTop;
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
767
1308
|
|
|
768
|
-
|
|
1309
|
+
return {
|
|
1310
|
+
width,
|
|
1311
|
+
height,
|
|
1312
|
+
x,
|
|
1313
|
+
y
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
769
1316
|
|
|
770
|
-
|
|
771
|
-
}
|
|
1317
|
+
// of the `<html>` and `<body>` rect bounds if horizontally scrollable
|
|
772
1318
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
/**
|
|
779
|
-
* Given a fragment, validate that it can only be provided with fragment props
|
|
780
|
-
* @param {ReactElement} fragment
|
|
781
|
-
*/
|
|
1319
|
+
function getDocumentRect(element) {
|
|
1320
|
+
var _element$ownerDocumen;
|
|
782
1321
|
|
|
1322
|
+
const html = getDocumentElement(element);
|
|
1323
|
+
const scroll = getNodeScroll(element);
|
|
1324
|
+
const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
|
|
1325
|
+
const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
|
|
1326
|
+
const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
|
|
1327
|
+
let x = -scroll.scrollLeft + getWindowScrollBarX(element);
|
|
1328
|
+
const y = -scroll.scrollTop;
|
|
783
1329
|
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
1330
|
+
if (getComputedStyle(body || html).direction === 'rtl') {
|
|
1331
|
+
x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
|
|
1332
|
+
}
|
|
787
1333
|
|
|
788
|
-
|
|
789
|
-
|
|
1334
|
+
return {
|
|
1335
|
+
width,
|
|
1336
|
+
height,
|
|
1337
|
+
x,
|
|
1338
|
+
y
|
|
1339
|
+
};
|
|
1340
|
+
}
|
|
790
1341
|
|
|
791
|
-
|
|
792
|
-
|
|
1342
|
+
function getNearestOverflowAncestor(node) {
|
|
1343
|
+
const parentNode = getParentNode(node);
|
|
793
1344
|
|
|
794
|
-
|
|
1345
|
+
if (isLastTraversableNode(parentNode)) {
|
|
1346
|
+
// @ts-ignore assume body is always available
|
|
1347
|
+
return node.ownerDocument.body;
|
|
1348
|
+
}
|
|
795
1349
|
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
1350
|
+
if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
|
|
1351
|
+
return parentNode;
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
return getNearestOverflowAncestor(parentNode);
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
function getOverflowAncestors(node, list) {
|
|
1358
|
+
var _node$ownerDocument;
|
|
800
1359
|
|
|
801
|
-
|
|
802
|
-
|
|
1360
|
+
if (list === void 0) {
|
|
1361
|
+
list = [];
|
|
1362
|
+
}
|
|
803
1363
|
|
|
804
|
-
|
|
1364
|
+
const scrollableAncestor = getNearestOverflowAncestor(node);
|
|
1365
|
+
const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);
|
|
1366
|
+
const win = getWindow(scrollableAncestor);
|
|
1367
|
+
const target = isBody ? [win].concat(win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []) : scrollableAncestor;
|
|
1368
|
+
const updatedList = list.concat(target);
|
|
1369
|
+
return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here
|
|
1370
|
+
updatedList.concat(getOverflowAncestors(target));
|
|
1371
|
+
}
|
|
805
1372
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
1373
|
+
function getInnerBoundingClientRect(element, strategy) {
|
|
1374
|
+
const clientRect = getBoundingClientRect(element, false, strategy === 'fixed');
|
|
1375
|
+
const top = clientRect.top + element.clientTop;
|
|
1376
|
+
const left = clientRect.left + element.clientLeft;
|
|
1377
|
+
return {
|
|
1378
|
+
top,
|
|
1379
|
+
left,
|
|
1380
|
+
x: left,
|
|
1381
|
+
y: top,
|
|
1382
|
+
right: left + element.clientWidth,
|
|
1383
|
+
bottom: top + element.clientHeight,
|
|
1384
|
+
width: element.clientWidth,
|
|
1385
|
+
height: element.clientHeight
|
|
1386
|
+
};
|
|
1387
|
+
}
|
|
810
1388
|
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
1389
|
+
function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
|
|
1390
|
+
if (clippingAncestor === 'viewport') {
|
|
1391
|
+
return rectToClientRect(getViewportRect(element, strategy));
|
|
1392
|
+
}
|
|
815
1393
|
|
|
816
|
-
|
|
817
|
-
|
|
1394
|
+
if (isElement(clippingAncestor)) {
|
|
1395
|
+
return getInnerBoundingClientRect(clippingAncestor, strategy);
|
|
1396
|
+
}
|
|
818
1397
|
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
1398
|
+
return rectToClientRect(getDocumentRect(getDocumentElement(element)));
|
|
1399
|
+
} // A "clipping ancestor" is an overflowable container with the characteristic of
|
|
1400
|
+
// clipping (or hiding) overflowing elements with a position different from
|
|
1401
|
+
// `initial`
|
|
822
1402
|
|
|
823
|
-
var sourceInfo = getSourceInfoErrorAddendum(source);
|
|
824
1403
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}
|
|
1404
|
+
function getClippingElementAncestors(element) {
|
|
1405
|
+
let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');
|
|
1406
|
+
let currentNode = element;
|
|
1407
|
+
let currentContainingBlockComputedStyle = null; // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
|
830
1408
|
|
|
831
|
-
|
|
1409
|
+
while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
|
|
1410
|
+
const computedStyle = getComputedStyle(currentNode);
|
|
832
1411
|
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
} else {
|
|
841
|
-
typeString = typeof type;
|
|
842
|
-
}
|
|
1412
|
+
if (computedStyle.position === 'static' && currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) && !isContainingBlock(currentNode)) {
|
|
1413
|
+
// Drop non-containing blocks
|
|
1414
|
+
result = result.filter(ancestor => ancestor !== currentNode);
|
|
1415
|
+
} else {
|
|
1416
|
+
// Record last containing block for next iteration
|
|
1417
|
+
currentContainingBlockComputedStyle = computedStyle;
|
|
1418
|
+
}
|
|
843
1419
|
|
|
844
|
-
|
|
845
|
-
|
|
1420
|
+
currentNode = getParentNode(currentNode);
|
|
1421
|
+
}
|
|
846
1422
|
|
|
847
|
-
|
|
848
|
-
|
|
1423
|
+
return result;
|
|
1424
|
+
} // Gets the maximum area that the element is visible in due to any number of
|
|
1425
|
+
// clipping ancestors
|
|
849
1426
|
|
|
850
|
-
if (element == null) {
|
|
851
|
-
return element;
|
|
852
|
-
} // Skip key warning if the type isn't valid since our key validation logic
|
|
853
|
-
// doesn't expect a non-string/function type and can throw confusing errors.
|
|
854
|
-
// We don't want exception behavior to differ between dev and prod.
|
|
855
|
-
// (Rendering will throw with a helpful message and as soon as the type is
|
|
856
|
-
// fixed, the key warnings will appear.)
|
|
857
1427
|
|
|
1428
|
+
function getClippingRect(_ref) {
|
|
1429
|
+
let {
|
|
1430
|
+
element,
|
|
1431
|
+
boundary,
|
|
1432
|
+
rootBoundary,
|
|
1433
|
+
strategy
|
|
1434
|
+
} = _ref;
|
|
1435
|
+
const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element) : [].concat(boundary);
|
|
1436
|
+
const clippingAncestors = [...elementClippingAncestors, rootBoundary];
|
|
1437
|
+
const firstClippingAncestor = clippingAncestors[0];
|
|
1438
|
+
const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
|
|
1439
|
+
const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
|
|
1440
|
+
accRect.top = max(rect.top, accRect.top);
|
|
1441
|
+
accRect.right = min(rect.right, accRect.right);
|
|
1442
|
+
accRect.bottom = min(rect.bottom, accRect.bottom);
|
|
1443
|
+
accRect.left = max(rect.left, accRect.left);
|
|
1444
|
+
return accRect;
|
|
1445
|
+
}, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
|
|
1446
|
+
return {
|
|
1447
|
+
width: clippingRect.right - clippingRect.left,
|
|
1448
|
+
height: clippingRect.bottom - clippingRect.top,
|
|
1449
|
+
x: clippingRect.left,
|
|
1450
|
+
y: clippingRect.top
|
|
1451
|
+
};
|
|
1452
|
+
}
|
|
858
1453
|
|
|
859
|
-
|
|
860
|
-
|
|
1454
|
+
const platform = {
|
|
1455
|
+
getClippingRect,
|
|
1456
|
+
convertOffsetParentRelativeRectToViewportRelativeRect,
|
|
1457
|
+
isElement,
|
|
1458
|
+
getDimensions,
|
|
1459
|
+
getOffsetParent,
|
|
1460
|
+
getDocumentElement,
|
|
1461
|
+
getElementRects: _ref => {
|
|
1462
|
+
let {
|
|
1463
|
+
reference,
|
|
1464
|
+
floating,
|
|
1465
|
+
strategy
|
|
1466
|
+
} = _ref;
|
|
1467
|
+
return {
|
|
1468
|
+
reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy),
|
|
1469
|
+
floating: { ...getDimensions(floating),
|
|
1470
|
+
x: 0,
|
|
1471
|
+
y: 0
|
|
1472
|
+
}
|
|
1473
|
+
};
|
|
1474
|
+
},
|
|
1475
|
+
getClientRects: element => Array.from(element.getClientRects()),
|
|
1476
|
+
isRTL: element => getComputedStyle(element).direction === 'rtl'
|
|
1477
|
+
};
|
|
861
1478
|
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
}
|
|
1479
|
+
/**
|
|
1480
|
+
* Computes the `x` and `y` coordinates that will place the floating element
|
|
1481
|
+
* next to a reference element when it is given a certain CSS positioning
|
|
1482
|
+
* strategy.
|
|
1483
|
+
*/
|
|
868
1484
|
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');
|
|
874
|
-
}
|
|
875
|
-
} else {
|
|
876
|
-
validateChildKeys(children, type);
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
}
|
|
1485
|
+
const computePosition = (reference, floating, options) => computePosition$1(reference, floating, {
|
|
1486
|
+
platform,
|
|
1487
|
+
...options
|
|
1488
|
+
});
|
|
880
1489
|
|
|
881
|
-
|
|
882
|
-
validateFragmentProps(element);
|
|
883
|
-
} else {
|
|
884
|
-
validatePropTypes(element);
|
|
885
|
-
}
|
|
1490
|
+
var jsxRuntime = {exports: {}};
|
|
886
1491
|
|
|
887
|
-
|
|
888
|
-
}
|
|
889
|
-
} // These two functions exist to still get child warnings in dev
|
|
890
|
-
// even with the prod transform. This means that jsxDEV is purely
|
|
891
|
-
// opt-in behavior for better messages but that we won't stop
|
|
892
|
-
// giving you warnings if you use production apis.
|
|
1492
|
+
var reactJsxRuntime_development = {};
|
|
893
1493
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
}
|
|
903
|
-
}
|
|
1494
|
+
/** @license React v16.14.0
|
|
1495
|
+
* react-jsx-runtime.development.js
|
|
1496
|
+
*
|
|
1497
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
1498
|
+
*
|
|
1499
|
+
* This source code is licensed under the MIT license found in the
|
|
1500
|
+
* LICENSE file in the root directory of this source tree.
|
|
1501
|
+
*/
|
|
904
1502
|
|
|
905
|
-
|
|
906
|
-
// for now we can ship identical prod functions
|
|
1503
|
+
(function (exports) {
|
|
907
1504
|
|
|
908
|
-
|
|
1505
|
+
{
|
|
1506
|
+
(function() {
|
|
909
1507
|
|
|
910
|
-
|
|
911
|
-
exports.jsxs = jsxs;
|
|
912
|
-
})();
|
|
913
|
-
}
|
|
914
|
-
} (reactJsxRuntime_development));
|
|
1508
|
+
var React = require$$0;
|
|
915
1509
|
|
|
916
|
-
|
|
1510
|
+
// ATTENTION
|
|
1511
|
+
// When adding new symbols to this file,
|
|
1512
|
+
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
|
|
1513
|
+
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
|
|
1514
|
+
// nor polyfill, then a plain number is used for performance.
|
|
1515
|
+
var REACT_ELEMENT_TYPE = 0xeac7;
|
|
1516
|
+
var REACT_PORTAL_TYPE = 0xeaca;
|
|
1517
|
+
exports.Fragment = 0xeacb;
|
|
1518
|
+
var REACT_STRICT_MODE_TYPE = 0xeacc;
|
|
1519
|
+
var REACT_PROFILER_TYPE = 0xead2;
|
|
1520
|
+
var REACT_PROVIDER_TYPE = 0xeacd;
|
|
1521
|
+
var REACT_CONTEXT_TYPE = 0xeace;
|
|
1522
|
+
var REACT_FORWARD_REF_TYPE = 0xead0;
|
|
1523
|
+
var REACT_SUSPENSE_TYPE = 0xead1;
|
|
1524
|
+
var REACT_SUSPENSE_LIST_TYPE = 0xead8;
|
|
1525
|
+
var REACT_MEMO_TYPE = 0xead3;
|
|
1526
|
+
var REACT_LAZY_TYPE = 0xead4;
|
|
1527
|
+
var REACT_BLOCK_TYPE = 0xead9;
|
|
1528
|
+
var REACT_SERVER_BLOCK_TYPE = 0xeada;
|
|
1529
|
+
var REACT_FUNDAMENTAL_TYPE = 0xead5;
|
|
1530
|
+
var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
|
|
1531
|
+
var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
|
|
917
1532
|
|
|
918
|
-
{
|
|
919
|
-
|
|
1533
|
+
if (typeof Symbol === 'function' && Symbol.for) {
|
|
1534
|
+
var symbolFor = Symbol.for;
|
|
1535
|
+
REACT_ELEMENT_TYPE = symbolFor('react.element');
|
|
1536
|
+
REACT_PORTAL_TYPE = symbolFor('react.portal');
|
|
1537
|
+
exports.Fragment = symbolFor('react.fragment');
|
|
1538
|
+
REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');
|
|
1539
|
+
REACT_PROFILER_TYPE = symbolFor('react.profiler');
|
|
1540
|
+
REACT_PROVIDER_TYPE = symbolFor('react.provider');
|
|
1541
|
+
REACT_CONTEXT_TYPE = symbolFor('react.context');
|
|
1542
|
+
REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
|
|
1543
|
+
REACT_SUSPENSE_TYPE = symbolFor('react.suspense');
|
|
1544
|
+
REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
|
|
1545
|
+
REACT_MEMO_TYPE = symbolFor('react.memo');
|
|
1546
|
+
REACT_LAZY_TYPE = symbolFor('react.lazy');
|
|
1547
|
+
REACT_BLOCK_TYPE = symbolFor('react.block');
|
|
1548
|
+
REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
|
|
1549
|
+
REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
|
|
1550
|
+
symbolFor('react.scope');
|
|
1551
|
+
symbolFor('react.opaque.id');
|
|
1552
|
+
REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
|
|
1553
|
+
symbolFor('react.offscreen');
|
|
1554
|
+
REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
|
|
920
1555
|
}
|
|
921
|
-
} (jsxRuntime));
|
|
922
|
-
|
|
923
|
-
var classnames = {exports: {}};
|
|
924
|
-
|
|
925
|
-
/*!
|
|
926
|
-
Copyright (c) 2018 Jed Watson.
|
|
927
|
-
Licensed under the MIT License (MIT), see
|
|
928
|
-
http://jedwatson.github.io/classnames
|
|
929
|
-
*/
|
|
930
1556
|
|
|
931
|
-
|
|
932
|
-
|
|
1557
|
+
var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
|
|
1558
|
+
var FAUX_ITERATOR_SYMBOL = '@@iterator';
|
|
1559
|
+
function getIteratorFn(maybeIterable) {
|
|
1560
|
+
if (maybeIterable === null || typeof maybeIterable !== 'object') {
|
|
1561
|
+
return null;
|
|
1562
|
+
}
|
|
933
1563
|
|
|
934
|
-
|
|
1564
|
+
var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
|
|
935
1565
|
|
|
936
|
-
|
|
1566
|
+
if (typeof maybeIterator === 'function') {
|
|
1567
|
+
return maybeIterator;
|
|
1568
|
+
}
|
|
937
1569
|
|
|
938
|
-
|
|
939
|
-
|
|
1570
|
+
return null;
|
|
1571
|
+
}
|
|
940
1572
|
|
|
941
|
-
|
|
942
|
-
var arg = arguments[i];
|
|
943
|
-
if (!arg) continue;
|
|
1573
|
+
var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
944
1574
|
|
|
945
|
-
|
|
1575
|
+
function error(format) {
|
|
1576
|
+
{
|
|
1577
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
1578
|
+
args[_key2 - 1] = arguments[_key2];
|
|
1579
|
+
}
|
|
946
1580
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
if (arg.length) {
|
|
951
|
-
var inner = classNames.apply(null, arg);
|
|
952
|
-
if (inner) {
|
|
953
|
-
classes.push(inner);
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
} else if (argType === 'object') {
|
|
957
|
-
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
|
|
958
|
-
classes.push(arg.toString());
|
|
959
|
-
continue;
|
|
960
|
-
}
|
|
1581
|
+
printWarning('error', format, args);
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
961
1584
|
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
}
|
|
1585
|
+
function printWarning(level, format, args) {
|
|
1586
|
+
// When changing this logic, you might want to also
|
|
1587
|
+
// update consoleWithStackDev.www.js as well.
|
|
1588
|
+
{
|
|
1589
|
+
var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
|
|
1590
|
+
var stack = '';
|
|
969
1591
|
|
|
970
|
-
|
|
971
|
-
|
|
1592
|
+
if (currentlyValidatingElement) {
|
|
1593
|
+
var name = getComponentName(currentlyValidatingElement.type);
|
|
1594
|
+
var owner = currentlyValidatingElement._owner;
|
|
1595
|
+
stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));
|
|
1596
|
+
}
|
|
972
1597
|
|
|
973
|
-
|
|
974
|
-
classNames.default = classNames;
|
|
975
|
-
module.exports = classNames;
|
|
976
|
-
} else {
|
|
977
|
-
window.classNames = classNames;
|
|
978
|
-
}
|
|
979
|
-
}());
|
|
980
|
-
} (classnames));
|
|
1598
|
+
stack += ReactDebugCurrentFrame.getStackAddendum();
|
|
981
1599
|
|
|
982
|
-
|
|
1600
|
+
if (stack !== '') {
|
|
1601
|
+
format += '%s';
|
|
1602
|
+
args = args.concat([stack]);
|
|
1603
|
+
}
|
|
983
1604
|
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
* @param { function } func Function to be debounced
|
|
988
|
-
* @param { number } wait Time to wait before execut the function
|
|
989
|
-
* @param { boolean } immediate Param to define if the function will be executed immediately
|
|
990
|
-
*/
|
|
991
|
-
const debounce = (func, wait, immediate) => {
|
|
992
|
-
let timeout = null;
|
|
993
|
-
return function debounced(...args) {
|
|
994
|
-
const later = () => {
|
|
995
|
-
timeout = null;
|
|
996
|
-
if (!immediate) {
|
|
997
|
-
func.apply(this, args);
|
|
998
|
-
}
|
|
999
|
-
};
|
|
1000
|
-
if (timeout) {
|
|
1001
|
-
clearTimeout(timeout);
|
|
1002
|
-
}
|
|
1003
|
-
timeout = setTimeout(later, wait);
|
|
1004
|
-
};
|
|
1005
|
-
};
|
|
1605
|
+
var argsWithFormat = args.map(function (item) {
|
|
1606
|
+
return '' + item;
|
|
1607
|
+
}); // Careful: RN currently depends on this prefix
|
|
1006
1608
|
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1609
|
+
argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
|
|
1610
|
+
// breaks IE9: https://github.com/facebook/react/issues/13610
|
|
1611
|
+
// eslint-disable-next-line react-internal/no-production-logging
|
|
1010
1612
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
activeAnchor: { current: null },
|
|
1015
|
-
attach: () => {
|
|
1016
|
-
/* attach anchor element */
|
|
1017
|
-
},
|
|
1018
|
-
detach: () => {
|
|
1019
|
-
/* detach anchor element */
|
|
1020
|
-
},
|
|
1021
|
-
setActiveAnchor: () => {
|
|
1022
|
-
/* set active anchor */
|
|
1023
|
-
},
|
|
1024
|
-
};
|
|
1025
|
-
const DEFAULT_CONTEXT_DATA_WRAPPER = {
|
|
1026
|
-
getTooltipData: () => DEFAULT_CONTEXT_DATA,
|
|
1027
|
-
};
|
|
1028
|
-
const TooltipContext = createContext(DEFAULT_CONTEXT_DATA_WRAPPER);
|
|
1029
|
-
const TooltipProvider = ({ children }) => {
|
|
1030
|
-
const [anchorRefMap, setAnchorRefMap] = useState({
|
|
1031
|
-
[DEFAULT_TOOLTIP_ID]: new Set(),
|
|
1032
|
-
});
|
|
1033
|
-
const [activeAnchorMap, setActiveAnchorMap] = useState({
|
|
1034
|
-
[DEFAULT_TOOLTIP_ID]: { current: null },
|
|
1035
|
-
});
|
|
1036
|
-
const attach = (tooltipId, ...refs) => {
|
|
1037
|
-
setAnchorRefMap((oldMap) => {
|
|
1038
|
-
var _a;
|
|
1039
|
-
const tooltipRefs = (_a = oldMap[tooltipId]) !== null && _a !== void 0 ? _a : new Set();
|
|
1040
|
-
refs.forEach((ref) => tooltipRefs.add(ref));
|
|
1041
|
-
// create new object to trigger re-render
|
|
1042
|
-
return { ...oldMap, [tooltipId]: new Set(tooltipRefs) };
|
|
1043
|
-
});
|
|
1044
|
-
};
|
|
1045
|
-
const detach = (tooltipId, ...refs) => {
|
|
1046
|
-
setAnchorRefMap((oldMap) => {
|
|
1047
|
-
const tooltipRefs = oldMap[tooltipId];
|
|
1048
|
-
if (!tooltipRefs) {
|
|
1049
|
-
// tooltip not found
|
|
1050
|
-
// maybe thow error?
|
|
1051
|
-
return oldMap;
|
|
1052
|
-
}
|
|
1053
|
-
refs.forEach((ref) => tooltipRefs.delete(ref));
|
|
1054
|
-
// create new object to trigger re-render
|
|
1055
|
-
return { ...oldMap };
|
|
1056
|
-
});
|
|
1057
|
-
};
|
|
1058
|
-
const setActiveAnchor = (tooltipId, ref) => {
|
|
1059
|
-
setActiveAnchorMap((oldMap) => {
|
|
1060
|
-
var _a;
|
|
1061
|
-
if (((_a = oldMap[tooltipId]) === null || _a === void 0 ? void 0 : _a.current) === ref.current) {
|
|
1062
|
-
return oldMap;
|
|
1063
|
-
}
|
|
1064
|
-
// create new object to trigger re-render
|
|
1065
|
-
return { ...oldMap, [tooltipId]: ref };
|
|
1066
|
-
});
|
|
1067
|
-
};
|
|
1068
|
-
const getTooltipData = useCallback((tooltipId = DEFAULT_TOOLTIP_ID) => {
|
|
1069
|
-
var _a, _b;
|
|
1070
|
-
return ({
|
|
1071
|
-
anchorRefs: (_a = anchorRefMap[tooltipId]) !== null && _a !== void 0 ? _a : new Set(),
|
|
1072
|
-
activeAnchor: (_b = activeAnchorMap[tooltipId]) !== null && _b !== void 0 ? _b : { current: null },
|
|
1073
|
-
attach: (...refs) => attach(tooltipId, ...refs),
|
|
1074
|
-
detach: (...refs) => detach(tooltipId, ...refs),
|
|
1075
|
-
setActiveAnchor: (ref) => setActiveAnchor(tooltipId, ref),
|
|
1076
|
-
});
|
|
1077
|
-
}, [anchorRefMap, activeAnchorMap, attach, detach]);
|
|
1078
|
-
const context = useMemo(() => {
|
|
1079
|
-
return {
|
|
1080
|
-
getTooltipData,
|
|
1081
|
-
};
|
|
1082
|
-
}, [getTooltipData]);
|
|
1083
|
-
return jsxRuntime.exports.jsx(TooltipContext.Provider, { value: context, children: children });
|
|
1084
|
-
};
|
|
1085
|
-
function useTooltip(tooltipId = DEFAULT_TOOLTIP_ID) {
|
|
1086
|
-
return useContext(TooltipContext).getTooltipData(tooltipId);
|
|
1087
|
-
}
|
|
1613
|
+
Function.prototype.apply.call(console[level], console, argsWithFormat);
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1088
1616
|
|
|
1089
|
-
|
|
1090
|
-
const { attach, detach } = useTooltip(tooltipId);
|
|
1091
|
-
const anchorRef = useRef(null);
|
|
1092
|
-
useEffect(() => {
|
|
1093
|
-
attach(anchorRef);
|
|
1094
|
-
return () => {
|
|
1095
|
-
detach(anchorRef);
|
|
1096
|
-
};
|
|
1097
|
-
}, []);
|
|
1098
|
-
return (jsxRuntime.exports.jsx("span", { ref: anchorRef, className: classNames('react-tooltip-wrapper', className), "data-tooltip-place": place, "data-tooltip-content": content, "data-tooltip-html": html, "data-tooltip-variant": variant, "data-tooltip-offset": offset, "data-tooltip-wrapper": wrapper, "data-tooltip-events": events, "data-tooltip-position-strategy": positionStrategy, "data-tooltip-delay-show": delayShow, "data-tooltip-delay-hide": delayHide, children: children }));
|
|
1099
|
-
};
|
|
1617
|
+
// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.
|
|
1100
1618
|
|
|
1101
|
-
|
|
1102
|
-
return placement.split('-')[0];
|
|
1103
|
-
}
|
|
1619
|
+
var enableScopeAPI = false; // Experimental Create Event Handle API.
|
|
1104
1620
|
|
|
1105
|
-
function
|
|
1106
|
-
|
|
1107
|
-
|
|
1621
|
+
function isValidElementType(type) {
|
|
1622
|
+
if (typeof type === 'string' || typeof type === 'function') {
|
|
1623
|
+
return true;
|
|
1624
|
+
} // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
|
|
1108
1625
|
|
|
1109
|
-
function getMainAxisFromPlacement(placement) {
|
|
1110
|
-
return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';
|
|
1111
|
-
}
|
|
1112
1626
|
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
}
|
|
1627
|
+
if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {
|
|
1628
|
+
return true;
|
|
1629
|
+
}
|
|
1116
1630
|
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
const commonX = reference.x + reference.width / 2 - floating.width / 2;
|
|
1123
|
-
const commonY = reference.y + reference.height / 2 - floating.height / 2;
|
|
1124
|
-
const mainAxis = getMainAxisFromPlacement(placement);
|
|
1125
|
-
const length = getLengthFromAxis(mainAxis);
|
|
1126
|
-
const commonAlign = reference[length] / 2 - floating[length] / 2;
|
|
1127
|
-
const side = getSide(placement);
|
|
1128
|
-
const isVertical = mainAxis === 'x';
|
|
1129
|
-
let coords;
|
|
1631
|
+
if (typeof type === 'object' && type !== null) {
|
|
1632
|
+
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {
|
|
1633
|
+
return true;
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1130
1636
|
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
coords = {
|
|
1134
|
-
x: commonX,
|
|
1135
|
-
y: reference.y - floating.height
|
|
1136
|
-
};
|
|
1137
|
-
break;
|
|
1637
|
+
return false;
|
|
1638
|
+
}
|
|
1138
1639
|
|
|
1139
|
-
case 'bottom':
|
|
1140
|
-
coords = {
|
|
1141
|
-
x: commonX,
|
|
1142
|
-
y: reference.y + reference.height
|
|
1143
|
-
};
|
|
1144
|
-
break;
|
|
1145
1640
|
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
y: commonY
|
|
1150
|
-
};
|
|
1151
|
-
break;
|
|
1641
|
+
var BEFORE_SLASH_RE = /^(.*)[\\\/]/;
|
|
1642
|
+
function describeComponentFrame (name, source, ownerName) {
|
|
1643
|
+
var sourceInfo = '';
|
|
1152
1644
|
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
y: commonY
|
|
1157
|
-
};
|
|
1158
|
-
break;
|
|
1645
|
+
if (source) {
|
|
1646
|
+
var path = source.fileName;
|
|
1647
|
+
var fileName = path.replace(BEFORE_SLASH_RE, '');
|
|
1159
1648
|
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
}
|
|
1649
|
+
{
|
|
1650
|
+
// In DEV, include code for a common special case:
|
|
1651
|
+
// prefer "folder/index.js" instead of just "index.js".
|
|
1652
|
+
if (/^index\./.test(fileName)) {
|
|
1653
|
+
var match = path.match(BEFORE_SLASH_RE);
|
|
1166
1654
|
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
|
|
1170
|
-
break;
|
|
1655
|
+
if (match) {
|
|
1656
|
+
var pathBeforeSlash = match[1];
|
|
1171
1657
|
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1658
|
+
if (pathBeforeSlash) {
|
|
1659
|
+
var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');
|
|
1660
|
+
fileName = folderName + '/' + fileName;
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1176
1665
|
|
|
1177
|
-
|
|
1178
|
-
}
|
|
1666
|
+
sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';
|
|
1667
|
+
} else if (ownerName) {
|
|
1668
|
+
sourceInfo = ' (created by ' + ownerName + ')';
|
|
1669
|
+
}
|
|
1179
1670
|
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
* next to a reference element when it is given a certain positioning strategy.
|
|
1183
|
-
*
|
|
1184
|
-
* This export does not have any `platform` interface logic. You will need to
|
|
1185
|
-
* write one for the platform you are using Floating UI with.
|
|
1186
|
-
*/
|
|
1671
|
+
return '\n in ' + (name || 'Unknown') + sourceInfo;
|
|
1672
|
+
}
|
|
1187
1673
|
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
middleware = [],
|
|
1193
|
-
platform
|
|
1194
|
-
} = config;
|
|
1195
|
-
const validMiddleware = middleware.filter(Boolean);
|
|
1196
|
-
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
|
|
1674
|
+
var Resolved = 1;
|
|
1675
|
+
function refineResolvedLazyComponent(lazyComponent) {
|
|
1676
|
+
return lazyComponent._status === Resolved ? lazyComponent._result : null;
|
|
1677
|
+
}
|
|
1197
1678
|
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1679
|
+
function getWrappedName(outerType, innerType, wrapperName) {
|
|
1680
|
+
var functionName = innerType.displayName || innerType.name || '';
|
|
1681
|
+
return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
|
|
1682
|
+
}
|
|
1202
1683
|
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
}).length > 1) {
|
|
1209
|
-
throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement` middleware', 'detected. This will lead to an infinite loop. Ensure only one of', 'either has been passed to the `middleware` array.'].join(' '));
|
|
1210
|
-
}
|
|
1684
|
+
function getComponentName(type) {
|
|
1685
|
+
if (type == null) {
|
|
1686
|
+
// Host root, text node or just invalid type.
|
|
1687
|
+
return null;
|
|
1688
|
+
}
|
|
1211
1689
|
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1690
|
+
{
|
|
1691
|
+
if (typeof type.tag === 'number') {
|
|
1692
|
+
error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1216
1695
|
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
strategy
|
|
1221
|
-
});
|
|
1222
|
-
let {
|
|
1223
|
-
x,
|
|
1224
|
-
y
|
|
1225
|
-
} = computeCoordsFromPlacement(rects, placement, rtl);
|
|
1226
|
-
let statefulPlacement = placement;
|
|
1227
|
-
let middlewareData = {};
|
|
1228
|
-
let resetCount = 0;
|
|
1696
|
+
if (typeof type === 'function') {
|
|
1697
|
+
return type.displayName || type.name || null;
|
|
1698
|
+
}
|
|
1229
1699
|
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
fn
|
|
1234
|
-
} = validMiddleware[i];
|
|
1235
|
-
const {
|
|
1236
|
-
x: nextX,
|
|
1237
|
-
y: nextY,
|
|
1238
|
-
data,
|
|
1239
|
-
reset
|
|
1240
|
-
} = await fn({
|
|
1241
|
-
x,
|
|
1242
|
-
y,
|
|
1243
|
-
initialPlacement: placement,
|
|
1244
|
-
placement: statefulPlacement,
|
|
1245
|
-
strategy,
|
|
1246
|
-
middlewareData,
|
|
1247
|
-
rects,
|
|
1248
|
-
platform,
|
|
1249
|
-
elements: {
|
|
1250
|
-
reference,
|
|
1251
|
-
floating
|
|
1252
|
-
}
|
|
1253
|
-
});
|
|
1254
|
-
x = nextX != null ? nextX : x;
|
|
1255
|
-
y = nextY != null ? nextY : y;
|
|
1256
|
-
middlewareData = { ...middlewareData,
|
|
1257
|
-
[name]: { ...middlewareData[name],
|
|
1258
|
-
...data
|
|
1259
|
-
}
|
|
1260
|
-
};
|
|
1700
|
+
if (typeof type === 'string') {
|
|
1701
|
+
return type;
|
|
1702
|
+
}
|
|
1261
1703
|
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
}
|
|
1266
|
-
}
|
|
1704
|
+
switch (type) {
|
|
1705
|
+
case exports.Fragment:
|
|
1706
|
+
return 'Fragment';
|
|
1267
1707
|
|
|
1268
|
-
|
|
1269
|
-
|
|
1708
|
+
case REACT_PORTAL_TYPE:
|
|
1709
|
+
return 'Portal';
|
|
1270
1710
|
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
statefulPlacement = reset.placement;
|
|
1274
|
-
}
|
|
1711
|
+
case REACT_PROFILER_TYPE:
|
|
1712
|
+
return "Profiler";
|
|
1275
1713
|
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
reference,
|
|
1279
|
-
floating,
|
|
1280
|
-
strategy
|
|
1281
|
-
}) : reset.rects;
|
|
1282
|
-
}
|
|
1714
|
+
case REACT_STRICT_MODE_TYPE:
|
|
1715
|
+
return 'StrictMode';
|
|
1283
1716
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
y
|
|
1287
|
-
} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
|
|
1288
|
-
}
|
|
1717
|
+
case REACT_SUSPENSE_TYPE:
|
|
1718
|
+
return 'Suspense';
|
|
1289
1719
|
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
}
|
|
1720
|
+
case REACT_SUSPENSE_LIST_TYPE:
|
|
1721
|
+
return 'SuspenseList';
|
|
1722
|
+
}
|
|
1294
1723
|
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
strategy,
|
|
1300
|
-
middlewareData
|
|
1301
|
-
};
|
|
1302
|
-
};
|
|
1724
|
+
if (typeof type === 'object') {
|
|
1725
|
+
switch (type.$$typeof) {
|
|
1726
|
+
case REACT_CONTEXT_TYPE:
|
|
1727
|
+
return 'Context.Consumer';
|
|
1303
1728
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
top: 0,
|
|
1307
|
-
right: 0,
|
|
1308
|
-
bottom: 0,
|
|
1309
|
-
left: 0,
|
|
1310
|
-
...padding
|
|
1311
|
-
};
|
|
1312
|
-
}
|
|
1729
|
+
case REACT_PROVIDER_TYPE:
|
|
1730
|
+
return 'Context.Provider';
|
|
1313
1731
|
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1732
|
+
case REACT_FORWARD_REF_TYPE:
|
|
1733
|
+
return getWrappedName(type, type.render, 'ForwardRef');
|
|
1734
|
+
|
|
1735
|
+
case REACT_MEMO_TYPE:
|
|
1736
|
+
return getComponentName(type.type);
|
|
1737
|
+
|
|
1738
|
+
case REACT_BLOCK_TYPE:
|
|
1739
|
+
return getComponentName(type.render);
|
|
1740
|
+
|
|
1741
|
+
case REACT_LAZY_TYPE:
|
|
1742
|
+
{
|
|
1743
|
+
var thenable = type;
|
|
1744
|
+
var resolvedThenable = refineResolvedLazyComponent(thenable);
|
|
1322
1745
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
left: rect.x,
|
|
1327
|
-
right: rect.x + rect.width,
|
|
1328
|
-
bottom: rect.y + rect.height
|
|
1329
|
-
};
|
|
1330
|
-
}
|
|
1746
|
+
if (resolvedThenable) {
|
|
1747
|
+
return getComponentName(resolvedThenable);
|
|
1748
|
+
}
|
|
1331
1749
|
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
* - negative = how many pixels left before it will overflow
|
|
1337
|
-
* - 0 = lies flush with the boundary
|
|
1338
|
-
* @see https://floating-ui.com/docs/detectOverflow
|
|
1339
|
-
*/
|
|
1340
|
-
async function detectOverflow(middlewareArguments, options) {
|
|
1341
|
-
var _await$platform$isEle;
|
|
1750
|
+
break;
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1342
1754
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
}
|
|
1755
|
+
return null;
|
|
1756
|
+
}
|
|
1346
1757
|
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
platform,
|
|
1351
|
-
rects,
|
|
1352
|
-
elements,
|
|
1353
|
-
strategy
|
|
1354
|
-
} = middlewareArguments;
|
|
1355
|
-
const {
|
|
1356
|
-
boundary = 'clippingAncestors',
|
|
1357
|
-
rootBoundary = 'viewport',
|
|
1358
|
-
elementContext = 'floating',
|
|
1359
|
-
altBoundary = false,
|
|
1360
|
-
padding = 0
|
|
1361
|
-
} = options;
|
|
1362
|
-
const paddingObject = getSideObjectFromPadding(padding);
|
|
1363
|
-
const altContext = elementContext === 'floating' ? 'reference' : 'floating';
|
|
1364
|
-
const element = elements[altBoundary ? altContext : elementContext];
|
|
1365
|
-
const clippingClientRect = rectToClientRect(await platform.getClippingRect({
|
|
1366
|
-
element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),
|
|
1367
|
-
boundary,
|
|
1368
|
-
rootBoundary,
|
|
1369
|
-
strategy
|
|
1370
|
-
}));
|
|
1371
|
-
const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
|
|
1372
|
-
rect: elementContext === 'floating' ? { ...rects.floating,
|
|
1373
|
-
x,
|
|
1374
|
-
y
|
|
1375
|
-
} : rects.reference,
|
|
1376
|
-
offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),
|
|
1377
|
-
strategy
|
|
1378
|
-
}) : rects[elementContext]);
|
|
1379
|
-
return {
|
|
1380
|
-
top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
|
|
1381
|
-
bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
|
|
1382
|
-
left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
|
|
1383
|
-
right: elementClientRect.right - clippingClientRect.right + paddingObject.right
|
|
1384
|
-
};
|
|
1385
|
-
}
|
|
1758
|
+
var loggedTypeFailures = {};
|
|
1759
|
+
ReactSharedInternals.ReactDebugCurrentFrame;
|
|
1760
|
+
var currentlyValidatingElement = null;
|
|
1386
1761
|
|
|
1387
|
-
|
|
1388
|
-
|
|
1762
|
+
function setCurrentlyValidatingElement(element) {
|
|
1763
|
+
{
|
|
1764
|
+
currentlyValidatingElement = element;
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1389
1767
|
|
|
1390
|
-
function
|
|
1391
|
-
|
|
1392
|
-
|
|
1768
|
+
function checkPropTypes(typeSpecs, values, location, componentName, element) {
|
|
1769
|
+
{
|
|
1770
|
+
// $FlowFixMe This is okay but Flow doesn't know it.
|
|
1771
|
+
var has = Function.call.bind(Object.prototype.hasOwnProperty);
|
|
1393
1772
|
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
const arrow = options => ({
|
|
1400
|
-
name: 'arrow',
|
|
1401
|
-
options,
|
|
1773
|
+
for (var typeSpecName in typeSpecs) {
|
|
1774
|
+
if (has(typeSpecs, typeSpecName)) {
|
|
1775
|
+
var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
|
|
1776
|
+
// fail the render phase where it didn't fail before. So we log it.
|
|
1777
|
+
// After these have been cleaned up, we'll let them throw.
|
|
1402
1778
|
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
y,
|
|
1412
|
-
placement,
|
|
1413
|
-
rects,
|
|
1414
|
-
platform
|
|
1415
|
-
} = middlewareArguments;
|
|
1779
|
+
try {
|
|
1780
|
+
// This is intentionally an invariant that gets caught. It's the same
|
|
1781
|
+
// behavior as without this statement except with a better message.
|
|
1782
|
+
if (typeof typeSpecs[typeSpecName] !== 'function') {
|
|
1783
|
+
var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
|
|
1784
|
+
err.name = 'Invariant Violation';
|
|
1785
|
+
throw err;
|
|
1786
|
+
}
|
|
1416
1787
|
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1788
|
+
error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
|
|
1789
|
+
} catch (ex) {
|
|
1790
|
+
error$1 = ex;
|
|
1791
|
+
}
|
|
1421
1792
|
|
|
1422
|
-
|
|
1423
|
-
|
|
1793
|
+
if (error$1 && !(error$1 instanceof Error)) {
|
|
1794
|
+
setCurrentlyValidatingElement(element);
|
|
1424
1795
|
|
|
1425
|
-
|
|
1426
|
-
const coords = {
|
|
1427
|
-
x,
|
|
1428
|
-
y
|
|
1429
|
-
};
|
|
1430
|
-
const axis = getMainAxisFromPlacement(placement);
|
|
1431
|
-
const alignment = getAlignment(placement);
|
|
1432
|
-
const length = getLengthFromAxis(axis);
|
|
1433
|
-
const arrowDimensions = await platform.getDimensions(element);
|
|
1434
|
-
const minProp = axis === 'y' ? 'top' : 'left';
|
|
1435
|
-
const maxProp = axis === 'y' ? 'bottom' : 'right';
|
|
1436
|
-
const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
|
|
1437
|
-
const startDiff = coords[axis] - rects.reference[axis];
|
|
1438
|
-
const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
|
|
1439
|
-
let clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
|
|
1796
|
+
error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
|
|
1440
1797
|
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
}
|
|
1798
|
+
setCurrentlyValidatingElement(null);
|
|
1799
|
+
}
|
|
1444
1800
|
|
|
1445
|
-
|
|
1446
|
-
|
|
1801
|
+
if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
|
|
1802
|
+
// Only monitor this failure once because there tends to be a lot of the
|
|
1803
|
+
// same error.
|
|
1804
|
+
loggedTypeFailures[error$1.message] = true;
|
|
1805
|
+
setCurrentlyValidatingElement(element);
|
|
1447
1806
|
|
|
1448
|
-
|
|
1449
|
-
const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];
|
|
1450
|
-
const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
|
|
1451
|
-
const offset = within(min, center, max); // Make sure that arrow points at the reference
|
|
1807
|
+
error('Failed %s type: %s', location, error$1.message);
|
|
1452
1808
|
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
[axis]: offset,
|
|
1460
|
-
centerOffset: center - offset
|
|
1461
|
-
}
|
|
1462
|
-
};
|
|
1463
|
-
}
|
|
1809
|
+
setCurrentlyValidatingElement(null);
|
|
1810
|
+
}
|
|
1811
|
+
}
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1464
1815
|
|
|
1465
|
-
|
|
1816
|
+
var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
|
|
1817
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
1818
|
+
var RESERVED_PROPS = {
|
|
1819
|
+
key: true,
|
|
1820
|
+
ref: true,
|
|
1821
|
+
__self: true,
|
|
1822
|
+
__source: true
|
|
1823
|
+
};
|
|
1824
|
+
var specialPropKeyWarningShown;
|
|
1825
|
+
var specialPropRefWarningShown;
|
|
1826
|
+
var didWarnAboutStringRefs;
|
|
1466
1827
|
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
bottom: 'top',
|
|
1471
|
-
top: 'bottom'
|
|
1472
|
-
};
|
|
1473
|
-
function getOppositePlacement(placement) {
|
|
1474
|
-
return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]);
|
|
1475
|
-
}
|
|
1828
|
+
{
|
|
1829
|
+
didWarnAboutStringRefs = {};
|
|
1830
|
+
}
|
|
1476
1831
|
|
|
1477
|
-
function
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1832
|
+
function hasValidRef(config) {
|
|
1833
|
+
{
|
|
1834
|
+
if (hasOwnProperty.call(config, 'ref')) {
|
|
1835
|
+
var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
|
|
1481
1836
|
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1837
|
+
if (getter && getter.isReactWarning) {
|
|
1838
|
+
return false;
|
|
1839
|
+
}
|
|
1840
|
+
}
|
|
1841
|
+
}
|
|
1486
1842
|
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
}
|
|
1843
|
+
return config.ref !== undefined;
|
|
1844
|
+
}
|
|
1490
1845
|
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
}
|
|
1846
|
+
function hasValidKey(config) {
|
|
1847
|
+
{
|
|
1848
|
+
if (hasOwnProperty.call(config, 'key')) {
|
|
1849
|
+
var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
|
|
1496
1850
|
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
}
|
|
1501
|
-
|
|
1502
|
-
return placement.replace(/start|end/g, matched => hash[matched]);
|
|
1503
|
-
}
|
|
1851
|
+
if (getter && getter.isReactWarning) {
|
|
1852
|
+
return false;
|
|
1853
|
+
}
|
|
1854
|
+
}
|
|
1855
|
+
}
|
|
1504
1856
|
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
|
|
1508
|
-
}
|
|
1857
|
+
return config.key !== undefined;
|
|
1858
|
+
}
|
|
1509
1859
|
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
*/
|
|
1515
|
-
const flip = function (options) {
|
|
1516
|
-
if (options === void 0) {
|
|
1517
|
-
options = {};
|
|
1518
|
-
}
|
|
1860
|
+
function warnIfStringRefCannotBeAutoConverted(config, self) {
|
|
1861
|
+
{
|
|
1862
|
+
if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {
|
|
1863
|
+
var componentName = getComponentName(ReactCurrentOwner.current.type);
|
|
1519
1864
|
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
options,
|
|
1865
|
+
if (!didWarnAboutStringRefs[componentName]) {
|
|
1866
|
+
error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);
|
|
1523
1867
|
|
|
1524
|
-
|
|
1525
|
-
|
|
1868
|
+
didWarnAboutStringRefs[componentName] = true;
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1526
1873
|
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
platform,
|
|
1533
|
-
elements
|
|
1534
|
-
} = middlewareArguments;
|
|
1535
|
-
const {
|
|
1536
|
-
mainAxis: checkMainAxis = true,
|
|
1537
|
-
crossAxis: checkCrossAxis = true,
|
|
1538
|
-
fallbackPlacements: specifiedFallbackPlacements,
|
|
1539
|
-
fallbackStrategy = 'bestFit',
|
|
1540
|
-
flipAlignment = true,
|
|
1541
|
-
...detectOverflowOptions
|
|
1542
|
-
} = options;
|
|
1543
|
-
const side = getSide(placement);
|
|
1544
|
-
const isBasePlacement = side === initialPlacement;
|
|
1545
|
-
const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
|
|
1546
|
-
const placements = [initialPlacement, ...fallbackPlacements];
|
|
1547
|
-
const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);
|
|
1548
|
-
const overflows = [];
|
|
1549
|
-
let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
|
|
1874
|
+
function defineKeyPropWarningGetter(props, displayName) {
|
|
1875
|
+
{
|
|
1876
|
+
var warnAboutAccessingKey = function () {
|
|
1877
|
+
if (!specialPropKeyWarningShown) {
|
|
1878
|
+
specialPropKeyWarningShown = true;
|
|
1550
1879
|
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1880
|
+
error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
|
|
1881
|
+
}
|
|
1882
|
+
};
|
|
1554
1883
|
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1884
|
+
warnAboutAccessingKey.isReactWarning = true;
|
|
1885
|
+
Object.defineProperty(props, 'key', {
|
|
1886
|
+
get: warnAboutAccessingKey,
|
|
1887
|
+
configurable: true
|
|
1888
|
+
});
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1562
1891
|
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1892
|
+
function defineRefPropWarningGetter(props, displayName) {
|
|
1893
|
+
{
|
|
1894
|
+
var warnAboutAccessingRef = function () {
|
|
1895
|
+
if (!specialPropRefWarningShown) {
|
|
1896
|
+
specialPropRefWarningShown = true;
|
|
1567
1897
|
|
|
1568
|
-
|
|
1569
|
-
|
|
1898
|
+
error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
|
|
1899
|
+
}
|
|
1900
|
+
};
|
|
1570
1901
|
|
|
1571
|
-
|
|
1572
|
-
|
|
1902
|
+
warnAboutAccessingRef.isReactWarning = true;
|
|
1903
|
+
Object.defineProperty(props, 'ref', {
|
|
1904
|
+
get: warnAboutAccessingRef,
|
|
1905
|
+
configurable: true
|
|
1906
|
+
});
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
/**
|
|
1910
|
+
* Factory method to create a new React element. This no longer adheres to
|
|
1911
|
+
* the class pattern, so do not use new to call it. Also, instanceof check
|
|
1912
|
+
* will not work. Instead test $$typeof field against Symbol.for('react.element') to check
|
|
1913
|
+
* if something is a React Element.
|
|
1914
|
+
*
|
|
1915
|
+
* @param {*} type
|
|
1916
|
+
* @param {*} props
|
|
1917
|
+
* @param {*} key
|
|
1918
|
+
* @param {string|object} ref
|
|
1919
|
+
* @param {*} owner
|
|
1920
|
+
* @param {*} self A *temporary* helper to detect places where `this` is
|
|
1921
|
+
* different from the `owner` when React.createElement is called, so that we
|
|
1922
|
+
* can warn. We want to get rid of owner and replace string `ref`s with arrow
|
|
1923
|
+
* functions, and as long as `this` and owner are the same, there will be no
|
|
1924
|
+
* change in behavior.
|
|
1925
|
+
* @param {*} source An annotation object (added by a transpiler or otherwise)
|
|
1926
|
+
* indicating filename, line number, and/or other information.
|
|
1927
|
+
* @internal
|
|
1928
|
+
*/
|
|
1573
1929
|
|
|
1574
|
-
if (nextPlacement) {
|
|
1575
|
-
// Try next placement and re-run the lifecycle
|
|
1576
|
-
return {
|
|
1577
|
-
data: {
|
|
1578
|
-
index: nextIndex,
|
|
1579
|
-
overflows: overflowsData
|
|
1580
|
-
},
|
|
1581
|
-
reset: {
|
|
1582
|
-
placement: nextPlacement
|
|
1583
|
-
}
|
|
1584
|
-
};
|
|
1585
|
-
}
|
|
1586
1930
|
|
|
1587
|
-
|
|
1931
|
+
var ReactElement = function (type, key, ref, self, source, owner, props) {
|
|
1932
|
+
var element = {
|
|
1933
|
+
// This tag allows us to uniquely identify this as a React Element
|
|
1934
|
+
$$typeof: REACT_ELEMENT_TYPE,
|
|
1935
|
+
// Built-in properties that belong on the element
|
|
1936
|
+
type: type,
|
|
1937
|
+
key: key,
|
|
1938
|
+
ref: ref,
|
|
1939
|
+
props: props,
|
|
1940
|
+
// Record the component responsible for creating this element.
|
|
1941
|
+
_owner: owner
|
|
1942
|
+
};
|
|
1588
1943
|
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1944
|
+
{
|
|
1945
|
+
// The validation flag is currently mutative. We put it on
|
|
1946
|
+
// an external backing store so that we can freeze the whole object.
|
|
1947
|
+
// This can be replaced with a WeakMap once they are implemented in
|
|
1948
|
+
// commonly used development environments.
|
|
1949
|
+
element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
|
|
1950
|
+
// the validation flag non-enumerable (where possible, which should
|
|
1951
|
+
// include every environment we run tests in), so the test framework
|
|
1952
|
+
// ignores it.
|
|
1593
1953
|
|
|
1594
|
-
|
|
1954
|
+
Object.defineProperty(element._store, 'validated', {
|
|
1955
|
+
configurable: false,
|
|
1956
|
+
enumerable: false,
|
|
1957
|
+
writable: true,
|
|
1958
|
+
value: false
|
|
1959
|
+
}); // self and source are DEV only properties.
|
|
1595
1960
|
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1961
|
+
Object.defineProperty(element, '_self', {
|
|
1962
|
+
configurable: false,
|
|
1963
|
+
enumerable: false,
|
|
1964
|
+
writable: false,
|
|
1965
|
+
value: self
|
|
1966
|
+
}); // Two elements created in two different places should be considered
|
|
1967
|
+
// equal for testing purposes and therefore we hide it from enumeration.
|
|
1599
1968
|
|
|
1600
|
-
|
|
1601
|
-
|
|
1969
|
+
Object.defineProperty(element, '_source', {
|
|
1970
|
+
configurable: false,
|
|
1971
|
+
enumerable: false,
|
|
1972
|
+
writable: false,
|
|
1973
|
+
value: source
|
|
1974
|
+
});
|
|
1602
1975
|
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1976
|
+
if (Object.freeze) {
|
|
1977
|
+
Object.freeze(element.props);
|
|
1978
|
+
Object.freeze(element);
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1607
1981
|
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1982
|
+
return element;
|
|
1983
|
+
};
|
|
1984
|
+
/**
|
|
1985
|
+
* https://github.com/reactjs/rfcs/pull/107
|
|
1986
|
+
* @param {*} type
|
|
1987
|
+
* @param {object} props
|
|
1988
|
+
* @param {string} key
|
|
1989
|
+
*/
|
|
1616
1990
|
|
|
1617
|
-
|
|
1618
|
-
|
|
1991
|
+
function jsxDEV(type, config, maybeKey, source, self) {
|
|
1992
|
+
{
|
|
1993
|
+
var propName; // Reserved names are extracted
|
|
1619
1994
|
|
|
1620
|
-
|
|
1621
|
-
|
|
1995
|
+
var props = {};
|
|
1996
|
+
var key = null;
|
|
1997
|
+
var ref = null; // Currently, key can be spread in as a prop. This causes a potential
|
|
1998
|
+
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" />
|
|
1999
|
+
// or <div key="Hi" {...props} /> ). We want to deprecate key spread,
|
|
2000
|
+
// but as an intermediary step, we will use jsxDEV for everything except
|
|
2001
|
+
// <div {...props} key="Hi" />, because we aren't currently able to tell if
|
|
2002
|
+
// key is explicitly declared to be undefined or not.
|
|
1622
2003
|
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
platform,
|
|
1627
|
-
elements
|
|
1628
|
-
} = middlewareArguments;
|
|
1629
|
-
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
|
|
1630
|
-
const side = getSide(placement);
|
|
1631
|
-
const alignment = getAlignment(placement);
|
|
1632
|
-
const isVertical = getMainAxisFromPlacement(placement) === 'x';
|
|
1633
|
-
const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
|
|
1634
|
-
const crossAxisMulti = rtl && isVertical ? -1 : 1;
|
|
1635
|
-
const rawValue = typeof value === 'function' ? value(middlewareArguments) : value; // eslint-disable-next-line prefer-const
|
|
2004
|
+
if (maybeKey !== undefined) {
|
|
2005
|
+
key = '' + maybeKey;
|
|
2006
|
+
}
|
|
1636
2007
|
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
} : {
|
|
1646
|
-
mainAxis: 0,
|
|
1647
|
-
crossAxis: 0,
|
|
1648
|
-
alignmentAxis: null,
|
|
1649
|
-
...rawValue
|
|
1650
|
-
};
|
|
2008
|
+
if (hasValidKey(config)) {
|
|
2009
|
+
key = '' + config.key;
|
|
2010
|
+
}
|
|
2011
|
+
|
|
2012
|
+
if (hasValidRef(config)) {
|
|
2013
|
+
ref = config.ref;
|
|
2014
|
+
warnIfStringRefCannotBeAutoConverted(config, self);
|
|
2015
|
+
} // Remaining properties are added to a new props object
|
|
1651
2016
|
|
|
1652
|
-
if (alignment && typeof alignmentAxis === 'number') {
|
|
1653
|
-
crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;
|
|
1654
|
-
}
|
|
1655
2017
|
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
y: crossAxis * crossAxisMulti
|
|
1662
|
-
};
|
|
1663
|
-
}
|
|
1664
|
-
/**
|
|
1665
|
-
* Displaces the floating element from its reference element.
|
|
1666
|
-
* @see https://floating-ui.com/docs/offset
|
|
1667
|
-
*/
|
|
2018
|
+
for (propName in config) {
|
|
2019
|
+
if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
|
|
2020
|
+
props[propName] = config[propName];
|
|
2021
|
+
}
|
|
2022
|
+
} // Resolve default props
|
|
1668
2023
|
|
|
1669
|
-
const offset = function (value) {
|
|
1670
|
-
if (value === void 0) {
|
|
1671
|
-
value = 0;
|
|
1672
|
-
}
|
|
1673
2024
|
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
options: value,
|
|
2025
|
+
if (type && type.defaultProps) {
|
|
2026
|
+
var defaultProps = type.defaultProps;
|
|
1677
2027
|
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
return {
|
|
1685
|
-
x: x + diffCoords.x,
|
|
1686
|
-
y: y + diffCoords.y,
|
|
1687
|
-
data: diffCoords
|
|
1688
|
-
};
|
|
1689
|
-
}
|
|
2028
|
+
for (propName in defaultProps) {
|
|
2029
|
+
if (props[propName] === undefined) {
|
|
2030
|
+
props[propName] = defaultProps[propName];
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
}
|
|
1690
2034
|
|
|
1691
|
-
|
|
1692
|
-
|
|
2035
|
+
if (key || ref) {
|
|
2036
|
+
var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
|
|
1693
2037
|
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
}
|
|
2038
|
+
if (key) {
|
|
2039
|
+
defineKeyPropWarningGetter(props, displayName);
|
|
2040
|
+
}
|
|
1697
2041
|
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
*/
|
|
1703
|
-
const shift = function (options) {
|
|
1704
|
-
if (options === void 0) {
|
|
1705
|
-
options = {};
|
|
1706
|
-
}
|
|
2042
|
+
if (ref) {
|
|
2043
|
+
defineRefPropWarningGetter(props, displayName);
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
1707
2046
|
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
2047
|
+
return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
1711
2050
|
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
x,
|
|
1715
|
-
y,
|
|
1716
|
-
placement
|
|
1717
|
-
} = middlewareArguments;
|
|
1718
|
-
const {
|
|
1719
|
-
mainAxis: checkMainAxis = true,
|
|
1720
|
-
crossAxis: checkCrossAxis = false,
|
|
1721
|
-
limiter = {
|
|
1722
|
-
fn: _ref => {
|
|
1723
|
-
let {
|
|
1724
|
-
x,
|
|
1725
|
-
y
|
|
1726
|
-
} = _ref;
|
|
1727
|
-
return {
|
|
1728
|
-
x,
|
|
1729
|
-
y
|
|
1730
|
-
};
|
|
1731
|
-
}
|
|
1732
|
-
},
|
|
1733
|
-
...detectOverflowOptions
|
|
1734
|
-
} = options;
|
|
1735
|
-
const coords = {
|
|
1736
|
-
x,
|
|
1737
|
-
y
|
|
1738
|
-
};
|
|
1739
|
-
const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);
|
|
1740
|
-
const mainAxis = getMainAxisFromPlacement(getSide(placement));
|
|
1741
|
-
const crossAxis = getCrossAxis(mainAxis);
|
|
1742
|
-
let mainAxisCoord = coords[mainAxis];
|
|
1743
|
-
let crossAxisCoord = coords[crossAxis];
|
|
2051
|
+
var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
|
|
2052
|
+
ReactSharedInternals.ReactDebugCurrentFrame;
|
|
1744
2053
|
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
const min = mainAxisCoord + overflow[minSide];
|
|
1749
|
-
const max = mainAxisCoord - overflow[maxSide];
|
|
1750
|
-
mainAxisCoord = within(min, mainAxisCoord, max);
|
|
1751
|
-
}
|
|
2054
|
+
function setCurrentlyValidatingElement$1(element) {
|
|
2055
|
+
currentlyValidatingElement = element;
|
|
2056
|
+
}
|
|
1752
2057
|
|
|
1753
|
-
|
|
1754
|
-
const minSide = crossAxis === 'y' ? 'top' : 'left';
|
|
1755
|
-
const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
|
|
1756
|
-
const min = crossAxisCoord + overflow[minSide];
|
|
1757
|
-
const max = crossAxisCoord - overflow[maxSide];
|
|
1758
|
-
crossAxisCoord = within(min, crossAxisCoord, max);
|
|
1759
|
-
}
|
|
2058
|
+
var propTypesMisspellWarningShown;
|
|
1760
2059
|
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
}
|
|
2060
|
+
{
|
|
2061
|
+
propTypesMisspellWarningShown = false;
|
|
2062
|
+
}
|
|
2063
|
+
/**
|
|
2064
|
+
* Verifies the object is a ReactElement.
|
|
2065
|
+
* See https://reactjs.org/docs/react-api.html#isvalidelement
|
|
2066
|
+
* @param {?object} object
|
|
2067
|
+
* @return {boolean} True if `object` is a ReactElement.
|
|
2068
|
+
* @final
|
|
2069
|
+
*/
|
|
1772
2070
|
|
|
1773
|
-
|
|
1774
|
-
|
|
2071
|
+
function isValidElement(object) {
|
|
2072
|
+
{
|
|
2073
|
+
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
1775
2076
|
|
|
1776
|
-
function
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
if (node == null) {
|
|
1781
|
-
return window;
|
|
1782
|
-
}
|
|
2077
|
+
function getDeclarationErrorAddendum() {
|
|
2078
|
+
{
|
|
2079
|
+
if (ReactCurrentOwner$1.current) {
|
|
2080
|
+
var name = getComponentName(ReactCurrentOwner$1.current.type);
|
|
1783
2081
|
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
2082
|
+
if (name) {
|
|
2083
|
+
return '\n\nCheck the render method of `' + name + '`.';
|
|
2084
|
+
}
|
|
2085
|
+
}
|
|
1788
2086
|
|
|
1789
|
-
|
|
1790
|
-
}
|
|
2087
|
+
return '';
|
|
2088
|
+
}
|
|
2089
|
+
}
|
|
1791
2090
|
|
|
1792
|
-
function
|
|
1793
|
-
|
|
1794
|
-
|
|
2091
|
+
function getSourceInfoErrorAddendum(source) {
|
|
2092
|
+
{
|
|
2093
|
+
if (source !== undefined) {
|
|
2094
|
+
var fileName = source.fileName.replace(/^.*[\\\/]/, '');
|
|
2095
|
+
var lineNumber = source.lineNumber;
|
|
2096
|
+
return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
|
|
2097
|
+
}
|
|
1795
2098
|
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
}
|
|
2099
|
+
return '';
|
|
2100
|
+
}
|
|
2101
|
+
}
|
|
2102
|
+
/**
|
|
2103
|
+
* Warn if there's no key explicitly set on dynamic arrays of children or
|
|
2104
|
+
* object keys are not valid. This allows us to keep track of children between
|
|
2105
|
+
* updates.
|
|
2106
|
+
*/
|
|
1799
2107
|
|
|
1800
|
-
function getUAString() {
|
|
1801
|
-
const uaData = navigator.userAgentData;
|
|
1802
2108
|
|
|
1803
|
-
|
|
1804
|
-
return uaData.brands.map(item => item.brand + "/" + item.version).join(' ');
|
|
1805
|
-
}
|
|
2109
|
+
var ownerHasKeyUseWarning = {};
|
|
1806
2110
|
|
|
1807
|
-
|
|
1808
|
-
|
|
2111
|
+
function getCurrentComponentErrorInfo(parentType) {
|
|
2112
|
+
{
|
|
2113
|
+
var info = getDeclarationErrorAddendum();
|
|
1809
2114
|
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
}
|
|
1813
|
-
function isElement(value) {
|
|
1814
|
-
return value instanceof getWindow(value).Element;
|
|
1815
|
-
}
|
|
1816
|
-
function isNode(value) {
|
|
1817
|
-
return value instanceof getWindow(value).Node;
|
|
1818
|
-
}
|
|
1819
|
-
function isShadowRoot(node) {
|
|
1820
|
-
// Browsers without `ShadowRoot` support
|
|
1821
|
-
if (typeof ShadowRoot === 'undefined') {
|
|
1822
|
-
return false;
|
|
1823
|
-
}
|
|
2115
|
+
if (!info) {
|
|
2116
|
+
var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
|
|
1824
2117
|
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
}
|
|
1828
|
-
|
|
1829
|
-
// Firefox wants us to check `-x` and `-y` variations as well
|
|
1830
|
-
const {
|
|
1831
|
-
overflow,
|
|
1832
|
-
overflowX,
|
|
1833
|
-
overflowY,
|
|
1834
|
-
display
|
|
1835
|
-
} = getComputedStyle(element);
|
|
1836
|
-
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);
|
|
1837
|
-
}
|
|
1838
|
-
function isTableElement(element) {
|
|
1839
|
-
return ['table', 'td', 'th'].includes(getNodeName(element));
|
|
1840
|
-
}
|
|
1841
|
-
function isContainingBlock(element) {
|
|
1842
|
-
// TODO: Try and use feature detection here instead
|
|
1843
|
-
const isFirefox = /firefox/i.test(getUAString());
|
|
1844
|
-
const css = getComputedStyle(element);
|
|
1845
|
-
const backdropFilter = css.backdropFilter || css.WebkitBackdropFilter; // This is non-exhaustive but covers the most common CSS properties that
|
|
1846
|
-
// create a containing block.
|
|
1847
|
-
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
|
2118
|
+
if (parentName) {
|
|
2119
|
+
info = "\n\nCheck the top-level render call using <" + parentName + ">.";
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
1848
2122
|
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
function isLastTraversableNode(node) {
|
|
1864
|
-
return ['html', 'body', '#document'].includes(getNodeName(node));
|
|
1865
|
-
}
|
|
2123
|
+
return info;
|
|
2124
|
+
}
|
|
2125
|
+
}
|
|
2126
|
+
/**
|
|
2127
|
+
* Warn if the element doesn't have an explicit key assigned to it.
|
|
2128
|
+
* This element is in an array. The array could grow and shrink or be
|
|
2129
|
+
* reordered. All children that haven't already been validated are required to
|
|
2130
|
+
* have a "key" property assigned to it. Error statuses are cached so a warning
|
|
2131
|
+
* will only be shown once.
|
|
2132
|
+
*
|
|
2133
|
+
* @internal
|
|
2134
|
+
* @param {ReactElement} element Element that requires a key.
|
|
2135
|
+
* @param {*} parentType element's parent's type.
|
|
2136
|
+
*/
|
|
1866
2137
|
|
|
1867
|
-
const min = Math.min;
|
|
1868
|
-
const max = Math.max;
|
|
1869
|
-
const round = Math.round;
|
|
1870
2138
|
|
|
1871
|
-
function
|
|
1872
|
-
|
|
2139
|
+
function validateExplicitKey(element, parentType) {
|
|
2140
|
+
{
|
|
2141
|
+
if (!element._store || element._store.validated || element.key != null) {
|
|
2142
|
+
return;
|
|
2143
|
+
}
|
|
1873
2144
|
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
}
|
|
2145
|
+
element._store.validated = true;
|
|
2146
|
+
var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
|
|
1877
2147
|
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
2148
|
+
if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
|
|
2149
|
+
return;
|
|
2150
|
+
}
|
|
1881
2151
|
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
2152
|
+
ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
|
|
2153
|
+
// property, it may be the creator of the child that's responsible for
|
|
2154
|
+
// assigning it a key.
|
|
1885
2155
|
|
|
1886
|
-
|
|
1887
|
-
scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
|
|
1888
|
-
scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
|
|
1889
|
-
}
|
|
2156
|
+
var childOwner = '';
|
|
1890
2157
|
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
const width = clientRect.width / scaleX;
|
|
1896
|
-
const height = clientRect.height / scaleY;
|
|
1897
|
-
return {
|
|
1898
|
-
width,
|
|
1899
|
-
height,
|
|
1900
|
-
top: y,
|
|
1901
|
-
right: x + width,
|
|
1902
|
-
bottom: y + height,
|
|
1903
|
-
left: x,
|
|
1904
|
-
x,
|
|
1905
|
-
y
|
|
1906
|
-
};
|
|
1907
|
-
}
|
|
2158
|
+
if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {
|
|
2159
|
+
// Give the component that originally created this child.
|
|
2160
|
+
childOwner = " It was passed a child from " + getComponentName(element._owner.type) + ".";
|
|
2161
|
+
}
|
|
1908
2162
|
|
|
1909
|
-
|
|
1910
|
-
return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;
|
|
1911
|
-
}
|
|
2163
|
+
setCurrentlyValidatingElement$1(element);
|
|
1912
2164
|
|
|
1913
|
-
|
|
1914
|
-
if (isElement(element)) {
|
|
1915
|
-
return {
|
|
1916
|
-
scrollLeft: element.scrollLeft,
|
|
1917
|
-
scrollTop: element.scrollTop
|
|
1918
|
-
};
|
|
1919
|
-
}
|
|
2165
|
+
error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
|
|
1920
2166
|
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
2167
|
+
setCurrentlyValidatingElement$1(null);
|
|
2168
|
+
}
|
|
2169
|
+
}
|
|
2170
|
+
/**
|
|
2171
|
+
* Ensure that every element either is passed in a static location, in an
|
|
2172
|
+
* array with an explicit keys property defined, or in an object literal
|
|
2173
|
+
* with valid key property.
|
|
2174
|
+
*
|
|
2175
|
+
* @internal
|
|
2176
|
+
* @param {ReactNode} node Statically passed child of any type.
|
|
2177
|
+
* @param {*} parentType node's parent's type.
|
|
2178
|
+
*/
|
|
1926
2179
|
|
|
1927
|
-
function getWindowScrollBarX(element) {
|
|
1928
|
-
// If <html> has a CSS width greater than the viewport, then this will be
|
|
1929
|
-
// incorrect for RTL.
|
|
1930
|
-
return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;
|
|
1931
|
-
}
|
|
1932
2180
|
|
|
1933
|
-
function
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
2181
|
+
function validateChildKeys(node, parentType) {
|
|
2182
|
+
{
|
|
2183
|
+
if (typeof node !== 'object') {
|
|
2184
|
+
return;
|
|
2185
|
+
}
|
|
1937
2186
|
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
const rect = getBoundingClientRect(element, // @ts-ignore - checked above (TS 4.1 compat)
|
|
1942
|
-
isOffsetParentAnElement && isScaled(offsetParent), strategy === 'fixed');
|
|
1943
|
-
let scroll = {
|
|
1944
|
-
scrollLeft: 0,
|
|
1945
|
-
scrollTop: 0
|
|
1946
|
-
};
|
|
1947
|
-
const offsets = {
|
|
1948
|
-
x: 0,
|
|
1949
|
-
y: 0
|
|
1950
|
-
};
|
|
2187
|
+
if (Array.isArray(node)) {
|
|
2188
|
+
for (var i = 0; i < node.length; i++) {
|
|
2189
|
+
var child = node[i];
|
|
1951
2190
|
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
2191
|
+
if (isValidElement(child)) {
|
|
2192
|
+
validateExplicitKey(child, parentType);
|
|
2193
|
+
}
|
|
2194
|
+
}
|
|
2195
|
+
} else if (isValidElement(node)) {
|
|
2196
|
+
// This element was passed in a valid location.
|
|
2197
|
+
if (node._store) {
|
|
2198
|
+
node._store.validated = true;
|
|
2199
|
+
}
|
|
2200
|
+
} else if (node) {
|
|
2201
|
+
var iteratorFn = getIteratorFn(node);
|
|
1956
2202
|
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
}
|
|
1964
|
-
}
|
|
2203
|
+
if (typeof iteratorFn === 'function') {
|
|
2204
|
+
// Entry iterators used to provide implicit keys,
|
|
2205
|
+
// but now we print a separate warning for them later.
|
|
2206
|
+
if (iteratorFn !== node.entries) {
|
|
2207
|
+
var iterator = iteratorFn.call(node);
|
|
2208
|
+
var step;
|
|
1965
2209
|
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
}
|
|
2210
|
+
while (!(step = iterator.next()).done) {
|
|
2211
|
+
if (isValidElement(step.value)) {
|
|
2212
|
+
validateExplicitKey(step.value, parentType);
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
}
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
}
|
|
2220
|
+
/**
|
|
2221
|
+
* Given an element, validate that its props follow the propTypes definition,
|
|
2222
|
+
* provided by the type.
|
|
2223
|
+
*
|
|
2224
|
+
* @param {ReactElement} element
|
|
2225
|
+
*/
|
|
1973
2226
|
|
|
1974
|
-
function getParentNode(node) {
|
|
1975
|
-
if (getNodeName(node) === 'html') {
|
|
1976
|
-
return node;
|
|
1977
|
-
}
|
|
1978
2227
|
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
isShadowRoot(node) ? node.host : null) || // Fallback
|
|
1983
|
-
getDocumentElement(node);
|
|
1984
|
-
return isShadowRoot(result) ? result.host : result;
|
|
1985
|
-
}
|
|
2228
|
+
function validatePropTypes(element) {
|
|
2229
|
+
{
|
|
2230
|
+
var type = element.type;
|
|
1986
2231
|
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
}
|
|
2232
|
+
if (type === null || type === undefined || typeof type === 'string') {
|
|
2233
|
+
return;
|
|
2234
|
+
}
|
|
1991
2235
|
|
|
1992
|
-
|
|
1993
|
-
}
|
|
2236
|
+
var propTypes;
|
|
1994
2237
|
|
|
1995
|
-
|
|
1996
|
-
|
|
2238
|
+
if (typeof type === 'function') {
|
|
2239
|
+
propTypes = type.propTypes;
|
|
2240
|
+
} else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
|
|
2241
|
+
// Inner props are checked in the reconciler.
|
|
2242
|
+
type.$$typeof === REACT_MEMO_TYPE)) {
|
|
2243
|
+
propTypes = type.propTypes;
|
|
2244
|
+
} else {
|
|
2245
|
+
return;
|
|
2246
|
+
}
|
|
1997
2247
|
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
}
|
|
2248
|
+
if (propTypes) {
|
|
2249
|
+
// Intentionally inside to avoid triggering lazy initializers:
|
|
2250
|
+
var name = getComponentName(type);
|
|
2251
|
+
checkPropTypes(propTypes, element.props, 'prop', name, element);
|
|
2252
|
+
} else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
|
|
2253
|
+
propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
|
|
2005
2254
|
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2255
|
+
var _name = getComponentName(type);
|
|
2256
|
+
|
|
2257
|
+
error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
|
|
2258
|
+
}
|
|
2259
|
+
|
|
2260
|
+
if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
|
|
2261
|
+
error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
|
|
2262
|
+
}
|
|
2263
|
+
}
|
|
2264
|
+
}
|
|
2265
|
+
/**
|
|
2266
|
+
* Given a fragment, validate that it can only be provided with fragment props
|
|
2267
|
+
* @param {ReactElement} fragment
|
|
2268
|
+
*/
|
|
2009
2269
|
|
|
2010
2270
|
|
|
2011
|
-
function
|
|
2012
|
-
|
|
2013
|
-
|
|
2271
|
+
function validateFragmentProps(fragment) {
|
|
2272
|
+
{
|
|
2273
|
+
var keys = Object.keys(fragment.props);
|
|
2014
2274
|
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
}
|
|
2275
|
+
for (var i = 0; i < keys.length; i++) {
|
|
2276
|
+
var key = keys[i];
|
|
2018
2277
|
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
}
|
|
2278
|
+
if (key !== 'children' && key !== 'key') {
|
|
2279
|
+
setCurrentlyValidatingElement$1(fragment);
|
|
2022
2280
|
|
|
2023
|
-
|
|
2024
|
-
}
|
|
2281
|
+
error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
|
|
2025
2282
|
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
height: element.offsetHeight
|
|
2031
|
-
};
|
|
2032
|
-
}
|
|
2283
|
+
setCurrentlyValidatingElement$1(null);
|
|
2284
|
+
break;
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2033
2287
|
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
width: rect.width,
|
|
2037
|
-
height: rect.height
|
|
2038
|
-
};
|
|
2039
|
-
}
|
|
2288
|
+
if (fragment.ref !== null) {
|
|
2289
|
+
setCurrentlyValidatingElement$1(fragment);
|
|
2040
2290
|
|
|
2041
|
-
|
|
2042
|
-
let {
|
|
2043
|
-
rect,
|
|
2044
|
-
offsetParent,
|
|
2045
|
-
strategy
|
|
2046
|
-
} = _ref;
|
|
2047
|
-
const isOffsetParentAnElement = isHTMLElement(offsetParent);
|
|
2048
|
-
const documentElement = getDocumentElement(offsetParent);
|
|
2291
|
+
error('Invalid attribute `ref` supplied to `React.Fragment`.');
|
|
2049
2292
|
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2293
|
+
setCurrentlyValidatingElement$1(null);
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
}
|
|
2053
2297
|
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
const offsets = {
|
|
2059
|
-
x: 0,
|
|
2060
|
-
y: 0
|
|
2061
|
-
};
|
|
2298
|
+
function jsxWithValidation(type, props, key, isStaticChildren, source, self) {
|
|
2299
|
+
{
|
|
2300
|
+
var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
|
|
2301
|
+
// succeed and there will likely be errors in render.
|
|
2062
2302
|
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
scroll = getNodeScroll(offsetParent);
|
|
2066
|
-
}
|
|
2303
|
+
if (!validType) {
|
|
2304
|
+
var info = '';
|
|
2067
2305
|
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
offsets.y = offsetRect.y + offsetParent.clientTop;
|
|
2072
|
-
} // This doesn't appear to be need to be negated.
|
|
2073
|
-
// else if (documentElement) {
|
|
2074
|
-
// offsets.x = getWindowScrollBarX(documentElement);
|
|
2075
|
-
// }
|
|
2306
|
+
if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
|
|
2307
|
+
info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
|
|
2308
|
+
}
|
|
2076
2309
|
|
|
2077
|
-
|
|
2310
|
+
var sourceInfo = getSourceInfoErrorAddendum(source);
|
|
2078
2311
|
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
}
|
|
2312
|
+
if (sourceInfo) {
|
|
2313
|
+
info += sourceInfo;
|
|
2314
|
+
} else {
|
|
2315
|
+
info += getDeclarationErrorAddendum();
|
|
2316
|
+
}
|
|
2084
2317
|
|
|
2085
|
-
|
|
2086
|
-
const win = getWindow(element);
|
|
2087
|
-
const html = getDocumentElement(element);
|
|
2088
|
-
const visualViewport = win.visualViewport;
|
|
2089
|
-
let width = html.clientWidth;
|
|
2090
|
-
let height = html.clientHeight;
|
|
2091
|
-
let x = 0;
|
|
2092
|
-
let y = 0;
|
|
2318
|
+
var typeString;
|
|
2093
2319
|
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2320
|
+
if (type === null) {
|
|
2321
|
+
typeString = 'null';
|
|
2322
|
+
} else if (Array.isArray(type)) {
|
|
2323
|
+
typeString = 'array';
|
|
2324
|
+
} else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
|
|
2325
|
+
typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />";
|
|
2326
|
+
info = ' Did you accidentally export a JSX literal instead of a component?';
|
|
2327
|
+
} else {
|
|
2328
|
+
typeString = typeof type;
|
|
2329
|
+
}
|
|
2098
2330
|
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
y = visualViewport.offsetTop;
|
|
2102
|
-
}
|
|
2103
|
-
}
|
|
2331
|
+
error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
|
|
2332
|
+
}
|
|
2104
2333
|
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
height,
|
|
2108
|
-
x,
|
|
2109
|
-
y
|
|
2110
|
-
};
|
|
2111
|
-
}
|
|
2334
|
+
var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.
|
|
2335
|
+
// TODO: Drop this when these are no longer allowed as the type argument.
|
|
2112
2336
|
|
|
2113
|
-
|
|
2337
|
+
if (element == null) {
|
|
2338
|
+
return element;
|
|
2339
|
+
} // Skip key warning if the type isn't valid since our key validation logic
|
|
2340
|
+
// doesn't expect a non-string/function type and can throw confusing errors.
|
|
2341
|
+
// We don't want exception behavior to differ between dev and prod.
|
|
2342
|
+
// (Rendering will throw with a helpful message and as soon as the type is
|
|
2343
|
+
// fixed, the key warnings will appear.)
|
|
2114
2344
|
|
|
2115
|
-
function getDocumentRect(element) {
|
|
2116
|
-
var _element$ownerDocumen;
|
|
2117
2345
|
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
|
|
2121
|
-
const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
|
|
2122
|
-
const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
|
|
2123
|
-
let x = -scroll.scrollLeft + getWindowScrollBarX(element);
|
|
2124
|
-
const y = -scroll.scrollTop;
|
|
2346
|
+
if (validType) {
|
|
2347
|
+
var children = props.children;
|
|
2125
2348
|
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2349
|
+
if (children !== undefined) {
|
|
2350
|
+
if (isStaticChildren) {
|
|
2351
|
+
if (Array.isArray(children)) {
|
|
2352
|
+
for (var i = 0; i < children.length; i++) {
|
|
2353
|
+
validateChildKeys(children[i], type);
|
|
2354
|
+
}
|
|
2129
2355
|
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
}
|
|
2356
|
+
if (Object.freeze) {
|
|
2357
|
+
Object.freeze(children);
|
|
2358
|
+
}
|
|
2359
|
+
} else {
|
|
2360
|
+
error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');
|
|
2361
|
+
}
|
|
2362
|
+
} else {
|
|
2363
|
+
validateChildKeys(children, type);
|
|
2364
|
+
}
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2137
2367
|
|
|
2138
|
-
|
|
2139
|
-
|
|
2368
|
+
if (type === exports.Fragment) {
|
|
2369
|
+
validateFragmentProps(element);
|
|
2370
|
+
} else {
|
|
2371
|
+
validatePropTypes(element);
|
|
2372
|
+
}
|
|
2140
2373
|
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2374
|
+
return element;
|
|
2375
|
+
}
|
|
2376
|
+
} // These two functions exist to still get child warnings in dev
|
|
2377
|
+
// even with the prod transform. This means that jsxDEV is purely
|
|
2378
|
+
// opt-in behavior for better messages but that we won't stop
|
|
2379
|
+
// giving you warnings if you use production apis.
|
|
2145
2380
|
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2381
|
+
function jsxWithValidationStatic(type, props, key) {
|
|
2382
|
+
{
|
|
2383
|
+
return jsxWithValidation(type, props, key, true);
|
|
2384
|
+
}
|
|
2385
|
+
}
|
|
2386
|
+
function jsxWithValidationDynamic(type, props, key) {
|
|
2387
|
+
{
|
|
2388
|
+
return jsxWithValidation(type, props, key, false);
|
|
2389
|
+
}
|
|
2390
|
+
}
|
|
2149
2391
|
|
|
2150
|
-
|
|
2151
|
-
|
|
2392
|
+
var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.
|
|
2393
|
+
// for now we can ship identical prod functions
|
|
2152
2394
|
|
|
2153
|
-
|
|
2154
|
-
var _node$ownerDocument;
|
|
2395
|
+
var jsxs = jsxWithValidationStatic ;
|
|
2155
2396
|
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2397
|
+
exports.jsx = jsx;
|
|
2398
|
+
exports.jsxs = jsxs;
|
|
2399
|
+
})();
|
|
2400
|
+
}
|
|
2401
|
+
} (reactJsxRuntime_development));
|
|
2159
2402
|
|
|
2160
|
-
|
|
2161
|
-
const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);
|
|
2162
|
-
const win = getWindow(scrollableAncestor);
|
|
2163
|
-
const target = isBody ? [win].concat(win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []) : scrollableAncestor;
|
|
2164
|
-
const updatedList = list.concat(target);
|
|
2165
|
-
return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here
|
|
2166
|
-
updatedList.concat(getOverflowAncestors(target));
|
|
2167
|
-
}
|
|
2403
|
+
(function (module) {
|
|
2168
2404
|
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
return {
|
|
2174
|
-
top,
|
|
2175
|
-
left,
|
|
2176
|
-
x: left,
|
|
2177
|
-
y: top,
|
|
2178
|
-
right: left + element.clientWidth,
|
|
2179
|
-
bottom: top + element.clientHeight,
|
|
2180
|
-
width: element.clientWidth,
|
|
2181
|
-
height: element.clientHeight
|
|
2182
|
-
};
|
|
2183
|
-
}
|
|
2405
|
+
{
|
|
2406
|
+
module.exports = reactJsxRuntime_development;
|
|
2407
|
+
}
|
|
2408
|
+
} (jsxRuntime));
|
|
2184
2409
|
|
|
2185
|
-
|
|
2186
|
-
if (clippingAncestor === 'viewport') {
|
|
2187
|
-
return rectToClientRect(getViewportRect(element, strategy));
|
|
2188
|
-
}
|
|
2410
|
+
var classnames = {exports: {}};
|
|
2189
2411
|
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2412
|
+
/*!
|
|
2413
|
+
Copyright (c) 2018 Jed Watson.
|
|
2414
|
+
Licensed under the MIT License (MIT), see
|
|
2415
|
+
http://jedwatson.github.io/classnames
|
|
2416
|
+
*/
|
|
2193
2417
|
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
// clipping (or hiding) overflowing elements with a position different from
|
|
2197
|
-
// `initial`
|
|
2418
|
+
(function (module) {
|
|
2419
|
+
/* global define */
|
|
2198
2420
|
|
|
2421
|
+
(function () {
|
|
2199
2422
|
|
|
2200
|
-
|
|
2201
|
-
let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');
|
|
2202
|
-
let currentNode = element;
|
|
2203
|
-
let currentContainingBlockComputedStyle = null; // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
|
2423
|
+
var hasOwn = {}.hasOwnProperty;
|
|
2204
2424
|
|
|
2205
|
-
|
|
2206
|
-
|
|
2425
|
+
function classNames() {
|
|
2426
|
+
var classes = [];
|
|
2207
2427
|
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
} else {
|
|
2212
|
-
// Record last containing block for next iteration
|
|
2213
|
-
currentContainingBlockComputedStyle = computedStyle;
|
|
2214
|
-
}
|
|
2428
|
+
for (var i = 0; i < arguments.length; i++) {
|
|
2429
|
+
var arg = arguments[i];
|
|
2430
|
+
if (!arg) continue;
|
|
2215
2431
|
|
|
2216
|
-
|
|
2217
|
-
}
|
|
2432
|
+
var argType = typeof arg;
|
|
2218
2433
|
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2434
|
+
if (argType === 'string' || argType === 'number') {
|
|
2435
|
+
classes.push(arg);
|
|
2436
|
+
} else if (Array.isArray(arg)) {
|
|
2437
|
+
if (arg.length) {
|
|
2438
|
+
var inner = classNames.apply(null, arg);
|
|
2439
|
+
if (inner) {
|
|
2440
|
+
classes.push(inner);
|
|
2441
|
+
}
|
|
2442
|
+
}
|
|
2443
|
+
} else if (argType === 'object') {
|
|
2444
|
+
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
|
|
2445
|
+
classes.push(arg.toString());
|
|
2446
|
+
continue;
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
for (var key in arg) {
|
|
2450
|
+
if (hasOwn.call(arg, key) && arg[key]) {
|
|
2451
|
+
classes.push(key);
|
|
2452
|
+
}
|
|
2453
|
+
}
|
|
2454
|
+
}
|
|
2455
|
+
}
|
|
2222
2456
|
|
|
2457
|
+
return classes.join(' ');
|
|
2458
|
+
}
|
|
2223
2459
|
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
const clippingAncestors = [...elementClippingAncestors, rootBoundary];
|
|
2233
|
-
const firstClippingAncestor = clippingAncestors[0];
|
|
2234
|
-
const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
|
|
2235
|
-
const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
|
|
2236
|
-
accRect.top = max(rect.top, accRect.top);
|
|
2237
|
-
accRect.right = min(rect.right, accRect.right);
|
|
2238
|
-
accRect.bottom = min(rect.bottom, accRect.bottom);
|
|
2239
|
-
accRect.left = max(rect.left, accRect.left);
|
|
2240
|
-
return accRect;
|
|
2241
|
-
}, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
|
|
2242
|
-
return {
|
|
2243
|
-
width: clippingRect.right - clippingRect.left,
|
|
2244
|
-
height: clippingRect.bottom - clippingRect.top,
|
|
2245
|
-
x: clippingRect.left,
|
|
2246
|
-
y: clippingRect.top
|
|
2247
|
-
};
|
|
2248
|
-
}
|
|
2460
|
+
if (module.exports) {
|
|
2461
|
+
classNames.default = classNames;
|
|
2462
|
+
module.exports = classNames;
|
|
2463
|
+
} else {
|
|
2464
|
+
window.classNames = classNames;
|
|
2465
|
+
}
|
|
2466
|
+
}());
|
|
2467
|
+
} (classnames));
|
|
2249
2468
|
|
|
2250
|
-
|
|
2251
|
-
getClippingRect,
|
|
2252
|
-
convertOffsetParentRelativeRectToViewportRelativeRect,
|
|
2253
|
-
isElement,
|
|
2254
|
-
getDimensions,
|
|
2255
|
-
getOffsetParent,
|
|
2256
|
-
getDocumentElement,
|
|
2257
|
-
getElementRects: _ref => {
|
|
2258
|
-
let {
|
|
2259
|
-
reference,
|
|
2260
|
-
floating,
|
|
2261
|
-
strategy
|
|
2262
|
-
} = _ref;
|
|
2263
|
-
return {
|
|
2264
|
-
reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy),
|
|
2265
|
-
floating: { ...getDimensions(floating),
|
|
2266
|
-
x: 0,
|
|
2267
|
-
y: 0
|
|
2268
|
-
}
|
|
2269
|
-
};
|
|
2270
|
-
},
|
|
2271
|
-
getClientRects: element => Array.from(element.getClientRects()),
|
|
2272
|
-
isRTL: element => getComputedStyle(element).direction === 'rtl'
|
|
2273
|
-
};
|
|
2469
|
+
var classNames = classnames.exports;
|
|
2274
2470
|
|
|
2471
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2275
2472
|
/**
|
|
2276
|
-
*
|
|
2277
|
-
*
|
|
2278
|
-
*
|
|
2473
|
+
* This function debounce the received function
|
|
2474
|
+
* @param { function } func Function to be debounced
|
|
2475
|
+
* @param { number } wait Time to wait before execut the function
|
|
2476
|
+
* @param { boolean } immediate Param to define if the function will be executed immediately
|
|
2279
2477
|
*/
|
|
2478
|
+
const debounce = (func, wait, immediate) => {
|
|
2479
|
+
let timeout = null;
|
|
2480
|
+
return function debounced(...args) {
|
|
2481
|
+
const later = () => {
|
|
2482
|
+
timeout = null;
|
|
2483
|
+
if (!immediate) {
|
|
2484
|
+
func.apply(this, args);
|
|
2485
|
+
}
|
|
2486
|
+
};
|
|
2487
|
+
if (timeout) {
|
|
2488
|
+
clearTimeout(timeout);
|
|
2489
|
+
}
|
|
2490
|
+
timeout = setTimeout(later, wait);
|
|
2491
|
+
};
|
|
2492
|
+
};
|
|
2280
2493
|
|
|
2281
|
-
const
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2494
|
+
const TooltipContent = ({ content }) => {
|
|
2495
|
+
return jsxRuntime.exports.jsx("span", { dangerouslySetInnerHTML: { __html: content } });
|
|
2496
|
+
};
|
|
2497
|
+
|
|
2498
|
+
const DEFAULT_TOOLTIP_ID = 'DEFAULT_TOOLTIP_ID';
|
|
2499
|
+
const DEFAULT_CONTEXT_DATA = {
|
|
2500
|
+
anchorRefs: new Set(),
|
|
2501
|
+
activeAnchor: { current: null },
|
|
2502
|
+
attach: () => {
|
|
2503
|
+
/* attach anchor element */
|
|
2504
|
+
},
|
|
2505
|
+
detach: () => {
|
|
2506
|
+
/* detach anchor element */
|
|
2507
|
+
},
|
|
2508
|
+
setActiveAnchor: () => {
|
|
2509
|
+
/* set active anchor */
|
|
2510
|
+
},
|
|
2511
|
+
};
|
|
2512
|
+
const DEFAULT_CONTEXT_DATA_WRAPPER = {
|
|
2513
|
+
getTooltipData: () => DEFAULT_CONTEXT_DATA,
|
|
2514
|
+
};
|
|
2515
|
+
const TooltipContext = createContext(DEFAULT_CONTEXT_DATA_WRAPPER);
|
|
2516
|
+
const TooltipProvider = ({ children }) => {
|
|
2517
|
+
const [anchorRefMap, setAnchorRefMap] = useState({
|
|
2518
|
+
[DEFAULT_TOOLTIP_ID]: new Set(),
|
|
2519
|
+
});
|
|
2520
|
+
const [activeAnchorMap, setActiveAnchorMap] = useState({
|
|
2521
|
+
[DEFAULT_TOOLTIP_ID]: { current: null },
|
|
2522
|
+
});
|
|
2523
|
+
const attach = (tooltipId, ...refs) => {
|
|
2524
|
+
setAnchorRefMap((oldMap) => {
|
|
2525
|
+
var _a;
|
|
2526
|
+
const tooltipRefs = (_a = oldMap[tooltipId]) !== null && _a !== void 0 ? _a : new Set();
|
|
2527
|
+
refs.forEach((ref) => tooltipRefs.add(ref));
|
|
2528
|
+
// create new object to trigger re-render
|
|
2529
|
+
return { ...oldMap, [tooltipId]: new Set(tooltipRefs) };
|
|
2530
|
+
});
|
|
2531
|
+
};
|
|
2532
|
+
const detach = (tooltipId, ...refs) => {
|
|
2533
|
+
setAnchorRefMap((oldMap) => {
|
|
2534
|
+
const tooltipRefs = oldMap[tooltipId];
|
|
2535
|
+
if (!tooltipRefs) {
|
|
2536
|
+
// tooltip not found
|
|
2537
|
+
// maybe thow error?
|
|
2538
|
+
return oldMap;
|
|
2539
|
+
}
|
|
2540
|
+
refs.forEach((ref) => tooltipRefs.delete(ref));
|
|
2541
|
+
// create new object to trigger re-render
|
|
2542
|
+
return { ...oldMap };
|
|
2543
|
+
});
|
|
2544
|
+
};
|
|
2545
|
+
const setActiveAnchor = (tooltipId, ref) => {
|
|
2546
|
+
setActiveAnchorMap((oldMap) => {
|
|
2547
|
+
var _a;
|
|
2548
|
+
if (((_a = oldMap[tooltipId]) === null || _a === void 0 ? void 0 : _a.current) === ref.current) {
|
|
2549
|
+
return oldMap;
|
|
2550
|
+
}
|
|
2551
|
+
// create new object to trigger re-render
|
|
2552
|
+
return { ...oldMap, [tooltipId]: ref };
|
|
2553
|
+
});
|
|
2554
|
+
};
|
|
2555
|
+
const getTooltipData = useCallback((tooltipId = DEFAULT_TOOLTIP_ID) => {
|
|
2556
|
+
var _a, _b;
|
|
2557
|
+
return ({
|
|
2558
|
+
anchorRefs: (_a = anchorRefMap[tooltipId]) !== null && _a !== void 0 ? _a : new Set(),
|
|
2559
|
+
activeAnchor: (_b = activeAnchorMap[tooltipId]) !== null && _b !== void 0 ? _b : { current: null },
|
|
2560
|
+
attach: (...refs) => attach(tooltipId, ...refs),
|
|
2561
|
+
detach: (...refs) => detach(tooltipId, ...refs),
|
|
2562
|
+
setActiveAnchor: (ref) => setActiveAnchor(tooltipId, ref),
|
|
2563
|
+
});
|
|
2564
|
+
}, [anchorRefMap, activeAnchorMap, attach, detach]);
|
|
2565
|
+
const context = useMemo(() => {
|
|
2566
|
+
return {
|
|
2567
|
+
getTooltipData,
|
|
2568
|
+
};
|
|
2569
|
+
}, [getTooltipData]);
|
|
2570
|
+
return jsxRuntime.exports.jsx(TooltipContext.Provider, { value: context, children: children });
|
|
2571
|
+
};
|
|
2572
|
+
function useTooltip(tooltipId = DEFAULT_TOOLTIP_ID) {
|
|
2573
|
+
return useContext(TooltipContext).getTooltipData(tooltipId);
|
|
2574
|
+
}
|
|
2575
|
+
|
|
2576
|
+
const TooltipWrapper = ({ tooltipId, children, className, place, content, html, variant, offset, wrapper, events, positionStrategy, delayShow, delayHide, }) => {
|
|
2577
|
+
const { attach, detach } = useTooltip(tooltipId);
|
|
2578
|
+
const anchorRef = useRef(null);
|
|
2579
|
+
useEffect(() => {
|
|
2580
|
+
attach(anchorRef);
|
|
2581
|
+
return () => {
|
|
2582
|
+
detach(anchorRef);
|
|
2583
|
+
};
|
|
2584
|
+
}, []);
|
|
2585
|
+
return (jsxRuntime.exports.jsx("span", { ref: anchorRef, className: classNames('react-tooltip-wrapper', className), "data-tooltip-place": place, "data-tooltip-content": content, "data-tooltip-html": html, "data-tooltip-variant": variant, "data-tooltip-offset": offset, "data-tooltip-wrapper": wrapper, "data-tooltip-events": events, "data-tooltip-position-strategy": positionStrategy, "data-tooltip-delay-show": delayShow, "data-tooltip-delay-hide": delayHide, children: children }));
|
|
2586
|
+
};
|
|
2285
2587
|
|
|
2286
|
-
const computeTooltipPosition = async ({ elementReference = null, tooltipReference = null, tooltipArrowReference = null, place = 'top', offset: offsetValue = 10, strategy = 'absolute', }) => {
|
|
2588
|
+
const computeTooltipPosition = async ({ elementReference = null, tooltipReference = null, tooltipArrowReference = null, place = 'top', offset: offsetValue = 10, strategy = 'absolute', middlewares = [offset(Number(offsetValue)), flip(), shift({ padding: 5 })], }) => {
|
|
2287
2589
|
if (!elementReference) {
|
|
2288
2590
|
// elementReference can be null or undefined and we will not compute the position
|
|
2289
2591
|
// eslint-disable-next-line no-console
|
|
@@ -2293,7 +2595,7 @@ const computeTooltipPosition = async ({ elementReference = null, tooltipReferenc
|
|
|
2293
2595
|
if (tooltipReference === null) {
|
|
2294
2596
|
return { tooltipStyles: {}, tooltipArrowStyles: {} };
|
|
2295
2597
|
}
|
|
2296
|
-
const middleware =
|
|
2598
|
+
const middleware = middlewares;
|
|
2297
2599
|
if (tooltipArrowReference) {
|
|
2298
2600
|
middleware.push(arrow({ element: tooltipArrowReference, padding: 5 }));
|
|
2299
2601
|
return computePosition(elementReference, tooltipReference, {
|
|
@@ -2334,7 +2636,7 @@ var styles = {"tooltip":"styles-module_tooltip__mnnfp","fixed":"styles-module_fi
|
|
|
2334
2636
|
|
|
2335
2637
|
const Tooltip = ({
|
|
2336
2638
|
// props
|
|
2337
|
-
id, className, classNameArrow, variant = 'dark', anchorId, place = 'top', offset = 10, events = ['hover'], positionStrategy = 'absolute', wrapper: WrapperElement = 'div', children = null, delayShow = 0, delayHide = 0, float = false, noArrow = false, clickable = false, style: externalStyles, position, afterShow, afterHide,
|
|
2639
|
+
id, className, classNameArrow, variant = 'dark', anchorId, place = 'top', offset = 10, events = ['hover'], positionStrategy = 'absolute', middlewares, wrapper: WrapperElement = 'div', children = null, delayShow = 0, delayHide = 0, float = false, noArrow = false, clickable = false, closeOnEsc = false, style: externalStyles, position, afterShow, afterHide,
|
|
2338
2640
|
// props handled by controller
|
|
2339
2641
|
content, html, isOpen, setIsOpen, }) => {
|
|
2340
2642
|
const tooltipRef = useRef(null);
|
|
@@ -2445,6 +2747,7 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2445
2747
|
tooltipReference: tooltipRef.current,
|
|
2446
2748
|
tooltipArrowReference: tooltipArrowRef.current,
|
|
2447
2749
|
strategy: positionStrategy,
|
|
2750
|
+
middlewares,
|
|
2448
2751
|
}).then((computedStylesData) => {
|
|
2449
2752
|
setCalculatingPosition(false);
|
|
2450
2753
|
if (Object.keys(computedStylesData.tooltipStyles).length) {
|
|
@@ -2480,6 +2783,12 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2480
2783
|
}
|
|
2481
2784
|
handleShow(false);
|
|
2482
2785
|
};
|
|
2786
|
+
const handleEsc = (event) => {
|
|
2787
|
+
if (event.key !== 'Escape') {
|
|
2788
|
+
return;
|
|
2789
|
+
}
|
|
2790
|
+
handleShow(false);
|
|
2791
|
+
};
|
|
2483
2792
|
// debounce handler to prevent call twice when
|
|
2484
2793
|
// mouse enter and focus events being triggered toggether
|
|
2485
2794
|
const debouncedHandleShowTooltip = debounce(handleShowTooltip, 50);
|
|
@@ -2495,6 +2804,9 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2495
2804
|
if (!elementRefs.size) {
|
|
2496
2805
|
return () => null;
|
|
2497
2806
|
}
|
|
2807
|
+
if (closeOnEsc) {
|
|
2808
|
+
window.addEventListener('keydown', handleEsc);
|
|
2809
|
+
}
|
|
2498
2810
|
const enabledEvents = [];
|
|
2499
2811
|
if (events.find((event) => event === 'click')) {
|
|
2500
2812
|
window.addEventListener('click', handleClickOutsideAnchor);
|
|
@@ -2528,7 +2840,12 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2528
2840
|
});
|
|
2529
2841
|
return () => {
|
|
2530
2842
|
var _a, _b;
|
|
2531
|
-
|
|
2843
|
+
if (events.find((event) => event === 'click')) {
|
|
2844
|
+
window.removeEventListener('click', handleClickOutsideAnchor);
|
|
2845
|
+
}
|
|
2846
|
+
if (closeOnEsc) {
|
|
2847
|
+
window.removeEventListener('keydown', handleEsc);
|
|
2848
|
+
}
|
|
2532
2849
|
if (clickable) {
|
|
2533
2850
|
(_a = tooltipRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('mouseenter', handleMouseEnterTooltip);
|
|
2534
2851
|
(_b = tooltipRef.current) === null || _b === void 0 ? void 0 : _b.removeEventListener('mouseleave', handleMouseLeaveTooltip);
|
|
@@ -2540,7 +2857,7 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2540
2857
|
});
|
|
2541
2858
|
});
|
|
2542
2859
|
};
|
|
2543
|
-
}, [anchorRefs, activeAnchor, anchorId, events, delayHide, delayShow]);
|
|
2860
|
+
}, [anchorRefs, activeAnchor, closeOnEsc, anchorId, events, delayHide, delayShow]);
|
|
2544
2861
|
useEffect(() => {
|
|
2545
2862
|
if (position) {
|
|
2546
2863
|
// if `position` is set, override regular and `float` positioning
|
|
@@ -2575,6 +2892,7 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2575
2892
|
tooltipReference: tooltipRef.current,
|
|
2576
2893
|
tooltipArrowReference: tooltipArrowRef.current,
|
|
2577
2894
|
strategy: positionStrategy,
|
|
2895
|
+
middlewares,
|
|
2578
2896
|
}).then((computedStylesData) => {
|
|
2579
2897
|
if (!mounted) {
|
|
2580
2898
|
// invalidate computed positions after remount
|
|
@@ -2623,7 +2941,7 @@ content, html, isOpen, setIsOpen, }) => {
|
|
|
2623
2941
|
}), style: inlineArrowStyles, ref: tooltipArrowRef })] }));
|
|
2624
2942
|
};
|
|
2625
2943
|
|
|
2626
|
-
const TooltipController = ({ id, anchorId, content, html, className, classNameArrow, variant = 'dark', place = 'top', offset = 10, wrapper = 'div', children = null, events = ['hover'], positionStrategy = 'absolute', delayShow = 0, delayHide = 0, float = false, noArrow = false, clickable = false, style, position, isOpen, setIsOpen, afterShow, afterHide, }) => {
|
|
2944
|
+
const TooltipController = ({ id, anchorId, content, html, className, classNameArrow, variant = 'dark', place = 'top', offset = 10, wrapper = 'div', children = null, events = ['hover'], positionStrategy = 'absolute', middlewares, delayShow = 0, delayHide = 0, float = false, noArrow = false, clickable = false, closeOnEsc = false, style, position, isOpen, setIsOpen, afterShow, afterHide, }) => {
|
|
2627
2945
|
const [tooltipContent, setTooltipContent] = useState(content);
|
|
2628
2946
|
const [tooltipHtml, setTooltipHtml] = useState(html);
|
|
2629
2947
|
const [tooltipPlace, setTooltipPlace] = useState(place);
|
|
@@ -2755,11 +3073,13 @@ const TooltipController = ({ id, anchorId, content, html, className, classNameAr
|
|
|
2755
3073
|
wrapper: tooltipWrapper,
|
|
2756
3074
|
events: tooltipEvents,
|
|
2757
3075
|
positionStrategy: tooltipPositionStrategy,
|
|
3076
|
+
middlewares,
|
|
2758
3077
|
delayShow: tooltipDelayShow,
|
|
2759
3078
|
delayHide: tooltipDelayHide,
|
|
2760
3079
|
float: tooltipFloat,
|
|
2761
3080
|
noArrow,
|
|
2762
3081
|
clickable,
|
|
3082
|
+
closeOnEsc,
|
|
2763
3083
|
style,
|
|
2764
3084
|
position,
|
|
2765
3085
|
isOpen,
|
|
@@ -2770,4 +3090,4 @@ const TooltipController = ({ id, anchorId, content, html, className, classNameAr
|
|
|
2770
3090
|
return children ? jsxRuntime.exports.jsx(Tooltip, { ...props, children: children }) : jsxRuntime.exports.jsx(Tooltip, { ...props });
|
|
2771
3091
|
};
|
|
2772
3092
|
|
|
2773
|
-
export { TooltipController as Tooltip, TooltipProvider, TooltipWrapper };
|
|
3093
|
+
export { TooltipController as Tooltip, TooltipProvider, TooltipWrapper, autoPlacement, flip, inline, offset, shift, size };
|