panelui-native 0.87.0 → 0.88.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/animated-badge/index.js +451 -0
- package/lib/module/components/animated-badge/index.js.map +1 -0
- package/lib/module/components/bottom-sheet/index.js +17 -6
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/bubble-chart/index.js +557 -41
- package/lib/module/components/bubble-chart/index.js.map +1 -1
- package/lib/module/components/feedback-dialog/index.js +474 -0
- package/lib/module/components/feedback-dialog/index.js.map +1 -0
- package/lib/module/components/scroll-blur/index.js +363 -0
- package/lib/module/components/scroll-blur/index.js.map +1 -0
- package/lib/module/components/scroll-canvas/index.js +2 -0
- package/lib/module/components/scroll-canvas/index.js.map +1 -1
- package/lib/module/components/scroll-text/index.js +3 -0
- package/lib/module/components/scroll-text/index.js.map +1 -1
- package/lib/module/components/search-bar/index.js +390 -45
- package/lib/module/components/search-bar/index.js.map +1 -1
- package/lib/module/hooks/use-keyboard-avoidance.js +21 -1
- package/lib/module/hooks/use-keyboard-avoidance.js.map +1 -1
- package/lib/module/hooks/use-reveal-progress.js +21 -1
- package/lib/module/hooks/use-reveal-progress.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/components/animated-badge/index.d.ts +224 -0
- package/lib/typescript/src/components/animated-badge/index.d.ts.map +1 -0
- package/lib/typescript/src/components/bottom-sheet/index.d.ts +1 -15
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bubble-chart/index.d.ts +150 -7
- package/lib/typescript/src/components/bubble-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/feedback-dialog/index.d.ts +156 -0
- package/lib/typescript/src/components/feedback-dialog/index.d.ts.map +1 -0
- package/lib/typescript/src/components/scroll-blur/index.d.ts +113 -0
- package/lib/typescript/src/components/scroll-blur/index.d.ts.map +1 -0
- package/lib/typescript/src/components/scroll-canvas/index.d.ts.map +1 -1
- package/lib/typescript/src/components/search-bar/index.d.ts +142 -7
- package/lib/typescript/src/components/search-bar/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-reveal-progress.d.ts +6 -27
- package/lib/typescript/src/hooks/use-reveal-progress.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +5 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/animated-badge/index.tsx +513 -0
- package/src/components/bottom-sheet/index.tsx +23 -8
- package/src/components/bubble-chart/index.tsx +664 -46
- package/src/components/feedback-dialog/index.tsx +557 -0
- package/src/components/scroll-blur/index.tsx +466 -0
- package/src/components/scroll-canvas/index.tsx +2 -1
- package/src/components/scroll-text/index.tsx +3 -3
- package/src/components/search-bar/index.tsx +471 -41
- package/src/hooks/use-keyboard-avoidance.ts +24 -1
- package/src/hooks/use-reveal-progress.ts +30 -1
- package/src/index.ts +27 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* FeedbackDialog — a dialog whose body is something to write in, and whose
|
|
5
|
+
* actions sit in a band around it.
|
|
6
|
+
*
|
|
7
|
+
* ```tsx
|
|
8
|
+
* <FeedbackDialog open={open} onOpenChange={setOpen}>
|
|
9
|
+
* <FeedbackDialog.Content>
|
|
10
|
+
* <FeedbackDialog.Panel>
|
|
11
|
+
* <FeedbackDialog.Title>Help us improve, Gabe!</FeedbackDialog.Title>
|
|
12
|
+
* <FeedbackDialog.Close />
|
|
13
|
+
* <FeedbackDialog.Field value={text} onChangeText={setText} />
|
|
14
|
+
* </FeedbackDialog.Panel>
|
|
15
|
+
* <FeedbackDialog.Footer>
|
|
16
|
+
* <FeedbackDialog.Cancel />
|
|
17
|
+
* <FeedbackDialog.Submit onPress={send} />
|
|
18
|
+
* </FeedbackDialog.Footer>
|
|
19
|
+
* </FeedbackDialog.Content>
|
|
20
|
+
* </FeedbackDialog>
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Why the panel is a panel and not the dialog
|
|
24
|
+
*
|
|
25
|
+
* A dialog that asks for a sentence has two jobs on screen at once: hold what
|
|
26
|
+
* is being written, and offer the two things to do with it. `Dialog` puts both
|
|
27
|
+
* on one surface, which is right when the body is a line of prose — nothing
|
|
28
|
+
* about it says "this is where you type".
|
|
29
|
+
*
|
|
30
|
+
* Here the writing surface is a well set into the dialog, and the buttons sit
|
|
31
|
+
* in the band around it. The recess is the whole affordance: it says the field
|
|
32
|
+
* is the page and everything else is the frame around it, before a word has
|
|
33
|
+
* been read. It is also why the field has no border of its own — an outline
|
|
34
|
+
* inside a well is two edges saying the same thing.
|
|
35
|
+
*
|
|
36
|
+
* ## The actions are equal, and one of them is not
|
|
37
|
+
*
|
|
38
|
+
* Cancel and Submit take the same width, because they are the same size of
|
|
39
|
+
* decision — this is a sentence somebody wrote, not a deletion. What separates
|
|
40
|
+
* them is weight: Submit is filled in the foreground colour and Cancel is a
|
|
41
|
+
* tint of it, so the difference is legible at a glance without either being
|
|
42
|
+
* hidden.
|
|
43
|
+
*
|
|
44
|
+
* ## Nothing is submitted empty
|
|
45
|
+
*
|
|
46
|
+
* `Submit` disables itself while the field is empty. A dialog that accepts an
|
|
47
|
+
* empty answer produces empty feedback, and the person who sent it believes
|
|
48
|
+
* they said something.
|
|
49
|
+
*/
|
|
50
|
+
import { createContext, forwardRef, isValidElement, useCallback, useContext, useMemo, useState } from 'react';
|
|
51
|
+
import { Pressable, TextInput, View } from 'react-native';
|
|
52
|
+
import Animated, { FadeIn, FadeOut, ZoomIn } from 'react-native-reanimated';
|
|
53
|
+
import { tv } from 'tailwind-variants';
|
|
54
|
+
import { XIcon } from "../../icons/index.js";
|
|
55
|
+
import { AnimatedPressable } from "../../primitives/animated-pressable.js";
|
|
56
|
+
import { KeyboardAvoider } from "../../primitives/keyboard-avoider.js";
|
|
57
|
+
import { ModalPortal } from "../../primitives/portal.js";
|
|
58
|
+
import { Scrim } from "../../primitives/scrim.js";
|
|
59
|
+
import { Text, textChildren } from "../../primitives/text.js";
|
|
60
|
+
import { useBackHandler } from "../../hooks/use-back-handler.js";
|
|
61
|
+
import { cn } from "../../utils/cn.js";
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The shell's padding, in points, and the corner it draws.
|
|
65
|
+
*
|
|
66
|
+
* The panel's corner is the shell's less that padding, which is what keeps the
|
|
67
|
+
* two curves concentric — a well whose radius does not account for the band
|
|
68
|
+
* around it leaves a crescent of shell at each corner, thicker there than it is
|
|
69
|
+
* along the sides.
|
|
70
|
+
*/
|
|
71
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
72
|
+
const SHELL_PADDING = 8;
|
|
73
|
+
const SHELL_RADIUS = 38;
|
|
74
|
+
const PANEL_RADIUS = SHELL_RADIUS - SHELL_PADDING;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* How far the action row is held in from the shell's own edge, beyond the
|
|
78
|
+
* padding the panel gets.
|
|
79
|
+
*
|
|
80
|
+
* The buttons are narrower than the well above them on purpose: a row that ran
|
|
81
|
+
* the full width would read as a third edge of the dialog rather than as two
|
|
82
|
+
* things to press.
|
|
83
|
+
*/
|
|
84
|
+
const FOOTER_INSET = 26;
|
|
85
|
+
|
|
86
|
+
/** Room to write in before the field starts growing. */
|
|
87
|
+
const FIELD_MIN_HEIGHT = 200;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The ✕'s drawn size, and the slop that takes its touch box to 48.
|
|
91
|
+
*
|
|
92
|
+
* Made up with slop rather than with size, because the glyph is set against
|
|
93
|
+
* the title's cap height and a circle large enough to press comfortably would
|
|
94
|
+
* be taller than the line it sits on.
|
|
95
|
+
*/
|
|
96
|
+
const CLOSE_SIZE = 22;
|
|
97
|
+
const CLOSE_HIT_SLOP = 13;
|
|
98
|
+
const feedbackDialogVariants = tv({
|
|
99
|
+
slots: {
|
|
100
|
+
/*
|
|
101
|
+
* The shell is `bg-popover` with an `inset` band laid over it rather than
|
|
102
|
+
* a colour of its own. `--color-inset` is a translucent black in every
|
|
103
|
+
* theme, so the shell always comes out darker than the panel it holds —
|
|
104
|
+
* which is the one thing this design cannot get from the surface ladder,
|
|
105
|
+
* because that ladder runs darker in a light theme and lighter in a dark
|
|
106
|
+
* one, and the recess has to read the same way in both.
|
|
107
|
+
*/
|
|
108
|
+
shell: 'w-full max-w-sm overflow-hidden bg-popover shadow-xl',
|
|
109
|
+
recess: 'absolute inset-0 bg-inset',
|
|
110
|
+
panel: 'overflow-hidden bg-popover',
|
|
111
|
+
title: 'pe-9 text-[22px] font-semibold leading-[28px] text-popover-foreground',
|
|
112
|
+
close: 'absolute items-center justify-center rounded-full bg-foreground/10',
|
|
113
|
+
field: 'p-0 text-[17px] leading-[24px] text-muted-foreground',
|
|
114
|
+
footer: 'flex-row items-center gap-3.5',
|
|
115
|
+
action: 'h-11 flex-1 items-center justify-center rounded-full',
|
|
116
|
+
actionLabel: 'text-[16px]'
|
|
117
|
+
},
|
|
118
|
+
variants: {
|
|
119
|
+
tone: {
|
|
120
|
+
/** The one that discards. A tint of the foreground, not a fill. */
|
|
121
|
+
cancel: {
|
|
122
|
+
action: 'bg-foreground/10',
|
|
123
|
+
actionLabel: 'font-medium text-muted-foreground'
|
|
124
|
+
},
|
|
125
|
+
/** The one that sends. Filled, and the only filled thing on the dialog. */
|
|
126
|
+
submit: {
|
|
127
|
+
action: 'bg-primary',
|
|
128
|
+
actionLabel: 'font-semibold text-primary-foreground'
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
disabled: {
|
|
132
|
+
true: {
|
|
133
|
+
action: 'opacity-[0.45]'
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
const FeedbackDialogContext = /*#__PURE__*/createContext(null);
|
|
139
|
+
function useFeedbackDialog(component) {
|
|
140
|
+
const context = useContext(FeedbackDialogContext);
|
|
141
|
+
if (!context) {
|
|
142
|
+
throw new Error(`${component} must be used within a <FeedbackDialog>`);
|
|
143
|
+
}
|
|
144
|
+
return context;
|
|
145
|
+
}
|
|
146
|
+
function FeedbackDialogRoot({
|
|
147
|
+
children,
|
|
148
|
+
open,
|
|
149
|
+
onOpenChange,
|
|
150
|
+
defaultOpen = false,
|
|
151
|
+
value,
|
|
152
|
+
defaultValue = '',
|
|
153
|
+
onValueChange
|
|
154
|
+
}) {
|
|
155
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
156
|
+
const openControlled = open !== undefined;
|
|
157
|
+
const resolvedOpen = openControlled ? open : internalOpen;
|
|
158
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
159
|
+
const valueControlled = value !== undefined;
|
|
160
|
+
const resolvedValue = valueControlled ? value : internalValue;
|
|
161
|
+
const setOpen = useCallback(next => {
|
|
162
|
+
if (!openControlled) setInternalOpen(next);
|
|
163
|
+
onOpenChange?.(next);
|
|
164
|
+
}, [openControlled, onOpenChange]);
|
|
165
|
+
const setValue = useCallback(next => {
|
|
166
|
+
if (!valueControlled) setInternalValue(next);
|
|
167
|
+
onValueChange?.(next);
|
|
168
|
+
}, [valueControlled, onValueChange]);
|
|
169
|
+
const context = useMemo(() => ({
|
|
170
|
+
open: resolvedOpen,
|
|
171
|
+
setOpen,
|
|
172
|
+
value: resolvedValue,
|
|
173
|
+
setValue
|
|
174
|
+
}), [resolvedOpen, setOpen, resolvedValue, setValue]);
|
|
175
|
+
return /*#__PURE__*/_jsx(FeedbackDialogContext.Provider, {
|
|
176
|
+
value: context,
|
|
177
|
+
children: children
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
FeedbackDialogRoot.displayName = 'FeedbackDialog';
|
|
181
|
+
/** Wraps its child and opens the dialog on press. */
|
|
182
|
+
function FeedbackDialogTrigger({
|
|
183
|
+
children
|
|
184
|
+
}) {
|
|
185
|
+
const {
|
|
186
|
+
setOpen
|
|
187
|
+
} = useFeedbackDialog('FeedbackDialog.Trigger');
|
|
188
|
+
if (! /*#__PURE__*/isValidElement(children)) return children;
|
|
189
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
190
|
+
onPress: () => setOpen(true),
|
|
191
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
192
|
+
pointerEvents: "none",
|
|
193
|
+
children: children
|
|
194
|
+
})
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
FeedbackDialogTrigger.displayName = 'FeedbackDialog.Trigger';
|
|
198
|
+
/** The shell: the recessed band, and everything laid in it. */
|
|
199
|
+
function FeedbackDialogContent({
|
|
200
|
+
className,
|
|
201
|
+
dismissible = true,
|
|
202
|
+
blur = false,
|
|
203
|
+
children,
|
|
204
|
+
...props
|
|
205
|
+
}) {
|
|
206
|
+
const context = useFeedbackDialog('FeedbackDialog.Content');
|
|
207
|
+
const {
|
|
208
|
+
open,
|
|
209
|
+
setOpen
|
|
210
|
+
} = context;
|
|
211
|
+
const slots = feedbackDialogVariants();
|
|
212
|
+
useBackHandler(open && dismissible, () => setOpen(false));
|
|
213
|
+
if (!open) return null;
|
|
214
|
+
return /*#__PURE__*/_jsx(ModalPortal, {
|
|
215
|
+
children: /*#__PURE__*/_jsx(FeedbackDialogContext.Provider, {
|
|
216
|
+
value: context,
|
|
217
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
218
|
+
entering: FadeIn.duration(150),
|
|
219
|
+
exiting: FadeOut.duration(150),
|
|
220
|
+
className: "absolute inset-0 items-center justify-center p-6",
|
|
221
|
+
children: [/*#__PURE__*/_jsx(Scrim, {
|
|
222
|
+
blur: blur
|
|
223
|
+
}), /*#__PURE__*/_jsx(Pressable, {
|
|
224
|
+
accessibilityLabel: "Close dialog",
|
|
225
|
+
className: "absolute inset-0",
|
|
226
|
+
onPress: dismissible ? () => setOpen(false) : undefined
|
|
227
|
+
}), /*#__PURE__*/_jsx(KeyboardAvoider, {
|
|
228
|
+
mode: "lift",
|
|
229
|
+
offset: 16,
|
|
230
|
+
className: "w-full items-center",
|
|
231
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
232
|
+
entering: ZoomIn.springify().damping(18).stiffness(250).mass(0.6),
|
|
233
|
+
exiting: FadeOut.duration(120),
|
|
234
|
+
accessibilityViewIsModal: true,
|
|
235
|
+
className: slots.shell({
|
|
236
|
+
className
|
|
237
|
+
}),
|
|
238
|
+
style: {
|
|
239
|
+
borderRadius: SHELL_RADIUS,
|
|
240
|
+
padding: SHELL_PADDING
|
|
241
|
+
},
|
|
242
|
+
...props,
|
|
243
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
244
|
+
pointerEvents: "none",
|
|
245
|
+
className: slots.recess()
|
|
246
|
+
}), textChildren(children)]
|
|
247
|
+
})
|
|
248
|
+
})]
|
|
249
|
+
})
|
|
250
|
+
})
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
FeedbackDialogContent.displayName = 'FeedbackDialog.Content';
|
|
254
|
+
/** The well set into the shell: the title, the ✕ and the field. */
|
|
255
|
+
const FeedbackDialogPanel = /*#__PURE__*/forwardRef(({
|
|
256
|
+
className,
|
|
257
|
+
children,
|
|
258
|
+
...props
|
|
259
|
+
}, ref) => {
|
|
260
|
+
const slots = feedbackDialogVariants();
|
|
261
|
+
return /*#__PURE__*/_jsx(View, {
|
|
262
|
+
ref: ref,
|
|
263
|
+
className: cn(slots.panel(), 'gap-4 p-5', className),
|
|
264
|
+
style: {
|
|
265
|
+
borderRadius: PANEL_RADIUS
|
|
266
|
+
},
|
|
267
|
+
...props,
|
|
268
|
+
children: textChildren(children)
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
FeedbackDialogPanel.displayName = 'FeedbackDialog.Panel';
|
|
272
|
+
const FeedbackDialogTitle = /*#__PURE__*/forwardRef(({
|
|
273
|
+
className,
|
|
274
|
+
...props
|
|
275
|
+
}, ref) => {
|
|
276
|
+
const slots = feedbackDialogVariants();
|
|
277
|
+
return /*#__PURE__*/_jsx(Text, {
|
|
278
|
+
ref: ref,
|
|
279
|
+
className: slots.title({
|
|
280
|
+
className
|
|
281
|
+
}),
|
|
282
|
+
...props
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
FeedbackDialogTitle.displayName = 'FeedbackDialog.Title';
|
|
286
|
+
/** The ✕ in the panel's corner. */
|
|
287
|
+
function FeedbackDialogClose({
|
|
288
|
+
className,
|
|
289
|
+
label = 'Close',
|
|
290
|
+
onPress,
|
|
291
|
+
...props
|
|
292
|
+
}) {
|
|
293
|
+
const {
|
|
294
|
+
setOpen
|
|
295
|
+
} = useFeedbackDialog('FeedbackDialog.Close');
|
|
296
|
+
const slots = feedbackDialogVariants();
|
|
297
|
+
return /*#__PURE__*/_jsx(AnimatedPressable, {
|
|
298
|
+
accessibilityRole: "button",
|
|
299
|
+
accessibilityLabel: label,
|
|
300
|
+
hitSlop: CLOSE_HIT_SLOP,
|
|
301
|
+
pressScale: 1,
|
|
302
|
+
pressOpacity: 0.55,
|
|
303
|
+
onPress: onPress ?? (() => setOpen(false)),
|
|
304
|
+
className: slots.close({
|
|
305
|
+
className
|
|
306
|
+
}),
|
|
307
|
+
style: {
|
|
308
|
+
top: 20,
|
|
309
|
+
right: 20,
|
|
310
|
+
width: CLOSE_SIZE,
|
|
311
|
+
height: CLOSE_SIZE
|
|
312
|
+
},
|
|
313
|
+
...props,
|
|
314
|
+
children: /*#__PURE__*/_jsx(XIcon, {
|
|
315
|
+
size: 12
|
|
316
|
+
})
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
FeedbackDialogClose.displayName = 'FeedbackDialog.Close';
|
|
320
|
+
/**
|
|
321
|
+
* What is being written.
|
|
322
|
+
*
|
|
323
|
+
* No border and no background of its own: it is already inside a well, and an
|
|
324
|
+
* outline drawn inside one is two edges making the same point.
|
|
325
|
+
*
|
|
326
|
+
* The caret is deliberately left to the platform. Every system draws its own
|
|
327
|
+
* accent there, and a field that overrides it is a field that looks like it
|
|
328
|
+
* belongs to a different phone.
|
|
329
|
+
*/
|
|
330
|
+
const FeedbackDialogField = /*#__PURE__*/forwardRef(({
|
|
331
|
+
className,
|
|
332
|
+
value,
|
|
333
|
+
onChangeText,
|
|
334
|
+
minHeight = FIELD_MIN_HEIGHT,
|
|
335
|
+
placeholder = 'Tell us what you think',
|
|
336
|
+
style,
|
|
337
|
+
...props
|
|
338
|
+
}, ref) => {
|
|
339
|
+
const dialog = useFeedbackDialog('FeedbackDialog.Field');
|
|
340
|
+
const slots = feedbackDialogVariants();
|
|
341
|
+
const text = value ?? dialog.value;
|
|
342
|
+
return /*#__PURE__*/_jsx(TextInput, {
|
|
343
|
+
ref: ref,
|
|
344
|
+
multiline: true,
|
|
345
|
+
textAlignVertical: "top",
|
|
346
|
+
placeholder: placeholder,
|
|
347
|
+
value: text,
|
|
348
|
+
onChangeText: next => {
|
|
349
|
+
dialog.setValue(next);
|
|
350
|
+
onChangeText?.(next);
|
|
351
|
+
},
|
|
352
|
+
className: slots.field({
|
|
353
|
+
className
|
|
354
|
+
}),
|
|
355
|
+
style: [{
|
|
356
|
+
minHeight
|
|
357
|
+
}, style],
|
|
358
|
+
...props
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
FeedbackDialogField.displayName = 'FeedbackDialog.Field';
|
|
362
|
+
/** The action row, in the band under the panel. */
|
|
363
|
+
const FeedbackDialogFooter = /*#__PURE__*/forwardRef(({
|
|
364
|
+
className,
|
|
365
|
+
children,
|
|
366
|
+
style,
|
|
367
|
+
...props
|
|
368
|
+
}, ref) => {
|
|
369
|
+
const slots = feedbackDialogVariants();
|
|
370
|
+
return /*#__PURE__*/_jsx(View, {
|
|
371
|
+
ref: ref,
|
|
372
|
+
className: slots.footer({
|
|
373
|
+
className
|
|
374
|
+
}),
|
|
375
|
+
style: [{
|
|
376
|
+
marginTop: 16,
|
|
377
|
+
marginHorizontal: FOOTER_INSET - SHELL_PADDING
|
|
378
|
+
}, style],
|
|
379
|
+
...props,
|
|
380
|
+
children: children
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
FeedbackDialogFooter.displayName = 'FeedbackDialog.Footer';
|
|
384
|
+
/** Shared body for the two buttons, so they can only differ in the ways they should. */
|
|
385
|
+
function Action({
|
|
386
|
+
tone,
|
|
387
|
+
className,
|
|
388
|
+
labelClassName,
|
|
389
|
+
disabled,
|
|
390
|
+
onPress,
|
|
391
|
+
children,
|
|
392
|
+
...props
|
|
393
|
+
}) {
|
|
394
|
+
const slots = feedbackDialogVariants({
|
|
395
|
+
tone,
|
|
396
|
+
disabled: !!disabled
|
|
397
|
+
});
|
|
398
|
+
return /*#__PURE__*/_jsx(AnimatedPressable, {
|
|
399
|
+
accessibilityRole: "button",
|
|
400
|
+
accessibilityState: {
|
|
401
|
+
disabled: !!disabled
|
|
402
|
+
},
|
|
403
|
+
disabled: disabled,
|
|
404
|
+
pressScale: 0.97,
|
|
405
|
+
pressOpacity: 0.9,
|
|
406
|
+
onPress: onPress,
|
|
407
|
+
className: slots.action({
|
|
408
|
+
className
|
|
409
|
+
}),
|
|
410
|
+
...props,
|
|
411
|
+
children: textChildren(children, label => /*#__PURE__*/_jsx(Text, {
|
|
412
|
+
className: slots.actionLabel({
|
|
413
|
+
className: labelClassName
|
|
414
|
+
}),
|
|
415
|
+
children: label
|
|
416
|
+
}))
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/** Discards and closes. Give it `onPress` to do something else first. */
|
|
421
|
+
function FeedbackDialogCancel({
|
|
422
|
+
children = 'Cancel',
|
|
423
|
+
onPress,
|
|
424
|
+
...props
|
|
425
|
+
}) {
|
|
426
|
+
const {
|
|
427
|
+
setOpen
|
|
428
|
+
} = useFeedbackDialog('FeedbackDialog.Cancel');
|
|
429
|
+
return /*#__PURE__*/_jsx(Action, {
|
|
430
|
+
tone: "cancel",
|
|
431
|
+
onPress: onPress ?? (() => setOpen(false)),
|
|
432
|
+
...props,
|
|
433
|
+
children: children
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
FeedbackDialogCancel.displayName = 'FeedbackDialog.Cancel';
|
|
437
|
+
/** Sends. Inert while the field is empty. */
|
|
438
|
+
function FeedbackDialogSubmit({
|
|
439
|
+
children = 'Submit',
|
|
440
|
+
disabled,
|
|
441
|
+
onPress,
|
|
442
|
+
onSubmit,
|
|
443
|
+
...props
|
|
444
|
+
}) {
|
|
445
|
+
const {
|
|
446
|
+
value
|
|
447
|
+
} = useFeedbackDialog('FeedbackDialog.Submit');
|
|
448
|
+
// Empty feedback is worse than none: it is sent by somebody who believes
|
|
449
|
+
// they said something.
|
|
450
|
+
const empty = value.trim().length === 0;
|
|
451
|
+
return /*#__PURE__*/_jsx(Action, {
|
|
452
|
+
tone: "submit",
|
|
453
|
+
disabled: disabled ?? empty,
|
|
454
|
+
onPress: () => {
|
|
455
|
+
onPress?.();
|
|
456
|
+
onSubmit?.(value);
|
|
457
|
+
},
|
|
458
|
+
...props,
|
|
459
|
+
children: children
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
FeedbackDialogSubmit.displayName = 'FeedbackDialog.Submit';
|
|
463
|
+
export const FeedbackDialog = Object.assign(FeedbackDialogRoot, {
|
|
464
|
+
Trigger: FeedbackDialogTrigger,
|
|
465
|
+
Content: FeedbackDialogContent,
|
|
466
|
+
Panel: FeedbackDialogPanel,
|
|
467
|
+
Title: FeedbackDialogTitle,
|
|
468
|
+
Close: FeedbackDialogClose,
|
|
469
|
+
Field: FeedbackDialogField,
|
|
470
|
+
Footer: FeedbackDialogFooter,
|
|
471
|
+
Cancel: FeedbackDialogCancel,
|
|
472
|
+
Submit: FeedbackDialogSubmit
|
|
473
|
+
});
|
|
474
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","forwardRef","isValidElement","useCallback","useContext","useMemo","useState","Pressable","TextInput","View","Animated","FadeIn","FadeOut","ZoomIn","tv","XIcon","AnimatedPressable","KeyboardAvoider","ModalPortal","Scrim","Text","textChildren","useBackHandler","cn","jsx","_jsx","jsxs","_jsxs","SHELL_PADDING","SHELL_RADIUS","PANEL_RADIUS","FOOTER_INSET","FIELD_MIN_HEIGHT","CLOSE_SIZE","CLOSE_HIT_SLOP","feedbackDialogVariants","slots","shell","recess","panel","title","close","field","footer","action","actionLabel","variants","tone","cancel","submit","disabled","true","FeedbackDialogContext","useFeedbackDialog","component","context","Error","FeedbackDialogRoot","children","open","onOpenChange","defaultOpen","value","defaultValue","onValueChange","internalOpen","setInternalOpen","openControlled","undefined","resolvedOpen","internalValue","setInternalValue","valueControlled","resolvedValue","setOpen","next","setValue","Provider","displayName","FeedbackDialogTrigger","onPress","pointerEvents","FeedbackDialogContent","className","dismissible","blur","props","entering","duration","exiting","accessibilityLabel","mode","offset","springify","damping","stiffness","mass","accessibilityViewIsModal","style","borderRadius","padding","FeedbackDialogPanel","ref","FeedbackDialogTitle","FeedbackDialogClose","label","accessibilityRole","hitSlop","pressScale","pressOpacity","top","right","width","height","size","FeedbackDialogField","onChangeText","minHeight","placeholder","dialog","text","multiline","textAlignVertical","FeedbackDialogFooter","marginTop","marginHorizontal","Action","labelClassName","accessibilityState","FeedbackDialogCancel","FeedbackDialogSubmit","onSubmit","empty","trim","length","FeedbackDialog","Object","assign","Trigger","Content","Panel","Title","Close","Field","Footer","Cancel","Submit"],"sourceRoot":"../../../../src","sources":["components/feedback-dialog/index.tsx"],"mappings":"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","ignoreList":[]}
|