react-native-screen-transitions 3.0.0-rc.5 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +360 -97
- package/lib/commonjs/blank-stack/components/overlay.js +1 -1
- package/lib/commonjs/blank-stack/components/overlay.js.map +1 -1
- package/lib/commonjs/shared/components/create-transition-aware-component.js +2 -0
- package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
- package/lib/commonjs/shared/hooks/animation/use-screen-animation.js +9 -4
- package/lib/commonjs/shared/hooks/animation/use-screen-animation.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +29 -5
- package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-screen-gesture.js +26 -0
- package/lib/commonjs/shared/hooks/gestures/use-screen-gesture.js.map +1 -0
- package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js +32 -60
- package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
- package/lib/commonjs/shared/index.js +7 -0
- package/lib/commonjs/shared/index.js.map +1 -1
- package/lib/commonjs/shared/providers/gestures.provider.js +8 -18
- package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
- package/lib/commonjs/shared/utils/animation/derivations.js +7 -0
- package/lib/commonjs/shared/utils/animation/derivations.js.map +1 -1
- package/lib/commonjs/shared/utils/bounds/helpers/interpolate-style.js +30 -0
- package/lib/commonjs/shared/utils/bounds/helpers/interpolate-style.js.map +1 -0
- package/lib/commonjs/shared/utils/bounds/index.js +29 -1
- package/lib/commonjs/shared/utils/bounds/index.js.map +1 -1
- package/lib/commonjs/shared/utils/create-provider.js +16 -0
- package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
- package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js +4 -0
- package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js.map +1 -1
- package/lib/module/blank-stack/components/overlay.js +1 -1
- package/lib/module/blank-stack/components/overlay.js.map +1 -1
- package/lib/module/shared/components/create-transition-aware-component.js +2 -0
- package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
- package/lib/module/shared/hooks/animation/use-screen-animation.js +9 -4
- package/lib/module/shared/hooks/animation/use-screen-animation.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-build-gestures.js +30 -6
- package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-screen-gesture.js +22 -0
- package/lib/module/shared/hooks/gestures/use-screen-gesture.js.map +1 -0
- package/lib/module/shared/hooks/gestures/use-scroll-registry.js +32 -60
- package/lib/module/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
- package/lib/module/shared/index.js +1 -0
- package/lib/module/shared/index.js.map +1 -1
- package/lib/module/shared/providers/gestures.provider.js +9 -19
- package/lib/module/shared/providers/gestures.provider.js.map +1 -1
- package/lib/module/shared/utils/animation/derivations.js +7 -0
- package/lib/module/shared/utils/animation/derivations.js.map +1 -1
- package/lib/module/shared/utils/bounds/helpers/interpolate-style.js +26 -0
- package/lib/module/shared/utils/bounds/helpers/interpolate-style.js.map +1 -0
- package/lib/module/shared/utils/bounds/index.js +29 -1
- package/lib/module/shared/utils/bounds/index.js.map +1 -1
- package/lib/module/shared/utils/create-provider.js +17 -1
- package/lib/module/shared/utils/create-provider.js.map +1 -1
- package/lib/module/shared/utils/gesture/check-gesture-activation.js +4 -4
- package/lib/module/shared/utils/gesture/check-gesture-activation.js.map +1 -1
- package/lib/typescript/blank-stack/types.d.ts +2 -14
- package/lib/typescript/blank-stack/types.d.ts.map +1 -1
- package/lib/typescript/shared/components/create-transition-aware-component.d.ts +1 -0
- package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/animation/use-screen-animation.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts +1 -0
- package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/gestures/use-screen-gesture.d.ts +15 -0
- package/lib/typescript/shared/hooks/gestures/use-screen-gesture.d.ts.map +1 -0
- package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts +1 -0
- package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts.map +1 -1
- package/lib/typescript/shared/index.d.ts +4 -2
- package/lib/typescript/shared/index.d.ts.map +1 -1
- package/lib/typescript/shared/providers/gestures.provider.d.ts +2 -6
- package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
- package/lib/typescript/shared/types/animation.types.d.ts +51 -0
- package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/bounds.types.d.ts +6 -0
- package/lib/typescript/shared/types/bounds.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/core.types.d.ts +7 -0
- package/lib/typescript/shared/types/core.types.d.ts.map +1 -1
- package/lib/typescript/shared/utils/animation/derivations.d.ts +3 -1
- package/lib/typescript/shared/utils/animation/derivations.d.ts.map +1 -1
- package/lib/typescript/shared/utils/bounds/helpers/interpolate-style.d.ts +17 -0
- package/lib/typescript/shared/utils/bounds/helpers/interpolate-style.d.ts.map +1 -0
- package/lib/typescript/shared/utils/bounds/index.d.ts.map +1 -1
- package/lib/typescript/shared/utils/create-provider.d.ts +5 -1
- package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
- package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts +49 -1
- package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/blank-stack/components/overlay.tsx +1 -1
- package/src/blank-stack/types.ts +2 -15
- package/src/shared/__tests__/derivations.test.ts +155 -0
- package/src/shared/__tests__/gesture-activation.test.ts +251 -0
- package/src/shared/components/create-transition-aware-component.tsx +2 -1
- package/src/shared/hooks/animation/use-screen-animation.tsx +9 -2
- package/src/shared/hooks/gestures/use-build-gestures.tsx +35 -8
- package/src/shared/hooks/gestures/use-screen-gesture.ts +19 -0
- package/src/shared/hooks/gestures/use-scroll-registry.tsx +39 -59
- package/src/shared/index.ts +2 -0
- package/src/shared/providers/gestures.provider.tsx +15 -27
- package/src/shared/types/animation.types.ts +57 -0
- package/src/shared/types/bounds.types.ts +11 -0
- package/src/shared/types/core.types.ts +8 -0
- package/src/shared/utils/animation/derivations.ts +8 -1
- package/src/shared/utils/bounds/helpers/interpolate-style.ts +38 -0
- package/src/shared/utils/bounds/index.ts +31 -1
- package/src/shared/utils/create-provider.tsx +31 -1
- package/src/shared/utils/gesture/check-gesture-activation.ts +4 -4
|
@@ -15,10 +15,54 @@ export interface OverlayInterpolationProps {
|
|
|
15
15
|
insets: EdgeInsets;
|
|
16
16
|
}
|
|
17
17
|
export type ScreenTransitionState = {
|
|
18
|
+
/**
|
|
19
|
+
* Animation progress for this screen.
|
|
20
|
+
* - `0`: Screen is fully off-screen (entering)
|
|
21
|
+
* - `1`: Screen is fully visible (active)
|
|
22
|
+
*
|
|
23
|
+
* This value animates from 0 to 1 when the screen enters,
|
|
24
|
+
* and from 1 to 0 when it exits.
|
|
25
|
+
*/
|
|
18
26
|
progress: number;
|
|
27
|
+
/**
|
|
28
|
+
* Whether this screen is in the process of being dismissed.
|
|
29
|
+
* - `0`: Screen is opening or active
|
|
30
|
+
* - `1`: Screen is closing/being dismissed
|
|
31
|
+
*
|
|
32
|
+
* Use this to trigger different animations when navigating back vs forward.
|
|
33
|
+
*/
|
|
19
34
|
closing: number;
|
|
35
|
+
/**
|
|
36
|
+
* Whether this screen is currently animating.
|
|
37
|
+
* - `0`: No animation in progress
|
|
38
|
+
* - `1`: Animation or gesture is in progress
|
|
39
|
+
*/
|
|
20
40
|
animating: number;
|
|
41
|
+
/**
|
|
42
|
+
* Live gesture values for this screen.
|
|
43
|
+
* Contains translation (x, y), normalized values (-1 to 1),
|
|
44
|
+
* and flags for dragging/dismissing state.
|
|
45
|
+
*/
|
|
21
46
|
gesture: GestureValues;
|
|
47
|
+
/**
|
|
48
|
+
* Custom metadata passed from screen options.
|
|
49
|
+
* Use this for conditional animation logic instead of checking route names.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // In screen options:
|
|
53
|
+
* options={{ meta: { scalesOthers: true } }}
|
|
54
|
+
*
|
|
55
|
+
* // In animation logic:
|
|
56
|
+
* if (props.next?.meta?.scalesOthers) { ... }
|
|
57
|
+
*/
|
|
58
|
+
meta?: Record<string, unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* The route object for this screen.
|
|
61
|
+
*
|
|
62
|
+
* @deprecated Use `meta` instead for conditional animation logic.
|
|
63
|
+
* Pass route params via options: `options={({ route }) => ({ meta: { id: route.params.id } })}`
|
|
64
|
+
* This field may be removed in a future version.
|
|
65
|
+
*/
|
|
22
66
|
route: RouteProp<ParamListBase>;
|
|
23
67
|
};
|
|
24
68
|
export interface ScreenInterpolationProps {
|
|
@@ -80,12 +124,19 @@ export interface ScreenInterpolationProps {
|
|
|
80
124
|
* The screen state that is currently driving the transition (either current or next, whichever is focused).
|
|
81
125
|
*/
|
|
82
126
|
active: ScreenTransitionState;
|
|
127
|
+
/**
|
|
128
|
+
* The screen state that is NOT driving the transition.
|
|
129
|
+
* When focused, this is the previous screen. When not focused, this is the current screen.
|
|
130
|
+
*/
|
|
131
|
+
inactive: ScreenTransitionState | undefined;
|
|
83
132
|
/**
|
|
84
133
|
* Whether the active screen is currently transitioning (either being dragged or animating).
|
|
134
|
+
* @deprecated Use `active.animating` instead.
|
|
85
135
|
*/
|
|
86
136
|
isActiveTransitioning: boolean;
|
|
87
137
|
/**
|
|
88
138
|
* Whether the active screen is in the process of being dismissed/closed.
|
|
139
|
+
* @deprecated Use `active.closing` instead.
|
|
89
140
|
*/
|
|
90
141
|
isDismissing: boolean;
|
|
91
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/animation.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"animation.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/animation.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC;;;;;;;OAOG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACxC;;OAEG;IACH,QAAQ,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE5C;;OAEG;IACH,OAAO,EAAE,qBAAqB,CAAC;IAE/B;;OAEG;IACH,IAAI,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAExC;;OAEG;IACH,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;OAUG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;IAE9B;;;OAGG;IACH,QAAQ,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE5C;;;OAGG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,uBAAuB,GAAG,CACrC,KAAK,EAAE,wBAAwB,KAC3B,2BAA2B,CAAC;AAEjC,MAAM,MAAM,2BAA2B,GAAG;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB"}
|
|
@@ -13,8 +13,14 @@ export type BoundEntry = {
|
|
|
13
13
|
bounds: MeasuredDimensions;
|
|
14
14
|
styles: StyleProps;
|
|
15
15
|
};
|
|
16
|
+
export type BoundsLink = {
|
|
17
|
+
source: BoundEntry | null;
|
|
18
|
+
destination: BoundEntry | null;
|
|
19
|
+
};
|
|
16
20
|
export type BoundsAccessor = {
|
|
17
21
|
<T extends BoundsBuilderOptions>(options: T): BoundsReturnType<T>;
|
|
18
22
|
getSnapshot: (id: string, key?: string) => Snapshot | null;
|
|
23
|
+
getLink: (id: string) => BoundsLink | null;
|
|
24
|
+
interpolateStyle: (id: string, property: keyof StyleProps, fallback?: number) => number;
|
|
19
25
|
};
|
|
20
26
|
//# sourceMappingURL=bounds.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/bounds.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EACX,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,CAAC,CAAC,SAAS,oBAAoB,EAAE,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"bounds.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/bounds.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EACX,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,CAAC,CAAC,SAAS,oBAAoB,EAAE,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;IAC3C,gBAAgB,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,UAAU,EAC1B,QAAQ,CAAC,EAAE,MAAM,KACb,MAAM,CAAC;CACZ,CAAC"}
|
|
@@ -83,5 +83,12 @@ export type ScreenTransitionConfig = {
|
|
|
83
83
|
* The area of the screen where the gesture is activated.
|
|
84
84
|
*/
|
|
85
85
|
gestureActivationArea?: GestureActivationArea;
|
|
86
|
+
/**
|
|
87
|
+
* Custom metadata passed through to animation props.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* options={{ meta: { scalesOthers: true } }}
|
|
91
|
+
*/
|
|
92
|
+
meta?: Record<string, unknown>;
|
|
86
93
|
};
|
|
87
94
|
//# sourceMappingURL=core.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/core.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACX,uBAAuB,EACvB,cAAc,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACvE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAEzD;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"core.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/core.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACX,uBAAuB,EACvB,cAAc,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACvE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAEzD;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import type { ScreenTransitionState } from "../../types/animation.types";
|
|
2
2
|
interface DerivationsParams {
|
|
3
|
+
previous?: ScreenTransitionState;
|
|
3
4
|
current: ScreenTransitionState;
|
|
4
5
|
next?: ScreenTransitionState;
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
7
8
|
* Additional values to help make defining animations easier.
|
|
8
9
|
*/
|
|
9
|
-
export declare const derivations: ({ current, next }: DerivationsParams) => {
|
|
10
|
+
export declare const derivations: ({ previous, current, next }: DerivationsParams) => {
|
|
10
11
|
progress: number;
|
|
11
12
|
focused: boolean;
|
|
12
13
|
active: ScreenTransitionState;
|
|
14
|
+
inactive: ScreenTransitionState | undefined;
|
|
13
15
|
isActiveTransitioning: boolean;
|
|
14
16
|
isDismissing: boolean;
|
|
15
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivations.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/animation/derivations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,UAAU,iBAAiB;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,
|
|
1
|
+
{"version":3,"file":"derivations.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/animation/derivations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,UAAU,iBAAiB;IAC1B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,6BAA6B,iBAAiB;;;;;;;CA6BzE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BoundsLink } from "../../../types/bounds.types";
|
|
2
|
+
type InterpolateStyleOptions = {
|
|
3
|
+
fallback?: number;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Interpolates a numeric style property between source and destination bounds.
|
|
7
|
+
*
|
|
8
|
+
* @param link - The bounds link containing source and destination styles
|
|
9
|
+
* @param property - The style property to interpolate (e.g., "borderRadius", "opacity")
|
|
10
|
+
* @param progress - Animation progress value
|
|
11
|
+
* @param entering - Whether the screen is entering (focused) or exiting (unfocused)
|
|
12
|
+
* @param options - Optional configuration
|
|
13
|
+
* @returns The interpolated value
|
|
14
|
+
*/
|
|
15
|
+
export declare function interpolateLinkStyle(link: BoundsLink | null, property: string, progress: number, entering: boolean, options?: InterpolateStyleOptions): number;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=interpolate-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate-style.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/utils/bounds/helpers/interpolate-style.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,KAAK,uBAAuB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,uBAA4B,GACnC,MAAM,CAaR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/bounds/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,wBAAwB,EACxB,qBAAqB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/bounds/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,wBAAwB,EACxB,qBAAqB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAmBrD,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACnB;AAgJD,eAAO,MAAM,YAAY,GACxB,OAAO,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,KAC7C,cAyDF,CAAC"}
|
|
@@ -4,11 +4,15 @@
|
|
|
4
4
|
* SUPER COOL AMAZING UTILITY
|
|
5
5
|
*/
|
|
6
6
|
import { type ComponentType, type ReactNode } from "react";
|
|
7
|
+
type InnerProviderComponent = (props: {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}) => ReactNode;
|
|
7
10
|
export default function createProvider<ProviderName extends string, Guarded extends boolean = true>(name: ProviderName, options?: {
|
|
8
11
|
guarded?: Guarded;
|
|
9
12
|
}): <ProviderProps extends object, ContextValue>(factory: (props: ProviderProps) => {
|
|
10
13
|
value?: ContextValue;
|
|
11
14
|
enabled?: boolean;
|
|
12
|
-
children?: ReactNode;
|
|
15
|
+
children?: ReactNode | ((innerProvider: { [K in ProviderName as `${K}Provider`]: InnerProviderComponent; }) => ReactNode);
|
|
13
16
|
}) => { [P in ProviderName as `${P}Context`]: React.Context<ContextValue>; } & { [P in ProviderName as `${P}Provider`]: React.FC<ProviderProps>; } & { [P in ProviderName as `use${P}Context`]: () => Guarded extends true ? ContextValue : ContextValue | null; } & { [P in ProviderName as `with${P}Provider`]: (Component: ComponentType<ContextValue>) => React.FC<ProviderProps>; };
|
|
17
|
+
export {};
|
|
14
18
|
//# sourceMappingURL=create-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/create-provider.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACN,KAAK,aAAa,EAElB,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"create-provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/create-provider.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACN,KAAK,aAAa,EAElB,KAAK,SAAS,EAId,MAAM,OAAO,CAAC;AAEf,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,KAAK,SAAS,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,cAAc,CACrC,YAAY,SAAS,MAAM,EAC3B,OAAO,SAAS,OAAO,GAAG,IAAI,EAC7B,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,IAC5C,aAAa,SAAS,MAAM,EAAE,YAAY,EACjD,SAAS,CAAC,KAAK,EAAE,aAAa,KAAK;IAClC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EACN,SAAS,GACT,CAAC,CACD,aAAa,EAAE,GACb,CAAC,IAAI,YAAY,IAAI,GAAG,CAAC,UAAU,GAAG,sBAAsB,GAC7D,KACI,SAAS,CAAC,CAAC;CACnB,KAyFI,GACH,CAAC,IAAI,YAAY,IAAI,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GACjE,GAAG,GACF,CAAC,IAAI,YAAY,IAAI,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAC9D,GAAG,GACF,CAAC,IAAI,YAAY,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,OAAO,SAAS,IAAI,GAChE,YAAY,GACZ,YAAY,GAAG,IAAI,GACtB,GAAG,GACF,CAAC,IAAI,YAAY,IAAI,OAAO,CAAC,UAAU,GAAG,CAC1C,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,KAClC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAC5B,CAEF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { GestureStateManagerType } from "react-native-gesture-handler/lib/typescript/handlers/gestures/gestureStateManager";
|
|
2
2
|
import type { SharedValue } from "react-native-reanimated";
|
|
3
3
|
import type { Layout } from "../../types/core.types";
|
|
4
|
-
import { type GestureActivationArea, GestureOffsetState } from "../../types/gesture.types";
|
|
4
|
+
import { type ActivationArea, type GestureActivationArea, GestureOffsetState } from "../../types/gesture.types";
|
|
5
5
|
type Directions = {
|
|
6
6
|
vertical: boolean;
|
|
7
7
|
verticalInverted: boolean;
|
|
@@ -24,12 +24,60 @@ interface CheckGestureActivationProps {
|
|
|
24
24
|
dimensions: Layout;
|
|
25
25
|
responseDistance?: number;
|
|
26
26
|
}
|
|
27
|
+
type NormalizedSides = {
|
|
28
|
+
left: ActivationArea;
|
|
29
|
+
right: ActivationArea;
|
|
30
|
+
top: ActivationArea;
|
|
31
|
+
bottom: ActivationArea;
|
|
32
|
+
};
|
|
33
|
+
interface ShouldActivateOrFailProps {
|
|
34
|
+
deltaX: number;
|
|
35
|
+
deltaY: number;
|
|
36
|
+
hasHorizontal: boolean;
|
|
37
|
+
hasVertical: boolean;
|
|
38
|
+
isHorizontalSwipe: boolean;
|
|
39
|
+
isVerticalSwipe: boolean;
|
|
40
|
+
allowedRight: boolean;
|
|
41
|
+
allowedLeft: boolean;
|
|
42
|
+
allowedUp: boolean;
|
|
43
|
+
allowedDown: boolean;
|
|
44
|
+
horizontalGateRight: boolean;
|
|
45
|
+
horizontalGateLeft: boolean;
|
|
46
|
+
verticalGateUp: boolean;
|
|
47
|
+
verticalGateDown: boolean;
|
|
48
|
+
isSwipingRight: boolean;
|
|
49
|
+
isSwipingLeft: boolean;
|
|
50
|
+
isSwipingUp: boolean;
|
|
51
|
+
isSwipingDown: boolean;
|
|
52
|
+
}
|
|
27
53
|
interface ReturnValues {
|
|
28
54
|
isSwipingDown: boolean;
|
|
29
55
|
isSwipingUp: boolean;
|
|
30
56
|
isSwipingRight: boolean;
|
|
31
57
|
isSwipingLeft: boolean;
|
|
32
58
|
}
|
|
59
|
+
export declare function normalizeSides(area?: GestureActivationArea): NormalizedSides;
|
|
60
|
+
export declare function computeEdgeConstraints(initialTouch: {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
}, dimensions: Layout, sides: NormalizedSides, responseDistance?: number): {
|
|
64
|
+
readonly horizontalRight: boolean;
|
|
65
|
+
readonly horizontalLeft: boolean;
|
|
66
|
+
readonly verticalDown: boolean;
|
|
67
|
+
readonly verticalUp: boolean;
|
|
68
|
+
};
|
|
69
|
+
export declare function calculateSwipeDirs(deltaX: number, deltaY: number): {
|
|
70
|
+
isSwipingDown: boolean;
|
|
71
|
+
isSwipingUp: boolean;
|
|
72
|
+
isSwipingRight: boolean;
|
|
73
|
+
isSwipingLeft: boolean;
|
|
74
|
+
isVerticalSwipe: boolean;
|
|
75
|
+
isHorizontalSwipe: boolean;
|
|
76
|
+
};
|
|
77
|
+
export declare function shouldActivateOrFail(params: ShouldActivateOrFailProps): {
|
|
78
|
+
shouldActivate: boolean;
|
|
79
|
+
shouldFail: boolean;
|
|
80
|
+
};
|
|
33
81
|
/**
|
|
34
82
|
* Since we're using onTouchesMove to activate our pan, faillOffset and activateOffset don't actually work. In that case we'll create this function to use in onTouchesMove which acts simarly to the original functionality.
|
|
35
83
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-gesture-activation.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/gesture/check-gesture-activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mFAAmF,CAAC;AACjI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"check-gesture-activation.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/gesture/check-gesture-activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mFAAmF,CAAC;AACjI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,kBAAkB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,KAAK,UAAU,GAAG;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,UAAU,2BAA2B;IACpC,YAAY,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,KAAK,eAAe,GAAG;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,UAAU,yBAAyB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,YAAY;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACvB;AAaD,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,eAAe,CAc5E;AAED,wBAAgB,sBAAsB,CACrC,YAAY,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACtC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,eAAe,EACtB,gBAAgB,CAAC,EAAE,MAAM;;;;;EAczB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;EAmBhE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,yBAAyB;;;EAyFrE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,iHAS9B,2BAA2B,KAAG,YA2EhC,CAAC"}
|
package/package.json
CHANGED
|
@@ -81,7 +81,7 @@ const OverlayHost = ({ scene, isFloating }: OverlayHostProps) => {
|
|
|
81
81
|
screenAnimation,
|
|
82
82
|
focusedRoute: focusedScene.route,
|
|
83
83
|
focusedIndex: optimisticActiveIndex,
|
|
84
|
-
|
|
84
|
+
meta: focusedScene.descriptor.options.meta,
|
|
85
85
|
navigation: scene.descriptor.navigation,
|
|
86
86
|
};
|
|
87
87
|
|
package/src/blank-stack/types.ts
CHANGED
|
@@ -81,13 +81,9 @@ export type BlankStackOverlayProps = {
|
|
|
81
81
|
routes: Route<string>[];
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
|
-
*
|
|
84
|
+
* Custom metadata from the focused screen's options.
|
|
85
85
|
*/
|
|
86
|
-
|
|
87
|
-
title?: string;
|
|
88
|
-
subtitle?: string;
|
|
89
|
-
[key: string]: unknown;
|
|
90
|
-
};
|
|
86
|
+
meta?: Record<string, unknown>;
|
|
91
87
|
|
|
92
88
|
/**
|
|
93
89
|
* Navigation prop for the overlay.
|
|
@@ -134,15 +130,6 @@ export type BlankStackNavigationOptions = BlankStackScreenTransitionConfig & {
|
|
|
134
130
|
*/
|
|
135
131
|
overlayShown?: boolean;
|
|
136
132
|
|
|
137
|
-
/**
|
|
138
|
-
* Options passed to the overlay component.
|
|
139
|
-
*/
|
|
140
|
-
overlayOptions?: {
|
|
141
|
-
title?: string;
|
|
142
|
-
subtitle?: string;
|
|
143
|
-
[key: string]: unknown;
|
|
144
|
-
};
|
|
145
|
-
|
|
146
133
|
/**
|
|
147
134
|
* Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
|
|
148
135
|
* Defaults to `true` when `enableFreeze()` is run at the top of the application.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { describe, expect, it } from "bun:test";
|
|
2
|
+
import type { ScreenTransitionState } from "../types/animation.types";
|
|
3
|
+
import { derivations } from "../utils/animation/derivations";
|
|
4
|
+
|
|
5
|
+
const createMockState = (
|
|
6
|
+
overrides: Partial<ScreenTransitionState> = {},
|
|
7
|
+
): ScreenTransitionState => ({
|
|
8
|
+
progress: 1,
|
|
9
|
+
closing: 0,
|
|
10
|
+
animating: 0,
|
|
11
|
+
gesture: {
|
|
12
|
+
isDragging: 0,
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0,
|
|
15
|
+
normalizedX: 0,
|
|
16
|
+
normalizedY: 0,
|
|
17
|
+
isDismissing: 0,
|
|
18
|
+
direction: null,
|
|
19
|
+
},
|
|
20
|
+
route: { key: "test-route", name: "TestScreen" } as any,
|
|
21
|
+
...overrides,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe("derivations", () => {
|
|
25
|
+
describe("progress", () => {
|
|
26
|
+
it("returns current progress when no next screen", () => {
|
|
27
|
+
const result = derivations({
|
|
28
|
+
current: createMockState({ progress: 0.5 }),
|
|
29
|
+
});
|
|
30
|
+
expect(result.progress).toBe(0.5);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("combines current + next progress (0-2 range)", () => {
|
|
34
|
+
const result = derivations({
|
|
35
|
+
current: createMockState({ progress: 1 }),
|
|
36
|
+
next: createMockState({ progress: 0.5 }),
|
|
37
|
+
});
|
|
38
|
+
expect(result.progress).toBe(1.5);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("returns 2 when both screens fully transitioned", () => {
|
|
42
|
+
const result = derivations({
|
|
43
|
+
current: createMockState({ progress: 1 }),
|
|
44
|
+
next: createMockState({ progress: 1 }),
|
|
45
|
+
});
|
|
46
|
+
expect(result.progress).toBe(2);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe("focused", () => {
|
|
51
|
+
it("returns true when no next screen", () => {
|
|
52
|
+
const result = derivations({
|
|
53
|
+
current: createMockState(),
|
|
54
|
+
});
|
|
55
|
+
expect(result.focused).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("returns false when next screen exists", () => {
|
|
59
|
+
const result = derivations({
|
|
60
|
+
current: createMockState(),
|
|
61
|
+
next: createMockState(),
|
|
62
|
+
});
|
|
63
|
+
expect(result.focused).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe("active", () => {
|
|
68
|
+
it("returns current when focused (no next)", () => {
|
|
69
|
+
const current = createMockState({ progress: 0.3 });
|
|
70
|
+
const result = derivations({ current });
|
|
71
|
+
expect(result.active).toBe(current);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("returns next when not focused", () => {
|
|
75
|
+
const current = createMockState({ progress: 1 });
|
|
76
|
+
const next = createMockState({ progress: 0.5 });
|
|
77
|
+
const result = derivations({ current, next });
|
|
78
|
+
expect(result.active).toBe(next);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe("isActiveTransitioning", () => {
|
|
83
|
+
it("returns true when active screen is dragging", () => {
|
|
84
|
+
const result = derivations({
|
|
85
|
+
current: createMockState({
|
|
86
|
+
gesture: {
|
|
87
|
+
isDragging: 1,
|
|
88
|
+
x: 0,
|
|
89
|
+
y: 0,
|
|
90
|
+
normalizedX: 0,
|
|
91
|
+
normalizedY: 0,
|
|
92
|
+
isDismissing: 0,
|
|
93
|
+
direction: null,
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
expect(result.isActiveTransitioning).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("returns true when active screen is animating", () => {
|
|
101
|
+
const result = derivations({
|
|
102
|
+
current: createMockState({ animating: 1 }),
|
|
103
|
+
});
|
|
104
|
+
expect(result.isActiveTransitioning).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("returns false when not dragging or animating", () => {
|
|
108
|
+
const result = derivations({
|
|
109
|
+
current: createMockState({ animating: 0 }),
|
|
110
|
+
});
|
|
111
|
+
expect(result.isActiveTransitioning).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe("isDismissing", () => {
|
|
116
|
+
it("returns true when gesture isDismissing", () => {
|
|
117
|
+
const result = derivations({
|
|
118
|
+
current: createMockState({
|
|
119
|
+
gesture: {
|
|
120
|
+
isDragging: 0,
|
|
121
|
+
x: 0,
|
|
122
|
+
y: 0,
|
|
123
|
+
normalizedX: 0,
|
|
124
|
+
normalizedY: 0,
|
|
125
|
+
isDismissing: 1,
|
|
126
|
+
direction: null,
|
|
127
|
+
},
|
|
128
|
+
}),
|
|
129
|
+
});
|
|
130
|
+
expect(result.isDismissing).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("returns true when closing flag is set", () => {
|
|
134
|
+
const result = derivations({
|
|
135
|
+
current: createMockState({ closing: 1 }),
|
|
136
|
+
});
|
|
137
|
+
expect(result.isDismissing).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("returns false when not dismissing or closing", () => {
|
|
141
|
+
const result = derivations({
|
|
142
|
+
current: createMockState(),
|
|
143
|
+
});
|
|
144
|
+
expect(result.isDismissing).toBe(false);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("checks active screen (next) for dismissing state", () => {
|
|
148
|
+
const result = derivations({
|
|
149
|
+
current: createMockState(),
|
|
150
|
+
next: createMockState({ closing: 1 }),
|
|
151
|
+
});
|
|
152
|
+
expect(result.isDismissing).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
});
|