@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.
@@ -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
- wrapPositionWithSafeEdge: (position: import('./navigation/viewport/ViewportNavigator').ViewportPosition) => {
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.wrapPositionWithSafeEdge(
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.wrapPositionWithSafeEdge(
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.wrapPositionWithSafeEdge(
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.wrapPositionWithSafeEdge(
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 wrapPositionWithSafeEdge = ({
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 - pageSizeWidth;
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 = wrapPositionWithSafeEdge({
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
- pageSizeWidth: context.getPageSize().width,
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
- wrapPositionWithSafeEdge: (position) => wrapPositionWithSafeEdge({
3458
+ getAdjustedPositionWithSafeEdge: (position) => getAdjustedPositionWithSafeEdge({
3459
3459
  position,
3460
3460
  isRTL: context.isRTL(),
3461
3461
  pageSizeHeight: context.getPageSize().height,
3462
- pageSizeWidth: context.getPageSize().width,
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.wrapPositionWithSafeEdge(
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 load$ = loadSubject.asObservable();
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
- () => stateIdle$.pipe(
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
- () => loadFrame({
5575
- element: parent,
5546
+ () => unloadFrame({
5576
5547
  hookManager,
5577
5548
  item,
5578
- onFrameElement: (element) => {
5579
- frameElementSubject.next(element);
5580
- },
5581
- settings,
5549
+ frameElement: frameElementSubject.getValue(),
5582
5550
  context
5583
5551
  })
5584
5552
  ),
5585
5553
  tap(() => {
5586
- stateSubject.next("loaded");
5554
+ frameElementSubject.next(void 0);
5587
5555
  }),
5588
- takeUntil$1(unload$)
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 ready$ = loaded$.pipe(
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
- merge(unloaded$, loaded$, ready$).pipe(takeUntil$1(destroySubject$)).subscribe();
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$: stateIsReady$,
5639
+ isReady$,
5624
5640
  ready$,
5625
5641
  loaded$,
5626
5642
  unloaded$,