@oxyhq/bloom 0.25.2 → 0.26.1

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.
@@ -11,6 +11,7 @@ var _context = require("../image-resolver/context.js");
11
11
  var _zIndex = require("../styles/z-index.js");
12
12
  var _lazyRequire = require("../utils/lazy-require.js");
13
13
  var _placeholderContext = require("./placeholder-context.js");
14
+ var _LiveBadge = require("./LiveBadge.js");
14
15
  var _defaultAvatar = _interopRequireDefault(require("./default-avatar.js"));
15
16
  var _jsxRuntime = require("react/jsx-runtime");
16
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -47,6 +48,14 @@ let clipIdCounter = 0;
47
48
  // Returns null if react-native-svg is not installed.
48
49
 
49
50
  const getSvgModule = (0, _lazyRequire.lazyRequire)('react-native-svg');
51
+
52
+ /**
53
+ * Live-ring drawing config passed down to shape renderers.
54
+ * - `color`: resolved ring color (theme `negative` or `liveColor` override).
55
+ * - `strokeWidth`: stroke width in the squircle's 0–1 path coordinate space.
56
+ * - `borderWidth`: ring border width in pixels for the circle fallback.
57
+ */
58
+
50
59
  function SquircleImage({
51
60
  uri,
52
61
  fallbackSource,
@@ -54,16 +63,24 @@ function SquircleImage({
54
63
  fallbackColor,
55
64
  placeholderIcon,
56
65
  name,
57
- onError
66
+ onError,
67
+ liveRing
58
68
  }) {
59
69
  const svg = getSvgModule();
60
70
  if (!svg) {
61
- // Fallback to circle if react-native-svg is not installed
62
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
63
- size: size,
64
- fallbackColor: fallbackColor,
65
- icon: placeholderIcon,
66
- name: name
71
+ // Fallback to circle if react-native-svg is not installed. The circle
72
+ // fallback also gets a circle live ring (matching its rendered shape).
73
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
74
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
75
+ size: size,
76
+ fallbackColor: fallbackColor,
77
+ icon: placeholderIcon,
78
+ name: name
79
+ }), liveRing && /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleLiveRing, {
80
+ radius: size / 2,
81
+ color: liveRing.color,
82
+ borderWidth: liveRing.borderWidth
83
+ })]
67
84
  });
68
85
  }
69
86
  const {
@@ -78,11 +95,17 @@ function SquircleImage({
78
95
  uri
79
96
  } : fallbackSource;
80
97
  if (!href) {
81
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
82
- size: size,
83
- fallbackColor: fallbackColor,
84
- icon: placeholderIcon,
85
- name: name
98
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
99
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
100
+ size: size,
101
+ fallbackColor: fallbackColor,
102
+ icon: placeholderIcon,
103
+ name: name
104
+ }), liveRing && /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleLiveRing, {
105
+ radius: size / 2,
106
+ color: liveRing.color,
107
+ borderWidth: liveRing.borderWidth
108
+ })]
86
109
  });
87
110
  }
88
111
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
@@ -109,6 +132,11 @@ function SquircleImage({
109
132
  height: 1,
110
133
  preserveAspectRatio: "xMidYMid slice",
111
134
  clipPath: `url(#${clipId})`
135
+ }), liveRing && /*#__PURE__*/(0, _jsxRuntime.jsx)(Path, {
136
+ d: SQUIRCLE_PATH,
137
+ fill: "none",
138
+ stroke: liveRing.color,
139
+ strokeWidth: liveRing.strokeWidth
112
140
  })]
113
141
  })]
114
142
  });
@@ -157,6 +185,28 @@ function CircleFallback({
157
185
  }))
158
186
  });
159
187
  }
188
+
189
+ /**
190
+ * Solid live ring for circular avatars — an absolutely-positioned inset-0
191
+ * overlay whose border overlays the avatar edge (drawn on top of the image,
192
+ * never a border on the image itself). Also used as the fallback ring for a
193
+ * squircle avatar when react-native-svg is unavailable.
194
+ */
195
+ function CircleLiveRing({
196
+ radius,
197
+ color,
198
+ borderWidth
199
+ }) {
200
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
201
+ style: [_reactNative.StyleSheet.absoluteFill, {
202
+ borderRadius: radius,
203
+ borderColor: color,
204
+ borderWidth,
205
+ zIndex: _zIndex.Z_INDEX.raised,
206
+ pointerEvents: 'none'
207
+ }]
208
+ });
209
+ }
160
210
  const AvatarComponent = ({
161
211
  source,
162
212
  uri,
@@ -172,6 +222,10 @@ const AvatarComponent = ({
172
222
  placeholderIcon,
173
223
  name,
174
224
  onPress,
225
+ live = false,
226
+ hideLiveBadge = false,
227
+ liveLabel = 'LIVE',
228
+ liveColor,
175
229
  testID
176
230
  }) => {
177
231
  const [errored, setErrored] = (0, _react.useState)(false);
@@ -228,6 +282,21 @@ const AvatarComponent = ({
228
282
  if (resolvedImageSource) return resolvedImageSource;
229
283
  return fallbackSource;
230
284
  }, [effectiveUri, resolvedImageSource, fallbackSource]);
285
+
286
+ // Live indicator (modeled on Bluesky): a solid ring around the avatar plus,
287
+ // unless suppressed, a "LIVE" pill hanging off the bottom-center. Colors come
288
+ // from the theme (`negative` / `negativeForeground`) with an optional
289
+ // `liveColor` override. The badge is only shown for `size > 16`.
290
+ const liveRingColor = liveColor ?? theme.colors.negative;
291
+ const liveBorderWidth = size > 16 ? 2 : 1;
292
+ const liveRing = live ? {
293
+ color: liveRingColor,
294
+ // The squircle path is in 0–1 space; center-stroking it and letting the
295
+ // viewport clip the outer half yields a ~`liveBorderWidth`-px inset ring.
296
+ strokeWidth: liveBorderWidth / size * 2,
297
+ borderWidth: liveBorderWidth
298
+ } : undefined;
299
+ const showLiveBadge = live && size > 16 && !hideLiveBadge;
231
300
  const content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
232
301
  style: [styles.container, {
233
302
  width: size,
@@ -241,7 +310,8 @@ const AvatarComponent = ({
241
310
  fallbackColor: fallbackColor,
242
311
  placeholderIcon: resolvedPlaceholderIcon,
243
312
  name: name,
244
- onError: () => setErrored(true)
313
+ onError: () => setErrored(true),
314
+ liveRing: liveRing
245
315
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
246
316
  style: [styles.imageContainer, {
247
317
  width: size,
@@ -261,12 +331,21 @@ const AvatarComponent = ({
261
331
  icon: resolvedPlaceholderIcon,
262
332
  name: name
263
333
  })
334
+ }), live && shape !== 'squircle' && /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleLiveRing, {
335
+ radius: radius,
336
+ color: liveRingColor,
337
+ borderWidth: liveBorderWidth
264
338
  }), verified && verifiedIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
265
339
  style: [styles.verifiedBadge, {
266
340
  width: size * 0.36,
267
341
  height: size * 0.36
268
342
  }],
269
343
  children: verifiedIcon
344
+ }), showLiveBadge && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LiveBadge.LiveBadge, {
345
+ variant: size > 32 ? 'small' : 'tiny',
346
+ label: liveLabel,
347
+ backgroundColor: liveRingColor,
348
+ textColor: theme.colors.negativeForeground
270
349
  })]
271
350
  });
