@oxyhq/bloom 0.1.15 → 0.1.17

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.
Files changed (31) hide show
  1. package/lib/commonjs/avatar/Avatar.js +22 -7
  2. package/lib/commonjs/avatar/Avatar.js.map +1 -1
  3. package/lib/commonjs/avatar/index.js +7 -0
  4. package/lib/commonjs/avatar/index.js.map +1 -1
  5. package/lib/commonjs/avatar/placeholder-context.js +15 -0
  6. package/lib/commonjs/avatar/placeholder-context.js.map +1 -0
  7. package/lib/module/avatar/Avatar.js +22 -7
  8. package/lib/module/avatar/Avatar.js.map +1 -1
  9. package/lib/module/avatar/index.js +1 -0
  10. package/lib/module/avatar/index.js.map +1 -1
  11. package/lib/module/avatar/placeholder-context.js +10 -0
  12. package/lib/module/avatar/placeholder-context.js.map +1 -0
  13. package/lib/typescript/commonjs/avatar/Avatar.d.ts.map +1 -1
  14. package/lib/typescript/commonjs/avatar/index.d.ts +2 -0
  15. package/lib/typescript/commonjs/avatar/index.d.ts.map +1 -1
  16. package/lib/typescript/commonjs/avatar/placeholder-context.d.ts +8 -0
  17. package/lib/typescript/commonjs/avatar/placeholder-context.d.ts.map +1 -0
  18. package/lib/typescript/commonjs/avatar/types.d.ts +4 -0
  19. package/lib/typescript/commonjs/avatar/types.d.ts.map +1 -1
  20. package/lib/typescript/module/avatar/Avatar.d.ts.map +1 -1
  21. package/lib/typescript/module/avatar/index.d.ts +2 -0
  22. package/lib/typescript/module/avatar/index.d.ts.map +1 -1
  23. package/lib/typescript/module/avatar/placeholder-context.d.ts +8 -0
  24. package/lib/typescript/module/avatar/placeholder-context.d.ts.map +1 -0
  25. package/lib/typescript/module/avatar/types.d.ts +4 -0
  26. package/lib/typescript/module/avatar/types.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/src/avatar/Avatar.tsx +19 -6
  29. package/src/avatar/index.ts +2 -0
  30. package/src/avatar/placeholder-context.ts +16 -0
  31. package/src/avatar/types.ts +4 -0
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _useTheme = require("../theme/use-theme.js");
10
10
  var _context = require("../image-resolver/context.js");
11
+ var _placeholderContext = require("./placeholder-context.js");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  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); }
13
14
  // Squircle clip path normalized to 0–1 coordinate space (viewBox="0 0 1 1").
@@ -35,6 +36,7 @@ function SquircleImage({
35
36
  fallbackSource,
36
37
  size,
37
38
  fallbackColor,
39
+ placeholderIcon,
38
40
  onError
39
41
  }) {
40
42
  const svg = getSvgModule();
@@ -42,7 +44,8 @@ function SquircleImage({
42
44
  // Fallback to circle if react-native-svg is not installed
43
45
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
44
46
  size: size,
45
- fallbackColor: fallbackColor
47
+ fallbackColor: fallbackColor,
48
+ icon: placeholderIcon
46
49
  });
47
50
  }
48
51
  const {
@@ -59,7 +62,8 @@ function SquircleImage({
59
62
  if (!href) {
60
63
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
61
64
  size: size,
62
- fallbackColor: fallbackColor
65
+ fallbackColor: fallbackColor,
66
+ icon: placeholderIcon
63
67
  });
64
68
  }
65
69
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
@@ -92,7 +96,8 @@ function SquircleImage({
92
96
  }
93
97
  function CircleFallback({
94
98
  size,
95
- fallbackColor
99
+ fallbackColor,
100
+ icon
96
101
  }) {
97
102
  const radius = size / 2;
98
103
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
@@ -100,8 +105,12 @@ function CircleFallback({
100
105
  width: size,
101
106
  height: size,
102
107
  borderRadius: radius,
103
- backgroundColor: fallbackColor
104
- }
108
+ backgroundColor: fallbackColor,
109
+ justifyContent: 'center',
110
+ alignItems: 'center',
111
+ overflow: 'hidden'
112
+ },
113
+ children: icon ?? null
105
114
  });
106
115
  }
