panelui-native 0.7.0 → 0.9.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/lib/module/components/attachment/index.js +219 -0
- package/lib/module/components/attachment/index.js.map +1 -0
- package/lib/module/components/bottom-sheet/index.js +15 -1
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/dialog/index.js +6 -2
- package/lib/module/components/dialog/index.js.map +1 -1
- package/lib/module/components/empty-state/index.js +94 -17
- package/lib/module/components/empty-state/index.js.map +1 -1
- package/lib/module/components/line-chart/index.js +1024 -0
- package/lib/module/components/line-chart/index.js.map +1 -0
- package/lib/module/components/marker/index.js +190 -0
- package/lib/module/components/marker/index.js.map +1 -0
- package/lib/module/components/message/index.js +24 -8
- package/lib/module/components/message/index.js.map +1 -1
- package/lib/module/components/message-scroller/index.js +451 -0
- package/lib/module/components/message-scroller/index.js.map +1 -0
- package/lib/module/components/popover/index.js +500 -0
- package/lib/module/components/popover/index.js.map +1 -0
- package/lib/module/components/radio-group/index.js +104 -16
- package/lib/module/components/radio-group/index.js.map +1 -1
- package/lib/module/components/separator/index.js +91 -0
- package/lib/module/components/separator/index.js.map +1 -0
- package/lib/module/components/surface/index.js +21 -2
- package/lib/module/components/surface/index.js.map +1 -1
- package/lib/module/icons/index.js +69 -0
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/index.js +7 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/primitives/scrim.js +72 -0
- package/lib/module/primitives/scrim.js.map +1 -0
- package/lib/typescript/src/components/attachment/index.d.ts +93 -0
- package/lib/typescript/src/components/attachment/index.d.ts.map +1 -0
- package/lib/typescript/src/components/bottom-sheet/index.d.ts +6 -1
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/dialog/index.d.ts +7 -1
- package/lib/typescript/src/components/dialog/index.d.ts.map +1 -1
- package/lib/typescript/src/components/empty-state/index.d.ts +152 -2
- package/lib/typescript/src/components/empty-state/index.d.ts.map +1 -1
- package/lib/typescript/src/components/line-chart/index.d.ts +247 -0
- package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/marker/index.d.ts +137 -0
- package/lib/typescript/src/components/marker/index.d.ts.map +1 -0
- package/lib/typescript/src/components/message/index.d.ts +8 -1
- package/lib/typescript/src/components/message/index.d.ts.map +1 -1
- package/lib/typescript/src/components/message-scroller/index.d.ts +150 -0
- package/lib/typescript/src/components/message-scroller/index.d.ts.map +1 -0
- package/lib/typescript/src/components/popover/index.d.ts +130 -0
- package/lib/typescript/src/components/popover/index.d.ts.map +1 -0
- package/lib/typescript/src/components/radio-group/index.d.ts +32 -0
- package/lib/typescript/src/components/radio-group/index.d.ts.map +1 -1
- package/lib/typescript/src/components/separator/index.d.ts +47 -0
- package/lib/typescript/src/components/separator/index.d.ts.map +1 -0
- package/lib/typescript/src/components/surface/index.d.ts +51 -2
- package/lib/typescript/src/components/surface/index.d.ts.map +1 -1
- package/lib/typescript/src/icons/index.d.ts +6 -0
- package/lib/typescript/src/icons/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +7 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/primitives/scrim.d.ts +21 -0
- package/lib/typescript/src/primitives/scrim.d.ts.map +1 -0
- package/package.json +5 -1
- package/src/components/attachment/index.tsx +279 -0
- package/src/components/bottom-sheet/index.tsx +20 -0
- package/src/components/dialog/index.tsx +10 -1
- package/src/components/empty-state/index.tsx +60 -14
- package/src/components/line-chart/index.tsx +1224 -0
- package/src/components/marker/index.tsx +194 -0
- package/src/components/message/index.tsx +29 -5
- package/src/components/message-scroller/index.tsx +574 -0
- package/src/components/popover/index.tsx +599 -0
- package/src/components/radio-group/index.tsx +108 -17
- package/src/components/separator/index.tsx +97 -0
- package/src/components/surface/index.tsx +29 -3
- package/src/icons/index.tsx +48 -0
- package/src/index.ts +60 -0
- package/src/primitives/scrim.tsx +95 -0
- package/theme.css +58 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Popover — a panel anchored to the thing that opened it.
|
|
5
|
+
*
|
|
6
|
+
* A dialog takes the screen and asks to be dealt with; a popover stays next to
|
|
7
|
+
* its trigger and keeps the context around it visible. That difference is the
|
|
8
|
+
* whole reason both exist, and it is why this one is positioned rather than
|
|
9
|
+
* centred.
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <Popover>
|
|
13
|
+
* <Popover.Trigger>
|
|
14
|
+
* <Button variant="outline">Options</Button>
|
|
15
|
+
* </Popover.Trigger>
|
|
16
|
+
* <Popover.Content placement="bottom" align="end">
|
|
17
|
+
* <Popover.Title>Export</Popover.Title>
|
|
18
|
+
* <Popover.Description>Choose a format.</Popover.Description>
|
|
19
|
+
* </Popover.Content>
|
|
20
|
+
* </Popover>
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Placement is a preference, not a promise. The trigger is measured in window
|
|
24
|
+
* coordinates when it is pressed, the panel measures itself on its first
|
|
25
|
+
* layout, and the two are reconciled against the safe area: a panel that would
|
|
26
|
+
* run off the bottom flips above the trigger, and one that would run off the
|
|
27
|
+
* side slides back inside. So `placement="bottom"` means *below, if below
|
|
28
|
+
* fits* — which is the only behaviour that survives a trigger near an edge.
|
|
29
|
+
*
|
|
30
|
+
* The first frame is rendered transparent, because the panel's own size is not
|
|
31
|
+
* known until it has laid out once. Without that it would appear at the origin
|
|
32
|
+
* and jump into place.
|
|
33
|
+
*/
|
|
34
|
+
import { cloneElement, createContext, isValidElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
35
|
+
import { Pressable, useWindowDimensions, View } from 'react-native';
|
|
36
|
+
import Animated, { FadeOut, useAnimatedStyle, useReducedMotion, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
|
|
37
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
38
|
+
import { Portal } from "../../primitives/portal.js";
|
|
39
|
+
import { Scrim } from "../../primitives/scrim.js";
|
|
40
|
+
import { BottomSheet } from "../bottom-sheet/index.js";
|
|
41
|
+
import { Text } from "../../primitives/text.js";
|
|
42
|
+
import { cn } from "../../utils/cn.js";
|
|
43
|
+
|
|
44
|
+
/** Gap between the trigger and the panel. */
|
|
45
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
46
|
+
const DEFAULT_OFFSET = 8;
|
|
47
|
+
/** Smallest gap allowed between the panel and the edge of the safe area. */
|
|
48
|
+
const SCREEN_MARGIN = 12;
|
|
49
|
+
/** Side of the arrow square before it is rotated 45°. */
|
|
50
|
+
const ARROW_SIZE = 12;
|
|
51
|
+
const PopoverContext = /*#__PURE__*/createContext(null);
|
|
52
|
+
function usePopover(component) {
|
|
53
|
+
const context = useContext(PopoverContext);
|
|
54
|
+
if (!context) {
|
|
55
|
+
throw new Error(`${component} must be used within a <Popover>`);
|
|
56
|
+
}
|
|
57
|
+
return context;
|
|
58
|
+
}
|
|
59
|
+
function PopoverRoot({
|
|
60
|
+
children,
|
|
61
|
+
open,
|
|
62
|
+
onOpenChange,
|
|
63
|
+
defaultOpen = false,
|
|
64
|
+
presentation = 'popover'
|
|
65
|
+
}) {
|
|
66
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
67
|
+
const [trigger, setTrigger] = useState(null);
|
|
68
|
+
const [placement, setPlacement] = useState('bottom');
|
|
69
|
+
const [arrowOffset, setArrowOffset] = useState(0);
|
|
70
|
+
const isControlled = open !== undefined;
|
|
71
|
+
const resolvedOpen = isControlled ? open : internalOpen;
|
|
72
|
+
const setOpen = useCallback(next => {
|
|
73
|
+
if (!isControlled) setInternalOpen(next);
|
|
74
|
+
onOpenChange?.(next);
|
|
75
|
+
}, [isControlled, onOpenChange]);
|
|
76
|
+
const context = useMemo(() => ({
|
|
77
|
+
open: resolvedOpen,
|
|
78
|
+
setOpen,
|
|
79
|
+
trigger,
|
|
80
|
+
setTrigger,
|
|
81
|
+
placement,
|
|
82
|
+
setPlacement,
|
|
83
|
+
arrowOffset,
|
|
84
|
+
setArrowOffset,
|
|
85
|
+
presentation
|
|
86
|
+
}), [resolvedOpen, setOpen, trigger, placement, arrowOffset, presentation]);
|
|
87
|
+
return /*#__PURE__*/_jsx(PopoverContext.Provider, {
|
|
88
|
+
value: context,
|
|
89
|
+
children: children
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Wraps its child and toggles the popover on press.
|
|
94
|
+
*
|
|
95
|
+
* The child is wrapped in a view rather than given a ref directly: the ref has
|
|
96
|
+
* to survive whatever the child is — a Button, a plain Pressable, an icon —
|
|
97
|
+
* and only a wrapper we own is guaranteed to be measurable.
|
|
98
|
+
*/
|
|
99
|
+
function PopoverTrigger({
|
|
100
|
+
children
|
|
101
|
+
}) {
|
|
102
|
+
const {
|
|
103
|
+
open,
|
|
104
|
+
setOpen,
|
|
105
|
+
setTrigger
|
|
106
|
+
} = usePopover('Popover.Trigger');
|
|
107
|
+
const ref = useRef(null);
|
|
108
|
+
const measureThenToggle = (...args) => {
|
|
109
|
+
if (/*#__PURE__*/isValidElement(children)) children.props.onPress?.(...args);
|
|
110
|
+
if (open) {
|
|
111
|
+
setOpen(false);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Measured on every open rather than on layout: the trigger may have
|
|
116
|
+
// scrolled since it was laid out, and a stale rect anchors the panel to
|
|
117
|
+
// where the trigger used to be.
|
|
118
|
+
ref.current?.measureInWindow((x, y, width, height) => {
|
|
119
|
+
setTrigger({
|
|
120
|
+
x,
|
|
121
|
+
y,
|
|
122
|
+
width,
|
|
123
|
+
height
|
|
124
|
+
});
|
|
125
|
+
setOpen(true);
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
return /*#__PURE__*/_jsx(View, {
|
|
129
|
+
ref: ref,
|
|
130
|
+
collapsable: false,
|
|
131
|
+
children: /*#__PURE__*/isValidElement(children) ? /*#__PURE__*/cloneElement(children, {
|
|
132
|
+
onPress: measureThenToggle
|
|
133
|
+
}) : children
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function PopoverContent({
|
|
137
|
+
className,
|
|
138
|
+
placement = 'bottom',
|
|
139
|
+
align = 'center',
|
|
140
|
+
offset = DEFAULT_OFFSET,
|
|
141
|
+
alignOffset = 0,
|
|
142
|
+
width = 'content-fit',
|
|
143
|
+
dismissible = true,
|
|
144
|
+
blur = false,
|
|
145
|
+
children,
|
|
146
|
+
...props
|
|
147
|
+
}) {
|
|
148
|
+
const context = usePopover('Popover.Content');
|
|
149
|
+
const {
|
|
150
|
+
open,
|
|
151
|
+
setOpen,
|
|
152
|
+
trigger,
|
|
153
|
+
setPlacement,
|
|
154
|
+
setArrowOffset,
|
|
155
|
+
presentation
|
|
156
|
+
} = context;
|
|
157
|
+
const {
|
|
158
|
+
width: screenWidth,
|
|
159
|
+
height: screenHeight
|
|
160
|
+
} = useWindowDimensions();
|
|
161
|
+
const insets = useSafeAreaInsets();
|
|
162
|
+
const [size, setSize] = useState(null);
|
|
163
|
+
|
|
164
|
+
// Panel size changes with its content, so it is re-measured rather than
|
|
165
|
+
// measured once — a popover whose body grows should not stay the old size.
|
|
166
|
+
const onLayout = event => {
|
|
167
|
+
const {
|
|
168
|
+
width: w,
|
|
169
|
+
height: h
|
|
170
|
+
} = event.nativeEvent.layout;
|
|
171
|
+
setSize(current => current && Math.abs(current.width - w) < 1 && Math.abs(current.height - h) < 1 ? current : {
|
|
172
|
+
width: w,
|
|
173
|
+
height: h
|
|
174
|
+
});
|
|
175
|
+
props.onLayout?.(event);
|
|
176
|
+
};
|
|
177
|
+
const bounds = {
|
|
178
|
+
left: insets.left + SCREEN_MARGIN,
|
|
179
|
+
right: screenWidth - insets.right - SCREEN_MARGIN,
|
|
180
|
+
top: insets.top + SCREEN_MARGIN,
|
|
181
|
+
bottom: screenHeight - insets.bottom - SCREEN_MARGIN
|
|
182
|
+
};
|
|
183
|
+
const resolvedWidth = width === 'content-fit' ? undefined : width === 'trigger' ? trigger?.width : width === 'full' ? bounds.right - bounds.left : width;
|
|
184
|
+
const position = trigger && size ? place({
|
|
185
|
+
trigger,
|
|
186
|
+
size,
|
|
187
|
+
placement,
|
|
188
|
+
align,
|
|
189
|
+
offset,
|
|
190
|
+
alignOffset,
|
|
191
|
+
bounds
|
|
192
|
+
}) : null;
|
|
193
|
+
|
|
194
|
+
// Publish the side actually used and where the trigger centre landed, so the
|
|
195
|
+
// arrow points at the trigger even after a flip or a clamp.
|
|
196
|
+
const resolvedPlacement = position?.placement;
|
|
197
|
+
const resolvedArrow = position?.arrowOffset;
|
|
198
|
+
useEffect(() => {
|
|
199
|
+
if (resolvedPlacement) setPlacement(resolvedPlacement);
|
|
200
|
+
if (resolvedArrow !== undefined) setArrowOffset(resolvedArrow);
|
|
201
|
+
}, [resolvedPlacement, resolvedArrow, setPlacement, setArrowOffset]);
|
|
202
|
+
|
|
203
|
+
/*
|
|
204
|
+
* The entrance is driven by hand rather than by an `entering` preset, and the
|
|
205
|
+
* reason is the measuring frame. A layout animation fires on mount — which
|
|
206
|
+
* here is the frame *before* the panel knows where it goes, so the whole
|
|
207
|
+
* animation would play at the origin, invisibly, and the panel would then
|
|
208
|
+
* snap into place fully formed. Holding the values until a position exists
|
|
209
|
+
* is the only way to have the animation and the correct position both.
|
|
210
|
+
*/
|
|
211
|
+
const appear = useSharedValue(0);
|
|
212
|
+
const settle = useSharedValue(0);
|
|
213
|
+
const reducedMotion = useReducedMotion();
|
|
214
|
+
const placed = !!position;
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
if (!placed) {
|
|
217
|
+
appear.value = 0;
|
|
218
|
+
settle.value = 0;
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (reducedMotion) {
|
|
222
|
+
appear.value = 1;
|
|
223
|
+
settle.value = 1;
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
appear.value = withTiming(1, {
|
|
227
|
+
duration: 120
|
|
228
|
+
});
|
|
229
|
+
settle.value = withSpring(1, {
|
|
230
|
+
damping: 18,
|
|
231
|
+
stiffness: 250,
|
|
232
|
+
mass: 0.6
|
|
233
|
+
});
|
|
234
|
+
}, [placed, reducedMotion, appear, settle]);
|
|
235
|
+
|
|
236
|
+
// Starts slightly small and shifted towards the trigger, so the panel
|
|
237
|
+
// appears to unfold from it rather than fade in over it.
|
|
238
|
+
const origin = ENTRY_SHIFT[resolvedPlacement ?? placement];
|
|
239
|
+
const panelStyle = useAnimatedStyle(() => ({
|
|
240
|
+
opacity: appear.value,
|
|
241
|
+
transform: [{
|
|
242
|
+
translateX: origin.x * (1 - settle.value)
|
|
243
|
+
}, {
|
|
244
|
+
translateY: origin.y * (1 - settle.value)
|
|
245
|
+
}, {
|
|
246
|
+
scale: 0.94 + 0.06 * settle.value
|
|
247
|
+
}]
|
|
248
|
+
}));
|
|
249
|
+
|
|
250
|
+
// The sheet presentation hands off entirely to BottomSheet — it owns its own
|
|
251
|
+
// portal, backdrop and dismiss gesture, so there is nothing to anchor here.
|
|
252
|
+
// The context is re-provided inside so Popover.Close keeps closing it.
|
|
253
|
+
if (presentation === 'bottom-sheet') {
|
|
254
|
+
return /*#__PURE__*/_jsx(BottomSheet, {
|
|
255
|
+
open: open,
|
|
256
|
+
onOpenChange: setOpen,
|
|
257
|
+
children: /*#__PURE__*/_jsx(BottomSheet.Content, {
|
|
258
|
+
dismissible: dismissible,
|
|
259
|
+
className: className,
|
|
260
|
+
children: /*#__PURE__*/_jsx(PopoverContext.Provider, {
|
|
261
|
+
value: context,
|
|
262
|
+
children: children
|
|
263
|
+
})
|
|
264
|
+
})
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
if (!open || !trigger) return null;
|
|
268
|
+
return /*#__PURE__*/_jsx(Portal, {
|
|
269
|
+
children: /*#__PURE__*/_jsx(PopoverContext.Provider, {
|
|
270
|
+
value: context,
|
|
271
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
272
|
+
className: "absolute inset-0",
|
|
273
|
+
children: [blur ? /*#__PURE__*/_jsx(Scrim, {
|
|
274
|
+
blur: true,
|
|
275
|
+
intensity: 20,
|
|
276
|
+
dimClassName: "bg-black/30"
|
|
277
|
+
}) : null, /*#__PURE__*/_jsx(Pressable, {
|
|
278
|
+
accessibilityLabel: "Close",
|
|
279
|
+
className: "absolute inset-0",
|
|
280
|
+
onPress: dismissible ? () => setOpen(false) : undefined
|
|
281
|
+
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
282
|
+
exiting: FadeOut.duration(120),
|
|
283
|
+
onLayout: onLayout,
|
|
284
|
+
accessibilityViewIsModal: true,
|
|
285
|
+
style: [{
|
|
286
|
+
position: 'absolute',
|
|
287
|
+
// Until it has measured itself the panel has no honest
|
|
288
|
+
// position, so it is laid out off-screen rather than at the
|
|
289
|
+
// origin — an invisible view at 0,0 still catches taps.
|
|
290
|
+
top: position?.top ?? -9999,
|
|
291
|
+
left: position?.left ?? -9999,
|
|
292
|
+
maxWidth: bounds.right - bounds.left,
|
|
293
|
+
width: resolvedWidth
|
|
294
|
+
}, panelStyle, props.style],
|
|
295
|
+
className: cn('gap-1.5 rounded-2xl border border-border bg-popover p-4 shadow-lg', className),
|
|
296
|
+
...props,
|
|
297
|
+
children: children
|
|
298
|
+
})]
|
|
299
|
+
})
|
|
300
|
+
})
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* A small square rotated into a diamond, half-buried under the panel so only
|
|
305
|
+
* the point shows. It needs the panel to have a border for its own two visible
|
|
306
|
+
* edges to line up with — without one it reads as a floating lozenge.
|
|
307
|
+
*
|
|
308
|
+
* It points at the trigger's centre, which the panel resolves and publishes:
|
|
309
|
+
* when `align` shifts the panel off-centre, or a clamp slides it back on
|
|
310
|
+
* screen, the arrow stays over the trigger rather than over the panel's middle.
|
|
311
|
+
*/
|
|
312
|
+
function PopoverArrow({
|
|
313
|
+
className,
|
|
314
|
+
style,
|
|
315
|
+
...props
|
|
316
|
+
}) {
|
|
317
|
+
const {
|
|
318
|
+
trigger,
|
|
319
|
+
placement,
|
|
320
|
+
arrowOffset,
|
|
321
|
+
presentation
|
|
322
|
+
} = usePopover('Popover.Arrow');
|
|
323
|
+
// A sheet has no trigger edge to point at.
|
|
324
|
+
if (!trigger || presentation === 'bottom-sheet') return null;
|
|
325
|
+
const vertical = placement === 'top' || placement === 'bottom';
|
|
326
|
+
// The arrow sits on the edge facing the trigger, which is the opposite edge
|
|
327
|
+
// to the placement: a panel placed below has its arrow on top.
|
|
328
|
+
const edge = {
|
|
329
|
+
top: 'bottom',
|
|
330
|
+
bottom: 'top',
|
|
331
|
+
left: 'right',
|
|
332
|
+
right: 'left'
|
|
333
|
+
}[placement];
|
|
334
|
+
return /*#__PURE__*/_jsx(View, {
|
|
335
|
+
pointerEvents: "none",
|
|
336
|
+
accessibilityElementsHidden: true,
|
|
337
|
+
importantForAccessibility: "no-hide-descendants",
|
|
338
|
+
style: [{
|
|
339
|
+
position: 'absolute',
|
|
340
|
+
[edge]: -ARROW_SIZE / 2,
|
|
341
|
+
width: ARROW_SIZE,
|
|
342
|
+
height: ARROW_SIZE,
|
|
343
|
+
transform: [{
|
|
344
|
+
rotate: '45deg'
|
|
345
|
+
}],
|
|
346
|
+
// Centred on the trigger along the cross axis. `marginLeft/Top` backs
|
|
347
|
+
// it off by half its own size so `arrowOffset` lands on its centre.
|
|
348
|
+
...(vertical ? {
|
|
349
|
+
left: arrowOffset,
|
|
350
|
+
marginLeft: -ARROW_SIZE / 2
|
|
351
|
+
} : {
|
|
352
|
+
top: arrowOffset,
|
|
353
|
+
marginTop: -ARROW_SIZE / 2
|
|
354
|
+
})
|
|
355
|
+
}, style]
|
|
356
|
+
// Only the two edges that face outwards are drawn; the other two sit
|
|
357
|
+
// under the panel and would show as a seam across it.
|
|
358
|
+
,
|
|
359
|
+
className: cn('border-border bg-popover', placement === 'bottom' && 'border-l border-t', placement === 'top' && 'border-b border-r', placement === 'right' && 'border-b border-l', placement === 'left' && 'border-r border-t', className),
|
|
360
|
+
...props
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
const PopoverTitle = ({
|
|
364
|
+
className,
|
|
365
|
+
...props
|
|
366
|
+
}) => /*#__PURE__*/_jsx(Text, {
|
|
367
|
+
size: "base",
|
|
368
|
+
weight: "semibold",
|
|
369
|
+
className: cn('text-popover-foreground', className),
|
|
370
|
+
...props
|
|
371
|
+
});
|
|
372
|
+
PopoverTitle.displayName = 'Popover.Title';
|
|
373
|
+
const PopoverDescription = ({
|
|
374
|
+
className,
|
|
375
|
+
...props
|
|
376
|
+
}) => /*#__PURE__*/_jsx(Text, {
|
|
377
|
+
size: "sm",
|
|
378
|
+
muted: true,
|
|
379
|
+
className: className,
|
|
380
|
+
...props
|
|
381
|
+
});
|
|
382
|
+
PopoverDescription.displayName = 'Popover.Description';
|
|
383
|
+
/** Wraps its child and closes the popover on press. */
|
|
384
|
+
function PopoverClose({
|
|
385
|
+
children
|
|
386
|
+
}) {
|
|
387
|
+
const {
|
|
388
|
+
setOpen
|
|
389
|
+
} = usePopover('Popover.Close');
|
|
390
|
+
if (! /*#__PURE__*/isValidElement(children)) return children;
|
|
391
|
+
return /*#__PURE__*/cloneElement(children, {
|
|
392
|
+
onPress: (...args) => {
|
|
393
|
+
children.props.onPress?.(...args);
|
|
394
|
+
setOpen(false);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* -------------------------------------------------------------------------- */
|
|
400
|
+
/* Placement */
|
|
401
|
+
/* -------------------------------------------------------------------------- */
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Resolves the panel's window position.
|
|
405
|
+
*
|
|
406
|
+
* Two passes, in this order, because they answer different questions: the flip
|
|
407
|
+
* picks a *side* and only fires when the preferred one genuinely has less room
|
|
408
|
+
* than its opposite; the clamp then slides the panel along the other axis to
|
|
409
|
+
* keep it on screen. Doing the clamp first would let a panel be nudged inside
|
|
410
|
+
* the bounds and so look like it fits, hiding the fact that the wrong side was
|
|
411
|
+
* chosen.
|
|
412
|
+
*/
|
|
413
|
+
function place({
|
|
414
|
+
trigger,
|
|
415
|
+
size,
|
|
416
|
+
placement,
|
|
417
|
+
align,
|
|
418
|
+
offset,
|
|
419
|
+
alignOffset,
|
|
420
|
+
bounds
|
|
421
|
+
}) {
|
|
422
|
+
const roomAfter = {
|
|
423
|
+
bottom: bounds.bottom - (trigger.y + trigger.height + offset),
|
|
424
|
+
top: trigger.y - offset - bounds.top,
|
|
425
|
+
right: bounds.right - (trigger.x + trigger.width + offset),
|
|
426
|
+
left: trigger.x - offset - bounds.left
|
|
427
|
+
};
|
|
428
|
+
const opposite = {
|
|
429
|
+
top: 'bottom',
|
|
430
|
+
bottom: 'top',
|
|
431
|
+
left: 'right',
|
|
432
|
+
right: 'left'
|
|
433
|
+
};
|
|
434
|
+
const needed = placement === 'top' || placement === 'bottom' ? size.height : size.width;
|
|
435
|
+
const resolved = roomAfter[placement] < needed && roomAfter[opposite[placement]] > roomAfter[placement] ? opposite[placement] : placement;
|
|
436
|
+
const clamp = (value, min, max) =>
|
|
437
|
+
// `max < min` when the panel is wider than the space it has; pinning to the
|
|
438
|
+
// start edge at least keeps its beginning readable.
|
|
439
|
+
Math.max(min, Math.min(value, Math.max(min, max)));
|
|
440
|
+
|
|
441
|
+
// The arrow points at the trigger's centre, not the panel's — those differ
|
|
442
|
+
// whenever `align` is not center, or the panel was clamped inside the screen.
|
|
443
|
+
// It is expressed relative to the panel origin and clamped so it can never
|
|
444
|
+
// slide off the panel edge.
|
|
445
|
+
if (resolved === 'top' || resolved === 'bottom') {
|
|
446
|
+
const top = resolved === 'bottom' ? trigger.y + trigger.height + offset : trigger.y - size.height - offset;
|
|
447
|
+
const left = align === 'start' ? trigger.x + alignOffset : align === 'end' ? trigger.x + trigger.width - size.width + alignOffset : trigger.x + trigger.width / 2 - size.width / 2 + alignOffset;
|
|
448
|
+
const clampedLeft = clamp(left, bounds.left, bounds.right - size.width);
|
|
449
|
+
const triggerCentreX = trigger.x + trigger.width / 2;
|
|
450
|
+
return {
|
|
451
|
+
placement: resolved,
|
|
452
|
+
top: clamp(top, bounds.top, bounds.bottom - size.height),
|
|
453
|
+
left: clampedLeft,
|
|
454
|
+
arrowOffset: clamp(triggerCentreX - clampedLeft, ARROW_SIZE, size.width - ARROW_SIZE)
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
const left = resolved === 'right' ? trigger.x + trigger.width + offset : trigger.x - size.width - offset;
|
|
458
|
+
const top = align === 'start' ? trigger.y + alignOffset : align === 'end' ? trigger.y + trigger.height - size.height + alignOffset : trigger.y + trigger.height / 2 - size.height / 2 + alignOffset;
|
|
459
|
+
const clampedTop = clamp(top, bounds.top, bounds.bottom - size.height);
|
|
460
|
+
const triggerCentreY = trigger.y + trigger.height / 2;
|
|
461
|
+
return {
|
|
462
|
+
placement: resolved,
|
|
463
|
+
top: clampedTop,
|
|
464
|
+
left: clamp(left, bounds.left, bounds.right - size.width),
|
|
465
|
+
arrowOffset: clamp(triggerCentreY - clampedTop, ARROW_SIZE, size.height - ARROW_SIZE)
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Where the panel starts, relative to where it ends: towards the trigger, on
|
|
471
|
+
* whichever side was resolved. A preset like `ZoomIn` always grows from the
|
|
472
|
+
* centre, which reads the same whichever way the panel opened.
|
|
473
|
+
*/
|
|
474
|
+
const ENTRY_SHIFT = {
|
|
475
|
+
bottom: {
|
|
476
|
+
x: 0,
|
|
477
|
+
y: -8
|
|
478
|
+
},
|
|
479
|
+
top: {
|
|
480
|
+
x: 0,
|
|
481
|
+
y: 8
|
|
482
|
+
},
|
|
483
|
+
right: {
|
|
484
|
+
x: -8,
|
|
485
|
+
y: 0
|
|
486
|
+
},
|
|
487
|
+
left: {
|
|
488
|
+
x: 8,
|
|
489
|
+
y: 0
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
export const Popover = Object.assign(PopoverRoot, {
|
|
493
|
+
Trigger: PopoverTrigger,
|
|
494
|
+
Content: PopoverContent,
|
|
495
|
+
Arrow: PopoverArrow,
|
|
496
|
+
Title: PopoverTitle,
|
|
497
|
+
Description: PopoverDescription,
|
|
498
|
+
Close: PopoverClose
|
|
499
|
+
});
|
|
500
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cloneElement","createContext","isValidElement","useCallback","useContext","useEffect","useMemo","useRef","useState","Pressable","useWindowDimensions","View","Animated","FadeOut","useAnimatedStyle","useReducedMotion","useSharedValue","withSpring","withTiming","useSafeAreaInsets","Portal","Scrim","BottomSheet","Text","cn","jsx","_jsx","jsxs","_jsxs","DEFAULT_OFFSET","SCREEN_MARGIN","ARROW_SIZE","PopoverContext","usePopover","component","context","Error","PopoverRoot","children","open","onOpenChange","defaultOpen","presentation","internalOpen","setInternalOpen","trigger","setTrigger","placement","setPlacement","arrowOffset","setArrowOffset","isControlled","undefined","resolvedOpen","setOpen","next","Provider","value","PopoverTrigger","ref","measureThenToggle","args","props","onPress","current","measureInWindow","x","y","width","height","collapsable","PopoverContent","className","align","offset","alignOffset","dismissible","blur","screenWidth","screenHeight","insets","size","setSize","onLayout","event","w","h","nativeEvent","layout","Math","abs","bounds","left","right","top","bottom","resolvedWidth","position","place","resolvedPlacement","resolvedArrow","appear","settle","reducedMotion","placed","duration","damping","stiffness","mass","origin","ENTRY_SHIFT","panelStyle","opacity","transform","translateX","translateY","scale","Content","intensity","dimClassName","accessibilityLabel","exiting","accessibilityViewIsModal","style","maxWidth","PopoverArrow","vertical","edge","pointerEvents","accessibilityElementsHidden","importantForAccessibility","rotate","marginLeft","marginTop","PopoverTitle","weight","displayName","PopoverDescription","muted","PopoverClose","roomAfter","opposite","needed","resolved","clamp","min","max","clampedLeft","triggerCentreX","clampedTop","triggerCentreY","Popover","Object","assign","Trigger","Arrow","Title","Description","Close"],"sourceRoot":"../../../../src","sources":["components/popover/index.tsx"],"mappings":"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","ignoreList":[]}
|