react-native-terra-ui 0.11.14 → 0.11.15
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/CHANGELOG.md +6 -0
- package/lib/module/components/header/parts/HeaderBar.js +41 -22
- package/lib/module/components/header/parts/HeaderBar.js.map +1 -1
- package/lib/typescript/src/components/header/parts/HeaderBar.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/components/header/parts/HeaderBar.tsx +53 -35
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.11.15](https://github.com/earthling-std/react-native-terra-ui/compare/v0.11.14...v0.11.15) (2026-09-19)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **ui:** [header] stop status-bar taps scrolling the wrong list ([6ec4094](https://github.com/earthling-std/react-native-terra-ui/commit/6ec4094ac6d6062b763946c69dbe6fb794f2d582))
|
|
8
|
+
|
|
3
9
|
## [0.11.14](https://github.com/earthlin9/react-native-terra-ui/compare/v0.11.13...v0.11.14) (2026-09-19)
|
|
4
10
|
|
|
5
11
|
### Features
|
|
@@ -4,6 +4,7 @@ import { View } from "react-native-unistyles/components/native/View";
|
|
|
4
4
|
import { Text } from "react-native-unistyles/components/native/Text";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import Animated from "react-native-reanimated";
|
|
7
|
+
import { ScrollToTopGuard } from "react-native-screens/experimental";
|
|
7
8
|
import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
8
9
|
import { FONT_WEIGHT_VALUE } from "../../../utils/typography.js";
|
|
9
10
|
import { resolveScreenPadding } from "../../../theme/screen-padding.js";
|
|
@@ -43,28 +44,46 @@ export function HeaderBar({
|
|
|
43
44
|
navigation: navigation,
|
|
44
45
|
onDismiss: onDismiss
|
|
45
46
|
});
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
47
|
+
return (
|
|
48
|
+
/*#__PURE__*/
|
|
49
|
+
/*
|
|
50
|
+
iPadOS 26 extended the status bar's tap-to-scroll-to-top zone down over
|
|
51
|
+
this bar, and a React Native `Pressable` is not a `UIControl`, so a tap on
|
|
52
|
+
a header button reaches UIKit's gesture as well. UIKit then scrolls
|
|
53
|
+
whichever container still accepts it — routinely not the one the reader
|
|
54
|
+
touched, but the list on the screen underneath the one being dismissed.
|
|
55
|
+
The guard covers the whole bar rather than each button: the zone covers
|
|
56
|
+
the bar, so the title and the gaps between actions are just as exposed.
|
|
57
|
+
Gesture recognizers on descendants are exempt, so the buttons keep their
|
|
58
|
+
own touch handling; only the ancestor gesture is made to wait and lose.
|
|
59
|
+
The status bar above the bar is untouched and still scrolls to top.
|
|
60
|
+
A Fragment off iOS and inert below iPadOS 26. See react-native#56061.
|
|
61
|
+
*/
|
|
62
|
+
_jsx(ScrollToTopGuard, {
|
|
63
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
64
|
+
style: [styles.bar, styles.windowInsets(windowInsets.left, windowInsets.right)],
|
|
65
|
+
children: [/*#__PURE__*/_jsx(HeaderSurface, {
|
|
66
|
+
color: color,
|
|
67
|
+
animatedStyle: surfaceStyle
|
|
68
|
+
}), /*#__PURE__*/_jsx(HeaderWindowInsets, {
|
|
69
|
+
onInsetsChange: setWindowInsets
|
|
70
|
+
}), (leading != null || dismissAction === "back") && /*#__PURE__*/_jsxs(Toolbar, {
|
|
71
|
+
children: [dismissAction === "back" && dismiss, leading]
|
|
72
|
+
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
73
|
+
style: [styles.titleContainer, styles.titleInsets(windowInsets.left, windowInsets.right, titleAlignment), titleStyle],
|
|
74
|
+
pointerEvents: isCustomTitle(title) ? "box-none" : "none",
|
|
75
|
+
children: isTextTitle(title) ? String(title).trim().length > 0 && /*#__PURE__*/_jsx(Text, {
|
|
76
|
+
style: styles.title,
|
|
77
|
+
maxFontSizeMultiplier: theme.typography.variants["title-md"].maxFontSizeMultiplier,
|
|
78
|
+
children: title
|
|
79
|
+
}) : title
|
|
80
|
+
}), (trailing != null || dismissAction === "close") && /*#__PURE__*/_jsxs(Toolbar, {
|
|
81
|
+
style: styles.trailing,
|
|
82
|
+
children: [dismissAction === "close" && dismiss, trailing]
|
|
83
|
+
})]
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
);
|
|
68
87
|
}
|
|
69
88
|
}
|
|
70
89
|
const styles = StyleSheet.create((theme, runtime) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useState","Animated","StyleSheet","useUnistyles","FONT_WEIGHT_VALUE","resolveScreenPadding","Toolbar","HeaderDismissButton","isCustomTitle","isTextTitle","HeaderSurface","HeaderWindowInsets","jsx","_jsx","jsxs","_jsxs","HeaderBar","title","leading","trailing","titleAlignment","color","surfaceStyle","titleStyle","dismissAction","navigation","onDismiss","theme","windowInsets","setWindowInsets","left","right","_styles","styles","useVariants","dismiss","View","style","bar","
|
|
1
|
+
{"version":3,"names":["useState","Animated","ScrollToTopGuard","StyleSheet","useUnistyles","FONT_WEIGHT_VALUE","resolveScreenPadding","Toolbar","HeaderDismissButton","isCustomTitle","isTextTitle","HeaderSurface","HeaderWindowInsets","jsx","_jsx","jsxs","_jsxs","HeaderBar","title","leading","trailing","titleAlignment","color","surfaceStyle","titleStyle","dismissAction","navigation","onDismiss","theme","windowInsets","setWindowInsets","left","right","_styles","styles","useVariants","dismiss","children","View","style","bar","animatedStyle","onInsetsChange","titleContainer","titleInsets","pointerEvents","String","trim","length","Text","maxFontSizeMultiplier","typography","variants","create","runtime","paddingLeft","Math","max","breakpoint","x","paddingRight","uni__dependencies","alignment","height","layout","header","flexDirection","alignItems","paddingHorizontal","screen","padding","gap","spacing","justifyContent","center","marginLeft","position","flex","fontSize","lineHeight","letterSpacing","fontWeight","textAlign"],"sourceRoot":"../../../../../src","sources":["components/header/parts/HeaderBar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderBar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/header/parts/HeaderBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAGtE,OAAO,QAAQ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"HeaderBar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/header/parts/HeaderBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAGtE,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAO/C,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,sBAAmB,CAAC;AAEjF,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,oBAAiB,CAAC;AAGzE,UAAU,cAAe,SAAQ,kBAAkB;IACjD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,QAAQ,GAAG,MAAM,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,cAAc,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;CAC5D;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,cAAc,EACd,KAAK,EACL,YAAY,EACZ,UAAU,EACV,aAAsB,EACtB,UAAU,EACV,SAAS,GACV,EAAE,cAAc,+BA6DhB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-terra-ui",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.15",
|
|
4
4
|
"description": "Themeable React Native UI components built on react-native-unistyles",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"react-native-nitro-modules": "0.36.1",
|
|
76
76
|
"react-native-reanimated": "4.4.3",
|
|
77
77
|
"react-native-safe-area-context": "5.7.0",
|
|
78
|
-
"react-native-screens": "4.
|
|
78
|
+
"react-native-screens": "4.27.0",
|
|
79
79
|
"react-native-svg": "15.15.4",
|
|
80
80
|
"react-native-unistyles": "^3.3.0",
|
|
81
81
|
"react-native-worklets": "0.10.0",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"react-native": "*",
|
|
90
90
|
"react-native-reanimated": ">=4.0.0",
|
|
91
91
|
"react-native-safe-area-context": ">=4.0.0",
|
|
92
|
-
"react-native-screens": ">=4.
|
|
92
|
+
"react-native-screens": ">=4.27.0",
|
|
93
93
|
"react-native-svg": ">=15.0.0",
|
|
94
94
|
"react-native-unistyles": ">=3.0.0",
|
|
95
95
|
"react-native-worklets": ">=0.8.0"
|
|
@@ -2,6 +2,7 @@ import { type ComponentProps, type ReactNode, useState } from "react";
|
|
|
2
2
|
import { Text, View } from "react-native";
|
|
3
3
|
|
|
4
4
|
import Animated from "react-native-reanimated";
|
|
5
|
+
import { ScrollToTopGuard } from "react-native-screens/experimental";
|
|
5
6
|
import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
6
7
|
|
|
7
8
|
import { FONT_WEIGHT_VALUE } from "#utils/typography";
|
|
@@ -42,41 +43,58 @@ export function HeaderBar({
|
|
|
42
43
|
<HeaderDismissButton dismissAction={dismissAction} navigation={navigation} onDismiss={onDismiss} />
|
|
43
44
|
);
|
|
44
45
|
return (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
>
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
46
|
+
/*
|
|
47
|
+
iPadOS 26 extended the status bar's tap-to-scroll-to-top zone down over
|
|
48
|
+
this bar, and a React Native `Pressable` is not a `UIControl`, so a tap on
|
|
49
|
+
a header button reaches UIKit's gesture as well. UIKit then scrolls
|
|
50
|
+
whichever container still accepts it — routinely not the one the reader
|
|
51
|
+
touched, but the list on the screen underneath the one being dismissed.
|
|
52
|
+
|
|
53
|
+
The guard covers the whole bar rather than each button: the zone covers
|
|
54
|
+
the bar, so the title and the gaps between actions are just as exposed.
|
|
55
|
+
Gesture recognizers on descendants are exempt, so the buttons keep their
|
|
56
|
+
own touch handling; only the ancestor gesture is made to wait and lose.
|
|
57
|
+
The status bar above the bar is untouched and still scrolls to top.
|
|
58
|
+
|
|
59
|
+
A Fragment off iOS and inert below iPadOS 26. See react-native#56061.
|
|
60
|
+
*/
|
|
61
|
+
<ScrollToTopGuard>
|
|
62
|
+
<View style={[styles.bar, styles.windowInsets(windowInsets.left, windowInsets.right)]}>
|
|
63
|
+
<HeaderSurface color={color} animatedStyle={surfaceStyle} />
|
|
64
|
+
<HeaderWindowInsets onInsetsChange={setWindowInsets} />
|
|
65
|
+
{(leading != null || dismissAction === "back") && (
|
|
66
|
+
<Toolbar>
|
|
67
|
+
{dismissAction === "back" && dismiss}
|
|
68
|
+
{leading}
|
|
69
|
+
</Toolbar>
|
|
70
|
+
)}
|
|
71
|
+
<Animated.View
|
|
72
|
+
style={[
|
|
73
|
+
styles.titleContainer,
|
|
74
|
+
styles.titleInsets(windowInsets.left, windowInsets.right, titleAlignment),
|
|
75
|
+
titleStyle,
|
|
76
|
+
]}
|
|
77
|
+
pointerEvents={isCustomTitle(title) ? "box-none" : "none"}
|
|
78
|
+
>
|
|
79
|
+
{isTextTitle(title)
|
|
80
|
+
? String(title).trim().length > 0 && (
|
|
81
|
+
<Text
|
|
82
|
+
style={styles.title}
|
|
83
|
+
maxFontSizeMultiplier={theme.typography.variants["title-md"].maxFontSizeMultiplier}
|
|
84
|
+
>
|
|
85
|
+
{title}
|
|
86
|
+
</Text>
|
|
87
|
+
)
|
|
88
|
+
: title}
|
|
89
|
+
</Animated.View>
|
|
90
|
+
{(trailing != null || dismissAction === "close") && (
|
|
91
|
+
<Toolbar style={styles.trailing}>
|
|
92
|
+
{dismissAction === "close" && dismiss}
|
|
93
|
+
{trailing}
|
|
94
|
+
</Toolbar>
|
|
95
|
+
)}
|
|
96
|
+
</View>
|
|
97
|
+
</ScrollToTopGuard>
|
|
80
98
|
);
|
|
81
99
|
}
|
|
82
100
|
|