@react-motion-router/stack 2.0.0-beta.sha-1c021e3 → 2.0.0-beta.sha-6f2a71f

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.
@@ -1,31 +1,32 @@
1
1
  import { NavigationBase } from '@react-motion-router/core';
2
- import { GoBackOptions, GoForwardOptions, NavigateOptions, NavigationBaseOptions, NavigationProps, StackRouterEventMap } from './common/types';
2
+ import { GoBackOptions, GoForwardOptions, NavigateOptions, NavigationBaseOptions, NavigationProps, RouterEventMap } from './common/types';
3
3
  import { HistoryEntry } from './HistoryEntry';
4
4
  import { Router } from './Router';
5
- export declare class Navigation extends NavigationBase<StackRouterEventMap> {
5
+ export declare class Navigation extends NavigationBase<RouterEventMap> {
6
6
  protected readonly router: Router;
7
7
  constructor(router: Router);
8
- traverseTo(key: string): NavigationResult;
9
8
  replace(route: string, props?: NavigationProps, options?: NavigationBaseOptions): NavigationResult;
10
9
  push(route: string, props?: NavigationProps, options?: NavigationBaseOptions): NavigationResult;
11
10
  reload(props?: NavigationProps): NavigationResult;
11
+ traverseTo(key: string, options?: NavigationBaseOptions): NavigationResult;
12
12
  navigate(route: string, props?: NavigationProps, options?: NavigateOptions): NavigationResult;
13
13
  goBack(options?: GoBackOptions): NavigationResult | undefined;
14
14
  goForward(options?: GoForwardOptions): NavigationResult | undefined;
15
15
  private createBackEvent;
16
16
  private createForwardEvent;
17
17
  private createNavigateEvent;
18
- get transition(): NavigationTransition | {
19
- from: NavigationHistoryEntry | null;
20
- finished: Promise<void>;
21
- navigationType: "load";
22
- } | null;
18
+ get committed(): Promise<NavigationHistoryEntry> | null;
19
+ get transition(): NavigationTransition | import("@react-motion-router/core").LoadNavigationTransition | null;
23
20
  get globalEntries(): NavigationHistoryEntry[];
24
21
  get entries(): HistoryEntry[];
25
22
  get index(): number;
26
23
  get previous(): HistoryEntry | null;
27
24
  get next(): HistoryEntry | null;
28
25
  get current(): HistoryEntry;
29
- get canGoBack(): boolean;
30
- get canGoForward(): boolean;
26
+ canGoBack(this: Navigation): this is Navigation & {
27
+ previous: HistoryEntry;
28
+ };
29
+ canGoForward(this: Navigation): this is Navigation & {
30
+ next: HistoryEntry;
31
+ };
31
32
  }
package/build/Router.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { RouterBase } from '@react-motion-router/core';
2
- import type { LoadEvent, NestedRouterContext, RouterBaseConfig, RouterBaseProps, RouterBaseState, ScreenChild } from '@react-motion-router/core';
2
+ import type { ClonedElementType, LoadEvent, NestedRouterContext, RouterBaseConfig, RouterBaseProps, RouterBaseState, ScreenChild } from '@react-motion-router/core';
3
3
  import { Navigation } from './Navigation';
4
4
  import { ScreenProps, Screen, ScreenConfig } from './Screen';
5
- import { StackRouterEventMap, SwipeDirection } from './common/types';
5
+ import { RouterEventMap, ScreenInternalProps, SwipeDirection } from './common/types';
6
6
  export interface RouterConfig extends RouterBaseConfig {
7
7
  screenConfig?: ScreenConfig;
8
8
  disableBrowserRouting?: boolean;
@@ -13,20 +13,22 @@ export interface RouterConfig extends RouterBaseConfig {
13
13
  export interface RouterProps extends RouterBaseProps<Screen> {
14
14
  config?: RouterConfig;
15
15
  }
16
+ type InjectedScreenProps = Pick<ScreenInternalProps & ScreenProps, "config" | "id" | "resolvedPathname">;
16
17
  export interface RouterState extends RouterBaseState {
17
- backNavigating: boolean;
18
18
  transition: NavigationTransition | LoadEvent["transition"] | null;
19
- screenStack: ScreenChild<Screen>[];
19
+ screenStack: ClonedElementType<ScreenChild<Screen>, InjectedScreenProps>[];
20
20
  gestureDirection: SwipeDirection;
21
21
  gestureAreaWidth: number;
22
22
  gestureMinFlingVelocity: number;
23
23
  gestureHysteresis: number;
24
- disableGesture: boolean;
24
+ gestureDisabled: boolean;
25
25
  fromKey: React.Key | null;
26
26
  destinationKey: React.Key | null;
27
27
  documentTitle?: string;
28
+ controller: AbortController | null;
28
29
  }
29
- export declare class Router extends RouterBase<RouterProps, RouterState, StackRouterEventMap> {
30
+ export declare class Router extends RouterBase<RouterProps, RouterState, RouterEventMap> {
31
+ #private;
30
32
  readonly navigation: Navigation;
31
33
  constructor(props: RouterProps, context: React.ContextType<typeof NestedRouterContext>);
32
34
  static readonly defaultProps: Partial<RouterProps>;
@@ -35,16 +37,23 @@ export declare class Router extends RouterBase<RouterProps, RouterState, StackRo
35
37
  gestureAreaWidth: number;
36
38
  gestureMinFlingVelocity: number;
37
39
  gestureHysteresis: number;
38
- disableGesture: boolean;
40
+ gestureDisabled: boolean;
39
41
  documentTitle: string | undefined;
40
42
  };
41
43
  componentDidMount(): void;
42
44
  shouldComponentUpdate(nextProps: Readonly<RouterProps>, nextState: Readonly<RouterState>): boolean;
43
45
  componentWillUnmount(): void;
46
+ private onNavigate;
47
+ private onCurrentEntryChange;
48
+ private onNavigateSuccess;
49
+ private onNavigateError;
50
+ private onGestureCancel;
44
51
  private canGestureNavigate;
45
52
  private onSwipeStart;
46
53
  private onSwipeEnd;
47
- protected get screens(): import("react").CElement<ScreenProps, Screen>[];
54
+ get committed(): Promise<NavigationHistoryEntry> | null;
55
+ private get backNavigating();
56
+ protected get screens(): import("react").CElement<ScreenProps & Partial<InjectedScreenProps>, Screen & import("react").Component<ScreenProps & InjectedScreenProps, {}, any>>[];
48
57
  private screenChildFromPathname;
49
58
  private getScreenChildByPathname;
50
59
  private getScreenRefByKey;
@@ -57,3 +66,4 @@ export declare class Router extends RouterBase<RouterProps, RouterState, StackRo
57
66
  private dispatchLifecycleHandlers;
58
67
  private screenTransition;
59
68
  }
69
+ export {};
package/build/Screen.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ScreenBase } from '@react-motion-router/core';
2
2
  import type { PlainObject, RouterContext, ScreenBaseProps, ScreenBaseState, ScreenBaseComponentProps, ScreenBaseConfig } from '@react-motion-router/core';
3
3
  import { Navigation } from './Navigation';
4
- import { RouteProp, SwipeDirection } from './common/types';
4
+ import { HistoryEntryState, RouteProp, ScreenInternalProps, SwipeDirection } from './common/types';
5
5
  import { Router } from './Router';
6
6
  export interface ScreenComponentProps<T extends PlainObject = {}> extends ScreenBaseComponentProps<RouteProp<T>, Navigation> {
7
7
  }
@@ -13,7 +13,7 @@ export interface ScreenConfig extends ScreenBaseConfig<RouteProp> {
13
13
  gestureAreaWidth?: number;
14
14
  gestureMinFlingVelocity?: number;
15
15
  gestureHysteresis?: number;
16
- disableGesture?: boolean;
16
+ gestureDisabled?: boolean;
17
17
  }
18
18
  export interface ScreenProps extends ScreenBaseProps {
19
19
  config?: ScreenConfig;
@@ -21,44 +21,21 @@ export interface ScreenProps extends ScreenBaseProps {
21
21
  export interface ScreenState extends ScreenBaseState {
22
22
  }
23
23
  export declare class Screen extends ScreenBase<ScreenProps, ScreenState, RouteProp> {
24
- readonly routeProp: {
25
- setParams: (params: PlainObject) => void;
26
- setConfig: (config: ScreenProps["config"]) => void;
27
- readonly path: string;
28
- readonly resolvedPathname: string | undefined;
29
- readonly focused: boolean;
30
- readonly config: {
31
- header?: {
32
- fallback?: React.ReactNode;
33
- component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
34
- };
35
- footer?: {
36
- fallback?: React.ReactNode;
37
- component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
38
- };
39
- animation?: import("@react-motion-router/core").AnimationEffectFactory;
40
- onEnter?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
41
- onExit?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
42
- onEntered?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
43
- onExited?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
44
- onLoad?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
45
- title?: string;
46
- presentation?: "default" | "dialog" | "modal";
47
- keepAlive?: boolean;
48
- gestureDirection?: SwipeDirection;
49
- gestureAreaWidth?: number;
50
- gestureMinFlingVelocity?: number;
51
- gestureHysteresis?: number;
52
- disableGesture?: boolean;
53
- };
54
- readonly params: {
55
- [x: string]: any;
56
- };
57
- };
24
+ #private;
58
25
  constructor(props: ScreenProps, context: React.ContextType<typeof RouterContext>);
59
26
  static getDerivedStateFromProps(props: ScreenProps): {
60
27
  elementType: string;
61
28
  };
29
+ protected setParams(newParams: PlainObject): void;
30
+ protected setConfig(newConfig: NonNullable<ScreenProps["config"]>): void;
31
+ protected get router(): Router;
32
+ get internalProps(): ScreenInternalProps;
33
+ get resolvedPathname(): string;
34
+ get historyEntryState(): HistoryEntryState;
35
+ get id(): string;
36
+ get params(): {
37
+ [x: string]: any;
38
+ };
62
39
  get config(): {
63
40
  header?: {
64
41
  fallback?: React.ReactNode;
@@ -81,14 +58,43 @@ export declare class Screen extends ScreenBase<ScreenProps, ScreenState, RoutePr
81
58
  gestureAreaWidth?: number;
82
59
  gestureMinFlingVelocity?: number;
83
60
  gestureHysteresis?: number;
84
- disableGesture?: boolean;
61
+ gestureDisabled?: boolean;
85
62
  };
86
- get params(): {
87
- [x: string]: any;
63
+ protected get routeProp(): {
64
+ setParams: (newParams: PlainObject) => void;
65
+ setConfig: (newConfig: NonNullable<ScreenProps["config"]>) => void;
66
+ path: string;
67
+ resolvedPathname: string;
68
+ focused: boolean;
69
+ params: {
70
+ [x: string]: any;
71
+ };
72
+ config: {
73
+ header?: {
74
+ fallback?: React.ReactNode;
75
+ component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
76
+ };
77
+ footer?: {
78
+ fallback?: React.ReactNode;
79
+ component: React.JSXElementConstructor<any> | import("@react-motion-router/core").LazyExoticComponent<any>;
80
+ };
81
+ animation?: import("@react-motion-router/core").AnimationEffectFactory;
82
+ onEnter?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
83
+ onExit?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
84
+ onEntered?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
85
+ onExited?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
86
+ onLoad?: ((props: import("@react-motion-router/core").LifecycleProps<RouteProp<{}>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | ((props: import("@react-motion-router/core").LifecycleProps<import("@react-motion-router/core").RoutePropBase<{}, PlainObject<any>>, import("@react-motion-router/core").NavigationBase<import("@react-motion-router/core").RouterBaseEventMap>>) => void | Promise<void>) | undefined;
87
+ title?: string;
88
+ presentation?: "default" | "dialog" | "modal";
89
+ keepAlive?: boolean;
90
+ gestureDirection?: SwipeDirection;
91
+ gestureAreaWidth?: number;
92
+ gestureMinFlingVelocity?: number;
93
+ gestureHysteresis?: number;
94
+ gestureDisabled?: boolean;
95
+ };
88
96
  };
89
- protected setParams(params: PlainObject): void;
90
- protected setConfig(config: ScreenProps["config"]): void;
91
- protected get router(): Router;
97
+ protected setHistoryState(newState: PlainObject | ((prevState: PlainObject) => PlainObject)): void;
92
98
  private onClickOutside;
93
99
  onEnter(signal: AbortSignal): Promise<void>;
94
100
  onExited(signal: AbortSignal): Promise<void>;
@@ -3,5 +3,5 @@ export declare const DEFAULT_GESTURE_CONFIG: {
3
3
  readonly gestureMinFlingVelocity: 400;
4
4
  readonly gestureAreaWidth: 100;
5
5
  readonly gestureDirection: "right";
6
- readonly disableGesture: false;
6
+ readonly gestureDisabled: false;
7
7
  };
@@ -6,23 +6,23 @@ export declare class NavigateEvent extends Event {
6
6
  readonly props: NavigationProps;
7
7
  readonly navigationType: NonNullable<NavigateOptions["type"]>;
8
8
  readonly signal: AbortSignal;
9
- readonly result: NavigationResult;
9
+ readonly committed: Promise<NavigationHistoryEntry>;
10
10
  readonly transition: NavigationTransition;
11
- constructor(routerId: string, route: string, props: NavigationProps, type: NavigateOptions["type"], signal: AbortSignal, result: NavigationResult, transition: NavigationTransition);
11
+ constructor(routerId: string, route: string, props: NavigationProps, type: NavigateOptions["type"], signal: AbortSignal, committed: Promise<NavigationHistoryEntry>, transition: NavigationTransition);
12
12
  }
13
13
  export declare class BackEvent extends Event {
14
14
  readonly routerId: string;
15
15
  readonly signal: AbortSignal;
16
- readonly result: NavigationResult;
16
+ readonly committed: Promise<NavigationHistoryEntry>;
17
17
  readonly transition: NavigationTransition;
18
- constructor(routerId: string, signal: AbortSignal, result: NavigationResult, transition: NavigationTransition);
18
+ constructor(routerId: string, signal: AbortSignal, committed: Promise<NavigationHistoryEntry>, transition: NavigationTransition);
19
19
  }
20
20
  export declare class ForwardEvent extends Event {
21
21
  readonly routerId: string;
22
22
  readonly signal: AbortSignal;
23
- readonly result: NavigationResult;
23
+ readonly committed: Promise<NavigationHistoryEntry>;
24
24
  readonly transition: NavigationTransition;
25
- constructor(routerId: string, signal: AbortSignal, result: NavigationResult, transition: NavigationTransition);
25
+ constructor(routerId: string, signal: AbortSignal, committed: Promise<NavigationHistoryEntry>, transition: NavigationTransition);
26
26
  }
27
27
  export declare class GestureStartEvent extends Event {
28
28
  readonly source: GestureEvent;
@@ -1,6 +1,7 @@
1
+ import { PlainObject } from "@react-motion-router/core";
1
2
  import { Navigation } from "../Navigation";
2
3
  import { Router } from "../Router";
3
4
  import { RouteProp } from "./types";
4
5
  export declare function useNavigation(): Navigation;
5
6
  export declare function useRouter(): Router;
6
- export declare function useRoute(): RouteProp<{}>;
7
+ export declare function useRoute<T extends PlainObject = PlainObject>(): RouteProp<T>;
@@ -0,0 +1,9 @@
1
+ export declare class PromiseWrapper<T> {
2
+ promise: Promise<T>;
3
+ state: 'pending' | 'resolved' | 'rejected';
4
+ nativeResolve: ((value: T | PromiseLike<T>) => void) | null;
5
+ nativeReject: ((reason: any) => void) | null;
6
+ constructor();
7
+ resolve(value: T): void;
8
+ reject(reason: any): void;
9
+ }
@@ -25,7 +25,7 @@ export interface HistoryEntryState {
25
25
  params?: PlainObject;
26
26
  }
27
27
  export declare function isRefObject<T>(value?: React.LegacyRef<T>): value is RefObject<T>;
28
- export interface StackRouterEventMap extends RouterBaseEventMap {
28
+ export interface RouterEventMap extends RouterBaseEventMap {
29
29
  "navigate": NavigateEvent;
30
30
  "back": BackEvent;
31
31
  "forward": ForwardEvent;
@@ -36,5 +36,14 @@ export interface StackRouterEventMap extends RouterBaseEventMap {
36
36
  export interface RouteProp<T extends PlainObject = {}> extends RoutePropBase<ScreenProps["config"], T> {
37
37
  }
38
38
  export type SwipeDirection = 'up' | 'down' | 'left' | 'right' | 'horizontal' | 'vertical';
39
- export declare function isVerticalDirection(direction: SwipeDirection): direction is 'up' | 'down' | 'vertical';
39
+ export type Direction = Exclude<SwipeDirection, "horizontal" | "vertical">;
40
+ export declare function isSupportedDirection(direction: Exclude<SwipeDirection, "horizontal" | "vertical">, supported: SwipeDirection): boolean;
41
+ export declare function isOutOfBounds(direction: SwipeDirection, { x, y }: {
42
+ x: number;
43
+ y: number;
44
+ }, clientRect: DOMRect, gestureAreaWidth: number): false | undefined;
40
45
  export declare function isHorizontalDirection(direction: SwipeDirection): direction is 'left' | 'right' | 'horizontal';
46
+ export interface ScreenInternalProps {
47
+ resolvedPathname: string;
48
+ id: React.Key;
49
+ }
@@ -1,7 +1,8 @@
1
1
  import { PlainObject } from "@react-motion-router/core";
2
- export declare function searchParamsToObject(searchPart: string): PlainObject<string> | undefined;
2
+ export declare function searchParamsToObject(searchParams: URLSearchParams): PlainObject<string> | undefined;
3
3
  export declare function searchParamsFromObject(params: {
4
4
  [key: string]: any;
5
5
  }): string;
6
+ export declare function isGesture(info?: unknown): boolean;
6
7
  export declare function isRollback(info?: unknown): boolean;
7
8
  export declare function deepEquals<T>(obj1: T, obj2: T): boolean;
package/build/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export * from './animation-configs/keyframe-options-presets';
8
8
  export * from './animation-configs/animation-presets';
9
9
  export * from './common/hooks';
10
10
  export * from './GestureRegion';
11
+ export * from './HistoryEntry';