272
351
  if (onPress) {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_context","_zIndex","_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","variant","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","testID","errored","setErrored","useState","theme","useTheme","placeholderConfig","useAvatarPlaceholder","colors","backgroundTertiary","resolvedPlaceholderIcon","undefined","prevSourceRef","useRef","prevUriRef","prevVariantRef","current","imageResolver","useImageResolver","resolvedUri","startsWith","resolvedImageSource","effectiveUri","imageSource","content","container","imageContainer","StyleSheet","absoluteFill","verifiedBadge","TouchableOpacity","create","position","bottom","right","zIndex","Z_INDEX","raised","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","_zIndex","_lazyRequire","_placeholderContext","_LiveBadge","_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","liveRing","svg","jsxs","Fragment","children","jsx","CircleFallback","icon","CircleLiveRing","radius","color","borderWidth","Svg","Defs","ClipPath","Path","Image","SvgImage","clipId","useMemo","href","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","fill","stroke","strokeWidth","hasName","initialStyle","fontSize","round","fontWeight","lineHeight","textAlign","includeFontPadding","View","borderRadius","backgroundColor","justifyContent","alignItems","overflow","Text","allowFontScaling","numberOfLines","DEFAULT_AVATAR_IMAGE","resizeMode","StyleSheet","absoluteFill","borderColor","zIndex","Z_INDEX","raised","pointerEvents","AvatarComponent","variant","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","live","hideLiveBadge","liveLabel","liveColor","testID","errored","setErrored","useState","theme","useTheme","placeholderConfig","useAvatarPlaceholder","colors","backgroundTertiary","resolvedPlaceholderIcon","undefined","prevSourceRef","useRef","prevUriRef","prevVariantRef","current","imageResolver","useImageResolver","resolvedUri","startsWith","resolvedImageSource","effectiveUri","imageSource","liveRingColor","negative","liveBorderWidth","showLiveBadge","content","container","imageContainer","verifiedBadge","LiveBadge","label","textColor","negativeForeground","TouchableOpacity","create","position","bottom","right","opacity","Avatar","exports","memo","displayName"],"sourceRoot":"../../../src","sources":["avatar/Avatar.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAGA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AACA,IAAAM,mBAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AA+BA,IAAAQ,cAAA,GAAAC,sBAAA,CAAAT,OAAA;AAAoD,IAAAU,WAAA,GAAAV,OAAA;AAAA,SAAAS,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAZ,wBAAAY,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAhB,uBAAA,YAAAA,CAAAY,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AA5BpD;AACA;AACA,MAAMgB,kBAAkB,GAAG,CACzB,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EACrD,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAC7C;AAEV,SAASC,UAAUA,CAACC,IAAY,EAAU;EACxC,MAAMC,OAAO,GAAGD,IAAI,CAACE,IAAI,CAAC,CAAC;EAC3B,IAAI,CAACD,OAAO,EAAE,OAAO,GAAG;EACxB,MAAME,cAAc,GAAG,CAAC,GAAGF,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;EAC7C,OAAOE,cAAc,CAACC,WAAW,CAAC,CAAC;AACrC;AAEA,SAASC,YAAYA,CAACL,IAAY,EAAU;EAC1C,IAAIM,IAAI,GAAG,CAAC;EACZ,KAAK,IAAInB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGa,IAAI,CAACO,MAAM,EAAEpB,CAAC,EAAE,EAAE;IACpCmB,IAAI,GAAIA,IAAI,GAAG,EAAE,GAAGN,IAAI,CAACQ,UAAU,CAACrB,CAAC,CAAC,GAAI,CAAC;EAC7C;EACA,MAAMsB,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACL,IAAI,CAAC,GAAGR,kBAAkB,CAACS,MAAM;EACxD;EACA,OAAOT,kBAAkB,CAACW,KAAK,CAAC,IAAIX,kBAAkB,CAAC,CAAC,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;;AAGA;AACA,MAAMc,aAAa,GACjB,2PAA2P,GAC3P,gOAAgO,GAChO,gOAAgO,GAChO,iOAAiO;AAEnO,IAAIC,aAAa,GAAG,CAAC;;AAErB;AACA;;AAEA,MAAMC,YAAY,GAAG,IAAAC,wBAAW,EAAgB,kBAAkB,CAAC;;AAEnE;AACA;AACA;AACA;AACA;AACA;;AAOA,SAASC,aAAaA,CAAC;EACrBC,GAAG;EACHC,cAAc;EACdC,IAAI;EACJC,aAAa;EACbC,eAAe;EACfrB,IAAI;EACJsB,OAAO;EACPC;AAUF,CAAC,EAAE;EACD,MAAMC,GAAG,GAAGV,YAAY,CAAC,CAAC;EAC1B,IAAI,CAACU,GAAG,EAAE;IACR;IACA;IACA,oBACE,IAAA9C,WAAA,CAAA+C,IAAA,EAAA/C,WAAA,CAAAgD,QAAA;MAAAC,QAAA,gBACE,IAAAjD,WAAA,CAAAkD,GAAA,EAACC,cAAc;QAACV,IAAI,EAAEA,IAAK;QAACC,aAAa,EAAEA,aAAc;QAACU,IAAI,EAAET,eAAgB;QAACrB,IAAI,EAAEA;MAAK,CAAE,CAAC,EAC9FuB,QAAQ,iBACP,IAAA7C,WAAA,CAAAkD,GAAA,EAACG,cAAc;QAACC,MAAM,EAAEb,IAAI,GAAG,CAAE;QAACc,KAAK,EAAEV,QAAQ,CAACU,KAAM;QAACC,WAAW,EAAEX,QAAQ,CAACW;MAAY,CAAE,CAC9F;IAAA,CACD,CAAC;EAEP;EAEA,MAAM;IAAErD,OAAO,EAAEsD,GAAG;IAAEC,IAAI;IAAEC,QAAQ;IAAEC,IAAI;IAAEC,KAAK,EAAEC;EAAS,CAAC,GAAGhB,GAAG;EACnE,MAAMiB,MAAM,GAAG,IAAAC,cAAO,EAAC,MAAM,YAAY7B,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;EAE/D,MAAM8B,IAAI,GAAG1B,GAAG,GAAG;IAAEA;EAAI,CAAC,GAAGC,cAAc;EAC3C,IAAI,CAACyB,IAAI,EAAE;IACT,oBACE,IAAAjE,WAAA,CAAA+C,IAAA,EAAA/C,WAAA,CAAAgD,QAAA;MAAAC,QAAA,gBACE,IAAAjD,WAAA,CAAAkD,GAAA,EAACC,cAAc;QAACV,IAAI,EAAEA,IAAK;QAACC,aAAa,EAAEA,aAAc;QAACU,IAAI,EAAET,eAAgB;QAACrB,IAAI,EAAEA;MAAK,CAAE,CAAC,EAC9FuB,QAAQ,iBACP,IAAA7C,WAAA,CAAAkD,GAAA,EAACG,cAAc;QAACC,MAAM,EAAEb,IAAI,GAAG,CAAE;QAACc,KAAK,EAAEV,QAAQ,CAACU,KAAM;QAACC,WAAW,EAAEX,QAAQ,CAACW;MAAY,CAAE,CAC9F;IAAA,CACD,CAAC;EAEP;EAEA,oBACE,IAAAxD,WAAA,CAAA+C,IAAA,EAAA/C,WAAA,CAAAgD,QAAA;IAAAC,QAAA,GAEGV,GAAG,iBACF,IAAAvC,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAsE,KAAK;MACJK,MAAM,EAAE;QAAE3B;MAAI,CAAE;MAChB4B,KAAK,EAAEC,MAAM,CAACC,aAAc;MAC5BzB,OAAO,EAAEA;IAAQ,CAClB,CACF,eACD,IAAA5C,WAAA,CAAA+C,IAAA,EAACU,GAAG;MAACa,KAAK,EAAE7B,IAAK;MAAC8B,MAAM,EAAE9B,IAAK;MAAC+B,OAAO,EAAC,SAAS;MAAAvB,QAAA,gBAC/C,IAAAjD,WAAA,CAAAkD,GAAA,EAACQ,IAAI;QAAAT,QAAA,eACH,IAAAjD,WAAA,CAAAkD,GAAA,EAACS,QAAQ;UAACc,EAAE,EAAEV,MAAO;UAAAd,QAAA,eACnB,IAAAjD,WAAA,CAAAkD,GAAA,EAACU,IAAI;YAACc,CAAC,EAAExC;UAAc,CAAE;QAAC,CAClB;MAAC,CACP,CAAC,eACP,IAAAlC,WAAA,CAAAkD,GAAA,EAACY,QAAQ;QACPG,IAAI,EAAEA,IAAK;QACXK,KAAK,EAAE,CAAE;QACTC,MAAM,EAAE,CAAE;QACVI,mBAAmB,EAAC,gBAAgB;QACpCC,QAAQ,EAAE,QAAQb,MAAM;MAAI,CAC7B,CAAC,EAKDlB,QAAQ,iBACP,IAAA7C,WAAA,CAAAkD,GAAA,EAACU,IAAI;QACHc,CAAC,EAAExC,aAAc;QACjB2C,IAAI,EAAC,MAAM;QACXC,MAAM,EAAEjC,QAAQ,CAACU,KAAM;QACvBwB,WAAW,EAAElC,QAAQ,CAACkC;MAAY,CACnC,CACF;IAAA,CACE,CAAC;EAAA,CACN,CAAC;AAEP;AAEA,SAAS5B,cAAcA,CAAC;EACtBV,IAAI;EACJC,aAAa;EACbU,IAAI;EACJ9B;AAMF,CAAC,EAAE;EACD,MAAMgC,MAAM,GAAGb,IAAI,GAAG,CAAC;EACvB;EACA;EACA,MAAMuC,OAAO,GAAG,OAAO1D,IAAI,KAAK,QAAQ,IAAIA,IAAI,CAACE,IAAI,CAAC,CAAC,CAACK,MAAM,GAAG,CAAC;EAClE,MAAMoD,YAAuB,GAAG;IAC9B1B,KAAK,EAAE,SAAS;IAChB2B,QAAQ,EAAElD,IAAI,CAACmD,KAAK,CAAC1C,IAAI,GAAG,IAAI,CAAC;IACjC2C,UAAU,EAAE,KAAK;IACjBC,UAAU,EAAErD,IAAI,CAACmD,KAAK,CAAC1C,IAAI,GAAG,IAAI,CAAC;IACnC6C,SAAS,EAAE,QAAQ;IACnBC,kBAAkB,EAAE;EACtB,CAAC;EACD,oBACE,IAAAvF,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAiG,IAAI;IACHrB,KAAK,EAAE;MACLG,KAAK,EAAE7B,IAAI;MACX8B,MAAM,EAAE9B,IAAI;MACZgD,YAAY,EAAEnC,MAAM;MACpBoC,eAAe,EAAEhD,aAAa;MAC9BiD,cAAc,EAAE,QAAQ;MACxBC,UAAU,EAAE,QAAQ;MACpBC,QAAQ,EAAE;IACZ,CAAE;IAAA5C,QAAA,EAEDG,IAAI,KAAK4B,OAAO,gBACf,IAAAhF,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAuG,IAAI;MACHC,gBAAgB,EAAE,KAAM;MACxBC,aAAa,EAAE,CAAE;MACjB7B,KAAK,EAAEc,YAAa;MAAAhC,QAAA,EAEnB5B,UAAU,CAACC,IAAI;IAAC,CACb,CAAC,gBAEP,IAAAtB,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAsE,KAAK;MACJK,MAAM,EAAE+B,sBAAqB;MAC7BC,UAAU,EAAC,OAAO;MAClB/B,KAAK,EAAE;QAAEG,KAAK,EAAE7B,IAAI;QAAE8B,MAAM,EAAE9B,IAAI;QAAEgD,YAAY,EAAEnC;MAAO;IAAE,CAC5D,CACF;EAAC,CACE,CAAC;AAEX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,cAAcA,CAAC;EACtBC,MAAM;EACNC,KAAK;EACLC;AAKF,CAAC,EAAE;EACD,oBACE,IAAAxD,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAiG,IAAI;IACHrB,KAAK,EAAE,CACLgC,uBAAU,CAACC,YAAY,EACvB;MACEX,YAAY,EAAEnC,MAAM;MACpB+C,WAAW,EAAE9C,KAAK;MAClBC,WAAW;MACX8C,MAAM,EAAEC,eAAO,CAACC,MAAM;MACtBC,aAAa,EAAE;IACjB,CAAC;EACD,CACH,CAAC;AAEN;AAEA,MAAMC,eAAsC,GAAGA,CAAC;EAC9CxC,MAAM;EACN3B,GAAG;EACHoE,OAAO;EACPnE,cAAc;EACdC,IAAI,GAAG,EAAE;EACTmE,QAAQ,GAAG,KAAK;EAChBC,YAAY;EACZC,KAAK,GAAG,QAAQ;EAChB3C,KAAK;EACL4C,UAAU;EACVC,gBAAgB;EAChBrE,eAAe;EACfrB,IAAI;EACJ2F,OAAO;EACPC,IAAI,GAAG,KAAK;EACZC,aAAa,GAAG,KAAK;EACrBC,SAAS,GAAG,MAAM;EAClBC,SAAS;EACTC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EAC7C,MAAMC,KAAK,GAAG,IAAAC,kBAAQ,EAAC,CAAC;EACxB,MAAMC,iBAAiB,GAAG,IAAAC,wCAAoB,EAAC,CAAC;EAChD,MAAMvE,MAAM,GAAGb,IAAI,GAAG,CAAC;EACvB,MAAMuC,OAAO,GAAG,OAAO1D,IAAI,KAAK,QAAQ,IAAIA,IAAI,CAACE,IAAI,CAAC,CAAC,CAACK,MAAM,GAAG,CAAC;EAClE;EACA,MAAMa,aAAa,GACjBsE,gBAAgB,KAAKhC,OAAO,GAAGrD,YAAY,CAACL,IAAI,CAAC,GAAGoG,KAAK,CAACI,MAAM,CAACC,kBAAkB,CAAC;EACtF;EACA;EACA,MAAMC,uBAAuB,GAC3BrF,eAAe,KAAKqC,OAAO,GAAGiD,SAAS,GAAGL,iBAAiB,EAAExE,IAAI,GAAGX,IAAI,GAAG,GAAG,CAAC,CAAC;;EAElF;EACA;EACA;EACA;EACA,MAAMyF,aAAa,GAAG,IAAAC,aAAM,EAACjE,MAAM,CAAC;EACpC,MAAMkE,UAAU,GAAG,IAAAD,aAAM,EAAC5F,GAAG,CAAC;EAC9B,MAAM8F,cAAc,GAAG,IAAAF,aAAM,EAACxB,OAAO,CAAC;EACtC,IACEuB,aAAa,CAACI,OAAO,KAAKpE,MAAM,IAChCkE,UAAU,CAACE,OAAO,KAAK/F,GAAG,IAC1B8F,cAAc,CAACC,OAAO,KAAK3B,OAAO,EAClC;IACAuB,aAAa,CAACI,OAAO,GAAGpE,MAAM;IAC9BkE,UAAU,CAACE,OAAO,GAAG/F,GAAG;IACxB8F,cAAc,CAACC,OAAO,GAAG3B,OAAO;IAChC,IAAIY,OAAO,EAAE;MACXC,UAAU,CAAC,KAAK,CAAC;IACnB;EACF;EAEA,MAAMe,aAAa,GAAG,IAAAC,yBAAgB,EAAC,CAAC;;EAExC;EACA;EACA;EACA;EACA;EACA,MAAMC,WAAW,GAAG,IAAAzE,cAAO,EAAC,MAAM;IAChC,IAAI,OAAOE,MAAM,KAAK,QAAQ,EAAE;MAC9B,IAAIA,MAAM,CAACwE,UAAU,CAAC,SAAS,CAAC,IAAIxE,MAAM,CAACwE,UAAU,CAAC,UAAU,CAAC,IAAIxE,MAAM,CAACwE,UAAU,CAAC,OAAO,CAAC,EAAE;QAC/F,OAAOxE,MAAM;MACf;MACA,OAAOqE,aAAa,GAAGrE,MAAM,EAAEyC,OAAO,CAAC;IACzC;IACA,OAAOpE,GAAG;EACZ,CAAC,EAAE,CAAC2B,MAAM,EAAE3B,GAAG,EAAEoE,OAAO,EAAE4B,aAAa,CAAC,CAAC;EAEzC,MAAMI,mBAAmB,GAAG,IAAA3E,cAAO,EAAC,MAAM;IACxC,IAAIE,MAAM,IAAI,IAAI,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE,OAAOA,MAAM;IAC/D,OAAO+D,SAAS;EAClB,CAAC,EAAE,CAAC/D,MAAM,CAAC,CAAC;EAEZ,MAAM0E,YAAY,GAAGrB,OAAO,GAAGU,SAAS,GAAGQ,WAAW;EAEtD,MAAMI,WAAW,GAAG,IAAA7E,cAAO,EAAC,MAAM;IAChC,IAAI4E,YAAY,EAAE,OAAO;MAAErG,GAAG,EAAEqG;IAAa,CAAC;IAC9C,IAAID,mBAAmB,EAAE,OAAOA,mBAAmB;IACnD,OAAOnG,cAAc;EACvB,CAAC,EAAE,CAACoG,YAAY,EAAED,mBAAmB,EAAEnG,cAAc,CAAC,CAAC;;EAEvD;EACA;EACA;EACA;EACA,MAAMsG,aAAa,GAAGzB,SAAS,IAAIK,KAAK,CAACI,MAAM,CAACiB,QAAQ;EACxD,MAAMC,eAAe,GAAGvG,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EACzC,MAAMI,QAAoC,GAAGqE,IAAI,GAC7C;IACE3D,KAAK,EAAEuF,aAAa;IACpB;IACA;IACA/D,WAAW,EAAGiE,eAAe,GAAGvG,IAAI,GAAI,CAAC;IACzCe,WAAW,EAAEwF;EACf,CAAC,GACDf,SAAS;EACb,MAAMgB,aAAa,GAAG/B,IAAI,IAAIzE,IAAI,GAAG,EAAE,IAAI,CAAC0E,aAAa;EAEzD,MAAM+B,OAAO,gBACX,IAAAlJ,WAAA,CAAA+C,IAAA,EAACxD,YAAA,CAAAiG,IAAI;IAACrB,KAAK,EAAE,CAACC,MAAM,CAAC+E,SAAS,EAAE;MAAE7E,KAAK,EAAE7B,IAAI;MAAE8B,MAAM,EAAE9B;IAAK,CAAC,EAAE0B,KAAK,CAAE;IAACmD,MAAM,EAAEA,MAAO;IAAArE,QAAA,GACnF6D,KAAK,KAAK,UAAU,gBACnB,IAAA9G,WAAA,CAAAkD,GAAA,EAACZ,aAAa;MACZC,GAAG,EAAEqG,YAAa;MAClBpG,cAAc,EAAEA,cAAe;MAC/BC,IAAI,EAAEA,IAAK;MACXC,aAAa,EAAEA,aAAc;MAC7BC,eAAe,EAAEqF,uBAAwB;MACzC1G,IAAI,EAAEA,IAAK;MACXsB,OAAO,EAAEA,CAAA,KAAM4E,UAAU,CAAC,IAAI,CAAE;MAChC3E,QAAQ,EAAEA;IAAS,CACpB,CAAC,gBAEF,IAAA7C,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAiG,IAAI;MAACrB,KAAK,EAAE,CAACC,MAAM,CAACgF,cAAc,EAAE;QAAE9E,KAAK,EAAE7B,IAAI;QAAE8B,MAAM,EAAE9B,IAAI;QAAEgD,YAAY,EAAEnC;MAAO,CAAC,CAAE;MAAAL,QAAA,EACvF4F,WAAW,gBACV,IAAA7I,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAsE,KAAK;QACJK,MAAM,EAAE2E,WAAY;QACpBjG,OAAO,EAAEA,CAAA,KAAM4E,UAAU,CAAC,IAAI,CAAE;QAChCtB,UAAU,EAAC,OAAO;QAClB/B,KAAK,EAAE,CAACgC,uBAAU,CAACC,YAAY,EAAE;UAAEX,YAAY,EAAEnC;QAAO,CAAC,EAAEyD,UAAU;MAAE,CACxE,CAAC,gBAEF,IAAA/G,WAAA,CAAAkD,GAAA,EAACC,cAAc;QACbV,IAAI,EAAEA,IAAK;QACXC,aAAa,EAAEA,aAAc;QAC7BU,IAAI,EAAE4E,uBAAwB;QAC9B1G,IAAI,EAAEA;MAAK,CACZ;IACF,CACG,CACP,EAIA4F,IAAI,IAAIJ,KAAK,KAAK,UAAU,iBAC3B,IAAA9G,WAAA,CAAAkD,GAAA,EAACG,cAAc;MAACC,MAAM,EAAEA,MAAO;MAACC,KAAK,EAAEuF,aAAc;MAACtF,WAAW,EAAEwF;IAAgB,CAAE,CACtF,EAEApC,QAAQ,IAAIC,YAAY,iBACvB,IAAA7G,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAiG,IAAI;MACHrB,KAAK,EAAE,CACLC,MAAM,CAACiF,aAAa,EACpB;QACE/E,KAAK,EAAE7B,IAAI,GAAG,IAAI;QAClB8B,MAAM,EAAE9B,IAAI,GAAG;MACjB,CAAC,CACD;MAAAQ,QAAA,EAED4D;IAAY,CACT,CACP,EAEAoC,aAAa,iBACZ,IAAAjJ,WAAA,CAAAkD,GAAA,EAACrD,UAAA,CAAAyJ,SAAS;MACR3C,OAAO,EAAElE,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,MAAO;MACtC8G,KAAK,EAAEnC,SAAU;MACjB1B,eAAe,EAAEoD,aAAc;MAC/BU,SAAS,EAAE9B,KAAK,CAACI,MAAM,CAAC2B;IAAmB,CAC5C,CACF;EAAA,CACG,CACP;EAED,IAAIxC,OAAO,EAAE;IACX,oBAAO,IAAAjH,WAAA,CAAAkD,GAAA,EAAC3D,YAAA,CAAAmK,gBAAgB;MAACzC,OAAO,EAAEA,OAAQ;MAAAhE,QAAA,EAAEiG;IAAO,CAAmB,CAAC;EACzE;EAEA,OAAOA,OAAO;AAChB,CAAC;AAED,MAAM9E,MAAM,GAAG+B,uBAAU,CAACwD,MAAM,CAAC;EAC/BR,SAAS,EAAE;IACTS,QAAQ,EAAE,UAAU;IACpB/D,QAAQ,EAAE,SAAS;IACnBF,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDwD,cAAc,EAAE;IACdvD,QAAQ,EAAE,QAAQ;IAClBF,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDyD,aAAa,EAAE;IACbO,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,CAAC,CAAC;IACVC,KAAK,EAAE,CAAC,CAAC;IACTnE,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBU,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDnC,aAAa,EAAE;IACbuF,QAAQ,EAAE,UAAU;IACpBtF,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTwF,OAAO,EAAE;EACX;AACF,CAAC,CAAC;AAEK,MAAMC,MAAM,GAAAC,OAAA,CAAAD,MAAA,gBAAG,IAAAE,WAAI,EAACxD,eAAe,CAAC;AAC3CsD,MAAM,CAACG,WAAW,GAAG,QAAQ","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LiveBadge = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _zIndex = require("../styles/z-index.js");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ 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); }
