@oxyhq/bloom 0.1.12 → 0.1.13
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 +13 -5
- 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 +13 -5
- 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 +72 -62
- 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":";;AAAA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AACvD,SAASC,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAA6B,cAAc;AAE1E,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SAASC,SAAS,QAAQ,qBAAkB;AAC5C,SAASC,WAAW,QAAQ,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAS5C,MAAMC,WAAW,GAAG;EAClBC,KAAK,EAAE;IAAEC,OAAO,EAAE,EAAE;IAAEC,IAAI,EAAE;EAAG,CAAC;EAChCC,MAAM,EAAE;IAAEF,OAAO,EAAE,EAAE;IAAEC,IAAI,EAAE;EAAG,CAAC;EACjCE,KAAK,EAAE;IAAEH,OAAO,EAAE,EAAE;IAAEC,IAAI,EAAE;EAAG;AACjC,CAAU;;AAEV;;AAEA,IAAIG,gBAAuC,GAAG,IAAI;AAClD,IAAIC,kBAAkB,GAAG,KAAK;AAE9B,SAASC,aAAaA,CAAA,EAA0B;EAC9C,IAAI,CAACD,kBAAkB,EAAE;IACvBA,kBAAkB,GAAG,IAAI;IACzB,IAAI;MACFD,gBAAgB,GAAGG,OAAO,CAAC,yBAAyB,CAAC;IACvD,CAAC,CAAC,MAAM;MACNH,gBAAgB,GAAG,IAAI;IACzB;EACF;EACA,OAAOA,gBAAgB;AACzB;AAEA,MAAMI,cAA6C,GAAGA,CAAC;EACrDC,IAAI,GAAG,QAAQ;EACfC,KAAK;EACLT,IAAI;EACJU,SAAS;EACTC,KAAK;EACLC,QAAQ,GAAG,IAAI;EACfC,QAAQ;EACRC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG1B,QAAQ,CAAC,CAAC;EACxB,MAAM2B,UAAU,GAAGpB,WAAW,CAACW,IAAI,CAAC;EACpC,MAAMU,iBAAiB,GAAGL,QAAQ,IAAII,UAAU,CAAClB,OAAO;EACxD,MAAMoB,YAAY,GAAGV,KAAK,IAAIO,KAAK,CAACI,MAAM,CAACC,OAAO;EAClD,MAAMC,SAAS,GAAGb,KAAK,IAAIO,KAAK,CAACI,MAAM,CAACG,aAAa;EAErD,oBACE3B,KAAA,CAACT,IAAI;IAACwB,KAAK,EAAE,CAACa,MAAM,CAACC,SAAS,EAAEd,KAAK,CAAE;IAACI,MAAM,EAAEA,MAAO;IAAAW,QAAA,GACpDZ,WAAW,iBAAIpB,IAAA,CAACF,WAAW;MAACgB,IAAI,EAAEU,iBAAkB;MAACT,KAAK,EAAEU;IAAa,CAAE,CAAC,EAC5EP,QAAQ,IAAIZ,IAAI,iBACfN,IAAA,CAACN,IAAI;MACHuB,KAAK,EAAE,CACLa,MAAM,CAACxB,IAAI,EACX;QAAES,KAAK,EAAEa,SAAS;QAAEK,QAAQ,EAAEV,UAAU,CAACjB,IAAI;QAAE4B,SAAS,EAAE;MAAE,CAAC,EAC7DlB,SAAS,CACT;MAAAgB,QAAA,EAED1B;IAAI,CACD,CACP;EAAA,CACG,CAAC;AAEX,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAYA,MAAM6B,kBAAqD,GAAGA,CAAC;EAC7DC,WAAW;EACXC,YAAY;EACZb,iBAAiB;EACjBC,YAAY;EACZL,WAAW;EACXH,KAAK;EACLI,MAAM;EACNiB;AACF,CAAC,KAAK;EACJ,MAAM;IAAEC,OAAO,EAAEC,QAAQ;IAAEC,gBAAgB;IAAEC,cAAc;IAAEC,UAAU;IAAEC;EAAO,CAAC,GAAGN,UAAU;EAE9F,MAAMO,MAAM,GAAGH,cAAc,CAACN,WAAW,GAAGC,YAAY,GAAG,CAAC,CAAC;EAC7D,MAAMS,OAAO,GAAGJ,cAAc,CAACN,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;EACnD,MAAMW,UAAU,GAAGL,cAAc,CAACN,WAAW,GAAG,CAAC,GAAG,CAACC,YAAY,CAAC;EAElE9C,SAAS,CAAC,MAAM;IACd,MAAMyD,YAAY,GAAG;MAAEC,QAAQ,EAAEpD,SAAS,CAACoD,QAAQ,CAACC,IAAI;MAAEC,MAAM,EAAEP,MAAM,CAACQ,GAAG,CAACR,MAAM,CAACS,KAAK;IAAE,CAAC;IAC5FR,MAAM,CAACS,KAAK,GAAGX,UAAU,CAACP,WAAW,GAAGC,YAAY,GAAG,CAAC,EAAEW,YAAY,CAAC;IACvEF,OAAO,CAACQ,KAAK,GAAGX,UAAU,CAACP,WAAW,GAAG,CAAC,GAAG,CAAC,EAAEY,YAAY,CAAC;IAC7DD,UAAU,CAACO,KAAK,GAAGX,UAAU,CAACP,WAAW,GAAG,CAAC,GAAG,CAACC,YAAY,EAAEW,YAAY,CAAC;IAC5E;IACA;IACA;EACF,CAAC,EAAE,CAACZ,WAAW,EAAEC,YAAY,CAAC,CAAC;EAE/B,MAAMkB,iBAAiB,GAAGd,gBAAgB,CAAC,OAAO;IAChDI,MAAM,EAAEA,MAAM,CAACS;EACjB,CAAC,CAAC,CAAC;EAEH,MAAME,aAAa,GAAGf,gBAAgB,CAAC,OAAO;IAC5CK,OAAO,EAAEA,OAAO,CAACQ,KAAK;IACtBG,SAAS,EAAE,CAAC;MAAEV,UAAU,EAAEA,UAAU,CAACO;IAAM,CAAC;EAC9C,CAAC,CAAC,CAAC;EAEH,oBACEtD,IAAA,CAACwC,QAAQ,CAAC/C,IAAI;IAACwB,KAAK,EAAE,CAACa,MAAM,CAAC4B,YAAY,EAAEH,iBAAiB,CAAE;IAAClC,MAAM,EAAEA,MAAO;IAAAW,QAAA,eAC7EhC,IAAA,CAACwC,QAAQ,CAAC/C,IAAI;MAACwB,KAAK,EAAE,CAACa,MAAM,CAAC6B,cAAc,EAAE;QAAEd,MAAM,EAAER;MAAa,CAAC,EAAEmB,aAAa,EAAEvC,KAAK,CAAE;MAAAe,QAAA,EAC3FZ,WAAW,iBAAIpB,IAAA,CAACF,WAAW;QAACgB,IAAI,EAAEU,iBAAkB;QAACT,KAAK,EAAEU;MAAa,CAAE;IAAC,CAChE;EAAC,CACH,CAAC;AAEpB,CAAC;AAED,MAAMmC,UAAqC,GAAGA,CAAC;EAC7C9C,IAAI,GAAG,QAAQ;EACfC,KAAK;EACLE,KAAK;EACLmB,WAAW,GAAG,IAAI;EAClBjB,QAAQ;EACR0C,YAAY,GAAG,CAAC;EAChBzC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG1B,QAAQ,CAAC,CAAC;EACxB,MAAM2B,UAAU,GAAGpB,WAAW,CAACW,IAAI,CAAC;EACpC,MAAMU,iBAAiB,GAAGL,QAAQ,IAAII,UAAU,CAAClB,OAAO;EACxD,MAAMgC,YAAY,GAAGyB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEvC,iBAAiB,GAAGD,UAAU,CAAClB,OAAO,GAAGwD,YAAY,CAAC;EACvF,MAAMpC,YAAY,GAAGV,KAAK,IAAIO,KAAK,CAACI,MAAM,CAACC,OAAO;EAElD,MAAMW,UAAU,GAAG3B,aAAa,CAAC,CAAC;EAElC,IAAI,CAAC2B,UAAU,EAAE;IACf;IACA,IAAI,CAACF,WAAW,EAAE,OAAO,IAAI;IAC7B,oBACEpC,IAAA,CAACP,IAAI;MAACwB,KAAK,EAAE,CAACa,MAAM,CAAC4B,YAAY,EAAE;QAAEb,MAAM,EAAER;MAAa,CAAC,EAAEpB,KAAK,CAAE;MAACI,MAAM,EAAEA,MAAO;MAAAW,QAAA,eAClFhC,IAAA,CAACP,IAAI;QAACwB,KAAK,EAAE,CAACa,MAAM,CAAC6B,cAAc,EAAE;UAAEd,MAAM,EAAER;QAAa,CAAC,CAAE;QAAAL,QAAA,EAC5DZ,WAAW,iBAAIpB,IAAA,CAACF,WAAW;UAACgB,IAAI,EAAEU,iBAAkB;UAACT,KAAK,EAAEU;QAAa,CAAE;MAAC,CACzE;IAAC,CACH,CAAC;EAEX;EAEA,oBACEzB,IAAA,CAACmC,kBAAkB;IACjBC,WAAW,EAAEA,WAAY;IACzBC,YAAY,EAAEA,YAAa;IAC3Bb,iBAAiB,EAAEA,iBAAkB;IACrCC,YAAY,EAAEA,YAAa;IAC3BL,WAAW,EAAEA,WAAY;IACzBH,KAAK,EAAEA,KAAM;IACbI,MAAM,EAAEA,MAAO;IACfiB,UAAU,EAAEA;EAAW,CACxB,CAAC;AAEN,CAAC;AAED,MAAM0B,eAA+C,GAAGA,CAAC;EACvDC,KAAK,GAAG,CAAC;EACTC,KAAK,GAAG,MAAM;EACdC,UAAU,GAAG,EAAE;EACflD,KAAK;EACLI;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG1B,QAAQ,CAAC,CAAC;EACxB,MAAMwE,aAAa,GAAG9C,KAAK,CAACI,MAAM,CAAC2C,mBAAmB;EAEtD,MAAMC,aAAa,GAAG9E,OAAO,CAC3B,MACE+E,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAER;EAAM,CAAC,EAAE,CAACS,CAAC,EAAEC,KAAK,kBACrC3E,IAAA,CAACP,IAAI;IAEHwB,KAAK,EAAE,CACLa,MAAM,CAAC8C,YAAY,EACnB;MACEV,KAAK,EAAG,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,GAAGA,KAAK,GAAsB;MAC1ErB,MAAM,EAAEsB,UAAU;MAClBU,eAAe,EAAET,aAAa;MAC9BU,YAAY,EAAEH,KAAK,GAAGV,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG;IACxC,CAAC;EACD,GATGU,KAUN,CACF,CAAC,EACJ,CAACV,KAAK,EAAEC,KAAK,EAAEC,UAAU,EAAEC,aAAa,CAC1C,CAAC;EAED,oBACEpE,IAAA,CAACP,IAAI;IAACwB,KAAK,EAAE,CAACa,MAAM,CAACiD,iBAAiB,EAAE9D,KAAK,CAAE;IAACI,MAAM,EAAEA,MAAO;IAAAW,QAAA,EAC5DsC;EAAa,CACV,CAAC;AAEX,CAAC;AAED,MAAMU,aAA2C,GAAGA,CAAC;EACnDlE,IAAI,GAAG,OAAO;EACdC,KAAK;EACLT,IAAI;EACJW,KAAK;EACLD,SAAS;EACTI,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG1B,QAAQ,CAAC,CAAC;EACxB,MAAM2B,UAAU,GAAGpB,WAAW,CAACW,IAAI,CAAC;EACpC,MAAMW,YAAY,GAAGV,KAAK,IAAIO,KAAK,CAACI,MAAM,CAACC,OAAO;EAClD,MAAMC,SAAS,GAAGN,KAAK,CAACI,MAAM,CAACG,aAAa;EAE5C,oBACE3B,KAAA,CAACT,IAAI;IAACwB,KAAK,EAAE,CAACa,MAAM,CAACmD,eAAe,EAAEhE,KAAK,CAAE;IAACI,MAAM,EAAEA,MAAO;IAAAW,QAAA,GAC1DZ,WAAW,iBAAIpB,IAAA,CAACF,WAAW;MAACgB,IAAI,EAAEX,WAAW,CAACC,KAAK,CAACC,OAAQ;MAACU,KAAK,EAAEU;IAAa,CAAE,CAAC,EACpFnB,IAAI,iBACHN,IAAA,CAACN,IAAI;MACHuB,KAAK,EAAE,CACL;QAAEF,KAAK,EAAEa,SAAS;QAAEK,QAAQ,EAAEV,UAAU,CAACjB,IAAI;QAAE4E,UAAU,EAAE;MAAE,CAAC,EAC9DlE,SAAS,CACT;MAAAgB,QAAA,EAED1B;IAAI,CACD,CACP;EAAA,CACG,CAAC;AAEX,CAAC;AAED,MAAM6E,gBAAwC,GAAIC,KAAK,IAAK;EAC1D,MAAMC,OAAO,GAAGD,KAAK,CAACC,OAAO,IAAI,SAAS;EAE1C,QAAQA,OAAO;IACb,KAAK,KAAK;MACR,oBAAOrF,IAAA,CAAC4D,UAAU;QAAA,GAAMwB;MAAK,CAAuB,CAAC;IACvD,KAAK,UAAU;MACb,oBAAOpF,IAAA,CAACgE,eAAe;QAAA,GAAMoB;MAAK,CAA4B,CAAC;IACjE,KAAK,QAAQ;MACX,oBAAOpF,IAAA,CAACgF,aAAa;QAAA,GAAMI;MAAK,CAA0B,CAAC;IAC7D,KAAK,SAAS;IACd;MACE,oBAAOpF,IAAA,CAACa,cAAc;QAAA,GAAMuE;MAAK,CAA2B,CAAC;EACjE;AACF,CAAC;AAED,OAAO,MAAME,OAAO,gBAAGhG,IAAI,CAAC6F,gBAAgB,CAAC;AAC7CG,OAAO,CAACC,WAAW,GAAG,SAAS;AAE/B,MAAMzD,MAAM,GAAGnC,UAAU,CAAC6F,MAAM,CAAC;EAC/BzD,SAAS,EAAE;IACT0D,IAAI,EAAE,CAAC;IACPC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDrF,IAAI,EAAE;IACJsF,SAAS,EAAE;EACb,CAAC;EACDlC,YAAY,EAAE;IACZQ,KAAK,EAAE,MAAM;IACb2B,QAAQ,EAAE,UAAU;IACpBC,QAAQ,EAAE;EACZ,CAAC;EACDnC,cAAc,EAAE;IACdO,KAAK,EAAE,MAAM;IACbwB,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBE,QAAQ,EAAE,UAAU;IACpBE,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE;EACR,CAAC;EACDjB,iBAAiB,EAAE;IACjBb,KAAK,EAAE;EACT,CAAC;EACDU,YAAY,EAAE;IACZqB,YAAY,EAAE;EAChB,CAAC;EACDhB,eAAe,EAAE;IACfiB,aAAa,EAAE,KAAK;IACpBR,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB;AACF,CAAC,CAAC","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":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,iBAAiB,QAAwB,cAAc;;AAEhE;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAIA,IAAIC,SAA+B,GAAG,IAAI;AAC1C,IAAIC,iBAAiB,GAAG,KAAK;AAC7B,IAAIC,gBAAuC,GAAG,IAAI;AAClD,IAAIC,kBAAkB,GAAG,KAAK;AAE9B,SAASC,YAAYA,CAAA,EAAyB;EAC5C,IAAI,CAACH,iBAAiB,EAAE;IACtBA,iBAAiB,GAAG,IAAI;IACxB,IAAI;MACFD,SAAS,GAAGK,OAAO,CAAC,kBAAkB,CAAC;IACzC,CAAC,CAAC,MAAM;MACNL,SAAS,GAAG,IAAI;IAClB;EACF;EACA,OAAOA,SAAS;AAClB;AAEA,SAASM,aAAaA,CAAA,EAA0B;EAC9C,IAAI,CAACH,kBAAkB,EAAE;IACvBA,kBAAkB,GAAG,IAAI;IACzB,IAAI;MACFD,gBAAgB,GAAGG,OAAO,CAAC,yBAAyB,CAAC;IACvD,CAAC,CAAC,MAAM;MACNH,gBAAgB,GAAG,IAAI;IACzB;EACF;EACA,OAAOA,gBAAgB;AACzB;AAaA;AACA;AACA;AACA;AACA,MAAMK,eAA+C,GAAGA,CAAC;EACvDC,KAAK,GAAG,SAAS;EACjBC,IAAI,GAAG,EAAE;EACTC,KAAK;EACLC,GAAG;EACHC;AACF,CAAC,KAAK;EACJ,MAAM;IAAEC,OAAO,EAAEC,GAAG;IAAEC;EAAK,CAAC,GAAGJ,GAAG;EAClC,MAAM;IACJE,OAAO,EAAEG,QAAQ;IACjBC,gBAAgB;IAChBC,cAAc;IACdC,UAAU;IACVC,UAAU;IACVC;EACF,CAAC,GAAGT,UAAU;EAEd,MAAMU,QAAQ,GAAGJ,cAAc,CAAC,CAAC,CAAC;EAElCxB,SAAS,CAAC,MAAM;IACd4B,QAAQ,CAACC,KAAK,GAAGJ,UAAU,CACzBC,UAAU,CAAC,GAAG,EAAE;MAAEI,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEJ,MAAM,CAACK;IAAO,CAAC,CAAC,EACzD,CAAC,CAAC,EACF,KACF,CAAC;IACD;IACA;IACA;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,aAAa,GAAGV,gBAAgB,CAAC,OAAO;IAC5CW,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE,GAAGP,QAAQ,CAACC,KAAK;IAAM,CAAC;EAChD,CAAC,CAAC,CAAC;EAEH,oBACE1B,IAAA,CAACmB,QAAQ,CAACc,IAAI;IACZpB,KAAK,EAAE,CACL;MACEqB,KAAK,EAAEtB,IAAI;MACXuB,MAAM,EAAEvB,IAAI;MACZwB,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE;IAClB,CAAC,EACDP,aAAa,EACbjB,KAAK,CACL;IAAAyB,QAAA,eAEFpC,KAAA,CAACe,GAAG;MAACsB,OAAO,EAAC,aAAa;MAACL,KAAK,EAAEtB,IAAK;MAACuB,MAAM,EAAEvB,IAAK;MAAA0B,QAAA,gBACnDtC,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,mBAAmB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eAClH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,OAAO;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,mBAAmB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eACtH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,MAAM;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,iBAAiB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eACnH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,OAAO;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,kBAAkB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eACrH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,KAAK;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,kBAAkB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eACnH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,OAAO;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,mBAAmB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eACtH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,MAAM;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,mBAAmB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC,eACrH7C,IAAA,CAACkB,IAAI;QAACsB,IAAI,EAAE7B,KAAM;QAACwB,MAAM,EAAC,IAAI;QAACM,OAAO,EAAC,OAAO;QAACC,EAAE,EAAC,GAAG;QAACC,EAAE,EAAC,GAAG;QAACZ,SAAS,EAAC,mBAAmB;QAACG,KAAK,EAAC,IAAI;QAACU,CAAC,EAAC,IAAI;QAACC,CAAC,EAAC;MAAI,CAAE,CAAC;IAAA,CACnH;EAAC,CACO,CAAC;AAEpB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAuC,GAAGA,CAAC;EACtDnC,KAAK,GAAG,SAAS;EACjBC,IAAI,GAAG,EAAE;EACTC;AACF,CAAC,KAAK;EACJ,MAAMC,GAAG,GAAGP,YAAY,CAAC,CAAC;EAC1B,MAAMQ,UAAU,GAAGN,aAAa,CAAC,CAAC;EAElC,IAAI,CAACK,GAAG,IAAI,CAACC,UAAU,EAAE;IACvB,oBAAOf,IAAA,CAACF,iBAAiB;MAACc,IAAI,EAAEA,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,OAAQ;MAACD,KAAK,EAAEA;IAAM,CAAE,CAAC;EACjF;EAEA,oBACEX,IAAA,CAACU,eAAe;IACdC,KAAK,EAAEA,KAAM;IACbC,IAAI,EAAEA,IAAK;IACXC,KAAK,EAAEA,KAAM;IACbC,GAAG,EAAEA,GAAI;IACTC,UAAU,EAAEA;EAAW,CACxB,CAAC;AAEN,CAAC;AAED+B,WAAW,CAACC,WAAW,GAAG,aAAa","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;AAiCtB,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,
|
|
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;AAiCtB,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;AAiCtB,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,
|
|
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;AAiCtB,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
|
@@ -104,13 +104,13 @@ const BottomSheet = forwardRef((props: BottomSheetProps, ref: React.ForwardedRef
|
|
|
104
104
|
}, []);
|
|
105
105
|
|
|
106
106
|
// Dismiss callbacks
|
|
107
|
-
const safeClose = () => {
|
|
107
|
+
const safeClose = useCallback(() => {
|
|
108
108
|
if (onDismissAttempt?.()) {
|
|
109
109
|
onDismiss?.();
|
|
110
110
|
} else if (!onDismissAttempt) {
|
|
111
111
|
onDismiss?.();
|
|
112
112
|
}
|
|
113
|
-
};
|
|
113
|
+
}, [onDismissAttempt, onDismiss]);
|
|
114
114
|
|
|
115
115
|
const finishClose = useCallback(() => {
|
|
116
116
|
if (hasClosedRef.current) return;
|
|
@@ -185,66 +185,76 @@ const BottomSheet = forwardRef((props: BottomSheetProps, ref: React.ForwardedRef
|
|
|
185
185
|
|
|
186
186
|
const nativeGesture = useMemo(() => Gesture.Native(), []);
|
|
187
187
|
|
|
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)();
|
|
188
|
+
// Memoized pan gesture — recreating a Gesture.Pan() on every render causes
|
|
189
|
+
// gesture detach/reattach during animations and breaks React Compiler memoization.
|
|
190
|
+
const panGesture = useMemo(
|
|
191
|
+
() =>
|
|
192
|
+
Gesture.Pan()
|
|
193
|
+
.enabled(enablePanDownToClose)
|
|
194
|
+
.simultaneousWithExternalGesture(nativeGesture)
|
|
195
|
+
.onStart(() => {
|
|
196
|
+
'worklet';
|
|
197
|
+
context.value = { y: translateY.value };
|
|
198
|
+
allowPanClose.value = scrollOffsetY.value <= 8;
|
|
199
|
+
})
|
|
200
|
+
.onUpdate((event) => {
|
|
201
|
+
'worklet';
|
|
202
|
+
if (!allowPanClose.value) {
|
|
203
|
+
return;
|
|
239
204
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
205
|
+
const newTranslateY = context.value.y + event.translationY;
|
|
206
|
+
// If user is scrolling down while content isn't at (or near) the top, let ScrollView handle it
|
|
207
|
+
const atTopOrNearTop = scrollOffsetY.value <= 8; // slightly larger tolerance for smoother handoff
|
|
208
|
+
if (event.translationY > 0 && !atTopOrNearTop) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (newTranslateY >= 0) {
|
|
212
|
+
translateY.value = newTranslateY;
|
|
213
|
+
} else if (detached) {
|
|
214
|
+
// Only allow overdrag (pulling up beyond top) when detached
|
|
215
|
+
translateY.value = newTranslateY * 0.3;
|
|
216
|
+
} else {
|
|
217
|
+
// In normal mode, prevent overdrag - clamp to 0
|
|
218
|
+
translateY.value = 0;
|
|
219
|
+
}
|
|
220
|
+
})
|
|
221
|
+
.onEnd((event) => {
|
|
222
|
+
'worklet';
|
|
223
|
+
if (!allowPanClose.value) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const velocity = event.velocityY;
|
|
227
|
+
const distance = translateY.value;
|
|
228
|
+
// Require a deeper pull to close (more like native bottom sheets)
|
|
229
|
+
const closeThreshold = Math.max(140, SCREEN_HEIGHT * 0.25);
|
|
230
|
+
const fastSwipeThreshold = 900;
|
|
231
|
+
const shouldClose =
|
|
232
|
+
velocity > fastSwipeThreshold ||
|
|
233
|
+
(distance > closeThreshold && velocity > -300);
|
|
234
|
+
|
|
235
|
+
if (shouldClose) {
|
|
236
|
+
translateY.value = withSpring(SCREEN_HEIGHT, {
|
|
237
|
+
...SPRING_CONFIG,
|
|
238
|
+
velocity: velocity,
|
|
239
|
+
});
|
|
240
|
+
opacity.value = withTiming(0, { duration: 250 }, (finished) => {
|
|
241
|
+
if (finished) {
|
|
242
|
+
runOnJS(finishClose)();
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
} else {
|
|
246
|
+
translateY.value = withSpring(0, {
|
|
247
|
+
...SPRING_CONFIG,
|
|
248
|
+
velocity: velocity,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}),
|
|
252
|
+
// Shared values are stable refs; enablePanDownToClose and detached are the only
|
|
253
|
+
// JS-side values that change the gesture's behavior.
|
|
254
|
+
// finishClose is stable (useCallback with stable deps).
|
|
255
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
256
|
+
[enablePanDownToClose, detached, nativeGesture, finishClose],
|
|
257
|
+
);
|
|
248
258
|
|
|
249
259
|
const backdropStyle = useAnimatedStyle(() => ({
|
|
250
260
|
opacity: opacity.value,
|
|
@@ -309,7 +319,7 @@ const BottomSheet = forwardRef((props: BottomSheetProps, ref: React.ForwardedRef
|
|
|
309
319
|
// The sheet extends behind safe area, and screens add padding as needed
|
|
310
320
|
},
|
|
311
321
|
});
|
|
312
|
-
}, [colors.background, detached
|
|
322
|
+
}, [colors.background, detached]);
|
|
313
323
|
|
|
314
324
|
if (!rendered) return null;
|
|
315
325
|
|
package/src/loading/Loading.tsx
CHANGED
|
@@ -70,6 +70,66 @@ const SpinnerLoading: React.FC<SpinnerLoadingProps> = ({
|
|
|
70
70
|
);
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Inner component for TopLoading that requires react-native-reanimated.
|
|
75
|
+
* Extracted to a dedicated component so all hooks are called unconditionally,
|
|
76
|
+
* satisfying the Rules of Hooks and React Compiler requirements.
|
|
77
|
+
*/
|
|
78
|
+
type AnimatedTopLoadingProps = {
|
|
79
|
+
showLoading: boolean;
|
|
80
|
+
targetHeight: number;
|
|
81
|
+
effectiveIconSize: number;
|
|
82
|
+
spinnerColor: string;
|
|
83
|
+
spinnerIcon: React.ReactNode | undefined;
|
|
84
|
+
style: TopLoadingProps['style'];
|
|
85
|
+
testID: string | undefined;
|
|
86
|
+
reanimated: NonNullable<ReturnType<typeof getReanimated>>;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const AnimatedTopLoading: React.FC<AnimatedTopLoadingProps> = ({
|
|
90
|
+
showLoading,
|
|
91
|
+
targetHeight,
|
|
92
|
+
effectiveIconSize,
|
|
93
|
+
spinnerColor,
|
|
94
|
+
spinnerIcon,
|
|
95
|
+
style,
|
|
96
|
+
testID,
|
|
97
|
+
reanimated,
|
|
98
|
+
}) => {
|
|
99
|
+
const { default: Animated, useAnimatedStyle, useSharedValue, withTiming, Easing } = reanimated;
|
|
100
|
+
|
|
101
|
+
const height = useSharedValue(showLoading ? targetHeight : 0);
|
|
102
|
+
const opacity = useSharedValue(showLoading ? 1 : 0);
|
|
103
|
+
const translateY = useSharedValue(showLoading ? 0 : -targetHeight);
|
|
104
|
+
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
const timingConfig = { duration: animation.duration.slow, easing: Easing.out(Easing.cubic) };
|
|
107
|
+
height.value = withTiming(showLoading ? targetHeight : 0, timingConfig);
|
|
108
|
+
opacity.value = withTiming(showLoading ? 1 : 0, timingConfig);
|
|
109
|
+
translateY.value = withTiming(showLoading ? 0 : -targetHeight, timingConfig);
|
|
110
|
+
// Easing, withTiming: module-level constants from lazily-resolved reanimated, stable.
|
|
111
|
+
// height/opacity/translateY: shared value objects, stable references.
|
|
112
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
113
|
+
}, [showLoading, targetHeight]);
|
|
114
|
+
|
|
115
|
+
const containerAnimated = useAnimatedStyle(() => ({
|
|
116
|
+
height: height.value,
|
|
117
|
+
}));
|
|
118
|
+
|
|
119
|
+
const innerAnimated = useAnimatedStyle(() => ({
|
|
120
|
+
opacity: opacity.value,
|
|
121
|
+
transform: [{ translateY: translateY.value }],
|
|
122
|
+
}));
|
|
123
|
+
|
|
124
|
+
return (
|
|
125
|
+
<Animated.View style={[styles.topContainer, containerAnimated]} testID={testID}>
|
|
126
|
+
<Animated.View style={[styles.topLoadingView, { height: targetHeight }, innerAnimated, style]}>
|
|
127
|
+
{spinnerIcon ?? <SpinnerIcon size={effectiveIconSize} color={spinnerColor} />}
|
|
128
|
+
</Animated.View>
|
|
129
|
+
</Animated.View>
|
|
130
|
+
);
|
|
131
|
+
};
|
|
132
|
+
|
|
73
133
|
const TopLoading: React.FC<TopLoadingProps> = ({
|
|
74
134
|
size = 'medium',
|
|
75
135
|
color,
|
|
@@ -88,8 +148,8 @@ const TopLoading: React.FC<TopLoadingProps> = ({
|
|
|
88
148
|
|
|
89
149
|
const reanimated = getReanimated();
|
|
90
150
|
|
|
91
|
-
// Non-animated fallback when reanimated is not available
|
|
92
151
|
if (!reanimated) {
|
|
152
|
+
// Non-animated fallback when reanimated is not available
|
|
93
153
|
if (!showLoading) return null;
|
|
94
154
|
return (
|
|
95
155
|
<View style={[styles.topContainer, { height: targetHeight }, style]} testID={testID}>
|
|
@@ -100,41 +160,17 @@ const TopLoading: React.FC<TopLoadingProps> = ({
|
|
|
100
160
|
);
|
|
101
161
|
}
|
|
102
162
|
|
|
103
|
-
const { default: Animated, useAnimatedStyle, useSharedValue, withTiming, Easing } = reanimated;
|
|
104
|
-
|
|
105
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
106
|
-
const height = useSharedValue(showLoading ? targetHeight : 0);
|
|
107
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
108
|
-
const opacity = useSharedValue(showLoading ? 1 : 0);
|
|
109
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
110
|
-
const translateY = useSharedValue(showLoading ? 0 : -targetHeight);
|
|
111
|
-
|
|
112
|
-
const timingConfig = { duration: animation.duration.slow, easing: Easing.out(Easing.cubic) };
|
|
113
|
-
|
|
114
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
115
|
-
useEffect(() => {
|
|
116
|
-
height.value = withTiming(showLoading ? targetHeight : 0, timingConfig);
|
|
117
|
-
opacity.value = withTiming(showLoading ? 1 : 0, timingConfig);
|
|
118
|
-
translateY.value = withTiming(showLoading ? 0 : -targetHeight, timingConfig);
|
|
119
|
-
}, [showLoading, targetHeight, height, opacity, translateY]);
|
|
120
|
-
|
|
121
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
122
|
-
const containerAnimated = useAnimatedStyle(() => ({
|
|
123
|
-
height: height.value,
|
|
124
|
-
}));
|
|
125
|
-
|
|
126
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
127
|
-
const innerAnimated = useAnimatedStyle(() => ({
|
|
128
|
-
opacity: opacity.value,
|
|
129
|
-
transform: [{ translateY: translateY.value }],
|
|
130
|
-
}));
|
|
131
|
-
|
|
132
163
|
return (
|
|
133
|
-
<
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
164
|
+
<AnimatedTopLoading
|
|
165
|
+
showLoading={showLoading}
|
|
166
|
+
targetHeight={targetHeight}
|
|
167
|
+
effectiveIconSize={effectiveIconSize}
|
|
168
|
+
spinnerColor={spinnerColor}
|
|
169
|
+
spinnerIcon={spinnerIcon}
|
|
170
|
+
style={style}
|
|
171
|
+
testID={testID}
|
|
172
|
+
reanimated={reanimated}
|
|
173
|
+
/>
|
|
138
174
|
);
|
|
139
175
|
};
|
|
140
176
|
|