@prose-reader/core 1.68.0 → 1.70.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/index.js +78 -62
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +77 -61
- 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/dist/spineItem/frame/FrameItem.d.ts +1 -1
- package/dist/spineItem/frame/loader/loader.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
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { takeUntil, Subject, combineLatest, map as map$1, switchMap, merge, EMPTY, fromEvent, withLatestFrom, NEVER, Observable, of, scheduled, animationFrameScheduler, distinctUntilChanged as distinctUntilChanged$1, startWith as startWith$1, debounceTime as debounceTime$1, BehaviorSubject, combineLatestWith, tap as tap$1, shareReplay as shareReplay$1, ReplaySubject, filter as filter$1, share, mergeMap, delay, identity, timer, skip as skip$1, exhaustMap, take as take$1, finalize, first as first$1, from, catchError, forkJoin } from "rxjs";
|
|
2
|
-
import { startWith, map, shareReplay, tap, pairwise, switchMap as switchMap$1, take, distinctUntilChanged, takeUntil as takeUntil$1, first, filter, debounceTime, skip, withLatestFrom as withLatestFrom$1, exhaustMap as exhaustMap$1, share as share$1, mergeMap as mergeMap$1, catchError as catchError$1 } from "rxjs/operators";
|
|
2
|
+
import { startWith, map, shareReplay, tap, pairwise, switchMap as switchMap$1, take, distinctUntilChanged, takeUntil as takeUntil$1, first, filter, debounceTime, skip, withLatestFrom as withLatestFrom$1, exhaustMap as exhaustMap$1, ignoreElements, endWith, defaultIfEmpty, share as share$1, mergeMap as mergeMap$1, catchError as catchError$1 } from "rxjs/operators";
|
|
3
3
|
import { parseContentType, detectMimeTypeFromName } from "@prose-reader/shared";
|
|
4
4
|
const chromeEnhancer = (next) => (options) => {
|
|
5
5
|
const reader = next(options);
|
|
@@ -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
|
|
@@ -2249,12 +2249,12 @@ const getAdjustedPositionForSpread = ({
|
|
|
2249
2249
|
const correctedX = isOffsetNotAtEdge ? x - pageSizeWidth : x;
|
|
2250
2250
|
return { x: correctedX, y };
|
|
2251
2251
|
};
|
|
2252
|
-
const
|
|
2252
|
+
const getAdjustedPositionWithSafeEdge = ({
|
|
2253
2253
|
position,
|
|
2254
2254
|
isRTL,
|
|
2255
|
-
pageSizeWidth,
|
|
2256
2255
|
pageSizeHeight,
|
|
2257
|
-
spineItemsManager
|
|
2256
|
+
spineItemsManager,
|
|
2257
|
+
visibleAreaRectWidth
|
|
2258
2258
|
}) => {
|
|
2259
2259
|
const lastSpineItem = spineItemsManager.get(spineItemsManager.getLength() - 1);
|
|
2260
2260
|
const distanceOfLastSpineItem = spineItemsManager.getAbsolutePositionOf(
|
|
@@ -2268,7 +2268,7 @@ const wrapPositionWithSafeEdge = ({
|
|
|
2268
2268
|
y
|
|
2269
2269
|
};
|
|
2270
2270
|
}
|
|
2271
|
-
const maximumXOffset = distanceOfLastSpineItem.right -
|
|
2271
|
+
const maximumXOffset = distanceOfLastSpineItem.right - visibleAreaRectWidth;
|
|
2272
2272
|
return {
|
|
2273
2273
|
x: Math.min(Math.max(0, position.x), maximumXOffset),
|
|
2274
2274
|
y
|
|
@@ -3399,14 +3399,14 @@ const createNavigationResolver = ({
|
|
|
3399
3399
|
const triggerPercentage = 0.5;
|
|
3400
3400
|
const triggerXPosition = pageTurnDirection === `horizontal` ? viewportPosition.x + context.state.visibleAreaRect.width * triggerPercentage : 0;
|
|
3401
3401
|
const triggerYPosition = pageTurnDirection === `horizontal` ? 0 : viewportPosition.y + context.state.visibleAreaRect.height * triggerPercentage;
|
|
3402
|
-
const midScreenPositionSafePosition =
|
|
3402
|
+
const midScreenPositionSafePosition = getAdjustedPositionWithSafeEdge({
|
|
3403
3403
|
position: {
|
|
3404
3404
|
x: triggerXPosition,
|
|
3405
3405
|
y: triggerYPosition
|
|
3406
3406
|
},
|
|
3407
3407
|
isRTL: context.isRTL(),
|
|
3408
3408
|
pageSizeHeight: context.getPageSize().height,
|
|
3409
|
-
|
|
3409
|
+
visibleAreaRectWidth: context.state.visibleAreaRect.width,
|
|
3410
3410
|
spineItemsManager
|
|
3411
3411
|
});
|
|
3412
3412
|
return getNavigationForPosition({
|
|
@@ -3455,11 +3455,11 @@ const createNavigationResolver = ({
|
|
|
3455
3455
|
spineLocator: locator
|
|
3456
3456
|
}),
|
|
3457
3457
|
getMostPredominantNavigationForPosition,
|
|
3458
|
-
|
|
3458
|
+
getAdjustedPositionWithSafeEdge: (position) => getAdjustedPositionWithSafeEdge({
|
|
3459
3459
|
position,
|
|
3460
3460
|
isRTL: context.isRTL(),
|
|
3461
3461
|
pageSizeHeight: context.getPageSize().height,
|
|
3462
|
-
|
|
3462
|
+
visibleAreaRectWidth: context.state.visibleAreaRect.width,
|
|
3463
3463
|
spineItemsManager
|
|
3464
3464
|
}),
|
|
3465
3465
|
isNavigationGoingForwardFrom,
|
|
@@ -4148,7 +4148,7 @@ const withFallbackPosition = ({
|
|
|
4148
4148
|
return {
|
|
4149
4149
|
navigation: {
|
|
4150
4150
|
...navigation,
|
|
4151
|
-
position: navigationResolver.
|
|
4151
|
+
position: navigationResolver.getAdjustedPositionWithSafeEdge(
|
|
4152
4152
|
navigation.position
|
|
4153
4153
|
)
|
|
4154
4154
|
},
|
|
@@ -5536,73 +5536,88 @@ const createLoader = ({
|
|
|
5536
5536
|
const loadSubject = new Subject();
|
|
5537
5537
|
const unloadSubject = new Subject();
|
|
5538
5538
|
const frameElementSubject = new BehaviorSubject(void 0);
|
|
5539
|
-
const
|
|
5540
|
-
const unload$ = unloadSubject.asObservable();
|
|
5541
|
-
const stateIdle$ = stateSubject.pipe(filter((state) => state === "idle"));
|
|
5542
|
-
const stateIsReady$ = stateSubject.pipe(
|
|
5543
|
-
map((state) => state === "ready"),
|
|
5544
|
-
distinctUntilChanged()
|
|
5545
|
-
);
|
|
5546
|
-
const unloaded$ = unload$.pipe(
|
|
5539
|
+
const unloadFrame$ = unloadSubject.pipe(
|
|
5547
5540
|
withLatestFrom$1(stateSubject),
|
|
5548
5541
|
filter(([, state]) => state !== "unloading" && state !== "idle"),
|
|
5549
|
-
exhaustMap$1(() => {
|
|
5550
|
-
stateSubject.next("unloading");
|
|
5551
|
-
return unloadFrame({
|
|
5552
|
-
hookManager,
|
|
5553
|
-
item,
|
|
5554
|
-
frameElement: frameElementSubject.getValue(),
|
|
5555
|
-
context
|
|
5556
|
-
}).pipe(
|
|
5557
|
-
tap(() => {
|
|
5558
|
-
frameElementSubject.next(void 0);
|
|
5559
|
-
stateSubject.next("idle");
|
|
5560
|
-
})
|
|
5561
|
-
);
|
|
5562
|
-
}),
|
|
5563
|
-
share$1()
|
|
5564
|
-
);
|
|
5565
|
-
const loaded$ = load$.pipe(
|
|
5566
5542
|
exhaustMap$1(
|
|
5567
|
-
() =>
|
|
5543
|
+
() => context.bridgeEvent.viewportFree$.pipe(
|
|
5568
5544
|
first(),
|
|
5569
|
-
tap(() => {
|
|
5570
|
-
stateSubject.next("loading");
|
|
5571
|
-
}),
|
|
5572
|
-
waitForSwitch(context.bridgeEvent.viewportFree$),
|
|
5573
5545
|
switchMap$1(
|
|
5574
|
-
() =>
|
|
5575
|
-
element: parent,
|
|
5546
|
+
() => unloadFrame({
|
|
5576
5547
|
hookManager,
|
|
5577
5548
|
item,
|
|
5578
|
-
|
|
5579
|
-
frameElementSubject.next(element);
|
|
5580
|
-
},
|
|
5581
|
-
settings,
|
|
5549
|
+
frameElement: frameElementSubject.getValue(),
|
|
5582
5550
|
context
|
|
5583
5551
|
})
|
|
5584
5552
|
),
|
|
5585
5553
|
tap(() => {
|
|
5586
|
-
|
|
5554
|
+
frameElementSubject.next(void 0);
|
|
5587
5555
|
}),
|
|
5588
|
-
|
|
5556
|
+
ignoreElements(),
|
|
5557
|
+
startWith("loading"),
|
|
5558
|
+
endWith("success"),
|
|
5559
|
+
defaultIfEmpty("idle")
|
|
5589
5560
|
)
|
|
5590
5561
|
),
|
|
5562
|
+
startWith("idle"),
|
|
5563
|
+
distinctUntilChanged(),
|
|
5564
|
+
share$1()
|
|
5565
|
+
);
|
|
5566
|
+
const unloaded$ = unloadFrame$.pipe(filter((state) => state === "success"));
|
|
5567
|
+
const unloading$ = unloadFrame$.pipe(filter((state) => state === "loading"));
|
|
5568
|
+
const loadFrame$ = loadSubject.pipe(
|
|
5569
|
+
exhaustMap$1(() => {
|
|
5570
|
+
const preventFurtherLoad$ = NEVER;
|
|
5571
|
+
return merge(
|
|
5572
|
+
preventFurtherLoad$,
|
|
5573
|
+
context.bridgeEvent.viewportFree$.pipe(
|
|
5574
|
+
first(),
|
|
5575
|
+
switchMap$1(
|
|
5576
|
+
() => loadFrame({
|
|
5577
|
+
element: parent,
|
|
5578
|
+
hookManager,
|
|
5579
|
+
item,
|
|
5580
|
+
onFrameElement: (element) => {
|
|
5581
|
+
frameElementSubject.next(element);
|
|
5582
|
+
},
|
|
5583
|
+
settings,
|
|
5584
|
+
context
|
|
5585
|
+
})
|
|
5586
|
+
),
|
|
5587
|
+
map((frame) => ({ state: "success", frame })),
|
|
5588
|
+
startWith({ state: "loading" }),
|
|
5589
|
+
defaultIfEmpty({ state: "idle" })
|
|
5590
|
+
)
|
|
5591
|
+
).pipe(takeUntil$1(unloaded$));
|
|
5592
|
+
}),
|
|
5593
|
+
startWith({ state: "idle" }),
|
|
5591
5594
|
share$1()
|
|
5592
5595
|
);
|
|
5593
|
-
const
|
|
5596
|
+
const loading$ = loadFrame$.pipe(filter(({ state }) => state === "loading"));
|
|
5597
|
+
const loaded$ = loadFrame$.pipe(
|
|
5598
|
+
filter((state) => state.state === "success"),
|
|
5599
|
+
map(({ frame }) => frame)
|
|
5600
|
+
);
|
|
5601
|
+
const frameIsReady$ = loaded$.pipe(
|
|
5594
5602
|
switchMap$1(
|
|
5595
|
-
(frame) => of(frame).pipe(
|
|
5596
|
-
waitForFrameReady,
|
|
5597
|
-
tap(() => {
|
|
5598
|
-
stateSubject.next("ready");
|
|
5599
|
-
}),
|
|
5600
|
-
takeUntil$1(unload$)
|
|
5601
|
-
)
|
|
5603
|
+
(frame) => of(frame).pipe(waitForFrameReady, takeUntil$1(unloadSubject))
|
|
5602
5604
|
),
|
|
5603
5605
|
share$1()
|
|
5604
5606
|
);
|
|
5605
|
-
|
|
5607
|
+
const ready$ = frameIsReady$;
|
|
5608
|
+
const state$ = merge(
|
|
5609
|
+
unloaded$.pipe(map(() => "idle")),
|
|
5610
|
+
unloading$.pipe(map(() => "unloading")),
|
|
5611
|
+
loaded$.pipe(map(() => "loaded")),
|
|
5612
|
+
loading$.pipe(map(() => "loading")),
|
|
5613
|
+
ready$.pipe(map(() => "ready"))
|
|
5614
|
+
).pipe(
|
|
5615
|
+
startWith("idle"),
|
|
5616
|
+
tap((state) => stateSubject.next(state)),
|
|
5617
|
+
shareReplay(1)
|
|
5618
|
+
);
|
|
5619
|
+
const isReady$ = state$.pipe(map((state) => state === "ready"));
|
|
5620
|
+
state$.pipe(takeUntil$1(destroySubject$)).subscribe();
|
|
5606
5621
|
return {
|
|
5607
5622
|
load: () => loadSubject.next(),
|
|
5608
5623
|
unload: () => unloadSubject.next(),
|
|
@@ -5613,6 +5628,7 @@ const createLoader = ({
|
|
|
5613
5628
|
frameElementSubject.complete();
|
|
5614
5629
|
destroySubject$.next();
|
|
5615
5630
|
destroySubject$.complete();
|
|
5631
|
+
stateSubject.complete();
|
|
5616
5632
|
},
|
|
5617
5633
|
get state() {
|
|
5618
5634
|
return stateSubject.getValue();
|
|
@@ -5620,7 +5636,7 @@ const createLoader = ({
|
|
|
5620
5636
|
get element() {
|
|
5621
5637
|
return frameElementSubject.getValue();
|
|
5622
5638
|
},
|
|
5623
|
-
isReady
|
|
5639
|
+
isReady$,
|
|
5624
5640
|
ready$,
|
|
5625
5641
|
loaded$,
|
|
5626
5642
|
unloaded$,
|