@oxyhq/bloom 0.52.1 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/tab-bar/TabBarBase.js +46 -6
- package/lib/commonjs/tab-bar/TabBarBase.js.map +1 -1
- package/lib/module/tab-bar/TabBarBase.js +46 -6
- package/lib/module/tab-bar/TabBarBase.js.map +1 -1
- package/lib/typescript/commonjs/tab-bar/TabBarBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/tab-bar/types.d.ts +40 -0
- package/lib/typescript/commonjs/tab-bar/types.d.ts.map +1 -1
- package/lib/typescript/module/tab-bar/TabBarBase.d.ts.map +1 -1
- package/lib/typescript/module/tab-bar/types.d.ts +40 -0
- package/lib/typescript/module/tab-bar/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/TabBarBlur.test.tsx +154 -0
- package/src/__tests__/TabBarMaxWidth.test.tsx +413 -0
- package/src/tab-bar/TabBarBase.tsx +67 -17
- package/src/tab-bar/types.ts +38 -0
|
@@ -51,6 +51,8 @@ function TabBarBody({
|
|
|
51
51
|
onIndexLongPress,
|
|
52
52
|
theme: themeOverrides,
|
|
53
53
|
haptics = true,
|
|
54
|
+
blur = true,
|
|
55
|
+
maxWidth,
|
|
54
56
|
style,
|
|
55
57
|
...viewProps
|
|
56
58
|
}) {
|
|
@@ -67,6 +69,19 @@ function TabBarBody({
|
|
|
67
69
|
const theme = (0, _shared.useTabBarTheme)(themeOverrides);
|
|
68
70
|
const impact = (0, _useHaptics.useHaptics)();
|
|
69
71
|
|
|
72
|
+
// The pill's OUTER width (the box the animated minimize inset is applied
|
|
73
|
+
// inside), and the single source of truth for it: the wrap's own layout, the
|
|
74
|
+
// highlight geometry and the `indexAtX` scrub worklet all derive from this one
|
|
75
|
+
// number. They have to, or a tap lands on a tab the highlight is not under —
|
|
76
|
+
// the exact failure `maxWidth` exists to prevent, since narrowing the bar from
|
|
77
|
+
// the outside with a `style` override moves only the pixels.
|
|
78
|
+
//
|
|
79
|
+
// Unconstrained it is what the stretched wrap already measures
|
|
80
|
+
// (`windowWidth - BAR_MARGIN * 2`), so an existing consumer's geometry is
|
|
81
|
+
// unchanged to the pixel. `maxWidth` is a ceiling, never a floor: on a window
|
|
82
|
+
// narrower than it, the bar stays full-bleed.
|
|
83
|
+
const barOuterWidth = maxWidth === undefined ? windowWidth - _shared.BAR_MARGIN * 2 : Math.min(windowWidth - _shared.BAR_MARGIN * 2, maxWidth);
|
|
84
|
+
|
|
70
85
|
// Picker-style tick while the highlight crosses tab boundaries mid-drag.
|
|
71
86
|
// `useHaptics` already no-ops on web, when the optional `expo-haptics` peer
|
|
72
87
|
// is absent, and when a `BloomHapticsProvider` has haptics turned off — so
|
|
@@ -107,7 +122,13 @@ function TabBarBody({
|
|
|
107
122
|
'worklet';
|
|
108
123
|
|
|
109
124
|
const sideInset = (0, _reactNativeReanimated.interpolate)(minimizedValue, [0, 1], [0, _shared.MINIMIZED_INSET], _reactNativeReanimated.Extrapolation.CLAMP);
|
|
110
|
-
|
|
125
|
+
// `event.x` is measured from the left edge of the view the detector is
|
|
126
|
+
// attached to — the animated pill itself, NOT the window and not the wrap
|
|
127
|
+
// around it. Its width is therefore the outer width minus the two
|
|
128
|
+
// animated margins, which is exactly what this computes, constrained or
|
|
129
|
+
// not. (Margins sit outside a view's own box, so x = 0 is the pill's left
|
|
130
|
+
// border edge either way.)
|
|
131
|
+
const barWidth = barOuterWidth - sideInset * 2;
|
|
111
132
|
const itemWidth = (barWidth - _shared.ROW_PAD_H * 2) / tabCount;
|
|
112
133
|
const raw = (x - _shared.ROW_PAD_H) / itemWidth - 0.5;
|
|
113
134
|
return Math.min(Math.max(raw, 0), tabCount - 1);
|
|
@@ -163,7 +184,7 @@ function TabBarBody({
|
|
|
163
184
|
(0, _reactNativeReanimated.runOnJS)(longPressIndex)(Math.round(indexAtX(event.x, progress.value)));
|
|
164
185
|
});
|
|
165
186
|
return _reactNativeGestureHandler.Gesture.Race(pan, tap, longPress);
|
|
166
|
-
}, [
|
|
187
|
+
}, [barOuterWidth, tabCount, selectIndex, hasLongPress, longPressIndex, tick, isDragging, lastTicked, slideIndex, minimized, progress]);
|
|
167
188
|
|
|
168
189
|
// CRITICAL — every shared value and every scalar a mapper READS must appear
|
|
169
190
|
// in its dependency array. On web WITHOUT the react-native-worklets babel
|
|
@@ -214,7 +235,9 @@ function TabBarBody({
|
|
|
214
235
|
const barHeight = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.EXPANDED_HEIGHT, _shared.MINIMIZED_HEIGHT], _reactNativeReanimated.Extrapolation.CLAMP);
|
|
215
236
|
const height = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.HIGHLIGHT_EXPANDED, _shared.HIGHLIGHT_MINIMIZED], _reactNativeReanimated.Extrapolation.CLAMP);
|
|
216
237
|
const sideInset = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [0, _shared.MINIMIZED_INSET], _reactNativeReanimated.Extrapolation.CLAMP);
|
|
217
|
-
|
|
238
|
+
// Same `barOuterWidth` the scrub worklet resolves an index from — see the
|
|
239
|
+
// note where it is computed.
|
|
240
|
+
const barWidth = barOuterWidth - sideInset * 2;
|
|
218
241
|
const itemWidth = (barWidth - _shared.ROW_PAD_H * 2) / tabCount;
|
|
219
242
|
return {
|
|
220
243
|
height,
|
|
@@ -225,11 +248,27 @@ function TabBarBody({
|
|
|
225
248
|
translateX: _shared.ROW_PAD_H + itemWidth * slideIndex.value
|
|
226
249
|
}]
|
|
227
250
|
};
|
|
228
|
-
}, [progress, slideIndex,
|
|
251
|
+
}, [progress, slideIndex, barOuterWidth, tabCount]);
|
|
229
252
|
|
|
230
253
|
// Shared with `useTabBarFootprint`, so a consumer accounting for the bar in
|
|
231
254
|
// its own layout can never drift from where the bar actually sits.
|
|
232
255
|
const bottomOffset = (0, _shared.tabBarBottomGap)(insets.bottom);
|
|
256
|
+
|
|
257
|
+
// How centring and the animated inset compose: centring is STATIC and belongs
|
|
258
|
+
// to the wrap, the inset stays ANIMATED on the pill inside it. The wrap is
|
|
259
|
+
// centred once by layout at a definite width, and the pill's two equal
|
|
260
|
+
// margins keep it centred within that wrap at every point of the minimize
|
|
261
|
+
// animation — neither has to know about the other. Centring the animated view
|
|
262
|
+
// itself would instead mean `alignSelf: 'center'` on a node with no width of
|
|
263
|
+
// its own (its width comes from those margins), which Yoga then sizes from its
|
|
264
|
+
// CONTENT rather than from the constraint.
|
|
265
|
+
//
|
|
266
|
+
// Applied only when `maxWidth` is set: with no width and no `alignSelf` the
|
|
267
|
+
// wrap stretches, which is the original full-bleed behaviour.
|
|
268
|
+
const constrainedWrapStyle = maxWidth === undefined ? null : {
|
|
269
|
+
width: barOuterWidth,
|
|
270
|
+
alignSelf: 'center'
|
|
271
|
+
};
|
|
233
272
|
const barContext = (0, _react.useMemo)(() => ({
|
|
234
273
|
slideIndex,
|
|
235
274
|
isDragging,
|
|
@@ -240,8 +279,9 @@ function TabBarBody({
|
|
|
240
279
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
241
280
|
...viewProps,
|
|
242
281
|
style: [styles.root, style],
|
|
243
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Blur, {
|
|
282
|
+
children: [blur !== false && /*#__PURE__*/(0, _jsxRuntime.jsx)(Blur, {
|
|
244
283
|
direction: "bottom",
|
|
284
|
+
intensity: typeof blur === 'object' ? blur.intensity : undefined,
|
|
245
285
|
style: {
|
|
246
286
|
position: 'absolute',
|
|
247
287
|
left: 0,
|
|
@@ -252,7 +292,7 @@ function TabBarBody({
|
|
|
252
292
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
253
293
|
style: [styles.barWrap, {
|
|
254
294
|
marginBottom: bottomOffset
|
|
255
|
-
}],
|
|
295
|
+
}, constrainedWrapStyle],
|
|
256
296
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
|
|
257
297
|
gesture: gesture,
|
|
258
298
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeReanimated.default.View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_reactNativeSafeAreaContext","_useHaptics","_minimizeContext","_shared","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BarContext","createContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","onIndexLongPress","theme","themeOverrides","haptics","style","viewProps","insets","useSafeAreaInsets","width","windowWidth","useWindowDimensions","minimized","useMinimizeState","progress","slideIndex","useSharedValue","isDragging","lastTicked","tabCount","Math","max","Children","count","useTabBarTheme","impact","useHaptics","tick","useCallback","selectIndex","index","longPressIndex","hasLongPress","undefined","useEffect","value","withSpring","SLIDE_SPRING","gesture","useMemo","indexAtX","x","minimizedValue","sideInset","interpolate","MINIMIZED_INSET","Extrapolation","CLAMP","barWidth","BAR_MARGIN","itemWidth","ROW_PAD_H","raw","min","pan","Gesture","Pan","activeOffsetX","failOffsetY","onStart","round","setMinimized","onUpdate","event","rounded","runOnJS","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","longPress","LongPress","minDuration","LONG_PRESS_MIN_DURATION","barStyle","useAnimatedStyle","height","EXPANDED_HEIGHT","MINIMIZED_HEIGHT","inset","marginLeft","marginRight","shapeStyle","borderRadius","highlightStyle","barHeight","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","top","transform","translateX","bottomOffset","tabBarBottomGap","bottom","barContext","jsxs","View","styles","root","jsx","direction","position","left","right","BLUR_BLEED","barWrap","marginBottom","GestureDetector","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","useContext","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","interpolateColor","activeTint","inactiveTint","boxStyle","Pressable","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","ICON_SIZE","active","StyleSheet","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","marginHorizontal","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","alignSelf","paddingTop","ITEM_PAD_V","overflow","fontSize","LABEL_FONT_SIZE","fontWeight","marginTop","ITEM_GAP"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_reactNativeSafeAreaContext","_useHaptics","_minimizeContext","_shared","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BarContext","createContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","onIndexLongPress","theme","themeOverrides","haptics","blur","maxWidth","style","viewProps","insets","useSafeAreaInsets","width","windowWidth","useWindowDimensions","minimized","useMinimizeState","progress","slideIndex","useSharedValue","isDragging","lastTicked","tabCount","Math","max","Children","count","useTabBarTheme","impact","useHaptics","barOuterWidth","undefined","BAR_MARGIN","min","tick","useCallback","selectIndex","index","longPressIndex","hasLongPress","useEffect","value","withSpring","SLIDE_SPRING","gesture","useMemo","indexAtX","x","minimizedValue","sideInset","interpolate","MINIMIZED_INSET","Extrapolation","CLAMP","barWidth","itemWidth","ROW_PAD_H","raw","pan","Gesture","Pan","activeOffsetX","failOffsetY","onStart","round","setMinimized","onUpdate","event","rounded","runOnJS","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","longPress","LongPress","minDuration","LONG_PRESS_MIN_DURATION","barStyle","useAnimatedStyle","height","EXPANDED_HEIGHT","MINIMIZED_HEIGHT","inset","marginLeft","marginRight","shapeStyle","borderRadius","highlightStyle","barHeight","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","top","transform","translateX","bottomOffset","tabBarBottomGap","bottom","constrainedWrapStyle","alignSelf","barContext","jsxs","View","styles","root","jsx","direction","intensity","position","left","right","BLUR_BLEED","barWrap","marginBottom","GestureDetector","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","useContext","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","interpolateColor","activeTint","inactiveTint","boxStyle","Pressable","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","ICON_SIZE","active","StyleSheet","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","marginHorizontal","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","paddingTop","ITEM_PAD_V","overflow","fontSize","LABEL_FONT_SIZE","fontWeight","marginTop","ITEM_GAP"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":";;;;;;;AAeA,IAAAA,MAAA,GAAAC,OAAA;AASA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,0BAAA,GAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAUA,IAAAK,2BAAA,GAAAL,OAAA;AAEA,IAAAM,WAAA,GAAAN,OAAA;AAEA,IAAAO,gBAAA,GAAAP,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AAmBkB,IAAAS,WAAA,GAAAT,OAAA;AAAA,SAAAI,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AA5DlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiDA;AACA;AACA;AACA;AACA;;AAaA,MAAMkB,UAAU,gBAAG,IAAAC,oBAAa,EAAyB,IAAI,CAAC;AAO9D;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAAC;EAClBC,OAAO;EACPC,IAAI;EACJC,QAAQ;EACRC,WAAW;EACXC,aAAa;EACbC,gBAAgB;EAChBC,KAAK,EAAEC,cAAc;EACrBC,OAAO,GAAG,IAAI;EACdC,IAAI,GAAG,IAAI;EACXC,QAAQ;EACRC,KAAK;EACL,GAAGC;AACY,CAAC,EAAE;EAClB,MAAMC,MAAM,GAAG,IAAAC,6CAAiB,EAAC,CAAC;EAClC,MAAM;IAAEC,KAAK,EAAEC;EAAY,CAAC,GAAG,IAAAC,gCAAmB,EAAC,CAAC;EACpD,MAAMC,SAAS,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACpC,MAAMC,QAAQ,GAAGF,SAAS,CAACE,QAAQ;EACnC,MAAMC,UAAU,GAAG,IAAAC,qCAAc,EAAC,CAAC,CAAC;EACpC,MAAMC,UAAU,GAAG,IAAAD,qCAAc,EAAC,KAAK,CAAC;EACxC,MAAME,UAAU,GAAG,IAAAF,qCAAc,EAAC,CAAC,CAAC,CAAC;EACrC,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACC,eAAQ,CAACC,KAAK,CAAC3B,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtD,MAAMI,KAAK,GAAG,IAAAwB,sBAAc,EAACvB,cAAc,CAAC;EAC5C,MAAMwB,MAAM,GAAG,IAAAC,sBAAU,EAAC,CAAC;;EAE3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,aAAa,GACjBvB,QAAQ,KAAKwB,SAAS,GAClBlB,WAAW,GAAGmB,kBAAU,GAAG,CAAC,GAC5BT,IAAI,CAACU,GAAG,CAACpB,WAAW,GAAGmB,kBAAU,GAAG,CAAC,EAAEzB,QAAQ,CAAC;;EAEtD;EACA;EACA;EACA;EACA,MAAM2B,IAAI,GAAG,IAAAC,kBAAW,EAAC,MAAM;IAC7B,IAAI9B,OAAO,EAAEuB,MAAM,CAAC,OAAO,CAAC;EAC9B,CAAC,EAAE,CAACvB,OAAO,EAAEuB,MAAM,CAAC,CAAC;;EAErB;EACA;EACA,MAAMQ,WAAW,GAAG,IAAAD,kBAAW,EAAEE,KAAa,IAAKpC,aAAa,GAAGoC,KAAK,CAAC,EAAE,CAACpC,aAAa,CAAC,CAAC;;EAE3F;EACA;EACA,MAAMqC,cAAc,GAAG,IAAAH,kBAAW,EAC/BE,KAAa,IAAKnC,gBAAgB,GAAGmC,KAAK,CAAC,EAC5C,CAACnC,gBAAgB,CACnB,CAAC;EACD,MAAMqC,YAAY,GAAGrC,gBAAgB,KAAK6B,SAAS;;EAEnD;EACA;EACA;EACA;EACA;EACA;EACA,IAAAS,gBAAS,EAAC,MAAM;IACd,IAAIxC,WAAW,KAAK+B,SAAS,EAAE;IAC/B;IACA,IAAIX,UAAU,CAACqB,KAAK,EAAE;IACtBvB,UAAU,CAACuB,KAAK,GAAG,IAAAC,iCAAU,EAAC1C,WAAW,EAAE2C,oBAAY,CAAC;EAC1D,CAAC,EAAE,CAAC3C,WAAW,EAAEkB,UAAU,EAAEE,UAAU,CAAC,CAAC;;EAEzC;EACA;EACA;EACA;EACA;EACA,MAAMwB,OAAO,GAAG,IAAAC,cAAO,EAAC,MAAM;IAC5B,MAAMC,QAAQ,GAAGA,CAACC,CAAS,EAAEC,cAAsB,KAAK;MACtD,SAAS;;MACT,MAAMC,SAAS,GAAG,IAAAC,kCAAW,EAC3BF,cAAc,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,CAAC,EAAEG,uBAAe,CAAC,EACpBC,oCAAa,CAACC,KAChB,CAAC;MACD;MACA;MACA;MACA;MACA;MACA;MACA,MAAMC,QAAQ,GAAGxB,aAAa,GAAGmB,SAAS,GAAG,CAAC;MAC9C,MAAMM,SAAS,GAAG,CAACD,QAAQ,GAAGE,iBAAS,GAAG,CAAC,IAAIlC,QAAQ;MACvD,MAAMmC,GAAG,GAAG,CAACV,CAAC,GAAGS,iBAAS,IAAID,SAAS,GAAG,GAAG;MAC7C,OAAOhC,IAAI,CAACU,GAAG,CAACV,IAAI,CAACC,GAAG,CAACiC,GAAG,EAAE,CAAC,CAAC,EAAEnC,QAAQ,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,MAAMoC,GAAG,GAAGC,kCAAO,CAACC,GAAG,CAAC,CAAC,CACtBC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACtBC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CACtBC,OAAO,CAAC,MAAM;MACb3C,UAAU,CAACqB,KAAK,GAAG,IAAI;MACvBpB,UAAU,CAACoB,KAAK,GAAGlB,IAAI,CAACyC,KAAK,CAAC9C,UAAU,CAACuB,KAAK,CAAC;MAC/C;MACA,IAAAwB,6BAAY,EAAClD,SAAS,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CACDmD,QAAQ,CAAEC,KAAK,IAAK;MACnB,MAAM9B,KAAK,GAAGS,QAAQ,CAACqB,KAAK,CAACpB,CAAC,EAAE9B,QAAQ,CAACwB,KAAK,CAAC;MAC/CvB,UAAU,CAACuB,KAAK,GAAGJ,KAAK;MAExB,MAAM+B,OAAO,GAAG7C,IAAI,CAACyC,KAAK,CAAC3B,KAAK,CAAC;MACjC,IAAI+B,OAAO,KAAK/C,UAAU,CAACoB,KAAK,EAAE;QAChCpB,UAAU,CAACoB,KAAK,GAAG2B,OAAO;QAC1B,IAAAC,8BAAO,EAACnC,IAAI,CAAC,CAAC,CAAC;MACjB;IACF,CAAC,CAAC,CACDoC,UAAU,CAAC,MAAM;MAChB;MACA;MACA,IAAI,CAAClD,UAAU,CAACqB,KAAK,EAAE;QACrB;MACF;MACA,MAAM2B,OAAO,GAAG7C,IAAI,CAACyC,KAAK,CAAC9C,UAAU,CAACuB,KAAK,CAAC;MAC5CvB,UAAU,CAACuB,KAAK,GAAG,IAAAC,iCAAU,EAAC0B,OAAO,EAAEzB,oBAAY,CAAC;MACpD,IAAA0B,8BAAO,EAACjC,WAAW,CAAC,CAACgC,OAAO,CAAC;MAC7BhD,UAAU,CAACqB,KAAK,GAAG,KAAK;IAC1B,CAAC,CAAC;IAEJ,MAAM8B,GAAG,GAAGZ,kCAAO,CAACa,GAAG,CAAC;IACtB;IACA;IAAA,CACCC,WAAW,CAAC,EAAE,CAAC,CACfC,WAAW,CAAC,GAAG,CAAC,CAChBC,KAAK,CAAC,CAACR,KAAK,EAAES,OAAO,KAAK;MACzB,IAAI,CAACA,OAAO,EAAE;QACZ;MACF;MACA,MAAMvC,KAAK,GAAGd,IAAI,CAACyC,KAAK,CAAClB,QAAQ,CAACqB,KAAK,CAACpB,CAAC,EAAE9B,QAAQ,CAACwB,KAAK,CAAC,CAAC;MAC3DvB,UAAU,CAACuB,KAAK,GAAG,IAAAC,iCAAU,EAACL,KAAK,EAAEM,oBAAY,CAAC;MAClD,IAAAsB,6BAAY,EAAClD,SAAS,EAAE,CAAC,CAAC;MAC1B,IAAAsD,8BAAO,EAACjC,WAAW,CAAC,CAACC,KAAK,CAAC;IAC7B,CAAC,CAAC;IAEJ,IAAI,CAACE,YAAY,EAAE,OAAOoB,kCAAO,CAACkB,IAAI,CAACnB,GAAG,EAAEa,GAAG,CAAC;;IAEhD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAMO,SAAS,GAAGnB,kCAAO,CAACoB,SAAS,CAAC,CAAC,CAClCC,WAAW,CAACC,+BAAuB,CAAC,CACpClB,OAAO,CAAEI,KAAK,IAAK;MAClB,IAAAE,8BAAO,EAAC/B,cAAc,CAAC,CAACf,IAAI,CAACyC,KAAK,CAAClB,QAAQ,CAACqB,KAAK,CAACpB,CAAC,EAAE9B,QAAQ,CAACwB,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IAEJ,OAAOkB,kCAAO,CAACkB,IAAI,CAACnB,GAAG,EAAEa,GAAG,EAAEO,SAAS,CAAC;EAC1C,CAAC,EAAE,CACDhD,aAAa,EACbR,QAAQ,EACRc,WAAW,EACXG,YAAY,EACZD,cAAc,EACdJ,IAAI,EACJd,UAAU,EACVC,UAAU,EACVH,UAAU,EACVH,SAAS,EACTE,QAAQ,CACT,CAAC;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMiE,QAAQ,GAAG,IAAAC,uCAAgB,EAAC,MAAM;IACtC,MAAMC,MAAM,GAAG,IAAAlC,kCAAW,EACxBjC,QAAQ,CAACwB,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC4C,uBAAe,EAAEC,wBAAgB,CAAC,EACnClC,oCAAa,CAACC,KAChB,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAMkC,KAAK,GAAG,IAAArC,kCAAW,EAACjC,QAAQ,CAACwB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEU,uBAAe,CAAC,EAAEC,oCAAa,CAACC,KAAK,CAAC;IAC5F,OAAO;MAAE+B,MAAM;MAAEI,UAAU,EAAED,KAAK;MAAEE,WAAW,EAAEF;IAAM,CAAC;EAC1D,CAAC,EAAE,CAACtE,QAAQ,CAAC,CAAC;;EAEd;EACA;EACA;EACA,MAAMyE,UAAU,GAAG,IAAAP,uCAAgB,EAAC,MAAM;IACxC,MAAMC,MAAM,GAAG,IAAAlC,kCAAW,EACxBjC,QAAQ,CAACwB,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC4C,uBAAe,EAAEC,wBAAgB,CAAC,EACnClC,oCAAa,CAACC,KAChB,CAAC;IACD,OAAO;MAAEsC,YAAY,EAAEP,MAAM,GAAG;IAAE,CAAC;EACrC,CAAC,EAAE,CAACnE,QAAQ,CAAC,CAAC;;EAEd;EACA;EACA,MAAM2E,cAAc,GAAG,IAAAT,uCAAgB,EAAC,MAAM;IAC5C,MAAMU,SAAS,GAAG,IAAA3C,kCAAW,EAC3BjC,QAAQ,CAACwB,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC4C,uBAAe,EAAEC,wBAAgB,CAAC,EACnClC,oCAAa,CAACC,KAChB,CAAC;IACD,MAAM+B,MAAM,GAAG,IAAAlC,kCAAW,EACxBjC,QAAQ,CAACwB,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAACqD,0BAAkB,EAAEC,2BAAmB,CAAC,EACzC3C,oCAAa,CAACC,KAChB,CAAC;IACD,MAAMJ,SAAS,GAAG,IAAAC,kCAAW,EAC3BjC,QAAQ,CAACwB,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,CAAC,EAAEU,uBAAe,CAAC,EACpBC,oCAAa,CAACC,KAChB,CAAC;IACD;IACA;IACA,MAAMC,QAAQ,GAAGxB,aAAa,GAAGmB,SAAS,GAAG,CAAC;IAC9C,MAAMM,SAAS,GAAG,CAACD,QAAQ,GAAGE,iBAAS,GAAG,CAAC,IAAIlC,QAAQ;IACvD,OAAO;MACL8D,MAAM;MACNxE,KAAK,EAAE2C,SAAS;MAChBoC,YAAY,EAAEP,MAAM,GAAG,CAAC;MACxBY,GAAG,EAAE,CAACH,SAAS,GAAGT,MAAM,IAAI,CAAC;MAC7Ba,SAAS,EAAE,CAAC;QAAEC,UAAU,EAAE1C,iBAAS,GAAGD,SAAS,GAAGrC,UAAU,CAACuB;MAAM,CAAC;IACtE,CAAC;EACH,CAAC,EAAE,CAACxB,QAAQ,EAAEC,UAAU,EAAEY,aAAa,EAAER,QAAQ,CAAC,CAAC;;EAEnD;EACA;EACA,MAAM6E,YAAY,GAAG,IAAAC,uBAAe,EAAC1F,MAAM,CAAC2F,MAAM,CAAC;;EAEnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,oBAAsC,GAC1C/F,QAAQ,KAAKwB,SAAS,GAAG,IAAI,GAAG;IAAEnB,KAAK,EAAEkB,aAAa;IAAEyE,SAAS,EAAE;EAAS,CAAC;EAC/E,MAAMC,UAAU,GAAG,IAAA3D,cAAO,EACxB,OAAO;IAAE3B,UAAU;IAAEE,UAAU;IAAEjB,KAAK;IAAEH,WAAW;IAAEoC;EAAY,CAAC,CAAC,EACnE,CAAClB,UAAU,EAAEE,UAAU,EAAEjB,KAAK,EAAEH,WAAW,EAAEoC,WAAW,CAC1D,CAAC;EAED,oBACE,IAAA9D,WAAA,CAAAmI,IAAA,EAAC3I,YAAA,CAAA4I,IAAI;IAAA,GAAKjG,SAAS;IAAED,KAAK,EAAE,CAACmG,MAAM,CAACC,IAAI,EAAEpG,KAAK,CAAE;IAAAT,QAAA,GAS9CO,IAAI,KAAK,KAAK,iBACb,IAAAhC,WAAA,CAAAuI,GAAA,EAAC/G,IAAI;MACHgH,SAAS,EAAC,QAAQ;MAClBC,SAAS,EAAE,OAAOzG,IAAI,KAAK,QAAQ,GAAGA,IAAI,CAACyG,SAAS,GAAGhF,SAAU;MACjEvB,KAAK,EAAE;QACLwG,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,CAAC;QACPC,KAAK,EAAE,CAAC;QACRb,MAAM,EAAE,CAAC;QACTjB,MAAM,EAAEe,YAAY,GAAGd,uBAAe,GAAG8B;MAC3C;IAAE,CACH,CACF,eACD,IAAA7I,WAAA,CAAAuI,GAAA,EAAC/I,YAAA,CAAA4I,IAAI;MAAClG,KAAK,EAAE,CAACmG,MAAM,CAACS,OAAO,EAAE;QAAEC,YAAY,EAAElB;MAAa,CAAC,EAAEG,oBAAoB,CAAE;MAAAvG,QAAA,eAClF,IAAAzB,WAAA,CAAAuI,GAAA,EAAC9I,0BAAA,CAAAuJ,eAAe;QAAC1E,OAAO,EAAEA,OAAQ;QAAA7C,QAAA,eAChC,IAAAzB,WAAA,CAAAmI,IAAA,EAACzI,sBAAA,CAAAiB,OAAQ,CAACyH,IAAI;UAAClG,KAAK,EAAE0E,QAAS;UAAAnF,QAAA,gBAC7B,IAAAzB,WAAA,CAAAuI,GAAA,EAAChH,OAAO;YAACM,KAAK,EAAEA,KAAM;YAACK,KAAK,EAAEkF;UAAW,CAAE,CAAC,eAC5C,IAAApH,WAAA,CAAAuI,GAAA,EAAC7I,sBAAA,CAAAiB,OAAQ,CAACyH,IAAI;YACZlG,KAAK,EAAE,CAACmG,MAAM,CAACY,SAAS,EAAE;cAAEC,eAAe,EAAErH,KAAK,CAACoH;YAAU,CAAC,EAAE3B,cAAc;UAAE,CACjF,CAAC,eACF,IAAAtH,WAAA,CAAAuI,GAAA,EAAC/I,YAAA,CAAA4I,IAAI;YAACe,iBAAiB,EAAC,SAAS;YAACjH,KAAK,EAAEmG,MAAM,CAACe,OAAQ;YAAA3H,QAAA,eACtD,IAAAzB,WAAA,CAAAuI,GAAA,EAACnH,UAAU,CAACiI,QAAQ;cAAClF,KAAK,EAAE+D,UAAW;cAAAzG,QAAA,EAAEA;YAAQ,CAAsB;UAAC,CACpE,CAAC;QAAA,CACM;MAAC,CACD;IAAC,CACd,CAAC;EAAA,CACH,CAAC;AAEX;AAMA;AACA,SAAS6H,gBAAgBA,CAAC;EACxBC,KAAK;EACLC,IAAI;EACJzF,KAAK;EACL0F,SAAS;EACTC,OAAO;EACPxH,KAAK;EACL,GAAGyH;AACkB,CAAC,EAAE;EACxB,MAAMlH,SAAS,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACpC,MAAMC,QAAQ,GAAGF,SAAS,CAACE,QAAQ;EACnC,MAAMiH,GAAG,GAAG,IAAAC,iBAAU,EAACzI,UAAU,CAAC;EAClC;EACA,MAAM0I,eAAe,GAAG,IAAAzG,sBAAc,EAAC,CAAC;EACxC,MAAMxB,KAAK,GAAG+H,GAAG,EAAE/H,KAAK,IAAIiI,eAAe;EAC3C,MAAMlH,UAAU,GAAGgH,GAAG,EAAEhH,UAAU;EAClC;EACA;EACA,MAAMmH,OAAO,GAAGN,SAAS,IAAKG,GAAG,EAAElI,WAAW,KAAKqC,KAAM;;EAEzD;EACA;EACA;EACA;EACA;EACA,IAAAG,gBAAS,EAAC,MAAM;IACd,IAAIuF,SAAS,KAAKhG,SAAS,IAAI,CAACgG,SAAS,IAAI,CAACG,GAAG,EAAE;IACnD,IAAIA,GAAG,CAAC9G,UAAU,CAACqB,KAAK,EAAE;IAC1ByF,GAAG,CAAChH,UAAU,CAACuB,KAAK,GAAG,IAAAC,iCAAU,EAACL,KAAK,EAAEM,oBAAY,CAAC;EACxD,CAAC,EAAE,CAACoF,SAAS,EAAE1F,KAAK,EAAE6F,GAAG,CAAC,CAAC;;EAE3B;EACA;EACA;EACA;EACA,MAAMI,gBAAgB,GAAG,IAAAnD,uCAAgB,EACvC,OAAO;IACLoD,OAAO,EAAErH,UAAU,GAAG,CAAC,GAAGK,IAAI,CAACU,GAAG,CAACV,IAAI,CAACiH,GAAG,CAACtH,UAAU,CAACuB,KAAK,GAAGJ,KAAK,CAAC,EAAE,CAAC,CAAC,GAAGgG,OAAO,GAAG,CAAC,GAAG;EAC5F,CAAC,CAAC,EACF,CAACnH,UAAU,EAAEmB,KAAK,EAAEgG,OAAO,CAC7B,CAAC;EAED,MAAMI,UAAU,GAAG,IAAAtD,uCAAgB,EACjC,OAAO;IACLoD,OAAO,EAAE,IAAArF,kCAAW,EAACjC,QAAQ,CAACwB,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEW,oCAAa,CAACC,KAAK,CAAC;IAC3EqF,KAAK,EAAExH,UAAU,GACb,IAAAyH,uCAAgB,EACdpH,IAAI,CAACU,GAAG,CAACV,IAAI,CAACiH,GAAG,CAACtH,UAAU,CAACuB,KAAK,GAAGJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAClC,KAAK,CAACyI,UAAU,EAAEzI,KAAK,CAAC0I,YAAY,CACvC,CAAC,GACDR,OAAO,GACLlI,KAAK,CAACyI,UAAU,GAChBzI,KAAK,CAAC0I;EACd,CAAC,CAAC,EACF,CAAC5H,QAAQ,EAAEC,UAAU,EAAEmB,KAAK,EAAEgG,OAAO,EAAElI,KAAK,CAC9C,CAAC;;EAED;EACA;EACA;EACA,MAAM2I,QAAQ,GAAG,IAAA3D,uCAAgB,EAC/B,OAAO;IACLC,MAAM,EAAE,IAAAlC,kCAAW,EACjBjC,QAAQ,CAACwB,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAACqD,0BAAkB,EAAEC,2BAAmB,CAAC,EACzC3C,oCAAa,CAACC,KAChB;EACF,CAAC,CAAC,EACF,CAACpC,QAAQ,CACX,CAAC;EAED,oBACE,IAAA3C,WAAA,CAAAuI,GAAA,EAAC/I,YAAA,CAAAiL;EACC;EACA;EAAA;IACAtB,iBAAiB,EAAC,KAAK;IACvBuB,kBAAkB,EAAE;MAAEC,QAAQ,EAAEZ;IAAQ,CAAE;IAC1Ca,kBAAkB,EAAEpB,IAAI,CAACqB,KAAM;IAAA,GAC3BlB,cAAc;IAClBD,OAAO,EAAG7D,KAAK,IAAK;MAClB;MACA;MACA,IAAI+D,GAAG,EAAEA,GAAG,CAAChH,UAAU,CAACuB,KAAK,GAAG,IAAAC,iCAAU,EAACL,KAAK,EAAEM,oBAAY,CAAC;MAC/D,IAAAsB,6BAAY,EAAClD,SAAS,EAAE,CAAC,CAAC;MAC1B;MACA;MACA;MACA,IAAIgH,SAAS,KAAKhG,SAAS,EAAEmG,GAAG,EAAE9F,WAAW,CAACC,KAAK,CAAC;MACpD2F,OAAO,GAAG7D,KAAK,CAAC;IAClB;IACA;IACA;IACA;IAAA;IACA3D,KAAK,EACH,OAAOA,KAAK,KAAK,UAAU,GACtB4I,KAAK,IAAK,CAACzC,MAAM,CAAC0C,MAAM,EAAE7I,KAAK,CAAC4I,KAAK,CAAC,CAAC,GACxC,CAACzC,MAAM,CAAC0C,MAAM,EAAE7I,KAAK,CAC1B;IAAAT,QAAA,eAED,IAAAzB,WAAA,CAAAmI,IAAA,EAACzI,sBAAA,CAAAiB,OAAQ,CAACyH,IAAI;MAAClG,KAAK,EAAE,CAACmG,MAAM,CAAC2C,OAAO,EAAER,QAAQ,CAAE;MAAA/I,QAAA,gBAI/C,IAAAzB,WAAA,CAAAmI,IAAA,EAAC3I,YAAA,CAAA4I,IAAI;QAAA3G,QAAA,gBACH,IAAAzB,WAAA,CAAAuI,GAAA,EAACgB,KAAK;UAACC,IAAI,EAAEA,IAAK;UAACyB,IAAI,EAAEpJ,KAAK,CAAC0I,YAAa;UAACW,IAAI,EAAEC,iBAAU;UAACC,MAAM,EAAE;QAAM,CAAE,CAAC,eAC/E,IAAApL,WAAA,CAAAuI,GAAA,EAAC7I,sBAAA,CAAAiB,OAAQ,CAACyH,IAAI;UAAClG,KAAK,EAAE,CAACmJ,uBAAU,CAACC,YAAY,EAAEjD,MAAM,CAACkD,UAAU,EAAEvB,gBAAgB,CAAE;UAAAvI,QAAA,eACnF,IAAAzB,WAAA,CAAAuI,GAAA,EAACgB,KAAK;YAACC,IAAI,EAAEA,IAAK;YAACyB,IAAI,EAAEpJ,KAAK,CAACyI,UAAW;YAACY,IAAI,EAAEC,iBAAU;YAACC,MAAM;UAAA,CAAE;QAAC,CACxD,CAAC;MAAA,CACZ,CAAC,eAEP,IAAApL,WAAA,CAAAuI,GAAA,EAAC7I,sBAAA,CAAAiB,OAAQ,CAAC6K,IAAI;QAACC,aAAa,EAAE,CAAE;QAACvJ,KAAK,EAAE,CAACmG,MAAM,CAACwC,KAAK,EAAEV,UAAU,CAAE;QAAA1I,QAAA,EAChE+H,IAAI,CAACqB;MAAK,CACE,CAAC;IAAA,CACH;EAAC,CACP,CAAC;AAEhB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASa,YAAYA,CAC1BnK,OAA0C,EAC1CC,IAAyC,EACzC;EACA,MAAMmK,MAAM,GAAIC,KAAkB,iBAAK,IAAA5L,WAAA,CAAAuI,GAAA,EAACjH,UAAU;IAAA,GAAKsK,KAAK;IAAErK,OAAO,EAAEA,OAAQ;IAACC,IAAI,EAAEA;EAAK,CAAE,CAAC;EAC9FmK,MAAM,CAACE,WAAW,GAAG,QAAQ;EAC7B,OAAOF,MAAM;AACf;;AAEA;AACO,SAASG,kBAAkBA,CAACvC,KAAsC,EAAE;EACzE,MAAMwC,YAAY,GAAIH,KAAwB,iBAAK,IAAA5L,WAAA,CAAAuI,GAAA,EAACe,gBAAgB;IAAA,GAAKsC,KAAK;IAAErC,KAAK,EAAEA;EAAM,CAAE,CAAC;EAChGwC,YAAY,CAACF,WAAW,GAAG,cAAc;EACzC,OAAOE,YAAY;AACrB;AAEA,MAAM1D,MAAM,GAAGgD,uBAAU,CAACW,MAAM,CAAC;EAC/B1D,IAAI,EAAE;IACJI,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRb,MAAM,EAAE,CAAC;IACT;IACA;IACAkE,aAAa,EAAE;EACjB,CAAC;EACDnD,OAAO,EAAE;IACPoD,gBAAgB,EAAExI,kBAAU;IAC5BuI,aAAa,EAAE;EACjB,CAAC;EACDhD,SAAS,EAAE;IACTP,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACPwD,WAAW,EAAE;EACf,CAAC;EACD/C,OAAO,EAAE;IACPgD,IAAI,EAAE,CAAC;IACPC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,iBAAiB,EAAErH;EACrB,CAAC;EACD6F,MAAM,EAAE;IACNqB,IAAI,EAAE,CAAC;IACPE,UAAU,EAAE,QAAQ;IACpBE,cAAc,EAAE;EAClB,CAAC;EACDxB,OAAO,EAAE;IACP/C,SAAS,EAAE,SAAS;IACpBqE,UAAU,EAAE,QAAQ;IACpBG,UAAU,EAAEC,kBAAU;IACtBC,QAAQ,EAAE;EACZ,CAAC;EACDpB,UAAU,EAAE;IACVe,UAAU,EAAE,QAAQ;IACpBE,cAAc,EAAE;EAClB,CAAC;EACD3B,KAAK,EAAE;IACL+B,QAAQ,EAAEC,uBAAe;IACzBC,UAAU,EAAE,KAAK;IACjBC,SAAS,EAAEC;EACb;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -44,6 +44,8 @@ function TabBarBody({
|
|
|
44
44
|
onIndexLongPress,
|
|
45
45
|
theme: themeOverrides,
|
|
46
46
|
haptics = true,
|
|
47
|
+
blur = true,
|
|
48
|
+
maxWidth,
|
|
47
49
|
style,
|
|
48
50
|
...viewProps
|
|
49
51
|
}) {
|
|
@@ -60,6 +62,19 @@ function TabBarBody({
|
|
|
60
62
|
const theme = useTabBarTheme(themeOverrides);
|
|
61
63
|
const impact = useHaptics();
|
|
62
64
|
|
|
65
|
+
// The pill's OUTER width (the box the animated minimize inset is applied
|
|
66
|
+
// inside), and the single source of truth for it: the wrap's own layout, the
|
|
67
|
+
// highlight geometry and the `indexAtX` scrub worklet all derive from this one
|
|
68
|
+
// number. They have to, or a tap lands on a tab the highlight is not under —
|
|
69
|
+
// the exact failure `maxWidth` exists to prevent, since narrowing the bar from
|
|
70
|
+
// the outside with a `style` override moves only the pixels.
|
|
71
|
+
//
|
|
72
|
+
// Unconstrained it is what the stretched wrap already measures
|
|
73
|
+
// (`windowWidth - BAR_MARGIN * 2`), so an existing consumer's geometry is
|
|
74
|
+
// unchanged to the pixel. `maxWidth` is a ceiling, never a floor: on a window
|
|
75
|
+
// narrower than it, the bar stays full-bleed.
|
|
76
|
+
const barOuterWidth = maxWidth === undefined ? windowWidth - BAR_MARGIN * 2 : Math.min(windowWidth - BAR_MARGIN * 2, maxWidth);
|
|
77
|
+
|
|
63
78
|
// Picker-style tick while the highlight crosses tab boundaries mid-drag.
|
|
64
79
|
// `useHaptics` already no-ops on web, when the optional `expo-haptics` peer
|
|
65
80
|
// is absent, and when a `BloomHapticsProvider` has haptics turned off — so
|
|
@@ -100,7 +115,13 @@ function TabBarBody({
|
|
|
100
115
|
'worklet';
|
|
101
116
|
|
|
102
117
|
const sideInset = interpolate(minimizedValue, [0, 1], [0, MINIMIZED_INSET], Extrapolation.CLAMP);
|
|
103
|
-
|
|
118
|
+
// `event.x` is measured from the left edge of the view the detector is
|
|
119
|
+
// attached to — the animated pill itself, NOT the window and not the wrap
|
|
120
|
+
// around it. Its width is therefore the outer width minus the two
|
|
121
|
+
// animated margins, which is exactly what this computes, constrained or
|
|
122
|
+
// not. (Margins sit outside a view's own box, so x = 0 is the pill's left
|
|
123
|
+
// border edge either way.)
|
|
124
|
+
const barWidth = barOuterWidth - sideInset * 2;
|
|
104
125
|
const itemWidth = (barWidth - ROW_PAD_H * 2) / tabCount;
|
|
105
126
|
const raw = (x - ROW_PAD_H) / itemWidth - 0.5;
|
|
106
127
|
return Math.min(Math.max(raw, 0), tabCount - 1);
|
|
@@ -156,7 +177,7 @@ function TabBarBody({
|
|
|
156
177
|
runOnJS(longPressIndex)(Math.round(indexAtX(event.x, progress.value)));
|
|
157
178
|
});
|
|
158
179
|
return Gesture.Race(pan, tap, longPress);
|
|
159
|
-
}, [
|
|
180
|
+
}, [barOuterWidth, tabCount, selectIndex, hasLongPress, longPressIndex, tick, isDragging, lastTicked, slideIndex, minimized, progress]);
|
|
160
181
|
|
|
161
182
|
// CRITICAL — every shared value and every scalar a mapper READS must appear
|
|
162
183
|
// in its dependency array. On web WITHOUT the react-native-worklets babel
|
|
@@ -207,7 +228,9 @@ function TabBarBody({
|
|
|
207
228
|
const barHeight = interpolate(progress.value, [0, 1], [EXPANDED_HEIGHT, MINIMIZED_HEIGHT], Extrapolation.CLAMP);
|
|
208
229
|
const height = interpolate(progress.value, [0, 1], [HIGHLIGHT_EXPANDED, HIGHLIGHT_MINIMIZED], Extrapolation.CLAMP);
|
|
209
230
|
const sideInset = interpolate(progress.value, [0, 1], [0, MINIMIZED_INSET], Extrapolation.CLAMP);
|
|
210
|
-
|
|
231
|
+
// Same `barOuterWidth` the scrub worklet resolves an index from — see the
|
|
232
|
+
// note where it is computed.
|
|
233
|
+
const barWidth = barOuterWidth - sideInset * 2;
|
|
211
234
|
const itemWidth = (barWidth - ROW_PAD_H * 2) / tabCount;
|
|
212
235
|
return {
|
|
213
236
|
height,
|
|
@@ -218,11 +241,27 @@ function TabBarBody({
|
|
|
218
241
|
translateX: ROW_PAD_H + itemWidth * slideIndex.value
|
|
219
242
|
}]
|
|
220
243
|
};
|
|
221
|
-
}, [progress, slideIndex,
|
|
244
|
+
}, [progress, slideIndex, barOuterWidth, tabCount]);
|
|
222
245
|
|
|
223
246
|
// Shared with `useTabBarFootprint`, so a consumer accounting for the bar in
|
|
224
247
|
// its own layout can never drift from where the bar actually sits.
|
|
225
248
|
const bottomOffset = tabBarBottomGap(insets.bottom);
|
|
249
|
+
|
|
250
|
+
// How centring and the animated inset compose: centring is STATIC and belongs
|
|
251
|
+
// to the wrap, the inset stays ANIMATED on the pill inside it. The wrap is
|
|
252
|
+
// centred once by layout at a definite width, and the pill's two equal
|
|
253
|
+
// margins keep it centred within that wrap at every point of the minimize
|
|
254
|
+
// animation — neither has to know about the other. Centring the animated view
|
|
255
|
+
// itself would instead mean `alignSelf: 'center'` on a node with no width of
|
|
256
|
+
// its own (its width comes from those margins), which Yoga then sizes from its
|
|
257
|
+
// CONTENT rather than from the constraint.
|
|
258
|
+
//
|
|
259
|
+
// Applied only when `maxWidth` is set: with no width and no `alignSelf` the
|
|
260
|
+
// wrap stretches, which is the original full-bleed behaviour.
|
|
261
|
+
const constrainedWrapStyle = maxWidth === undefined ? null : {
|
|
262
|
+
width: barOuterWidth,
|
|
263
|
+
alignSelf: 'center'
|
|
264
|
+
};
|
|
226
265
|
const barContext = useMemo(() => ({
|
|
227
266
|
slideIndex,
|
|
228
267
|
isDragging,
|
|
@@ -233,8 +272,9 @@ function TabBarBody({
|
|
|
233
272
|
return /*#__PURE__*/_jsxs(View, {
|
|
234
273
|
...viewProps,
|
|
235
274
|
style: [styles.root, style],
|
|
236
|
-
children: [/*#__PURE__*/_jsx(Blur, {
|
|
275
|
+
children: [blur !== false && /*#__PURE__*/_jsx(Blur, {
|
|
237
276
|
direction: "bottom",
|
|
277
|
+
intensity: typeof blur === 'object' ? blur.intensity : undefined,
|
|
238
278
|
style: {
|
|
239
279
|
position: 'absolute',
|
|
240
280
|
left: 0,
|
|
@@ -245,7 +285,7 @@ function TabBarBody({
|
|
|
245
285
|
}), /*#__PURE__*/_jsx(View, {
|
|
246
286
|
style: [styles.barWrap, {
|
|
247
287
|
marginBottom: bottomOffset
|
|
248
|
-
}],
|
|
288
|
+
}, constrainedWrapStyle],
|
|
249
289
|
children: /*#__PURE__*/_jsx(GestureDetector, {
|
|
250
290
|
gesture: gesture,
|
|
251
291
|
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Children","createContext","useCallback","useContext","useEffect","useMemo","Pressable","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","Animated","Extrapolation","interpolate","interpolateColor","runOnJS","useAnimatedStyle","useSharedValue","withSpring","useSafeAreaInsets","useHaptics","setMinimized","useMinimizeState","BAR_MARGIN","BLUR_BLEED","EXPANDED_HEIGHT","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","ICON_SIZE","ITEM_GAP","ITEM_PAD_V","LABEL_FONT_SIZE","LONG_PRESS_MIN_DURATION","MINIMIZED_HEIGHT","MINIMIZED_INSET","ROW_PAD_H","SLIDE_SPRING","tabBarBottomGap","useTabBarTheme","jsx","_jsx","jsxs","_jsxs","BarContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","onIndexLongPress","theme","themeOverrides","haptics","style","viewProps","insets","width","windowWidth","minimized","progress","slideIndex","isDragging","lastTicked","tabCount","Math","max","count","impact","tick","selectIndex","index","longPressIndex","hasLongPress","undefined","value","gesture","indexAtX","x","minimizedValue","sideInset","CLAMP","barWidth","itemWidth","raw","min","pan","Pan","activeOffsetX","failOffsetY","onStart","round","onUpdate","event","rounded","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","longPress","LongPress","minDuration","barStyle","height","inset","marginLeft","marginRight","shapeStyle","borderRadius","highlightStyle","barHeight","top","transform","translateX","bottomOffset","bottom","barContext","styles","root","direction","position","left","right","barWrap","marginBottom","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","activeTint","inactiveTint","boxStyle","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","active","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","marginHorizontal","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","alignSelf","paddingTop","overflow","fontSize","fontWeight","marginTop"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Children","createContext","useCallback","useContext","useEffect","useMemo","Pressable","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","Animated","Extrapolation","interpolate","interpolateColor","runOnJS","useAnimatedStyle","useSharedValue","withSpring","useSafeAreaInsets","useHaptics","setMinimized","useMinimizeState","BAR_MARGIN","BLUR_BLEED","EXPANDED_HEIGHT","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","ICON_SIZE","ITEM_GAP","ITEM_PAD_V","LABEL_FONT_SIZE","LONG_PRESS_MIN_DURATION","MINIMIZED_HEIGHT","MINIMIZED_INSET","ROW_PAD_H","SLIDE_SPRING","tabBarBottomGap","useTabBarTheme","jsx","_jsx","jsxs","_jsxs","BarContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","onIndexLongPress","theme","themeOverrides","haptics","blur","maxWidth","style","viewProps","insets","width","windowWidth","minimized","progress","slideIndex","isDragging","lastTicked","tabCount","Math","max","count","impact","barOuterWidth","undefined","min","tick","selectIndex","index","longPressIndex","hasLongPress","value","gesture","indexAtX","x","minimizedValue","sideInset","CLAMP","barWidth","itemWidth","raw","pan","Pan","activeOffsetX","failOffsetY","onStart","round","onUpdate","event","rounded","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","longPress","LongPress","minDuration","barStyle","height","inset","marginLeft","marginRight","shapeStyle","borderRadius","highlightStyle","barHeight","top","transform","translateX","bottomOffset","bottom","constrainedWrapStyle","alignSelf","barContext","styles","root","direction","intensity","position","left","right","barWrap","marginBottom","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","activeTint","inactiveTint","boxStyle","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","active","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","marginHorizontal","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","paddingTop","overflow","fontSize","fontWeight","marginTop"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabBarBase.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/TabBarBase.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAgBf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAiBL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"TabBarBase.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/TabBarBase.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAgBf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAiBL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AA4d3E;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,IAAI,EAAE,aAAa,CAAC,oBAAoB,CAAC;YAElB,WAAW;;EAGnC;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC;YAC1C,iBAAiB;;EAG/C"}
|
|
@@ -104,6 +104,46 @@ export type TabBarProps = ViewProps & {
|
|
|
104
104
|
* optional `expo-haptics` peer is absent.
|
|
105
105
|
*/
|
|
106
106
|
haptics?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* The progressive blur rising from the bottom edge of the screen behind the
|
|
109
|
+
* pill. Defaults to `true`; `{ intensity }` tunes its strength.
|
|
110
|
+
*
|
|
111
|
+
* Pass `false` to remove it entirely — no blur, and no node left behind. The
|
|
112
|
+
* band is tall (the bar's own bottom gap plus its expanded height plus the
|
|
113
|
+
* bleed above it, 114pt at a zero bottom inset) and full-bleed, so anything a
|
|
114
|
+
* screen floats near the bottom edge — a video scrubber, a FAB — sits INSIDE
|
|
115
|
+
* it and is blurred. That cannot be undone from the outside: `zIndex` only
|
|
116
|
+
* orders siblings within one stacking context, and a screen's FAB is inside
|
|
117
|
+
* an earlier sibling of the bar's host, so no z-order a consumer can write
|
|
118
|
+
* lifts it above this band. Turning the blur off is the only fix that does
|
|
119
|
+
* not also change where the FAB paints relative to everything else.
|
|
120
|
+
*
|
|
121
|
+
* On native the band is ten stacked `expo-blur` layers plus a tail gradient;
|
|
122
|
+
* on web it is one masked `backdrop-filter`. `false` skips both.
|
|
123
|
+
*/
|
|
124
|
+
blur?: boolean | {
|
|
125
|
+
intensity?: number;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Maximum width of the pill, in points. No default — omit it and the bar
|
|
129
|
+
* spans the window exactly as it always has.
|
|
130
|
+
*
|
|
131
|
+
* A CEILING, never a floor: on a window narrower than this the bar keeps its
|
|
132
|
+
* full-bleed width, so a phone layout is untouched by any value big enough to
|
|
133
|
+
* matter on a tablet. When it binds, the pill is constrained to this width and
|
|
134
|
+
* CENTRED, and the ITEM geometry follows it — the item width, the sliding
|
|
135
|
+
* highlight's position and the tap/scrub hit-testing all derive from the same
|
|
136
|
+
* constrained width, so a tap still lands on the tab it is visibly over.
|
|
137
|
+
*
|
|
138
|
+
* That last part is why this cannot be done from the outside. Narrowing the
|
|
139
|
+
* bar with a `style` override moves the pixels only: the highlight and the
|
|
140
|
+
* scrub worklet would still divide the WINDOW width by the tab count, leaving
|
|
141
|
+
* the highlight sized and positioned for a bar that is no longer there. On an
|
|
142
|
+
* iPad the unconstrained bar is the reason to reach for this at all — 810pt at
|
|
143
|
+
* 11" portrait, 1342pt in landscape, leaving 21pt glyphs adrift in cells
|
|
144
|
+
* hundreds of points wide.
|
|
145
|
+
*/
|
|
146
|
+
maxWidth?: number;
|
|
107
147
|
};
|
|
108
148
|
export type TabBarButtonProps = PressableProps & {
|
|
109
149
|
item: TabBarItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabBarBase.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/TabBarBase.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAgBf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAiBL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"TabBarBase.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/TabBarBase.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAgBf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAiBL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AA4d3E;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,IAAI,EAAE,aAAa,CAAC,oBAAoB,CAAC;YAElB,WAAW;;EAGnC;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC;YAC1C,iBAAiB;;EAG/C"}
|
|
@@ -104,6 +104,46 @@ export type TabBarProps = ViewProps & {
|
|
|
104
104
|
* optional `expo-haptics` peer is absent.
|
|
105
105
|
*/
|
|
106
106
|
haptics?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* The progressive blur rising from the bottom edge of the screen behind the
|
|
109
|
+
* pill. Defaults to `true`; `{ intensity }` tunes its strength.
|
|
110
|
+
*
|
|
111
|
+
* Pass `false` to remove it entirely — no blur, and no node left behind. The
|
|
112
|
+
* band is tall (the bar's own bottom gap plus its expanded height plus the
|
|
113
|
+
* bleed above it, 114pt at a zero bottom inset) and full-bleed, so anything a
|
|
114
|
+
* screen floats near the bottom edge — a video scrubber, a FAB — sits INSIDE
|
|
115
|
+
* it and is blurred. That cannot be undone from the outside: `zIndex` only
|
|
116
|
+
* orders siblings within one stacking context, and a screen's FAB is inside
|
|
117
|
+
* an earlier sibling of the bar's host, so no z-order a consumer can write
|
|
118
|
+
* lifts it above this band. Turning the blur off is the only fix that does
|
|
119
|
+
* not also change where the FAB paints relative to everything else.
|
|
120
|
+
*
|
|
121
|
+
* On native the band is ten stacked `expo-blur` layers plus a tail gradient;
|
|
122
|
+
* on web it is one masked `backdrop-filter`. `false` skips both.
|
|
123
|
+
*/
|
|
124
|
+
blur?: boolean | {
|
|
125
|
+
intensity?: number;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Maximum width of the pill, in points. No default — omit it and the bar
|
|
129
|
+
* spans the window exactly as it always has.
|
|
130
|
+
*
|
|
131
|
+
* A CEILING, never a floor: on a window narrower than this the bar keeps its
|
|
132
|
+
* full-bleed width, so a phone layout is untouched by any value big enough to
|
|
133
|
+
* matter on a tablet. When it binds, the pill is constrained to this width and
|
|
134
|
+
* CENTRED, and the ITEM geometry follows it — the item width, the sliding
|
|
135
|
+
* highlight's position and the tap/scrub hit-testing all derive from the same
|
|
136
|
+
* constrained width, so a tap still lands on the tab it is visibly over.
|
|
137
|
+
*
|
|
138
|
+
* That last part is why this cannot be done from the outside. Narrowing the
|
|
139
|
+
* bar with a `style` override moves the pixels only: the highlight and the
|
|
140
|
+
* scrub worklet would still divide the WINDOW width by the tab count, leaving
|
|
141
|
+
* the highlight sized and positioned for a bar that is no longer there. On an
|
|
142
|
+
* iPad the unconstrained bar is the reason to reach for this at all — 810pt at
|
|
143
|
+
* 11" portrait, 1342pt in landscape, leaving 21pt glyphs adrift in cells
|
|
144
|
+
* hundreds of points wide.
|
|
145
|
+
*/
|
|
146
|
+
maxWidth?: number;
|
|
107
147
|
};
|
|
108
148
|
export type TabBarButtonProps = PressableProps & {
|
|
109
149
|
item: TabBarItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tab-bar/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render } from '@testing-library/react-native';
|
|
3
|
+
import type { ReactTestRendererJSON, ReactTestRendererNode } from 'react-test-renderer';
|
|
4
|
+
|
|
5
|
+
import { BloomThemeProvider } from '../theme/BloomThemeProvider';
|
|
6
|
+
import { TabBar, TabBarButton } from '../tab-bar';
|
|
7
|
+
import { BLUR_BLEED, EXPANDED_HEIGHT, tabBarBottomGap } from '../tab-bar/shared';
|
|
8
|
+
import type { TabBarItem, TabBarProps } from '../tab-bar/types';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `blur` — turning the bar's bottom band off, and tuning it.
|
|
12
|
+
*
|
|
13
|
+
* The band is full-bleed and 114pt tall at a zero bottom inset (the bar's own
|
|
14
|
+
* bottom gap + its expanded height + the bleed above it), so ANY chrome a screen
|
|
15
|
+
* floats near the bottom edge sits inside it and is blurred: a video scrubber, a
|
|
16
|
+
* compose FAB, a QR-scan button. No consumer can escape it from the outside —
|
|
17
|
+
* `zIndex` orders siblings within one stacking context, and a screen's FAB lives
|
|
18
|
+
* inside an earlier sibling of the bar's host — so the prop is the only fix that
|
|
19
|
+
* does not also change where that FAB paints relative to everything else.
|
|
20
|
+
*
|
|
21
|
+
* Asserted end to end through the REAL `TabBar` (jest has no platform-extension
|
|
22
|
+
* resolution, so `../tab-bar` binds the neutral surface and the NATIVE
|
|
23
|
+
* `ProgressiveBlur`, whose ten `BlurView`s are what the `expo-blur` mock
|
|
24
|
+
* renders). That makes these assertions about the shipped composition rather
|
|
25
|
+
* than about a stand-in wired up by the test.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
const ITEMS: TabBarItem[] = [
|
|
29
|
+
{ name: 'home', label: 'Home', icon: null },
|
|
30
|
+
{ name: 'search', label: 'Search', icon: null },
|
|
31
|
+
{ name: 'you', label: 'You', icon: null },
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
/** Insets are all zero under the safe-area mock, so this is the real 114. */
|
|
35
|
+
const BAND_HEIGHT = tabBarBottomGap(0) + EXPANDED_HEIGHT + BLUR_BLEED;
|
|
36
|
+
|
|
37
|
+
/** The fork's own default, applied when nothing overrides it. */
|
|
38
|
+
const DEFAULT_INTENSITY = 5;
|
|
39
|
+
|
|
40
|
+
function renderBar(blur?: TabBarProps['blur']) {
|
|
41
|
+
return render(
|
|
42
|
+
<BloomThemeProvider mode="light" colorPreset="teal">
|
|
43
|
+
<TabBar activeIndex={0} blur={blur}>
|
|
44
|
+
{ITEMS.map((item, index) => (
|
|
45
|
+
<TabBarButton key={item.name} item={item} index={index} />
|
|
46
|
+
))}
|
|
47
|
+
</TabBar>
|
|
48
|
+
</BloomThemeProvider>,
|
|
49
|
+
).toJSON();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** What `toJSON()` hands back — a node, several, or nothing rendered at all. */
|
|
53
|
+
type RenderedTree = ReactTestRendererNode | ReactTestRendererNode[] | null;
|
|
54
|
+
|
|
55
|
+
function isJsonNode(node: ReactTestRendererNode): node is ReactTestRendererJSON {
|
|
56
|
+
return typeof node !== 'string';
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Every HOST node in the rendered tree — composites collapse to what they render. */
|
|
60
|
+
function hostNodes(tree: RenderedTree): ReactTestRendererJSON[] {
|
|
61
|
+
if (tree === null) return [];
|
|
62
|
+
const roots = (Array.isArray(tree) ? tree : [tree]).filter(isJsonNode);
|
|
63
|
+
return roots.flatMap((node) => [node, ...hostNodes(node.children ?? [])]);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function flattenStyle(style: unknown): Record<string, unknown> {
|
|
67
|
+
const out: Record<string, unknown> = {};
|
|
68
|
+
const visit = (value: unknown): void => {
|
|
69
|
+
if (Array.isArray(value)) value.forEach(visit);
|
|
70
|
+
else if (value && typeof value === 'object') Object.assign(out, value);
|
|
71
|
+
};
|
|
72
|
+
visit(style);
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The bar's outermost view — `styles.root`, the absolutely-positioned
|
|
78
|
+
* `box-none` layer the blur and the pill wrap are the two children of.
|
|
79
|
+
*/
|
|
80
|
+
function barRoot(tree: RenderedTree): ReactTestRendererJSON {
|
|
81
|
+
const found = hostNodes(tree).find((node) => {
|
|
82
|
+
const style = flattenStyle(node.props.style);
|
|
83
|
+
return style.position === 'absolute' && style.pointerEvents === 'box-none';
|
|
84
|
+
});
|
|
85
|
+
if (!found) throw new Error('The bar rendered no absolute box-none root');
|
|
86
|
+
return found;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function children(node: ReactTestRendererJSON): ReactTestRendererJSON[] {
|
|
90
|
+
return (node.children ?? []).filter(isJsonNode);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function blurLayers(tree: RenderedTree): ReactTestRendererJSON[] {
|
|
94
|
+
return hostNodes(tree).filter((node) => node.type === 'BlurView');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function intensities(tree: RenderedTree): unknown[] {
|
|
98
|
+
return [...new Set(blurLayers(tree).map((layer) => layer.props.intensity))];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
describe('TabBar blur', () => {
|
|
102
|
+
it('renders the band by default, behind the pill', () => {
|
|
103
|
+
const tree = renderBar();
|
|
104
|
+
expect(blurLayers(tree).length).toBeGreaterThan(0);
|
|
105
|
+
|
|
106
|
+
// FIRST child, so it paints behind the pill rather than over it.
|
|
107
|
+
const band = children(barRoot(tree))[0];
|
|
108
|
+
const style = flattenStyle(band?.props.style);
|
|
109
|
+
expect(style.position).toBe('absolute');
|
|
110
|
+
expect(style.bottom).toBe(0);
|
|
111
|
+
// Full-bleed, and tall enough to reach anything a screen floats down here.
|
|
112
|
+
expect(style.left).toBe(0);
|
|
113
|
+
expect(style.right).toBe(0);
|
|
114
|
+
expect(style.height).toBe(BAND_HEIGHT);
|
|
115
|
+
expect(BAND_HEIGHT).toBe(114);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('treats blur={true} as exactly the default', () => {
|
|
119
|
+
// The prop defaults to `true`, so an app that never heard of it and one that
|
|
120
|
+
// asks for the blur explicitly must render the identical tree.
|
|
121
|
+
expect(JSON.stringify(renderBar(true))).toBe(JSON.stringify(renderBar()));
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it('renders no blur at all with blur={false}', () => {
|
|
125
|
+
expect(blurLayers(renderBar(false))).toEqual([]);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('leaves no empty node behind with blur={false}', () => {
|
|
129
|
+
// Not merely "invisible": an absolutely-positioned 114pt view that renders
|
|
130
|
+
// nothing is still a node, still a rect, and still something to reason about
|
|
131
|
+
// when debugging why a FAB is not reachable.
|
|
132
|
+
expect(children(barRoot(renderBar())).length).toBe(2);
|
|
133
|
+
expect(children(barRoot(renderBar(false))).length).toBe(1);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('keeps the bar itself when the blur is off', () => {
|
|
137
|
+
// Guards the obvious over-reach: `false` removes the band, not the pill.
|
|
138
|
+
const tabs = hostNodes(renderBar(false)).filter(
|
|
139
|
+
(node) => node.props.accessibilityRole === 'tab',
|
|
140
|
+
);
|
|
141
|
+
expect(tabs).toHaveLength(ITEMS.length);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('tunes the strength with the object form', () => {
|
|
145
|
+
expect(intensities(renderBar({ intensity: 12 }))).toEqual([12]);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('keeps the fork default for an object with no intensity', () => {
|
|
149
|
+
// `{}` says "blurred, default strength" — it must not resolve to 0, which
|
|
150
|
+
// would read as "off" while still paying for ten composited layers.
|
|
151
|
+
expect(intensities(renderBar({}))).toEqual([DEFAULT_INTENSITY]);
|
|
152
|
+
expect(intensities(renderBar())).toEqual([DEFAULT_INTENSITY]);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { act, render } from '@testing-library/react-native';
|
|
3
|
+
import type { ReactTestInstance } from 'react-test-renderer';
|
|
4
|
+
|
|
5
|
+
import { BloomThemeProvider } from '../theme/BloomThemeProvider';
|
|
6
|
+
import { TabBar, TabBarButton, TabBarMinimizeProvider, useMinimizeState } from '../tab-bar';
|
|
7
|
+
import type { MinimizeState } from '../tab-bar/minimize-context';
|
|
8
|
+
import { BAR_MARGIN, MINIMIZED_INSET, ROW_PAD_H } from '../tab-bar/shared';
|
|
9
|
+
import type { TabBarItem } from '../tab-bar/types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* `maxWidth` — constraining the pill on a tablet, and keeping every piece of
|
|
13
|
+
* geometry on the SAME width while doing it.
|
|
14
|
+
*
|
|
15
|
+
* Unconstrained, the bar spans the window: 810pt at iPad 11" portrait, 1342pt
|
|
16
|
+
* in landscape, 21pt glyphs adrift in cells hundreds of points wide. A consumer
|
|
17
|
+
* cannot fix that from the outside, and the reason is what this file is really
|
|
18
|
+
* about: narrowing the bar with a `style` override moves the PIXELS only, while
|
|
19
|
+
* the highlight's width, its `translateX` and the tap/scrub hit-testing all keep
|
|
20
|
+
* dividing the WINDOW width by the tab count. The highlight then sits under one
|
|
21
|
+
* tab and a tap at the same point selects another.
|
|
22
|
+
*
|
|
23
|
+
* So the load-bearing test here is not "the bar got narrower" — it is that a tap
|
|
24
|
+
* at the centre of the slot the RENDERED highlight occupies selects that slot's
|
|
25
|
+
* tab, with the item width read back out of the rendered highlight rather than
|
|
26
|
+
* recomputed by the test. Layout and hit-testing are asserted against each
|
|
27
|
+
* other; nothing but agreement between the two can make it pass.
|
|
28
|
+
*
|
|
29
|
+
* Two pieces of the environment are replaced to get there:
|
|
30
|
+
*
|
|
31
|
+
* 1. `useWindowDimensions`, so the window is a tablet's rather than the 375pt
|
|
32
|
+
* the react-native mock reports — with a 375pt window every plausible
|
|
33
|
+
* `maxWidth` is inert and the prop could never be exercised.
|
|
34
|
+
* 2. `react-native-gesture-handler`, with the same RECORDING mock
|
|
35
|
+
* `TabBarLongPress.test.tsx` uses: the shared mock discards every registered
|
|
36
|
+
* callback, and the bar's gesture detector is the only path a real tap takes
|
|
37
|
+
* (it consumes the touches, which is what makes scrubbing possible).
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/** iPad 11" portrait, the window that produced the report. */
|
|
41
|
+
const TABLET_WIDTH = 1024;
|
|
42
|
+
/** Must be `mock`-prefixed to be readable from the hoisted factory below. */
|
|
43
|
+
let mockWindowWidth = TABLET_WIDTH;
|
|
44
|
+
|
|
45
|
+
jest.mock('react-native', () => {
|
|
46
|
+
const actual = jest.requireActual('react-native');
|
|
47
|
+
return {
|
|
48
|
+
...actual,
|
|
49
|
+
useWindowDimensions: () => ({
|
|
50
|
+
width: mockWindowWidth,
|
|
51
|
+
height: 1366,
|
|
52
|
+
scale: 2,
|
|
53
|
+
fontScale: 1,
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
interface MockGestureEvent {
|
|
59
|
+
x: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface MockGesture {
|
|
63
|
+
kind: string;
|
|
64
|
+
start?: (event: MockGestureEvent) => void;
|
|
65
|
+
update?: (event: MockGestureEvent) => void;
|
|
66
|
+
end?: (event: MockGestureEvent, success: boolean) => void;
|
|
67
|
+
finalize?: () => void;
|
|
68
|
+
/** Members of a composed `Gesture.Race(…)`; empty for a leaf gesture. */
|
|
69
|
+
members: MockGesture[];
|
|
70
|
+
activeOffsetX: (range: number[]) => MockGesture;
|
|
71
|
+
failOffsetY: (range: number[]) => MockGesture;
|
|
72
|
+
maxDistance: (px: number) => MockGesture;
|
|
73
|
+
maxDuration: (ms: number) => MockGesture;
|
|
74
|
+
minDuration: (ms: number) => MockGesture;
|
|
75
|
+
onStart: (worklet: (event: MockGestureEvent) => void) => MockGesture;
|
|
76
|
+
onUpdate: (worklet: (event: MockGestureEvent) => void) => MockGesture;
|
|
77
|
+
onEnd: (worklet: (event: MockGestureEvent, success: boolean) => void) => MockGesture;
|
|
78
|
+
onFinalize: (worklet: () => void) => MockGesture;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const mockGestures: MockGesture[] = [];
|
|
82
|
+
|
|
83
|
+
jest.mock('react-native-gesture-handler', () => {
|
|
84
|
+
const build = (kind: string): MockGesture => {
|
|
85
|
+
const gesture: MockGesture = {
|
|
86
|
+
kind,
|
|
87
|
+
members: [],
|
|
88
|
+
activeOffsetX: () => gesture,
|
|
89
|
+
failOffsetY: () => gesture,
|
|
90
|
+
maxDistance: () => gesture,
|
|
91
|
+
maxDuration: () => gesture,
|
|
92
|
+
minDuration: () => gesture,
|
|
93
|
+
onStart: (worklet) => {
|
|
94
|
+
gesture.start = worklet;
|
|
95
|
+
return gesture;
|
|
96
|
+
},
|
|
97
|
+
onUpdate: (worklet) => {
|
|
98
|
+
gesture.update = worklet;
|
|
99
|
+
return gesture;
|
|
100
|
+
},
|
|
101
|
+
onEnd: (worklet) => {
|
|
102
|
+
gesture.end = worklet;
|
|
103
|
+
return gesture;
|
|
104
|
+
},
|
|
105
|
+
onFinalize: (worklet) => {
|
|
106
|
+
gesture.finalize = worklet;
|
|
107
|
+
return gesture;
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
mockGestures.push(gesture);
|
|
111
|
+
return gesture;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
Gesture: {
|
|
116
|
+
Pan: () => build('Pan'),
|
|
117
|
+
Tap: () => build('Tap'),
|
|
118
|
+
LongPress: () => build('LongPress'),
|
|
119
|
+
Race: (...members: MockGesture[]) => {
|
|
120
|
+
const race = build('Race');
|
|
121
|
+
race.members.push(...members);
|
|
122
|
+
return race;
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
GestureDetector: ({ children }: { children: React.ReactNode }) => children,
|
|
126
|
+
GestureHandlerRootView: ({ children }: { children: React.ReactNode }) => children,
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const ITEMS: TabBarItem[] = [
|
|
131
|
+
{ name: 'home', label: 'Home', icon: null },
|
|
132
|
+
{ name: 'search', label: 'Search', icon: null },
|
|
133
|
+
{ name: 'you', label: 'You', icon: null },
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
/** Comfortably narrower than the tablet window, so the constraint binds. */
|
|
137
|
+
const MAX_WIDTH = 480;
|
|
138
|
+
|
|
139
|
+
/** Captures the shared minimize progress so a test can drive the bar minimized. */
|
|
140
|
+
function MinimizeProbe({ onState }: { onState: (state: MinimizeState) => void }) {
|
|
141
|
+
onState(useMinimizeState());
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function Tree({
|
|
146
|
+
maxWidth,
|
|
147
|
+
onIndexChange,
|
|
148
|
+
onState,
|
|
149
|
+
}: {
|
|
150
|
+
maxWidth?: number;
|
|
151
|
+
onIndexChange?: (index: number) => void;
|
|
152
|
+
onState?: (state: MinimizeState) => void;
|
|
153
|
+
}) {
|
|
154
|
+
return (
|
|
155
|
+
<BloomThemeProvider mode="light" colorPreset="teal">
|
|
156
|
+
<TabBarMinimizeProvider>
|
|
157
|
+
{onState ? <MinimizeProbe onState={onState} /> : null}
|
|
158
|
+
<TabBar activeIndex={0} maxWidth={maxWidth} onIndexChange={onIndexChange}>
|
|
159
|
+
{ITEMS.map((item, index) => (
|
|
160
|
+
<TabBarButton key={item.name} item={item} index={index} />
|
|
161
|
+
))}
|
|
162
|
+
</TabBar>
|
|
163
|
+
</TabBarMinimizeProvider>
|
|
164
|
+
</BloomThemeProvider>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function renderBar(props: {
|
|
169
|
+
maxWidth?: number;
|
|
170
|
+
onIndexChange?: (index: number) => void;
|
|
171
|
+
onState?: (state: MinimizeState) => void;
|
|
172
|
+
}) {
|
|
173
|
+
const utils = render(<Tree {...props} />);
|
|
174
|
+
return { ...utils, resettle: () => utils.rerender(<Tree {...props} />) };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function flattenStyle(style: unknown): Record<string, unknown> {
|
|
178
|
+
const out: Record<string, unknown> = {};
|
|
179
|
+
const visit = (value: unknown): void => {
|
|
180
|
+
if (Array.isArray(value)) value.forEach(visit);
|
|
181
|
+
else if (value && typeof value === 'object') Object.assign(out, value);
|
|
182
|
+
};
|
|
183
|
+
visit(style);
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Flattened style of the one node matching `match`, which must be unique. */
|
|
188
|
+
function styleOf(
|
|
189
|
+
root: ReactTestInstance,
|
|
190
|
+
match: (style: Record<string, unknown>) => boolean,
|
|
191
|
+
what: string,
|
|
192
|
+
): Record<string, unknown> {
|
|
193
|
+
const found = root
|
|
194
|
+
.findAll((node) => typeof node.type === 'string')
|
|
195
|
+
.map((node) => flattenStyle(node.props.style))
|
|
196
|
+
.filter(match);
|
|
197
|
+
if (found.length !== 1) throw new Error(`Expected exactly one ${what}, found ${found.length}`);
|
|
198
|
+
return found[0] as Record<string, unknown>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** `styles.barWrap` — the box the pill's animated margins are applied inside. */
|
|
202
|
+
function wrapStyle(root: ReactTestInstance): Record<string, unknown> {
|
|
203
|
+
return styleOf(root, (style) => style.marginHorizontal === BAR_MARGIN, 'bar wrap');
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* The sliding highlight. The capsule surface also carries
|
|
208
|
+
* `borderCurve: 'continuous'`, but it is an `absoluteFill` with no width of its
|
|
209
|
+
* own — the width IS the highlight's geometry, which is what this reads.
|
|
210
|
+
*/
|
|
211
|
+
function highlightStyle(root: ReactTestInstance): Record<string, unknown> {
|
|
212
|
+
return styleOf(
|
|
213
|
+
root,
|
|
214
|
+
(style) => style.borderCurve === 'continuous' && typeof style.width === 'number',
|
|
215
|
+
'highlight',
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** The item width the bar ACTUALLY rendered, read back off the highlight. */
|
|
220
|
+
function renderedItemWidth(root: ReactTestInstance): number {
|
|
221
|
+
const width = highlightStyle(root).width;
|
|
222
|
+
if (typeof width !== 'number') throw new Error('The highlight rendered no numeric width');
|
|
223
|
+
return width;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** Centre of tab `index`, in the pill's own coordinates (what `event.x` uses). */
|
|
227
|
+
function centreOf(index: number, itemWidth: number): number {
|
|
228
|
+
return ROW_PAD_H + (index + 0.5) * itemWidth;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** The gesture the detector was given — the last race constructed. */
|
|
232
|
+
function member(kind: string): MockGesture {
|
|
233
|
+
const race = mockGestures.filter((gesture) => gesture.kind === 'Race').pop();
|
|
234
|
+
if (!race) throw new Error('The bar composed no gesture race');
|
|
235
|
+
const found = race.members.find((gesture) => gesture.kind === kind);
|
|
236
|
+
if (!found) throw new Error(`No ${kind} gesture in the bar's race`);
|
|
237
|
+
return found;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** A tap that succeeded at `x`, measured from the pill's left edge. */
|
|
241
|
+
function tapAt(x: number) {
|
|
242
|
+
act(() => {
|
|
243
|
+
member('Tap').end?.({ x }, true);
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** Scrub to `x` and release there — the other path through `indexAtX`. */
|
|
248
|
+
function scrubTo(x: number) {
|
|
249
|
+
act(() => {
|
|
250
|
+
member('Pan').start?.({ x });
|
|
251
|
+
member('Pan').update?.({ x });
|
|
252
|
+
member('Pan').finalize?.();
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
beforeEach(() => {
|
|
257
|
+
mockGestures.length = 0;
|
|
258
|
+
mockWindowWidth = TABLET_WIDTH;
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
describe('TabBar maxWidth', () => {
|
|
262
|
+
describe('layout', () => {
|
|
263
|
+
it('leaves the wrap unconstrained when the prop is omitted', () => {
|
|
264
|
+
// No default: an existing consumer's bar must be the same bar, so the wrap
|
|
265
|
+
// keeps stretching to the full window rather than acquiring a width.
|
|
266
|
+
const style = wrapStyle(renderBar({}).UNSAFE_root);
|
|
267
|
+
expect(style.width).toBeUndefined();
|
|
268
|
+
expect(style.alignSelf).toBeUndefined();
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
it('constrains the wrap and centres it', () => {
|
|
272
|
+
const style = wrapStyle(renderBar({ maxWidth: MAX_WIDTH }).UNSAFE_root);
|
|
273
|
+
expect(style.width).toBe(MAX_WIDTH);
|
|
274
|
+
// Centring is static and belongs to the WRAP; the minimize inset stays an
|
|
275
|
+
// animated pair of equal margins on the pill inside it.
|
|
276
|
+
expect(style.alignSelf).toBe('center');
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it('is a ceiling, never a floor', () => {
|
|
280
|
+
// A phone narrower than the value keeps the full-bleed bar, so one value
|
|
281
|
+
// can be passed unconditionally from a shared tab layout.
|
|
282
|
+
mockWindowWidth = 375;
|
|
283
|
+
const style = wrapStyle(renderBar({ maxWidth: MAX_WIDTH }).UNSAFE_root);
|
|
284
|
+
expect(style.width).toBe(375 - BAR_MARGIN * 2);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('never lets the bar exceed the window', () => {
|
|
288
|
+
mockWindowWidth = 900;
|
|
289
|
+
const style = wrapStyle(renderBar({ maxWidth: 4000 }).UNSAFE_root);
|
|
290
|
+
expect(style.width).toBe(900 - BAR_MARGIN * 2);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
describe('geometry', () => {
|
|
295
|
+
it('sizes the highlight from the constrained width, not the window', () => {
|
|
296
|
+
const { UNSAFE_root } = renderBar({ maxWidth: MAX_WIDTH });
|
|
297
|
+
expect(renderedItemWidth(UNSAFE_root)).toBeCloseTo((MAX_WIDTH - ROW_PAD_H * 2) / 3, 5);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it('sizes it from the window when the prop is omitted', () => {
|
|
301
|
+
const { UNSAFE_root } = renderBar({});
|
|
302
|
+
const available = TABLET_WIDTH - BAR_MARGIN * 2;
|
|
303
|
+
expect(renderedItemWidth(UNSAFE_root)).toBeCloseTo((available - ROW_PAD_H * 2) / 3, 5);
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
it('a tap lands on the tab it is visibly over', () => {
|
|
307
|
+
// THE test this prop exists for. The item width comes from the highlight
|
|
308
|
+
// the bar actually rendered, so this asserts layout and hit-testing
|
|
309
|
+
// against each other: derive either one from a different width and the
|
|
310
|
+
// centre of a rendered slot resolves to a different tab.
|
|
311
|
+
const onIndexChange = jest.fn();
|
|
312
|
+
const { UNSAFE_root } = renderBar({ maxWidth: MAX_WIDTH, onIndexChange });
|
|
313
|
+
const itemWidth = renderedItemWidth(UNSAFE_root);
|
|
314
|
+
|
|
315
|
+
for (const index of ITEMS.map((_item, i) => i)) tapAt(centreOf(index, itemWidth));
|
|
316
|
+
|
|
317
|
+
expect(onIndexChange.mock.calls).toEqual([[0], [1], [2]]);
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
it('resolves the far right of the constrained pill to the LAST tab', () => {
|
|
321
|
+
// The same failure stated as a single number, so what regresses is legible
|
|
322
|
+
// in the diff: at 1024pt the unconstrained geometry makes each tab 330.7pt
|
|
323
|
+
// wide, and 479 is only 1.4 of those from the left — the middle tab.
|
|
324
|
+
const onIndexChange = jest.fn();
|
|
325
|
+
renderBar({ maxWidth: MAX_WIDTH, onIndexChange });
|
|
326
|
+
|
|
327
|
+
tapAt(MAX_WIDTH - 1);
|
|
328
|
+
|
|
329
|
+
expect(onIndexChange).toHaveBeenCalledWith(ITEMS.length - 1);
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
it('resolves the far left to the FIRST tab', () => {
|
|
333
|
+
const onIndexChange = jest.fn();
|
|
334
|
+
renderBar({ maxWidth: MAX_WIDTH, onIndexChange });
|
|
335
|
+
|
|
336
|
+
tapAt(1);
|
|
337
|
+
|
|
338
|
+
expect(onIndexChange).toHaveBeenCalledWith(0);
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
it('scrubs to the same tabs a tap would', () => {
|
|
342
|
+
// Pan, tap and long press share one `indexAtX` worklet; the scrub is the
|
|
343
|
+
// path that would drag the highlight visibly past the end of a
|
|
344
|
+
// window-width bar.
|
|
345
|
+
const onIndexChange = jest.fn();
|
|
346
|
+
const { UNSAFE_root } = renderBar({ maxWidth: MAX_WIDTH, onIndexChange });
|
|
347
|
+
const itemWidth = renderedItemWidth(UNSAFE_root);
|
|
348
|
+
|
|
349
|
+
for (const index of ITEMS.map((_item, i) => i)) scrubTo(centreOf(index, itemWidth));
|
|
350
|
+
|
|
351
|
+
expect(onIndexChange.mock.calls).toEqual([[0], [1], [2]]);
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
describe('composed with the minimize inset', () => {
|
|
356
|
+
/** Render constrained, drive the bar fully minimized, settle the mappers. */
|
|
357
|
+
function renderMinimized() {
|
|
358
|
+
let state: MinimizeState | undefined;
|
|
359
|
+
const onIndexChange = jest.fn();
|
|
360
|
+
const utils = renderBar({
|
|
361
|
+
maxWidth: MAX_WIDTH,
|
|
362
|
+
onIndexChange,
|
|
363
|
+
onState: (value) => {
|
|
364
|
+
state = value;
|
|
365
|
+
},
|
|
366
|
+
});
|
|
367
|
+
if (!state) throw new Error('MinimizeProbe never ran');
|
|
368
|
+
// The reanimated mock's shared values are plain boxes: a write is only
|
|
369
|
+
// visible to `useAnimatedStyle` on the NEXT render.
|
|
370
|
+
const progress = state.progress;
|
|
371
|
+
act(() => {
|
|
372
|
+
progress.value = 1;
|
|
373
|
+
});
|
|
374
|
+
utils.resettle();
|
|
375
|
+
return { ...utils, onIndexChange };
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
it('shrinks the pill by the inset on BOTH sides of the constrained width', () => {
|
|
379
|
+
const { UNSAFE_root } = renderMinimized();
|
|
380
|
+
const barWidth = MAX_WIDTH - MINIMIZED_INSET * 2;
|
|
381
|
+
expect(renderedItemWidth(UNSAFE_root)).toBeCloseTo((barWidth - ROW_PAD_H * 2) / 3, 5);
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
it('still lands a tap on the tab it is visibly over', () => {
|
|
385
|
+
// Centring (static, on the wrap) and the inset (animated, on the pill)
|
|
386
|
+
// compose: equal margins keep the pill centred inside the constrained
|
|
387
|
+
// wrap, and `event.x` stays relative to the pill, so the same geometry
|
|
388
|
+
// holds at both ends of the minimize animation.
|
|
389
|
+
const { UNSAFE_root, onIndexChange } = renderMinimized();
|
|
390
|
+
const itemWidth = renderedItemWidth(UNSAFE_root);
|
|
391
|
+
|
|
392
|
+
for (const index of ITEMS.map((_item, i) => i)) tapAt(centreOf(index, itemWidth));
|
|
393
|
+
|
|
394
|
+
expect(onIndexChange.mock.calls).toEqual([[0], [1], [2]]);
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it('leaves the blur band full-bleed', () => {
|
|
399
|
+
// The band is the screen-edge scrim content dissolves into, not part of the
|
|
400
|
+
// pill — constraining it would leave a floating blurred rectangle.
|
|
401
|
+
const { UNSAFE_root } = renderBar({ maxWidth: MAX_WIDTH });
|
|
402
|
+
// The band's own root, not one of the ten layers inside it: only the root
|
|
403
|
+
// is the `pointerEvents: 'none'` box that the bar sizes.
|
|
404
|
+
const band = styleOf(
|
|
405
|
+
UNSAFE_root,
|
|
406
|
+
(style) => style.pointerEvents === 'none' && typeof style.height === 'number',
|
|
407
|
+
'blur band',
|
|
408
|
+
);
|
|
409
|
+
expect(band.left).toBe(0);
|
|
410
|
+
expect(band.right).toBe(0);
|
|
411
|
+
expect(band.width).toBeUndefined();
|
|
412
|
+
});
|
|
413
|
+
});
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
useMemo,
|
|
23
23
|
type ComponentType,
|
|
24
24
|
} from 'react';
|
|
25
|
-
import { Pressable, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
25
|
+
import { Pressable, StyleSheet, useWindowDimensions, View, type ViewStyle } from 'react-native';
|
|
26
26
|
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
27
27
|
import Animated, {
|
|
28
28
|
Extrapolation,
|
|
@@ -98,6 +98,8 @@ function TabBarBody({
|
|
|
98
98
|
onIndexLongPress,
|
|
99
99
|
theme: themeOverrides,
|
|
100
100
|
haptics = true,
|
|
101
|
+
blur = true,
|
|
102
|
+
maxWidth,
|
|
101
103
|
style,
|
|
102
104
|
...viewProps
|
|
103
105
|
}: TabBarBodyProps) {
|
|
@@ -112,6 +114,22 @@ function TabBarBody({
|
|
|
112
114
|
const theme = useTabBarTheme(themeOverrides);
|
|
113
115
|
const impact = useHaptics();
|
|
114
116
|
|
|
117
|
+
// The pill's OUTER width (the box the animated minimize inset is applied
|
|
118
|
+
// inside), and the single source of truth for it: the wrap's own layout, the
|
|
119
|
+
// highlight geometry and the `indexAtX` scrub worklet all derive from this one
|
|
120
|
+
// number. They have to, or a tap lands on a tab the highlight is not under —
|
|
121
|
+
// the exact failure `maxWidth` exists to prevent, since narrowing the bar from
|
|
122
|
+
// the outside with a `style` override moves only the pixels.
|
|
123
|
+
//
|
|
124
|
+
// Unconstrained it is what the stretched wrap already measures
|
|
125
|
+
// (`windowWidth - BAR_MARGIN * 2`), so an existing consumer's geometry is
|
|
126
|
+
// unchanged to the pixel. `maxWidth` is a ceiling, never a floor: on a window
|
|
127
|
+
// narrower than it, the bar stays full-bleed.
|
|
128
|
+
const barOuterWidth =
|
|
129
|
+
maxWidth === undefined
|
|
130
|
+
? windowWidth - BAR_MARGIN * 2
|
|
131
|
+
: Math.min(windowWidth - BAR_MARGIN * 2, maxWidth);
|
|
132
|
+
|
|
115
133
|
// Picker-style tick while the highlight crosses tab boundaries mid-drag.
|
|
116
134
|
// `useHaptics` already no-ops on web, when the optional `expo-haptics` peer
|
|
117
135
|
// is absent, and when a `BloomHapticsProvider` has haptics turned off — so
|
|
@@ -159,7 +177,13 @@ function TabBarBody({
|
|
|
159
177
|
[0, MINIMIZED_INSET],
|
|
160
178
|
Extrapolation.CLAMP,
|
|
161
179
|
);
|
|
162
|
-
|
|
180
|
+
// `event.x` is measured from the left edge of the view the detector is
|
|
181
|
+
// attached to — the animated pill itself, NOT the window and not the wrap
|
|
182
|
+
// around it. Its width is therefore the outer width minus the two
|
|
183
|
+
// animated margins, which is exactly what this computes, constrained or
|
|
184
|
+
// not. (Margins sit outside a view's own box, so x = 0 is the pill's left
|
|
185
|
+
// border edge either way.)
|
|
186
|
+
const barWidth = barOuterWidth - sideInset * 2;
|
|
163
187
|
const itemWidth = (barWidth - ROW_PAD_H * 2) / tabCount;
|
|
164
188
|
const raw = (x - ROW_PAD_H) / itemWidth - 0.5;
|
|
165
189
|
return Math.min(Math.max(raw, 0), tabCount - 1);
|
|
@@ -230,7 +254,7 @@ function TabBarBody({
|
|
|
230
254
|
|
|
231
255
|
return Gesture.Race(pan, tap, longPress);
|
|
232
256
|
}, [
|
|
233
|
-
|
|
257
|
+
barOuterWidth,
|
|
234
258
|
tabCount,
|
|
235
259
|
selectIndex,
|
|
236
260
|
hasLongPress,
|
|
@@ -311,7 +335,9 @@ function TabBarBody({
|
|
|
311
335
|
[0, MINIMIZED_INSET],
|
|
312
336
|
Extrapolation.CLAMP,
|
|
313
337
|
);
|
|
314
|
-
|
|
338
|
+
// Same `barOuterWidth` the scrub worklet resolves an index from — see the
|
|
339
|
+
// note where it is computed.
|
|
340
|
+
const barWidth = barOuterWidth - sideInset * 2;
|
|
315
341
|
const itemWidth = (barWidth - ROW_PAD_H * 2) / tabCount;
|
|
316
342
|
return {
|
|
317
343
|
height,
|
|
@@ -320,11 +346,25 @@ function TabBarBody({
|
|
|
320
346
|
top: (barHeight - height) / 2,
|
|
321
347
|
transform: [{ translateX: ROW_PAD_H + itemWidth * slideIndex.value }],
|
|
322
348
|
};
|
|
323
|
-
}, [progress, slideIndex,
|
|
349
|
+
}, [progress, slideIndex, barOuterWidth, tabCount]);
|
|
324
350
|
|
|
325
351
|
// Shared with `useTabBarFootprint`, so a consumer accounting for the bar in
|
|
326
352
|
// its own layout can never drift from where the bar actually sits.
|
|
327
353
|
const bottomOffset = tabBarBottomGap(insets.bottom);
|
|
354
|
+
|
|
355
|
+
// How centring and the animated inset compose: centring is STATIC and belongs
|
|
356
|
+
// to the wrap, the inset stays ANIMATED on the pill inside it. The wrap is
|
|
357
|
+
// centred once by layout at a definite width, and the pill's two equal
|
|
358
|
+
// margins keep it centred within that wrap at every point of the minimize
|
|
359
|
+
// animation — neither has to know about the other. Centring the animated view
|
|
360
|
+
// itself would instead mean `alignSelf: 'center'` on a node with no width of
|
|
361
|
+
// its own (its width comes from those margins), which Yoga then sizes from its
|
|
362
|
+
// CONTENT rather than from the constraint.
|
|
363
|
+
//
|
|
364
|
+
// Applied only when `maxWidth` is set: with no width and no `alignSelf` the
|
|
365
|
+
// wrap stretches, which is the original full-bleed behaviour.
|
|
366
|
+
const constrainedWrapStyle: ViewStyle | null =
|
|
367
|
+
maxWidth === undefined ? null : { width: barOuterWidth, alignSelf: 'center' };
|
|
328
368
|
const barContext = useMemo(
|
|
329
369
|
() => ({ slideIndex, isDragging, theme, activeIndex, selectIndex }),
|
|
330
370
|
[slideIndex, isDragging, theme, activeIndex, selectIndex],
|
|
@@ -332,18 +372,28 @@ function TabBarBody({
|
|
|
332
372
|
|
|
333
373
|
return (
|
|
334
374
|
<View {...viewProps} style={[styles.root, style]}>
|
|
335
|
-
{/* Progressive blur rising from the screen's bottom edge behind the pill.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
375
|
+
{/* Progressive blur rising from the screen's bottom edge behind the pill.
|
|
376
|
+
Rendered CONDITIONALLY, and as nothing at all when off: the band is
|
|
377
|
+
full-bleed and 114pt tall at a zero bottom inset, so it blurs whatever
|
|
378
|
+
a screen floats near the bottom edge (a scrubber, a FAB), and leaving
|
|
379
|
+
an empty absolutely-positioned view behind would keep a node — and a
|
|
380
|
+
rect — that exists to do nothing. Stays full-bleed under `maxWidth`:
|
|
381
|
+
it is the screen-edge scrim content dissolves into, not part of the
|
|
382
|
+
pill. */}
|
|
383
|
+
{blur !== false && (
|
|
384
|
+
<Blur
|
|
385
|
+
direction="bottom"
|
|
386
|
+
intensity={typeof blur === 'object' ? blur.intensity : undefined}
|
|
387
|
+
style={{
|
|
388
|
+
position: 'absolute',
|
|
389
|
+
left: 0,
|
|
390
|
+
right: 0,
|
|
391
|
+
bottom: 0,
|
|
392
|
+
height: bottomOffset + EXPANDED_HEIGHT + BLUR_BLEED,
|
|
393
|
+
}}
|
|
394
|
+
/>
|
|
395
|
+
)}
|
|
396
|
+
<View style={[styles.barWrap, { marginBottom: bottomOffset }, constrainedWrapStyle]}>
|
|
347
397
|
<GestureDetector gesture={gesture}>
|
|
348
398
|
<Animated.View style={barStyle}>
|
|
349
399
|
<Surface theme={theme} style={shapeStyle} />
|
package/src/tab-bar/types.ts
CHANGED
|
@@ -107,6 +107,44 @@ export type TabBarProps = ViewProps & {
|
|
|
107
107
|
* optional `expo-haptics` peer is absent.
|
|
108
108
|
*/
|
|
109
109
|
haptics?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* The progressive blur rising from the bottom edge of the screen behind the
|
|
112
|
+
* pill. Defaults to `true`; `{ intensity }` tunes its strength.
|
|
113
|
+
*
|
|
114
|
+
* Pass `false` to remove it entirely — no blur, and no node left behind. The
|
|
115
|
+
* band is tall (the bar's own bottom gap plus its expanded height plus the
|
|
116
|
+
* bleed above it, 114pt at a zero bottom inset) and full-bleed, so anything a
|
|
117
|
+
* screen floats near the bottom edge — a video scrubber, a FAB — sits INSIDE
|
|
118
|
+
* it and is blurred. That cannot be undone from the outside: `zIndex` only
|
|
119
|
+
* orders siblings within one stacking context, and a screen's FAB is inside
|
|
120
|
+
* an earlier sibling of the bar's host, so no z-order a consumer can write
|
|
121
|
+
* lifts it above this band. Turning the blur off is the only fix that does
|
|
122
|
+
* not also change where the FAB paints relative to everything else.
|
|
123
|
+
*
|
|
124
|
+
* On native the band is ten stacked `expo-blur` layers plus a tail gradient;
|
|
125
|
+
* on web it is one masked `backdrop-filter`. `false` skips both.
|
|
126
|
+
*/
|
|
127
|
+
blur?: boolean | { intensity?: number };
|
|
128
|
+
/**
|
|
129
|
+
* Maximum width of the pill, in points. No default — omit it and the bar
|
|
130
|
+
* spans the window exactly as it always has.
|
|
131
|
+
*
|
|
132
|
+
* A CEILING, never a floor: on a window narrower than this the bar keeps its
|
|
133
|
+
* full-bleed width, so a phone layout is untouched by any value big enough to
|
|
134
|
+
* matter on a tablet. When it binds, the pill is constrained to this width and
|
|
135
|
+
* CENTRED, and the ITEM geometry follows it — the item width, the sliding
|
|
136
|
+
* highlight's position and the tap/scrub hit-testing all derive from the same
|
|
137
|
+
* constrained width, so a tap still lands on the tab it is visibly over.
|
|
138
|
+
*
|
|
139
|
+
* That last part is why this cannot be done from the outside. Narrowing the
|
|
140
|
+
* bar with a `style` override moves the pixels only: the highlight and the
|
|
141
|
+
* scrub worklet would still divide the WINDOW width by the tab count, leaving
|
|
142
|
+
* the highlight sized and positioned for a bar that is no longer there. On an
|
|
143
|
+
* iPad the unconstrained bar is the reason to reach for this at all — 810pt at
|
|
144
|
+
* 11" portrait, 1342pt in landscape, leaving 21pt glyphs adrift in cells
|
|
145
|
+
* hundreds of points wide.
|
|
146
|
+
*/
|
|
147
|
+
maxWidth?: number;
|
|
110
148
|
};
|
|
111
149
|
|
|
112
150
|
export type TabBarButtonProps = PressableProps & {
|