@oxyhq/bloom 0.6.2 → 0.6.4
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/loading/Loading.js +26 -85
- package/lib/commonjs/loading/Loading.js.map +1 -1
- package/lib/commonjs/loading/SpinnerIcon.js +20 -27
- package/lib/commonjs/loading/SpinnerIcon.js.map +1 -1
- package/lib/commonjs/segmented-control/index.js +48 -11
- package/lib/commonjs/segmented-control/index.js.map +1 -1
- package/lib/module/loading/Loading.js +15 -74
- package/lib/module/loading/Loading.js.map +1 -1
- package/lib/module/loading/SpinnerIcon.js +15 -22
- package/lib/module/loading/SpinnerIcon.js.map +1 -1
- package/lib/module/segmented-control/index.js +49 -12
- package/lib/module/segmented-control/index.js.map +1 -1
- package/lib/typescript/commonjs/loading/Loading.d.ts.map +1 -1
- package/lib/typescript/commonjs/loading/SpinnerIcon.d.ts +2 -2
- package/lib/typescript/commonjs/loading/SpinnerIcon.d.ts.map +1 -1
- package/lib/typescript/commonjs/segmented-control/index.d.ts +9 -4
- package/lib/typescript/commonjs/segmented-control/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 +2 -2
- package/lib/typescript/module/loading/SpinnerIcon.d.ts.map +1 -1
- package/lib/typescript/module/segmented-control/index.d.ts +9 -4
- package/lib/typescript/module/segmented-control/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/loading/Loading.tsx +19 -74
- package/src/loading/SpinnerIcon.tsx +19 -22
- package/src/segmented-control/index.tsx +65 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useEffect","useMemo","View","Text","StyleSheet","
|
|
1
|
+
{"version":3,"names":["React","memo","useEffect","useMemo","View","Text","StyleSheet","Animated","Easing","useAnimatedStyle","useSharedValue","withTiming","useTheme","animation","SpinnerIcon","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","spinner","text","medium","large","SpinnerLoading","size","color","className","textStyle","style","showText","iconSize","spinnerIcon","testID","theme","sizeConfig","effectiveIconSize","spinnerColor","colors","primary","textColor","textSecondary","styles","container","children","fontSize","marginTop","TopLoading","showLoading","heightOffset","targetHeight","Math","max","height","opacity","translateY","timingConfig","duration","slow","easing","out","cubic","value","containerAnimated","innerAnimated","transform","topContainer","topLoadingView","SkeletonLoading","lines","width","lineHeight","skeletonColor","backgroundSecondary","skeletonLines","Array","from","length","_","index","skeletonLine","backgroundColor","marginBottom","skeletonContainer","InlineLoading","inlineContainer","marginLeft","LoadingComponent","props","variant","Loading","displayName","create","alignItems","justifyContent","padding","textAlign","position","overflow","top","left","borderRadius","flexDirection"],"sourceRoot":"../../../src","sources":["loading/Loading.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,45 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useEffect } from 'react';
|
|
4
4
|
import { ActivityIndicator } from 'react-native';
|
|
5
|
+
import Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withTiming } from 'react-native-reanimated';
|
|
5
6
|
import { lazyRequire } from "../utils/lazy-require.js";
|
|
6
7
|
|
|
7
|
-
//
|
|
8
|
-
//
|
|
8
|
+
// react-native-svg is loaded lazily so the loading module can fall back to
|
|
9
|
+
// ActivityIndicator when the host app doesn't ship SVG support. Reanimated,
|
|
10
|
+
// by contrast, MUST be statically imported: the worklets Babel plugin
|
|
11
|
+
// performs build-time closure analysis (`__closure` metadata) that fails on
|
|
12
|
+
// runtime requires, which would crash the UI thread with
|
|
13
|
+
// "Tried to synchronously call a non-worklet function `addListener`".
|
|
9
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
15
|
const getSvgModule = lazyRequire('react-native-svg');
|
|
11
|
-
const getReanimated = lazyRequire('react-native-reanimated');
|
|
12
16
|
/**
|
|
13
17
|
* Inner component that unconditionally calls Reanimated hooks.
|
|
14
|
-
* Only rendered when
|
|
18
|
+
* Only rendered when react-native-svg is available.
|
|
15
19
|
*/
|
|
16
20
|
const AnimatedSpinner = ({
|
|
17
21
|
color = 'currentColor',
|
|
18
22
|
size = 26,
|
|
19
23
|
className,
|
|
20
24
|
style,
|
|
21
|
-
svg
|
|
22
|
-
reanimated
|
|
25
|
+
svg
|
|
23
26
|
}) => {
|
|
24
27
|
const {
|
|
25
28
|
default: Svg,
|
|
26
29
|
Rect
|
|
27
30
|
} = svg;
|
|
28
|
-
const {
|
|
29
|
-
default: Animated,
|
|
30
|
-
useAnimatedStyle,
|
|
31
|
-
useSharedValue,
|
|
32
|
-
withRepeat,
|
|
33
|
-
withTiming,
|
|
34
|
-
Easing
|
|
35
|
-
} = reanimated;
|
|
36
31
|
const rotation = useSharedValue(0);
|
|
37
32
|
useEffect(() => {
|
|
38
33
|
rotation.value = withRepeat(withTiming(360, {
|
|
39
34
|
duration: 400,
|
|
40
35
|
easing: Easing.linear
|
|
41
36
|
}), -1, false);
|
|
42
|
-
//
|
|
43
|
-
// are module-level
|
|
37
|
+
// rotation is a stable shared value reference; withRepeat/withTiming/Easing
|
|
38
|
+
// are module-level constants from a static import and are stable too.
|
|
44
39
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
40
|
}, []);
|
|
46
41
|
const animatedStyle = useAnimatedStyle(() => ({
|
|
@@ -149,8 +144,8 @@ const AnimatedSpinner = ({
|
|
|
149
144
|
|
|
150
145
|
/**
|
|
151
146
|
* iOS-style SVG spinner with 8 rotating rectangles and an opacity gradient trail.
|
|
152
|
-
* Requires react-native-svg and react-native-reanimated
|
|
153
|
-
* Falls back to ActivityIndicator if
|
|
147
|
+
* Requires react-native-svg (lazy) and react-native-reanimated (static).
|
|
148
|
+
* Falls back to ActivityIndicator if react-native-svg is missing.
|
|
154
149
|
*/
|
|
155
150
|
export const SpinnerIcon = ({
|
|
156
151
|
color = 'currentColor',
|
|
@@ -159,8 +154,7 @@ export const SpinnerIcon = ({
|
|
|
159
154
|
style
|
|
160
155
|
}) => {
|
|
161
156
|
const svg = getSvgModule();
|
|
162
|
-
|
|
163
|
-
if (!svg || !reanimated) {
|
|
157
|
+
if (!svg) {
|
|
164
158
|
return /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
165
159
|
size: size > 30 ? 'large' : 'small',
|
|
166
160
|
color: color
|
|
@@ -171,8 +165,7 @@ export const SpinnerIcon = ({
|
|
|
171
165
|
size: size,
|
|
172
166
|
className: className,
|
|
173
167
|
style: style,
|
|
174
|
-
svg: svg
|
|
175
|
-
reanimated: reanimated
|
|
168
|
+
svg: svg
|
|
176
169
|
});
|
|
177
170
|
};
|
|
178
171
|
SpinnerIcon.displayName = 'SpinnerIcon';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","ActivityIndicator","
|
|
1
|
+
{"version":3,"names":["React","useEffect","ActivityIndicator","Animated","Easing","useAnimatedStyle","useSharedValue","withRepeat","withTiming","lazyRequire","jsx","_jsx","jsxs","_jsxs","getSvgModule","AnimatedSpinner","color","size","className","style","svg","default","Svg","Rect","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,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { createContext, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
-
import { Platform, Text, View } from 'react-native';
|
|
4
|
+
import { Platform, Pressable, Text, View } from 'react-native';
|
|
5
5
|
import Animated, { Easing, LinearTransition } from 'react-native-reanimated';
|
|
6
6
|
import { useTheme } from "../theme/use-theme.js";
|
|
7
7
|
import { atoms as a, platform } from "../styles/index.js";
|
|
8
|
-
import { Button } from "../button/index.js";
|
|
9
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
9
|
const InternalContext = /*#__PURE__*/createContext(null);
|
|
11
10
|
|
|
@@ -60,13 +59,24 @@ export function Root({
|
|
|
60
59
|
}
|
|
61
60
|
};
|
|
62
61
|
}, [value, selectedPosition, setSelectedPosition, onChange, type, size]);
|
|
62
|
+
|
|
63
|
+
// Height of the wrapping pill matches the active item height (item
|
|
64
|
+
// `minHeight` + 4px outer `p_xs` padding on both sides). Locking the
|
|
65
|
+
// outer View to this exact height keeps the control as a tight inline
|
|
66
|
+
// pill on every platform — without it, a parent column flex context
|
|
67
|
+
// (the default on a `<View>`) would let the Root stretch vertically
|
|
68
|
+
// and the items inside would inherit that stretched height, blowing
|
|
69
|
+
// the control up into a giant block on native.
|
|
70
|
+
const itemMinHeight = size === 'large' ? 40 : 32;
|
|
71
|
+
const pillHeight = itemMinHeight + 8;
|
|
63
72
|
return /*#__PURE__*/_jsxs(View, {
|
|
64
73
|
accessibilityLabel: label,
|
|
65
74
|
accessibilityHint: accessibilityHint ?? '',
|
|
66
|
-
style: [a.w_full, a.
|
|
75
|
+
style: [a.w_full, a.relative, a.flex_row, a.align_center, {
|
|
67
76
|
backgroundColor: theme.colors.contrast50
|
|
68
77
|
}, {
|
|
69
|
-
borderRadius: 14
|
|
78
|
+
borderRadius: 14,
|
|
79
|
+
height: pillHeight
|
|
70
80
|
}, a.p_xs, style],
|
|
71
81
|
role: type === 'tabs' ? 'tablist' : 'radiogroup',
|
|
72
82
|
children: [selectedPosition !== null && /*#__PURE__*/_jsx(Slider, {
|
|
@@ -84,7 +94,10 @@ export function Item({
|
|
|
84
94
|
style,
|
|
85
95
|
children,
|
|
86
96
|
onPress: onPressProp,
|
|
87
|
-
|
|
97
|
+
accessibilityLabel,
|
|
98
|
+
accessibilityHint,
|
|
99
|
+
testID,
|
|
100
|
+
disabled
|
|
88
101
|
}) {
|
|
89
102
|
const [position, setPosition] = useState(null);
|
|
90
103
|
const ctx = useContext(InternalContext);
|
|
@@ -108,8 +121,22 @@ export function Item({
|
|
|
108
121
|
ctx.onSelectValue(value, position);
|
|
109
122
|
onPressProp?.();
|
|
110
123
|
}, [ctx, value, position, onPressProp]);
|
|
124
|
+
|
|
125
|
+
// We render the segment as a flat `Pressable` (not Bloom's `Button`)
|
|
126
|
+
// for two reasons:
|
|
127
|
+
// 1. Layout: we need the touch target to participate directly in the
|
|
128
|
+
// Root's row flex layout so `flex: 1` distributes the items
|
|
129
|
+
// evenly on every platform. Bloom Button wraps its Pressable in
|
|
130
|
+
// an Animated.View that doesn't forward layout-affecting styles,
|
|
131
|
+
// which would collapse the segment to its natural text width.
|
|
132
|
+
// 2. Semantics: the Root carries `role="tablist"`/`"radiogroup"` and
|
|
133
|
+
// each item carries `role="tab"`/`"radio"`. Bloom Button always
|
|
134
|
+
// adds `accessibilityRole="button"` — that overrides the correct
|
|
135
|
+
// a11y role for tablist children.
|
|
136
|
+
const itemRole = ctx.type === 'tabs' ? 'tab' : 'radio';
|
|
137
|
+
const itemMinHeight = ctx.size === 'large' ? 40 : 32;
|
|
111
138
|
return /*#__PURE__*/_jsx(View, {
|
|
112
|
-
style: [a.flex_1, a.flex_row],
|
|
139
|
+
style: [a.flex_1, a.flex_row, a.align_stretch],
|
|
113
140
|
onLayout: evt => {
|
|
114
141
|
const measuredPosition = {
|
|
115
142
|
x: evt.nativeEvent.layout.x,
|
|
@@ -120,14 +147,24 @@ export function Item({
|
|
|
120
147
|
}
|
|
121
148
|
setPosition(measuredPosition);
|
|
122
149
|
},
|
|
123
|
-
children: /*#__PURE__*/_jsx(
|
|
124
|
-
...props,
|
|
150
|
+
children: /*#__PURE__*/_jsx(Pressable, {
|
|
125
151
|
onPress: onPress,
|
|
126
|
-
accessibilityLabel:
|
|
127
|
-
accessibilityHint:
|
|
128
|
-
|
|
129
|
-
|
|
152
|
+
accessibilityLabel: accessibilityLabel,
|
|
153
|
+
accessibilityHint: accessibilityHint,
|
|
154
|
+
accessibilityState: {
|
|
155
|
+
selected: active,
|
|
156
|
+
disabled: !!disabled
|
|
157
|
+
},
|
|
158
|
+
role: itemRole,
|
|
159
|
+
disabled: disabled,
|
|
160
|
+
testID: testID,
|
|
161
|
+
style: ({
|
|
162
|
+
pressed
|
|
163
|
+
}) => [a.flex_1, a.flex_row, a.align_center, a.justify_center, a.bg_transparent, a.px_sm, a.py_xs, {
|
|
164
|
+
minHeight: itemMinHeight,
|
|
130
165
|
borderRadius: 10
|
|
166
|
+
}, pressed && !disabled && {
|
|
167
|
+
opacity: 0.7
|
|
131
168
|
}, style],
|
|
132
169
|
children: /*#__PURE__*/_jsx(InternalItemContext.Provider, {
|
|
133
170
|
value: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useCallback","useContext","useLayoutEffect","useMemo","useRef","useState","Platform","Text","View","Animated","Easing","LinearTransition","useTheme","atoms","a","platform","
|
|
1
|
+
{"version":3,"names":["createContext","useCallback","useContext","useLayoutEffect","useMemo","useRef","useState","Platform","Pressable","Text","View","Animated","Easing","LinearTransition","useTheme","atoms","a","platform","jsx","_jsx","jsxs","_jsxs","InternalContext","Root","label","type","size","value","onChange","children","style","accessibilityHint","theme","selectedPosition","setSelectedPosition","contextValue","selectedValue","onSelectValue","val","position","updatePosition","currPos","width","x","itemMinHeight","pillHeight","accessibilityLabel","w_full","relative","flex_row","align_center","backgroundColor","colors","contrast50","borderRadius","height","p_xs","role","Slider","Provider","InternalItemContext","Item","onPress","onPressProp","testID","disabled","setPosition","ctx","Error","active","needsUpdate","updatePositionRef","current","positionRef","itemRole","flex_1","align_stretch","onLayout","evt","measuredPosition","nativeEvent","layout","accessibilityState","selected","pressed","justify_center","bg_transparent","px_sm","py_xs","minHeight","opacity","ItemText","props","text_center","text_md","font_medium","px_xs","color","text","textTertiary","nativeLayout","OS","easing","out","exp","undefined","absolute","background","top","bottom","left","web","boxShadow","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","native","transform","translateX"],"sourceRoot":"../../../src","sources":["segmented-control/index.tsx"],"mappings":";;AAAA,SACEA,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,eAAe,EACfC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,QAAQ,EACRC,SAAS,EAGTC,IAAI,EAEJC,IAAI,QAEC,cAAc;AACrB,OAAOC,QAAQ,IAAIC,MAAM,EAAEC,gBAAgB,QAAQ,yBAAyB;AAE5E,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SAASC,KAAK,IAAIC,CAAC,EAAEC,QAAQ,QAAQ,oBAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEjD,MAAMC,eAAe,gBAAGtB,aAAa,CAU3B,IAAI,CAAC;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASuB,IAAIA,CAAmB;EACrCC,KAAK;EACLC,IAAI,GAAG,OAAO;EACdC,IAAI,GAAG,OAAO;EACdC,KAAK;EACLC,QAAQ;EACRC,QAAQ;EACRC,KAAK;EACLC;AAUF,CAAC,EAAE;EACD,MAAMC,KAAK,GAAGlB,QAAQ,CAAC,CAAC;EACxB,MAAM,CAACmB,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG5B,QAAQ,CAG9C,IAAI,CAAC;EAEf,MAAM6B,YAAY,GAAG/B,OAAO,CAAC,MAAM;IACjC,OAAO;MACLqB,IAAI;MACJC,IAAI;MACJU,aAAa,EAAET,KAAK;MACpBM,gBAAgB;MAChBI,aAAa,EAAEA,CACbC,GAAW,EACXC,QAA6C,KAC1C;QACHX,QAAQ,CAACU,GAAQ,CAAC;QAClB,IAAIC,QAAQ,EAAEL,mBAAmB,CAACK,QAAQ,CAAC;MAC7C,CAAC;MACDC,cAAc,EAAGD,QAAsC,IAAK;QAC1DL,mBAAmB,CAACO,OAAO,IAAI;UAC7B,IACEA,OAAO,IACPA,OAAO,CAACC,KAAK,KAAKH,QAAQ,CAACG,KAAK,IAChCD,OAAO,CAACE,CAAC,KAAKJ,QAAQ,CAACI,CAAC,EACxB;YACA,OAAOF,OAAO;UAChB;UACA,OAAOF,QAAQ;QACjB,CAAC,CAAC;MACJ;IACF,CAAC;EACH,CAAC,EAAE,CAACZ,KAAK,EAAEM,gBAAgB,EAAEC,mBAAmB,EAAEN,QAAQ,EAAEH,IAAI,EAAEC,IAAI,CAAC,CAAC;;EAExE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMkB,aAAa,GAAGlB,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,EAAE;EAChD,MAAMmB,UAAU,GAAGD,aAAa,GAAG,CAAC;EAEpC,oBACEvB,KAAA,CAACX,IAAI;IACHoC,kBAAkB,EAAEtB,KAAM;IAC1BO,iBAAiB,EAAEA,iBAAiB,IAAI,EAAG;IAC3CD,KAAK,EAAE,CACLd,CAAC,CAAC+B,MAAM,EACR/B,CAAC,CAACgC,QAAQ,EACVhC,CAAC,CAACiC,QAAQ,EACVjC,CAAC,CAACkC,YAAY,EACd;MAAEC,eAAe,EAAEnB,KAAK,CAACoB,MAAM,CAACC;IAAW,CAAC,EAC5C;MAAEC,YAAY,EAAE,EAAE;MAAEC,MAAM,EAAEV;IAAW,CAAC,EACxC7B,CAAC,CAACwC,IAAI,EACN1B,KAAK,CACL;IACF2B,IAAI,EAAEhC,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,YAAa;IAAAI,QAAA,GAChDI,gBAAgB,KAAK,IAAI,iBACxBd,IAAA,CAACuC,MAAM;MAACf,CAAC,EAAEV,gBAAgB,CAACU,CAAE;MAACD,KAAK,EAAET,gBAAgB,CAACS;IAAM,CAAE,CAChE,eACDvB,IAAA,CAACG,eAAe,CAACqC,QAAQ;MAAChC,KAAK,EAAEQ,YAAa;MAAAN,QAAA,EAC3CA;IAAQ,CACe,CAAC;EAAA,CACvB,CAAC;AAEX;AAEA,MAAM+B,mBAAmB,gBAAG5D,aAAa,CAE/B,IAAI,CAAC;AAEf,OAAO,SAAS6D,IAAIA,CAAC;EACnBlC,KAAK;EACLG,KAAK;EACLD,QAAQ;EACRiC,OAAO,EAAEC,WAAW;EACpBjB,kBAAkB;EAClBf,iBAAiB;EACjBiC,MAAM;EACNC;AAUF,CAAC,EAAE;EACD,MAAM,CAAC1B,QAAQ,EAAE2B,WAAW,CAAC,GAAG5D,QAAQ,CACtC,IACF,CAAC;EAED,MAAM6D,GAAG,GAAGjE,UAAU,CAACoB,eAAe,CAAC;EACvC,IAAI,CAAC6C,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CACb,mEACF,CAAC;EACH;EAEA,MAAMC,MAAM,GAAGF,GAAG,CAAC/B,aAAa,KAAKT,KAAK;EAE1C,MAAM2C,WAAW,GACfD,MAAM,IACN9B,QAAQ,KACP4B,GAAG,CAAClC,gBAAgB,EAAEU,CAAC,KAAKJ,QAAQ,CAACI,CAAC,IACrCwB,GAAG,CAAClC,gBAAgB,EAAES,KAAK,KAAKH,QAAQ,CAACG,KAAK,CAAC;;EAEnD;EACA,MAAM6B,iBAAiB,GAAGlE,MAAM,CAAC8D,GAAG,CAAC3B,cAAc,CAAC;EACpD+B,iBAAiB,CAACC,OAAO,GAAGL,GAAG,CAAC3B,cAAc;EAE9C,MAAMiC,WAAW,GAAGpE,MAAM,CAACkC,QAAQ,CAAC;EACpCkC,WAAW,CAACD,OAAO,GAAGjC,QAAQ;EAE9BpC,eAAe,CAAC,MAAM;IACpB,IAAImE,WAAW,IAAIG,WAAW,CAACD,OAAO,EAAE;MACtCD,iBAAiB,CAACC,OAAO,CAACC,WAAW,CAACD,OAAO,CAAC;IAChD;EACF,CAAC,EAAE,CAACF,WAAW,CAAC,CAAC;EAEjB,MAAMR,OAAO,GAAG7D,WAAW,CAAC,MAAM;IAChCkE,GAAG,CAAC9B,aAAa,CAACV,KAAK,EAAEY,QAAQ,CAAC;IAClCwB,WAAW,GAAG,CAAC;EACjB,CAAC,EAAE,CAACI,GAAG,EAAExC,KAAK,EAAEY,QAAQ,EAAEwB,WAAW,CAAC,CAAC;;EAEvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMW,QAAQ,GAAGP,GAAG,CAAC1C,IAAI,KAAK,MAAM,GAAG,KAAK,GAAG,OAAO;EACtD,MAAMmB,aAAa,GAAGuB,GAAG,CAACzC,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,EAAE;EAEpD,oBACEP,IAAA,CAACT,IAAI;IACHoB,KAAK,EAAE,CAACd,CAAC,CAAC2D,MAAM,EAAE3D,CAAC,CAACiC,QAAQ,EAAEjC,CAAC,CAAC4D,aAAa,CAAE;IAC/CC,QAAQ,EAAEC,GAAG,IAAI;MACf,MAAMC,gBAAgB,GAAG;QACvBpC,CAAC,EAAEmC,GAAG,CAACE,WAAW,CAACC,MAAM,CAACtC,CAAC;QAC3BD,KAAK,EAAEoC,GAAG,CAACE,WAAW,CAACC,MAAM,CAACvC;MAChC,CAAC;MACD,IAAI,CAACyB,GAAG,CAAClC,gBAAgB,IAAIoC,MAAM,EAAE;QACnCF,GAAG,CAAC9B,aAAa,CAACV,KAAK,EAAEoD,gBAAgB,CAAC;MAC5C;MACAb,WAAW,CAACa,gBAAgB,CAAC;IAC/B,CAAE;IAAAlD,QAAA,eACFV,IAAA,CAACX,SAAS;MACRsD,OAAO,EAAEA,OAAQ;MACjBhB,kBAAkB,EAAEA,kBAAmB;MACvCf,iBAAiB,EAAEA,iBAAkB;MACrCmD,kBAAkB,EAAE;QAAEC,QAAQ,EAAEd,MAAM;QAAEJ,QAAQ,EAAE,CAAC,CAACA;MAAS,CAAE;MAC/DR,IAAI,EAAEiB,QAAS;MACfT,QAAQ,EAAEA,QAAS;MACnBD,MAAM,EAAEA,MAAO;MACflC,KAAK,EAAEA,CAAC;QAAEsD;MAAQ,CAAC,KAAK,CACtBpE,CAAC,CAAC2D,MAAM,EACR3D,CAAC,CAACiC,QAAQ,EACVjC,CAAC,CAACkC,YAAY,EACdlC,CAAC,CAACqE,cAAc,EAChBrE,CAAC,CAACsE,cAAc,EAChBtE,CAAC,CAACuE,KAAK,EACPvE,CAAC,CAACwE,KAAK,EACP;QAAEC,SAAS,EAAE7C,aAAa;QAAEU,YAAY,EAAE;MAAG,CAAC,EAC9C8B,OAAO,IAAI,CAACnB,QAAQ,IAAI;QAAEyB,OAAO,EAAE;MAAI,CAAC,EACxC5D,KAAK,CACL;MAAAD,QAAA,eACFV,IAAA,CAACyC,mBAAmB,CAACD,QAAQ;QAAChC,KAAK,EAAE;UAAE0C;QAAO,CAAE;QAAAxC,QAAA,EAC7CA;MAAQ,CACmB;IAAC,CACtB;EAAC,CACR,CAAC;AAEX;AAEA,OAAO,SAAS8D,QAAQA,CAAC;EACvB7D,KAAK;EACLD,QAAQ;EACR,GAAG+D;AAIL,CAAC,EAAE;EACD,MAAM5D,KAAK,GAAGlB,QAAQ,CAAC,CAAC;EACxB,MAAMqD,GAAG,GAAGjE,UAAU,CAAC0D,mBAAmB,CAAC;EAC3C,IAAI,CAACO,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CACb,uEACF,CAAC;EACH;EAEA,oBACEjD,IAAA,CAACV,IAAI;IAAA,GACCmF,KAAK;IACT9D,KAAK,EAAE,CACLd,CAAC,CAAC6E,WAAW,EACb7E,CAAC,CAAC8E,OAAO,EACT9E,CAAC,CAAC+E,WAAW,EACb/E,CAAC,CAACgF,KAAK,EACP7B,GAAG,CAACE,MAAM,GACN;MAAE4B,KAAK,EAAEjE,KAAK,CAACoB,MAAM,CAAC8C;IAAK,CAAC,GAC5B;MAAED,KAAK,EAAEjE,KAAK,CAACoB,MAAM,CAAC+C;IAAa,CAAC,EACxCrE,KAAK,CACL;IAAAD,QAAA,EACDA;EAAQ,CACL,CAAC;AAEX;AAEA,SAAS6B,MAAMA,CAAC;EAAEf,CAAC;EAAED;AAAoC,CAAC,EAAE;EAC1D,MAAMV,KAAK,GAAGlB,QAAQ,CAAC,CAAC;EAExB,MAAMsF,YAAY,GAChB7F,QAAQ,CAAC8F,EAAE,KAAK,KAAK,GACjBxF,gBAAgB,CAACyF,MAAM,CAAC1F,MAAM,CAAC2F,GAAG,CAAC3F,MAAM,CAAC4F,GAAG,CAAC,CAAC,GAC/CC,SAAS;EAEf,oBACEtF,IAAA,CAACR,QAAQ,CAACD,IAAI;IACZuE,MAAM,EAAEmB,YAAa;IACrBtE,KAAK,EAAE,CACLd,CAAC,CAAC0F,QAAQ,EACV;MAAEvD,eAAe,EAAEnB,KAAK,CAACoB,MAAM,CAACuD;IAAW,CAAC,EAC5C;MACEC,GAAG,EAAE,CAAC;MACNC,MAAM,EAAE,CAAC;MACTC,IAAI,EAAE,CAAC;MACPpE,KAAK;MACLY,YAAY,EAAE;IAChB,CAAC,EACDrC,QAAQ,CAAC;MACP8F,GAAG,EAAE;QACHC,SAAS,EAAE;MACb,CAAC;MACDC,GAAG,EAAE;QACHC,WAAW,EAAE,MAAM;QACnBC,YAAY,EAAE;UAAEzE,KAAK,EAAE,CAAC;UAAEa,MAAM,EAAE;QAAE,CAAC;QACrC6D,aAAa,EAAE,IAAI,GAAG,IAAI;QAC1BC,YAAY,EAAE;MAChB,CAAC;MACDC,OAAO,EAAE;QAAEC,SAAS,EAAE;MAAK;IAC7B,CAAC,CAAC,EACFtG,QAAQ,CAAC;MACPuG,MAAM,EAAE;QAAEV,IAAI,EAAEnE;MAAE,CAAC;MACnBoE,GAAG,EAAE;QAAEU,SAAS,EAAE,CAAC;UAAEC,UAAU,EAAE/E;QAAE,CAAC;MAAE;IACxC,CAAC,CAAC;EACF,CACH,CAAC;AAEN","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAYxD,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AA+KjB,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
|
|
@@ -8,8 +8,8 @@ interface SpinnerIconProps {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* iOS-style SVG spinner with 8 rotating rectangles and an opacity gradient trail.
|
|
11
|
-
* Requires react-native-svg and react-native-reanimated
|
|
12
|
-
* Falls back to ActivityIndicator if
|
|
11
|
+
* Requires react-native-svg (lazy) and react-native-reanimated (static).
|
|
12
|
+
* Falls back to ActivityIndicator if react-native-svg is missing.
|
|
13
13
|
*/
|
|
14
14
|
export declare const SpinnerIcon: React.FC<SpinnerIconProps>;
|
|
15
15
|
export {};
|
|
@@ -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,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
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;AAqBjE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAqED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqBlD,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { type StyleProp, Text, type TextStyle, type ViewStyle } from 'react-native';
|
|
2
|
-
import { type ButtonProps } from '../button';
|
|
1
|
+
import { type PressableProps, type StyleProp, Text, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
2
|
/**
|
|
4
3
|
* Segmented control component.
|
|
5
4
|
*
|
|
@@ -29,10 +28,16 @@ export declare function Root<T extends string>({ label, type, size, value, onCha
|
|
|
29
28
|
style?: StyleProp<ViewStyle>;
|
|
30
29
|
accessibilityHint?: string;
|
|
31
30
|
}): import("react/jsx-runtime").JSX.Element;
|
|
32
|
-
export declare function Item({ value, style, children, onPress: onPressProp,
|
|
31
|
+
export declare function Item({ value, style, children, onPress: onPressProp, accessibilityLabel, accessibilityHint, testID, disabled, }: {
|
|
33
32
|
value: string;
|
|
34
33
|
children: React.ReactNode;
|
|
35
|
-
|
|
34
|
+
style?: StyleProp<ViewStyle>;
|
|
35
|
+
onPress?: () => void;
|
|
36
|
+
accessibilityLabel?: string;
|
|
37
|
+
accessibilityHint?: string;
|
|
38
|
+
testID?: string;
|
|
39
|
+
disabled?: PressableProps['disabled'];
|
|
40
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
36
41
|
export declare function ItemText({ style, children, ...props }: {
|
|
37
42
|
children: React.ReactNode;
|
|
38
43
|
style?: StyleProp<TextStyle>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/segmented-control/index.tsx"],"names":[],"mappings":"AASA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/segmented-control/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,IAAI,EACJ,KAAK,SAAS,EAEd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAkBtB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,EACrC,KAAK,EACL,IAAc,EACd,IAAc,EACd,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,2CAoEA;AAMD,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CACvC,2CA2FA;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,IAAI,CACnE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EACjC,OAAO,GAAG,UAAU,CACrB,2CAyBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAYxD,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AA+KjB,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
|
|
@@ -8,8 +8,8 @@ interface SpinnerIconProps {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* iOS-style SVG spinner with 8 rotating rectangles and an opacity gradient trail.
|
|
11
|
-
* Requires react-native-svg and react-native-reanimated
|
|
12
|
-
* Falls back to ActivityIndicator if
|
|
11
|
+
* Requires react-native-svg (lazy) and react-native-reanimated (static).
|
|
12
|
+
* Falls back to ActivityIndicator if react-native-svg is missing.
|
|
13
13
|
*/
|
|
14
14
|
export declare const SpinnerIcon: React.FC<SpinnerIconProps>;
|
|
15
15
|
export {};
|
|
@@ -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,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
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;AAqBjE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAqED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqBlD,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { type StyleProp, Text, type TextStyle, type ViewStyle } from 'react-native';
|
|
2
|
-
import { type ButtonProps } from '../button';
|
|
1
|
+
import { type PressableProps, type StyleProp, Text, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
2
|
/**
|
|
4
3
|
* Segmented control component.
|
|
5
4
|
*
|
|
@@ -29,10 +28,16 @@ export declare function Root<T extends string>({ label, type, size, value, onCha
|
|
|
29
28
|
style?: StyleProp<ViewStyle>;
|
|
30
29
|
accessibilityHint?: string;
|
|
31
30
|
}): import("react/jsx-runtime").JSX.Element;
|
|
32
|
-
export declare function Item({ value, style, children, onPress: onPressProp,
|
|
31
|
+
export declare function Item({ value, style, children, onPress: onPressProp, accessibilityLabel, accessibilityHint, testID, disabled, }: {
|
|
33
32
|
value: string;
|
|
34
33
|
children: React.ReactNode;
|
|
35
|
-
|
|
34
|
+
style?: StyleProp<ViewStyle>;
|
|
35
|
+
onPress?: () => void;
|
|
36
|
+
accessibilityLabel?: string;
|
|
37
|
+
accessibilityHint?: string;
|
|
38
|
+
testID?: string;
|
|
39
|
+
disabled?: PressableProps['disabled'];
|
|
40
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
36
41
|
export declare function ItemText({ style, children, ...props }: {
|
|
37
42
|
children: React.ReactNode;
|
|
38
43
|
style?: StyleProp<TextStyle>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/segmented-control/index.tsx"],"names":[],"mappings":"AASA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/segmented-control/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,IAAI,EACJ,KAAK,SAAS,EAEd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAkBtB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,EACrC,KAAK,EACL,IAAc,EACd,IAAc,EACd,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,2CAoEA;AAMD,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CACvC,2CA2FA;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,IAAI,CACnE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EACjC,OAAO,GAAG,UAAU,CACrB,2CAyBA"}
|
package/package.json
CHANGED
package/src/loading/Loading.tsx
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import React, { memo, useEffect, useMemo } from 'react';
|
|
2
2
|
import { View, Text, StyleSheet, type DimensionValue } from 'react-native';
|
|
3
|
+
import Animated, {
|
|
4
|
+
Easing,
|
|
5
|
+
useAnimatedStyle,
|
|
6
|
+
useSharedValue,
|
|
7
|
+
withTiming,
|
|
8
|
+
} from 'react-native-reanimated';
|
|
3
9
|
|
|
4
10
|
import { useTheme } from '../theme/use-theme';
|
|
5
11
|
import { animation } from '../styles/tokens';
|
|
6
|
-
import { lazyRequire } from '../utils/lazy-require';
|
|
7
12
|
import { SpinnerIcon } from './SpinnerIcon';
|
|
8
13
|
import type {
|
|
9
14
|
LoadingProps,
|
|
@@ -19,10 +24,6 @@ const SIZE_CONFIG = {
|
|
|
19
24
|
large: { spinner: 44, text: 16 },
|
|
20
25
|
} as const;
|
|
21
26
|
|
|
22
|
-
// Lazy-loaded reanimated for the top variant
|
|
23
|
-
type ReanimatedType = typeof import('react-native-reanimated');
|
|
24
|
-
const getReanimated = lazyRequire<ReanimatedType>('react-native-reanimated');
|
|
25
|
-
|
|
26
27
|
const SpinnerLoading: React.FC<SpinnerLoadingProps> = ({
|
|
27
28
|
size = 'medium',
|
|
28
29
|
color,
|
|
@@ -59,33 +60,21 @@ const SpinnerLoading: React.FC<SpinnerLoadingProps> = ({
|
|
|
59
60
|
);
|
|
60
61
|
};
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
* satisfying the Rules of Hooks and React Compiler requirements.
|
|
66
|
-
*/
|
|
67
|
-
type AnimatedTopLoadingProps = {
|
|
68
|
-
showLoading: boolean;
|
|
69
|
-
targetHeight: number;
|
|
70
|
-
effectiveIconSize: number;
|
|
71
|
-
spinnerColor: string;
|
|
72
|
-
spinnerIcon: React.ReactNode | undefined;
|
|
73
|
-
style: TopLoadingProps['style'];
|
|
74
|
-
testID: string | undefined;
|
|
75
|
-
reanimated: NonNullable<ReturnType<typeof getReanimated>>;
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const AnimatedTopLoading: React.FC<AnimatedTopLoadingProps> = ({
|
|
79
|
-
showLoading,
|
|
80
|
-
targetHeight,
|
|
81
|
-
effectiveIconSize,
|
|
82
|
-
spinnerColor,
|
|
83
|
-
spinnerIcon,
|
|
63
|
+
const TopLoading: React.FC<TopLoadingProps> = ({
|
|
64
|
+
size = 'medium',
|
|
65
|
+
color,
|
|
84
66
|
style,
|
|
67
|
+
showLoading = true,
|
|
68
|
+
iconSize,
|
|
69
|
+
heightOffset = 0,
|
|
70
|
+
spinnerIcon,
|
|
85
71
|
testID,
|
|
86
|
-
reanimated,
|
|
87
72
|
}) => {
|
|
88
|
-
const
|
|
73
|
+
const theme = useTheme();
|
|
74
|
+
const sizeConfig = SIZE_CONFIG[size];
|
|
75
|
+
const effectiveIconSize = iconSize ?? sizeConfig.spinner;
|
|
76
|
+
const targetHeight = Math.max(0, effectiveIconSize + sizeConfig.spinner + heightOffset);
|
|
77
|
+
const spinnerColor = color ?? theme.colors.primary;
|
|
89
78
|
|
|
90
79
|
const height = useSharedValue(showLoading ? targetHeight : 0);
|
|
91
80
|
const opacity = useSharedValue(showLoading ? 1 : 0);
|
|
@@ -96,7 +85,7 @@ const AnimatedTopLoading: React.FC<AnimatedTopLoadingProps> = ({
|
|
|
96
85
|
height.value = withTiming(showLoading ? targetHeight : 0, timingConfig);
|
|
97
86
|
opacity.value = withTiming(showLoading ? 1 : 0, timingConfig);
|
|
98
87
|
translateY.value = withTiming(showLoading ? 0 : -targetHeight, timingConfig);
|
|
99
|
-
// Easing, withTiming: module-level constants from
|
|
88
|
+
// Easing, withTiming: module-level constants from a static import, stable.
|
|
100
89
|
// height/opacity/translateY: shared value objects, stable references.
|
|
101
90
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
102
91
|
}, [showLoading, targetHeight]);
|
|
@@ -119,50 +108,6 @@ const AnimatedTopLoading: React.FC<AnimatedTopLoadingProps> = ({
|
|
|
119
108
|
);
|
|
120
109
|
};
|
|
121
110
|
|
|
122
|
-
const TopLoading: React.FC<TopLoadingProps> = ({
|
|
123
|
-
size = 'medium',
|
|
124
|
-
color,
|
|
125
|
-
style,
|
|
126
|
-
showLoading = true,
|
|
127
|
-
iconSize,
|
|
128
|
-
heightOffset = 0,
|
|
129
|
-
spinnerIcon,
|
|
130
|
-
testID,
|
|
131
|
-
}) => {
|
|
132
|
-
const theme = useTheme();
|
|
133
|
-
const sizeConfig = SIZE_CONFIG[size];
|
|
134
|
-
const effectiveIconSize = iconSize ?? sizeConfig.spinner;
|
|
135
|
-
const targetHeight = Math.max(0, effectiveIconSize + sizeConfig.spinner + heightOffset);
|
|
136
|
-
const spinnerColor = color ?? theme.colors.primary;
|
|
137
|
-
|
|
138
|
-
const reanimated = getReanimated();
|
|
139
|
-
|
|
140
|
-
if (!reanimated) {
|
|
141
|
-
// Non-animated fallback when reanimated is not available
|
|
142
|
-
if (!showLoading) return null;
|
|
143
|
-
return (
|
|
144
|
-
<View style={[styles.topContainer, { height: targetHeight }, style]} testID={testID}>
|
|
145
|
-
<View style={[styles.topLoadingView, { height: targetHeight }]}>
|
|
146
|
-
{spinnerIcon ?? <SpinnerIcon size={effectiveIconSize} color={spinnerColor} />}
|
|
147
|
-
</View>
|
|
148
|
-
</View>
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return (
|
|
153
|
-
<AnimatedTopLoading
|
|
154
|
-
showLoading={showLoading}
|
|
155
|
-
targetHeight={targetHeight}
|
|
156
|
-
effectiveIconSize={effectiveIconSize}
|
|
157
|
-
spinnerColor={spinnerColor}
|
|
158
|
-
spinnerIcon={spinnerIcon}
|
|
159
|
-
style={style}
|
|
160
|
-
testID={testID}
|
|
161
|
-
reanimated={reanimated}
|
|
162
|
-
/>
|
|
163
|
-
);
|
|
164
|
-
};
|
|
165
|
-
|
|
166
111
|
const SkeletonLoading: React.FC<SkeletonLoadingProps> = ({
|
|
167
112
|
lines = 3,
|
|
168
113
|
width = '100%',
|