@oxyhq/bloom 0.1.33 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -7
- package/lib/commonjs/avatar/Avatar.js +54 -8
- package/lib/commonjs/avatar/Avatar.js.map +1 -1
- package/lib/commonjs/dialog/Dialog.js +2 -6
- package/lib/commonjs/dialog/Dialog.js.map +1 -1
- package/lib/module/avatar/Avatar.js +55 -9
- package/lib/module/avatar/Avatar.js.map +1 -1
- package/lib/module/dialog/Dialog.js +2 -6
- package/lib/module/dialog/Dialog.js.map +1 -1
- package/lib/typescript/commonjs/avatar/Avatar.d.ts.map +1 -1
- package/lib/typescript/commonjs/avatar/types.d.ts +7 -0
- package/lib/typescript/commonjs/avatar/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/module/avatar/Avatar.d.ts.map +1 -1
- package/lib/typescript/module/avatar/types.d.ts +7 -0
- package/lib/typescript/module/avatar/types.d.ts.map +1 -1
- package/lib/typescript/module/dialog/Dialog.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/avatar/Avatar.tsx +78 -9
- package/src/avatar/types.ts +7 -0
- package/src/dialog/Dialog.tsx +3 -6
package/README.md
CHANGED
|
@@ -18,9 +18,9 @@ Required:
|
|
|
18
18
|
|
|
19
19
|
Optional:
|
|
20
20
|
|
|
21
|
-
- `@gorhom/bottom-sheet >= 5` (native Dialog)
|
|
22
|
-
- `react-native-reanimated >= 3` (native Dialog
|
|
23
|
-
- `react-native-gesture-handler >= 2` (native Dialog)
|
|
21
|
+
- `@gorhom/bottom-sheet >= 5` (native `Dialog` and `Prompt`) — also requires wrapping the app root with `BottomSheetModalProvider`, see [Dialog](#dialog).
|
|
22
|
+
- `react-native-reanimated >= 3` (native `Dialog`, `BottomSheet`, Loading `top` variant)
|
|
23
|
+
- `react-native-gesture-handler >= 2` (native `Dialog`, `BottomSheet`) — also requires wrapping the app root with `GestureHandlerRootView`, see [Dialog](#dialog).
|
|
24
24
|
- `react-native-svg >= 13` (Avatar `squircle` shape)
|
|
25
25
|
|
|
26
26
|
## Usage
|
|
@@ -50,9 +50,43 @@ const theme = useTheme();
|
|
|
50
50
|
|
|
51
51
|
4 modes: `light`, `dark`, `system`, `adaptive` (uses iOS/Android native dynamic colors when available).
|
|
52
52
|
|
|
53
|
+
### Modal components: Dialog, Prompt, BottomSheet
|
|
54
|
+
|
|
55
|
+
Bloom ships three components for modal/sheet presentation. Pick the one that matches your use case:
|
|
56
|
+
|
|
57
|
+
| Component | Native | Web | Use when |
|
|
58
|
+
|-----------|--------|-----|----------|
|
|
59
|
+
| `Dialog` | Bottom sheet (Gorhom), dynamic height | Centered modal | You need a modal container with arbitrary content — forms, pickers, custom layouts |
|
|
60
|
+
| `Prompt` | 40%-height bottom sheet (Gorhom) | Centered 320px modal | You need a confirmation dialog with title, description, and action buttons |
|
|
61
|
+
| `BottomSheet` | Draggable sheet (Bloom's own, no Gorhom) | Same pattern via RN `Modal` | You need a bottom sheet without the Gorhom dependency, or with custom snap/scroll/keyboard control |
|
|
62
|
+
|
|
63
|
+
`Prompt` is built on top of `Dialog` (so the provider requirements are the same). `BottomSheet` is a separate, standalone implementation.
|
|
64
|
+
|
|
53
65
|
### Dialog
|
|
54
66
|
|
|
55
|
-
Platform-adaptive dialogs — bottom sheet on native, modal overlay on web.
|
|
67
|
+
Platform-adaptive dialogs — bottom sheet on native, centered modal overlay on web.
|
|
68
|
+
|
|
69
|
+
> **Required providers (native).** `Dialog` (and therefore `Prompt`) uses `@gorhom/bottom-sheet` on Android/iOS. Your app root **must** be wrapped with `GestureHandlerRootView` from `react-native-gesture-handler` and `BottomSheetModalProvider` from `@gorhom/bottom-sheet`. Without these, the dialog will silently fail to render.
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
73
|
+
import { BottomSheetModalProvider } from '@gorhom/bottom-sheet';
|
|
74
|
+
import { BloomThemeProvider } from '@oxyhq/bloom/theme';
|
|
75
|
+
|
|
76
|
+
export default function Root() {
|
|
77
|
+
return (
|
|
78
|
+
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
79
|
+
<BloomThemeProvider mode="system" colorPreset="oxy">
|
|
80
|
+
<BottomSheetModalProvider>
|
|
81
|
+
<App />
|
|
82
|
+
</BottomSheetModalProvider>
|
|
83
|
+
</BloomThemeProvider>
|
|
84
|
+
</GestureHandlerRootView>
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Basic usage:
|
|
56
90
|
|
|
57
91
|
```tsx
|
|
58
92
|
import * as Dialog from '@oxyhq/bloom/dialog';
|
|
@@ -75,7 +109,17 @@ function MyComponent() {
|
|
|
75
109
|
}
|
|
76
110
|
```
|
|
77
111
|
|
|
78
|
-
|
|
112
|
+
`Dialog.Outer` props:
|
|
113
|
+
|
|
114
|
+
- `control` — from `useDialogControl()`.
|
|
115
|
+
- `onClose?` — fires after the dialog has finished closing.
|
|
116
|
+
- `testID?`
|
|
117
|
+
- `webOptions?: { alignCenter?: boolean }` — center the dialog vertically on web instead of anchoring near the top.
|
|
118
|
+
- `preventExpansion?: boolean` — on native, snaps the bottom sheet to a fixed `'40%'` height instead of dynamic sizing.
|
|
119
|
+
|
|
120
|
+
On native, the sheet uses `enablePanDownToClose`, `enableDismissOnClose`, dynamic sizing, and is constrained to a max width of 500px on tablets.
|
|
121
|
+
|
|
122
|
+
On web, inject the CSS animations into your global styles once:
|
|
79
123
|
|
|
80
124
|
```tsx
|
|
81
125
|
import { BLOOM_DIALOG_CSS } from '@oxyhq/bloom/dialog';
|
|
@@ -86,7 +130,11 @@ import { BLOOM_DIALOG_CSS } from '@oxyhq/bloom/dialog';
|
|
|
86
130
|
|
|
87
131
|
### Prompt
|
|
88
132
|
|
|
89
|
-
Confirmation dialogs built on top of Dialog.
|
|
133
|
+
Confirmation dialogs built on top of `Dialog`. On native, constrained to a 40% bottom sheet (Gorhom); on web, a centered 320px modal. Same provider requirements as [Dialog](#dialog).
|
|
134
|
+
|
|
135
|
+
`Prompt.Action` auto-closes the dialog after `onPress` by default. Pass `shouldCloseOnPress={false}` to keep it open (e.g. while an async operation is in flight).
|
|
136
|
+
|
|
137
|
+
`Prompt.Basic` — one-shot confirm dialog:
|
|
90
138
|
|
|
91
139
|
```tsx
|
|
92
140
|
import * as Prompt from '@oxyhq/bloom/prompt';
|
|
@@ -111,7 +159,18 @@ function DeleteButton() {
|
|
|
111
159
|
}
|
|
112
160
|
```
|
|
113
161
|
|
|
114
|
-
|
|
162
|
+
`Prompt.Basic` props:
|
|
163
|
+
|
|
164
|
+
- `control` — from `usePromptControl()`.
|
|
165
|
+
- `title: string`
|
|
166
|
+
- `description?: string`
|
|
167
|
+
- `confirmButtonCta?: string` — defaults to `'Confirm'`.
|
|
168
|
+
- `cancelButtonCta?: string` — defaults to `'Cancel'`.
|
|
169
|
+
- `confirmButtonColor?: ActionColor` — defaults to `'primary'`.
|
|
170
|
+
- `onConfirm: (e) => void`
|
|
171
|
+
- `showCancel?: boolean` — defaults to `true`.
|
|
172
|
+
|
|
173
|
+
Or compose with the compound components:
|
|
115
174
|
|
|
116
175
|
```tsx
|
|
117
176
|
<Prompt.Outer control={control}>
|
|
@@ -126,6 +185,47 @@ Or build custom prompts with compound components:
|
|
|
126
185
|
</Prompt.Outer>
|
|
127
186
|
```
|
|
128
187
|
|
|
188
|
+
Exports: `usePromptControl`, `Outer`, `Content`, `TitleText`, `DescriptionText`, `Actions`, `Action`, `Cancel`, `Basic`.
|
|
189
|
+
|
|
190
|
+
`ActionColor`: `'primary' | 'primary_subtle' | 'secondary' | 'negative' | 'negative_subtle'`.
|
|
191
|
+
|
|
192
|
+
### BottomSheet
|
|
193
|
+
|
|
194
|
+
A standalone, draggable bottom sheet built on React Native `Modal` + `react-native-reanimated` + `react-native-gesture-handler`. **Not** based on `@gorhom/bottom-sheet`, so it does not require `BottomSheetModalProvider`. Use it when the compound `Dialog` API doesn't fit, when you want to avoid the Gorhom dependency, or when you need direct control over scroll, keyboard handling, or detached presentation.
|
|
195
|
+
|
|
196
|
+
```tsx
|
|
197
|
+
import { useRef } from 'react';
|
|
198
|
+
import { BottomSheet, type BottomSheetRef } from '@oxyhq/bloom/bottom-sheet';
|
|
199
|
+
|
|
200
|
+
function Example() {
|
|
201
|
+
const sheetRef = useRef<BottomSheetRef>(null);
|
|
202
|
+
|
|
203
|
+
return (
|
|
204
|
+
<>
|
|
205
|
+
<Button onPress={() => sheetRef.current?.present()}>Open</Button>
|
|
206
|
+
|
|
207
|
+
<BottomSheet ref={sheetRef} onDismiss={() => console.log('dismissed')}>
|
|
208
|
+
<Text>Sheet content</Text>
|
|
209
|
+
</BottomSheet>
|
|
210
|
+
</>
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
`BottomSheetRef` methods: `present()`, `dismiss()`, `close()`, `expand()`, `collapse()`, `scrollTo(y, animated?)`.
|
|
216
|
+
|
|
217
|
+
`BottomSheetProps`:
|
|
218
|
+
|
|
219
|
+
- `children`
|
|
220
|
+
- `onDismiss?: () => void`
|
|
221
|
+
- `enablePanDownToClose?: boolean` — defaults to `true`.
|
|
222
|
+
- `enableHandlePanningGesture?: boolean` — defaults to `true`.
|
|
223
|
+
- `onDismissAttempt?: () => boolean` — return `false` to veto a dismiss attempt.
|
|
224
|
+
- `detached?: boolean` — when `true`, the sheet floats with horizontal margins and rounded corners on all sides; when `false`, it's flush to the bottom edges with rounded top corners only.
|
|
225
|
+
- `backgroundComponent?` — custom background renderer.
|
|
226
|
+
- `backdropComponent?` — custom backdrop renderer.
|
|
227
|
+
- `style?`
|
|
228
|
+
|
|
129
229
|
### Button
|
|
130
230
|
|
|
131
231
|
```tsx
|
|
@@ -270,6 +370,7 @@ import {
|
|
|
270
370
|
import { BloomThemeProvider, useTheme } from '@oxyhq/bloom/theme';
|
|
271
371
|
import * as Dialog from '@oxyhq/bloom/dialog';
|
|
272
372
|
import * as Prompt from '@oxyhq/bloom/prompt';
|
|
373
|
+
import { BottomSheet, type BottomSheetRef } from '@oxyhq/bloom/bottom-sheet';
|
|
273
374
|
import { Button, IconButton } from '@oxyhq/bloom/button';
|
|
274
375
|
import { GroupedButtons } from '@oxyhq/bloom/grouped-buttons';
|
|
275
376
|
import { Divider } from '@oxyhq/bloom/divider';
|
|
@@ -14,6 +14,25 @@ var _defaultAvatar = _interopRequireDefault(require("./default-avatar.jpg"));
|
|
|
14
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
16
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
17
|
+
// Google Contacts-inspired palette used to pick a deterministic background
|
|
18
|
+
// color for name-based placeholder avatars.
|
|
19
|
+
const NAME_AVATAR_COLORS = ['#D93025', '#E8710A', '#F9AB00', '#1E8E3E', '#12B5CB', '#1A73E8', '#7627BB', '#C5221F', '#0B8043', '#A142F4'];
|
|
20
|
+
function getInitial(name) {
|
|
21
|
+
const trimmed = name.trim();
|
|
22
|
+
if (!trimmed) return '?';
|
|
23
|
+
const firstCodePoint = [...trimmed][0] ?? '?';
|
|
24
|
+
return firstCodePoint.toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
function getNameColor(name) {
|
|
27
|
+
let hash = 0;
|
|
28
|
+
for (let i = 0; i < name.length; i++) {
|
|
29
|
+
hash = hash * 31 + name.charCodeAt(i) | 0;
|
|
30
|
+
}
|
|
31
|
+
const index = Math.abs(hash) % NAME_AVATAR_COLORS.length;
|
|
32
|
+
// Palette has a fixed, non-empty length, so this lookup always succeeds.
|
|
33
|
+
return NAME_AVATAR_COLORS[index] ?? NAME_AVATAR_COLORS[0];
|
|
34
|
+
}
|
|
35
|
+
|
|
17
36
|
// Built-in default avatar image — used when no source, fallbackSource, or placeholderIcon is provided
|
|
18
37
|
// ESM static import works in both Metro (RN 0.72+) and web bundlers (Vite, webpack).
|
|
19
38
|
|
|
@@ -31,6 +50,7 @@ function SquircleImage({
|
|
|
31
50
|
size,
|
|
32
51
|
fallbackColor,
|
|
33
52
|
placeholderIcon,
|
|
53
|
+
name,
|
|
34
54
|
onError
|
|
35
55
|
}) {
|
|
36
56
|
const svg = getSvgModule();
|
|
@@ -39,7 +59,8 @@ function SquircleImage({
|
|
|
39
59
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
|
|
40
60
|
size: size,
|
|
41
61
|
fallbackColor: fallbackColor,
|
|
42
|
-
icon: placeholderIcon
|
|
62
|
+
icon: placeholderIcon,
|
|
63
|
+
name: name
|
|
43
64
|
});
|
|
44
65
|
}
|
|
45
66
|
const {
|
|
@@ -57,7 +78,8 @@ function SquircleImage({
|
|
|
57
78
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
|
|
58
79
|
size: size,
|
|
59
80
|
fallbackColor: fallbackColor,
|
|
60
|
-
icon: placeholderIcon
|
|
81
|
+
icon: placeholderIcon,
|
|
82
|
+
name: name
|
|
61
83
|
});
|
|
62
84
|
}
|
|
63
85
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
@@ -91,9 +113,21 @@ function SquircleImage({
|
|
|
91
113
|
function CircleFallback({
|
|
92
114
|
size,
|
|
93
115
|
fallbackColor,
|
|
94
|
-
icon
|
|
116
|
+
icon,
|
|
117
|
+
name
|
|
95
118
|
}) {
|
|
96
119
|
const radius = size / 2;
|
|
120
|
+
// If a name is provided (and no custom icon was supplied), render a
|
|
121
|
+
// centered initial in white instead of the default avatar image.
|
|
122
|
+
const hasName = typeof name === 'string' && name.trim().length > 0;
|
|
123
|
+
const initialStyle = {
|
|
124
|
+
color: '#FFFFFF',
|
|
125
|
+
fontSize: Math.round(size * 0.42),
|
|
126
|
+
fontWeight: '600',
|
|
127
|
+
lineHeight: Math.round(size * 0.48),
|
|
128
|
+
textAlign: 'center',
|
|
129
|
+
includeFontPadding: false
|
|
130
|
+
};
|
|
97
131
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
98
132
|
style: {
|
|
99
133
|
width: size,
|
|
@@ -104,7 +138,12 @@ function CircleFallback({
|
|
|
104
138
|
alignItems: 'center',
|
|
105
139
|
overflow: 'hidden'
|
|
106
140
|
},
|
|
107
|
-
children: icon ?? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.
|
|
141
|
+
children: icon ?? (hasName ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
142
|
+
allowFontScaling: false,
|
|
143
|
+
numberOfLines: 1,
|
|
144
|
+
style: initialStyle,
|
|
145
|
+
children: getInitial(name)
|
|
146
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
|
|
108
147
|
source: _defaultAvatar.default,
|
|
109
148
|
resizeMode: "cover",
|
|
110
149
|
style: {
|
|
@@ -112,7 +151,7 @@ function CircleFallback({
|
|
|
112
151
|
height: size,
|
|
113
152
|
borderRadius: radius
|
|
114
153
|
}
|
|
115
|
-
})
|
|
154
|
+
}))
|
|
116
155
|
});
|
|
117
156
|
}
|
|
118
157
|
const AvatarComponent = ({
|
|
@@ -127,6 +166,7 @@ const AvatarComponent = ({
|
|
|
127
166
|
imageStyle,
|
|
128
167
|
placeholderColor,
|
|
129
168
|
placeholderIcon,
|
|
169
|
+
name,
|
|
130
170
|
onPress,
|
|
131
171
|
testID
|
|
132
172
|
}) => {
|
|
@@ -134,8 +174,12 @@ const AvatarComponent = ({
|
|
|
134
174
|
const theme = (0, _useTheme.useTheme)();
|
|
135
175
|
const placeholderConfig = (0, _placeholderContext.useAvatarPlaceholder)();
|
|
136
176
|
const radius = size / 2;
|
|
137
|
-
const
|
|
138
|
-
|
|
177
|
+
const hasName = typeof name === 'string' && name.trim().length > 0;
|
|
178
|
+
// Priority: explicit placeholderColor > deterministic color from name > theme default.
|
|
179
|
+
const fallbackColor = placeholderColor || (hasName ? getNameColor(name) : theme.colors.backgroundTertiary);
|
|
180
|
+
// When a name is provided, we render an initial instead of invoking the
|
|
181
|
+
// default placeholder-context icon. Explicit placeholderIcon still wins.
|
|
182
|
+
const resolvedPlaceholderIcon = placeholderIcon ?? (hasName ? undefined : placeholderConfig?.icon?.(size * 0.6));
|
|
139
183
|
|
|
140
184
|
// Reset error state when source changes (e.g., list item recycling
|
|
141
185
|
// or async URL resolution replacing an initial file ID).
|
|
@@ -187,6 +231,7 @@ const AvatarComponent = ({
|
|
|
187
231
|
size: size,
|
|
188
232
|
fallbackColor: fallbackColor,
|
|
189
233
|
placeholderIcon: resolvedPlaceholderIcon,
|
|
234
|
+
name: name,
|
|
190
235
|
onError: () => setErrored(true)
|
|
191
236
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
192
237
|
style: [styles.imageContainer, {
|
|
@@ -204,7 +249,8 @@ const AvatarComponent = ({
|
|
|
204
249
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
|
|
205
250
|
size: size,
|
|
206
251
|
fallbackColor: fallbackColor,
|
|
207
|
-
icon: resolvedPlaceholderIcon
|
|
252
|
+
icon: resolvedPlaceholderIcon,
|
|
253
|
+
name: name
|
|
208
254
|
})
|
|
209
255
|
}), verified && verifiedIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
210
256
|
style: [styles.verifiedBadge, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_context","_lazyRequire","_placeholderContext","_defaultAvatar","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SQUIRCLE_PATH","clipIdCounter","getSvgModule","lazyRequire","SquircleImage","uri","fallbackSource","size","fallbackColor","placeholderIcon","onError","svg","jsx","CircleFallback","icon","Svg","Defs","ClipPath","Path","Image","SvgImage","clipId","useMemo","href","jsxs","Fragment","children","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","radius","View","borderRadius","backgroundColor","justifyContent","alignItems","overflow","DEFAULT_AVATAR_IMAGE","resizeMode","AvatarComponent","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","testID","errored","setErrored","useState","theme","useTheme","placeholderConfig","useAvatarPlaceholder","colors","backgroundTertiary","resolvedPlaceholderIcon","prevSourceRef","useRef","prevUriRef","current","imageResolver","useImageResolver","resolvedUri","startsWith","resolvedImageSource","undefined","effectiveUri","imageSource","content","container","imageContainer","StyleSheet","absoluteFillObject","verifiedBadge","TouchableOpacity","create","position","bottom","right","zIndex","opacity","Avatar","exports","memo","displayName"],"sourceRoot":"../../../src","sources":["avatar/Avatar.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_context","_lazyRequire","_placeholderContext","_defaultAvatar","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NAME_AVATAR_COLORS","getInitial","name","trimmed","trim","firstCodePoint","toUpperCase","getNameColor","hash","length","charCodeAt","index","Math","abs","SQUIRCLE_PATH","clipIdCounter","getSvgModule","lazyRequire","SquircleImage","uri","fallbackSource","size","fallbackColor","placeholderIcon","onError","svg","jsx","CircleFallback","icon","Svg","Defs","ClipPath","Path","Image","SvgImage","clipId","useMemo","href","jsxs","Fragment","children","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","radius","hasName","initialStyle","color","fontSize","round","fontWeight","lineHeight","textAlign","includeFontPadding","View","borderRadius","backgroundColor","justifyContent","alignItems","overflow","Text","allowFontScaling","numberOfLines","DEFAULT_AVATAR_IMAGE","resizeMode","AvatarComponent","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","testID","errored","setErrored","useState","theme","useTheme","placeholderConfig","useAvatarPlaceholder","colors","backgroundTertiary","resolvedPlaceholderIcon","undefined","prevSourceRef","useRef","prevUriRef","current","imageResolver","useImageResolver","resolvedUri","startsWith","resolvedImageSource","effectiveUri","imageSource","content","container","imageContainer","StyleSheet","absoluteFillObject","verifiedBadge","TouchableOpacity","create","position","bottom","right","zIndex","opacity","Avatar","exports","memo","displayName"],"sourceRoot":"../../../src","sources":["avatar/Avatar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -77,6 +77,7 @@ function Outer({
|
|
|
77
77
|
pressBehavior: "close",
|
|
78
78
|
opacity: 0.4
|
|
79
79
|
}), []);
|
|
80
|
+
const renderHandle = (0, _react.useCallback)(() => null, []);
|
|
80
81
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_bottomSheet.BottomSheetModal, {
|
|
81
82
|
ref: ref,
|
|
82
83
|
enablePanDownToClose: true,
|
|
@@ -88,12 +89,7 @@ function Outer({
|
|
|
88
89
|
borderTopLeftRadius: 20,
|
|
89
90
|
borderTopRightRadius: 20
|
|
90
91
|
},
|
|
91
|
-
|
|
92
|
-
backgroundColor: theme.colors.text,
|
|
93
|
-
width: 35,
|
|
94
|
-
height: 5,
|
|
95
|
-
opacity: 0.5
|
|
96
|
-
},
|
|
92
|
+
handleComponent: renderHandle,
|
|
97
93
|
backdropComponent: renderBackdrop,
|
|
98
94
|
onDismiss: handleDismiss,
|
|
99
95
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_bottomSheet","_reactNativeSafeAreaContext","_useTheme","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Outer","children","control","onClose","testID","preventExpansion","theme","useTheme","ref","useRef","closeCallbacks","callQueuedCallbacks","useCallback","cb","current","console","error","open","present","close","push","dismiss","handleDismiss","useImperativeHandle","context","useMemo","isWithinDialog","renderBackdrop","props","jsx","BottomSheetBackdrop","appearsOnIndex","disappearsOnIndex","pressBehavior","opacity","BottomSheetModal","enablePanDownToClose","enableDismissOnClose","enableDynamicSizing","snapPoints","undefined","backgroundStyle","backgroundColor","colors","background","borderTopLeftRadius","borderTopRightRadius","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_bottomSheet","_reactNativeSafeAreaContext","_useTheme","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Outer","children","control","onClose","testID","preventExpansion","theme","useTheme","ref","useRef","closeCallbacks","callQueuedCallbacks","useCallback","cb","current","console","error","open","present","close","push","dismiss","handleDismiss","useImperativeHandle","context","useMemo","isWithinDialog","renderBackdrop","props","jsx","BottomSheetBackdrop","appearsOnIndex","disappearsOnIndex","pressBehavior","opacity","renderHandle","BottomSheetModal","enablePanDownToClose","enableDismissOnClose","enableDynamicSizing","snapPoints","undefined","backgroundStyle","backgroundColor","colors","background","borderTopLeftRadius","borderTopRightRadius","handleComponent","backdropComponent","onDismiss","style","maxWidth","margin","Context","Provider","value","BottomSheetView","Inner","header","contentContainerStyle","insets","useSafeAreaInsets","jsxs","Fragment","View","paddingTop","paddingHorizontal","paddingBottom","bottom","top","ScrollableInner","handleStyles","StyleSheet","create","container","position","width","alignItems","zIndex","height","bar","borderRadius","alignSelf","Handle","useDialogContext","Pressable","onPress","accessibilityLabel","accessibilityHint","hitSlop","left","right","text","Close","Backdrop"],"sourceRoot":"../../../src","sources":["dialog/Dialog.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import React, { memo, useMemo, useRef, useState } from 'react';
|
|
4
|
-
import { View, Image, StyleSheet, TouchableOpacity } from 'react-native';
|
|
4
|
+
import { View, Image, StyleSheet, Text, TouchableOpacity } from 'react-native';
|
|
5
5
|
import { useTheme } from "../theme/use-theme.js";
|
|
6
6
|
import { useImageResolver } from "../image-resolver/context.js";
|
|
7
7
|
import { lazyRequire } from "../utils/lazy-require.js";
|
|
8
8
|
import { useAvatarPlaceholder } from "./placeholder-context.js";
|
|
9
|
+
// Google Contacts-inspired palette used to pick a deterministic background
|
|
10
|
+
// color for name-based placeholder avatars.
|
|
11
|
+
const NAME_AVATAR_COLORS = ['#D93025', '#E8710A', '#F9AB00', '#1E8E3E', '#12B5CB', '#1A73E8', '#7627BB', '#C5221F', '#0B8043', '#A142F4'];
|
|
12
|
+
function getInitial(name) {
|
|
13
|
+
const trimmed = name.trim();
|
|
14
|
+
if (!trimmed) return '?';
|
|
15
|
+
const firstCodePoint = [...trimmed][0] ?? '?';
|
|
16
|
+
return firstCodePoint.toUpperCase();
|
|
17
|
+
}
|
|
18
|
+
function getNameColor(name) {
|
|
19
|
+
let hash = 0;
|
|
20
|
+
for (let i = 0; i < name.length; i++) {
|
|
21
|
+
hash = hash * 31 + name.charCodeAt(i) | 0;
|
|
22
|
+
}
|
|
23
|
+
const index = Math.abs(hash) % NAME_AVATAR_COLORS.length;
|
|
24
|
+
// Palette has a fixed, non-empty length, so this lookup always succeeds.
|
|
25
|
+
return NAME_AVATAR_COLORS[index] ?? NAME_AVATAR_COLORS[0];
|
|
26
|
+
}
|
|
27
|
+
|
|
9
28
|
// Built-in default avatar image — used when no source, fallbackSource, or placeholderIcon is provided
|
|
10
29
|
// ESM static import works in both Metro (RN 0.72+) and web bundlers (Vite, webpack).
|
|
11
30
|
import DEFAULT_AVATAR_IMAGE from './default-avatar.jpg';
|
|
@@ -25,6 +44,7 @@ function SquircleImage({
|
|
|
25
44
|
size,
|
|
26
45
|
fallbackColor,
|
|
27
46
|
placeholderIcon,
|
|
47
|
+
name,
|
|
28
48
|
onError
|
|
29
49
|
}) {
|
|
30
50
|
const svg = getSvgModule();
|
|
@@ -33,7 +53,8 @@ function SquircleImage({
|
|
|
33
53
|
return /*#__PURE__*/_jsx(CircleFallback, {
|
|
34
54
|
size: size,
|
|
35
55
|
fallbackColor: fallbackColor,
|
|
36
|
-
icon: placeholderIcon
|
|
56
|
+
icon: placeholderIcon,
|
|
57
|
+
name: name
|
|
37
58
|
});
|
|
38
59
|
}
|
|
39
60
|
const {
|
|
@@ -51,7 +72,8 @@ function SquircleImage({
|
|
|
51
72
|
return /*#__PURE__*/_jsx(CircleFallback, {
|
|
52
73
|
size: size,
|
|
53
74
|
fallbackColor: fallbackColor,
|
|
54
|
-
icon: placeholderIcon
|
|
75
|
+
icon: placeholderIcon,
|
|
76
|
+
name: name
|
|
55
77
|
});
|
|
56
78
|
}
|
|
57
79
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -85,9 +107,21 @@ function SquircleImage({
|
|
|
85
107
|
function CircleFallback({
|
|
86
108
|
size,
|
|
87
109
|
fallbackColor,
|
|
88
|
-
icon
|
|
110
|
+
icon,
|
|
111
|
+
name
|
|
89
112
|
}) {
|
|
90
113
|
const radius = size / 2;
|
|
114
|
+
// If a name is provided (and no custom icon was supplied), render a
|
|
115
|
+
// centered initial in white instead of the default avatar image.
|
|
116
|
+
const hasName = typeof name === 'string' && name.trim().length > 0;
|
|
117
|
+
const initialStyle = {
|
|
118
|
+
color: '#FFFFFF',
|
|
119
|
+
fontSize: Math.round(size * 0.42),
|
|
120
|
+
fontWeight: '600',
|
|
121
|
+
lineHeight: Math.round(size * 0.48),
|
|
122
|
+
textAlign: 'center',
|
|
123
|
+
includeFontPadding: false
|
|
124
|
+
};
|
|
91
125
|
return /*#__PURE__*/_jsx(View, {
|
|
92
126
|
style: {
|
|
93
127
|
width: size,
|
|
@@ -98,7 +132,12 @@ function CircleFallback({
|
|
|
98
132
|
alignItems: 'center',
|
|
99
133
|
overflow: 'hidden'
|
|
100
134
|
},
|
|
101
|
-
children: icon ?? /*#__PURE__*/_jsx(
|
|
135
|
+
children: icon ?? (hasName ? /*#__PURE__*/_jsx(Text, {
|
|
136
|
+
allowFontScaling: false,
|
|
137
|
+
numberOfLines: 1,
|
|
138
|
+
style: initialStyle,
|
|
139
|
+
children: getInitial(name)
|
|
140
|
+
}) : /*#__PURE__*/_jsx(Image, {
|
|
102
141
|
source: DEFAULT_AVATAR_IMAGE,
|
|
103
142
|
resizeMode: "cover",
|
|
104
143
|
style: {
|
|
@@ -106,7 +145,7 @@ function CircleFallback({
|
|
|
106
145
|
height: size,
|
|
107
146
|
borderRadius: radius
|
|
108
147
|
}
|
|
109
|
-
})
|
|
148
|
+
}))
|
|
110
149
|
});
|
|
111
150
|
}
|
|
112
151
|
const AvatarComponent = ({
|
|
@@ -121,6 +160,7 @@ const AvatarComponent = ({
|
|
|
121
160
|
imageStyle,
|
|
122
161
|
placeholderColor,
|
|
123
162
|
placeholderIcon,
|
|
163
|
+
name,
|
|
124
164
|
onPress,
|
|
125
165
|
testID
|
|
126
166
|
}) => {
|
|
@@ -128,8 +168,12 @@ const AvatarComponent = ({
|
|
|
128
168
|
const theme = useTheme();
|
|
129
169
|
const placeholderConfig = useAvatarPlaceholder();
|
|
130
170
|
const radius = size / 2;
|
|
131
|
-
const
|
|
132
|
-
|
|
171
|
+
const hasName = typeof name === 'string' && name.trim().length > 0;
|
|
172
|
+
// Priority: explicit placeholderColor > deterministic color from name > theme default.
|
|
173
|
+
const fallbackColor = placeholderColor || (hasName ? getNameColor(name) : theme.colors.backgroundTertiary);
|
|
174
|
+
// When a name is provided, we render an initial instead of invoking the
|
|
175
|
+
// default placeholder-context icon. Explicit placeholderIcon still wins.
|
|
176
|
+
const resolvedPlaceholderIcon = placeholderIcon ?? (hasName ? undefined : placeholderConfig?.icon?.(size * 0.6));
|
|
133
177
|
|
|
134
178
|
// Reset error state when source changes (e.g., list item recycling
|
|
135
179
|
// or async URL resolution replacing an initial file ID).
|
|
@@ -181,6 +225,7 @@ const AvatarComponent = ({
|
|
|
181
225
|
size: size,
|
|
182
226
|
fallbackColor: fallbackColor,
|
|
183
227
|
placeholderIcon: resolvedPlaceholderIcon,
|
|
228
|
+
name: name,
|
|
184
229
|
onError: () => setErrored(true)
|
|
185
230
|
}) : /*#__PURE__*/_jsx(View, {
|
|
186
231
|
style: [styles.imageContainer, {
|
|
@@ -198,7 +243,8 @@ const AvatarComponent = ({
|
|
|
198
243
|
}) : /*#__PURE__*/_jsx(CircleFallback, {
|
|
199
244
|
size: size,
|
|
200
245
|
fallbackColor: fallbackColor,
|
|
201
|
-
icon: resolvedPlaceholderIcon
|
|
246
|
+
icon: resolvedPlaceholderIcon,
|
|
247
|
+
name: name
|
|
202
248
|
})
|
|
203
249
|
}), verified && verifiedIcon && /*#__PURE__*/_jsx(View, {
|
|
204
250
|
style: [styles.verifiedBadge, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useMemo","useRef","useState","View","Image","StyleSheet","TouchableOpacity","useTheme","useImageResolver","lazyRequire","useAvatarPlaceholder","DEFAULT_AVATAR_IMAGE","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SQUIRCLE_PATH","clipIdCounter","getSvgModule","SquircleImage","uri","fallbackSource","size","fallbackColor","placeholderIcon","onError","svg","CircleFallback","icon","default","Svg","Defs","ClipPath","Path","SvgImage","clipId","href","children","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","radius","borderRadius","backgroundColor","justifyContent","alignItems","overflow","resizeMode","AvatarComponent","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","testID","errored","setErrored","theme","placeholderConfig","colors","backgroundTertiary","resolvedPlaceholderIcon","prevSourceRef","prevUriRef","current","imageResolver","resolvedUri","startsWith","resolvedImageSource","
|
|
1
|
+
{"version":3,"names":["React","memo","useMemo","useRef","useState","View","Image","StyleSheet","Text","TouchableOpacity","useTheme","useImageResolver","lazyRequire","useAvatarPlaceholder","NAME_AVATAR_COLORS","getInitial","name","trimmed","trim","firstCodePoint","toUpperCase","getNameColor","hash","i","length","charCodeAt","index","Math","abs","DEFAULT_AVATAR_IMAGE","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SQUIRCLE_PATH","clipIdCounter","getSvgModule","SquircleImage","uri","fallbackSource","size","fallbackColor","placeholderIcon","onError","svg","CircleFallback","icon","default","Svg","Defs","ClipPath","Path","SvgImage","clipId","href","children","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","radius","hasName","initialStyle","color","fontSize","round","fontWeight","lineHeight","textAlign","includeFontPadding","borderRadius","backgroundColor","justifyContent","alignItems","overflow","allowFontScaling","numberOfLines","resizeMode","AvatarComponent","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","testID","errored","setErrored","theme","placeholderConfig","colors","backgroundTertiary","resolvedPlaceholderIcon","undefined","prevSourceRef","prevUriRef","current","imageResolver","resolvedUri","startsWith","resolvedImageSource","effectiveUri","imageSource","content","container","imageContainer","absoluteFillObject","verifiedBadge","create","position","bottom","right","zIndex","opacity","Avatar","displayName"],"sourceRoot":"../../../src","sources":["avatar/Avatar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -56,6 +56,7 @@ export function Outer({
|
|
|
56
56
|
pressBehavior: "close",
|
|
57
57
|
opacity: 0.4
|
|
58
58
|
}), []);
|
|
59
|
+
const renderHandle = useCallback(() => null, []);
|
|
59
60
|
return /*#__PURE__*/_jsx(BottomSheetModal, {
|
|
60
61
|
ref: ref,
|
|
61
62
|
enablePanDownToClose: true,
|
|
@@ -67,12 +68,7 @@ export function Outer({
|
|
|
67
68
|
borderTopLeftRadius: 20,
|
|
68
69
|
borderTopRightRadius: 20
|
|
69
70
|
},
|
|
70
|
-
|
|
71
|
-
backgroundColor: theme.colors.text,
|
|
72
|
-
width: 35,
|
|
73
|
-
height: 5,
|
|
74
|
-
opacity: 0.5
|
|
75
|
-
},
|
|
71
|
+
handleComponent: renderHandle,
|
|
76
72
|
backdropComponent: renderBackdrop,
|
|
77
73
|
onDismiss: handleDismiss,
|
|
78
74
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useImperativeHandle","useMemo","useRef","Pressable","StyleSheet","View","BottomSheetModal","BottomSheetView","BottomSheetBackdrop","useSafeAreaInsets","useTheme","Context","useDialogContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","useDialogControl","Outer","children","control","onClose","testID","preventExpansion","theme","ref","closeCallbacks","callQueuedCallbacks","cb","current","e","console","error","open","present","close","push","dismiss","handleDismiss","context","isWithinDialog","renderBackdrop","props","appearsOnIndex","disappearsOnIndex","pressBehavior","opacity","enablePanDownToClose","enableDismissOnClose","enableDynamicSizing","snapPoints","undefined","backgroundStyle","backgroundColor","colors","background","borderTopLeftRadius","borderTopRightRadius","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useImperativeHandle","useMemo","useRef","Pressable","StyleSheet","View","BottomSheetModal","BottomSheetView","BottomSheetBackdrop","useSafeAreaInsets","useTheme","Context","useDialogContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","useDialogControl","Outer","children","control","onClose","testID","preventExpansion","theme","ref","closeCallbacks","callQueuedCallbacks","cb","current","e","console","error","open","present","close","push","dismiss","handleDismiss","context","isWithinDialog","renderBackdrop","props","appearsOnIndex","disappearsOnIndex","pressBehavior","opacity","renderHandle","enablePanDownToClose","enableDismissOnClose","enableDynamicSizing","snapPoints","undefined","backgroundStyle","backgroundColor","colors","background","borderTopLeftRadius","borderTopRightRadius","handleComponent","backdropComponent","onDismiss","style","maxWidth","margin","Provider","value","Inner","header","contentContainerStyle","insets","paddingTop","paddingHorizontal","paddingBottom","bottom","top","ScrollableInner","handleStyles","create","container","position","width","alignItems","zIndex","height","bar","borderRadius","alignSelf","Handle","onPress","accessibilityLabel","accessibilityHint","hitSlop","left","right","text","Close","Backdrop"],"sourceRoot":"../../../src","sources":["dialog/Dialog.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAQ/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAsT3C,eAAO,MAAM,MAAM,yCAAwB,CAAC"}
|
|
@@ -28,6 +28,13 @@ export interface AvatarProps {
|
|
|
28
28
|
placeholderColor?: string;
|
|
29
29
|
/** Custom icon rendered inside the placeholder circle when no image is available */
|
|
30
30
|
placeholderIcon?: ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Contact/user name used to derive a deterministic initial and background color.
|
|
33
|
+
* When no image resolves (missing `source`/`uri` or image error), the Avatar renders
|
|
34
|
+
* a colored circle with the first letter of the name in white.
|
|
35
|
+
* Consumers can still override via `placeholderColor` / `placeholderIcon`.
|
|
36
|
+
*/
|
|
37
|
+
name?: string;
|
|
31
38
|
/** Press handler — wraps avatar in TouchableOpacity when provided */
|
|
32
39
|
onPress?: () => void;
|
|
33
40
|
testID?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/avatar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAC7C,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,wFAAwF;IACxF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/avatar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAC7C,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,wFAAwF;IACxF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,KAAK,EAAsB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,gBAAgB,GACjB,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,KAAK,EAAsB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,gBAAgB,GACjB,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,2CAqF3C;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAAE,gBAAgB,2CAgBzF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,2CAEtD;AAOD,wBAAgB,MAAM,4CAgBrB;AAED,wBAAgB,KAAK,SAEpB;AAED,wBAAgB,QAAQ,SAEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAQ/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAsT3C,eAAO,MAAM,MAAM,yCAAwB,CAAC"}
|
|
@@ -28,6 +28,13 @@ export interface AvatarProps {
|
|
|
28
28
|
placeholderColor?: string;
|
|
29
29
|
/** Custom icon rendered inside the placeholder circle when no image is available */
|
|
30
30
|
placeholderIcon?: ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Contact/user name used to derive a deterministic initial and background color.
|
|
33
|
+
* When no image resolves (missing `source`/`uri` or image error), the Avatar renders
|
|
34
|
+
* a colored circle with the first letter of the name in white.
|
|
35
|
+
* Consumers can still override via `placeholderColor` / `placeholderIcon`.
|
|
36
|
+
*/
|
|
37
|
+
name?: string;
|
|
31
38
|
/** Press handler — wraps avatar in TouchableOpacity when provided */
|
|
32
39
|
onPress?: () => void;
|
|
33
40
|
testID?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/avatar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAC7C,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,wFAAwF;IACxF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/avatar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAC7C,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,wFAAwF;IACxF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,KAAK,EAAsB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,gBAAgB,GACjB,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,KAAK,EAAsB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtF,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,EACN,gBAAgB,GACjB,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,2CAqF3C;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAAE,gBAAgB,2CAgBzF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,2CAEtD;AAOD,wBAAgB,MAAM,4CAgBrB;AAED,wBAAgB,KAAK,SAEpB;AAED,wBAAgB,QAAQ,SAEvB"}
|
package/package.json
CHANGED
package/src/avatar/Avatar.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { memo, useMemo, useRef, useState } from 'react';
|
|
2
|
-
import { View, Image, StyleSheet, TouchableOpacity } from 'react-native';
|
|
2
|
+
import { View, Image, StyleSheet, Text, TouchableOpacity } from 'react-native';
|
|
3
|
+
import type { TextStyle } from 'react-native';
|
|
3
4
|
|
|
4
5
|
import { useTheme } from '../theme/use-theme';
|
|
5
6
|
import { useImageResolver } from '../image-resolver/context';
|
|
@@ -7,6 +8,30 @@ import { lazyRequire } from '../utils/lazy-require';
|
|
|
7
8
|
import { useAvatarPlaceholder } from './placeholder-context';
|
|
8
9
|
import type { AvatarProps } from './types';
|
|
9
10
|
|
|
11
|
+
// Google Contacts-inspired palette used to pick a deterministic background
|
|
12
|
+
// color for name-based placeholder avatars.
|
|
13
|
+
const NAME_AVATAR_COLORS = [
|
|
14
|
+
'#D93025', '#E8710A', '#F9AB00', '#1E8E3E', '#12B5CB',
|
|
15
|
+
'#1A73E8', '#7627BB', '#C5221F', '#0B8043', '#A142F4',
|
|
16
|
+
] as const;
|
|
17
|
+
|
|
18
|
+
function getInitial(name: string): string {
|
|
19
|
+
const trimmed = name.trim();
|
|
20
|
+
if (!trimmed) return '?';
|
|
21
|
+
const firstCodePoint = [...trimmed][0] ?? '?';
|
|
22
|
+
return firstCodePoint.toUpperCase();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function getNameColor(name: string): string {
|
|
26
|
+
let hash = 0;
|
|
27
|
+
for (let i = 0; i < name.length; i++) {
|
|
28
|
+
hash = (hash * 31 + name.charCodeAt(i)) | 0;
|
|
29
|
+
}
|
|
30
|
+
const index = Math.abs(hash) % NAME_AVATAR_COLORS.length;
|
|
31
|
+
// Palette has a fixed, non-empty length, so this lookup always succeeds.
|
|
32
|
+
return NAME_AVATAR_COLORS[index] ?? NAME_AVATAR_COLORS[0];
|
|
33
|
+
}
|
|
34
|
+
|
|
10
35
|
// Built-in default avatar image — used when no source, fallbackSource, or placeholderIcon is provided
|
|
11
36
|
// ESM static import works in both Metro (RN 0.72+) and web bundlers (Vite, webpack).
|
|
12
37
|
import DEFAULT_AVATAR_IMAGE from './default-avatar.jpg';
|
|
@@ -31,6 +56,7 @@ function SquircleImage({
|
|
|
31
56
|
size,
|
|
32
57
|
fallbackColor,
|
|
33
58
|
placeholderIcon,
|
|
59
|
+
name,
|
|
34
60
|
onError,
|
|
35
61
|
}: {
|
|
36
62
|
uri?: string;
|
|
@@ -38,12 +64,13 @@ function SquircleImage({
|
|
|
38
64
|
size: number;
|
|
39
65
|
fallbackColor: string;
|
|
40
66
|
placeholderIcon?: React.ReactNode;
|
|
67
|
+
name?: string;
|
|
41
68
|
onError: () => void;
|
|
42
69
|
}) {
|
|
43
70
|
const svg = getSvgModule();
|
|
44
71
|
if (!svg) {
|
|
45
72
|
// Fallback to circle if react-native-svg is not installed
|
|
46
|
-
return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} />;
|
|
73
|
+
return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} name={name} />;
|
|
47
74
|
}
|
|
48
75
|
|
|
49
76
|
const { default: Svg, Defs, ClipPath, Path, Image: SvgImage } = svg;
|
|
@@ -51,7 +78,7 @@ function SquircleImage({
|
|
|
51
78
|
|
|
52
79
|
const href = uri ? { uri } : fallbackSource;
|
|
53
80
|
if (!href) {
|
|
54
|
-
return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} />;
|
|
81
|
+
return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} name={name} />;
|
|
55
82
|
}
|
|
56
83
|
|
|
57
84
|
return (
|
|
@@ -82,8 +109,29 @@ function SquircleImage({
|
|
|
82
109
|
);
|
|
83
110
|
}
|
|
84
111
|
|
|
85
|
-
function CircleFallback({
|
|
112
|
+
function CircleFallback({
|
|
113
|
+
size,
|
|
114
|
+
fallbackColor,
|
|
115
|
+
icon,
|
|
116
|
+
name,
|
|
117
|
+
}: {
|
|
118
|
+
size: number;
|
|
119
|
+
fallbackColor: string;
|
|
120
|
+
icon?: React.ReactNode;
|
|
121
|
+
name?: string;
|
|
122
|
+
}) {
|
|
86
123
|
const radius = size / 2;
|
|
124
|
+
// If a name is provided (and no custom icon was supplied), render a
|
|
125
|
+
// centered initial in white instead of the default avatar image.
|
|
126
|
+
const hasName = typeof name === 'string' && name.trim().length > 0;
|
|
127
|
+
const initialStyle: TextStyle = {
|
|
128
|
+
color: '#FFFFFF',
|
|
129
|
+
fontSize: Math.round(size * 0.42),
|
|
130
|
+
fontWeight: '600',
|
|
131
|
+
lineHeight: Math.round(size * 0.48),
|
|
132
|
+
textAlign: 'center',
|
|
133
|
+
includeFontPadding: false,
|
|
134
|
+
};
|
|
87
135
|
return (
|
|
88
136
|
<View
|
|
89
137
|
style={{
|
|
@@ -96,13 +144,21 @@ function CircleFallback({ size, fallbackColor, icon }: { size: number; fallbackC
|
|
|
96
144
|
overflow: 'hidden',
|
|
97
145
|
}}
|
|
98
146
|
>
|
|
99
|
-
{icon ?? (
|
|
147
|
+
{icon ?? (hasName ? (
|
|
148
|
+
<Text
|
|
149
|
+
allowFontScaling={false}
|
|
150
|
+
numberOfLines={1}
|
|
151
|
+
style={initialStyle}
|
|
152
|
+
>
|
|
153
|
+
{getInitial(name)}
|
|
154
|
+
</Text>
|
|
155
|
+
) : (
|
|
100
156
|
<Image
|
|
101
157
|
source={DEFAULT_AVATAR_IMAGE}
|
|
102
158
|
resizeMode="cover"
|
|
103
159
|
style={{ width: size, height: size, borderRadius: radius }}
|
|
104
160
|
/>
|
|
105
|
-
)}
|
|
161
|
+
))}
|
|
106
162
|
</View>
|
|
107
163
|
);
|
|
108
164
|
}
|
|
@@ -119,6 +175,7 @@ const AvatarComponent: React.FC<AvatarProps> = ({
|
|
|
119
175
|
imageStyle,
|
|
120
176
|
placeholderColor,
|
|
121
177
|
placeholderIcon,
|
|
178
|
+
name,
|
|
122
179
|
onPress,
|
|
123
180
|
testID,
|
|
124
181
|
}) => {
|
|
@@ -126,8 +183,14 @@ const AvatarComponent: React.FC<AvatarProps> = ({
|
|
|
126
183
|
const theme = useTheme();
|
|
127
184
|
const placeholderConfig = useAvatarPlaceholder();
|
|
128
185
|
const radius = size / 2;
|
|
129
|
-
const
|
|
130
|
-
|
|
186
|
+
const hasName = typeof name === 'string' && name.trim().length > 0;
|
|
187
|
+
// Priority: explicit placeholderColor > deterministic color from name > theme default.
|
|
188
|
+
const fallbackColor =
|
|
189
|
+
placeholderColor || (hasName ? getNameColor(name) : theme.colors.backgroundTertiary);
|
|
190
|
+
// When a name is provided, we render an initial instead of invoking the
|
|
191
|
+
// default placeholder-context icon. Explicit placeholderIcon still wins.
|
|
192
|
+
const resolvedPlaceholderIcon =
|
|
193
|
+
placeholderIcon ?? (hasName ? undefined : placeholderConfig?.icon?.(size * 0.6));
|
|
131
194
|
|
|
132
195
|
// Reset error state when source changes (e.g., list item recycling
|
|
133
196
|
// or async URL resolution replacing an initial file ID).
|
|
@@ -179,6 +242,7 @@ const AvatarComponent: React.FC<AvatarProps> = ({
|
|
|
179
242
|
size={size}
|
|
180
243
|
fallbackColor={fallbackColor}
|
|
181
244
|
placeholderIcon={resolvedPlaceholderIcon}
|
|
245
|
+
name={name}
|
|
182
246
|
onError={() => setErrored(true)}
|
|
183
247
|
/>
|
|
184
248
|
) : (
|
|
@@ -191,7 +255,12 @@ const AvatarComponent: React.FC<AvatarProps> = ({
|
|
|
191
255
|
style={[StyleSheet.absoluteFillObject, { borderRadius: radius }, imageStyle]}
|
|
192
256
|
/>
|
|
193
257
|
) : (
|
|
194
|
-
<CircleFallback
|
|
258
|
+
<CircleFallback
|
|
259
|
+
size={size}
|
|
260
|
+
fallbackColor={fallbackColor}
|
|
261
|
+
icon={resolvedPlaceholderIcon}
|
|
262
|
+
name={name}
|
|
263
|
+
/>
|
|
195
264
|
)}
|
|
196
265
|
</View>
|
|
197
266
|
)}
|
package/src/avatar/types.ts
CHANGED
|
@@ -30,6 +30,13 @@ export interface AvatarProps {
|
|
|
30
30
|
placeholderColor?: string;
|
|
31
31
|
/** Custom icon rendered inside the placeholder circle when no image is available */
|
|
32
32
|
placeholderIcon?: ReactNode;
|
|
33
|
+
/**
|
|
34
|
+
* Contact/user name used to derive a deterministic initial and background color.
|
|
35
|
+
* When no image resolves (missing `source`/`uri` or image error), the Avatar renders
|
|
36
|
+
* a colored circle with the first letter of the name in white.
|
|
37
|
+
* Consumers can still override via `placeholderColor` / `placeholderIcon`.
|
|
38
|
+
*/
|
|
39
|
+
name?: string;
|
|
33
40
|
/** Press handler — wraps avatar in TouchableOpacity when provided */
|
|
34
41
|
onPress?: () => void;
|
|
35
42
|
testID?: string;
|
package/src/dialog/Dialog.tsx
CHANGED
|
@@ -72,6 +72,8 @@ export function Outer({
|
|
|
72
72
|
[],
|
|
73
73
|
);
|
|
74
74
|
|
|
75
|
+
const renderHandle = useCallback(() => null, []);
|
|
76
|
+
|
|
75
77
|
return (
|
|
76
78
|
<BottomSheetModal
|
|
77
79
|
ref={ref}
|
|
@@ -84,12 +86,7 @@ export function Outer({
|
|
|
84
86
|
borderTopLeftRadius: 20,
|
|
85
87
|
borderTopRightRadius: 20,
|
|
86
88
|
}}
|
|
87
|
-
|
|
88
|
-
backgroundColor: theme.colors.text,
|
|
89
|
-
width: 35,
|
|
90
|
-
height: 5,
|
|
91
|
-
opacity: 0.5,
|
|
92
|
-
}}
|
|
89
|
+
handleComponent={renderHandle}
|
|
93
90
|
backdropComponent={renderBackdrop}
|
|
94
91
|
onDismiss={handleDismiss}
|
|
95
92
|
style={{ maxWidth: 500, margin: 'auto' }}
|