@hanzogui/popper 3.0.2 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,593 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf,
6
- __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: !0
11
- });
12
- },
13
- __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
15
- get: () => from[key],
16
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
- });
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
26
- value: mod,
27
- enumerable: !0
28
- }) : target, mod)),
29
- __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
30
- value: !0
31
- }), mod);
32
- var Popper_exports = {};
33
- __export(Popper_exports, {
34
- Popper: () => Popper,
35
- PopperAnchor: () => PopperAnchor,
36
- PopperArrow: () => PopperArrow,
37
- PopperArrowFrame: () => PopperArrowFrame,
38
- PopperContent: () => PopperContent,
39
- PopperContentFrame: () => PopperContentFrame,
40
- PopperContextFast: () => PopperContextFast,
41
- PopperContextSlow: () => PopperContextSlow,
42
- PopperPositionContext: () => PopperPositionContext,
43
- PopperProvider: () => PopperProvider,
44
- PopperProviderFast: () => PopperProviderFast,
45
- PopperProviderSlow: () => PopperProviderSlow,
46
- setupPopper: () => setupPopper,
47
- usePopperContext: () => usePopperContext,
48
- usePopperContextSlow: () => usePopperContextSlow
49
- });
50
- module.exports = __toCommonJS(Popper_exports);
51
- var import_react_dom = require("react-dom"),
52
- import_gui_compose_refs = require("@hanzogui/compose-refs"),
53
- import_gui_constants = require("@hanzogui/constants"),
54
- import_gui_core = require("@hanzogui/core"),
55
- import_gui_floating = require("@hanzogui/floating"),
56
- import_gui_floating2 = require("@hanzogui/floating"),
57
- import_gui_get_token = require("@hanzogui/get-token"),
58
- import_gui_stacks = require("@hanzogui/stacks"),
59
- import_gui_start_transition = require("@hanzogui/start-transition"),
60
- React = __toESM(require("react"), 1),
61
- import_react_native = require("react-native-web"),
62
- import_jsx_runtime = require("react/jsx-runtime");
63
- const PopperContextFast = (0, import_gui_core.createStyledContext)(
64
- // since we always provide this we can avoid setting here
65
- {}, "Popper__"),
66
- PopperPositionContext = import_gui_core.createStyledContext,
67
- {
68
- useStyledContext: usePopperContext,
69
- Provider: PopperProviderFast
70
- } = PopperContextFast,
71
- PopperContextSlow = (0, import_gui_core.createStyledContext)(
72
- // since we always provide this we can avoid setting here
73
- {}, "PopperSlow__"),
74
- {
75
- useStyledContext: usePopperContextSlow,
76
- Provider: PopperProviderSlow
77
- } = PopperContextSlow,
78
- PopperProvider = ({
79
- scope,
80
- children,
81
- ...context
82
- }) => {
83
- const fns = React.useRef(context);
84
- fns.current = context;
85
- const [slowContext] = React.useState(() => ({
86
- refs: context.refs,
87
- triggerElements: context.triggerElements,
88
- update(...a) {
89
- fns.current.update(...a);
90
- },
91
- getReferenceProps(p) {
92
- return fns.current.getReferenceProps?.(p);
93
- },
94
- onHoverReference(e) {
95
- fns.current.onHoverReference?.(e);
96
- },
97
- onLeaveReference() {
98
- fns.current.onLeaveReference?.();
99
- }
100
- }));
101
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopperProviderFast, {
102
- scope,
103
- ...context,
104
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopperProviderSlow, {
105
- scope,
106
- ...slowContext,
107
- children
108
- })
109
- });
110
- },
111
- checkFloating = void 0,
112
- setupOptions = {};
113
- function setupPopper(options) {
114
- Object.assign(setupOptions, options);
115
- }
116
- function getSideAndAlignFromPlacement(placement) {
117
- const [side, align = "center"] = placement.split("-");
118
- return [side, align];
119
- }
120
- const transformOriginMiddleware = options => ({
121
- name: "transformOrigin",
122
- options,
123
- fn(data) {
124
- const {
125
- placement,
126
- rects,
127
- middlewareData
128
- } = data,
129
- isArrowHidden = middlewareData.arrow?.centerOffset !== 0,
130
- arrowWidth = isArrowHidden ? 0 : options.arrowWidth,
131
- arrowHeight = isArrowHidden ? 0 : options.arrowHeight,
132
- [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement),
133
- noArrowAlign = {
134
- start: "0%",
135
- center: "50%",
136
- end: "100%"
137
- }[placedAlign],
138
- arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2,
139
- arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;
140
- let x = "",
141
- y = "";
142
- return placedSide === "bottom" ? (x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`, y = `${-arrowHeight}px`) : placedSide === "top" ? (x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`, y = `${rects.floating.height + arrowHeight}px`) : placedSide === "right" ? (x = `${-arrowHeight}px`, y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`) : placedSide === "left" && (x = `${rects.floating.width + arrowHeight}px`, y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`), {
143
- data: {
144
- x,
145
- y
146
- }
147
- };
148
- }
149
- });
150
- function tamaguiAutoUpdate(reference, floating, update) {
151
- update();
152
- let rafId = requestAnimationFrame(() => {
153
- update(), rafId = 0;
154
- });
155
- const cleanups = [() => {
156
- rafId && cancelAnimationFrame(rafId);
157
- }];
158
- reference instanceof HTMLElement && cleanups.push((0, import_gui_core.registerLayoutNode)(reference, update));
159
- const ancestors = [...(reference instanceof Element ? (0, import_gui_floating2.getOverflowAncestors)(reference) : []), ...(0, import_gui_floating2.getOverflowAncestors)(floating)],
160
- uniqueAncestors = [...new Set(ancestors)];
161
- for (const ancestor of uniqueAncestors) ancestor.addEventListener("scroll", update, {
162
- passive: !0
163
- });
164
- return window.addEventListener("resize", update), cleanups.push(() => {
165
- for (const ancestor of uniqueAncestors) ancestor.removeEventListener("scroll", update);
166
- window.removeEventListener("resize", update);
167
- }), () => cleanups.forEach(fn => fn());
168
- }
169
- function Popper(props) {
170
- const {
171
- children,
172
- size,
173
- strategy = "absolute",
174
- placement = "bottom",
175
- stayInFrame,
176
- allowFlip,
177
- offset,
178
- disableRTL,
179
- resize,
180
- passThrough,
181
- open,
182
- scope
183
- } = props,
184
- [arrowEl, setArrow] = React.useState(null),
185
- [arrowSize, setArrowSize] = React.useState(0),
186
- offsetOptions = offset ?? arrowSize,
187
- floatingStyle = React.useRef({}),
188
- isOpen = passThrough ? !1 : open ?? !0,
189
- middlewareRef = React.useRef([]);
190
- isOpen && (middlewareRef.current = [
191
- // order matters: offset first, then flip, then shift, then arrow
192
- typeof offsetOptions < "u" ? (0, import_gui_floating2.offset)(offsetOptions) : null, allowFlip ? (0, import_gui_floating2.flip)(typeof allowFlip == "boolean" ? {} : allowFlip) : null,
193
- // NOTE: shift's axis terminology is reversed vs flip/offset:
194
- // for top/bottom placements: mainAxis = horizontal, crossAxis = vertical
195
- // for left/right placements: mainAxis = vertical, crossAxis = horizontal
196
- // default to horizontal shift only (mainAxis: true, crossAxis: false)
197
- stayInFrame ? (0, import_gui_floating2.shift)({
198
- padding: 10,
199
- mainAxis: !0,
200
- crossAxis: !1,
201
- ...(typeof stayInFrame == "object" ? stayInFrame : null)
202
- }) : null, arrowEl ? (0, import_gui_floating2.arrow)({
203
- element: arrowEl
204
- }) : null, checkFloating, resize ? (0, import_gui_floating2.size)({
205
- padding: typeof stayInFrame == "object" ? stayInFrame.padding : 10,
206
- apply({
207
- availableHeight,
208
- availableWidth
209
- }) {
210
- if (passThrough) return;
211
- Object.assign(floatingStyle.current, {
212
- maxHeight: `${availableHeight}px`,
213
- maxWidth: `${availableWidth}px`
214
- });
215
- const floatingChild = floating.refs.floating.current?.firstChild;
216
- floatingChild && floatingChild instanceof HTMLElement && Object.assign(floatingChild.style, floatingStyle.current);
217
- },
218
- ...(typeof resize == "object" && resize)
219
- }) : null, (0, import_gui_floating2.size)({
220
- apply({
221
- elements,
222
- rects,
223
- availableWidth,
224
- availableHeight
225
- }) {
226
- const {
227
- width: anchorWidth,
228
- height: anchorHeight
229
- } = rects.reference,
230
- contentStyle = elements.floating.style;
231
- contentStyle.setProperty("--tamagui-popper-available-width", `${availableWidth}px`), contentStyle.setProperty("--tamagui-popper-available-height", `${availableHeight}px`), contentStyle.setProperty("--tamagui-popper-anchor-width", `${anchorWidth}px`), contentStyle.setProperty("--tamagui-popper-anchor-height", `${anchorHeight}px`);
232
- }
233
- }), transformOriginMiddleware({
234
- arrowHeight: arrowSize,
235
- arrowWidth: arrowSize
236
- })].filter(Boolean));
237
- let floating = (0, import_gui_floating2.useFloating)({
238
- open: isOpen,
239
- strategy,
240
- placement,
241
- sameScrollView: !1,
242
- // this only takes effect on native
243
- whileElementsMounted: isOpen ? tamaguiAutoUpdate : void 0,
244
- platform: disableRTL ?? setupOptions.disableRTL ? {
245
- ...import_gui_floating2.platform,
246
- isRTL(element) {
247
- return !1;
248
- }
249
- } : import_gui_floating2.platform,
250
- middleware: middlewareRef.current
251
- });
252
- floating = React.useMemo(() => {
253
- const og = floating.getFloatingProps;
254
- return resize && og && (floating.getFloatingProps = props2 => og({
255
- ...props2,
256
- style: {
257
- ...props2.style,
258
- ...floatingStyle.current
259
- }
260
- })), floating;
261
- }, [floating, resize ? JSON.stringify(resize) : null]);
262
- const {
263
- middlewareData
264
- } = floating,
265
- popperContext = React.useMemo(() => ({
266
- size,
267
- arrowRef: setArrow,
268
- arrowStyle: middlewareData.arrow,
269
- onArrowSize: setArrowSize,
270
- hasFloating: middlewareData.checkFloating?.hasFloating,
271
- transformOrigin: middlewareData.transformOrigin,
272
- open: !!open,
273
- ...floating
274
- }), [open, size, floating, JSON.stringify(middlewareData.arrow || null), JSON.stringify(middlewareData.transformOrigin || null)]);
275
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopperProvider, {
276
- scope,
277
- ...popperContext,
278
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_gui_floating.FloatingOverrideContext.Provider, {
279
- value: null,
280
- children
281
- })
282
- });
283
- }
284
- const PopperAnchor = import_gui_stacks.YStack.styleable(function (props, forwardedRef) {
285
- const {
286
- virtualRef,
287
- scope,
288
- ...rest
289
- } = props,
290
- context = usePopperContextSlow(scope),
291
- {
292
- getReferenceProps,
293
- refs,
294
- update
295
- } = context,
296
- ref = React.useRef(null),
297
- triggerId = React.useId();
298
- React.useEffect(() => {
299
- if (!scope || !context.triggerElements || !ref.current || !(ref.current instanceof Element)) return;
300
- const el = ref.current;
301
- return context.triggerElements.add(triggerId, el), () => {
302
- context.triggerElements?.delete(triggerId);
303
- };
304
- }, [scope, triggerId, context.triggerElements]), React.useEffect(() => {
305
- virtualRef && (refs.setReference(virtualRef.current), update());
306
- }, [virtualRef]);
307
- const refProps = getReferenceProps?.({
308
- ...rest,
309
- ref
310
- }) || null,
311
- safeSetReference = React.useCallback(node => {
312
- (0, import_gui_start_transition.startTransition)(() => {
313
- refs.setReference(node);
314
- });
315
- },
316
- // it was refs.setRefernce but its stable and refs is undefined on server
317
- [refs]),
318
- shouldHandleInHover = import_gui_constants.isWeb && scope,
319
- composedRefs = (0, import_gui_compose_refs.useComposedRefs)(forwardedRef, ref,
320
- // web handles this onMouseEnter below so it can support multiple targets + hovering
321
- shouldHandleInHover ? void 0 : safeSetReference);
322
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_gui_core.View, {
323
- ...rest,
324
- ...refProps,
325
- ref: composedRefs,
326
- ...(shouldHandleInHover && {
327
- // scoped poppers with multiple triggers: set the reference on
328
- // mouseEnter so floating-ui positions relative to the hovered
329
- // trigger, not the last one rendered.
330
- //
331
- // flushSync is critical here: without it, setReference batches
332
- // with React's async state updates and the arrow/content position
333
- // computes against the OLD reference element. this causes the
334
- // arrow to flash at x=0 (top-left) during trigger switches.
335
- // flushSync forces synchronous commit so update() below reads
336
- // the correct reference element immediately.
337
- onMouseEnter: e => {
338
- const el = e.currentTarget ?? ref.current;
339
- if (el instanceof HTMLElement) {
340
- if ((0, import_react_dom.flushSync)(() => refs.setReference(el)), update(), !refProps) return;
341
- refProps.onPointerEnter?.(e), context.onHoverReference?.(e.nativeEvent);
342
- }
343
- },
344
- onMouseLeave: e => {
345
- context.onLeaveReference?.(), refProps?.onMouseLeave?.(e);
346
- }
347
- })
348
- });
349
- }),
350
- PopperContentFrame = (0, import_gui_core.styled)(import_gui_stacks.YStack, {
351
- name: "PopperContent",
352
- variants: {
353
- unstyled: {
354
- true: {}
355
- },
356
- size: {
357
- "...size": (val, {
358
- tokens
359
- }) => ({
360
- padding: tokens.space[val],
361
- borderRadius: tokens.radius[val]
362
- })
363
- }
364
- }
365
- }),
366
- PopperContent = React.forwardRef(function (props, forwardedRef) {
367
- const {
368
- scope,
369
- animatePosition,
370
- enableAnimationForPositionChange,
371
- children,
372
- passThrough,
373
- unstyled,
374
- ...rest
375
- } = props,
376
- animatePos = animatePosition ?? enableAnimationForPositionChange,
377
- context = usePopperContext(scope),
378
- {
379
- strategy,
380
- placement,
381
- refs,
382
- x,
383
- y,
384
- getFloatingProps,
385
- size,
386
- isPositioned,
387
- transformOrigin,
388
- update
389
- } = context,
390
- updateRef = React.useRef(update);
391
- updateRef.current = update;
392
- const lastNodeRef = React.useRef(null),
393
- safeSetFloating = React.useCallback(node => {
394
- const isNewNode = node !== lastNodeRef.current;
395
- node && (lastNodeRef.current = node, refs.setFloating(node), isNewNode || updateRef.current?.());
396
- }, [refs.setFloating]);
397
- React.useEffect(() => () => {
398
- const ourNode = lastNodeRef.current;
399
- ourNode && refs.floating.current === ourNode && refs.setFloating(null), lastNodeRef.current = null;
400
- }, []);
401
- const contentRefs = (0, import_gui_compose_refs.useComposedRefs)(safeSetFloating, forwardedRef),
402
- [needsMeasure, setNeedsMeasure] = React.useState(animatePos);
403
- (0, import_gui_constants.useIsomorphicLayoutEffect)(() => {
404
- needsMeasure && x && y && setNeedsMeasure(!1);
405
- }, [needsMeasure, animatePos, x, y]);
406
- const hasBeenPositioned = React.useRef(!1),
407
- lastGoodPosition = React.useRef({
408
- x: 0,
409
- y: 0
410
- });
411
- (x !== 0 || y !== 0) && (lastGoodPosition.current = {
412
- x,
413
- y
414
- }, isPositioned && (hasBeenPositioned.current = !0));
415
- const brieflyZero = hasBeenPositioned.current && x === 0 && y === 0,
416
- effectiveX = brieflyZero ? lastGoodPosition.current.x : x,
417
- effectiveY = brieflyZero ? lastGoodPosition.current.y : y,
418
- hide = !hasBeenPositioned.current && effectiveX === 0 && effectiveY === 0,
419
- disableAnimationProp =
420
- // if they want to animate also when re-positioning allow it
421
- animatePos === "even-when-repositioning" ? needsMeasure : !hasBeenPositioned.current && !isPositioned || needsMeasure,
422
- [disableAnimation, setDisableAnimation] = React.useState(disableAnimationProp);
423
- React.useEffect(() => {
424
- setDisableAnimation(disableAnimationProp);
425
- }, [disableAnimationProp]);
426
- const frameProps = {
427
- ref: contentRefs,
428
- ...(hide ? {} : {
429
- x: effectiveX || 0,
430
- y: effectiveY || 0
431
- }),
432
- top: 0,
433
- left: 0,
434
- position: strategy,
435
- opacity: hide ? 0 : 1,
436
- ...(animatePos && {
437
- transition: rest.transition,
438
- // animateOnly: [] turns off transitions while keeping styles applied,
439
- // letting the element move to its position silently before animations start
440
- animateOnly: disableAnimation ? [] : rest.animateOnly,
441
- animatePresence: !1
442
- })
443
- },
444
- {
445
- style,
446
- ...floatingProps
447
- } = getFloatingProps ? getFloatingProps(frameProps) : frameProps,
448
- transformOriginStyle = import_gui_constants.isWeb && transformOrigin ? {
449
- transformOrigin: `${transformOrigin.x} ${transformOrigin.y}`
450
- } : void 0;
451
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_gui_core.LayoutMeasurementController, {
452
- disable: !context.open,
453
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_gui_core.View, {
454
- passThrough,
455
- ref: contentRefs,
456
- direction: rest.direction,
457
- ...(passThrough ? null : floatingProps),
458
- ...(!passThrough && animatePos && {
459
- "data-popper-animate-position": "true"
460
- }),
461
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopperContentFrame, {
462
- passThrough,
463
- unstyled,
464
- ...(!passThrough && {
465
- "data-placement": placement,
466
- "data-strategy": strategy,
467
- size,
468
- ...style,
469
- ...transformOriginStyle,
470
- ...rest
471
- }),
472
- children
473
- }, "popper-content-frame")
474
- })
475
- });
476
- }),
477
- PopperArrowFrame = (0, import_gui_core.styled)(import_gui_stacks.YStack, {
478
- name: "PopperArrow",
479
- variants: {
480
- unstyled: {
481
- false: {
482
- borderColor: "$borderColor",
483
- backgroundColor: "$background",
484
- position: "relative"
485
- }
486
- }
487
- },
488
- defaultVariants: {
489
- unstyled: process.env.HANZO_GUI_HEADLESS === "1"
490
- }
491
- }),
492
- PopperArrowOuterFrame = (0, import_gui_core.styled)(import_gui_stacks.YStack, {
493
- name: "PopperArrowOuter",
494
- variants: {
495
- unstyled: {
496
- false: {
497
- position: "absolute",
498
- zIndex: 1e6,
499
- pointerEvents: "none",
500
- overflow: "hidden",
501
- alignItems: "center",
502
- justifyContent: "center"
503
- }
504
- }
505
- },
506
- defaultVariants: {
507
- unstyled: process.env.HANZO_GUI_HEADLESS === "1"
508
- }
509
- }),
510
- opposites = {
511
- top: "bottom",
512
- right: "left",
513
- bottom: "top",
514
- left: "right"
515
- },
516
- PopperArrow = React.forwardRef(function (propsIn, forwardedRef) {
517
- const {
518
- scope,
519
- animatePosition,
520
- transition,
521
- ...rest
522
- } = propsIn,
523
- {
524
- offset,
525
- size: sizeProp,
526
- borderWidth = 0,
527
- ...arrowProps
528
- } = rest,
529
- context = usePopperContext(scope),
530
- sizeVal = typeof sizeProp == "number" ? sizeProp : (0, import_gui_core.getVariableValue)((0, import_gui_get_token.getSpace)(sizeProp ?? context.size, {
531
- shift: -2,
532
- bounds: [2]
533
- })),
534
- size = Math.max(0, +sizeVal),
535
- {
536
- placement
537
- } = context,
538
- refs = (0, import_gui_compose_refs.useComposedRefs)(context.arrowRef, forwardedRef),
539
- x = context.arrowStyle?.x || 0,
540
- y = context.arrowStyle?.y || 0,
541
- arrowPositioned = context.arrowStyle != null,
542
- primaryPlacement = placement ? placement.split("-")[0] : "top",
543
- arrowStyle = {
544
- x,
545
- y,
546
- width: size,
547
- height: size
548
- },
549
- innerArrowStyle = {},
550
- isVertical = primaryPlacement === "bottom" || primaryPlacement === "top";
551
- if (primaryPlacement) {
552
- arrowStyle[isVertical ? "width" : "height"] = size * 2;
553
- const oppSide = opposites[primaryPlacement];
554
- oppSide && (arrowStyle[oppSide] = -size, innerArrowStyle[oppSide] = size / 2), (oppSide === "top" || oppSide === "bottom") && (arrowStyle.left = 0), (oppSide === "left" || oppSide === "right") && (arrowStyle.top = 0), (0, import_gui_constants.useIsomorphicLayoutEffect)(() => {
555
- context.onArrowSize?.(size);
556
- }, [size, context.onArrowSize]);
557
- }
558
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopperArrowOuterFrame, {
559
- ref: refs,
560
- ...arrowStyle,
561
- ...(!arrowPositioned && {
562
- opacity: 0
563
- }),
564
- ...(animatePosition && {
565
- transition,
566
- animateOnly: ["transform"],
567
- animatePresence: !1
568
- }),
569
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopperArrowFrame, {
570
- width: size,
571
- height: size,
572
- ...arrowProps,
573
- ...innerArrowStyle,
574
- rotate: "45deg",
575
- ...(primaryPlacement === "bottom" && {
576
- borderLeftWidth: borderWidth,
577
- borderTopWidth: borderWidth
578
- }),
579
- ...(primaryPlacement === "top" && {
580
- borderBottomWidth: borderWidth,
581
- borderRightWidth: borderWidth
582
- }),
583
- ...(primaryPlacement === "right" && {
584
- borderLeftWidth: borderWidth,
585
- borderBottomWidth: borderWidth
586
- }),
587
- ...(primaryPlacement === "left" && {
588
- borderTopWidth: borderWidth,
589
- borderRightWidth: borderWidth
590
- })
591
- })
592
- });
593
- });