@oxyhq/bloom 0.35.1 → 0.35.3

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.
@@ -18,9 +18,10 @@ exports.computeClusterLayout = computeClusterLayout;
18
18
  * centre and (b) push any two circles apart until they clear a uniform gap. A
19
19
  * fixed iteration count + deterministic seed means the same `count` always
20
20
  * yields byte-identical positions, so native and web render the cluster
21
- * identically with no `onLayout`/DOM measurement. The very small counts (1, 2,
22
- * 3) where a relaxation degenerates into a line or a lone pair — use explicit
23
- * iMessage-style arrangements instead.
21
+ * identically with no `onLayout`/DOM measurement. The small counts (1, 2, 3, 4)
22
+ * use explicit iMessage-style arrangements instead 1–3 because a relaxation
23
+ * there degenerates into a line or a lone pair, and 4 because the iconic
24
+ * 4-person layout is a clean 2×2 grid of equal circles rather than a pack.
24
25
  *
25
26
  * Output is resolution-independent: each bubble is expressed as a fraction of
26
27
  * the group's bounding box (`cx`/`cy` centre, `d` diameter, all 0..1), so the
@@ -112,8 +113,8 @@ function separate(xs, ys, radii, count) {
112
113
 
113
114
  /**
114
115
  * Deterministic force-directed pack of `count` circles (primary pinned at the
115
- * centre), returned as box-fraction bubbles. Used for every cluster with 4+
116
- * members; 1–3 are handled as explicit arrangements in
116
+ * centre), returned as box-fraction bubbles. Used for every cluster with 5+
117
+ * members; 1–4 are handled as explicit arrangements in
117
118
  * {@link computeClusterLayout}.
118
119
  */
119
120
  function packCluster(count) {
@@ -205,7 +206,10 @@ function packCluster(count) {
205
206
  * secondary; the overlap + separator ring alone convey the stacking.
206
207
  * - `3` → an iMessage-style triangle: the larger primary along the bottom with
207
208
  * two smaller members above it.
208
- * - `4+` → the deterministic force-directed pack of near-equal bubbles, recentred
209
+ * - `4` → the iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
210
+ * centred in the box with a uniform gap, sized so the outermost edges reach the
211
+ * box edge like the other counts.
212
+ * - `5+` → the deterministic force-directed pack of near-equal bubbles, recentred
209
213
  * and scaled to fill the round box edge-to-edge (a modestly larger primary near
210
214
  * the centre, the rest packed magnetically around it, denser as the count
211
215
  * grows).
@@ -247,6 +251,39 @@ function computeClusterLayout(count) {
247
251
  d: 0.4
248
252
  }];
249
253
  }
254
+ if (count === 4) {
255
+ // The iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
256
+ // centred in the box with the same uniform neighbour gap the rest of the
257
+ // cluster keeps (LAYOUT_GAP, in circle-radius units), sized so the outermost
258
+ // bubble edge reaches the box radius (0.5 from the centre) — exactly as the
259
+ // force-packed counts do — so the four circles fill the round box
260
+ // edge-to-edge with a clean uniform gap and no overlap.
261
+ //
262
+ // With diameter `d` and radius `r = d/2`, the neighbour gap `g = LAYOUT_GAP·r`,
263
+ // so the centre-to-centre spacing is `s = d + g = d·(1 + LAYOUT_GAP/2)`. Each
264
+ // centre sits `(s/2, s/2)` from the box centre, so its farthest point lies
265
+ // `(s/2)·√2 + r` away; setting that to `0.5` and solving for `d`:
266
+ const spacingFactor = 1 + LAYOUT_GAP / 2;
267
+ const d = 0.5 / (spacingFactor * Math.SQRT2 / 2 + 0.5);
268
+ const half = d * spacingFactor / 2;
269
+ return [{
270
+ cx: 0.5 - half,
271
+ cy: 0.5 - half,
272
+ d
273
+ }, {
274
+ cx: 0.5 + half,
275
+ cy: 0.5 - half,
276
+ d
277
+ }, {
278
+ cx: 0.5 - half,
279
+ cy: 0.5 + half,
280
+ d
281
+ }, {
282
+ cx: 0.5 + half,
283
+ cy: 0.5 + half,
284
+ d
285
+ }];
286
+ }
250
287
  return packCluster(count);
251
288
  }
252
289
  //# sourceMappingURL=cluster-layout.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GOLDEN_ANGLE","Math","PI","sqrt","ITERATIONS","CLEANUP_ITERATIONS","CENTERING","SEPARATION_STRENGTH","LAYOUT_GAP","SEED_SPACING","PRIMARY_RADIUS","SECONDARY_MAX","SECONDARY_MIN","EPSILON","relativeRadius","index","count","t","separate","xs","ys","radii","i","j","dx","dy","dist","hypot","minDist","a","cos","sin","overlap","nx","ny","packCluster","Array","seedR","angle","iter","minX","Infinity","maxX","minY","maxY","x","y","r","centerX","centerY","bound","reach","scale","bubbles","cx","cy","d","computeClusterLayout"],"sourceRoot":"../../../src","sources":["avatar-group/cluster-layout.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["GOLDEN_ANGLE","Math","PI","sqrt","ITERATIONS","CLEANUP_ITERATIONS","CENTERING","SEPARATION_STRENGTH","LAYOUT_GAP","SEED_SPACING","PRIMARY_RADIUS","SECONDARY_MAX","SECONDARY_MIN","EPSILON","relativeRadius","index","count","t","separate","xs","ys","radii","i","j","dx","dy","dist","hypot","minDist","a","cos","sin","overlap","nx","ny","packCluster","Array","seedR","angle","iter","minX","Infinity","maxX","minY","maxY","x","y","r","centerX","centerY","bound","reach","scale","bubbles","cx","cy","d","computeClusterLayout","spacingFactor","SQRT2","half"],"sourceRoot":"../../../src","sources":["avatar-group/cluster-layout.ts"],"mappings":"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","ignoreList":[]}
