@oxyhq/bloom 0.1.12 → 0.1.14
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/bottom-sheet/index.js +21 -12
- package/lib/commonjs/bottom-sheet/index.js.map +1 -1
- package/lib/commonjs/loading/Loading.js +69 -49
- package/lib/commonjs/loading/Loading.js.map +1 -1
- package/lib/commonjs/loading/SpinnerIcon.js +37 -20
- package/lib/commonjs/loading/SpinnerIcon.js.map +1 -1
- package/lib/module/bottom-sheet/index.js +21 -12
- package/lib/module/bottom-sheet/index.js.map +1 -1
- package/lib/module/loading/Loading.js +69 -49
- package/lib/module/loading/Loading.js.map +1 -1
- package/lib/module/loading/SpinnerIcon.js +37 -20
- package/lib/module/loading/SpinnerIcon.js.map +1 -1
- package/lib/typescript/commonjs/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/loading/Loading.d.ts.map +1 -1
- package/lib/typescript/commonjs/loading/SpinnerIcon.d.ts.map +1 -1
- package/lib/typescript/module/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/module/loading/Loading.d.ts.map +1 -1
- package/lib/typescript/module/loading/SpinnerIcon.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/bottom-sheet/index.tsx +80 -69
- package/src/loading/Loading.tsx +71 -35
- package/src/loading/SpinnerIcon.tsx +44 -17
|
@@ -68,42 +68,23 @@ const SpinnerLoading = ({
|
|
|
68
68
|
})]
|
|
69
69
|
});
|
|
70
70
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Inner component for TopLoading that requires react-native-reanimated.
|
|
74
|
+
* Extracted to a dedicated component so all hooks are called unconditionally,
|
|
75
|
+
* satisfying the Rules of Hooks and React Compiler requirements.
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
const AnimatedTopLoading = ({
|
|
79
|
+
showLoading,
|
|
80
|
+
targetHeight,
|
|
81
|
+
effectiveIconSize,
|
|
82
|
+
spinnerColor,
|
|
78
83
|
spinnerIcon,
|
|
79
|
-
|
|
84
|
+
style,
|
|
85
|
+
testID,
|
|
86
|
+
reanimated
|
|
80
87
|
}) => {
|
|
81
|
-
const theme = useTheme();
|
|
82
|
-
const sizeConfig = SIZE_CONFIG[size];
|
|
83
|
-
const effectiveIconSize = iconSize ?? sizeConfig.spinner;
|
|
84
|
-
const targetHeight = Math.max(0, effectiveIconSize + sizeConfig.spinner + heightOffset);
|
|
85
|
-
const spinnerColor = color ?? theme.colors.primary;
|
|
86
|
-
const reanimated = getReanimated();
|
|
87
|
-
|
|
88
|
-
// Non-animated fallback when reanimated is not available
|
|
89
|
-
if (!reanimated) {
|
|
90
|
-
if (!showLoading) return null;
|
|
91
|
-
return /*#__PURE__*/_jsx(View, {
|
|
92
|
-
style: [styles.topContainer, {
|
|
93
|
-
height: targetHeight
|
|
94
|
-
}, style],
|
|
95
|
-
testID: testID,
|
|
96
|
-
children: /*#__PURE__*/_jsx(View, {
|
|
97
|
-
style: [styles.topLoadingView, {
|
|
98
|
-
height: targetHeight
|
|
99
|
-
}],
|
|
100
|
-
children: spinnerIcon ?? /*#__PURE__*/_jsx(SpinnerIcon, {
|
|
101
|
-
size: effectiveIconSize,
|
|
102
|
-
color: spinnerColor
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
88
|
const {
|
|
108
89
|
default: Animated,
|
|
109
90
|
useAnimatedStyle,
|
|
@@ -111,31 +92,24 @@ const TopLoading = ({
|
|
|
111
92
|
withTiming,
|
|
112
93
|
Easing
|
|
113
94
|
} = reanimated;
|
|
114
|
-
|
|
115
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
116
95
|
const height = useSharedValue(showLoading ? targetHeight : 0);
|
|
117
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
118
96
|
const opacity = useSharedValue(showLoading ? 1 : 0);
|
|
119
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
120
97
|
const translateY = useSharedValue(showLoading ? 0 : -targetHeight);
|
|
121
|
-
const timingConfig = {
|
|
122
|
-
duration: animation.duration.slow,
|
|
123
|
-
easing: Easing.out(Easing.cubic)
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
127
98
|
useEffect(() => {
|
|
99
|
+
const timingConfig = {
|
|
100
|
+
duration: animation.duration.slow,
|
|
101
|
+
easing: Easing.out(Easing.cubic)
|
|
102
|
+
};
|
|
128
103
|
height.value = withTiming(showLoading ? targetHeight : 0, timingConfig);
|
|
129
104
|
opacity.value = withTiming(showLoading ? 1 : 0, timingConfig);
|
|
130
105
|
translateY.value = withTiming(showLoading ? 0 : -targetHeight, timingConfig);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
106
|
+
// Easing, withTiming: module-level constants from lazily-resolved reanimated, stable.
|
|
107
|
+
// height/opacity/translateY: shared value objects, stable references.
|
|
108
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
109
|
+
}, [showLoading, targetHeight]);
|
|
134
110
|
const containerAnimated = useAnimatedStyle(() => ({
|
|
135
111
|
height: height.value
|
|
136
112
|
}));
|
|
137
|
-
|
|
138
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
139
113
|
const innerAnimated = useAnimatedStyle(() => ({
|
|
140
114
|
opacity: opacity.value,
|
|
141
115
|
transform: [{
|
|
@@ -156,6 +130,52 @@ const TopLoading = ({
|
|
|
156
130
|
})
|
|
157
131
|
});
|
|
158
132
|
};
|
|
133
|
+
const TopLoading = ({
|
|
134
|
+
size = 'medium',
|
|
135
|
+
color,
|
|
136
|
+
style,
|
|
137
|
+
showLoading = true,
|
|
138
|
+
iconSize,
|
|
139
|
+
heightOffset = 0,
|
|
140
|
+
spinnerIcon,
|
|
141
|
+
testID
|
|
142
|
+
}) => {
|
|
143
|
+
const theme = useTheme();
|
|
144
|
+
const sizeConfig = SIZE_CONFIG[size];
|
|
145
|
+
const effectiveIconSize = iconSize ?? sizeConfig.spinner;
|
|
146
|
+
const targetHeight = Math.max(0, effectiveIconSize + sizeConfig.spinner + heightOffset);
|
|
147
|
+
const spinnerColor = color ?? theme.colors.primary;
|
|
148
|
+
const reanimated = getReanimated();
|
|
149
|
+
if (!reanimated) {
|
|
150
|
+
// Non-animated fallback when reanimated is not available
|
|
151
|
+
if (!showLoading) return null;
|
|
152
|
+
return /*#__PURE__*/_jsx(View, {
|
|
153
|
+
style: [styles.topContainer, {
|
|
154
|
+
height: targetHeight
|
|
155
|
+
}, style],
|
|
156
|
+
testID: testID,
|
|
157
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
158
|
+
style: [styles.topLoadingView, {
|
|
159
|
+
height: targetHeight
|
|
160
|
+
}],
|
|
161
|
+
children: spinnerIcon ?? /*#__PURE__*/_jsx(SpinnerIcon, {
|
|
162
|
+
size: effectiveIconSize,
|
|
163
|
+
color: spinnerColor
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return /*#__PURE__*/_jsx(AnimatedTopLoading, {
|
|
169
|
+
showLoading: showLoading,
|
|
170
|
+
targetHeight: targetHeight,
|
|
171
|
+
effectiveIconSize: effectiveIconSize,
|
|
172
|
+
spinnerColor: spinnerColor,
|
|
173
|
+
spinnerIcon: spinnerIcon,
|
|
174
|
+
style: style,
|
|
175
|
+
testID: testID,
|
|
176
|
+
reanimated: reanimated
|
|
177
|
+
});
|
|
178
|
+
};
|
|
159
179
|
const SkeletonLoading = ({
|
|
160
180
|
lines = 3,
|
|
161
181
|
width = '100%',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useEffect","useMemo","View","Text","StyleSheet","useTheme","animation","SpinnerIcon","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","spinner","text","medium","large","reanimatedModule","reanimatedResolved","getReanimated","require","SpinnerLoading","size","color","textStyle","style","showText","iconSize","spinnerIcon","testID","theme","sizeConfig","effectiveIconSize","spinnerColor","colors","primary","textColor","textSecondary","styles","container","children","fontSize","marginTop","
|
|
1
|
+
{"version":3,"names":["React","memo","useEffect","useMemo","View","Text","StyleSheet","useTheme","animation","SpinnerIcon","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","spinner","text","medium","large","reanimatedModule","reanimatedResolved","getReanimated","require","SpinnerLoading","size","color","textStyle","style","showText","iconSize","spinnerIcon","testID","theme","sizeConfig","effectiveIconSize","spinnerColor","colors","primary","textColor","textSecondary","styles","container","children","fontSize","marginTop","AnimatedTopLoading","showLoading","targetHeight","reanimated","default","Animated","useAnimatedStyle","useSharedValue","withTiming","Easing","height","opacity","translateY","timingConfig","duration","slow","easing","out","cubic","value","containerAnimated","innerAnimated","transform","topContainer","topLoadingView","TopLoading","heightOffset","Math","max","SkeletonLoading","lines","width","lineHeight","skeletonColor","backgroundSecondary","skeletonLines","Array","from","length","_","index","skeletonLine","backgroundColor","marginBottom","skeletonContainer","InlineLoading","inlineContainer","marginLeft","LoadingComponent","props","variant","Loading","displayName","create","flex","alignItems","justifyContent","textAlign","position","overflow","top","left","borderRadius","flexDirection"],"sourceRoot":"../../../src","sources":["loading/Loading.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -33,23 +33,16 @@ function getReanimated() {
|
|
|
33
33
|
return reanimatedModule;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* Falls back to ActivityIndicator if either is missing.
|
|
36
|
+
* Inner component that unconditionally calls Reanimated hooks.
|
|
37
|
+
* Only rendered when both react-native-svg and react-native-reanimated are available.
|
|
39
38
|
*/
|
|
40
|
-
|
|
39
|
+
const AnimatedSpinner = ({
|
|
41
40
|
color = '#005c67',
|
|
42
41
|
size = 26,
|
|
43
|
-
style
|
|
42
|
+
style,
|
|
43
|
+
svg,
|
|
44
|
+
reanimated
|
|
44
45
|
}) => {
|
|
45
|
-
const svg = getSvgModule();
|
|
46
|
-
const reanimated = getReanimated();
|
|
47
|
-
if (!svg || !reanimated) {
|
|
48
|
-
return /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
49
|
-
size: size > 30 ? 'large' : 'small',
|
|
50
|
-
color: color
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
46
|
const {
|
|
54
47
|
default: Svg,
|
|
55
48
|
Rect
|
|
@@ -62,19 +55,16 @@ export const SpinnerIcon = ({
|
|
|
62
55
|
withTiming,
|
|
63
56
|
Easing
|
|
64
57
|
} = reanimated;
|
|
65
|
-
|
|
66
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
67
58
|
const rotation = useSharedValue(0);
|
|
68
|
-
|
|
69
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
70
59
|
useEffect(() => {
|
|
71
60
|
rotation.value = withRepeat(withTiming(360, {
|
|
72
61
|
duration: 400,
|
|
73
62
|
easing: Easing.linear
|
|
74
63
|
}), -1, false);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
64
|
+
// Reanimated shared values are stable references; withRepeat/withTiming/Easing
|
|
65
|
+
// are module-level functions from the lazily-loaded module and are stable too.
|
|
66
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
67
|
+
}, []);
|
|
78
68
|
const animatedStyle = useAnimatedStyle(() => ({
|
|
79
69
|
transform: [{
|
|
80
70
|
rotate: `${rotation.value}deg`
|
|
@@ -175,5 +165,32 @@ export const SpinnerIcon = ({
|
|
|
175
165
|
})
|
|
176
166
|
});
|
|
177
167
|
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* iOS-style SVG spinner with 8 rotating rectangles and an opacity gradient trail.
|
|
171
|
+
* Requires react-native-svg and react-native-reanimated as peer dependencies.
|
|
172
|
+
* Falls back to ActivityIndicator if either is missing.
|
|
173
|
+
*/
|
|
174
|
+
export const SpinnerIcon = ({
|
|
175
|
+
color = '#005c67',
|
|
176
|
+
size = 26,
|
|
177
|
+
style
|
|
178
|
+
}) => {
|
|
179
|
+
const svg = getSvgModule();
|
|
180
|
+
const reanimated = getReanimated();
|
|
181
|
+
if (!svg || !reanimated) {
|
|
182
|
+
return /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
183
|
+
size: size > 30 ? 'large' : 'small',
|
|
184
|
+
color: color
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return /*#__PURE__*/_jsx(AnimatedSpinner, {
|
|
188
|
+
color: color,
|
|
189
|
+
size: size,
|
|
190
|
+
style: style,
|
|
191
|
+
svg: svg,
|
|
192
|
+
reanimated: reanimated
|
|
193
|
+
});
|
|
194
|
+
};
|
|
178
195
|
SpinnerIcon.displayName = 'SpinnerIcon';
|
|
179
196
|
//# sourceMappingURL=SpinnerIcon.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","ActivityIndicator","jsx","_jsx","jsxs","_jsxs","svgModule","svgModuleResolved","reanimatedModule","reanimatedResolved","getSvgModule","require","getReanimated","
|
|
1
|
+
{"version":3,"names":["React","useEffect","ActivityIndicator","jsx","_jsx","jsxs","_jsxs","svgModule","svgModuleResolved","reanimatedModule","reanimatedResolved","getSvgModule","require","getReanimated","AnimatedSpinner","color","size","style","svg","reanimated","default","Svg","Rect","Animated","useAnimatedStyle","useSharedValue","withRepeat","withTiming","Easing","rotation","value","duration","easing","linear","animatedStyle","transform","rotate","View","width","height","alignItems","justifyContent","children","viewBox","fill","opacity","rx","ry","x","y","SpinnerIcon","displayName"],"sourceRoot":"../../../src","sources":["loading/SpinnerIcon.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bottom-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAOH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bottom-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAOH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAkCtB,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACjH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,WAAW,yFAqTf,CAAC;AAuFH,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAMxD,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAMxD,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AAuPjB,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpinnerIcon.d.ts","sourceRoot":"","sources":["../../../../src/loading/SpinnerIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"SpinnerIcon.d.ts","sourceRoot":"","sources":["../../../../src/loading/SpinnerIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAoCjE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAwED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqBlD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bottom-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAOH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bottom-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAOH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAkCtB,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACjH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,WAAW,yFAqTf,CAAC;AAuFH,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAMxD,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAMxD,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AAuPjB,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpinnerIcon.d.ts","sourceRoot":"","sources":["../../../../src/loading/SpinnerIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"SpinnerIcon.d.ts","sourceRoot":"","sources":["../../../../src/loading/SpinnerIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAoCjE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAwED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqBlD,CAAC"}
|
package/package.json
CHANGED
|
@@ -23,15 +23,16 @@ import Animated, {
|
|
|
23
23
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
24
24
|
import { useTheme } from '../theme/use-theme';
|
|
25
25
|
|
|
26
|
-
//
|
|
27
|
-
// The hook is always called (Rules of Hooks) but does nothing without the library
|
|
26
|
+
// Keyboard handler — only on native platforms. On web, keyboard events are handled by the browser.
|
|
28
27
|
const noopKeyboardHandler = (_handlers: Record<string, (e: { height: number }) => void>, _deps: unknown[]) => {};
|
|
29
28
|
let useKeyboardHandler: (handlers: Record<string, (e: { height: number }) => void>, deps: unknown[]) => void = noopKeyboardHandler;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
if (Platform.OS !== 'web') {
|
|
30
|
+
try {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
32
|
+
useKeyboardHandler = require('react-native-keyboard-controller').useKeyboardHandler;
|
|
33
|
+
} catch {
|
|
34
|
+
// react-native-keyboard-controller not available
|
|
35
|
+
}
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get('window');
|
|
@@ -104,13 +105,13 @@ const BottomSheet = forwardRef((props: BottomSheetProps, ref: React.ForwardedRef
|
|
|
104
105
|
}, []);
|
|
105
106
|
|
|
106
107
|
// Dismiss callbacks
|
|
107
|
-
const safeClose = () => {
|
|
108
|
+
const safeClose = useCallback(() => {
|
|
108
109
|
if (onDismissAttempt?.()) {
|
|
109
110
|
onDismiss?.();
|
|
110
111
|
} else if (!onDismissAttempt) {
|
|
111
112
|
onDismiss?.();
|
|
112
113
|
}
|
|
113
|
-
};
|
|
114
|
+
}, [onDismissAttempt, onDismiss]);
|
|
114
115
|
|
|
115
116
|
const finishClose = useCallback(() => {
|
|
116
117
|
if (hasClosedRef.current) return;
|
|
@@ -185,66 +186,76 @@ const BottomSheet = forwardRef((props: BottomSheetProps, ref: React.ForwardedRef
|
|
|
185
186
|
|
|
186
187
|
const nativeGesture = useMemo(() => Gesture.Native(), []);
|
|
187
188
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (event.translationY > 0 && !atTopOrNearTop) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
if (newTranslateY >= 0) {
|
|
208
|
-
translateY.value = newTranslateY;
|
|
209
|
-
} else if (detached) {
|
|
210
|
-
// Only allow overdrag (pulling up beyond top) when detached
|
|
211
|
-
translateY.value = newTranslateY * 0.3;
|
|
212
|
-
} else {
|
|
213
|
-
// In normal mode, prevent overdrag - clamp to 0
|
|
214
|
-
translateY.value = 0;
|
|
215
|
-
}
|
|
216
|
-
})
|
|
217
|
-
.onEnd((event) => {
|
|
218
|
-
'worklet';
|
|
219
|
-
if (!allowPanClose.value) {
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
const velocity = event.velocityY;
|
|
223
|
-
const distance = translateY.value;
|
|
224
|
-
// Require a deeper pull to close (more like native bottom sheets)
|
|
225
|
-
const closeThreshold = Math.max(140, SCREEN_HEIGHT * 0.25);
|
|
226
|
-
const fastSwipeThreshold = 900;
|
|
227
|
-
const shouldClose =
|
|
228
|
-
velocity > fastSwipeThreshold ||
|
|
229
|
-
(distance > closeThreshold && velocity > -300);
|
|
230
|
-
|
|
231
|
-
if (shouldClose) {
|
|
232
|
-
translateY.value = withSpring(SCREEN_HEIGHT, {
|
|
233
|
-
...SPRING_CONFIG,
|
|
234
|
-
velocity: velocity,
|
|
235
|
-
});
|
|
236
|
-
opacity.value = withTiming(0, { duration: 250 }, (finished) => {
|
|
237
|
-
if (finished) {
|
|
238
|
-
runOnJS(finishClose)();
|
|
189
|
+
// Memoized pan gesture — recreating a Gesture.Pan() on every render causes
|
|
190
|
+
// gesture detach/reattach during animations and breaks React Compiler memoization.
|
|
191
|
+
const panGesture = useMemo(
|
|
192
|
+
() =>
|
|
193
|
+
Gesture.Pan()
|
|
194
|
+
.enabled(enablePanDownToClose)
|
|
195
|
+
.simultaneousWithExternalGesture(nativeGesture)
|
|
196
|
+
.onStart(() => {
|
|
197
|
+
'worklet';
|
|
198
|
+
context.value = { y: translateY.value };
|
|
199
|
+
allowPanClose.value = scrollOffsetY.value <= 8;
|
|
200
|
+
})
|
|
201
|
+
.onUpdate((event) => {
|
|
202
|
+
'worklet';
|
|
203
|
+
if (!allowPanClose.value) {
|
|
204
|
+
return;
|
|
239
205
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
206
|
+
const newTranslateY = context.value.y + event.translationY;
|
|
207
|
+
// If user is scrolling down while content isn't at (or near) the top, let ScrollView handle it
|
|
208
|
+
const atTopOrNearTop = scrollOffsetY.value <= 8; // slightly larger tolerance for smoother handoff
|
|
209
|
+
if (event.translationY > 0 && !atTopOrNearTop) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (newTranslateY >= 0) {
|
|
213
|
+
translateY.value = newTranslateY;
|
|
214
|
+
} else if (detached) {
|
|
215
|
+
// Only allow overdrag (pulling up beyond top) when detached
|
|
216
|
+
translateY.value = newTranslateY * 0.3;
|
|
217
|
+
} else {
|
|
218
|
+
// In normal mode, prevent overdrag - clamp to 0
|
|
219
|
+
translateY.value = 0;
|
|
220
|
+
}
|
|
221
|
+
})
|
|
222
|
+
.onEnd((event) => {
|
|
223
|
+
'worklet';
|
|
224
|
+
if (!allowPanClose.value) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const velocity = event.velocityY;
|
|
228
|
+
const distance = translateY.value;
|
|
229
|
+
// Require a deeper pull to close (more like native bottom sheets)
|
|
230
|
+
const closeThreshold = Math.max(140, SCREEN_HEIGHT * 0.25);
|
|
231
|
+
const fastSwipeThreshold = 900;
|
|
232
|
+
const shouldClose =
|
|
233
|
+
velocity > fastSwipeThreshold ||
|
|
234
|
+
(distance > closeThreshold && velocity > -300);
|
|
235
|
+
|
|
236
|
+
if (shouldClose) {
|
|
237
|
+
translateY.value = withSpring(SCREEN_HEIGHT, {
|
|
238
|
+
...SPRING_CONFIG,
|
|
239
|
+
velocity: velocity,
|
|
240
|
+
});
|
|
241
|
+
opacity.value = withTiming(0, { duration: 250 }, (finished) => {
|
|
242
|
+
if (finished) {
|
|
243
|
+
runOnJS(finishClose)();
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
} else {
|
|
247
|
+
translateY.value = withSpring(0, {
|
|
248
|
+
...SPRING_CONFIG,
|
|
249
|
+
velocity: velocity,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}),
|
|
253
|
+
// Shared values are stable refs; enablePanDownToClose and detached are the only
|
|
254
|
+
// JS-side values that change the gesture's behavior.
|
|
255
|
+
// finishClose is stable (useCallback with stable deps).
|
|
256
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
257
|
+
[enablePanDownToClose, detached, nativeGesture, finishClose],
|
|
258
|
+
);
|
|
248
259
|
|
|
249
260
|
const backdropStyle = useAnimatedStyle(() => ({
|
|
250
261
|
opacity: opacity.value,
|
|
@@ -309,7 +320,7 @@ const BottomSheet = forwardRef((props: BottomSheetProps, ref: React.ForwardedRef
|
|
|
309
320
|
// The sheet extends behind safe area, and screens add padding as needed
|
|
310
321
|
},
|
|
311
322
|
});
|
|
312
|
-
}, [colors.background, detached
|
|
323
|
+
}, [colors.background, detached]);
|
|
313
324
|
|
|
314
325
|
if (!rendered) return null;
|
|
315
326
|
|