@oxyhq/bloom 0.1.34 → 0.1.36

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.
@@ -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.Image, {
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 fallbackColor = placeholderColor || theme.colors.backgroundTertiary;
138
- const resolvedPlaceholderIcon = placeholderIcon ?? placeholderConfig?.icon?.(size * 0.6);
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":[]}
@@ -10,8 +10,17 @@ var _reactNative = require("react-native");
10
10
  * On Android (RN 0.83+), Appearance.setColorScheme has a Kotlin non-null
11
11
  * annotation on `style`. Passing null for 'system' crashes.
12
12
  * Workaround: resolve the system preference and pass 'light'/'dark' instead.
13
+ *
14
+ * On react-native-web, Appearance.setColorScheme is not implemented at all
15
+ * (it's `undefined`), which crashes with "setColorScheme is not a function".
16
+ * Appearance.getColorScheme() still works on web, so reading the system
17
+ * preference is fine — it's only the setter that's missing. The browser /
18
+ * electron controls the color scheme anyway, so we just bail out on web.
13
19
  */
14
20
  function setColorSchemeSafe(mode) {
21
+ if (_reactNative.Platform.OS === 'web') {
22
+ return;
23
+ }
15
24
  const effectiveMode = mode === 'adaptive' ? 'system' : mode;
16
25
  if (effectiveMode === 'system') {
17
26
  const resolved = _reactNative.Appearance.getColorScheme() ?? 'light';
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","setColorSchemeSafe","mode","effectiveMode","resolved","Appearance","getColorScheme","setColorScheme"],"sourceRoot":"../../../src","sources":["theme/set-color-scheme-safe.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,IAAe,EAAE;EAClD,MAAMC,aAAa,GAAGD,IAAI,KAAK,UAAU,GAAG,QAAQ,GAAGA,IAAI;EAC3D,IAAIC,aAAa,KAAK,QAAQ,EAAE;IAC9B,MAAMC,QAAQ,GAAGC,uBAAU,CAACC,cAAc,CAAC,CAAC,IAAI,OAAO;IACvDD,uBAAU,CAACE,cAAc,CAACH,QAAQ,CAAC;EACrC,CAAC,MAAM;IACLC,uBAAU,CAACE,cAAc,CAACJ,aAAa,CAAC;EAC1C;AACF","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","setColorSchemeSafe","mode","Platform","OS","effectiveMode","resolved","Appearance","getColorScheme","setColorScheme"],"sourceRoot":"../../../src","sources":["theme/set-color-scheme-safe.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,IAAe,EAAE;EAClD,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB;EACF;EAEA,MAAMC,aAAa,GAAGH,IAAI,KAAK,UAAU,GAAG,QAAQ,GAAGA,IAAI;EAC3D,IAAIG,aAAa,KAAK,QAAQ,EAAE;IAC9B,MAAMC,QAAQ,GAAGC,uBAAU,CAACC,cAAc,CAAC,CAAC,IAAI,OAAO;IACvDD,uBAAU,CAACE,cAAc,CAACH,QAAQ,CAAC;EACrC,CAAC,MAAM;IACLC,uBAAU,CAACE,cAAc,CAACJ,aAAa,CAAC;EAC1C;AACF","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(Image, {
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 fallbackColor = placeholderColor || theme.colors.backgroundTertiary;
132
- const resolvedPlaceholderIcon = placeholderIcon ?? placeholderConfig?.icon?.(size * 0.6);
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","undefined","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":[]}
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":[]}
@@ -1,13 +1,22 @@
1
1
  "use strict";
2
2
 
3
- import { Appearance } from 'react-native';
3
+ import { Appearance, Platform } from 'react-native';
4
4
  /**
5
5
  * Safely set the color scheme via Appearance API.
6
6
  * On Android (RN 0.83+), Appearance.setColorScheme has a Kotlin non-null
7
7
  * annotation on `style`. Passing null for 'system' crashes.
8
8
  * Workaround: resolve the system preference and pass 'light'/'dark' instead.
9
+ *
10
+ * On react-native-web, Appearance.setColorScheme is not implemented at all
11
+ * (it's `undefined`), which crashes with "setColorScheme is not a function".
12
+ * Appearance.getColorScheme() still works on web, so reading the system
13
+ * preference is fine — it's only the setter that's missing. The browser /
14
+ * electron controls the color scheme anyway, so we just bail out on web.
9
15
  */
10
16
  export function setColorSchemeSafe(mode) {
17
+ if (Platform.OS === 'web') {
18
+ return;
19
+ }
11
20
  const effectiveMode = mode === 'adaptive' ? 'system' : mode;
12
21
  if (effectiveMode === 'system') {
13
22
  const resolved = Appearance.getColorScheme() ?? 'light';
@@ -1 +1 @@
1
- {"version":3,"names":["Appearance","setColorSchemeSafe","mode","effectiveMode","resolved","getColorScheme","setColorScheme"],"sourceRoot":"../../../src","sources":["theme/set-color-scheme-safe.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAkB,cAAc;AAInD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,IAAe,EAAE;EAClD,MAAMC,aAAa,GAAGD,IAAI,KAAK,UAAU,GAAG,QAAQ,GAAGA,IAAI;EAC3D,IAAIC,aAAa,KAAK,QAAQ,EAAE;IAC9B,MAAMC,QAAQ,GAAGJ,UAAU,CAACK,cAAc,CAAC,CAAC,IAAI,OAAO;IACvDL,UAAU,CAACM,cAAc,CAACF,QAAQ,CAAC;EACrC,CAAC,MAAM;IACLJ,UAAU,CAACM,cAAc,CAACH,aAAa,CAAC;EAC1C;AACF","ignoreList":[]}
1
+ {"version":3,"names":["Appearance","Platform","setColorSchemeSafe","mode","OS","effectiveMode","resolved","getColorScheme","setColorScheme"],"sourceRoot":"../../../src","sources":["theme/set-color-scheme-safe.ts"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,cAAc;AAGnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,IAAe,EAAE;EAClD,IAAIF,QAAQ,CAACG,EAAE,KAAK,KAAK,EAAE;IACzB;EACF;EAEA,MAAMC,aAAa,GAAGF,IAAI,KAAK,UAAU,GAAG,QAAQ,GAAGA,IAAI;EAC3D,IAAIE,aAAa,KAAK,QAAQ,EAAE;IAC9B,MAAMC,QAAQ,GAAGN,UAAU,CAACO,cAAc,CAAC,CAAC,IAAI,OAAO;IACvDP,UAAU,CAACQ,cAAc,CAACF,QAAQ,CAAC;EACrC,CAAC,MAAM;IACLN,UAAU,CAACQ,cAAc,CAACH,aAAa,CAAC;EAC1C;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkP3C,eAAO,MAAM,MAAM,yCAAwB,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"}
@@ -4,6 +4,12 @@ import type { ThemeMode } from './types';
4
4
  * On Android (RN 0.83+), Appearance.setColorScheme has a Kotlin non-null
5
5
  * annotation on `style`. Passing null for 'system' crashes.
6
6
  * Workaround: resolve the system preference and pass 'light'/'dark' instead.
7
+ *
8
+ * On react-native-web, Appearance.setColorScheme is not implemented at all
9
+ * (it's `undefined`), which crashes with "setColorScheme is not a function".
10
+ * Appearance.getColorScheme() still works on web, so reading the system
11
+ * preference is fine — it's only the setter that's missing. The browser /
12
+ * electron controls the color scheme anyway, so we just bail out on web.
7
13
  */
8
14
  export declare function setColorSchemeSafe(mode: ThemeMode): void;
9
15
  //# sourceMappingURL=set-color-scheme-safe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-color-scheme-safe.d.ts","sourceRoot":"","sources":["../../../../src/theme/set-color-scheme-safe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,QAQjD"}
1
+ {"version":3,"file":"set-color-scheme-safe.d.ts","sourceRoot":"","sources":["../../../../src/theme/set-color-scheme-safe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,QAYjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkP3C,eAAO,MAAM,MAAM,yCAAwB,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"}
@@ -4,6 +4,12 @@ import type { ThemeMode } from './types';
4
4
  * On Android (RN 0.83+), Appearance.setColorScheme has a Kotlin non-null
5
5
  * annotation on `style`. Passing null for 'system' crashes.
6
6
  * Workaround: resolve the system preference and pass 'light'/'dark' instead.
7
+ *
8
+ * On react-native-web, Appearance.setColorScheme is not implemented at all
9
+ * (it's `undefined`), which crashes with "setColorScheme is not a function".
10
+ * Appearance.getColorScheme() still works on web, so reading the system
11
+ * preference is fine — it's only the setter that's missing. The browser /
12
+ * electron controls the color scheme anyway, so we just bail out on web.
7
13
  */
8
14
  export declare function setColorSchemeSafe(mode: ThemeMode): void;
9
15
  //# sourceMappingURL=set-color-scheme-safe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-color-scheme-safe.d.ts","sourceRoot":"","sources":["../../../../src/theme/set-color-scheme-safe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,QAQjD"}
1
+ {"version":3,"file":"set-color-scheme-safe.d.ts","sourceRoot":"","sources":["../../../../src/theme/set-color-scheme-safe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,QAYjD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.1.34",
3
+ "version": "0.1.36",
4
4
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -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({ size, fallbackColor, icon }: { size: number; fallbackColor: string; icon?: React.ReactNode }) {
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 fallbackColor = placeholderColor || theme.colors.backgroundTertiary;
130
- const resolvedPlaceholderIcon = placeholderIcon ?? placeholderConfig?.icon?.(size * 0.6);
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 size={size} fallbackColor={fallbackColor} icon={resolvedPlaceholderIcon} />
258
+ <CircleFallback
259
+ size={size}
260
+ fallbackColor={fallbackColor}
261
+ icon={resolvedPlaceholderIcon}
262
+ name={name}
263
+ />
195
264
  )}
196
265
  </View>
197
266
  )}
@@ -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;
@@ -1,5 +1,4 @@
1
1
  import { Appearance, Platform } from 'react-native';
2
- import type { ColorSchemeName } from 'react-native';
3
2
  import type { ThemeMode } from './types';
4
3
 
5
4
  /**
@@ -7,8 +6,18 @@ import type { ThemeMode } from './types';
7
6
  * On Android (RN 0.83+), Appearance.setColorScheme has a Kotlin non-null
8
7
  * annotation on `style`. Passing null for 'system' crashes.
9
8
  * Workaround: resolve the system preference and pass 'light'/'dark' instead.
9
+ *
10
+ * On react-native-web, Appearance.setColorScheme is not implemented at all
11
+ * (it's `undefined`), which crashes with "setColorScheme is not a function".
12
+ * Appearance.getColorScheme() still works on web, so reading the system
13
+ * preference is fine — it's only the setter that's missing. The browser /
14
+ * electron controls the color scheme anyway, so we just bail out on web.
10
15
  */
11
16
  export function setColorSchemeSafe(mode: ThemeMode) {
17
+ if (Platform.OS === 'web') {
18
+ return;
19
+ }
20
+
12
21
  const effectiveMode = mode === 'adaptive' ? 'system' : mode;
13
22
  if (effectiveMode === 'system') {
14
23
  const resolved = Appearance.getColorScheme() ?? 'light';