@@ -14,12 +14,14 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
14
14
  const TabsContext = /*#__PURE__*/(0, _react.createContext)({
15
15
  value: '',
16
16
  onValueChange: () => {},
17
- variant: 'underline'
17
+ variant: 'underline',
18
+ fullWidth: false
18
19
  });
19
20
  const TabsBarComponent = ({
20
21
  value,
21
22
  onValueChange,
22
23
  variant = 'underline',
24
+ fullWidth = false,
23
25
  children,
24
26
  style,
25
27
  testID
@@ -28,8 +30,9 @@ const TabsBarComponent = ({
28
30
  const contextValue = (0, _react.useMemo)(() => ({
29
31
  value,
30
32
  onValueChange,
31
- variant
32
- }), [value, onValueChange, variant]);
33
+ variant,
34
+ fullWidth
35
+ }), [value, onValueChange, variant, fullWidth]);
33
36
  const containerStyle = (0, _react.useMemo)(() => {
34
37
  const base = {
35
38
  flexDirection: 'row',
@@ -56,7 +59,11 @@ const TabsBarComponent = ({
56
59
  }, [variant, theme]);
57
60
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(TabsContext.Provider, {
58
61
  value: contextValue,
59
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
62
+ children: fullWidth ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
63
+ style: [containerStyle, style],
64
+ testID: testID,
65
+ children: children
66
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
60
67
  horizontal: true,
61
68
  showsHorizontalScrollIndicator: false,
62
69
  contentContainerStyle: [containerStyle, style],
@@ -77,7 +84,8 @@ const TabComponent = ({
77
84
  const {
78
85
  value: selectedValue,
79
86
  onValueChange,
80
- variant
87
+ variant,
88
+ fullWidth
81
89
  } = (0, _react.useContext)(TabsContext);
82
90
  const isSelected = value === selectedValue;
83
91
  const {
@@ -145,13 +153,17 @@ const TabComponent = ({
145
153
  return base;
146
154
  }, [variant, isSelected, theme]);
147
155
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
148
- style: {
156
+ style: [{
149
157
  transform: [{
150
158
  scale: scaleAnim
151
159
  }]
152
- },
160
+ }, fullWidth && {
161
+ flex: 1
162
+ }],
153
163
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
154
- style: [tabStyle, disabled && {
164
+ style: [tabStyle, fullWidth && {
165
+ flex: 1
166
+ }, disabled && {
155
167
  opacity: 0.4
156
168
  }, style],
157
169
  onPress: handlePress,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_usePressAnimation","_tokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TabsContext","createContext","value","onValueChange","variant","TabsBarComponent","children","style","testID","theme","useTheme","contextValue","useMemo","containerStyle","base","flexDirection","alignItems","borderBottomWidth","borderBottomColor","colors","borderLight","backgroundColor","backgroundSecondary","borderRadius","sm","padding","borderWidth","borderColor","border","jsx","Provider","ScrollView","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","TabComponent","label","icon","disabled","textStyle","selectedValue","useContext","isSelected","scaleAnim","onPressIn","onPressOut","usePressAnimation","handlePress","useCallback","tabStyle","justifyContent","paddingHorizontal","space","lg","paddingVertical","gap","xs","primary","marginBottom","card","shadowColor","shadow","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","labelStyle","fontSize","fontWeight","color","primaryForeground","textSecondary","Animated","View","transform","scale","jsxs","Pressable","opacity","onPress","accessibilityRole","accessibilityState","selected","Text","TabPanelComponent","Tabs","exports","memo","displayName","TabsTrigger","TabsContent"],"sourceRoot":"../../../src","sources":["tabs/Tabs.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_usePressAnimation","_tokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TabsContext","createContext","value","onValueChange","variant","fullWidth","TabsBarComponent","children","style","testID","theme","useTheme","contextValue","useMemo","containerStyle","base","flexDirection","alignItems","borderBottomWidth","borderBottomColor","colors","borderLight","backgroundColor","backgroundSecondary","borderRadius","sm","padding","borderWidth","borderColor","border","jsx","Provider","View","ScrollView","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","TabComponent","label","icon","disabled","textStyle","selectedValue","useContext","isSelected","scaleAnim","onPressIn","onPressOut","usePressAnimation","handlePress","useCallback","tabStyle","justifyContent","paddingHorizontal","space","lg","paddingVertical","gap","xs","primary","marginBottom","card","shadowColor","shadow","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","labelStyle","fontSize","fontWeight","color","primaryForeground","textSecondary","Animated","transform","scale","flex","jsxs","Pressable","opacity","onPress","accessibilityRole","accessibilityState","selected","Text","TabPanelComponent","Tabs","exports","memo","displayName","TabsTrigger","TabsContent"],"sourceRoot":"../../../src","sources":["tabs/Tabs.tsx"],"mappings":"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","ignoreList":[]}
@@ -14,9 +14,10 @@
14
14
  * centre and (b) push any two circles apart until they clear a uniform gap. A
15
15
  * fixed iteration count + deterministic seed means the same `count` always
16
16
  * yields byte-identical positions, so native and web render the cluster
17
- * identically with no `onLayout`/DOM measurement. The very small counts (1, 2,
18
- * 3) where a relaxation degenerates into a line or a lone pair — use explicit
19
- * iMessage-style arrangements instead.
17
+ * identically with no `onLayout`/DOM measurement. The small counts (1, 2, 3, 4)
18
+ * use explicit iMessage-style arrangements instead 1–3 because a relaxation
19
+ * there degenerates into a line or a lone pair, and 4 because the iconic
20
+ * 4-person layout is a clean 2×2 grid of equal circles rather than a pack.
20
21
  *
21
22
  * Output is resolution-independent: each bubble is expressed as a fraction of
22
23
  * the group's bounding box (`cx`/`cy` centre, `d` diameter, all 0..1), so the
@@ -108,8 +109,8 @@ function separate(xs, ys, radii, count) {
108
109
 
109
110
  /**
110
111
  * Deterministic force-directed pack of `count` circles (primary pinned at the
111
- * centre), returned as box-fraction bubbles. Used for every cluster with 4+
112
- * members; 1–3 are handled as explicit arrangements in
112
+ * centre), returned as box-fraction bubbles. Used for every cluster with 5+
113
+ * members; 1–4 are handled as explicit arrangements in
113
114
  * {@link computeClusterLayout}.
114
115
  */
115
116
  function packCluster(count) {
@@ -201,7 +202,10 @@ function packCluster(count) {
201
202
  * secondary; the overlap + separator ring alone convey the stacking.
202
203
  * - `3` → an iMessage-style triangle: the larger primary along the bottom with
203
204
  * two smaller members above it.
204
- * - `4+` → the deterministic force-directed pack of near-equal bubbles, recentred
205
+ * - `4` → the iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
206
+ * centred in the box with a uniform gap, sized so the outermost edges reach the
207
+ * box edge like the other counts.
208
+ * - `5+` → the deterministic force-directed pack of near-equal bubbles, recentred
205
209
  * and scaled to fill the round box edge-to-edge (a modestly larger primary near
206
210
  * the centre, the rest packed magnetically around it, denser as the count
207
211
  * grows).
@@ -243,6 +247,39 @@ export function computeClusterLayout(count) {
243
247
  d: 0.4
244
248
  }];
245
249
  }
250
+ if (count === 4) {
251
+ // The iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
252
+ // centred in the box with the same uniform neighbour gap the rest of the
253
+ // cluster keeps (LAYOUT_GAP, in circle-radius units), sized so the outermost
254
+ // bubble edge reaches the box radius (0.5 from the centre) — exactly as the
255
+ // force-packed counts do — so the four circles fill the round box
256
+ // edge-to-edge with a clean uniform gap and no overlap.
257
+ //
258
+ // With diameter `d` and radius `r = d/2`, the neighbour gap `g = LAYOUT_GAP·r`,
259
+ // so the centre-to-centre spacing is `s = d + g = d·(1 + LAYOUT_GAP/2)`. Each
260
+ // centre sits `(s/2, s/2)` from the box centre, so its farthest point lies
261
+ // `(s/2)·√2 + r` away; setting that to `0.5` and solving for `d`:
262
+ const spacingFactor = 1 + LAYOUT_GAP / 2;
263
+ const d = 0.5 / (spacingFactor * Math.SQRT2 / 2 + 0.5);
264
+ const half = d * spacingFactor / 2;
265
+ return [{
266
+ cx: 0.5 - half,
267
+ cy: 0.5 - half,
268
+ d
269
+ }, {
270
+ cx: 0.5 + half,
271
+ cy: 0.5 - half,
272
+ d
273
+ }, {
274
+ cx: 0.5 - half,
275
+ cy: 0.5 + half,
276
+ d
277
+ }, {
278
+ cx: 0.5 + half,
279
+ cy: 0.5 + half,
280
+ d
281
+ }];
282
+ }
246
283
  return packCluster(count);
247
284
  }
248
285
  //# sourceMappingURL=cluster-layout.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GOLDEN_ANGLE","Math","PI","sqrt","ITERATIONS","CLEANUP_ITERATIONS","CENTERING","SEPARATION_STRENGTH","LAYOUT_GAP","SEED_SPACING","PRIMARY_RADIUS","SECONDARY_MAX","SECONDARY_MIN","EPSILON","relativeRadius","index","count","t","separate","xs","ys","radii","i","j","dx","dy","dist","hypot","minDist","a","cos","sin","overlap","nx","ny","packCluster","Array","seedR","angle","iter","minX","Infinity","maxX","minY","maxY","x","y","r","centerX","centerY","bound","reach","scale","bubbles","cx","cy","d","computeClusterLayout"],"sourceRoot":"../../../src","sources":["avatar-group/cluster-layout.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["GOLDEN_ANGLE","Math","PI","sqrt","ITERATIONS","CLEANUP_ITERATIONS","CENTERING","SEPARATION_STRENGTH","LAYOUT_GAP","SEED_SPACING","PRIMARY_RADIUS","SECONDARY_MAX","SECONDARY_MIN","EPSILON","relativeRadius","index","count","t","separate","xs","ys","radii","i","j","dx","dy","dist","hypot","minDist","a","cos","sin","overlap","nx","ny","packCluster","Array","seedR","angle","iter","minX","Infinity","maxX","minY","maxY","x","y","r","centerX","centerY","bound","reach","scale","bubbles","cx","cy","d","computeClusterLayout","spacingFactor","SQRT2","half"],"sourceRoot":"../../../src","sources":["avatar-group/cluster-layout.ts"],"mappings":"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","ignoreList":[]}
@@ -9,12 +9,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  const TabsContext = /*#__PURE__*/createContext({
10
10
  value: '',
11
11
  onValueChange: () => {},
12
- variant: 'underline'
12
+ variant: 'underline',
13
+ fullWidth: false
13
14
  });
14
15
  const TabsBarComponent = ({
15
16
  value,
16
17
  onValueChange,
17
18
  variant = 'underline',
19
+ fullWidth = false,
18
20
  children,
19
21
  style,
20
22
  testID
@@ -23,8 +25,9 @@ const TabsBarComponent = ({
23
25
  const contextValue = useMemo(() => ({
24
26
  value,
25
27
  onValueChange,
26
- variant
27
- }), [value, onValueChange, variant]);
28
+ variant,
29
+ fullWidth
30
+ }), [value, onValueChange, variant, fullWidth]);
28
31
  const containerStyle = useMemo(() => {
29
32
  const base = {
30
33
  flexDirection: 'row',
@@ -51,7 +54,11 @@ const TabsBarComponent = ({
51
54
  }, [variant, theme]);
52
55
  return /*#__PURE__*/_jsx(TabsContext.Provider, {
53
56
  value: contextValue,
54
- children: /*#__PURE__*/_jsx(ScrollView, {
57
+ children: fullWidth ? /*#__PURE__*/_jsx(View, {
58
+ style: [containerStyle, style],
59
+ testID: testID,
60
+ children: children
61
+ }) : /*#__PURE__*/_jsx(ScrollView, {
55
62
  horizontal: true,
56
63
  showsHorizontalScrollIndicator: false,
57
64
  contentContainerStyle: [containerStyle, style],
@@ -72,7 +79,8 @@ const TabComponent = ({
72
79
  const {
73
80
  value: selectedValue,
74
81
  onValueChange,
75
- variant
82
+ variant,
83
+ fullWidth
76
84
  } = useContext(TabsContext);
77
85
  const isSelected = value === selectedValue;
78
86
  const {
@@ -140,13 +148,17 @@ const TabComponent = ({
140
148
  return base;
141
149
  }, [variant, isSelected, theme]);
142
150
  return /*#__PURE__*/_jsx(Animated.View, {
143
- style: {
151
+ style: [{
144
152
  transform: [{
145
153
  scale: scaleAnim
146
154
  }]
147
- },
155
+ }, fullWidth && {
156
+ flex: 1
157
+ }],
148
158
  children: /*#__PURE__*/_jsxs(Pressable, {
149
- style: [tabStyle, disabled && {
159
+ style: [tabStyle, fullWidth && {
160
+ flex: 1
161
+ }, disabled && {
150
162
  opacity: 0.4
151
163
  }, style],
152
164
  onPress: handlePress,
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","memo","useCallback","useContext","useMemo","View","Text","Pressable","Animated","ScrollView","useTheme","usePressAnimation","borderRadius","space","jsx","_jsx","jsxs","_jsxs","TabsContext","value","onValueChange","variant","TabsBarComponent","children","style","testID","theme","contextValue","containerStyle","base","flexDirection","alignItems","borderBottomWidth","borderBottomColor","colors","borderLight","backgroundColor","backgroundSecondary","sm","padding","borderWidth","borderColor","border","Provider","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","TabComponent","label","icon","disabled","textStyle","selectedValue","isSelected","scaleAnim","onPressIn","onPressOut","handlePress","tabStyle","justifyContent","paddingHorizontal","lg","paddingVertical","gap","xs","primary","marginBottom","card","shadowColor","shadow","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","labelStyle","fontSize","fontWeight","color","primaryForeground","textSecondary","transform","scale","opacity","onPress","accessibilityRole","accessibilityState","selected","TabPanelComponent","Tabs","displayName","TabsTrigger","TabsContent"],"sourceRoot":"../../../src","sources":["tabs/Tabs.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","memo","useCallback","useContext","useMemo","View","Text","Pressable","Animated","ScrollView","useTheme","usePressAnimation","borderRadius","space","jsx","_jsx","jsxs","_jsxs","TabsContext","value","onValueChange","variant","fullWidth","TabsBarComponent","children","style","testID","theme","contextValue","containerStyle","base","flexDirection","alignItems","borderBottomWidth","borderBottomColor","colors","borderLight","backgroundColor","backgroundSecondary","sm","padding","borderWidth","borderColor","border","Provider","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","TabComponent","label","icon","disabled","textStyle","selectedValue","isSelected","scaleAnim","onPressIn","onPressOut","handlePress","tabStyle","justifyContent","paddingHorizontal","lg","paddingVertical","gap","xs","primary","marginBottom","card","shadowColor","shadow","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","labelStyle","fontSize","fontWeight","color","primaryForeground","textSecondary","transform","scale","flex","opacity","onPress","accessibilityRole","accessibilityState","selected","TabPanelComponent","Tabs","displayName","TabsTrigger","TabsContent"],"sourceRoot":"../../../src","sources":["tabs/Tabs.tsx"],"mappings":"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","ignoreList":[]}
@@ -12,9 +12,10 @@
12
12
  * centre and (b) push any two circles apart until they clear a uniform gap. A
13
13
  * fixed iteration count + deterministic seed means the same `count` always
14
14
  * yields byte-identical positions, so native and web render the cluster
15
- * identically with no `onLayout`/DOM measurement. The very small counts (1, 2,
16
- * 3) where a relaxation degenerates into a line or a lone pair — use explicit
17
- * iMessage-style arrangements instead.
15
+ * identically with no `onLayout`/DOM measurement. The small counts (1, 2, 3, 4)
16
+ * use explicit iMessage-style arrangements instead 1–3 because a relaxation
17
+ * there degenerates into a line or a lone pair, and 4 because the iconic
18
+ * 4-person layout is a clean 2×2 grid of equal circles rather than a pack.
18
19
  *
19
20
  * Output is resolution-independent: each bubble is expressed as a fraction of
20
21
  * the group's bounding box (`cx`/`cy` centre, `d` diameter, all 0..1), so the
@@ -46,7 +47,10 @@ export interface ClusterBubble {
46
47
  * secondary; the overlap + separator ring alone convey the stacking.
47
48
  * - `3` → an iMessage-style triangle: the larger primary along the bottom with
48
49
  * two smaller members above it.
49
- * - `4+` → the deterministic force-directed pack of near-equal bubbles, recentred
50
+ * - `4` → the iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
51
+ * centred in the box with a uniform gap, sized so the outermost edges reach the
52
+ * box edge like the other counts.
53
+ * - `5+` → the deterministic force-directed pack of near-equal bubbles, recentred
50
54
  * and scaled to fill the round box edge-to-edge (a modestly larger primary near
51
55
  * the centre, the rest packed magnetically around it, denser as the count
52
56
  * grows).
@@ -1 +1 @@
1
- {"version":3,"file":"cluster-layout.d.ts","sourceRoot":"","sources":["../../../../src/avatar-group/cluster-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,CAAC,EAAE,MAAM,CAAC;CACX;AAqKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAqBnE"}
1
+ {"version":3,"file":"cluster-layout.d.ts","sourceRoot":"","sources":["../../../../src/avatar-group/cluster-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,CAAC,EAAE,MAAM,CAAC;CACX;AAqKD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CA2CnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAcf,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,SAAS,CAAC;AA4K1F,eAAO,MAAM,IAAI,uCAAyB,CAAC;AAG3C,eAAO,MAAM,WAAW,8CAAqB,CAAC;AAG9C,eAAO,MAAM,WAAW,8CAA0B,CAAC"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAcf,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,SAAS,CAAC;AA4L1F,eAAO,MAAM,IAAI,uCAAyB,CAAC;AAG3C,eAAO,MAAM,WAAW,8CAAqB,CAAC;AAG9C,eAAO,MAAM,WAAW,8CAA0B,CAAC"}
@@ -7,6 +7,13 @@ export interface TabsProps {
7
7
  onValueChange: (value: string) => void;
8
8
  /** Visual variant for the tab bar. */
9
9
  variant?: TabsVariant;
10
+ /**
11
+ * When true, the tab bar spans the full container width and each trigger
12
+ * takes an equal share of it (edge to edge), instead of the default
13
+ * content-sized, horizontally scrollable layout. Best for a small, fixed
14
+ * set of tabs (e.g. 2–3). Defaults to `false`.
15
+ */
16
+ fullWidth?: boolean;
10
17
  /** The tab items. Must be TabsTrigger components. */
11
18
  children: React.ReactNode;
12
19
  style?: StyleProp<ViewStyle>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,sCAAsC;IACtC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,qDAAqD;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,sCAAsC;IACtC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B"}
@@ -12,9 +12,10 @@
12
12
  * centre and (b) push any two circles apart until they clear a uniform gap. A
13
13
  * fixed iteration count + deterministic seed means the same `count` always
14
14
  * yields byte-identical positions, so native and web render the cluster
15
- * identically with no `onLayout`/DOM measurement. The very small counts (1, 2,
16
- * 3) where a relaxation degenerates into a line or a lone pair — use explicit
17
- * iMessage-style arrangements instead.
15
+ * identically with no `onLayout`/DOM measurement. The small counts (1, 2, 3, 4)
16
+ * use explicit iMessage-style arrangements instead 1–3 because a relaxation
17
+ * there degenerates into a line or a lone pair, and 4 because the iconic
18
+ * 4-person layout is a clean 2×2 grid of equal circles rather than a pack.
18
19
  *
19
20
  * Output is resolution-independent: each bubble is expressed as a fraction of
20
21
  * the group's bounding box (`cx`/`cy` centre, `d` diameter, all 0..1), so the
@@ -46,7 +47,10 @@ export interface ClusterBubble {
46
47
  * secondary; the overlap + separator ring alone convey the stacking.
47
48
  * - `3` → an iMessage-style triangle: the larger primary along the bottom with
48
49
  * two smaller members above it.
49
- * - `4+` → the deterministic force-directed pack of near-equal bubbles, recentred
50
+ * - `4` → the iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
51
+ * centred in the box with a uniform gap, sized so the outermost edges reach the
52
+ * box edge like the other counts.
53
+ * - `5+` → the deterministic force-directed pack of near-equal bubbles, recentred
50
54
  * and scaled to fill the round box edge-to-edge (a modestly larger primary near
51
55
  * the centre, the rest packed magnetically around it, denser as the count
52
56
  * grows).
@@ -1 +1 @@
1
- {"version":3,"file":"cluster-layout.d.ts","sourceRoot":"","sources":["../../../../src/avatar-group/cluster-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,CAAC,EAAE,MAAM,CAAC;CACX;AAqKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAqBnE"}
1
+ {"version":3,"file":"cluster-layout.d.ts","sourceRoot":"","sources":["../../../../src/avatar-group/cluster-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,CAAC,EAAE,MAAM,CAAC;CACX;AAqKD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CA2CnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAcf,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,SAAS,CAAC;AA4K1F,eAAO,MAAM,IAAI,uCAAyB,CAAC;AAG3C,eAAO,MAAM,WAAW,8CAAqB,CAAC;AAG9C,eAAO,MAAM,WAAW,8CAA0B,CAAC"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAcf,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,SAAS,CAAC;AA4L1F,eAAO,MAAM,IAAI,uCAAyB,CAAC;AAG3C,eAAO,MAAM,WAAW,8CAAqB,CAAC;AAG9C,eAAO,MAAM,WAAW,8CAA0B,CAAC"}
@@ -7,6 +7,13 @@ export interface TabsProps {
7
7
  onValueChange: (value: string) => void;
8
8
  /** Visual variant for the tab bar. */
9
9
  variant?: TabsVariant;
10
+ /**
11
+ * When true, the tab bar spans the full container width and each trigger
12
+ * takes an equal share of it (edge to edge), instead of the default
13
+ * content-sized, horizontally scrollable layout. Best for a small, fixed
14
+ * set of tabs (e.g. 2–3). Defaults to `false`.
15
+ */
16
+ fullWidth?: boolean;
10
17
  /** The tab items. Must be TabsTrigger components. */
11
18
  children: React.ReactNode;
12
19
  style?: StyleProp<ViewStyle>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,sCAAsC;IACtC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,qDAAqD;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,sCAAsC;IACtC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.35.1",
3
+ "version": "0.35.3",
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",
@@ -74,11 +74,12 @@ describe('computeClusterLayout', () => {
74
74
  }
75
75
  });
76
76
 
77
- it('fills the round box edge-to-edge for the force-packed counts (4+)', () => {
77
+ it('fills the round box edge-to-edge for the force-packed counts (5+)', () => {
78
78
  // After the recentre + scale, the outermost bubble edge lands on the box
79
79
  // radius (0.5 from the box centre) — the blob fills the round box densely
80
80
  // with no big empty margin — and the whole cluster stays roughly centred.
81
- for (const count of [4, 5, 8, 12, 20]) {
81
+ // (count=4 is the explicit 2×2 grid, covered separately below.)
82
+ for (const count of [5, 8, 12, 20]) {
82
83
  const bubbles = computeClusterLayout(count);
83
84
  let reach = 0;
84
85
  for (const bubble of bubbles) {
@@ -98,7 +99,8 @@ describe('computeClusterLayout', () => {
98
99
  // The pack should read as near-equal magnetic bubbles: a modestly larger
99
100
  // primary, everyone else only slightly smaller — not a big primary ringed by
100
101
  // tiny dots. The smallest bubble stays at least ~75% of the largest.
101
- for (const count of [4, 5, 6, 8, 12, 20]) {
102
+ // (count=4 is the explicit 2×2 grid, covered separately below.)
103
+ for (const count of [5, 6, 8, 12, 20]) {
102
104
  const diameters = computeClusterLayout(count).map((bubble) => bubble.d);
103
105
  const maxD = Math.max(...diameters);
104
106
  const minD = Math.min(...diameters);
@@ -113,6 +115,60 @@ describe('computeClusterLayout', () => {
113
115
  }
114
116
  });
115
117
 
118
+ it('arranges the four-member cluster as an equal-size 2×2 grid', () => {
119
+ // The iMessage 4-person layout: four EQUAL-diameter bubbles at the corners of
120
+ // a 2×2 grid centred in the box, with a clean uniform gap (no overlap), sized
121
+ // so the outermost edges reach the box edge like the other counts.
122
+ const bubbles = computeClusterLayout(4);
123
+ expect(bubbles).toHaveLength(4);
124
+
125
+ // All four share one diameter.
126
+ const d = bubbleAt(bubbles, 0).d;
127
+ for (const bubble of bubbles) {
128
+ expect(bubble.d).toBeCloseTo(d, 10);
129
+ }
130
+
131
+ // Exactly two distinct rows (cy) and two distinct columns (cx), each shared by
132
+ // two bubbles — a true 2×2 grid, centred on the box (rows/cols symmetric
133
+ // about 0.5).
134
+ const round = (v: number) => Math.round(v * 1e6) / 1e6;
135
+ const cols = [...new Set(bubbles.map((b) => round(b.cx)))].sort((a, b) => a - b);
136
+ const rows = [...new Set(bubbles.map((b) => round(b.cy)))].sort((a, b) => a - b);
137
+ expect(cols).toHaveLength(2);
138
+ expect(rows).toHaveLength(2);
139
+ const col0 = cols[0];
140
+ const col1 = cols[1];
141
+ const row0 = rows[0];
142
+ const row1 = rows[1];
143
+ if (col0 === undefined || col1 === undefined || row0 === undefined || row1 === undefined) {
144
+ throw new Error('expected two distinct rows and columns');
145
+ }
146
+ expect((col0 + col1) / 2).toBeCloseTo(0.5, 9);
147
+ expect((row0 + row1) / 2).toBeCloseTo(0.5, 9);
148
+ // Square grid: the row and column spacings match.
149
+ expect(col1 - col0).toBeCloseTo(row1 - row0, 9);
150
+
151
+ // Clean uniform gap between neighbours — no overlap.
152
+ expect(minEdgeGap(bubbles)).toBeGreaterThan(0);
153
+
154
+ // Outermost edge reaches the box radius (fills the round box like the others).
155
+ let reach = 0;
156
+ for (const bubble of bubbles) {
157
+ const r = Math.hypot(bubble.cx - 0.5, bubble.cy - 0.5) + bubble.d / 2;
158
+ if (r > reach) reach = r;
159
+ }
160
+ expect(reach).toBeCloseTo(0.5, 6);
161
+
162
+ // Fully inside the unit box, and deterministic.
163
+ for (const bubble of bubbles) {
164
+ expect(bubble.cx - bubble.d / 2).toBeGreaterThanOrEqual(-1e-6);
165
+ expect(bubble.cx + bubble.d / 2).toBeLessThanOrEqual(1 + 1e-6);
166
+ expect(bubble.cy - bubble.d / 2).toBeGreaterThanOrEqual(-1e-6);
167
+ expect(bubble.cy + bubble.d / 2).toBeLessThanOrEqual(1 + 1e-6);
168
+ }
169
+ expect(computeClusterLayout(4)).toEqual(bubbles);
170
+ });
171
+
116
172
  it('gives the two-member cluster equal-diameter, overlapping bubbles', () => {
117
173
  const bubbles = computeClusterLayout(2);
118
174
  expect(bubbles).toHaveLength(2);
@@ -12,9 +12,10 @@
12
12
  * centre and (b) push any two circles apart until they clear a uniform gap. A
13
13
  * fixed iteration count + deterministic seed means the same `count` always
14
14
  * yields byte-identical positions, so native and web render the cluster
15
- * identically with no `onLayout`/DOM measurement. The very small counts (1, 2,
16
- * 3) where a relaxation degenerates into a line or a lone pair — use explicit
17
- * iMessage-style arrangements instead.
15
+ * identically with no `onLayout`/DOM measurement. The small counts (1, 2, 3, 4)
16
+ * use explicit iMessage-style arrangements instead 1–3 because a relaxation
17
+ * there degenerates into a line or a lone pair, and 4 because the iconic
18
+ * 4-person layout is a clean 2×2 grid of equal circles rather than a pack.
18
19
  *
19
20
  * Output is resolution-independent: each bubble is expressed as a fraction of
20
21
  * the group's bounding box (`cx`/`cy` centre, `d` diameter, all 0..1), so the
@@ -114,8 +115,8 @@ function separate(xs: number[], ys: number[], radii: number[], count: number): v
114
115
 
115
116
  /**
116
117
  * Deterministic force-directed pack of `count` circles (primary pinned at the
117
- * centre), returned as box-fraction bubbles. Used for every cluster with 4+
118
- * members; 1–3 are handled as explicit arrangements in
118
+ * centre), returned as box-fraction bubbles. Used for every cluster with 5+
119
+ * members; 1–4 are handled as explicit arrangements in
119
120
  * {@link computeClusterLayout}.
120
121
  */
121
122
  function packCluster(count: number): ClusterBubble[] {
@@ -211,7 +212,10 @@ function packCluster(count: number): ClusterBubble[] {
211
212
  * secondary; the overlap + separator ring alone convey the stacking.
212
213
  * - `3` → an iMessage-style triangle: the larger primary along the bottom with
213
214
  * two smaller members above it.
214
- * - `4+` → the deterministic force-directed pack of near-equal bubbles, recentred
215
+ * - `4` → the iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
216
+ * centred in the box with a uniform gap, sized so the outermost edges reach the
217
+ * box edge like the other counts.
218
+ * - `5+` → the deterministic force-directed pack of near-equal bubbles, recentred
215
219
  * and scaled to fill the round box edge-to-edge (a modestly larger primary near
216
220
  * the centre, the rest packed magnetically around it, denser as the count
217
221
  * grows).
@@ -236,5 +240,27 @@ export function computeClusterLayout(count: number): ClusterBubble[] {
236
240
  { cx: 0.715, cy: 0.24, d: 0.4 },
237
241
  ];
238
242
  }
243
+ if (count === 4) {
244
+ // The iMessage 4-person layout: a 2×2 grid of EQUAL-diameter bubbles,
245
+ // centred in the box with the same uniform neighbour gap the rest of the
246
+ // cluster keeps (LAYOUT_GAP, in circle-radius units), sized so the outermost
247
+ // bubble edge reaches the box radius (0.5 from the centre) — exactly as the
248
+ // force-packed counts do — so the four circles fill the round box
249
+ // edge-to-edge with a clean uniform gap and no overlap.
250
+ //
251
+ // With diameter `d` and radius `r = d/2`, the neighbour gap `g = LAYOUT_GAP·r`,
252
+ // so the centre-to-centre spacing is `s = d + g = d·(1 + LAYOUT_GAP/2)`. Each
253
+ // centre sits `(s/2, s/2)` from the box centre, so its farthest point lies
254
+ // `(s/2)·√2 + r` away; setting that to `0.5` and solving for `d`:
255
+ const spacingFactor = 1 + LAYOUT_GAP / 2;
256
+ const d = 0.5 / ((spacingFactor * Math.SQRT2) / 2 + 0.5);
257
+ const half = (d * spacingFactor) / 2;
258
+ return [
259
+ { cx: 0.5 - half, cy: 0.5 - half, d },
260
+ { cx: 0.5 + half, cy: 0.5 - half, d },
261
+ { cx: 0.5 - half, cy: 0.5 + half, d },
262
+ { cx: 0.5 + half, cy: 0.5 + half, d },
263
+ ];
264
+ }
239
265
  return packCluster(count);
240
266
  }
package/src/tabs/Tabs.tsx CHANGED
@@ -24,18 +24,21 @@ interface TabsContextValue {
24
24
  value: string;
25
25
  onValueChange: (value: string) => void;
26
26
  variant: TabsVariant;
27
+ fullWidth: boolean;
27
28
  }
28
29
 
29
30
  const TabsContext = createContext<TabsContextValue>({
30
31
  value: '',
31
32
  onValueChange: () => {},
32
33
  variant: 'underline',
34
+ fullWidth: false,
33
35
  });
34
36
 
35
37
  const TabsBarComponent: React.FC<TabsProps> = ({
36
38
  value,
37
39
  onValueChange,
38
40
  variant = 'underline',
41
+ fullWidth = false,
39
42
  children,
40
43
  style,
41
44
  testID,
@@ -43,8 +46,8 @@ const TabsBarComponent: React.FC<TabsProps> = ({
43
46
  const theme = useTheme();
44
47
 
45
48
  const contextValue = useMemo(
46
- () => ({ value, onValueChange, variant }),
47
- [value, onValueChange, variant],
49
+ () => ({ value, onValueChange, variant, fullWidth }),
50
+ [value, onValueChange, variant, fullWidth],
48
51
  );
49
52
 
50
53
  const containerStyle = useMemo((): ViewStyle => {
@@ -76,14 +79,20 @@ const TabsBarComponent: React.FC<TabsProps> = ({
76
79
 
77
80
  return (
78
81
  <TabsContext.Provider value={contextValue}>
79
- <ScrollView
80
- horizontal
81
- showsHorizontalScrollIndicator={false}
82
- contentContainerStyle={[containerStyle, style]}
83
- testID={testID}
84
- >
85
- {children}
86
- </ScrollView>
82
+ {fullWidth ? (
83
+ <View style={[containerStyle, style]} testID={testID}>
84
+ {children}
85
+ </View>
86
+ ) : (
87
+ <ScrollView
88
+ horizontal
89
+ showsHorizontalScrollIndicator={false}
90
+ contentContainerStyle={[containerStyle, style]}
91
+ testID={testID}
92
+ >
93
+ {children}
94
+ </ScrollView>
95
+ )}
87
96
  </TabsContext.Provider>
88
97
  );
89
98
  };
@@ -97,7 +106,12 @@ const TabComponent: React.FC<TabsTriggerProps> = ({
97
106
  textStyle,
98
107
  }) => {
99
108
  const theme = useTheme();
100
- const { value: selectedValue, onValueChange, variant } = useContext(TabsContext);
109
+ const {
110
+ value: selectedValue,
111
+ onValueChange,
112
+ variant,
113
+ fullWidth,
114
+ } = useContext(TabsContext);
101
115
  const isSelected = value === selectedValue;
102
116
  const { scaleAnim, onPressIn, onPressOut } = usePressAnimation(0.97);
103
117
 
@@ -165,9 +179,11 @@ const TabComponent: React.FC<TabsTriggerProps> = ({
165
179
  }, [variant, isSelected, theme]);
166
180
 
167
181
  return (
168
- <Animated.View style={{ transform: [{ scale: scaleAnim }] }}>
182
+ <Animated.View
183
+ style={[{ transform: [{ scale: scaleAnim }] }, fullWidth && { flex: 1 }]}
184
+ >
169
185
  <Pressable
170
- style={[tabStyle, disabled && { opacity: 0.4 }, style]}
186
+ style={[tabStyle, fullWidth && { flex: 1 }, disabled && { opacity: 0.4 }, style]}
171
187
  onPress={handlePress}
172
188
  onPressIn={onPressIn}
173
189
  onPressOut={onPressOut}
package/src/tabs/types.ts CHANGED
@@ -9,6 +9,13 @@ export interface TabsProps {
9
9
  onValueChange: (value: string) => void;
10
10
  /** Visual variant for the tab bar. */
11
11
  variant?: TabsVariant;
12
+ /**
13
+ * When true, the tab bar spans the full container width and each trigger
14
+ * takes an equal share of it (edge to edge), instead of the default
15
+ * content-sized, horizontally scrollable layout. Best for a small, fixed
16
+ * set of tabs (e.g. 2–3). Defaults to `false`.
17
+ */
18
+ fullWidth?: boolean;
12
19
  /** The tab items. Must be TabsTrigger components. */
13
20
  children: React.ReactNode;
14
21
  style?: StyleProp<ViewStyle>;