@react-motion-router/stack 2.0.0-beta.eb7bb7e → 2.0.0-beta.sha-c42ac88

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.
@@ -0,0 +1,19 @@
1
+ import { PlainObject } from "@react-motion-router/core";
2
+ import { Navigation } from "./Navigation";
3
+ import { NavigateOptions, XOR } from "./common/types";
4
+ interface BaseAnchorProps extends React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {
5
+ onClick?: React.MouseEventHandler<HTMLAnchorElement>;
6
+ navigation?: Navigation;
7
+ }
8
+ interface ForwardAnchorProps extends BaseAnchorProps {
9
+ params?: PlainObject<string | boolean | number>;
10
+ href: string;
11
+ type?: NavigateOptions["type"];
12
+ preload?: boolean;
13
+ }
14
+ interface BackAnchorProps extends BaseAnchorProps {
15
+ goBack: boolean;
16
+ }
17
+ type AnchorProps = XOR<ForwardAnchorProps, BackAnchorProps>;
18
+ export declare function Anchor(props: AnchorProps): JSX.Element;
19
+ export {};
@@ -0,0 +1,5 @@
1
+ interface GestureRegionProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ disabled?: boolean;
3
+ }
4
+ export declare function GestureRegion({ disabled, children, ...props }: GestureRegionProps): JSX.Element;
5
+ export {};
@@ -0,0 +1,19 @@
1
+ export declare class HistoryEntry implements Omit<NavigationHistoryEntry, 'url'> {
2
+ #private;
3
+ readonly routerId: string;
4
+ readonly index: number;
5
+ constructor(nativeEntry: NavigationHistoryEntry, routerId: string, index: number);
6
+ set ondispose(handler: ((this: NavigationHistoryEntry, ev: Event) => any) | null);
7
+ get ondispose(): ((this: NavigationHistoryEntry, ev: Event) => any) | null;
8
+ get id(): string;
9
+ get globalIndex(): number;
10
+ get url(): URL | null;
11
+ get key(): string;
12
+ get sameDocument(): boolean;
13
+ addEventListener<K extends keyof NavigationHistoryEntryEventMap>(type: K, listener: (this: NavigationHistoryEntry, ev: NavigationHistoryEntryEventMap[K]) => any, options?: boolean | AddEventListenerOptions): () => void;
14
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): () => void;
15
+ removeEventListener<K extends keyof NavigationHistoryEntryEventMap>(type: K, listener: (this: NavigationHistoryEntry, ev: NavigationHistoryEntryEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
16
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
17
+ dispatchEvent(event: Event): boolean;
18
+ getState<T>(): T;
19
+ }
@@ -0,0 +1,31 @@
1
+ import { NavigationBase } from '@react-motion-router/core';
2
+ import { GoBackOptions, GoForwardOptions, NavigateOptions, NavigationBaseOptions, NavigationProps, StackRouterEventMap } from './common/types';
3
+ import { HistoryEntry } from './HistoryEntry';
4
+ import { Router } from './Router';
5
+ export declare class Navigation extends NavigationBase<StackRouterEventMap> {
6
+ protected readonly router: Router;
7
+ constructor(router: Router);
8
+ traverseTo(key: string): NavigationResult;
9
+ replace(route: string, props?: NavigationProps, options?: NavigationBaseOptions): NavigationResult;
10
+ push(route: string, props?: NavigationProps, options?: NavigationBaseOptions): NavigationResult;
11
+ reload(props?: NavigationProps): NavigationResult;
12
+ navigate(route: string, props?: NavigationProps, options?: NavigateOptions): NavigationResult;
13
+ goBack(options?: GoBackOptions): NavigationResult | undefined;
14
+ goForward(options?: GoForwardOptions): NavigationResult | undefined;
15
+ private createBackEvent;
16
+ private createForwardEvent;
17
+ private createNavigateEvent;
18
+ get transition(): NavigationTransition | {
19
+ from: NavigationHistoryEntry | null;
20
+ finished: Promise<void>;
21
+ navigationType: "load";
22
+ } | null;
23
+ get globalEntries(): NavigationHistoryEntry[];
24
+ get entries(): HistoryEntry[];
25
+ get index(): number;
26
+ get previous(): HistoryEntry | null;
27
+ get next(): HistoryEntry | null;
28
+ get current(): HistoryEntry;
29
+ get canGoBack(): boolean;
30
+ get canGoForward(): boolean;
31
+ }
@@ -0,0 +1,58 @@
1
+ import { RouterBase } from '@react-motion-router/core';
2
+ import type { LoadEvent, NestedRouterContext, RouterBaseProps, RouterBaseState, ScreenChild } from '@react-motion-router/core';
3
+ import { Navigation } from './Navigation';
4
+ import { ScreenProps, Screen } from './Screen';
5
+ import { SwipeDirection } from './common/types';
6
+ export interface RouterProps extends RouterBaseProps<Screen> {
7
+ config: RouterBaseProps["config"] & {
8
+ screenConfig?: ScreenProps["config"];
9
+ disableBrowserRouting?: boolean;
10
+ initialPath?: string;
11
+ shouldIntercept?(navigateEvent: NavigateEvent): boolean;
12
+ onIntercept?(navigateEvent: NavigateEvent): boolean;
13
+ };
14
+ }
15
+ export interface RouterState extends RouterBaseState {
16
+ backNavigating: boolean;
17
+ transition: NavigationTransition | LoadEvent["transition"] | null;
18
+ screenStack: ScreenChild<Screen>[];
19
+ gestureDirection: SwipeDirection;
20
+ gestureAreaWidth: number;
21
+ gestureMinFlingVelocity: number;
22
+ gestureHysteresis: number;
23
+ disableGesture: boolean;
24
+ fromKey: React.Key | null;
25
+ destinationKey: React.Key | null;
26
+ documentTitle?: string;
27
+ }
28
+ export declare class Router extends RouterBase<RouterProps, RouterState> {
29
+ readonly navigation: Navigation;
30
+ constructor(props: RouterProps, context: React.ContextType<typeof NestedRouterContext>);
31
+ static readonly defaultProps: Partial<RouterProps>;
32
+ static getDerivedStateFromProps(_: RouterProps, state: RouterState): {
33
+ gestureDirection: SwipeDirection;
34
+ gestureAreaWidth: number;
35
+ gestureMinFlingVelocity: number;
36
+ gestureHysteresis: number;
37
+ disableGesture: boolean;
38
+ documentTitle: string | undefined;
39
+ };
40
+ componentDidMount(): void;
41
+ shouldComponentUpdate(nextProps: Readonly<RouterProps>, nextState: Readonly<RouterState>): boolean;
42
+ componentWillUnmount(): void;
43
+ private canGestureNavigate;
44
+ private onSwipeStart;
45
+ private onSwipeEnd;
46
+ protected get screens(): import("react").CElement<ScreenProps, Screen>[];
47
+ private screenChildFromPathname;
48
+ private getScreenChildByPathname;
49
+ private getScreenRefByKey;
50
+ protected canIntercept(e: NavigateEvent): boolean;
51
+ protected shouldIntercept(e: NavigateEvent): boolean;
52
+ protected intercept(e: NavigateEvent | LoadEvent): void;
53
+ private handleLoad;
54
+ private handleReplace;
55
+ private handleDefault;
56
+ private dispatchLifecycleHandlers;
57
+ private screenTransition;
58
+ }
@@ -0,0 +1,94 @@
1
+ import { ScreenBase } from '@react-motion-router/core';
2
+ import type { PlainObject, RouterContext, ScreenBaseProps, ScreenBaseState, ScreenBaseComponentProps } from '@react-motion-router/core';
3
+ import { Navigation } from './Navigation';
4
+ import { RouteProp, SwipeDirection } from './common/types';
5
+ import { Router } from './Router';
6
+ export interface ScreenComponentProps<T extends PlainObject = {}> extends ScreenBaseComponentProps<RouteProp<T>, Navigation> {
7
+ }
8
+ export interface ScreenProps extends ScreenBaseProps {
9
+ config?: ScreenBaseProps["config"] & {
10
+ title?: string;
11
+ presentation?: "default" | "dialog" | "modal";
12
+ keepAlive?: boolean;
13
+ gestureDirection?: SwipeDirection;
14
+ gestureAreaWidth?: number;
15
+ gestureMinFlingVelocity?: number;
16
+ gestureHysteresis?: number;
17
+ disableGesture?: boolean;
18
+ };
19
+ }
20
+ export interface ScreenState extends ScreenBaseState {
21
+ }
22
+ export declare class Screen extends ScreenBase<ScreenProps, ScreenState> {
23
+ readonly routeProp: {
24
+ setParams: (params: PlainObject) => void;
25
+ setConfig: (config: ScreenProps["config"]) => void;
26
+ readonly path: string;
27
+ readonly resolvedPathname: string | undefined;
28
+ readonly focused: boolean;
29
+ readonly config: {
30
+ header?: {
31
+ fallback?: React.ReactNode;
32
+ component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
33
+ };
34
+ footer?: {
35
+ fallback?: React.ReactNode;
36
+ component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
37
+ };
38
+ animation?: import("@react-motion-router/core").AnimationEffectFactory;
39
+ onEnter?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
40
+ onExit?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
41
+ onEntered?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
42
+ onExited?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
43
+ onLoad?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
44
+ title?: string;
45
+ presentation?: "default" | "dialog" | "modal";
46
+ keepAlive?: boolean;
47
+ gestureDirection?: SwipeDirection;
48
+ gestureAreaWidth?: number;
49
+ gestureMinFlingVelocity?: number;
50
+ gestureHysteresis?: number;
51
+ disableGesture?: boolean;
52
+ };
53
+ readonly params: {
54
+ [x: string]: any;
55
+ };
56
+ };
57
+ constructor(props: ScreenProps, context: React.ContextType<typeof RouterContext>);
58
+ static getDerivedStateFromProps(props: ScreenProps): {
59
+ elementType: string;
60
+ };
61
+ get config(): {
62
+ header?: {
63
+ fallback?: React.ReactNode;
64
+ component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
65
+ };
66
+ footer?: {
67
+ fallback?: React.ReactNode;
68
+ component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
69
+ };
70
+ animation?: import("@react-motion-router/core").AnimationEffectFactory;
71
+ onEnter?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
72
+ onExit?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
73
+ onEntered?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
74
+ onExited?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
75
+ onLoad?: ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>>) => void | Promise<void>) | undefined;
76
+ title?: string;
77
+ presentation?: "default" | "dialog" | "modal";
78
+ keepAlive?: boolean;
79
+ gestureDirection?: SwipeDirection;
80
+ gestureAreaWidth?: number;
81
+ gestureMinFlingVelocity?: number;
82
+ gestureHysteresis?: number;
83
+ disableGesture?: boolean;
84
+ };
85
+ get params(): {
86
+ [x: string]: any;
87
+ };
88
+ protected setParams(params: PlainObject): void;
89
+ protected setConfig(config: ScreenProps["config"]): void;
90
+ protected get router(): Router;
91
+ private onClickOutside;
92
+ onEnter(signal: AbortSignal): Promise<void>;
93
+ onExited(signal: AbortSignal): Promise<void>;
94
+ }
@@ -0,0 +1,9 @@
1
+ import { AnimationEffectFactoryProps } from "@react-motion-router/core";
2
+ export declare function iOSSlideInFromRight({ ref, direction, playbackRate, index }: AnimationEffectFactoryProps): KeyframeEffect;
3
+ export declare function iOSSlideInFromLeft({ ref, direction, playbackRate, index }: AnimationEffectFactoryProps): KeyframeEffect;
4
+ export declare function iOSSlideInFromBottom({ ref, direction, playbackRate }: AnimationEffectFactoryProps): KeyframeEffect;
5
+ export declare function androidFadeInFromBottom({ ref, direction, playbackRate }: AnimationEffectFactoryProps): KeyframeEffect;
6
+ export declare function androidFadeInFromBottomSheet({ ref, direction, index, playbackRate }: AnimationEffectFactoryProps): KeyframeEffect;
7
+ export declare function androidRevealFromBottom({ ref, direction, index, playbackRate }: AnimationEffectFactoryProps): KeyframeEffect;
8
+ export declare function androidFadeInFromRight({ ref, direction, index, playbackRate }: AnimationEffectFactoryProps): KeyframeEffect;
9
+ export declare function androidScaleFromCentre({ ref, direction, index, playbackRate }: AnimationEffectFactoryProps): KeyframeEffect;
@@ -0,0 +1,7 @@
1
+ export declare const iOSKeyframeOptions: KeyframeEffectOptions;
2
+ export declare const androidFadeInFromBottomOptions: KeyframeAnimationOptions;
3
+ export declare const androidFadeOutToBottomOptions: KeyframeAnimationOptions;
4
+ export declare const androidRevealFromBottomOptions: KeyframeAnimationOptions;
5
+ export declare const androidScaleFromCentreOptions: KeyframeAnimationOptions;
6
+ export declare const androidBottomSheetSlideInOptions: KeyframeAnimationOptions;
7
+ export declare const androidBottomSheetSlideOutOptions: KeyframeAnimationOptions;
@@ -0,0 +1,25 @@
1
+ export declare const SlideInFromRightKeyframes: Keyframe[];
2
+ export declare const iOSSlideInFromRightKeyframes: Keyframe[];
3
+ export declare const SlideOutToLeftKeyframes: Keyframe[];
4
+ export declare const iOSSlideOutToLeftKeyframes: Keyframe[];
5
+ export declare const SlideInFromLeftKeyframes: Keyframe[];
6
+ export declare const iOSSlideInFromLeftKeyframes: Keyframe[];
7
+ export declare const SlideOutToRightKeyframes: Keyframe[];
8
+ export declare const iOSSlideOutToRightKeyframes: Keyframe[];
9
+ export declare const SlideInFromBottomKeyframes: Keyframe[];
10
+ export declare const iOSSlideInFromBottomKeyframes: Keyframe[];
11
+ export declare const SlideOutToTopKeyframes: Keyframe[];
12
+ export declare const SlideInFromTopKeyframes: Keyframe[];
13
+ export declare const SlideOutToBottomKeyframes: Keyframe[];
14
+ export declare const ZoomInKeyframes: Keyframe[];
15
+ export declare const ZoomOutKeyframes: Keyframe[];
16
+ export declare const FadeInKeyframes: Keyframe[];
17
+ export declare const FadeOutKeyframes: Keyframe[];
18
+ export declare const androidFadeInFromBottomKeyframes: Keyframe[];
19
+ export declare const androidFadeInFromRightKeyframes: Keyframe[];
20
+ export declare const androidFadeOutToLeftKeyframes: Keyframe[];
21
+ export declare const androidRevealFromBottomKeyframes: Keyframe[];
22
+ export declare const androidConcealToBottomKeyframes: Keyframe[];
23
+ export declare const androidScaleFromCentreKeyframes: Keyframe[];
24
+ export declare const androidScaleToCentreKeyframes: Keyframe[];
25
+ export declare const androidFadeInFromBottomSheetKeyframes: Keyframe[];
@@ -0,0 +1,7 @@
1
+ export declare const DEFAULT_GESTURE_CONFIG: {
2
+ readonly gestureHysteresis: 0.5;
3
+ readonly gestureMinFlingVelocity: 400;
4
+ readonly gestureAreaWidth: 100;
5
+ readonly gestureDirection: "right";
6
+ readonly disableGesture: false;
7
+ };
@@ -0,0 +1,37 @@
1
+ import { GestureEvent } from "web-gesture-events";
2
+ import { NavigateOptions, NavigationProps } from "./types";
3
+ export declare class NavigateEvent extends Event {
4
+ readonly routerId: string;
5
+ readonly route: string;
6
+ readonly props: NavigationProps;
7
+ readonly navigationType: NonNullable<NavigateOptions["type"]>;
8
+ readonly signal: AbortSignal;
9
+ readonly result: NavigationResult;
10
+ readonly transition: NavigationTransition;
11
+ constructor(routerId: string, route: string, props: NavigationProps, type: NavigateOptions["type"], signal: AbortSignal, result: NavigationResult, transition: NavigationTransition);
12
+ }
13
+ export declare class BackEvent extends Event {
14
+ readonly routerId: string;
15
+ readonly signal: AbortSignal;
16
+ readonly result: NavigationResult;
17
+ readonly transition: NavigationTransition;
18
+ constructor(routerId: string, signal: AbortSignal, result: NavigationResult, transition: NavigationTransition);
19
+ }
20
+ export declare class ForwardEvent extends Event {
21
+ readonly routerId: string;
22
+ readonly signal: AbortSignal;
23
+ readonly result: NavigationResult;
24
+ readonly transition: NavigationTransition;
25
+ constructor(routerId: string, signal: AbortSignal, result: NavigationResult, transition: NavigationTransition);
26
+ }
27
+ export declare class GestureStartEvent extends Event {
28
+ readonly source: GestureEvent;
29
+ constructor(source: GestureEvent);
30
+ }
31
+ export declare class GestureEndEvent extends Event {
32
+ readonly source: GestureEvent;
33
+ constructor(source: GestureEvent);
34
+ }
35
+ export declare class GestureCancelEvent extends Event {
36
+ constructor();
37
+ }
@@ -0,0 +1,6 @@
1
+ import { Navigation } from "../Navigation";
2
+ import { Router } from "../Router";
3
+ import { RouteProp } from "./types";
4
+ export declare function useNavigation(): Navigation;
5
+ export declare function useRouter(): Router;
6
+ export declare function useRoute(): RouteProp<{}>;
@@ -0,0 +1,40 @@
1
+ import { PlainObject, RoutePropBase, RouterBaseEventMap } from "@react-motion-router/core";
2
+ import { ScreenProps } from "../Screen";
3
+ import { RefObject } from "react";
4
+ import { BackEvent, ForwardEvent, GestureCancelEvent, GestureEndEvent, GestureStartEvent, NavigateEvent } from "./events";
5
+ export interface NavigationBaseOptions {
6
+ signal?: AbortSignal;
7
+ }
8
+ export interface NavigateOptions extends NavigationBaseOptions {
9
+ type?: "push" | "replace";
10
+ }
11
+ export interface GoBackOptions extends NavigationBaseOptions {
12
+ }
13
+ export interface GoForwardOptions extends NavigationBaseOptions {
14
+ }
15
+ export interface NavigationProps {
16
+ params?: Record<any, any>;
17
+ config?: ScreenProps["config"];
18
+ }
19
+ export type Without<T, U> = {
20
+ [P in Exclude<keyof T, keyof U>]?: never;
21
+ };
22
+ export type XOR<T, U> = (T | U) extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
23
+ export interface HistoryEntryState {
24
+ config?: ScreenProps["config"];
25
+ params?: PlainObject;
26
+ }
27
+ export declare function isRefObject<T>(value?: React.LegacyRef<T>): value is RefObject<T>;
28
+ export interface StackRouterEventMap extends RouterBaseEventMap {
29
+ "navigate": NavigateEvent;
30
+ "back": BackEvent;
31
+ "forward": ForwardEvent;
32
+ "gesture-start": GestureStartEvent;
33
+ "gesture-end": GestureEndEvent;
34
+ "gesture-cancel": GestureCancelEvent;
35
+ }
36
+ export interface RouteProp<T extends PlainObject = {}> extends RoutePropBase<ScreenProps["config"], T> {
37
+ }
38
+ export type SwipeDirection = 'up' | 'down' | 'left' | 'right' | 'horizontal' | 'vertical';
39
+ export declare function isVerticalDirection(direction: SwipeDirection): direction is 'up' | 'down' | 'vertical';
40
+ export declare function isHorizontalDirection(direction: SwipeDirection): direction is 'left' | 'right' | 'horizontal';
@@ -0,0 +1,7 @@
1
+ import { PlainObject } from "@react-motion-router/core";
2
+ export declare function searchParamsToObject(searchPart: string): PlainObject<string> | undefined;
3
+ export declare function searchParamsFromObject(params: {
4
+ [key: string]: any;
5
+ }): string;
6
+ export declare function isRollback(info?: unknown): boolean;
7
+ export declare function deepEquals<T>(obj1: T, obj2: T): boolean;
@@ -0,0 +1,10 @@
1
+ import 'web-gesture-events';
2
+ export * from './Navigation';
3
+ export * from './Screen';
4
+ export * from './Router';
5
+ export * from './Anchor';
6
+ export * from './animation-configs/keyframe-presets';
7
+ export * from './animation-configs/keyframe-options-presets';
8
+ export * from './animation-configs/animation-presets';
9
+ export * from './common/hooks';
10
+ export * from './GestureRegion';