12
+ /**
13
+ * Small red "LIVE" pill that hangs off the bottom-center of an Avatar. Internal
14
+ * to the avatar family — not exported from the package. Modeled on Bluesky's
15
+ * live indicator: full-width absolute wrapper, center-aligned, `bottom: -5` so
16
+ * the pill protrudes below the avatar (the Avatar container is `overflow:
17
+ * 'visible'`).
18
+ */
19
+ const LiveBadgeComponent = ({
20
+ variant,
21
+ label,
22
+ backgroundColor,
23
+ textColor
24
+ }) => {
25
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
26
+ style: styles.wrapper,
27
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
28
+ style: [styles.pill, {
29
+ backgroundColor
30
+ }],
31
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
32
+ allowFontScaling: false,
33
+ numberOfLines: 1,
34
+ style: [styles.text, {
35
+ color: textColor,
36
+ fontSize: variant === 'small' ? 10 : 7
37
+ }],
38
+ children: label
39
+ })
40
+ })
41
+ });
42
+ };
43
+ const styles = _reactNative.StyleSheet.create({
44
+ wrapper: {
45
+ position: 'absolute',
46
+ bottom: -5,
47
+ left: 0,
48
+ right: 0,
49
+ alignItems: 'center',
50
+ zIndex: _zIndex.Z_INDEX.raised,
51
+ pointerEvents: 'none'
52
+ },
53
+ pill: {
54
+ paddingVertical: 1,
55
+ paddingHorizontal: 3,
56
+ borderRadius: 4
57
+ },
58
+ text: {
59
+ fontWeight: '600',
60
+ textAlign: 'center'
61
+ }
62
+ });
63
+ const LiveBadge = exports.LiveBadge = /*#__PURE__*/(0, _react.memo)(LiveBadgeComponent);
64
+ LiveBadge.displayName = 'LiveBadge';
65
+ //# sourceMappingURL=LiveBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_zIndex","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LiveBadgeComponent","variant","label","backgroundColor","textColor","jsx","View","style","styles","wrapper","children","pill","Text","allowFontScaling","numberOfLines","text","color","fontSize","StyleSheet","create","position","bottom","left","right","alignItems","zIndex","Z_INDEX","raised","pointerEvents","paddingVertical","paddingHorizontal","borderRadius","fontWeight","textAlign","LiveBadge","exports","memo","displayName"],"sourceRoot":"../../../src","sources":["avatar/LiveBadge.tsx"],"mappings":"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","ignoreList":[]}
@@ -7,6 +7,7 @@ import { useImageResolver } from "../image-resolver/context.js";
7
7
  import { Z_INDEX } from "../styles/z-index.js";
