@prose-reader/core 1.289.0 → 1.291.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.
Files changed (40) hide show
  1. package/dist/context/BridgeEvent.d.ts +3 -2
  2. package/dist/createReaderWithEnhancer.d.ts +9 -9
  3. package/dist/enhancers/navigation/bookBoundary.d.ts +8 -0
  4. package/dist/enhancers/navigation/bookBoundary.test.d.ts +1 -0
  5. package/dist/enhancers/navigation/boundary.d.ts +6 -0
  6. package/dist/enhancers/navigation/boundary.test.d.ts +1 -0
  7. package/dist/enhancers/navigation/navigators/UserScrollNavigation.d.ts +2 -3
  8. package/dist/enhancers/navigation/resolvers/getNavigationForRightOrBottomPage.d.ts +1 -1
  9. package/dist/enhancers/navigation/resolvers/getNavigationForRightOrBottomPage.test.d.ts +1 -0
  10. package/dist/enhancers/navigation/types.d.ts +2 -0
  11. package/dist/enhancers/zoom/ZoomController.test.d.ts +1 -0
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.js +2485 -2409
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.umd.cjs +28 -28
  16. package/dist/index.umd.cjs.map +1 -1
  17. package/dist/navigation/InternalNavigator.d.ts +9 -24
  18. package/dist/navigation/Navigator.d.ts +9 -10
  19. package/dist/navigation/consolidation/consolidateWithPagination.d.ts +3 -1
  20. package/dist/navigation/consolidation/mapUserNavigationToInternal.d.ts +3 -2
  21. package/dist/navigation/consolidation/withFallbackPosition.d.ts +3 -1
  22. package/dist/navigation/controllers/ControlledNavigationController.d.ts +9 -8
  23. package/dist/navigation/controllers/ControlledNavigationController.test.d.ts +1 -0
  24. package/dist/navigation/controllers/ScrollNavigationController.d.ts +9 -8
  25. package/dist/navigation/controllers/positions.d.ts +6 -1
  26. package/dist/navigation/operators.d.ts +11 -0
  27. package/dist/navigation/resolvers/NavigationResolver.d.ts +4 -3
  28. package/dist/navigation/resolvers/clampRectInSpine.d.ts +13 -0
  29. package/dist/navigation/resolvers/clampRectInSpine.test.d.ts +1 -0
  30. package/dist/navigation/resolvers/getAdjustedPositionForSpread.d.ts +5 -3
  31. package/dist/navigation/types.d.ts +25 -1
  32. package/dist/pagination/PaginationController.d.ts +3 -1
  33. package/dist/reader.d.ts +9 -9
  34. package/dist/spine/loader/SpineItemsLoader.d.ts +3 -1
  35. package/dist/spine/loader/SpineItemsLoader.test.d.ts +1 -0
  36. package/dist/utilities.d.ts +4 -0
  37. package/dist/viewport/Viewport.d.ts +4 -0
  38. package/package.json +4 -4
  39. package/dist/navigation/resolvers/fromOutOfBoundsSpinePosition.d.ts +0 -20
  40. package/dist/navigation/resolvers/fromUnboundSpinePosition.d.ts +0 -12
@@ -2,41 +2,26 @@ import { BehaviorSubject, Observable } from 'rxjs';
2
2
  import { Context } from '../context/Context';
3
3
  import { ReaderSettingsManager } from '../settings/ReaderSettingsManager';
4
4
  import { Spine } from '../spine/Spine';
5
- import { SpinePosition } from '../spine/types';
6
5
  import { DestroyableClass } from '../utils/DestroyableClass';
7
- import { ControlledNavigationController } from './controllers/ControlledNavigationController';
8
- import { ScrollNavigationController } from './controllers/ScrollNavigationController';
6
+ import { Viewport } from '../viewport/Viewport';
9
7
  import { Locker } from './Locker';
10
8
  import { createNavigationResolver } from './resolvers/NavigationResolver';
