@prose-reader/core 1.69.0 → 1.71.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/dist/createReaderWithEnhancer.d.ts +1 -1
- package/dist/enhancers/navigation/state.d.ts +2 -0
- package/dist/index.js +50 -29
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +50 -29
- package/dist/index.umd.cjs.map +1 -1
- package/dist/navigation/Navigator.d.ts +1 -1
- package/dist/navigation/resolvers/NavigationResolver.d.ts +1 -1
- package/dist/navigation/resolvers/{wrapPositionWithSafeEdge.d.ts → getAdjustedPositionWithSafeEdge.d.ts} +2 -2
- package/dist/reader.d.ts +1 -1
- package/package.json +3 -3
|
@@ -63,7 +63,7 @@ export declare const createReaderWithEnhancers: (options: Partial<import('./sett
|
|
|
63
63
|
getNavigationForSpineIndexOrId: (indexOrId: number | string | import('./spineItem/createSpineItem').SpineItem) => import('./navigation/viewport/ViewportNavigator').ViewportPosition;
|
|
64
64
|
getNavigationForPosition: (viewportPosition: import('./navigation/viewport/ViewportNavigator').ViewportPosition) => import('./navigation/viewport/ViewportNavigator').ViewportPosition;
|
|
65
65
|
getMostPredominantNavigationForPosition: (viewportPosition: import('./navigation/viewport/ViewportNavigator').ViewportPosition) => import('./navigation/viewport/ViewportNavigator').ViewportPosition;
|
|
66
|
-
|
|
66
|
+
getAdjustedPositionWithSafeEdge: (position: import('./navigation/viewport/ViewportNavigator').ViewportPosition) => {
|
|
67
67
|
x: number;
|
|
68
68
|
y: number;
|
|
69
69
|
};
|
|
@@ -2,6 +2,8 @@ import { Reader } from '../../reader';
|
|
|
2
2
|
|
|
3
3
|
export type State = ReturnType<typeof observeState>;
|
|
4
4
|
export declare const observeState: (reader: Reader) => import('rxjs').Observable<{
|
|
5
|
+
canTurnLeft: boolean;
|
|
6
|
+
canTurnRight: boolean;
|
|
5
7
|
canGoTopSpineItem: boolean;
|
|
6
8
|
canGoBottomSpineItem: boolean;
|
|
7
9
|
canGoLeftSpineItem: boolean;
|
package/dist/index.js
CHANGED
|
@@ -704,7 +704,7 @@ const getNavigationForRightSinglePage = ({
|
|
|
704
704
|
spineItemPosition
|
|
705
705
|
);
|
|
706
706
|
if (!isNewNavigationInCurrentItem) {
|
|
707
|
-
return navigationResolver.
|
|
707
|
+
return navigationResolver.getAdjustedPositionWithSafeEdge(
|
|
708
708
|
pageTurnDirection === `horizontal` ? { x: position.x + context.getPageSize().width, y: 0 } : { y: position.y + context.getPageSize().height, x: 0 }
|
|
709
709
|
);
|
|
710
710
|
} else {
|
|
@@ -738,7 +738,7 @@ const getNavigationForRightPage = ({
|
|
|
738
738
|
if (context.state.isUsingSpreadMode) {
|
|
739
739
|
if ((spineItem == null ? void 0 : spineItem.isUsingVerticalWriting()) && position.x !== navigation.x) {
|
|
740
740
|
return navigationResolver.getAdjustedPositionForSpread(
|
|
741
|
-
navigationResolver.
|
|
741
|
+
navigationResolver.getAdjustedPositionWithSafeEdge(
|
|
742
742
|
context.isRTL() ? {
|
|
743
743
|
...navigation,
|
|
744
744
|
x: navigation.x - context.getPageSize().width
|
|
@@ -817,7 +817,7 @@ const getNavigationForLeftSinglePage = ({
|
|
|
817
817
|
spineItemPosition
|
|
818
818
|
);
|
|
819
819
|
if (!isNewNavigationInCurrentItem) {
|
|
820
|
-
return navigationResolver.
|
|
820
|
+
return navigationResolver.getAdjustedPositionWithSafeEdge(
|
|
821
821
|
pageTurnDirection === `horizontal` ? { x: position.x - context.getPageSize().width, y: 0 } : { y: position.y - context.getPageSize().height, x: 0 }
|
|
822
822
|
);
|
|
823
823
|
} else {
|
|
@@ -851,7 +851,7 @@ const getNavigationForLeftPage = ({
|
|
|
851
851
|
if (context.state.isUsingSpreadMode) {
|
|
852
852
|
if ((spineItem == null ? void 0 : spineItem.isUsingVerticalWriting()) && position.x !== navigation.x) {
|
|
853
853
|
return navigationResolver.getAdjustedPositionForSpread(
|
|
854
|
-
navigationResolver.
|
|
854
|
+
navigationResolver.getAdjustedPositionWithSafeEdge(
|
|
855
855
|
context.isRTL() ? { ...navigation, x: navigation.x + context.getPageSize().width } : {
|
|
856
856
|
...navigation,
|
|
857
857
|
x: navigation.x - context.getPageSize().width
|
|
@@ -1062,19 +1062,29 @@ class PanNavigator {
|
|
|
1062
1062
|
const observeState = (reader) => {
|
|
1063
1063
|
return reader.pagination.pagination$.pipe(
|
|
1064
1064
|
withLatestFrom(reader.context.manifest$, reader.settings.settings$),
|
|
1065
|
-
map$1(
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1065
|
+
map$1(
|
|
1066
|
+
([
|
|
1067
|
+
paginationInfo,
|
|
1068
|
+
{ spineItems, readingDirection },
|
|
1069
|
+
{ computedPageTurnDirection }
|
|
1070
|
+
]) => {
|
|
1071
|
+
const numberOfSpineItems = spineItems.length ?? 0;
|
|
1072
|
+
const isAtAbsoluteBeginning = paginationInfo.beginSpineItemIndex === 0;
|
|
1073
|
+
const isAtAbsoluteEnd = paginationInfo.endSpineItemIndex === Math.max(numberOfSpineItems - 1, 0);
|
|
1074
|
+
const isAtEndSpineItem = paginationInfo.endSpineItemIndex === Math.max(numberOfSpineItems - 1, 0);
|
|
1075
|
+
const isAtBeginSpineItem = paginationInfo.beginSpineItemIndex === 0;
|
|
1076
|
+
const isAtBeginFirstPage = paginationInfo.beginPageIndexInSpineItem === 0;
|
|
1077
|
+
const isAtEndLastPage = paginationInfo.endPageIndexInSpineItem === paginationInfo.endNumberOfPagesInSpineItem - 1;
|
|
1078
|
+
return {
|
|
1079
|
+
canTurnLeft: computedPageTurnDirection === "vertical" ? false : !isAtBeginFirstPage,
|
|
1080
|
+
canTurnRight: computedPageTurnDirection === "vertical" ? false : !isAtEndLastPage,
|
|
1081
|
+
canGoTopSpineItem: computedPageTurnDirection === "vertical" && !isAtAbsoluteBeginning,
|
|
1082
|
+
canGoBottomSpineItem: computedPageTurnDirection === "vertical" && !isAtAbsoluteEnd,
|
|
1083
|
+
canGoLeftSpineItem: computedPageTurnDirection !== "vertical" && (readingDirection === "ltr" && !isAtAbsoluteBeginning || readingDirection === "rtl" && !isAtEndSpineItem),
|
|
1084
|
+
canGoRightSpineItem: computedPageTurnDirection !== "vertical" && (readingDirection === "ltr" && !isAtAbsoluteEnd || readingDirection === "rtl" && !isAtBeginSpineItem)
|
|
1085
|
+
};
|
|
1086
|
+
}
|
|
1087
|
+
),
|
|
1078
1088
|
distinctUntilChanged$1(isShallowEqual)
|
|
1079
1089
|
);
|
|
1080
1090
|
};
|
|
@@ -2249,12 +2259,12 @@ const getAdjustedPositionForSpread = ({
|
|
|
2249
2259
|
const correctedX = isOffsetNotAtEdge ? x - pageSizeWidth : x;
|
|
2250
2260
|
return { x: correctedX, y };
|
|
2251
2261
|
};
|
|
2252
|
-
const
|
|
2262
|
+
const getAdjustedPositionWithSafeEdge = ({
|
|
2253
2263
|
position,
|
|
2254
2264
|
isRTL,
|
|
2255
|
-
pageSizeWidth,
|
|
2256
2265
|
pageSizeHeight,
|
|
2257
|
-
spineItemsManager
|
|
2266
|
+
spineItemsManager,
|
|
2267
|
+
visibleAreaRectWidth
|
|
2258
2268
|
}) => {
|
|
2259
2269
|
const lastSpineItem = spineItemsManager.get(spineItemsManager.getLength() - 1);
|
|
2260
2270
|
const distanceOfLastSpineItem = spineItemsManager.getAbsolutePositionOf(
|
|
@@ -2268,7 +2278,7 @@ const wrapPositionWithSafeEdge = ({
|
|
|
2268
2278
|
y
|
|
2269
2279
|
};
|
|
2270
2280
|
}
|
|
2271
|
-
const maximumXOffset = distanceOfLastSpineItem.right -
|
|
2281
|
+
const maximumXOffset = distanceOfLastSpineItem.right - visibleAreaRectWidth;
|
|
2272
2282
|
return {
|
|
2273
2283
|
x: Math.min(Math.max(0, position.x), maximumXOffset),
|
|
2274
2284
|
y
|
|
@@ -3399,14 +3409,14 @@ const createNavigationResolver = ({
|
|
|
3399
3409
|
const triggerPercentage = 0.5;
|
|
3400
3410
|
const triggerXPosition = pageTurnDirection === `horizontal` ? viewportPosition.x + context.state.visibleAreaRect.width * triggerPercentage : 0;
|
|
3401
3411
|
const triggerYPosition = pageTurnDirection === `horizontal` ? 0 : viewportPosition.y + context.state.visibleAreaRect.height * triggerPercentage;
|
|
3402
|
-
const midScreenPositionSafePosition =
|
|
3412
|
+
const midScreenPositionSafePosition = getAdjustedPositionWithSafeEdge({
|
|
3403
3413
|
position: {
|
|
3404
3414
|
x: triggerXPosition,
|
|
3405
3415
|
y: triggerYPosition
|
|
3406
3416
|
},
|
|
3407
3417
|
isRTL: context.isRTL(),
|
|
3408
3418
|
pageSizeHeight: context.getPageSize().height,
|
|
3409
|
-
|
|
3419
|
+
visibleAreaRectWidth: context.state.visibleAreaRect.width,
|
|
3410
3420
|
spineItemsManager
|
|
3411
3421
|
});
|
|
3412
3422
|
return getNavigationForPosition({
|
|
@@ -3455,11 +3465,11 @@ const createNavigationResolver = ({
|
|
|
3455
3465
|
spineLocator: locator
|
|
3456
3466
|
}),
|
|
3457
3467
|
getMostPredominantNavigationForPosition,
|
|
3458
|
-
|
|
3468
|
+
getAdjustedPositionWithSafeEdge: (position) => getAdjustedPositionWithSafeEdge({
|
|
3459
3469
|
position,
|
|
3460
3470
|
isRTL: context.isRTL(),
|
|
3461
3471
|
pageSizeHeight: context.getPageSize().height,
|
|
3462
|
-
|
|
3472
|
+
visibleAreaRectWidth: context.state.visibleAreaRect.width,
|
|
3463
3473
|
spineItemsManager
|
|
3464
3474
|
}),
|
|
3465
3475
|
isNavigationGoingForwardFrom,
|
|
@@ -4148,7 +4158,7 @@ const withFallbackPosition = ({
|
|
|
4148
4158
|
return {
|
|
4149
4159
|
navigation: {
|
|
4150
4160
|
...navigation,
|
|
4151
|
-
position: navigationResolver.
|
|
4161
|
+
position: navigationResolver.getAdjustedPositionWithSafeEdge(
|
|
4152
4162
|
navigation.position
|
|
4153
4163
|
)
|
|
4154
4164
|
},
|
|
@@ -4438,7 +4448,7 @@ class InternalNavigator extends DestroyableClass {
|
|
|
4438
4448
|
map$1(
|
|
4439
4449
|
() => ({
|
|
4440
4450
|
...navigation,
|
|
4441
|
-
animation: "
|
|
4451
|
+
animation: "snap"
|
|
4442
4452
|
})
|
|
4443
4453
|
),
|
|
4444
4454
|
finalize(() => {
|
|
@@ -4805,7 +4815,7 @@ class ReaderSettingsManager extends SettingsManager3 {
|
|
|
4805
4815
|
pageTurnMode: `controlled`,
|
|
4806
4816
|
snapAnimationDuration: 300,
|
|
4807
4817
|
navigationSnapThreshold: 0.3,
|
|
4808
|
-
numberOfAdjacentSpineItemToPreLoad:
|
|
4818
|
+
numberOfAdjacentSpineItemToPreLoad: 2
|
|
4809
4819
|
};
|
|
4810
4820
|
}
|
|
4811
4821
|
}
|
|
@@ -6914,7 +6924,18 @@ class SpineItemsLoader extends DestroyableClass {
|
|
|
6914
6924
|
const layoutHasChanged$ = spineItemsManager.layout$.pipe(
|
|
6915
6925
|
filter$1((hasChanged) => hasChanged)
|
|
6916
6926
|
);
|
|
6917
|
-
const
|
|
6927
|
+
const numberOfAdjacentSpineItemToPreLoad$ = settings.settings$.pipe(
|
|
6928
|
+
map$1(
|
|
6929
|
+
({ numberOfAdjacentSpineItemToPreLoad }) => numberOfAdjacentSpineItemToPreLoad
|
|
6930
|
+
),
|
|
6931
|
+
skip$1(1),
|
|
6932
|
+
distinctUntilChanged$1()
|
|
6933
|
+
);
|
|
6934
|
+
const loadSpineItems$ = merge(
|
|
6935
|
+
navigationUpdate$,
|
|
6936
|
+
layoutHasChanged$,
|
|
6937
|
+
numberOfAdjacentSpineItemToPreLoad$
|
|
6938
|
+
).pipe(
|
|
6918
6939
|
// this can be changed by whatever we want and SHOULD not break navigation.
|
|
6919
6940
|
// Ideally loading faster is better but loading too close to user navigating can
|
|
6920
6941
|
// be dangerous.
|