8
8
  import { lazyRequire } from "../utils/lazy-require.js";
9
9
  import { useAvatarPlaceholder } from "./placeholder-context.js";
10
+ import { LiveBadge } from "./LiveBadge.js";
10
11
  // Google Contacts-inspired palette used to pick a deterministic background
11
12
  // color for name-based placeholder avatars.
12
13
  const NAME_AVATAR_COLORS = ['#D93025', '#E8710A', '#F9AB00', '#1E8E3E', '#12B5CB', '#1A73E8', '#7627BB', '#C5221F', '#0B8043', '#A142F4'];
@@ -33,7 +34,7 @@ function getNameColor(name) {
33
34
  import DEFAULT_AVATAR_IMAGE from "./default-avatar.js";
34
35
 
35
36
  // Squircle clip path normalized to 0–1 coordinate space (viewBox="0 0 1 1").
36
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
37
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
37
38
  const SQUIRCLE_PATH = 'M0 0.5 L0.00122 0.31674 L0.00489 0.25123 L0.01103 0.20331 L0.01969 0.16478 L0.03097 0.13257 L0.04495 0.10518 L0.0618 0.08177 L0.08177 0.0618 L0.10518 0.04495 L0.13257 0.03097 L0.16478 0.01969 L0.20331 0.01103 L0.25123 0.00489 L0.31674 0.00122 L0.5 0' + ' L0.68895 0.0014 L0.7564 0.00561 L0.80559 0.01267 L0.84499 0.02264 L0.87771 0.03564 L0.9053 0.05181 L0.92862 0.07138 L0.94819 0.0947 L0.96436 0.12228 L0.97736 0.15501 L0.98733 0.19441 L0.99439 0.2436 L0.9986 0.31105 L1 0.5' + ' L0.9986 0.68895 L0.99439 0.7564 L0.98733 0.80559 L0.97736 0.84499 L0.96436 0.87771 L0.94819 0.9053 L0.92862 0.92862 L0.9053 0.94819 L0.87771 0.96436 L0.84499 0.97736 L0.80559 0.98733 L0.7564 0.99439 L0.68895 0.9986 L0.5 1' + ' L0.31105 0.9986 L0.2436 0.99439 L0.19441 0.98733 L0.15501 0.97736 L0.12228 0.96436 L0.0947 0.94819 L0.07138 0.92862 L0.05181 0.9053 L0.03564 0.87771 L0.02264 0.84499 L0.01267 0.80559 L0.00561 0.7564 L0.0014 0.68895 L0 0.5Z';
38
39
  let clipIdCounter = 0;
39
40
 
@@ -41,6 +42,14 @@ let clipIdCounter = 0;
41
42
  // Returns null if react-native-svg is not installed.
42
43
 
43
44
  const getSvgModule = lazyRequire('react-native-svg');
45
+
46
+ /**
47
+ * Live-ring drawing config passed down to shape renderers.
48
+ * - `color`: resolved ring color (theme `negative` or `liveColor` override).
49
+ * - `strokeWidth`: stroke width in the squircle's 0–1 path coordinate space.
50
+ * - `borderWidth`: ring border width in pixels for the circle fallback.
51
+ */
52
+
44
53
  function SquircleImage({
45
54
  uri,
46
55
  fallbackSource,
@@ -48,16 +57,24 @@ function SquircleImage({
48
57
  fallbackColor,
49
58
  placeholderIcon,
50
59
  name,
51
- onError
60
+ onError,
61
+ liveRing
52
62
  }) {
53
63
  const svg = getSvgModule();
54
64
  if (!svg) {
55
- // Fallback to circle if react-native-svg is not installed
56
- return /*#__PURE__*/_jsx(CircleFallback, {
57
- size: size,
58
- fallbackColor: fallbackColor,
59
- icon: placeholderIcon,
60
- name: name
65
+ // Fallback to circle if react-native-svg is not installed. The circle
66
+ // fallback also gets a circle live ring (matching its rendered shape).
67
+ return /*#__PURE__*/_jsxs(_Fragment, {
68
+ children: [/*#__PURE__*/_jsx(CircleFallback, {
69
+ size: size,
70
+ fallbackColor: fallbackColor,
71
+ icon: placeholderIcon,
72
+ name: name
73
+ }), liveRing && /*#__PURE__*/_jsx(CircleLiveRing, {
74
+ radius: size / 2,
75
+ color: liveRing.color,
76
+ borderWidth: liveRing.borderWidth
77
+ })]
61
78
  });
62
79
  }
63
80
  const {
@@ -72,11 +89,17 @@ function SquircleImage({
72
89
  uri
73
90
  } : fallbackSource;
74
91
  if (!href) {
75
- return /*#__PURE__*/_jsx(CircleFallback, {
76
- size: size,
77
- fallbackColor: fallbackColor,
78
- icon: placeholderIcon,
79
- name: name
92
+ return /*#__PURE__*/_jsxs(_Fragment, {
93
+ children: [/*#__PURE__*/_jsx(CircleFallback, {
94
+ size: size,
95
+ fallbackColor: fallbackColor,
96
+ icon: placeholderIcon,
97
+ name: name
98
+ }), liveRing && /*#__PURE__*/_jsx(CircleLiveRing, {
99
+ radius: size / 2,
100
+ color: liveRing.color,
101
+ borderWidth: liveRing.borderWidth
102
+ })]
80
103
  });
81
104
  }
82
105
  return /*#__PURE__*/_jsxs(_Fragment, {
@@ -103,6 +126,11 @@ function SquircleImage({
103
126
  height: 1,
104
127
  preserveAspectRatio: "xMidYMid slice",
105
128
  clipPath: `url(#${clipId})`
129
+ }), liveRing && /*#__PURE__*/_jsx(Path, {
130
+ d: SQUIRCLE_PATH,
131
+ fill: "none",
132
+ stroke: liveRing.color,
133
+ strokeWidth: liveRing.strokeWidth
106
134
  })]
107
135
  })]
108
136
  });
@@ -151,6 +179,28 @@ function CircleFallback({
151
179
  }))
152
180
  });
153
181
  }
182
+
183
+ /**
184
+ * Solid live ring for circular avatars — an absolutely-positioned inset-0
185
+ * overlay whose border overlays the avatar edge (drawn on top of the image,
186
+ * never a border on the image itself). Also used as the fallback ring for a
187
+ * squircle avatar when react-native-svg is unavailable.
188
+ */
189
+ function CircleLiveRing({
190
+ radius,
191
+ color,
192
+ borderWidth
193
+ }) {
194
+ return /*#__PURE__*/_jsx(View, {
195
+ style: [StyleSheet.absoluteFill, {
196
+ borderRadius: radius,
197
+ borderColor: color,
198
+ borderWidth,
199
+ zIndex: Z_INDEX.raised,
200
+ pointerEvents: 'none'
201
+ }]
202
+ });
203
+ }
154
204
  const AvatarComponent = ({
155
205
  source,
156
206
  uri,
@@ -166,6 +216,10 @@ const AvatarComponent = ({
166
216
  placeholderIcon,
167
217
  name,
168
218
  onPress,
219
+ live = false,
220
+ hideLiveBadge = false,
221
+ liveLabel = 'LIVE',
222
+ liveColor,
169
223
  testID
170
224
  }) => {
171
225
  const [errored, setErrored] = useState(false);
@@ -222,6 +276,21 @@ const AvatarComponent = ({
222
276
  if (resolvedImageSource) return resolvedImageSource;
223
277
  return fallbackSource;
224
278
  }, [effectiveUri, resolvedImageSource, fallbackSource]);
279
+
280
+ // Live indicator (modeled on Bluesky): a solid ring around the avatar plus,
281
+ // unless suppressed, a "LIVE" pill hanging off the bottom-center. Colors come
282
+ // from the theme (`negative` / `negativeForeground`) with an optional
283
+ // `liveColor` override. The badge is only shown for `size > 16`.
284
+ const liveRingColor = liveColor ?? theme.colors.negative;
285
+ const liveBorderWidth = size > 16 ? 2 : 1;
286
+ const liveRing = live ? {
287
+ color: liveRingColor,
288
+ // The squircle path is in 0–1 space; center-stroking it and letting the
289
+ // viewport clip the outer half yields a ~`liveBorderWidth`-px inset ring.
290
+ strokeWidth: liveBorderWidth / size * 2,
291
+ borderWidth: liveBorderWidth
292
+ } : undefined;
293
+ const showLiveBadge = live && size > 16 && !hideLiveBadge;
225
294
  const content = /*#__PURE__*/_jsxs(View, {
226
295
  style: [styles.container, {
227
296
  width: size,
@@ -235,7 +304,8 @@ const AvatarComponent = ({
235
304
  fallbackColor: fallbackColor,
236
305
  placeholderIcon: resolvedPlaceholderIcon,
237
306
  name: name,
238
- onError: () => setErrored(true)
307
+ onError: () => setErrored(true),
308
+ liveRing: liveRing
239
309
  }) : /*#__PURE__*/_jsx(View, {
240
310
  style: [styles.imageContainer, {
241
311
  width: size,
@@ -255,12 +325,21 @@ const AvatarComponent = ({
255
325
  icon: resolvedPlaceholderIcon,
256
326
  name: name
257
327
  })
328
+ }), live && shape !== 'squircle' && /*#__PURE__*/_jsx(CircleLiveRing, {
329
+ radius: radius,
330
+ color: liveRingColor,
331
+ borderWidth: liveBorderWidth
258
332
  }), verified && verifiedIcon && /*#__PURE__*/_jsx(View, {
259
333
  style: [styles.verifiedBadge, {
260
334
  width: size * 0.36,
261
335
  height: size * 0.36
262
336
  }],
263
337
  children: verifiedIcon
338
+ }), showLiveBadge && /*#__PURE__*/_jsx(LiveBadge, {
339
+ variant: size > 32 ? 'small' : 'tiny',
340
+ label: liveLabel,
341
+ backgroundColor: liveRingColor,
342
+ textColor: theme.colors.negativeForeground
264
343
  })]
265
344
  });
266
345
  if (onPress) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","memo","useMemo","useRef","useState","View","Image","StyleSheet","Text","TouchableOpacity","useTheme","useImageResolver","Z_INDEX","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","variant","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","testID","errored","setErrored","theme","placeholderConfig","colors","backgroundTertiary","resolvedPlaceholderIcon","undefined","prevSourceRef","prevUriRef","prevVariantRef","current","imageResolver","resolvedUri","startsWith","resolvedImageSource","effectiveUri","imageSource","content","container","imageContainer","absoluteFill","verifiedBadge","create","position","bottom","right","zIndex","raised","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","Z_INDEX","lazyRequire","useAvatarPlaceholder","LiveBadge","NAME_AVATAR_COLORS","getInitial","name","trimmed","trim","firstCodePoint","toUpperCase","getNameColor","hash","i","length","charCodeAt","index","Math","abs","DEFAULT_AVATAR_IMAGE","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SQUIRCLE_PATH","clipIdCounter","getSvgModule","SquircleImage","uri","fallbackSource","size","fallbackColor","placeholderIcon","onError","liveRing","svg","children","CircleFallback","icon","CircleLiveRing","radius","color","borderWidth","default","Svg","Defs","ClipPath","Path","SvgImage","clipId","href","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","fill","stroke","strokeWidth","hasName","initialStyle","fontSize","round","fontWeight","lineHeight","textAlign","includeFontPadding","borderRadius","backgroundColor","justifyContent","alignItems","overflow","allowFontScaling","numberOfLines","resizeMode","absoluteFill","borderColor","zIndex","raised","pointerEvents","AvatarComponent","variant","verified","verifiedIcon","shape","imageStyle","placeholderColor","onPress","live","hideLiveBadge","liveLabel","liveColor","testID","errored","setErrored","theme","placeholderConfig","colors","backgroundTertiary","resolvedPlaceholderIcon","undefined","prevSourceRef","prevUriRef","prevVariantRef","current","imageResolver","resolvedUri","startsWith","resolvedImageSource","effectiveUri","imageSource","liveRingColor","negative","liveBorderWidth","showLiveBadge","content","container","imageContainer","verifiedBadge","label","textColor","negativeForeground","create","position","bottom","right","opacity","Avatar","displayName"],"sourceRoot":"../../../src","sources":["avatar/Avatar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ import React, { memo } from 'react';
4
+ import { View, Text, StyleSheet } from 'react-native';
5
+ import { Z_INDEX } from "../styles/z-index.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ /**
8
+ * Small red "LIVE" pill that hangs off the bottom-center of an Avatar. Internal
9
+ * to the avatar family — not exported from the package. Modeled on Bluesky's
10
+ * live indicator: full-width absolute wrapper, center-aligned, `bottom: -5` so
11
+ * the pill protrudes below the avatar (the Avatar container is `overflow:
12
+ * 'visible'`).
13
+ */
14
+ const LiveBadgeComponent = ({
15
+ variant,
16
+ label,
17
+ backgroundColor,
18
+ textColor
19
+ }) => {
20
+ return /*#__PURE__*/_jsx(View, {
21
+ style: styles.wrapper,
22
+ children: /*#__PURE__*/_jsx(View, {
23
+ style: [styles.pill, {
24
+ backgroundColor
25
+ }],
26
+ children: /*#__PURE__*/_jsx(Text, {
27
+ allowFontScaling: false,
28
+ numberOfLines: 1,
29
+ style: [styles.text, {
30
+ color: textColor,
31
+ fontSize: variant === 'small' ? 10 : 7
32
+ }],
33
+ children: label
34
+ })
35
+ })
36
+ });
37
+ };
38
+ const styles = StyleSheet.create({
39
+ wrapper: {
40
+ position: 'absolute',
41
+ bottom: -5,
42
+ left: 0,
43
+ right: 0,
44
+ alignItems: 'center',
45
+ zIndex: Z_INDEX.raised,
46
+ pointerEvents: 'none'
47
+ },
48
+ pill: {
49
+ paddingVertical: 1,
50
+ paddingHorizontal: 3,
51
+ borderRadius: 4
52
+ },
53
+ text: {
54
+ fontWeight: '600',
55
+ textAlign: 'center'
56
+ }
57
+ });
58
+ export const LiveBadge = /*#__PURE__*/memo(LiveBadgeComponent);
59
+ LiveBadge.displayName = 'LiveBadge';
60
+ //# sourceMappingURL=LiveBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","memo","View","Text","StyleSheet","Z_INDEX","jsx","_jsx","LiveBadgeComponent","variant","label","backgroundColor","textColor","style","styles","wrapper","children","pill","allowFontScaling","numberOfLines","text","color","fontSize","create","position","bottom","left","right","alignItems","zIndex","raised","pointerEvents","paddingVertical","paddingHorizontal","borderRadius","fontWeight","textAlign","LiveBadge","displayName"],"sourceRoot":"../../../src","sources":["avatar/LiveBadge.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,SAASC,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAErD,SAASC,OAAO,QAAQ,sBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAe5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAA4C,GAAGA,CAAC;EACpDC,OAAO;EACPC,KAAK;EACLC,eAAe;EACfC;AACF,CAAC,KAAK;EACJ,oBACEL,IAAA,CAACL,IAAI;IAACW,KAAK,EAAEC,MAAM,CAACC,OAAQ;IAAAC,QAAA,eAC1BT,IAAA,CAACL,IAAI;MAACW,KAAK,EAAE,CAACC,MAAM,CAACG,IAAI,EAAE;QAAEN;MAAgB,CAAC,CAAE;MAAAK,QAAA,eAC9CT,IAAA,CAACJ,IAAI;QACHe,gBAAgB,EAAE,KAAM;QACxBC,aAAa,EAAE,CAAE;QACjBN,KAAK,EAAE,CACLC,MAAM,CAACM,IAAI,EACX;UAAEC,KAAK,EAAET,SAAS;UAAEU,QAAQ,EAAEb,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG;QAAE,CAAC,CAC5D;QAAAO,QAAA,EAEDN;MAAK,CACF;IAAC,CACH;EAAC,CACH,CAAC;AAEX,CAAC;AAED,MAAMI,MAAM,GAAGV,UAAU,CAACmB,MAAM,CAAC;EAC/BR,OAAO,EAAE;IACPS,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,CAAC,CAAC;IACVC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,UAAU,EAAE,QAAQ;IACpBC,MAAM,EAAExB,OAAO,CAACyB,MAAM;IACtBC,aAAa,EAAE;EACjB,CAAC;EACDd,IAAI,EAAE;IACJe,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,CAAC;IACpBC,YAAY,EAAE;EAChB,CAAC;EACDd,IAAI,EAAE;IACJe,UAAU,EAAE,KAAK;IACjBC,SAAS,EAAE;EACb;AACF,CAAC,CAAC;AAEF,OAAO,MAAMC,SAAS,gBAAGpC,IAAI,CAACO,kBAAkB,CAAC;AACjD6B,SAAS,CAACC,WAAW,GAAG,WAAW","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkU3C,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;AAU/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA+a3C,eAAO,MAAM,MAAM,yCAAwB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export type LiveBadgeVariant = 'tiny' | 'small';
3
+ interface LiveBadgeProps {
4
+ /** Size variant — `'tiny'` for small avatars, `'small'` for larger ones. */
5
+ variant: LiveBadgeVariant;
6
+ /** Text shown inside the pill (already localized by the caller). */
7
+ label: string;
8
+ /** Pill background color (defaults come from the theme `negative` token). */
9
+ backgroundColor: string;
10
+ /** Pill text color (defaults come from the theme `negativeForeground` token). */
11
+ textColor: string;
12
+ }
13
+ export declare const LiveBadge: React.NamedExoticComponent<LiveBadgeProps>;
14
+ export {};
15
+ //# sourceMappingURL=LiveBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveBadge.d.ts","sourceRoot":"","sources":["../../../../src/avatar/LiveBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,UAAU,cAAc;IACtB,4EAA4E;IAC5E,OAAO,EAAE,gBAAgB,CAAC;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;CACnB;AAsDD,eAAO,MAAM,SAAS,4CAA2B,CAAC"}
@@ -45,6 +45,27 @@ export interface AvatarProps {
45
45
  name?: string;
46
46
  /** Press handler — wraps avatar in TouchableOpacity when provided */
47
47
  onPress?: () => void;
48
+ /**
49
+ * When true, marks the user as live-streaming: draws a solid red ring that
50
+ * overlays the avatar edge and, unless `hideLiveBadge` is set, a small red
51
+ * "LIVE" pill hanging off the bottom-center. Static (no animation). The badge
52
+ * is only shown for `size > 16`.
53
+ */
54
+ live?: boolean;
55
+ /** Suppress the "LIVE" pill badge while keeping the live ring (ring only). */
56
+ hideLiveBadge?: boolean;
57
+ /**
58
+ * Text shown inside the live badge. Defaults to `'LIVE'`. Provide a localized
59
+ * string for i18n — keep it extremely short (≈4 characters) as there is very
60
+ * little room.
61
+ */
62
+ liveLabel?: string;
63
+ /**
64
+ * Override color for the live ring and badge background. Defaults to the theme
65
+ * `negative` token. Prefer the theme default; only override for brand-specific
66
+ * live treatments.
67
+ */
68
+ liveColor?: string;
48
69
  testID?: string;
49
70
  }
50
71
  //# sourceMappingURL=types.d.ts.map
@@ -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;AAI1F,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;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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
+ {"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;AAI1F,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;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkU3C,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;AAU/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA+a3C,eAAO,MAAM,MAAM,yCAAwB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export type LiveBadgeVariant = 'tiny' | 'small';
3
+ interface LiveBadgeProps {
4
+ /** Size variant — `'tiny'` for small avatars, `'small'` for larger ones. */
5
+ variant: LiveBadgeVariant;
6
+ /** Text shown inside the pill (already localized by the caller). */
7
+ label: string;
8
+ /** Pill background color (defaults come from the theme `negative` token). */
9
+ backgroundColor: string;
10
+ /** Pill text color (defaults come from the theme `negativeForeground` token). */
11
+ textColor: string;
12
+ }
13
+ export declare const LiveBadge: React.NamedExoticComponent<LiveBadgeProps>;
14
+ export {};
15
+ //# sourceMappingURL=LiveBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveBadge.d.ts","sourceRoot":"","sources":["../../../../src/avatar/LiveBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,UAAU,cAAc;IACtB,4EAA4E;IAC5E,OAAO,EAAE,gBAAgB,CAAC;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;CACnB;AAsDD,eAAO,MAAM,SAAS,4CAA2B,CAAC"}
@@ -45,6 +45,27 @@ export interface AvatarProps {
45
45
  name?: string;
46
46
  /** Press handler — wraps avatar in TouchableOpacity when provided */
47
47
  onPress?: () => void;
48
+ /**
49
+ * When true, marks the user as live-streaming: draws a solid red ring that
50
+ * overlays the avatar edge and, unless `hideLiveBadge` is set, a small red
51
+ * "LIVE" pill hanging off the bottom-center. Static (no animation). The badge
52
+ * is only shown for `size > 16`.
53
+ */
54
+ live?: boolean;
55
+ /** Suppress the "LIVE" pill badge while keeping the live ring (ring only). */
56
+ hideLiveBadge?: boolean;
57
+ /**
58
+ * Text shown inside the live badge. Defaults to `'LIVE'`. Provide a localized
59
+ * string for i18n — keep it extremely short (≈4 characters) as there is very
60
+ * little room.
61
+ */
62
+ liveLabel?: string;
63
+ /**
64
+ * Override color for the live ring and badge background. Defaults to the theme
65
+ * `negative` token. Prefer the theme default; only override for brand-specific
66
+ * live treatments.
67
+ */
68
+ liveColor?: string;
48
69
  testID?: string;
49
70
  }
50
71
  //# sourceMappingURL=types.d.ts.map
@@ -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;AAI1F,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;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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
+ {"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;AAI1F,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;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.25.2",
3
+ "version": "0.26.1",
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",
@@ -3,6 +3,7 @@ import { View } from 'react-native';
3
3
  import type { Meta, StoryObj } from '@storybook/react-vite';
4
4
 
5
5
  import { Avatar } from './Avatar';
6
+ import { Verified_Stroke2_Corner2_Rounded } from '../icons/Verified';
6
7
 
7
8
  const meta: Meta<typeof Avatar> = {
8
9
  title: 'Components/Avatar',
@@ -16,6 +17,8 @@ const meta: Meta<typeof Avatar> = {
16
17
  options: ['circle', 'squircle'],
17
18
  },
18
19
  verified: { control: 'boolean' },
20
+ live: { control: 'boolean' },
21
+ hideLiveBadge: { control: 'boolean' },
19
22
  },
20
23
  };
21
24
 
@@ -67,3 +70,51 @@ export const Composition: Story = {
67
70
  </View>
68
71
  ),
69
72
  };
73
+
74
+ export const LiveCircle: Story = {
75
+ args: { size: 72, uri: SAMPLE_URI, live: true },
76
+ name: 'Live (circle)',
77
+ };
78
+
79
+ export const LiveSquircle: Story = {
80
+ args: { size: 72, uri: SAMPLE_URI, live: true, shape: 'squircle' },
81
+ name: 'Live (squircle)',
82
+ };
83
+
84
+ export const LiveSmall: Story = {
85
+ // size <= 32 → tiny badge variant
86
+ args: { size: 28, uri: SAMPLE_URI, live: true },
87
+ name: 'Live (small · tiny badge)',
88
+ };
89
+
90
+ export const LiveRingOnly: Story = {
91
+ args: { size: 72, uri: SAMPLE_URI, live: true, hideLiveBadge: true },
92
+ name: 'Live + hideLiveBadge (ring only)',
93
+ };
94
+
95
+ export const LiveVerified: Story = {
96
+ args: {
97
+ size: 72,
98
+ uri: SAMPLE_URI,
99
+ live: true,
100
+ verified: true,
101
+ verifiedIcon: (
102
+ <Verified_Stroke2_Corner2_Rounded size="lg" fill="#1D9BF0" />
103
+ ),
104
+ },
105
+ name: 'Live + verified',
106
+ };
107
+
108
+ export const LiveGallery: Story = {
109
+ render: () => (
110
+ <View style={{ flexDirection: 'row', gap: 20, alignItems: 'center' }}>
111
+ <Avatar size={24} uri={SAMPLE_URI} live />
112
+ <Avatar size={32} uri={SAMPLE_URI} live />
113
+ <Avatar size={48} uri={SAMPLE_URI} live />
114
+ <Avatar size={72} uri={SAMPLE_URI} live />
115
+ <Avatar size={72} uri={SAMPLE_URI} live shape="squircle" />
116
+ <Avatar size={72} uri={SAMPLE_URI} live liveLabel="EN VIVO" />
117
+ </View>
118
+ ),
119
+ name: 'Live (gallery)',
120
+ };
@@ -7,6 +7,7 @@ import { useImageResolver } from '../image-resolver/context';
7
7
  import { Z_INDEX } from '../styles/z-index';
8
8
  import { lazyRequire } from '../utils/lazy-require';
9
9
  import { useAvatarPlaceholder } from './placeholder-context';
10
+ import { LiveBadge } from './LiveBadge';
10
11
  import type { AvatarProps } from './types';
11
12
 
12
13
  // Google Contacts-inspired palette used to pick a deterministic background
@@ -53,6 +54,18 @@ let clipIdCounter = 0;
53
54
  type SvgModuleType = typeof import('react-native-svg');
54
55
  const getSvgModule = lazyRequire<SvgModuleType>('react-native-svg');
55
56
 
57
+ /**
58
+ * Live-ring drawing config passed down to shape renderers.
59
+ * - `color`: resolved ring color (theme `negative` or `liveColor` override).
60
+ * - `strokeWidth`: stroke width in the squircle's 0–1 path coordinate space.
61
+ * - `borderWidth`: ring border width in pixels for the circle fallback.
62
+ */
63
+ interface LiveRingConfig {
64
+ color: string;
65
+ strokeWidth: number;
66
+ borderWidth: number;
67
+ }
68
+
56
69
  function SquircleImage({
57
70
  uri,
58
71
  fallbackSource,
@@ -61,6 +74,7 @@ function SquircleImage({
61
74
  placeholderIcon,
62
75
  name,
63
76
  onError,
77
+ liveRing,
64
78
  }: {
65
79
  uri?: string;
66
80
  fallbackSource?: AvatarProps['fallbackSource'];
@@ -69,11 +83,20 @@ function SquircleImage({
69
83
  placeholderIcon?: React.ReactNode;
70
84
  name?: string;
71
85
  onError: () => void;
86
+ liveRing?: LiveRingConfig;
72
87
  }) {
73
88
  const svg = getSvgModule();
74
89
  if (!svg) {
75
- // Fallback to circle if react-native-svg is not installed
76
- return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} name={name} />;
90
+ // Fallback to circle if react-native-svg is not installed. The circle
91
+ // fallback also gets a circle live ring (matching its rendered shape).
92
+ return (
93
+ <>
94
+ <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} name={name} />
95
+ {liveRing && (
96
+ <CircleLiveRing radius={size / 2} color={liveRing.color} borderWidth={liveRing.borderWidth} />
97
+ )}
98
+ </>
99
+ );
77
100
  }
78
101
 
79
102
  const { default: Svg, Defs, ClipPath, Path, Image: SvgImage } = svg;
@@ -81,7 +104,14 @@ function SquircleImage({
81
104
 
82
105
  const href = uri ? { uri } : fallbackSource;
83
106
  if (!href) {
84
- return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} name={name} />;
107
+ return (
108
+ <>
109
+ <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} name={name} />
110
+ {liveRing && (
111
+ <CircleLiveRing radius={size / 2} color={liveRing.color} borderWidth={liveRing.borderWidth} />
112
+ )}
113
+ </>
114
+ );
85
115
  }
86
116
 
87
117
  return (
@@ -107,6 +137,18 @@ function SquircleImage({
107
137
  preserveAspectRatio="xMidYMid slice"
108
138
  clipPath={`url(#${clipId})`}
109
139
  />
140
+ {/* Live ring: the squircle outline stroked in the ring color. The
141
+ path lives in 0–1 space, so the stroke width is expressed in the
142
+ same units; the outer half is clipped by the SVG viewport, leaving
143
+ a ~borderWidth-px inset ring on the squircle edge. */}
144
+ {liveRing && (
145
+ <Path
146
+ d={SQUIRCLE_PATH}
147
+ fill="none"
148
+ stroke={liveRing.color}
149
+ strokeWidth={liveRing.strokeWidth}
150
+ />
151
+ )}
110
152
  </Svg>
111
153
  </>
112
154
  );
@@ -166,6 +208,37 @@ function CircleFallback({
166
208
  );
167
209
  }
168
210
 
211
+ /**
212
+ * Solid live ring for circular avatars — an absolutely-positioned inset-0
213
+ * overlay whose border overlays the avatar edge (drawn on top of the image,
214
+ * never a border on the image itself). Also used as the fallback ring for a
215
+ * squircle avatar when react-native-svg is unavailable.
216
+ */
217
+ function CircleLiveRing({
218
+ radius,
219
+ color,
220
+ borderWidth,
221
+ }: {
222
+ radius: number;
223
+ color: string;
224
+ borderWidth: number;
225
+ }) {
226
+ return (
227
+ <View
228
+ style={[
229
+ StyleSheet.absoluteFill,
230
+ {
231
+ borderRadius: radius,
232
+ borderColor: color,
233
+ borderWidth,
234
+ zIndex: Z_INDEX.raised,
235
+ pointerEvents: 'none',
236
+ },
237
+ ]}
238
+ />
239
+ );
240
+ }
241
+
169
242
  const AvatarComponent: React.FC<AvatarProps> = ({
170
243
  source,
171
244
  uri,
@@ -181,6 +254,10 @@ const AvatarComponent: React.FC<AvatarProps> = ({
181
254
  placeholderIcon,
182
255
  name,
183
256
  onPress,
257
+ live = false,
258
+ hideLiveBadge = false,
259
+ liveLabel = 'LIVE',
260
+ liveColor,
184
261
  testID,
185
262
  }) => {
186
263
  const [errored, setErrored] = useState(false);
@@ -246,6 +323,23 @@ const AvatarComponent: React.FC<AvatarProps> = ({
246
323
  return fallbackSource;
247
324
  }, [effectiveUri, resolvedImageSource, fallbackSource]);
248
325
 
326
+ // Live indicator (modeled on Bluesky): a solid ring around the avatar plus,
327
+ // unless suppressed, a "LIVE" pill hanging off the bottom-center. Colors come
328
+ // from the theme (`negative` / `negativeForeground`) with an optional
329
+ // `liveColor` override. The badge is only shown for `size > 16`.
330
+ const liveRingColor = liveColor ?? theme.colors.negative;
331
+ const liveBorderWidth = size > 16 ? 2 : 1;
332
+ const liveRing: LiveRingConfig | undefined = live
333
+ ? {
334
+ color: liveRingColor,
335
+ // The squircle path is in 0–1 space; center-stroking it and letting the
336
+ // viewport clip the outer half yields a ~`liveBorderWidth`-px inset ring.
337
+ strokeWidth: (liveBorderWidth / size) * 2,
338
+ borderWidth: liveBorderWidth,
339
+ }
340
+ : undefined;
341
+ const showLiveBadge = live && size > 16 && !hideLiveBadge;
342
+
249
343
  const content = (
250
344
  <View style={[styles.container, { width: size, height: size }, style]} testID={testID}>
251
345
  {shape === 'squircle' ? (
@@ -257,6 +351,7 @@ const AvatarComponent: React.FC<AvatarProps> = ({
257
351
  placeholderIcon={resolvedPlaceholderIcon}
258
352
  name={name}
259
353
  onError={() => setErrored(true)}
354
+ liveRing={liveRing}
260
355
  />
261
356
  ) : (
262
357
  <View style={[styles.imageContainer, { width: size, height: size, borderRadius: radius }]}>
@@ -278,6 +373,12 @@ const AvatarComponent: React.FC<AvatarProps> = ({
278
373
  </View>
279
374
  )}
280
375
 
376
+ {/* Circle live ring — overlays the avatar edge. The squircle shape draws
377
+ its own ring inside SquircleImage (SVG path or circle fallback). */}
378
+ {live && shape !== 'squircle' && (
379
+ <CircleLiveRing radius={radius} color={liveRingColor} borderWidth={liveBorderWidth} />
380
+ )}
381
+
281
382
  {verified && verifiedIcon && (
282
383
  <View
283
384
  style={[
@@ -291,6 +392,15 @@ const AvatarComponent: React.FC<AvatarProps> = ({
291
392
  {verifiedIcon}
292
393
  </View>
293
394
  )}
395
+
396
+ {showLiveBadge && (
397
+ <LiveBadge
398
+ variant={size > 32 ? 'small' : 'tiny'}
399
+ label={liveLabel}
400
+ backgroundColor={liveRingColor}
401
+ textColor={theme.colors.negativeForeground}
402
+ />
403
+ )}
294
404
  </View>
295
405
  );
296
406
 
@@ -0,0 +1,72 @@
1
+ import React, { memo } from 'react';
2
+ import { View, Text, StyleSheet } from 'react-native';
3
+
4
+ import { Z_INDEX } from '../styles/z-index';
5
+
6
+ export type LiveBadgeVariant = 'tiny' | 'small';
7
+
8
+ interface LiveBadgeProps {
9
+ /** Size variant — `'tiny'` for small avatars, `'small'` for larger ones. */
10
+ variant: LiveBadgeVariant;
11
+ /** Text shown inside the pill (already localized by the caller). */
12
+ label: string;
13
+ /** Pill background color (defaults come from the theme `negative` token). */
14
+ backgroundColor: string;
15
+ /** Pill text color (defaults come from the theme `negativeForeground` token). */
16
+ textColor: string;
17
+ }
18
+
19
+ /**
20
+ * Small red "LIVE" pill that hangs off the bottom-center of an Avatar. Internal
21
+ * to the avatar family — not exported from the package. Modeled on Bluesky's
22
+ * live indicator: full-width absolute wrapper, center-aligned, `bottom: -5` so
23
+ * the pill protrudes below the avatar (the Avatar container is `overflow:
24
+ * 'visible'`).
25
+ */
26
+ const LiveBadgeComponent: React.FC<LiveBadgeProps> = ({
27
+ variant,
28
+ label,
29
+ backgroundColor,
30
+ textColor,
31
+ }) => {
32
+ return (
33
+ <View style={styles.wrapper}>
34
+ <View style={[styles.pill, { backgroundColor }]}>
35
+ <Text
36
+ allowFontScaling={false}
37
+ numberOfLines={1}
38
+ style={[
39
+ styles.text,
40
+ { color: textColor, fontSize: variant === 'small' ? 10 : 7 },
41
+ ]}
42
+ >
43
+ {label}
44
+ </Text>
45
+ </View>
46
+ </View>
47
+ );
48
+ };
49
+
50
+ const styles = StyleSheet.create({
51
+ wrapper: {
52
+ position: 'absolute',
53
+ bottom: -5,
54
+ left: 0,
55
+ right: 0,
56
+ alignItems: 'center',
57
+ zIndex: Z_INDEX.raised,
58
+ pointerEvents: 'none',
59
+ },
60
+ pill: {
61
+ paddingVertical: 1,
62
+ paddingHorizontal: 3,
63
+ borderRadius: 4,
64
+ },
65
+ text: {
66
+ fontWeight: '600',
67
+ textAlign: 'center',
68
+ },
69
+ });
70
+
71
+ export const LiveBadge = memo(LiveBadgeComponent);
72
+ LiveBadge.displayName = 'LiveBadge';
@@ -49,5 +49,26 @@ export interface AvatarProps {
49
49
  name?: string;
50
50
  /** Press handler — wraps avatar in TouchableOpacity when provided */
51
51
  onPress?: () => void;
52
+ /**
53
+ * When true, marks the user as live-streaming: draws a solid red ring that
54
+ * overlays the avatar edge and, unless `hideLiveBadge` is set, a small red
55
+ * "LIVE" pill hanging off the bottom-center. Static (no animation). The badge
56
+ * is only shown for `size > 16`.
57
+ */
58
+ live?: boolean;
59
+ /** Suppress the "LIVE" pill badge while keeping the live ring (ring only). */
60
+ hideLiveBadge?: boolean;
61
+ /**
62
+ * Text shown inside the live badge. Defaults to `'LIVE'`. Provide a localized
63
+ * string for i18n — keep it extremely short (≈4 characters) as there is very
64
+ * little room.
65
+ */
66
+ liveLabel?: string;
67
+ /**
68
+ * Override color for the live ring and badge background. Defaults to the theme
69
+ * `negative` token. Prefer the theme default; only override for brand-specific
70
+ * live treatments.
71
+ */
72
+ liveColor?: string;
52
73
  testID?: string;
53
74
  }