11
- import { InternalNavigationEntry, UserNavigationEntry, NavigationConsolidation } from './types';
12
- import { UnboundSpinePosition } from '..';
9
+ import { InternalNavigationEntry, NavigationModeController, UserNavigationEntry } from './types';
13
10
  export declare class InternalNavigator extends DestroyableClass {
14
11
  protected settings: ReaderSettingsManager;
15
12
  protected context: Context;
16
13
  protected userNavigation$: Observable<UserNavigationEntry>;
17
- protected controlledNavigationController: ControlledNavigationController;
18
- protected scrollNavigationController: ScrollNavigationController;
14
+ protected getActiveNavigationModeController: () => NavigationModeController;
15
+ protected navigationModeLayout$: Observable<unknown>;
19
16
  protected navigationResolver: ReturnType<typeof createNavigationResolver>;
20
17
  protected spine: Spine;
21
- protected isRestorationLocked$: Observable<boolean>;
18
+ protected viewport: Viewport;
19
+ protected isUserInteractionLocked$: Observable<boolean>;
22
20
  navigationSubject: BehaviorSubject<InternalNavigationEntry>;
23
- navigated$: Observable<{
24
- position: SpinePosition | UnboundSpinePosition;
25
- id: symbol;
26
- meta: {
27
- triggeredBy: `user` | `restoration` | `pagination`;
28
- };
29
- type: `api` | `scroll`;
30
- animation?: boolean | `turn` | `snap`;
31
- url?: string | URL;
32
- spineItem?: string | number;
33
- cfi?: string;
34
- } & NavigationConsolidation>;
35
- navigation$: Observable<{
36
- position: SpinePosition | UnboundSpinePosition;
37
- id: symbol;
21
+ navigation$: Observable<Pick<InternalNavigationEntry, "id" | "position" | "requestedPosition" | "requestedVisibleArea"> & {
22
+ triggeredBy: InternalNavigationEntry["meta"]["triggeredBy"];
38
23
  }>;
39
24
  locker: Locker;
40
- constructor(settings: ReaderSettingsManager, context: Context, userNavigation$: Observable<UserNavigationEntry>, controlledNavigationController: ControlledNavigationController, scrollNavigationController: ScrollNavigationController, navigationResolver: ReturnType<typeof createNavigationResolver>, spine: Spine, isRestorationLocked$: Observable<boolean>);
25
+ constructor(settings: ReaderSettingsManager, context: Context, userNavigation$: Observable<UserNavigationEntry>, getActiveNavigationModeController: () => NavigationModeController, navigationModeLayout$: Observable<unknown>, navigationResolver: ReturnType<typeof createNavigationResolver>, spine: Spine, viewport: Viewport, isUserInteractionLocked$: Observable<boolean>);
41
26
  get navigation(): InternalNavigationEntry;
42
27
  }
@@ -7,8 +7,7 @@ import { Viewport } from '../viewport/Viewport';
7
7
  import { ControlledNavigationController } from './controllers/ControlledNavigationController';
8
8
  import { ScrollNavigationController } from './controllers/ScrollNavigationController';
9
9
  import { InternalNavigator } from './InternalNavigator';
10
- import { Locker } from './Locker';
11
- import { UserNavigationEntry, InternalNavigationEntry } from './types';
10
+ import { UserNavigationEntry, InternalNavigationEntry, NavigationVisibleArea, SpineBoundary } from './types';
12
11
  import { Observable } from 'rxjs';
13
12
  import { SpinePosition, SpineItemPosition, SpineItem, UnboundSpinePosition } from '..';
14
13
  import { getNavigationForSpineItemPage } from './resolvers/getNavigationForSpineItemPage';
@@ -25,10 +24,10 @@ export declare const createNavigator: ({ spineItemsManager, context, hookManager
25
24
  internalNavigator: InternalNavigator;
26
25
  scrollNavigationController: ScrollNavigationController;
27
26
  controlledNavigationController: ControlledNavigationController;
28
- locker: Locker;
29
27
  navigationState$: Observable<"free" | "busy">;
30
28
  navigate: (to: UserNavigationEntry) => void;
31
- lock(): () => void;
29
+ lock: () => () => void;
30
+ isLocked$: Observable<boolean>;
32
31
  navigationResolver: {
33
32
  getNavigationForUrl: (url: string | URL) => {
34
33
  position: SpinePosition;
@@ -44,8 +43,8 @@ export declare const createNavigator: ({ spineItemsManager, context, hookManager
44
43
  getNavigationForSpineIndexOrId: (indexOrId: number | string | SpineItem) => SpinePosition;
45
44
  getNavigationForPosition: (viewportPosition: SpinePosition | UnboundSpinePosition) => SpinePosition;
46
45
  getMostPredominantNavigationForPosition: (viewportPosition: SpinePosition) => SpinePosition;
47
- fromUnboundSpinePosition: (position: SpinePosition | UnboundSpinePosition) => SpinePosition;
48
- fromOutOfBoundsSpinePosition: (position: SpinePosition | UnboundSpinePosition) => SpinePosition | UnboundSpinePosition;
46
+ clampPositionInSpine: (position: SpinePosition | UnboundSpinePosition, size: NavigationVisibleArea) => UnboundSpinePosition;
47
+ getBoundaryForPosition: (position: SpinePosition | UnboundSpinePosition, size?: NavigationVisibleArea) => SpineBoundary | undefined;
49
48
  isNavigationGoingForwardFrom: (to: SpinePosition, from: SpinePosition) => boolean;
50
49
  arePositionsDifferent: (a: {
51
50
  x: number;
@@ -54,16 +53,16 @@ export declare const createNavigator: ({ spineItemsManager, context, hookManager
54
53
  x: number;
55
54
  y: number;
56
55
  }) => boolean;
57
- getAdjustedPositionForSpread: (position: SpinePosition | UnboundSpinePosition) => SpinePosition;
56
+ getAdjustedPositionForSpread: (position: SpinePosition | UnboundSpinePosition) => SpinePosition | UnboundSpinePosition;
58
57
  spineItemNavigator: {
59
58
  getNavigationForLastPage: (spineItem: SpineItem) => SpineItemPosition;
60
59
  getNavigationForPosition: (spineItem: SpineItem, position: SpineItemPosition) => SpineItemPosition;
61
60
  getNavigationFromNode: (spineItem: SpineItem, node: Node, offset: number) => SpineItemPosition;
62
61
  };
63
62
  };
64
- navigation$: Observable<{
65
- position: SpinePosition | UnboundSpinePosition;
66
- id: symbol;
63
+ navigation$: Observable<Pick< InternalNavigationEntry, "id" | "position" | "requestedPosition" | "requestedVisibleArea"> & {
64
+ triggeredBy: InternalNavigationEntry["meta"]["triggeredBy"];
67
65
  }>;
66
+ position$: Observable< SpinePosition | UnboundSpinePosition>;
68
67
  };
69
68
  export type Navigator = ReturnType<typeof createNavigator>;
@@ -1,14 +1,16 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { Context } from '../../context/Context';
3
3
  import { Spine } from '../../spine/Spine';
4
- import { InternalNavigationEntry } from '../types';
4
+ import { InternalNavigationEntry, NavigationVisibleArea } from '../types';
5
5
  import { SpinePosition, UnboundSpinePosition, SpineItemPosition, UnboundSpineItemPagePosition } from '../..';
6
6
  export declare const consolidateWithPagination: (context: Context, navigation$: Observable<InternalNavigationEntry>, spine: Spine) => Observable<{
7
7
  meta: {
8
8
  triggeredBy: "pagination";
9
9
  };
10
+ requestedPosition: SpinePosition | UnboundSpinePosition;
10
11
  position: SpinePosition | UnboundSpinePosition;
11
12
  id: symbol;
13
+ requestedVisibleArea?: NavigationVisibleArea;
12
14
  type: `api` | `scroll`;
13
15
  animation?: boolean | `turn` | `snap`;
14
16
  url?: string | URL;
@@ -1,8 +1,9 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { NavigationResolver } from '../resolvers/NavigationResolver';
3
- import { InternalNavigationEntry, InternalNavigationInput, UserNavigationEntry } from '../types';
4
- export declare const mapUserNavigationToInternal: ({ navigationResolver }: {
3
+ import { InternalNavigationEntry, InternalNavigationInput, NavigationVisibleArea, UserNavigationEntry } from '../types';
4
+ export declare const mapUserNavigationToInternal: ({ navigationResolver, getNavigationVisibleArea, }: {
5
5
  navigationResolver: NavigationResolver;
6
+ getNavigationVisibleArea: () => NavigationVisibleArea;
6
7
  }) => (stream: Observable<[UserNavigationEntry, InternalNavigationEntry]>) => Observable<{
7
8
  navigation: InternalNavigationInput;
8
9
  previousNavigation: InternalNavigationEntry;
@@ -1,12 +1,14 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { ReaderSettingsManager } from '../../settings/ReaderSettingsManager';
3
3
  import { SpineItemsManager } from '../../spine/SpineItemsManager';
4
+ import { Viewport } from '../../viewport/Viewport';
4
5
  import { NavigationResolver } from '../resolvers/NavigationResolver';
5
6
  import { InternalNavigationEntry, InternalNavigationInput } from '../types';
6
- export declare const withFallbackPosition: ({ spineItemsManager, navigationResolver, settings, }: {
7
+ export declare const withFallbackPosition: ({ spineItemsManager, navigationResolver, settings, viewport, }: {
7
8
  spineItemsManager: SpineItemsManager;
8
9
  navigationResolver: NavigationResolver;
9
10
  settings: ReaderSettingsManager;
11
+ viewport: Viewport;
10
12
  }) => <Navigation extends {
11
13
  navigation: InternalNavigationInput;
12
14
  previousNavigation: InternalNavigationEntry;
@@ -6,22 +6,23 @@ import { Spine } from '../../spine/Spine';
6
6
  import { SpinePosition } from '../../spine/types';
7
7
  import { DestroyableClass } from '../../utils/DestroyableClass';
8
8
  import { Viewport } from '../../viewport/Viewport';
9
- export type ViewportNavigationEntry = {
10
- position: SpinePosition;
11
- animation?: boolean | "turn" | "snap";
12
- };
13
- export declare class ControlledNavigationController extends DestroyableClass {
9
+ import { NavigationModeController, NavigationModeControllerNavigationEntry } from '../types';
10
+ import { AbsoluteViewport } from '../../viewport/types';
11
+ export type ControlledNavigationEntry = NavigationModeControllerNavigationEntry;
12
+ export declare class ControlledNavigationController extends DestroyableClass implements NavigationModeController {
14
13
  protected settings: ReaderSettingsManager;
15
14
  protected hookManager: HookManager;
16
15
  protected context: Context;
17
16
  protected spine: Spine;
18
17
  protected viewport: Viewport;
19
- protected navigateSubject: Subject<ViewportNavigationEntry>;
18
+ protected navigateSubject: Subject<NavigationModeControllerNavigationEntry>;
20
19
  readonly element$: BehaviorSubject<HTMLElement>;
21
20
  isNavigating$: Observable<boolean>;
22
21
  layout$: Observable<unknown>;
23
22
  constructor(settings: ReaderSettingsManager, hookManager: HookManager, context: Context, spine: Spine, viewport: Viewport);
24
- protected setViewportPosition(position: SpinePosition): void;
25
- navigate(navigation: ViewportNavigationEntry): void;
23
+ protected applyNavigationPosition(position: ControlledNavigationEntry["position"]): void;
24
+ navigate(navigation: NavigationModeControllerNavigationEntry): void;
25
+ isActive: () => boolean;
26
+ getNavigationVisibleArea: () => AbsoluteViewport;
26
27
  get viewportPosition(): SpinePosition;
27
28
  }
@@ -7,33 +7,34 @@ import { SpinePosition, UnboundSpinePosition } from '../../spine/types';
7
7
  import { AbstractPosition } from '../../types';
8
8
  import { ReactiveEntity } from '../../utils/ReactiveEntity';
9
9
  import { Viewport } from '../../viewport/Viewport';
10
+ import { NavigationModeController, NavigationModeControllerNavigationEntry } from '../types';
11
+ import { RelativeViewport } from '../../viewport/types';
10
12
  export declare class ScrollPosition extends AbstractPosition {
11
13
  }
12
14
  export declare class UnboundScrollPosition extends AbstractPosition {
13
15
  readonly __symbol: symbol;
14
16
  }
15
- export type ScrollNavigationViewportNavigationEntry = {
16
- position: UnboundSpinePosition | SpinePosition;
17
- };
17
+ export type ScrollNavigationEntry = NavigationModeControllerNavigationEntry;
18
18
  export declare class ScrollNavigationController extends ReactiveEntity<{
19
19
  element: HTMLElement | undefined;
20
- }> {
20
+ }> implements NavigationModeController {
21
21
  protected viewport: Viewport;
22
22
  protected settings: ReaderSettingsManager;
23
23
  protected hookManager: HookManager;
24
24
  protected spine: Spine;
25
25
  protected context: Context;
26
- protected navigateSubject: Subject<ScrollNavigationViewportNavigationEntry>;
26
+ protected navigateSubject: Subject<NavigationModeControllerNavigationEntry>;
27
27
  protected scrollingSubject: BehaviorSubject<boolean>;
28
- isScrolling$: Observable<boolean>;
29
28
  isNavigating$: Observable<boolean>;
30
29
  userScroll$: Observable<Event>;
31
30
  constructor(viewport: Viewport, settings: ReaderSettingsManager, hookManager: HookManager, spine: Spine, context: Context);
32
- protected setViewportPosition: ({ position, }: ScrollNavigationViewportNavigationEntry) => void;
31
+ protected applyNavigationPosition: ({ position }: ScrollNavigationEntry) => void;
33
32
  update(value: Partial<{
34
33
  element: HTMLElement | undefined;
35
34
  }>): void;
36
- navigate(navigation: ScrollNavigationViewportNavigationEntry): void;
35
+ navigate(navigation: NavigationModeControllerNavigationEntry): void;
36
+ isActive: () => boolean;
37
+ getNavigationVisibleArea: () => RelativeViewport;
37
38
  fromScrollPosition(position: UnboundScrollPosition | ScrollPosition): UnboundSpinePosition;
38
39
  fromSpinePosition(position: UnboundSpinePosition | SpinePosition): ScrollPosition;
39
40
  get scrollPosition(): ScrollPosition;
@@ -1,5 +1,9 @@
1
1
  import { SpinePosition } from '../../spine/types';
2
- export declare const spinePositionToTranslation: (position: SpinePosition) => {
2
+ type SpinePositionLike = {
3
+ x: number;
4
+ y: number;
5
+ };
6
+ export declare const spinePositionToTranslation: (position: SpinePositionLike) => {
3
7
  x: number;
4
8
  y: number;
5
9
  };
@@ -7,3 +11,4 @@ export declare const translationToSpinePosition: (translation: {
7
11
  x: number;
8
12
  y: number;
9
13
  } | DOMMatrix) => SpinePosition;
14
+ export {};
@@ -0,0 +1,11 @@
1
+ import { MonoTypeOperatorFunction, Observable } from 'rxjs';
2
+ import { Navigation } from './types';
3
+ export type NavigationState = "busy" | "free";
4
+ export type NavigationSignals = {
5
+ navigation$: Observable<Navigation>;
6
+ navigationState$: Observable<NavigationState>;
7
+ };
8
+ export declare const waitForNavigationSettled: <T>(navigationState$: Observable<NavigationState>) => MonoTypeOperatorFunction<T>;
9
+ export declare const observeSettledNavigation: ({ navigation$, navigationState$, }: NavigationSignals) => Observable<Navigation>;
10
+ export declare const observeNextSettledNavigation: (signals: NavigationSignals) => Observable<Navigation>;
11
+ export declare const takeUntilNextNavigationSettled: <T>(signals: NavigationSignals) => MonoTypeOperatorFunction<T>;
@@ -7,6 +7,7 @@ import { SpinePosition, UnboundSpinePosition } from '../../spine/types';
7
7
  import { SpineItem } from '../../spineItem/SpineItem';
8
8
  import { SpineItemPosition } from '../../spineItem/types';
9
9
  import { Viewport } from '../../viewport/Viewport';
10
+ import { NavigationVisibleArea, SpineBoundary } from '../types';
10
11
  import { getNavigationForSpineItemPage } from './getNavigationForSpineItemPage';
11
12
  export declare const NAMESPACE = "spineNavigator";
12
13
  export type NavigationResolver = ReturnType<typeof createNavigationResolver>;
@@ -32,8 +33,8 @@ export declare const createNavigationResolver: ({ context, spineItemsManager, lo
32
33
  getNavigationForSpineIndexOrId: (indexOrId: number | string | SpineItem) => SpinePosition;
33
34
  getNavigationForPosition: (viewportPosition: SpinePosition | UnboundSpinePosition) => SpinePosition;
34
35
  getMostPredominantNavigationForPosition: (viewportPosition: SpinePosition) => SpinePosition;
35
- fromUnboundSpinePosition: (position: SpinePosition | UnboundSpinePosition) => SpinePosition;
36
- fromOutOfBoundsSpinePosition: (position: SpinePosition | UnboundSpinePosition) => SpinePosition | UnboundSpinePosition;
36
+ clampPositionInSpine: (position: SpinePosition | UnboundSpinePosition, size: NavigationVisibleArea) => UnboundSpinePosition;
37
+ getBoundaryForPosition: (position: SpinePosition | UnboundSpinePosition, size?: NavigationVisibleArea) => SpineBoundary | undefined;
37
38
  isNavigationGoingForwardFrom: (to: SpinePosition, from: SpinePosition) => boolean;
38
39
  arePositionsDifferent: (a: {
39
40
  x: number;
@@ -42,7 +43,7 @@ export declare const createNavigationResolver: ({ context, spineItemsManager, lo
42
43
  x: number;
43
44
  y: number;
44
45
  }) => boolean;
45
- getAdjustedPositionForSpread: (position: SpinePosition | UnboundSpinePosition) => SpinePosition;
46
+ getAdjustedPositionForSpread: (position: SpinePosition | UnboundSpinePosition) => SpinePosition | UnboundSpinePosition;
46
47
  spineItemNavigator: {
47
48
  getNavigationForLastPage: (spineItem: SpineItem) => SpineItemPosition;
48
49
  getNavigationForPosition: (spineItem: SpineItem, position: SpineItemPosition) => SpineItemPosition;
@@ -0,0 +1,13 @@
1
+ import { Spine } from '../../spine/Spine';
2
+ import { SpineItemsManager } from '../../spine/SpineItemsManager';
3
+ import { SpinePosition, UnboundSpinePosition } from '../../spine/types';
4
+ import { NavigationVisibleArea, SpineBoundary } from '../types';
5
+ export type ClampRectInSpineParams = {
6
+ position: SpinePosition | UnboundSpinePosition;
7
+ size: NavigationVisibleArea;
8
+ isRTL: boolean;
9
+ spineItemsManager: SpineItemsManager;
10
+ spine: Spine;
11
+ };
12
+ export declare const clampRectInSpine: ({ position, size, isRTL, spineItemsManager, spine, }: ClampRectInSpineParams) => UnboundSpinePosition;
13
+ export declare const getBoundaryForRectInSpine: ({ position, size, isRTL, spineItemsManager, spine, }: ClampRectInSpineParams) => SpineBoundary | undefined;
@@ -1,6 +1,8 @@
1
1
  import { SpinePosition, UnboundSpinePosition } from '../../spine/types';
2
- export declare const getAdjustedPositionForSpread: ({ position: { x, y }, pageSizeWidth, visibleAreaRectWidth, }: {
3
- position: SpinePosition | UnboundSpinePosition;
2
+ type Args<P extends SpinePosition | UnboundSpinePosition> = {
3
+ position: P;
4
4
  pageSizeWidth: number;
5
5
  visibleAreaRectWidth: number;
6
- }) => SpinePosition;
6
+ };
7
+ export declare const getAdjustedPositionForSpread: <P extends SpinePosition | UnboundSpinePosition>({ position, pageSizeWidth, visibleAreaRectWidth, }: Args<P>) => P;
8
+ export {};
@@ -1,5 +1,11 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { SpinePosition, UnboundSpinePosition } from '../spine/types';
2
3
  import { SpineItemPosition, UnboundSpineItemPagePosition } from '../spineItem/types';
4
+ export type SpineBoundary = "start" | "end";
5
+ export type NavigationVisibleArea = {
6
+ width: number;
7
+ height: number;
8
+ };
3
9
  export type UserNavigationEntry = {
4
10
  position?: SpinePosition | UnboundSpinePosition;
5
11
  spineItem?: number | string;
@@ -9,6 +15,10 @@ export type UserNavigationEntry = {
9
15
  type?: "api" | "scroll";
10
16
  direction?: "left" | "right" | "top" | "bottom";
11
17
  };
18
+ export type NavigationModeControllerNavigationEntry = {
19
+ position: SpinePosition | UnboundSpinePosition;
20
+ animation?: boolean | "turn" | "snap";
21
+ };
12
22
  export type NavigationConsolidation = {
13
23
  spineItemHeight?: number;
14
24
  spineItemWidth?: number;
@@ -26,13 +36,27 @@ export type InternalNavigationEntry = {
26
36
  meta: {
27
37
  triggeredBy: `user` | `restoration` | `pagination`;
28
38
  };
39
+ requestedPosition?: SpinePosition | UnboundSpinePosition;
40
+ requestedVisibleArea?: NavigationVisibleArea;
29
41
  type: `api` | `scroll`;
30
42
  animation?: boolean | `turn` | `snap`;
31
43
  url?: string | URL;
32
44
  spineItem?: string | number;
33
45
  cfi?: string;
34
46
  } & NavigationConsolidation;
47
+ export type NavigationSurface = {
48
+ getNavigationVisibleArea: () => NavigationVisibleArea;
49
+ };
50
+ export type NavigationModeController = NavigationSurface & {
51
+ isActive: () => boolean;
52
+ isNavigating$: Observable<boolean>;
53
+ layout$?: Observable<unknown>;
54
+ navigate: (navigation: NavigationModeControllerNavigationEntry) => void;
55
+ destroy: () => void;
56
+ };
35
57
  export type InternalNavigationInput = Omit<InternalNavigationEntry, "position"> & {
36
58
  position?: SpinePosition | UnboundSpinePosition;
37
59
  };
38
- export type Navigation = Pick<InternalNavigationEntry, "position" | "id">;
60
+ export type Navigation = Pick<InternalNavigationEntry, "position" | "id" | "requestedPosition" | "requestedVisibleArea"> & {
61
+ triggeredBy: InternalNavigationEntry["meta"]["triggeredBy"];
62
+ };
@@ -1,3 +1,4 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { Context } from '../context/Context';
2
3
  import { Spine } from '../spine/Spine';
3
4
  import { SpineItemsManager } from '../spine/SpineItemsManager';
@@ -10,5 +11,6 @@ export declare class PaginationController extends DestroyableClass {
10
11
  protected spineItemsManager: SpineItemsManager;
11
12
  protected spine: Spine;
12
13
  protected spineItemLocator: ReturnType<typeof createSpineItemLocator>;
13
- constructor(context: Context, pagination: Pagination, spineItemsManager: SpineItemsManager, spine: Spine, spineItemLocator: ReturnType<typeof createSpineItemLocator>);
14
+ protected isNavigationLocked$: Observable<boolean>;
15
+ constructor(context: Context, pagination: Pagination, spineItemsManager: SpineItemsManager, spine: Spine, spineItemLocator: ReturnType<typeof createSpineItemLocator>, isNavigationLocked$: Observable<boolean>);
14
16
  }
package/dist/reader.d.ts CHANGED
@@ -13,7 +13,7 @@ import { Viewport } from './viewport/Viewport';
13
13
  import { CoreHook } from './hooks';
14
14
  import { Manifest } from '@prose-reader/shared';
15
15
  import { ProseParsedCfi } from './cfi';
16
- import { PageEntry, SpineItem, InternalNavigationEntry, InternalNavigator, ScrollNavigationController, ControlledNavigationController, Locker, UserNavigationEntry, SpinePosition, SpineItemPosition, UnboundSpinePosition, SpineItemsObserver, CoreOutputSettings } from '.';
16
+ import { PageEntry, SpineItem, InternalNavigationEntry, InternalNavigator, ScrollNavigationController, ControlledNavigationController, UserNavigationEntry, SpinePosition, SpineItemPosition, UnboundSpinePosition, NavigationVisibleArea, SpineBoundary, SpineItemsObserver, CoreOutputSettings } from '.';
17
17
  import { getNavigationForSpineItemPage } from './navigation/resolvers/getNavigationForSpineItemPage';
18
18
  import { PaginationInfo } from './pagination';
19
19
  export type CreateReaderOptions = Partial<CoreInputSettings>;
@@ -49,10 +49,10 @@ export declare const createReader: (inputSettings: CreateReaderOptions) => {
49
49
  internalNavigator: InternalNavigator;
50
50
  scrollNavigationController: ScrollNavigationController;
51
51
  controlledNavigationController: ControlledNavigationController;
52
- locker: Locker;
53
52
  navigationState$: Observable<"free" | "busy">;
54
53
  navigate: (to: UserNavigationEntry) => void;
55
- lock(): () => void;
54
+ lock: () => () => void;
55
+ isLocked$: Observable<boolean>;
56
56
  navigationResolver: {
57
57
  getNavigationForUrl: (url: string | URL) => {
58
58
  position: SpinePosition;
@@ -68,8 +68,8 @@ export declare const createReader: (inputSettings: CreateReaderOptions) => {
68
68
  getNavigationForSpineIndexOrId: (indexOrId: number | string | SpineItem) => SpinePosition;
69
69
  getNavigationForPosition: (viewportPosition: SpinePosition | UnboundSpinePosition) => SpinePosition;
70
70
  getMostPredominantNavigationForPosition: (viewportPosition: SpinePosition) => SpinePosition;
71
- fromUnboundSpinePosition: (position: SpinePosition | UnboundSpinePosition) => SpinePosition;
72
- fromOutOfBoundsSpinePosition: (position: SpinePosition | UnboundSpinePosition) => SpinePosition | UnboundSpinePosition;
71
+ clampPositionInSpine: (position: SpinePosition | UnboundSpinePosition, size: NavigationVisibleArea) => UnboundSpinePosition;
72
+ getBoundaryForPosition: (position: SpinePosition | UnboundSpinePosition, size?: NavigationVisibleArea) => SpineBoundary | undefined;
73
73
  isNavigationGoingForwardFrom: (to: SpinePosition, from: SpinePosition) => boolean;
74
74
  arePositionsDifferent: (a: {
75
75
  x: number;
@@ -78,17 +78,17 @@ export declare const createReader: (inputSettings: CreateReaderOptions) => {
78
78
  x: number;
79
79
  y: number;
80
80
  }) => boolean;
81
- getAdjustedPositionForSpread: (position: SpinePosition | UnboundSpinePosition) => SpinePosition;
81
+ getAdjustedPositionForSpread: (position: SpinePosition | UnboundSpinePosition) => SpinePosition | UnboundSpinePosition;
82
82
  spineItemNavigator: {
83
83
  getNavigationForLastPage: (spineItem: SpineItem) => SpineItemPosition;
84
84
  getNavigationForPosition: (spineItem: SpineItem, position: SpineItemPosition) => SpineItemPosition;
85
85
  getNavigationFromNode: (spineItem: SpineItem, node: Node, offset: number) => SpineItemPosition;
86
86
  };
87
87
  };
88
- navigation$: Observable<{
89
- position: SpinePosition | UnboundSpinePosition;
90
- id: symbol;
88
+ navigation$: Observable<Pick< InternalNavigationEntry, "id" | "position" | "requestedPosition" | "requestedVisibleArea"> & {
89
+ triggeredBy: InternalNavigationEntry["meta"]["triggeredBy"];
91
90
  }>;
91
+ position$: Observable< SpinePosition | UnboundSpinePosition>;
92
92
  };
93
93
  spineItemsObserver: SpineItemsObserver;
94
94
  spineItemsManager: SpineItemsManager;
@@ -2,6 +2,7 @@ import { Context } from '../../context/Context';
2
2
  import { ReaderSettingsManager } from '../../settings/ReaderSettingsManager';
3
3
  import { SpineItem } from '../../spineItem/SpineItem';
4
4
  import { DestroyableClass } from '../../utils/DestroyableClass';
5
+ import { Viewport } from '../../viewport/Viewport';
5
6
  import { SpineLocator } from '../locator/SpineLocator';
6
7
  import { SpineItemsManager } from '../SpineItemsManager';
7
8
  import { SpineLayout } from '../SpineLayout';
@@ -11,8 +12,9 @@ export declare class SpineItemsLoader extends DestroyableClass {
11
12
  protected spineLocator: SpineLocator;
12
13
  protected settings: ReaderSettingsManager;
13
14
  protected spineLayout: SpineLayout;
15
+ protected viewport: Viewport;
14
16
  private forcedOpenSubject;
15
- constructor(context: Context, spineItemsManager: SpineItemsManager, spineLocator: SpineLocator, settings: ReaderSettingsManager, spineLayout: SpineLayout);
17
+ constructor(context: Context, spineItemsManager: SpineItemsManager, spineLocator: SpineLocator, settings: ReaderSettingsManager, spineLayout: SpineLayout, viewport: Viewport);
16
18
  forceOpen(spineItems: (number | SpineItem)[]): () => void;
17
19
  destroy(): void;
18
20
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export type { BookBoundaryReachedEvent, BookBoundaryReachedOptions, } from './enhancers/navigation/bookBoundary';
2
+ export { observeBookBoundaryReached } from './enhancers/navigation/bookBoundary';
3
+ export * from './navigation/operators';
4
+ export { isHtmlElement, isHtmlTagElement } from './utils/dom';
@@ -2,6 +2,7 @@ import { Context } from '../context/Context';
2
2
  import { ReaderSettingsManager } from '../settings/ReaderSettingsManager';
3
3
  import { ReactiveEntity } from '../utils/ReactiveEntity';
4
4
  import { AbsoluteViewport, RelativeViewport } from './types';
5
+ import { Observable } from 'rxjs';
5
6
  type State = {
6
7
  element: HTMLElement;
7
8
  pageSize: {
@@ -14,6 +15,8 @@ type State = {
14
15
  export declare class Viewport extends ReactiveEntity<State> {
15
16
  protected context: Context;
16
17
  protected settingsManager: ReaderSettingsManager;
18
+ private layoutSubject;
19
+ readonly layout$: Observable<void>;
17
20
  constructor(context: Context, settingsManager: ReaderSettingsManager);
18
21
  protected calculatePageSize(layout: {
19
22
  width: number;
@@ -30,5 +33,6 @@ export declare class Viewport extends ReactiveEntity<State> {
30
33
  };
31
34
  get scaleFactor(): number;
32
35
  get relativeViewport(): RelativeViewport;
36
+ destroy(): void;
33
37
  }
34
38
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prose-reader/core",
3
- "version": "1.289.0",
3
+ "version": "1.291.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.umd.cjs",
6
6
  "module": "./dist/index.js",
@@ -23,8 +23,8 @@
23
23
  "tsc": "tsc"
24
24
  },
25
25
  "dependencies": {
26
- "@prose-reader/cfi": "^1.289.0",
27
- "@prose-reader/shared": "^1.289.0"
26
+ "@prose-reader/cfi": "^1.291.0",
27
+ "@prose-reader/shared": "^1.291.0"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "rxjs": "*"
@@ -40,5 +40,5 @@
40
40
  }
41
41
  }
42
42
  },
43
- "gitHead": "bad187a76f540ffe0c6dee9496c3a8e3090327dd"
43
+ "gitHead": "95d3d207700bd99e75fdc6a169c7102f90cc7781"
44
44
  }
@@ -1,20 +0,0 @@
1
- import { Spine } from '../../spine/Spine';
2
- import { SpineItemsManager } from '../../spine/SpineItemsManager';
3
- import { SpinePosition, UnboundSpinePosition } from '../../spine/types';
4
- export declare const NAMESPACE = "spineNavigator";
5
- type SharedParams = {
6
- isRTL: boolean;
7
- spineItemsManager: SpineItemsManager;
8
- spine: Spine;
9
- viewportWidth: number;
10
- };
11
- export declare function fromOutOfBoundsSpinePosition(params: SharedParams & {
12
- position: SpinePosition;
13
- }): SpinePosition;
14
- export declare function fromOutOfBoundsSpinePosition(params: SharedParams & {
15
- position: UnboundSpinePosition;
16
- }): UnboundSpinePosition;
17
- export declare function fromOutOfBoundsSpinePosition(params: SharedParams & {
18
- position: UnboundSpinePosition | SpinePosition;
19
- }): UnboundSpinePosition | SpinePosition;
20
- export {};
@@ -1,12 +0,0 @@
1
- import { Spine } from '../../spine/Spine';
2
- import { SpineItemsManager } from '../../spine/SpineItemsManager';
3
- import { SpinePosition, UnboundSpinePosition } from '../../spine/types';
4
- export declare const NAMESPACE = "spineNavigator";
5
- export declare const fromUnboundSpinePosition: ({ position, isRTL, pageSizeHeight, spineItemsManager, visibleAreaRectWidth, spine, }: {
6
- position: SpinePosition | UnboundSpinePosition;
7
- isRTL: boolean;
8
- pageSizeHeight: number;
9
- spineItemsManager: SpineItemsManager;
10
- visibleAreaRectWidth: number;
11
- spine: Spine;
12
- }) => SpinePosition;