react-native-collapsible-sticky-header 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +569 -2
- package/lib/commonjs/Badge.js +65 -0
- package/lib/commonjs/Badge.js.map +1 -0
- package/lib/commonjs/CollapsibleStickyHeaderScreen.js +386 -0
- package/lib/commonjs/CollapsibleStickyHeaderScreen.js.map +1 -0
- package/lib/commonjs/HeaderGreeting.js +122 -0
- package/lib/commonjs/HeaderGreeting.js.map +1 -0
- package/lib/commonjs/HeaderNavBar.js +219 -0
- package/lib/commonjs/HeaderNavBar.js.map +1 -0
- package/lib/commonjs/ImageOrNode.js +40 -0
- package/lib/commonjs/ImageOrNode.js.map +1 -0
- package/lib/commonjs/animations.js +34 -0
- package/lib/commonjs/animations.js.map +1 -0
- package/lib/commonjs/index.js +122 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/optionalGradient.js +24 -0
- package/lib/commonjs/optionalGradient.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/theme.js +93 -0
- package/lib/commonjs/theme.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/useStickyHeader.js +143 -0
- package/lib/commonjs/useStickyHeader.js.map +1 -0
- package/lib/commonjs/utils.js +90 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/Badge.js +61 -0
- package/lib/module/Badge.js.map +1 -0
- package/lib/module/CollapsibleStickyHeaderScreen.js +379 -0
- package/lib/module/CollapsibleStickyHeaderScreen.js.map +1 -0
- package/lib/module/HeaderGreeting.js +118 -0
- package/lib/module/HeaderGreeting.js.map +1 -0
- package/lib/module/HeaderNavBar.js +215 -0
- package/lib/module/HeaderNavBar.js.map +1 -0
- package/lib/module/ImageOrNode.js +36 -0
- package/lib/module/ImageOrNode.js.map +1 -0
- package/lib/module/animations.js +28 -0
- package/lib/module/animations.js.map +1 -0
- package/lib/module/index.js +11 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/optionalGradient.js +20 -0
- package/lib/module/optionalGradient.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/theme.js +88 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useStickyHeader.js +138 -0
- package/lib/module/useStickyHeader.js.map +1 -0
- package/lib/module/utils.js +78 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/Badge.d.ts +20 -0
- package/lib/typescript/commonjs/src/Badge.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/CollapsibleStickyHeaderScreen.d.ts +10 -0
- package/lib/typescript/commonjs/src/CollapsibleStickyHeaderScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/HeaderGreeting.d.ts +33 -0
- package/lib/typescript/commonjs/src/HeaderGreeting.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/HeaderNavBar.d.ts +48 -0
- package/lib/typescript/commonjs/src/HeaderNavBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ImageOrNode.d.ts +16 -0
- package/lib/typescript/commonjs/src/ImageOrNode.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/animations.d.ts +9 -0
- package/lib/typescript/commonjs/src/animations.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +10 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/optionalGradient.d.ts +13 -0
- package/lib/typescript/commonjs/src/optionalGradient.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/theme.d.ts +81 -0
- package/lib/typescript/commonjs/src/theme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types.d.ts +244 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/useStickyHeader.d.ts +12 -0
- package/lib/typescript/commonjs/src/useStickyHeader.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils.d.ts +30 -0
- package/lib/typescript/commonjs/src/utils.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/Badge.d.ts +20 -0
- package/lib/typescript/module/src/Badge.d.ts.map +1 -0
- package/lib/typescript/module/src/CollapsibleStickyHeaderScreen.d.ts +10 -0
- package/lib/typescript/module/src/CollapsibleStickyHeaderScreen.d.ts.map +1 -0
- package/lib/typescript/module/src/HeaderGreeting.d.ts +33 -0
- package/lib/typescript/module/src/HeaderGreeting.d.ts.map +1 -0
- package/lib/typescript/module/src/HeaderNavBar.d.ts +48 -0
- package/lib/typescript/module/src/HeaderNavBar.d.ts.map +1 -0
- package/lib/typescript/module/src/ImageOrNode.d.ts +16 -0
- package/lib/typescript/module/src/ImageOrNode.d.ts.map +1 -0
- package/lib/typescript/module/src/animations.d.ts +9 -0
- package/lib/typescript/module/src/animations.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +10 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/optionalGradient.d.ts +13 -0
- package/lib/typescript/module/src/optionalGradient.d.ts.map +1 -0
- package/lib/typescript/module/src/theme.d.ts +81 -0
- package/lib/typescript/module/src/theme.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +244 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/lib/typescript/module/src/useStickyHeader.d.ts +12 -0
- package/lib/typescript/module/src/useStickyHeader.d.ts.map +1 -0
- package/lib/typescript/module/src/utils.d.ts +30 -0
- package/lib/typescript/module/src/utils.d.ts.map +1 -0
- package/package.json +142 -4
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Fragment, memo, useEffect, useMemo } from 'react';
|
|
4
|
+
import { Pressable, StyleSheet, Text, View } from 'react-native';
|
|
5
|
+
import { Badge } from "./Badge.js";
|
|
6
|
+
import { ImageOrNode } from "./ImageOrNode.js";
|
|
7
|
+
import { createTheme } from "./theme.js";
|
|
8
|
+
import { DEFAULT_BADGE_MAX, formatBadgeCount, limitActions, warnActionOverflow } from "./utils.js";
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
const DEFAULT_SHOW = ['logo', 'avatar', 'title', 'actions'];
|
|
11
|
+
const ActionButton = /*#__PURE__*/memo(function ActionButton({
|
|
12
|
+
action,
|
|
13
|
+
variant,
|
|
14
|
+
color,
|
|
15
|
+
size,
|
|
16
|
+
theme
|
|
17
|
+
}) {
|
|
18
|
+
const iconColor = action.color ?? color;
|
|
19
|
+
const iconSize = action.size ?? size;
|
|
20
|
+
const hit = theme.actionSize;
|
|
21
|
+
const icon = typeof action.icon === 'function' ? action.icon({
|
|
22
|
+
color: iconColor,
|
|
23
|
+
size: iconSize,
|
|
24
|
+
variant
|
|
25
|
+
}) : action.icon;
|
|
26
|
+
const count = action.badgeCount ?? 0;
|
|
27
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
28
|
+
testID: action.testID ?? `sticky-header-action-${action.key}-${variant}`,
|
|
29
|
+
onPress: action.onPress,
|
|
30
|
+
accessibilityRole: "button",
|
|
31
|
+
accessibilityLabel: action.accessibilityLabel,
|
|
32
|
+
accessibilityHint: action.accessibilityHint,
|
|
33
|
+
accessibilityValue: count > 0 ? {
|
|
34
|
+
text: formatBadgeCount(count, DEFAULT_BADGE_MAX)
|
|
35
|
+
} : undefined,
|
|
36
|
+
hitSlop: 4,
|
|
37
|
+
style: ({
|
|
38
|
+
pressed
|
|
39
|
+
}) => [styles.action, {
|
|
40
|
+
width: hit,
|
|
41
|
+
height: hit,
|
|
42
|
+
borderRadius: hit / 2,
|
|
43
|
+
backgroundColor: variant === 'overlay' ? theme.colors.actionBgOverlay : theme.colors.actionBgSolid,
|
|
44
|
+
opacity: pressed ? theme.pressedOpacity : 1
|
|
45
|
+
}, action.style],
|
|
46
|
+
children: [icon, count > 0 ? /*#__PURE__*/_jsx(Badge, {
|
|
47
|
+
count: count,
|
|
48
|
+
color: theme.colors.badge,
|
|
49
|
+
textColor: theme.colors.badgeText,
|
|
50
|
+
borderColor: theme.colors.badgeBorder,
|
|
51
|
+
size: theme.badgeSize,
|
|
52
|
+
style: styles.badge
|
|
53
|
+
}) : null]
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
export const HeaderNavBar = /*#__PURE__*/memo(function HeaderNavBar({
|
|
57
|
+
variant = 'overlay',
|
|
58
|
+
logo,
|
|
59
|
+
logoSize,
|
|
60
|
+
logoStyle,
|
|
61
|
+
logoAccessibilityLabel,
|
|
62
|
+
onLogoPress,
|
|
63
|
+
title,
|
|
64
|
+
titleStyle,
|
|
65
|
+
avatar,
|
|
66
|
+
avatarSize,
|
|
67
|
+
avatarStyle,
|
|
68
|
+
onAvatarPress,
|
|
69
|
+
avatarAccessibilityLabel = 'Profile',
|
|
70
|
+
actions,
|
|
71
|
+
show = DEFAULT_SHOW,
|
|
72
|
+
iconColor,
|
|
73
|
+
iconSize,
|
|
74
|
+
theme: themeOverrides,
|
|
75
|
+
resolvedTheme,
|
|
76
|
+
children,
|
|
77
|
+
style,
|
|
78
|
+
testID
|
|
79
|
+
}) {
|
|
80
|
+
const theme = useMemo(() => resolvedTheme ?? createTheme(themeOverrides), [resolvedTheme, themeOverrides]);
|
|
81
|
+
const {
|
|
82
|
+
actions: limited,
|
|
83
|
+
overflow
|
|
84
|
+
} = limitActions(actions);
|
|
85
|
+
useEffect(() => warnActionOverflow(overflow), [overflow]);
|
|
86
|
+
const shown = !show.includes('actions') ? [] : variant === 'solid' ? limited.filter(a => a.showInSticky !== false) : limited;
|
|
87
|
+
const defaultLogoSize = variant === 'overlay' ? theme.logoSize.expanded : theme.logoSize.compact;
|
|
88
|
+
const size = {
|
|
89
|
+
...defaultLogoSize,
|
|
90
|
+
...logoSize
|
|
91
|
+
};
|
|
92
|
+
const color = iconColor ?? (variant === 'overlay' ? theme.colors.iconOverlay : theme.colors.iconSolid);
|
|
93
|
+
const padding = theme.spacing.navBar[variant];
|
|
94
|
+
let logoNode = null;
|
|
95
|
+
if (logo != null && logo !== false) {
|
|
96
|
+
const image = /*#__PURE__*/_jsx(ImageOrNode, {
|
|
97
|
+
value: logo,
|
|
98
|
+
testID: `sticky-header-logo-${variant}`,
|
|
99
|
+
accessibilityLabel: onLogoPress ? undefined : logoAccessibilityLabel,
|
|
100
|
+
style: [{
|
|
101
|
+
width: size.width,
|
|
102
|
+
height: size.height
|
|
103
|
+
}, logoStyle]
|
|
104
|
+
});
|
|
105
|
+
logoNode = onLogoPress ? /*#__PURE__*/_jsx(Pressable, {
|
|
106
|
+
testID: `sticky-header-nav-logo-${variant}`,
|
|
107
|
+
onPress: onLogoPress,
|
|
108
|
+
hitSlop: 4,
|
|
109
|
+
accessibilityRole: "button",
|
|
110
|
+
accessibilityLabel: logoAccessibilityLabel ?? 'Logo',
|
|
111
|
+
children: image
|
|
112
|
+
}) : image;
|
|
113
|
+
}
|
|
114
|
+
let avatarNode = null;
|
|
115
|
+
if (avatar != null && avatar !== false) {
|
|
116
|
+
const d = avatarSize ?? (variant === 'solid' ? theme.avatarSizeCompact : theme.avatarSize);
|
|
117
|
+
const image = /*#__PURE__*/_jsx(ImageOrNode, {
|
|
118
|
+
value: avatar,
|
|
119
|
+
resizeMode: "cover",
|
|
120
|
+
accessibilityLabel: onAvatarPress ? undefined : avatarAccessibilityLabel,
|
|
121
|
+
style: [{
|
|
122
|
+
width: d,
|
|
123
|
+
height: d,
|
|
124
|
+
borderRadius: d / 2,
|
|
125
|
+
overflow: 'hidden'
|
|
126
|
+
}, avatarStyle]
|
|
127
|
+
});
|
|
128
|
+
avatarNode = onAvatarPress ? /*#__PURE__*/_jsx(Pressable, {
|
|
129
|
+
testID: `sticky-header-nav-avatar-${variant}`,
|
|
130
|
+
onPress: onAvatarPress,
|
|
131
|
+
hitSlop: 6,
|
|
132
|
+
accessibilityRole: "button",
|
|
133
|
+
accessibilityLabel: avatarAccessibilityLabel,
|
|
134
|
+
children: image
|
|
135
|
+
}) : /*#__PURE__*/_jsx(View, {
|
|
136
|
+
testID: `sticky-header-nav-avatar-${variant}`,
|
|
137
|
+
children: image
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
let titleNode = null;
|
|
141
|
+
if (title != null && title !== false) {
|
|
142
|
+
titleNode = typeof title === 'string' || typeof title === 'number' ? /*#__PURE__*/_jsx(Text, {
|
|
143
|
+
testID: `sticky-header-nav-title-${variant}`,
|
|
144
|
+
accessibilityRole: "header",
|
|
145
|
+
numberOfLines: 1,
|
|
146
|
+
style: [styles.title, {
|
|
147
|
+
color: variant === 'solid' ? theme.colors.stickyTitle : theme.colors.title,
|
|
148
|
+
fontSize: theme.typography.stickyTitleSize
|
|
149
|
+
}, titleStyle],
|
|
150
|
+
children: title
|
|
151
|
+
}) : title;
|
|
152
|
+
}
|
|
153
|
+
const leadingNodes = {
|
|
154
|
+
logo: logoNode,
|
|
155
|
+
avatar: avatarNode,
|
|
156
|
+
title: titleNode
|
|
157
|
+
};
|
|
158
|
+
const leading = show.filter(item => item !== 'actions').filter(item => leadingNodes[item] != null).map(item => /*#__PURE__*/_jsx(Fragment, {
|
|
159
|
+
children: leadingNodes[item]
|
|
160
|
+
}, item));
|
|
161
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
162
|
+
testID: testID ?? `sticky-header-nav-${variant}`,
|
|
163
|
+
style: [styles.bar, padding, style],
|
|
164
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
165
|
+
testID: `sticky-header-nav-leading-${variant}`,
|
|
166
|
+
style: [styles.leading, {
|
|
167
|
+
gap: theme.spacing.leadingGap
|
|
168
|
+
}],
|
|
169
|
+
children: leading
|
|
170
|
+
}), children, shown.length > 0 ? /*#__PURE__*/_jsx(View, {
|
|
171
|
+
style: [styles.actions, {
|
|
172
|
+
gap: theme.spacing.actionGap
|
|
173
|
+
}],
|
|
174
|
+
children: shown.map(action => /*#__PURE__*/_jsx(ActionButton, {
|
|
175
|
+
action: action,
|
|
176
|
+
variant: variant,
|
|
177
|
+
color: color,
|
|
178
|
+
size: iconSize ?? theme.iconSize,
|
|
179
|
+
theme: theme
|
|
180
|
+
}, action.key))
|
|
181
|
+
}) : null]
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
const styles = StyleSheet.create({
|
|
185
|
+
bar: {
|
|
186
|
+
flexDirection: 'row',
|
|
187
|
+
alignItems: 'center',
|
|
188
|
+
justifyContent: 'space-between'
|
|
189
|
+
},
|
|
190
|
+
leading: {
|
|
191
|
+
flexDirection: 'row',
|
|
192
|
+
alignItems: 'center',
|
|
193
|
+
flexShrink: 1,
|
|
194
|
+
minWidth: 0
|
|
195
|
+
},
|
|
196
|
+
title: {
|
|
197
|
+
fontWeight: '600',
|
|
198
|
+
flexShrink: 1
|
|
199
|
+
},
|
|
200
|
+
actions: {
|
|
201
|
+
flexDirection: 'row',
|
|
202
|
+
alignItems: 'center',
|
|
203
|
+
flexShrink: 0
|
|
204
|
+
},
|
|
205
|
+
action: {
|
|
206
|
+
alignItems: 'center',
|
|
207
|
+
justifyContent: 'center'
|
|
208
|
+
},
|
|
209
|
+
badge: {
|
|
210
|
+
position: 'absolute',
|
|
211
|
+
top: -2,
|
|
212
|
+
end: -2
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
//# sourceMappingURL=HeaderNavBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Fragment","memo","useEffect","useMemo","Pressable","StyleSheet","Text","View","Badge","ImageOrNode","createTheme","DEFAULT_BADGE_MAX","formatBadgeCount","limitActions","warnActionOverflow","jsx","_jsx","jsxs","_jsxs","DEFAULT_SHOW","ActionButton","action","variant","color","size","theme","iconColor","iconSize","hit","actionSize","icon","count","badgeCount","testID","key","onPress","accessibilityRole","accessibilityLabel","accessibilityHint","accessibilityValue","text","undefined","hitSlop","style","pressed","styles","width","height","borderRadius","backgroundColor","colors","actionBgOverlay","actionBgSolid","opacity","pressedOpacity","children","badge","textColor","badgeText","borderColor","badgeBorder","badgeSize","HeaderNavBar","logo","logoSize","logoStyle","logoAccessibilityLabel","onLogoPress","title","titleStyle","avatar","avatarSize","avatarStyle","onAvatarPress","avatarAccessibilityLabel","actions","show","themeOverrides","resolvedTheme","limited","overflow","shown","includes","filter","a","showInSticky","defaultLogoSize","expanded","compact","iconOverlay","iconSolid","padding","spacing","navBar","logoNode","image","value","avatarNode","d","avatarSizeCompact","resizeMode","titleNode","numberOfLines","stickyTitle","fontSize","typography","stickyTitleSize","leadingNodes","leading","item","map","bar","gap","leadingGap","length","actionGap","create","flexDirection","alignItems","justifyContent","flexShrink","minWidth","fontWeight","position","top","end"],"sourceRoot":"../../src","sources":["HeaderNavBar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Image, View } from 'react-native';
|
|
4
|
+
import { isImageSource } from "./utils.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/** Renders an image source as an `Image`, anything else as-is. */
|
|
7
|
+
export function ImageOrNode({
|
|
8
|
+
value,
|
|
9
|
+
style,
|
|
10
|
+
accessibilityLabel,
|
|
11
|
+
resizeMode = 'contain',
|
|
12
|
+
testID
|
|
13
|
+
}) {
|
|
14
|
+
if (value == null || value === false) return null;
|
|
15
|
+
if (isImageSource(value)) {
|
|
16
|
+
return /*#__PURE__*/_jsx(Image, {
|
|
17
|
+
testID: testID,
|
|
18
|
+
source: value,
|
|
19
|
+
resizeMode: resizeMode,
|
|
20
|
+
accessibilityRole: accessibilityLabel ? 'image' : undefined,
|
|
21
|
+
accessibilityLabel: accessibilityLabel,
|
|
22
|
+
accessible: !!accessibilityLabel,
|
|
23
|
+
style: style
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return /*#__PURE__*/_jsx(View, {
|
|
27
|
+
testID: testID,
|
|
28
|
+
accessibilityLabel: accessibilityLabel,
|
|
29
|
+
style: [{
|
|
30
|
+
alignItems: 'center',
|
|
31
|
+
justifyContent: 'center'
|
|
32
|
+
}, style],
|
|
33
|
+
children: value
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ImageOrNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Image","View","isImageSource","jsx","_jsx","ImageOrNode","value","style","accessibilityLabel","resizeMode","testID","source","accessibilityRole","undefined","accessible","alignItems","justifyContent","children"],"sourceRoot":"../../src","sources":["ImageOrNode.tsx"],"mappings":";;AACA,SACEA,KAAK,EACLC,IAAI,QAKC,cAAc;AAErB,SAASC,aAAa,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYxC;AACA,OAAO,SAASC,WAAWA,CAAC;EAC1BC,KAAK;EACLC,KAAK;EACLC,kBAAkB;EAClBC,UAAU,GAAG,SAAS;EACtBC;AACK,CAAC,EAAa;EACnB,IAAIJ,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,KAAK,EAAE,OAAO,IAAI;EACjD,IAAIJ,aAAa,CAACI,KAAK,CAAC,EAAE;IACxB,oBACEF,IAAA,CAACJ,KAAK;MACJU,MAAM,EAAEA,MAAO;MACfC,MAAM,EAAEL,KAAM;MACdG,UAAU,EAAEA,UAAW;MACvBG,iBAAiB,EAAEJ,kBAAkB,GAAG,OAAO,GAAGK,SAAU;MAC5DL,kBAAkB,EAAEA,kBAAmB;MACvCM,UAAU,EAAE,CAAC,CAACN,kBAAmB;MACjCD,KAAK,EAAEA;IAA+B,CACvC,CAAC;EAEN;EACA,oBACEH,IAAA,CAACH,IAAI;IACHS,MAAM,EAAEA,MAAO;IACfF,kBAAkB,EAAEA,kBAAmB;IACvCD,KAAK,EAAE,CACL;MAAEQ,UAAU,EAAE,QAAQ;MAAEC,cAAc,EAAE;IAAS,CAAC,EAClDT,KAAK,CACL;IAAAU,QAAA,EAEDX;EAAK,CACF,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** Default sticky bar animation: fade in. */
|
|
4
|
+
export const fadeStickyAnimation = progress => {
|
|
5
|
+
'worklet';
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
opacity: progress
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Slides the sticky bar down from above while fading it in.
|
|
14
|
+
* @param distance How far above its resting place the bar starts. Default 120.
|
|
15
|
+
*/
|
|
16
|
+
export function slideStickyAnimation(distance = 120) {
|
|
17
|
+
return progress => {
|
|
18
|
+
'worklet';
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
opacity: progress > 0 ? 1 : 0,
|
|
22
|
+
transform: [{
|
|
23
|
+
translateY: (progress - 1) * distance
|
|
24
|
+
}]
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=animations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fadeStickyAnimation","progress","opacity","slideStickyAnimation","distance","transform","translateY"],"sourceRoot":"../../src","sources":["animations.ts"],"mappings":";;AAEA;AACA,OAAO,MAAMA,mBAAsC,GAAIC,QAAQ,IAAK;EAClE,SAAS;;EACT,OAAO;IAAEC,OAAO,EAAED;EAAS,CAAC;AAC9B,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,SAASE,oBAAoBA,CAACC,QAAQ,GAAG,GAAG,EAAqB;EACtE,OAAQH,QAAQ,IAAK;IACnB,SAAS;;IACT,OAAO;MACLC,OAAO,EAAED,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;MAC7BI,SAAS,EAAE,CAAC;QAAEC,UAAU,EAAE,CAACL,QAAQ,GAAG,CAAC,IAAIG;MAAS,CAAC;IACvD,CAAC;EACH,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { CollapsibleStickyHeaderScreen } from "./CollapsibleStickyHeaderScreen.js";
|
|
4
|
+
export { useStickyHeader, DEFAULT_COLLAPSE_TRANSLATE_Y, DEFAULT_STICKY_FADE_DISTANCE, DEFAULT_STICKY_POINTER_OFFSET } from "./useStickyHeader.js";
|
|
5
|
+
export { HeaderNavBar } from "./HeaderNavBar.js";
|
|
6
|
+
export { HeaderGreeting } from "./HeaderGreeting.js";
|
|
7
|
+
export { Badge } from "./Badge.js";
|
|
8
|
+
export { createTheme, defaultTheme } from "./theme.js";
|
|
9
|
+
export { DEFAULT_BADGE_MAX, MAX_HEADER_ACTIONS, computeThreshold, getCollapseProgress, getStickyProgress, isStickyAt } from "./utils.js";
|
|
10
|
+
export { fadeStickyAnimation, slideStickyAnimation } from "./animations.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CollapsibleStickyHeaderScreen","useStickyHeader","DEFAULT_COLLAPSE_TRANSLATE_Y","DEFAULT_STICKY_FADE_DISTANCE","DEFAULT_STICKY_POINTER_OFFSET","HeaderNavBar","HeaderGreeting","Badge","createTheme","defaultTheme","DEFAULT_BADGE_MAX","MAX_HEADER_ACTIONS","computeThreshold","getCollapseProgress","getStickyProgress","isStickyAt","fadeStickyAnimation","slideStickyAnimation"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,6BAA6B,QAAQ,oCAAiC;AAC/E,SACEC,eAAe,EACfC,4BAA4B,EAC5BC,4BAA4B,EAC5BC,6BAA6B,QACxB,sBAAmB;AAC1B,SACEC,YAAY,QAGP,mBAAgB;AACvB,SAASC,cAAc,QAAkC,qBAAkB;AAC3E,SAASC,KAAK,QAAyB,YAAS;AAChD,SACEC,WAAW,EACXC,YAAY,QAKP,YAAS;AAChB,SACEC,iBAAiB,EACjBC,kBAAkB,EAClBC,gBAAgB,EAChBC,mBAAmB,EACnBC,iBAAiB,EACjBC,UAAU,QACL,YAAS;AAChB,SAASC,mBAAmB,EAAEC,oBAAoB,QAAQ,iBAAc","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
let cached;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Resolves `expo-linear-gradient` when it is installed. The require sits in a
|
|
7
|
+
* try/catch so Metro treats it as an optional dependency.
|
|
8
|
+
*/
|
|
9
|
+
export function getLinearGradient() {
|
|
10
|
+
if (cached === undefined) {
|
|
11
|
+
try {
|
|
12
|
+
const mod = require('expo-linear-gradient');
|
|
13
|
+
cached = mod.LinearGradient ?? null;
|
|
14
|
+
} catch {
|
|
15
|
+
cached = null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return cached;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=optionalGradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cached","getLinearGradient","undefined","mod","require","LinearGradient"],"sourceRoot":"../../src","sources":["optionalGradient.ts"],"mappings":";;AAWA,IAAIA,MAA6C;;AAEjD;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAA,EAA8B;EAC7D,IAAID,MAAM,KAAKE,SAAS,EAAE;IACxB,IAAI;MACF,MAAMC,GAAG,GAAGC,OAAO,CAAC,sBAAsB,CAEzC;MACDJ,MAAM,GAAGG,GAAG,CAACE,cAAc,IAAI,IAAI;IACrC,CAAC,CAAC,MAAM;MACNL,MAAM,GAAG,IAAI;IACf;EACF;EACA,OAAOA,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** Neutral defaults. Brand colors belong in your own theme. */
|
|
4
|
+
export const defaultTheme = {
|
|
5
|
+
colors: {
|
|
6
|
+
stickyBg: '#ffffff',
|
|
7
|
+
headerBg: 'transparent',
|
|
8
|
+
iconOverlay: '#ffffff',
|
|
9
|
+
iconSolid: '#1f2937',
|
|
10
|
+
actionBgOverlay: 'transparent',
|
|
11
|
+
actionBgSolid: 'transparent',
|
|
12
|
+
badge: '#ef4444',
|
|
13
|
+
badgeText: '#ffffff',
|
|
14
|
+
badgeBorder: '#ffffff',
|
|
15
|
+
greeting: '#ffffff',
|
|
16
|
+
title: '#ffffff',
|
|
17
|
+
subtitle: 'rgba(255,255,255,0.85)',
|
|
18
|
+
stickyTitle: '#111827',
|
|
19
|
+
fade: ['transparent', '#ffffff'],
|
|
20
|
+
shadow: '#000000'
|
|
21
|
+
},
|
|
22
|
+
spacing: {
|
|
23
|
+
horizontal: 16,
|
|
24
|
+
actionGap: 8,
|
|
25
|
+
avatarGap: 12,
|
|
26
|
+
leadingGap: 8,
|
|
27
|
+
navBar: {
|
|
28
|
+
overlay: {
|
|
29
|
+
paddingHorizontal: 16,
|
|
30
|
+
paddingVertical: 8
|
|
31
|
+
},
|
|
32
|
+
solid: {
|
|
33
|
+
paddingHorizontal: 16,
|
|
34
|
+
paddingVertical: 4
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
radius: {
|
|
39
|
+
headerBottom: 0
|
|
40
|
+
},
|
|
41
|
+
pressedOpacity: 0.6,
|
|
42
|
+
iconSize: 22,
|
|
43
|
+
actionSize: 36,
|
|
44
|
+
avatarSize: 44,
|
|
45
|
+
avatarSizeCompact: 32,
|
|
46
|
+
badgeSize: 18,
|
|
47
|
+
logoSize: {
|
|
48
|
+
expanded: {
|
|
49
|
+
width: 100,
|
|
50
|
+
height: 75
|
|
51
|
+
},
|
|
52
|
+
compact: {
|
|
53
|
+
width: 64,
|
|
54
|
+
height: 48
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
typography: {
|
|
58
|
+
greetingSize: 14,
|
|
59
|
+
titleSize: 24,
|
|
60
|
+
subtitleSize: 14,
|
|
61
|
+
stickyTitleSize: 17
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
function isPlainObject(value) {
|
|
65
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
|
|
66
|
+
}
|
|
67
|
+
function deepMerge(base, overrides) {
|
|
68
|
+
if (!overrides) return base;
|
|
69
|
+
const out = {
|
|
70
|
+
...base
|
|
71
|
+
};
|
|
72
|
+
for (const key of Object.keys(overrides)) {
|
|
73
|
+
const next = overrides[key];
|
|
74
|
+
if (next === undefined) continue;
|
|
75
|
+
const prev = out[key];
|
|
76
|
+
out[key] = isPlainObject(prev) && isPlainObject(next) ? deepMerge(prev, next) : next;
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Deep-merges one or more partial themes over the defaults. Arrays (such as
|
|
83
|
+
* `colors.fade`) are replaced, not merged.
|
|
84
|
+
*/
|
|
85
|
+
export function createTheme(...overrides) {
|
|
86
|
+
return overrides.reduce((theme, o) => deepMerge(theme, o), defaultTheme);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defaultTheme","colors","stickyBg","headerBg","iconOverlay","iconSolid","actionBgOverlay","actionBgSolid","badge","badgeText","badgeBorder","greeting","title","subtitle","stickyTitle","fade","shadow","spacing","horizontal","actionGap","avatarGap","leadingGap","navBar","overlay","paddingHorizontal","paddingVertical","solid","radius","headerBottom","pressedOpacity","iconSize","actionSize","avatarSize","avatarSizeCompact","badgeSize","logoSize","expanded","width","height","compact","typography","greetingSize","titleSize","subtitleSize","stickyTitleSize","isPlainObject","value","Array","isArray","Object","getPrototypeOf","prototype","deepMerge","base","overrides","out","key","keys","next","undefined","prev","createTheme","reduce","theme","o"],"sourceRoot":"../../src","sources":["theme.ts"],"mappings":";;AA+EA;AACA,OAAO,MAAMA,YAA+B,GAAG;EAC7CC,MAAM,EAAE;IACNC,QAAQ,EAAE,SAAS;IACnBC,QAAQ,EAAE,aAAa;IACvBC,WAAW,EAAE,SAAS;IACtBC,SAAS,EAAE,SAAS;IACpBC,eAAe,EAAE,aAAa;IAC9BC,aAAa,EAAE,aAAa;IAC5BC,KAAK,EAAE,SAAS;IAChBC,SAAS,EAAE,SAAS;IACpBC,WAAW,EAAE,SAAS;IACtBC,QAAQ,EAAE,SAAS;IACnBC,KAAK,EAAE,SAAS;IAChBC,QAAQ,EAAE,wBAAwB;IAClCC,WAAW,EAAE,SAAS;IACtBC,IAAI,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;IAChCC,MAAM,EAAE;EACV,CAAC;EACDC,OAAO,EAAE;IACPC,UAAU,EAAE,EAAE;IACdC,SAAS,EAAE,CAAC;IACZC,SAAS,EAAE,EAAE;IACbC,UAAU,EAAE,CAAC;IACbC,MAAM,EAAE;MACNC,OAAO,EAAE;QAAEC,iBAAiB,EAAE,EAAE;QAAEC,eAAe,EAAE;MAAE,CAAC;MACtDC,KAAK,EAAE;QAAEF,iBAAiB,EAAE,EAAE;QAAEC,eAAe,EAAE;MAAE;IACrD;EACF,CAAC;EACDE,MAAM,EAAE;IACNC,YAAY,EAAE;EAChB,CAAC;EACDC,cAAc,EAAE,GAAG;EACnBC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,EAAE;EACdC,UAAU,EAAE,EAAE;EACdC,iBAAiB,EAAE,EAAE;EACrBC,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE;IACRC,QAAQ,EAAE;MAAEC,KAAK,EAAE,GAAG;MAAEC,MAAM,EAAE;IAAG,CAAC;IACpCC,OAAO,EAAE;MAAEF,KAAK,EAAE,EAAE;MAAEC,MAAM,EAAE;IAAG;EACnC,CAAC;EACDE,UAAU,EAAE;IACVC,YAAY,EAAE,EAAE;IAChBC,SAAS,EAAE,EAAE;IACbC,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE;EACnB;AACF,CAAC;AAED,SAASC,aAAaA,CAACC,KAAc,EAAoC;EACvE,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,IACrBG,MAAM,CAACC,cAAc,CAACJ,KAAK,CAAC,KAAKG,MAAM,CAACE,SAAS;AAErD;AAEA,SAASC,SAASA,CAAIC,IAAO,EAAEC,SAAqC,EAAK;EACvE,IAAI,CAACA,SAAS,EAAE,OAAOD,IAAI;EAC3B,MAAME,GAA4B,GAAG;IAAE,GAAIF;EAAiC,CAAC;EAC7E,KAAK,MAAMG,GAAG,IAAIP,MAAM,CAACQ,IAAI,CAACH,SAAS,CAAC,EAAE;IACxC,MAAMI,IAAI,GAAIJ,SAAS,CAA6BE,GAAG,CAAC;IACxD,IAAIE,IAAI,KAAKC,SAAS,EAAE;IACxB,MAAMC,IAAI,GAAGL,GAAG,CAACC,GAAG,CAAC;IACrBD,GAAG,CAACC,GAAG,CAAC,GACNX,aAAa,CAACe,IAAI,CAAC,IAAIf,aAAa,CAACa,IAAI,CAAC,GACtCN,SAAS,CAACQ,IAAI,EAAEF,IAAgC,CAAC,GACjDA,IAAI;EACZ;EACA,OAAOH,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASM,WAAWA,CACzB,GAAGP,SAAwD,EACxC;EACnB,OAAOA,SAAS,CAACQ,MAAM,CACrB,CAACC,KAAK,EAAEC,CAAC,KAAKZ,SAAS,CAACW,KAAK,EAAEC,CAAC,CAAC,EACjChE,YACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { runOnJS, runOnUI, useAnimatedScrollHandler, useAnimatedStyle, useDerivedValue, useReducedMotion, useSharedValue } from 'react-native-reanimated';
|
|
5
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
6
|
+
import { computeThreshold, getCollapseProgress, getStickyProgress, isStickyAt } from "./utils.js";
|
|
7
|
+
export const DEFAULT_STICKY_FADE_DISTANCE = 40;
|
|
8
|
+
export const DEFAULT_STICKY_POINTER_OFFSET = 20;
|
|
9
|
+
export const DEFAULT_COLLAPSE_TRANSLATE_Y = -12;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Scroll-driven state for a collapsing header with a sticky bar.
|
|
13
|
+
*
|
|
14
|
+
* All styles are computed on the UI thread. The hook only re-renders when the
|
|
15
|
+
* sticky state flips (and when the nav bar is first measured).
|
|
16
|
+
*/
|
|
17
|
+
export function useStickyHeader(options = {}) {
|
|
18
|
+
const {
|
|
19
|
+
thresholdOffset = 0,
|
|
20
|
+
stickyFadeDistance = DEFAULT_STICKY_FADE_DISTANCE,
|
|
21
|
+
stickyPointerOffset = DEFAULT_STICKY_POINTER_OFFSET,
|
|
22
|
+
collapseTranslateY = DEFAULT_COLLAPSE_TRANSLATE_Y,
|
|
23
|
+
collapseAnimation,
|
|
24
|
+
stickyAnimation,
|
|
25
|
+
respectSafeArea = true,
|
|
26
|
+
topInset: topInsetOverride,
|
|
27
|
+
reducedMotion: reducedMotionOverride,
|
|
28
|
+
onStickyChange,
|
|
29
|
+
onScroll
|
|
30
|
+
} = options;
|
|
31
|
+
const insets = useSafeAreaInsets();
|
|
32
|
+
const systemReducedMotion = useReducedMotion();
|
|
33
|
+
const reducedMotion = reducedMotionOverride ?? systemReducedMotion;
|
|
34
|
+
const topInset = respectSafeArea ? topInsetOverride ?? insets.top : 0;
|
|
35
|
+
const scrollY = useSharedValue(0);
|
|
36
|
+
const navBarHeight = useSharedValue(0);
|
|
37
|
+
const threshold = useSharedValue(0);
|
|
38
|
+
const stickySV = useSharedValue(false);
|
|
39
|
+
const [isSticky, setIsSticky] = useState(false);
|
|
40
|
+
const onStickyChangeRef = useRef(onStickyChange);
|
|
41
|
+
onStickyChangeRef.current = onStickyChange;
|
|
42
|
+
const onScrollRef = useRef(onScroll);
|
|
43
|
+
onScrollRef.current = onScroll;
|
|
44
|
+
const hasJsOnScroll = onScroll != null;
|
|
45
|
+
const notifySticky = useCallback(next => {
|
|
46
|
+
setIsSticky(next);
|
|
47
|
+
onStickyChangeRef.current?.(next);
|
|
48
|
+
}, []);
|
|
49
|
+
const forwardScroll = useCallback(event => {
|
|
50
|
+
onScrollRef.current?.({
|
|
51
|
+
nativeEvent: event
|
|
52
|
+
});
|
|
53
|
+
}, []);
|
|
54
|
+
const updateScrollY = useCallback(y => {
|
|
55
|
+
'worklet';
|
|
56
|
+
|
|
57
|
+
scrollY.value = y;
|
|
58
|
+
const next = isStickyAt(y, threshold.value, stickyPointerOffset);
|
|
59
|
+
if (next !== stickySV.value) {
|
|
60
|
+
stickySV.value = next;
|
|
61
|
+
runOnJS(notifySticky)(next);
|
|
62
|
+
}
|
|
63
|
+
}, [scrollY, threshold, stickySV, stickyPointerOffset, notifySticky]);
|
|
64
|
+
|
|
65
|
+
// Re-evaluates the sticky state on the UI thread (where scrollY lives)
|
|
66
|
+
// after the threshold moved without a scroll.
|
|
67
|
+
const resyncSticky = useCallback(() => {
|
|
68
|
+
'worklet';
|
|
69
|
+
|
|
70
|
+
updateScrollY(scrollY.value);
|
|
71
|
+
}, [updateScrollY, scrollY]);
|
|
72
|
+
|
|
73
|
+
// The threshold is computed from JS-side numbers: shared value writes from
|
|
74
|
+
// JS are applied asynchronously, so reading them back here would be stale.
|
|
75
|
+
const measuredNavHeight = useRef(0);
|
|
76
|
+
const syncThreshold = useCallback(() => {
|
|
77
|
+
threshold.value = computeThreshold(measuredNavHeight.current, topInset, thresholdOffset);
|
|
78
|
+
runOnUI(resyncSticky)();
|
|
79
|
+
}, [threshold, topInset, thresholdOffset, resyncSticky]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
syncThreshold();
|
|
82
|
+
}, [syncThreshold]);
|
|
83
|
+
const onNavLayout = useCallback(event => {
|
|
84
|
+
const height = event.nativeEvent.layout.height;
|
|
85
|
+
if (height === measuredNavHeight.current) return;
|
|
86
|
+
measuredNavHeight.current = height;
|
|
87
|
+
navBarHeight.value = height;
|
|
88
|
+
syncThreshold();
|
|
89
|
+
}, [navBarHeight, syncThreshold]);
|
|
90
|
+
|
|
91
|
+
// No deps array: Reanimated rebuilds the handler from its closure (and v4
|
|
92
|
+
// warns when deps are passed on native).
|
|
93
|
+
const scrollHandler = useAnimatedScrollHandler({
|
|
94
|
+
onScroll: event => {
|
|
95
|
+
updateScrollY(event.contentOffset.y);
|
|
96
|
+
if (hasJsOnScroll) {
|
|
97
|
+
runOnJS(forwardScroll)(event);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
const fadeDistance = reducedMotion ? 0 : stickyFadeDistance;
|
|
102
|
+
const collapseProgress = useDerivedValue(() => getCollapseProgress(scrollY.value, threshold.value));
|
|
103
|
+
const stickyProgress = useDerivedValue(() => getStickyProgress(scrollY.value, threshold.value, fadeDistance));
|
|
104
|
+
const translateY = reducedMotion ? 0 : collapseTranslateY;
|
|
105
|
+
const collapseStyle = useAnimatedStyle(() => {
|
|
106
|
+
const p = collapseProgress.value;
|
|
107
|
+
if (collapseAnimation) return collapseAnimation(p);
|
|
108
|
+
return {
|
|
109
|
+
opacity: 1 - p,
|
|
110
|
+
transform: [{
|
|
111
|
+
translateY: p * translateY
|
|
112
|
+
}]
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
const stickyStyle = useAnimatedStyle(() => {
|
|
116
|
+
const p = stickyProgress.value;
|
|
117
|
+
if (stickyAnimation && !reducedMotion) return stickyAnimation(p);
|
|
118
|
+
return {
|
|
119
|
+
opacity: p
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
scrollHandler: scrollHandler,
|
|
124
|
+
scrollY,
|
|
125
|
+
threshold,
|
|
126
|
+
navBarHeight,
|
|
127
|
+
collapseProgress,
|
|
128
|
+
stickyProgress,
|
|
129
|
+
collapseStyle,
|
|
130
|
+
stickyStyle,
|
|
131
|
+
isSticky,
|
|
132
|
+
onNavLayout,
|
|
133
|
+
updateScrollY,
|
|
134
|
+
topInset,
|
|
135
|
+
reducedMotion
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=useStickyHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","runOnJS","runOnUI","useAnimatedScrollHandler","useAnimatedStyle","useDerivedValue","useReducedMotion","useSharedValue","useSafeAreaInsets","computeThreshold","getCollapseProgress","getStickyProgress","isStickyAt","DEFAULT_STICKY_FADE_DISTANCE","DEFAULT_STICKY_POINTER_OFFSET","DEFAULT_COLLAPSE_TRANSLATE_Y","useStickyHeader","options","thresholdOffset","stickyFadeDistance","stickyPointerOffset","collapseTranslateY","collapseAnimation","stickyAnimation","respectSafeArea","topInset","topInsetOverride","reducedMotion","reducedMotionOverride","onStickyChange","onScroll","insets","systemReducedMotion","top","scrollY","navBarHeight","threshold","stickySV","isSticky","setIsSticky","onStickyChangeRef","current","onScrollRef","hasJsOnScroll","notifySticky","next","forwardScroll","event","nativeEvent","updateScrollY","y","value","resyncSticky","measuredNavHeight","syncThreshold","onNavLayout","height","layout","scrollHandler","contentOffset","fadeDistance","collapseProgress","stickyProgress","translateY","collapseStyle","p","opacity","transform","stickyStyle"],"sourceRoot":"../../src","sources":["useStickyHeader.ts"],"mappings":"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","ignoreList":[]}
|