107
116
  const AvatarComponent = ({
@@ -114,13 +123,17 @@ const AvatarComponent = ({
114
123
  shape = 'circle',
115
124
  style,
116
125
  imageStyle,
126
+ placeholderColor,
127
+ placeholderIcon,
117
128
  onPress,
118
129
  testID
119
130
  }) => {
120
131
  const [errored, setErrored] = (0, _react.useState)(false);
121
132
  const theme = (0, _useTheme.useTheme)();
133
+ const placeholderConfig = (0, _placeholderContext.useAvatarPlaceholder)();
122
134
  const radius = size / 2;
123
- const fallbackColor = theme.colors.backgroundTertiary;
135
+ const fallbackColor = placeholderColor || theme.colors.backgroundTertiary;
136
+ const resolvedPlaceholderIcon = placeholderIcon ?? placeholderConfig?.icon?.(size * 0.6);
124
137
 
125
138
  // Reset error state when source changes (e.g., list item recycling
126
139
  // or async URL resolution replacing an initial file ID).
@@ -171,6 +184,7 @@ const AvatarComponent = ({
171
184
  fallbackSource: fallbackSource,
172
185
  size: size,
173
186
  fallbackColor: fallbackColor,
187
+ placeholderIcon: resolvedPlaceholderIcon,
174
188
  onError: () => setErrored(true)
175
189
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
176
190
  style: [styles.imageContainer, {
@@ -187,7 +201,8 @@ const AvatarComponent = ({
187
201
  }, imageStyle]
188
202
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(CircleFallback, {
189
203
  size: size,
190
- fallbackColor: fallbackColor
204
+ fallbackColor: fallbackColor,
205
+ icon: resolvedPlaceholderIcon
191
206
  })
192
207
  }), verified && verifiedIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
193
208
  style: [styles.verifiedBadge, {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SQUIRCLE_PATH","clipIdCounter","svgModule","svgModuleResolved","getSvgModule","SquircleImage","uri","fallbackSource","size","fallbackColor","onError","svg","jsx","CircleFallback","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","AvatarComponent","verified","verifiedIcon","shape","imageStyle","onPress","testID","errored","setErrored","useState","theme","useTheme","colors","backgroundTertiary","prevSourceRef","useRef","prevUriRef","current","imageResolver","useImageResolver","resolvedUri","startsWith","resolvedImageSource","undefined","effectiveUri","imageSource","content","container","imageContainer","resizeMode","StyleSheet","absoluteFillObject","verifiedBadge","TouchableOpacity","create","position","overflow","justifyContent","alignItems","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","_placeholderContext","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SQUIRCLE_PATH","clipIdCounter","svgModule","svgModuleResolved","getSvgModule","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","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","resizeMode","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":[]}
@@ -9,5 +9,12 @@ Object.defineProperty(exports, "Avatar", {
9
9
  return _Avatar.Avatar;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "AvatarPlaceholderProvider", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _placeholderContext.AvatarPlaceholderProvider;
16
+ }
17
+ });
12
18
  var _Avatar = require("./Avatar.js");
19
+ var _placeholderContext = require("./placeholder-context.js");
13
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_Avatar","require"],"sourceRoot":"../../../src","sources":["avatar/index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_Avatar","require","_placeholderContext"],"sourceRoot":"../../../src","sources":["avatar/index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AvatarPlaceholderProvider = void 0;
7
+ exports.useAvatarPlaceholder = useAvatarPlaceholder;
8
+ var _react = require("react");
9
+ const AvatarPlaceholderContext = /*#__PURE__*/(0, _react.createContext)(null);
10
+ AvatarPlaceholderContext.displayName = 'BloomAvatarPlaceholderContext';
11
+ const AvatarPlaceholderProvider = exports.AvatarPlaceholderProvider = AvatarPlaceholderContext.Provider;
12
+ function useAvatarPlaceholder() {
13
+ return (0, _react.useContext)(AvatarPlaceholderContext);
14
+ }
15
+ //# sourceMappingURL=placeholder-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","AvatarPlaceholderContext","createContext","displayName","AvatarPlaceholderProvider","exports","Provider","useAvatarPlaceholder","useContext"],"sourceRoot":"../../../src","sources":["avatar/placeholder-context.ts"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAQA,MAAMC,wBAAwB,gBAAG,IAAAC,oBAAa,EAAiC,IAAI,CAAC;AACpFD,wBAAwB,CAACE,WAAW,GAAG,+BAA+B;AAE/D,MAAMC,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAGH,wBAAwB,CAACK,QAAQ;AAEnE,SAASC,oBAAoBA,CAAA,EAAmC;EACrE,OAAO,IAAAC,iBAAU,EAACP,wBAAwB,CAAC;AAC7C","ignoreList":[]}
@@ -4,6 +4,7 @@ import React, { memo, useMemo, useRef, useState } from 'react';
4
4
  import { View, Image, StyleSheet, TouchableOpacity } from 'react-native';
5
5
  import { useTheme } from "../theme/use-theme.js";
6
6
  import { useImageResolver } from "../image-resolver/context.js";
7
+ import { useAvatarPlaceholder } from "./placeholder-context.js";
7
8
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
8
9
  // Squircle clip path normalized to 0–1 coordinate space (viewBox="0 0 1 1").
9
10
  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';
@@ -30,6 +31,7 @@ function SquircleImage({
30
31
  fallbackSource,
31
32
  size,
32
33
  fallbackColor,
34
+ placeholderIcon,
33
35
  onError
34
36
  }) {
35
37
  const svg = getSvgModule();
@@ -37,7 +39,8 @@ function SquircleImage({
37
39
  // Fallback to circle if react-native-svg is not installed
38
40
  return /*#__PURE__*/_jsx(CircleFallback, {
39
41
  size: size,
40
- fallbackColor: fallbackColor
42
+ fallbackColor: fallbackColor,
43
+ icon: placeholderIcon
41
44
  });
42
45
  }
43
46
  const {
@@ -54,7 +57,8 @@ function SquircleImage({
54
57
  if (!href) {
55
58
  return /*#__PURE__*/_jsx(CircleFallback, {
56
59
  size: size,
57
- fallbackColor: fallbackColor
60
+ fallbackColor: fallbackColor,
61
+ icon: placeholderIcon
58
62
  });
59
63
  }
60
64
  return /*#__PURE__*/_jsxs(_Fragment, {
@@ -87,7 +91,8 @@ function SquircleImage({
87
91
  }
88
92
  function CircleFallback({
89
93
  size,
90
- fallbackColor
94
+ fallbackColor,
95
+ icon
91
96
  }) {
92
97
  const radius = size / 2;
93
98
  return /*#__PURE__*/_jsx(View, {
@@ -95,8 +100,12 @@ function CircleFallback({
95
100
  width: size,
96
101
  height: size,
97
102
  borderRadius: radius,
98
- backgroundColor: fallbackColor
99
- }
103
+ backgroundColor: fallbackColor,
104
+ justifyContent: 'center',
105
+ alignItems: 'center',
106
+ overflow: 'hidden'
107
+ },
108
+ children: icon ?? null
100
109
  });
101
110
  }
102
111
  const AvatarComponent = ({
@@ -109,13 +118,17 @@ const AvatarComponent = ({
109
118
  shape = 'circle',
110
119
  style,
111
120
  imageStyle,
121
+ placeholderColor,
122
+ placeholderIcon,
112
123
  onPress,
113
124
  testID
114
125
  }) => {
115
126
  const [errored, setErrored] = useState(false);
116
127
  const theme = useTheme();
128
+ const placeholderConfig = useAvatarPlaceholder();
117
129
  const radius = size / 2;
118
- const fallbackColor = theme.colors.backgroundTertiary;
130
+ const fallbackColor = placeholderColor || theme.colors.backgroundTertiary;
131
+ const resolvedPlaceholderIcon = placeholderIcon ?? placeholderConfig?.icon?.(size * 0.6);
119
132
 
120
133
  // Reset error state when source changes (e.g., list item recycling
121
134
  // or async URL resolution replacing an initial file ID).
@@ -166,6 +179,7 @@ const AvatarComponent = ({
166
179
  fallbackSource: fallbackSource,
167
180
  size: size,
168
181
  fallbackColor: fallbackColor,
182
+ placeholderIcon: resolvedPlaceholderIcon,
169
183
  onError: () => setErrored(true)
170
184
  }) : /*#__PURE__*/_jsx(View, {
171
185
  style: [styles.imageContainer, {
@@ -182,7 +196,8 @@ const AvatarComponent = ({
182
196
  }, imageStyle]
183
197
  }) : /*#__PURE__*/_jsx(CircleFallback, {
184
198
  size: size,
185
- fallbackColor: fallbackColor
199
+ fallbackColor: fallbackColor,
200
+ icon: resolvedPlaceholderIcon
186
201
  })
187
202
  }), verified && verifiedIcon && /*#__PURE__*/_jsx(View, {
188
203
  style: [styles.verifiedBadge, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","memo","useMemo","useRef","useState","View","Image","StyleSheet","TouchableOpacity","useTheme","useImageResolver","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SQUIRCLE_PATH","clipIdCounter","svgModule","svgModuleResolved","getSvgModule","require","SquircleImage","uri","fallbackSource","size","fallbackColor","onError","svg","CircleFallback","default","Svg","Defs","ClipPath","Path","SvgImage","clipId","href","children","source","style","styles","errorDetector","width","height","viewBox","id","d","preserveAspectRatio","clipPath","radius","borderRadius","backgroundColor","AvatarComponent","verified","verifiedIcon","shape","imageStyle","onPress","testID","errored","setErrored","theme","colors","backgroundTertiary","prevSourceRef","prevUriRef","current","imageResolver","resolvedUri","startsWith","resolvedImageSource","undefined","effectiveUri","imageSource","content","container","imageContainer","resizeMode","absoluteFillObject","verifiedBadge","create","position","overflow","justifyContent","alignItems","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","TouchableOpacity","useTheme","useImageResolver","useAvatarPlaceholder","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SQUIRCLE_PATH","clipIdCounter","svgModule","svgModuleResolved","getSvgModule","require","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","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","resizeMode","absoluteFillObject","verifiedBadge","create","position","bottom","right","zIndex","opacity","Avatar","displayName"],"sourceRoot":"../../../src","sources":["avatar/Avatar.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  export { Avatar } from "./Avatar.js";
4
+ export { AvatarPlaceholderProvider } from "./placeholder-context.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Avatar"],"sourceRoot":"../../../src","sources":["avatar/index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,aAAU","ignoreList":[]}
1
+ {"version":3,"names":["Avatar","AvatarPlaceholderProvider"],"sourceRoot":"../../../src","sources":["avatar/index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,aAAU;AACjC,SAASC,yBAAyB,QAAQ,0BAAuB","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ import { createContext, useContext } from 'react';
4
+ const AvatarPlaceholderContext = /*#__PURE__*/createContext(null);
5
+ AvatarPlaceholderContext.displayName = 'BloomAvatarPlaceholderContext';
6
+ export const AvatarPlaceholderProvider = AvatarPlaceholderContext.Provider;
7
+ export function useAvatarPlaceholder() {
8
+ return useContext(AvatarPlaceholderContext);
9
+ }
10
+ //# sourceMappingURL=placeholder-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useContext","AvatarPlaceholderContext","displayName","AvatarPlaceholderProvider","Provider","useAvatarPlaceholder"],"sourceRoot":"../../../src","sources":["avatar/placeholder-context.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAQjD,MAAMC,wBAAwB,gBAAGF,aAAa,CAAiC,IAAI,CAAC;AACpFE,wBAAwB,CAACC,WAAW,GAAG,+BAA+B;AAEtE,OAAO,MAAMC,yBAAyB,GAAGF,wBAAwB,CAACG,QAAQ;AAE1E,OAAO,SAASC,oBAAoBA,CAAA,EAAmC;EACrE,OAAOL,UAAU,CAACC,wBAAwB,CAAC;AAC7C","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAK/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAyO3C,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;AAM/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqP3C,eAAO,MAAM,MAAM,yCAAwB,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { Avatar } from './Avatar';
2
+ export { AvatarPlaceholderProvider } from './placeholder-context';
3
+ export type { AvatarPlaceholderConfig } from './placeholder-context';
2
4
  export type { AvatarProps, AvatarShape } from './types';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface AvatarPlaceholderConfig {
3
+ /** Default icon to render inside the placeholder circle */
4
+ icon?: (size: number) => ReactNode;
5
+ }
6
+ export declare const AvatarPlaceholderProvider: import("react").Provider<AvatarPlaceholderConfig | null>;
7
+ export declare function useAvatarPlaceholder(): AvatarPlaceholderConfig | null;
8
+ //# sourceMappingURL=placeholder-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-context.d.ts","sourceRoot":"","sources":["../../../../src/avatar/placeholder-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;CACpC;AAKD,eAAO,MAAM,yBAAyB,0DAAoC,CAAC;AAE3E,wBAAgB,oBAAoB,IAAI,uBAAuB,GAAG,IAAI,CAErE"}
@@ -24,6 +24,10 @@ export interface AvatarProps {
24
24
  style?: StyleProp<ViewStyle>;
25
25
  /** Image style (circle shape only) */
26
26
  imageStyle?: StyleProp<ImageStyle>;
27
+ /** Custom background color for the placeholder circle (overrides theme default) */
28
+ placeholderColor?: string;
29
+ /** Custom icon rendered inside the placeholder circle when no image is available */
30
+ placeholderIcon?: ReactNode;
27
31
  /** Press handler — wraps avatar in TouchableOpacity when provided */
28
32
  onPress?: () => void;
29
33
  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,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,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,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;AAK/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAyO3C,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;AAM/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqP3C,eAAO,MAAM,MAAM,yCAAwB,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { Avatar } from './Avatar';
2
+ export { AvatarPlaceholderProvider } from './placeholder-context';
3
+ export type { AvatarPlaceholderConfig } from './placeholder-context';
2
4
  export type { AvatarProps, AvatarShape } from './types';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface AvatarPlaceholderConfig {
3
+ /** Default icon to render inside the placeholder circle */
4
+ icon?: (size: number) => ReactNode;
5
+ }
6
+ export declare const AvatarPlaceholderProvider: import("react").Provider<AvatarPlaceholderConfig | null>;
7
+ export declare function useAvatarPlaceholder(): AvatarPlaceholderConfig | null;
8
+ //# sourceMappingURL=placeholder-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-context.d.ts","sourceRoot":"","sources":["../../../../src/avatar/placeholder-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;CACpC;AAKD,eAAO,MAAM,yBAAyB,0DAAoC,CAAC;AAE3E,wBAAgB,oBAAoB,IAAI,uBAAuB,GAAG,IAAI,CAErE"}
@@ -24,6 +24,10 @@ export interface AvatarProps {
24
24
  style?: StyleProp<ViewStyle>;
25
25
  /** Image style (circle shape only) */
26
26
  imageStyle?: StyleProp<ImageStyle>;
27
+ /** Custom background color for the placeholder circle (overrides theme default) */
28
+ placeholderColor?: string;
29
+ /** Custom icon rendered inside the placeholder circle when no image is available */
30
+ placeholderIcon?: ReactNode;
27
31
  /** Press handler — wraps avatar in TouchableOpacity when provided */
28
32
  onPress?: () => void;
29
33
  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,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,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
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, Image, StyleSheet, TouchableOpacity } from 'react-native';
3
3
 
4
4
  import { useTheme } from '../theme/use-theme';
5
5
  import { useImageResolver } from '../image-resolver/context';
6
+ import { useAvatarPlaceholder } from './placeholder-context';
6
7
  import type { AvatarProps } from './types';
7
8
 
8
9
  // Squircle clip path normalized to 0–1 coordinate space (viewBox="0 0 1 1").
@@ -37,18 +38,20 @@ function SquircleImage({
37
38
  fallbackSource,
38
39
  size,
39
40
  fallbackColor,
41
+ placeholderIcon,
40
42
  onError,
41
43
  }: {
42
44
  uri?: string;
43
45
  fallbackSource?: AvatarProps['fallbackSource'];
44
46
  size: number;
45
47
  fallbackColor: string;
48
+ placeholderIcon?: React.ReactNode;
46
49
  onError: () => void;
47
50
  }) {
48
51
  const svg = getSvgModule();
49
52
  if (!svg) {
50
53
  // Fallback to circle if react-native-svg is not installed
51
- return <CircleFallback size={size} fallbackColor={fallbackColor} />;
54
+ return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} />;
52
55
  }
53
56
 
54
57
  const { default: Svg, Defs, ClipPath, Path, Image: SvgImage } = svg;
@@ -56,7 +59,7 @@ function SquircleImage({
56
59
 
57
60
  const href = uri ? { uri } : fallbackSource;
58
61
  if (!href) {
59
- return <CircleFallback size={size} fallbackColor={fallbackColor} />;
62
+ return <CircleFallback size={size} fallbackColor={fallbackColor} icon={placeholderIcon} />;
60
63
  }
61
64
 
62
65
  return (
@@ -87,7 +90,7 @@ function SquircleImage({
87
90
  );
88
91
  }
89
92
 
90
- function CircleFallback({ size, fallbackColor }: { size: number; fallbackColor: string }) {
93
+ function CircleFallback({ size, fallbackColor, icon }: { size: number; fallbackColor: string; icon?: React.ReactNode }) {
91
94
  const radius = size / 2;
92
95
  return (
93
96
  <View
@@ -96,8 +99,13 @@ function CircleFallback({ size, fallbackColor }: { size: number; fallbackColor:
96
99
  height: size,
97
100
  borderRadius: radius,
98
101
  backgroundColor: fallbackColor,
102
+ justifyContent: 'center',
103
+ alignItems: 'center',
104
+ overflow: 'hidden',
99
105
  }}
100
- />
106
+ >
107
+ {icon ?? null}
108
+ </View>
101
109
  );
102
110
  }
103
111
 
@@ -111,13 +119,17 @@ const AvatarComponent: React.FC<AvatarProps> = ({
111
119
  shape = 'circle',
112
120
  style,
113
121
  imageStyle,
122
+ placeholderColor,
123
+ placeholderIcon,
114
124
  onPress,
115
125
  testID,
116
126
  }) => {
117
127
  const [errored, setErrored] = useState(false);
118
128
  const theme = useTheme();
129
+ const placeholderConfig = useAvatarPlaceholder();
119
130
  const radius = size / 2;
120
- const fallbackColor = theme.colors.backgroundTertiary;
131
+ const fallbackColor = placeholderColor || theme.colors.backgroundTertiary;
132
+ const resolvedPlaceholderIcon = placeholderIcon ?? placeholderConfig?.icon?.(size * 0.6);
121
133
 
122
134
  // Reset error state when source changes (e.g., list item recycling
123
135
  // or async URL resolution replacing an initial file ID).
@@ -168,6 +180,7 @@ const AvatarComponent: React.FC<AvatarProps> = ({
168
180
  fallbackSource={fallbackSource}
169
181
  size={size}
170
182
  fallbackColor={fallbackColor}
183
+ placeholderIcon={resolvedPlaceholderIcon}
171
184
  onError={() => setErrored(true)}
172
185
  />
173
186
  ) : (
@@ -180,7 +193,7 @@ const AvatarComponent: React.FC<AvatarProps> = ({
180
193
  style={[StyleSheet.absoluteFillObject, { borderRadius: radius }, imageStyle]}
181
194
  />
182
195
  ) : (
183
- <CircleFallback size={size} fallbackColor={fallbackColor} />
196
+ <CircleFallback size={size} fallbackColor={fallbackColor} icon={resolvedPlaceholderIcon} />
184
197
  )}
185
198
  </View>
186
199
  )}
@@ -1,2 +1,4 @@
1
1
  export { Avatar } from './Avatar';
2
+ export { AvatarPlaceholderProvider } from './placeholder-context';
3
+ export type { AvatarPlaceholderConfig } from './placeholder-context';
2
4
  export type { AvatarProps, AvatarShape } from './types';
@@ -0,0 +1,16 @@
1
+ import { createContext, useContext } from 'react';
2
+ import type { ReactNode } from 'react';
3
+
4
+ export interface AvatarPlaceholderConfig {
5
+ /** Default icon to render inside the placeholder circle */
6
+ icon?: (size: number) => ReactNode;
7
+ }
8
+
9
+ const AvatarPlaceholderContext = createContext<AvatarPlaceholderConfig | null>(null);
10
+ AvatarPlaceholderContext.displayName = 'BloomAvatarPlaceholderContext';
11
+
12
+ export const AvatarPlaceholderProvider = AvatarPlaceholderContext.Provider;
13
+
14
+ export function useAvatarPlaceholder(): AvatarPlaceholderConfig | null {
15
+ return useContext(AvatarPlaceholderContext);
16
+ }
@@ -26,6 +26,10 @@ export interface AvatarProps {
26
26
  style?: StyleProp<ViewStyle>;
27
27
  /** Image style (circle shape only) */
28
28
  imageStyle?: StyleProp<ImageStyle>;
29
+ /** Custom background color for the placeholder circle (overrides theme default) */
30
+ placeholderColor?: string;
31
+ /** Custom icon rendered inside the placeholder circle when no image is available */
32
+ placeholderIcon?: ReactNode;
29
33
  /** Press handler — wraps avatar in TouchableOpacity when provided */
30
34
  onPress?: () => void;
31
35
  testID?: string;