panelui-native 0.92.0 → 0.94.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/bottom-sheet/index.js +19 -2
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/bubble-chart/index.js +23 -9
- package/lib/module/components/bubble-chart/index.js.map +1 -1
- package/lib/module/components/frame/index.js +178 -34
- package/lib/module/components/frame/index.js.map +1 -1
- package/lib/module/components/page-header/index.js +577 -0
- package/lib/module/components/page-header/index.js.map +1 -0
- package/lib/module/components/questionnaire/index.js +242 -22
- package/lib/module/components/questionnaire/index.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bubble-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/frame/index.d.ts +19 -2
- package/lib/typescript/src/components/frame/index.d.ts.map +1 -1
- package/lib/typescript/src/components/page-header/index.d.ts +278 -0
- package/lib/typescript/src/components/page-header/index.d.ts.map +1 -0
- package/lib/typescript/src/components/questionnaire/index.d.ts +19 -5
- package/lib/typescript/src/components/questionnaire/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/bottom-sheet/index.tsx +29 -3
- package/src/components/bubble-chart/index.tsx +29 -9
- package/src/components/frame/index.tsx +180 -29
- package/src/components/page-header/index.tsx +674 -0
- package/src/components/questionnaire/index.tsx +249 -19
- package/src/index.ts +17 -0
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* PageHeader — the top of a profile screen: a cover, the face over it, who it
|
|
5
|
+
* belongs to, and what you can do about them.
|
|
6
|
+
*
|
|
7
|
+
* Every social app opens a profile the same way, and rebuilding it per screen
|
|
8
|
+
* is how the cover ends up a different height on each one. The parts here are
|
|
9
|
+
* the pieces that arrangement is made of, and the two variants are the two
|
|
10
|
+
* places it lives: `card`, a self-contained surface in a scroll of other
|
|
11
|
+
* cards, and `page`, the header of the screen itself.
|
|
12
|
+
*
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <PageHeader>
|
|
15
|
+
* <PageHeader.Cover />
|
|
16
|
+
* <PageHeader.Avatar source={face} fallback="OR" verified />
|
|
17
|
+
* <PageHeader.Content>
|
|
18
|
+
* <PageHeader.Title>Olivia Rhye</PageHeader.Title>
|
|
19
|
+
* <PageHeader.Description>@oliviarhye</PageHeader.Description>
|
|
20
|
+
* </PageHeader.Content>
|
|
21
|
+
* <PageHeader.Actions>
|
|
22
|
+
* <Button className="flex-1">Follow</Button>
|
|
23
|
+
* </PageHeader.Actions>
|
|
24
|
+
* </PageHeader>
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* The cover in `card` is held off the card's edges and rounded on its top
|
|
28
|
+
* corners only, so its bottom edge meets the content rather than floating
|
|
29
|
+
* above it. The radius pair is `rounded-3xl` on the card and `rounded-2xl` on
|
|
30
|
+
* the cover, one step apart on the theme's own scale — which is the same 8
|
|
31
|
+
* points the card is padded by, so the two curves stay concentric without a
|
|
32
|
+
* hardcoded number that would be wrong in half the themes.
|
|
33
|
+
*
|
|
34
|
+
* The avatar lifts itself over the cover's bottom edge, and it works out
|
|
35
|
+
* whether to: the root looks for a `PageHeader.Cover` among its children and
|
|
36
|
+
* says so through context, because a header with no cover has nothing to
|
|
37
|
+
* overlap and an avatar that lifted anyway would hang off the top of it.
|
|
38
|
+
*
|
|
39
|
+
* The ring around the face is drawn in the surface behind it — the card, or
|
|
40
|
+
* the page — rather than in a border colour, so the face reads as punched out
|
|
41
|
+
* of the cover instead of outlined on top of it.
|
|
42
|
+
*/
|
|
43
|
+
import { Children, cloneElement, createContext, forwardRef, isValidElement, useContext, useMemo } from 'react';
|
|
44
|
+
import { Image, StyleSheet, View } from 'react-native';
|
|
45
|
+
import { LinearGradient } from 'expo-linear-gradient';
|
|
46
|
+
import { tv } from 'tailwind-variants';
|
|
47
|
+
import { useCSSVariable } from 'uniwind';
|
|
48
|
+
import { AnimatedPressable } from "../../primitives/animated-pressable.js";
|
|
49
|
+
import { Text, textChildren } from "../../primitives/text.js";
|
|
50
|
+
import { cn } from "../../utils/cn.js";
|
|
51
|
+
import { BadgeCheckIcon, IconColorProvider } from "../../icons/index.js";
|
|
52
|
+
import { Avatar, AVATAR_SIZE_POINTS } from "../avatar/index.js";
|
|
53
|
+
|
|
54
|
+
/** Height of a cover that is not given one. Two lines of nothing, and enough
|
|
55
|
+
* of a band for a face to sit half over. */
|
|
56
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
57
|
+
const COVER_HEIGHT = 120;
|
|
58
|
+
|
|
59
|
+
/** Points of surface drawn around the face. */
|
|
60
|
+
const AVATAR_RING = 4;
|
|
61
|
+
|
|
62
|
+
/** The rosette, as a share of the face it sits on. */
|
|
63
|
+
const BADGE_RATIO = 0.3;
|
|
64
|
+
|
|
65
|
+
/** The cover gradient, when no image is given. Both are series tokens, so an
|
|
66
|
+
* app that puts its charts on brand puts this on brand with them. */
|
|
67
|
+
const GRADIENT = ['--color-chart-2', '--color-chart-5'];
|
|
68
|
+
const GRADIENT_FALLBACK = ['#3b82f6', '#8b5cf6'];
|
|
69
|
+
const pageHeaderVariants = tv({
|
|
70
|
+
slots: {
|
|
71
|
+
root: 'w-full',
|
|
72
|
+
cover: 'overflow-hidden bg-muted',
|
|
73
|
+
avatar: 'self-start',
|
|
74
|
+
ring: 'overflow-hidden rounded-full',
|
|
75
|
+
row: 'flex-row items-center gap-5',
|
|
76
|
+
content: 'gap-1',
|
|
77
|
+
meta: 'flex-row items-center gap-1.5',
|
|
78
|
+
stats: 'flex-row items-center',
|
|
79
|
+
actions: 'flex-row items-center gap-2'
|
|
80
|
+
},
|
|
81
|
+
variants: {
|
|
82
|
+
variant: {
|
|
83
|
+
// `overflow-hidden` clips the cover's own square bottom corners to the
|
|
84
|
+
// card's radius on the way down; `p-2` is what holds the cover off the
|
|
85
|
+
// card's edges, and is the difference between the two radii above.
|
|
86
|
+
card: {
|
|
87
|
+
root: 'overflow-hidden rounded-3xl border border-border bg-card p-2',
|
|
88
|
+
cover: 'rounded-t-2xl',
|
|
89
|
+
ring: 'border-card',
|
|
90
|
+
avatar: 'px-3',
|
|
91
|
+
row: 'px-3',
|
|
92
|
+
content: 'px-3 pt-3',
|
|
93
|
+
actions: 'px-3 pb-2 pt-4'
|
|
94
|
+
},
|
|
95
|
+
// No surface of its own, and the cover runs to the screen's edges.
|
|
96
|
+
page: {
|
|
97
|
+
root: 'bg-background',
|
|
98
|
+
ring: 'border-background',
|
|
99
|
+
avatar: 'px-4',
|
|
100
|
+
row: 'px-4',
|
|
101
|
+
content: 'px-4 pt-3',
|
|
102
|
+
actions: 'px-4 pb-4 pt-4'
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
align: {
|
|
106
|
+
start: {},
|
|
107
|
+
center: {
|
|
108
|
+
avatar: 'self-center',
|
|
109
|
+
row: 'justify-center',
|
|
110
|
+
content: 'items-center',
|
|
111
|
+
meta: 'justify-center',
|
|
112
|
+
stats: 'justify-center',
|
|
113
|
+
actions: 'justify-center'
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
defaultVariants: {
|
|
118
|
+
variant: 'card',
|
|
119
|
+
align: 'center'
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
/** Where the header lives: a card in a scroll, or the top of the screen. */
|
|
124
|
+
|
|
125
|
+
/** Which edge the face and the text line up on. */
|
|
126
|
+
|
|
127
|
+
const PageHeaderContext = /*#__PURE__*/createContext(undefined);
|
|
128
|
+
function usePageHeader(component) {
|
|
129
|
+
const context = useContext(PageHeaderContext);
|
|
130
|
+
if (!context) throw new Error(`${component} must be used within a <PageHeader>`);
|
|
131
|
+
return context;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* True inside a `PageHeader.Row`. The avatar carries the body's inset and its
|
|
136
|
+
* own alignment when it stands alone, and neither when something else is
|
|
137
|
+
* already holding the row it sits in.
|
|
138
|
+
*/
|
|
139
|
+
const PageHeaderRowContext = /*#__PURE__*/createContext(false);
|
|
140
|
+
|
|
141
|
+
/** How a stats row reads its numbers out. */
|
|
142
|
+
const PageHeaderStatsContext = /*#__PURE__*/createContext('stacked');
|
|
143
|
+
const PageHeaderRoot = /*#__PURE__*/forwardRef(({
|
|
144
|
+
className,
|
|
145
|
+
variant = 'card',
|
|
146
|
+
align = 'center',
|
|
147
|
+
children,
|
|
148
|
+
...props
|
|
149
|
+
}, ref) => {
|
|
150
|
+
// Whether the avatar has anything to overlap. Read off the children rather
|
|
151
|
+
// than asked for, because a caller who has written a cover should not also
|
|
152
|
+
// have to say that they have.
|
|
153
|
+
const hasCover = Children.toArray(children).some(child => /*#__PURE__*/isValidElement(child) && child.type === PageHeaderCover);
|
|
154
|
+
const context = useMemo(() => ({
|
|
155
|
+
variant,
|
|
156
|
+
align,
|
|
157
|
+
hasCover
|
|
158
|
+
}), [variant, align, hasCover]);
|
|
159
|
+
return /*#__PURE__*/_jsx(View, {
|
|
160
|
+
...props,
|
|
161
|
+
ref: ref,
|
|
162
|
+
className: pageHeaderVariants({
|
|
163
|
+
variant,
|
|
164
|
+
align
|
|
165
|
+
}).root({
|
|
166
|
+
className
|
|
167
|
+
}),
|
|
168
|
+
children: /*#__PURE__*/_jsx(PageHeaderContext.Provider, {
|
|
169
|
+
value: context,
|
|
170
|
+
children: children
|
|
171
|
+
})
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
PageHeaderRoot.displayName = 'PageHeader';
|
|
175
|
+
/**
|
|
176
|
+
* The banner. An image when given one, a gradient when not — a header with no
|
|
177
|
+
* banner still has to read as a header, and an empty band reads as a bug.
|
|
178
|
+
*/
|
|
179
|
+
const PageHeaderCover = /*#__PURE__*/forwardRef(({
|
|
180
|
+
className,
|
|
181
|
+
source,
|
|
182
|
+
height = COVER_HEIGHT,
|
|
183
|
+
colors,
|
|
184
|
+
alt,
|
|
185
|
+
style,
|
|
186
|
+
children,
|
|
187
|
+
...props
|
|
188
|
+
}, ref) => {
|
|
189
|
+
const {
|
|
190
|
+
variant
|
|
191
|
+
} = usePageHeader('PageHeader.Cover');
|
|
192
|
+
const from = useCSSVariable(GRADIENT[0]);
|
|
193
|
+
const to = useCSSVariable(GRADIENT[1]);
|
|
194
|
+
|
|
195
|
+
// `useCSSVariable` can hand back something that is not a colour string, and
|
|
196
|
+
// a gradient given one paints nothing at all.
|
|
197
|
+
const ramp = colors ?? [typeof from === 'string' ? from : GRADIENT_FALLBACK[0], typeof to === 'string' ? to : GRADIENT_FALLBACK[1]];
|
|
198
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
199
|
+
...props,
|
|
200
|
+
ref: ref,
|
|
201
|
+
className: pageHeaderVariants({
|
|
202
|
+
variant
|
|
203
|
+
}).cover({
|
|
204
|
+
className
|
|
205
|
+
}),
|
|
206
|
+
style: [{
|
|
207
|
+
height
|
|
208
|
+
}, style],
|
|
209
|
+
children: [source ? /*#__PURE__*/_jsx(Image, {
|
|
210
|
+
source: source,
|
|
211
|
+
resizeMode: "cover",
|
|
212
|
+
style: StyleSheet.absoluteFill,
|
|
213
|
+
accessible: !!alt,
|
|
214
|
+
accessibilityRole: alt ? 'image' : undefined,
|
|
215
|
+
accessibilityLabel: alt
|
|
216
|
+
}) : /*#__PURE__*/_jsx(LinearGradient, {
|
|
217
|
+
colors: ramp,
|
|
218
|
+
start: {
|
|
219
|
+
x: 0,
|
|
220
|
+
y: 0
|
|
221
|
+
},
|
|
222
|
+
end: {
|
|
223
|
+
x: 0,
|
|
224
|
+
y: 1
|
|
225
|
+
}
|
|
226
|
+
// Filled by style rather than by class. `className` on a component
|
|
227
|
+
// from another package is only as good as that package's style
|
|
228
|
+
// forwarding, and a gradient that silently measures zero is a
|
|
229
|
+
// banner that is simply not there.
|
|
230
|
+
,
|
|
231
|
+
style: StyleSheet.absoluteFill,
|
|
232
|
+
accessibilityElementsHidden: true,
|
|
233
|
+
importantForAccessibility: "no-hide-descendants"
|
|
234
|
+
}), children]
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
PageHeaderCover.displayName = 'PageHeader.Cover';
|
|
238
|
+
/**
|
|
239
|
+
* The face, in a ring of whatever surface is behind it.
|
|
240
|
+
*
|
|
241
|
+
* The badge is drawn here rather than with `Avatar.Badge` because that one is
|
|
242
|
+
* pinned to the top corner, where an unread count belongs. A verification mark
|
|
243
|
+
* belongs at the bottom, beside the name it is vouching for.
|
|
244
|
+
*/
|
|
245
|
+
const PageHeaderAvatar = /*#__PURE__*/forwardRef(({
|
|
246
|
+
className,
|
|
247
|
+
size = 'xl',
|
|
248
|
+
verified,
|
|
249
|
+
badge,
|
|
250
|
+
overlap,
|
|
251
|
+
source,
|
|
252
|
+
fallback,
|
|
253
|
+
imageProps,
|
|
254
|
+
children,
|
|
255
|
+
style,
|
|
256
|
+
...props
|
|
257
|
+
}, ref) => {
|
|
258
|
+
const {
|
|
259
|
+
variant,
|
|
260
|
+
align,
|
|
261
|
+
hasCover
|
|
262
|
+
} = usePageHeader('PageHeader.Avatar');
|
|
263
|
+
const inRow = useContext(PageHeaderRowContext);
|
|
264
|
+
const slots = pageHeaderVariants({
|
|
265
|
+
variant,
|
|
266
|
+
align
|
|
267
|
+
});
|
|
268
|
+
const primary = useCSSVariable('--color-primary');
|
|
269
|
+
const onPrimary = useCSSVariable('--color-primary-foreground');
|
|
270
|
+
const diameter = AVATAR_SIZE_POINTS[size] ?? AVATAR_SIZE_POINTS.xl;
|
|
271
|
+
const lifts = overlap ?? hasCover;
|
|
272
|
+
const mark = badge ?? (verified ? /*#__PURE__*/_jsx(BadgeCheckIcon, {
|
|
273
|
+
size: Math.round(diameter * BADGE_RATIO),
|
|
274
|
+
color: typeof primary === 'string' ? primary : '#2563eb',
|
|
275
|
+
checkColor: typeof onPrimary === 'string' ? onPrimary : '#ffffff'
|
|
276
|
+
}) : null);
|
|
277
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
278
|
+
...props,
|
|
279
|
+
ref: ref
|
|
280
|
+
// Inside a row the row is already holding the inset and the alignment;
|
|
281
|
+
// repeating them here would indent the face past the text under it.
|
|
282
|
+
,
|
|
283
|
+
className: inRow ? cn('self-start', className) : slots.avatar({
|
|
284
|
+
className
|
|
285
|
+
}),
|
|
286
|
+
style: [lifts ? {
|
|
287
|
+
marginTop: -Math.round(diameter / 2)
|
|
288
|
+
} : null, style],
|
|
289
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
290
|
+
className: slots.ring(),
|
|
291
|
+
style:
|
|
292
|
+
// With a face inside, the ring is the face plus its own border.
|
|
293
|
+
// With anything else there is nothing to measure, so the ring is
|
|
294
|
+
// given the size the face would have made.
|
|
295
|
+
children ? {
|
|
296
|
+
borderWidth: AVATAR_RING,
|
|
297
|
+
width: diameter + AVATAR_RING * 2,
|
|
298
|
+
height: diameter + AVATAR_RING * 2
|
|
299
|
+
} : {
|
|
300
|
+
borderWidth: AVATAR_RING
|
|
301
|
+
},
|
|
302
|
+
children: children ?? /*#__PURE__*/_jsx(Avatar, {
|
|
303
|
+
size: size,
|
|
304
|
+
source: source,
|
|
305
|
+
fallback: fallback,
|
|
306
|
+
imageProps: imageProps,
|
|
307
|
+
className: "border-0"
|
|
308
|
+
})
|
|
309
|
+
}), mark ? /*#__PURE__*/_jsx(View, {
|
|
310
|
+
className: "absolute bottom-0.5 end-0.5",
|
|
311
|
+
children: mark
|
|
312
|
+
}) : null]
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
PageHeaderAvatar.displayName = 'PageHeader.Avatar';
|
|
316
|
+
/**
|
|
317
|
+
* The face, and whatever sits beside it. For the profile that puts its counts
|
|
318
|
+
* next to the picture rather than under the name.
|
|
319
|
+
*/
|
|
320
|
+
const PageHeaderRow = /*#__PURE__*/forwardRef(({
|
|
321
|
+
className,
|
|
322
|
+
children,
|
|
323
|
+
...props
|
|
324
|
+
}, ref) => {
|
|
325
|
+
const {
|
|
326
|
+
variant,
|
|
327
|
+
align
|
|
328
|
+
} = usePageHeader('PageHeader.Row');
|
|
329
|
+
return /*#__PURE__*/_jsx(View, {
|
|
330
|
+
...props,
|
|
331
|
+
ref: ref,
|
|
332
|
+
className: pageHeaderVariants({
|
|
333
|
+
variant,
|
|
334
|
+
align
|
|
335
|
+
}).row({
|
|
336
|
+
className
|
|
337
|
+
}),
|
|
338
|
+
children: /*#__PURE__*/_jsx(PageHeaderRowContext.Provider, {
|
|
339
|
+
value: true,
|
|
340
|
+
children: children
|
|
341
|
+
})
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
PageHeaderRow.displayName = 'PageHeader.Row';
|
|
345
|
+
/** The text block: the name, the handle, and anything under them. */
|
|
346
|
+
const PageHeaderContent = /*#__PURE__*/forwardRef(({
|
|
347
|
+
className,
|
|
348
|
+
children,
|
|
349
|
+
...props
|
|
350
|
+
}, ref) => {
|
|
351
|
+
const {
|
|
352
|
+
variant,
|
|
353
|
+
align
|
|
354
|
+
} = usePageHeader('PageHeader.Content');
|
|
355
|
+
return /*#__PURE__*/_jsx(View, {
|
|
356
|
+
...props,
|
|
357
|
+
ref: ref,
|
|
358
|
+
className: pageHeaderVariants({
|
|
359
|
+
variant,
|
|
360
|
+
align
|
|
361
|
+
}).content({
|
|
362
|
+
className
|
|
363
|
+
}),
|
|
364
|
+
children: textChildren(children)
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
PageHeaderContent.displayName = 'PageHeader.Content';
|
|
368
|
+
|
|
369
|
+
/** Whose page it is. Announces itself as a heading. */
|
|
370
|
+
const PageHeaderTitle = /*#__PURE__*/forwardRef(({
|
|
371
|
+
className,
|
|
372
|
+
...props
|
|
373
|
+
}, ref) => /*#__PURE__*/_jsx(Text, {
|
|
374
|
+
...props,
|
|
375
|
+
ref: ref,
|
|
376
|
+
size: "xl",
|
|
377
|
+
weight: "semibold",
|
|
378
|
+
accessibilityRole: "header",
|
|
379
|
+
className: cn('text-foreground', className)
|
|
380
|
+
}));
|
|
381
|
+
PageHeaderTitle.displayName = 'PageHeader.Title';
|
|
382
|
+
|
|
383
|
+
/** The handle, the email, the bio — the quiet line under the name. */
|
|
384
|
+
const PageHeaderDescription = /*#__PURE__*/forwardRef(({
|
|
385
|
+
className,
|
|
386
|
+
...props
|
|
387
|
+
}, ref) => /*#__PURE__*/_jsx(Text, {
|
|
388
|
+
...props,
|
|
389
|
+
ref: ref,
|
|
390
|
+
size: "sm",
|
|
391
|
+
muted: true,
|
|
392
|
+
className: className
|
|
393
|
+
}));
|
|
394
|
+
PageHeaderDescription.displayName = 'PageHeader.Description';
|
|
395
|
+
/**
|
|
396
|
+
* One fact about the account — a link, a location, the month it was opened.
|
|
397
|
+
*/
|
|
398
|
+
const PageHeaderMeta = /*#__PURE__*/forwardRef(({
|
|
399
|
+
className,
|
|
400
|
+
icon,
|
|
401
|
+
children,
|
|
402
|
+
...props
|
|
403
|
+
}, ref) => {
|
|
404
|
+
const {
|
|
405
|
+
variant,
|
|
406
|
+
align
|
|
407
|
+
} = usePageHeader('PageHeader.Meta');
|
|
408
|
+
const muted = useCSSVariable('--color-muted-foreground');
|
|
409
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
410
|
+
...props,
|
|
411
|
+
ref: ref,
|
|
412
|
+
className: pageHeaderVariants({
|
|
413
|
+
variant,
|
|
414
|
+
align
|
|
415
|
+
}).meta({
|
|
416
|
+
className
|
|
417
|
+
}),
|
|
418
|
+
children: [icon ? /*#__PURE__*/_jsx(IconColorProvider, {
|
|
419
|
+
color: typeof muted === 'string' ? muted : undefined,
|
|
420
|
+
children: icon
|
|
421
|
+
}) : null, textChildren(children, text => /*#__PURE__*/_jsx(Text, {
|
|
422
|
+
size: "sm",
|
|
423
|
+
muted: true,
|
|
424
|
+
children: text
|
|
425
|
+
}))]
|
|
426
|
+
});
|
|
427
|
+
});
|
|
428
|
+
PageHeaderMeta.displayName = 'PageHeader.Meta';
|
|
429
|
+
|
|
430
|
+
/** How a stats row reads its numbers out. */
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* The row of counts.
|
|
434
|
+
*
|
|
435
|
+
* Centred and stacked, the counts take equal widths across the full row. Left
|
|
436
|
+
* to their content they are centred as a block but not as figures: "Followers"
|
|
437
|
+
* is twice the width of "Posts", so the middle count sits off the centre line
|
|
438
|
+
* the name and the buttons are on, and the row reads as very slightly wrong
|
|
439
|
+
* without it being obvious why.
|
|
440
|
+
*/
|
|
441
|
+
const PageHeaderStats = /*#__PURE__*/forwardRef(({
|
|
442
|
+
className,
|
|
443
|
+
layout = 'stacked',
|
|
444
|
+
divided,
|
|
445
|
+
children,
|
|
446
|
+
...props
|
|
447
|
+
}, ref) => {
|
|
448
|
+
const {
|
|
449
|
+
variant,
|
|
450
|
+
align
|
|
451
|
+
} = usePageHeader('PageHeader.Stats');
|
|
452
|
+
const stacked = layout === 'stacked';
|
|
453
|
+
const measured = stacked && align === 'center';
|
|
454
|
+
|
|
455
|
+
// React Native has no `:first-child`, so the rule between two counts
|
|
456
|
+
// cannot be a style rule. Place it on every count but the first.
|
|
457
|
+
const items = divided || measured ? Children.map(children, (child, index) => {
|
|
458
|
+
if (! /*#__PURE__*/isValidElement(child)) return child;
|
|
459
|
+
if (child.type !== PageHeaderStat) return child;
|
|
460
|
+
const next = {};
|
|
461
|
+
if (divided && child.props.divided === undefined) {
|
|
462
|
+
next.divided = index > 0;
|
|
463
|
+
}
|
|
464
|
+
if (measured) {
|
|
465
|
+
next.className = cn('flex-1', child.props.className);
|
|
466
|
+
}
|
|
467
|
+
return /*#__PURE__*/cloneElement(child, next);
|
|
468
|
+
}) : children;
|
|
469
|
+
return /*#__PURE__*/_jsx(View, {
|
|
470
|
+
...props,
|
|
471
|
+
ref: ref,
|
|
472
|
+
className: pageHeaderVariants({
|
|
473
|
+
variant,
|
|
474
|
+
align
|
|
475
|
+
}).stats({
|
|
476
|
+
className: cn(stacked ? 'gap-6' : 'gap-4', measured && 'w-full', className)
|
|
477
|
+
}),
|
|
478
|
+
children: /*#__PURE__*/_jsx(PageHeaderStatsContext.Provider, {
|
|
479
|
+
value: layout,
|
|
480
|
+
children: items
|
|
481
|
+
})
|
|
482
|
+
});
|
|
483
|
+
});
|
|
484
|
+
PageHeaderStats.displayName = 'PageHeader.Stats';
|
|
485
|
+
/**
|
|
486
|
+
* One count. Announced as a single thing — "533 Followers" — because a figure
|
|
487
|
+
* and its label read apart are two pieces of nothing.
|
|
488
|
+
*/
|
|
489
|
+
const PageHeaderStat = /*#__PURE__*/forwardRef(({
|
|
490
|
+
className,
|
|
491
|
+
value,
|
|
492
|
+
label,
|
|
493
|
+
divided,
|
|
494
|
+
onPress,
|
|
495
|
+
accessibilityLabel,
|
|
496
|
+
...props
|
|
497
|
+
}, ref) => {
|
|
498
|
+
const layout = useContext(PageHeaderStatsContext);
|
|
499
|
+
const inline = layout === 'inline';
|
|
500
|
+
const spoken = accessibilityLabel ?? (isSpeakable(value) && isSpeakable(label) ? `${value} ${label}` : undefined);
|
|
501
|
+
const classes = cn(inline ? 'flex-row items-center gap-1' : 'items-center gap-0.5', divided && 'border-s border-border ps-4', className);
|
|
502
|
+
const body = /*#__PURE__*/_jsxs(_Fragment, {
|
|
503
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
504
|
+
size: "sm",
|
|
505
|
+
weight: "semibold",
|
|
506
|
+
children: value
|
|
507
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
508
|
+
size: "sm",
|
|
509
|
+
muted: true,
|
|
510
|
+
children: label
|
|
511
|
+
})]
|
|
512
|
+
});
|
|
513
|
+
if (!onPress) {
|
|
514
|
+
return /*#__PURE__*/_jsx(View, {
|
|
515
|
+
...props,
|
|
516
|
+
ref: ref,
|
|
517
|
+
accessible: true,
|
|
518
|
+
accessibilityLabel: spoken,
|
|
519
|
+
className: classes,
|
|
520
|
+
children: body
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
return /*#__PURE__*/_jsx(AnimatedPressable, {
|
|
524
|
+
...props,
|
|
525
|
+
ref: ref,
|
|
526
|
+
accessibilityRole: "button",
|
|
527
|
+
accessibilityLabel: spoken,
|
|
528
|
+
onPress: onPress,
|
|
529
|
+
className: classes,
|
|
530
|
+
children: body
|
|
531
|
+
});
|
|
532
|
+
});
|
|
533
|
+
PageHeaderStat.displayName = 'PageHeader.Stat';
|
|
534
|
+
|
|
535
|
+
/** Whether a node can be read into an accessibility label as it stands. */
|
|
536
|
+
function isSpeakable(node) {
|
|
537
|
+
return typeof node === 'string' || typeof node === 'number';
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* What you can do about the account. Give the buttons `className="flex-1"` for
|
|
541
|
+
* the pair that splits the width evenly.
|
|
542
|
+
*/
|
|
543
|
+
const PageHeaderActions = /*#__PURE__*/forwardRef(({
|
|
544
|
+
className,
|
|
545
|
+
children,
|
|
546
|
+
...props
|
|
547
|
+
}, ref) => {
|
|
548
|
+
const {
|
|
549
|
+
variant,
|
|
550
|
+
align
|
|
551
|
+
} = usePageHeader('PageHeader.Actions');
|
|
552
|
+
return /*#__PURE__*/_jsx(View, {
|
|
553
|
+
...props,
|
|
554
|
+
ref: ref,
|
|
555
|
+
className: pageHeaderVariants({
|
|
556
|
+
variant,
|
|
557
|
+
align
|
|
558
|
+
}).actions({
|
|
559
|
+
className
|
|
560
|
+
}),
|
|
561
|
+
children: textChildren(children)
|
|
562
|
+
});
|
|
563
|
+
});
|
|
564
|
+
PageHeaderActions.displayName = 'PageHeader.Actions';
|
|
565
|
+
export const PageHeader = Object.assign(PageHeaderRoot, {
|
|
566
|
+
Cover: PageHeaderCover,
|
|
567
|
+
Avatar: PageHeaderAvatar,
|
|
568
|
+
Row: PageHeaderRow,
|
|
569
|
+
Content: PageHeaderContent,
|
|
570
|
+
Title: PageHeaderTitle,
|
|
571
|
+
Description: PageHeaderDescription,
|
|
572
|
+
Meta: PageHeaderMeta,
|
|
573
|
+
Stats: PageHeaderStats,
|
|
574
|
+
Stat: PageHeaderStat,
|
|
575
|
+
Actions: PageHeaderActions
|
|
576
|
+
});
|
|
577
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Children","cloneElement","createContext","forwardRef","isValidElement","useContext","useMemo","Image","StyleSheet","View","LinearGradient","tv","useCSSVariable","AnimatedPressable","Text","textChildren","cn","BadgeCheckIcon","IconColorProvider","Avatar","AVATAR_SIZE_POINTS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","COVER_HEIGHT","AVATAR_RING","BADGE_RATIO","GRADIENT","GRADIENT_FALLBACK","pageHeaderVariants","slots","root","cover","avatar","ring","row","content","meta","stats","actions","variants","variant","card","page","align","start","center","defaultVariants","PageHeaderContext","undefined","usePageHeader","component","context","Error","PageHeaderRowContext","PageHeaderStatsContext","PageHeaderRoot","className","children","props","ref","hasCover","toArray","some","child","type","PageHeaderCover","Provider","value","displayName","source","height","colors","alt","style","from","to","ramp","resizeMode","absoluteFill","accessible","accessibilityRole","accessibilityLabel","x","y","end","accessibilityElementsHidden","importantForAccessibility","PageHeaderAvatar","size","verified","badge","overlap","fallback","imageProps","inRow","primary","onPrimary","diameter","xl","lifts","mark","Math","round","color","checkColor","marginTop","borderWidth","width","PageHeaderRow","PageHeaderContent","PageHeaderTitle","weight","PageHeaderDescription","muted","PageHeaderMeta","icon","text","PageHeaderStats","layout","divided","stacked","measured","items","map","index","PageHeaderStat","next","label","onPress","inline","spoken","isSpeakable","classes","body","node","PageHeaderActions","PageHeader","Object","assign","Cover","Row","Content","Title","Description","Meta","Stats","Stat","Actions"],"sourceRoot":"../../../../src","sources":["components/page-header/index.tsx"],"mappings":"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","ignoreList":[]}
|