@prose-reader/core 1.70.0 → 1.72.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.
@@ -90,8 +90,8 @@ export declare const createReaderWithEnhancers: (options: Partial<import('./sett
90
90
  load: (manifest: import('@prose-reader/shared').Manifest, loadOptions: import('./reader').LoadOptions) => void;
91
91
  destroy: () => void;
92
92
  pagination: {
93
- pagination: import('./pagination/Pagination').PaginationInfo;
94
- pagination$: import('rxjs').Observable<import('./pagination/Pagination').PaginationInfo>;
93
+ state: import('./pagination/Pagination').PaginationInfo;
94
+ state$: import('rxjs').Observable<import('./pagination/Pagination').PaginationInfo>;
95
95
  };
96
96
  settings: import('./settings/SettingsInterface').SettingsInterface<NonNullable<import('./settings/types').CoreInputSettings>, NonNullable<import('./settings/types').CoreOutputSettings | undefined>>;
97
97
  element$: import('rxjs').Observable<HTMLElement>;
@@ -122,11 +122,11 @@ export declare const createReaderWithEnhancers: (options: Partial<import('./sett
122
122
  };
123
123
  }, "pagination"> & {
124
124
  pagination: Omit<{
125
- pagination: import('./pagination/Pagination').PaginationInfo;
126
- pagination$: import('rxjs').Observable<import('./pagination/Pagination').PaginationInfo>;
127
- }, "pagination" | "pagination$"> & {
128
- pagination$: import('rxjs').Observable<import('./pagination/Pagination').PaginationInfo & import('./enhancers/pagination/types').ExtraPaginationInfo>;
129
- pagination: import('./pagination/Pagination').PaginationInfo & import('./enhancers/pagination/types').ExtraPaginationInfo;
125
+ state: import('./pagination/Pagination').PaginationInfo;
126
+ state$: import('rxjs').Observable<import('./pagination/Pagination').PaginationInfo>;
127
+ }, "state" | "state$"> & {
128
+ state$: import('rxjs').Observable<import('./pagination/Pagination').PaginationInfo & import('./enhancers/pagination/types').ExtraPaginationInfo>;
129
+ state: import('./pagination/Pagination').PaginationInfo & import('./enhancers/pagination/types').ExtraPaginationInfo;
130
130
  };
131
131
  } & {
132
132
  theme: {
@@ -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;
@@ -5,9 +5,9 @@ import { PaginationInfo } from '../../pagination/Pagination';
5
5
  import { ExtraPaginationInfo } from './types';
6
6
 
7
7
  type ProgressionEnhancer = typeof progressionEnhancer;
8
- export declare const paginationEnhancer: <InheritOptions, InheritOutput extends EnhancerOutput<ProgressionEnhancer>, PaginationOutput extends Omit<InheritOutput["pagination"], "pagination$" | "pagination"> & {
9
- pagination$: Observable<PaginationInfo & ExtraPaginationInfo>;
10
- pagination: PaginationInfo & ExtraPaginationInfo;
8
+ export declare const paginationEnhancer: <InheritOptions, InheritOutput extends EnhancerOutput<ProgressionEnhancer>, PaginationOutput extends Omit<InheritOutput["pagination"], "state$" | "state"> & {
9
+ state$: Observable<PaginationInfo & ExtraPaginationInfo>;
10
+ state: PaginationInfo & ExtraPaginationInfo;
11
11
  }>(next: (options: InheritOptions) => InheritOutput) => (options: InheritOptions) => Omit<InheritOutput, "pagination"> & {
12
12
  pagination: PaginationOutput;
13
13
  };
package/dist/index.js CHANGED
@@ -1060,21 +1060,31 @@ class PanNavigator {
1060
1060
  }
1061
1061
  }
1062
1062
  const observeState = (reader) => {
1063
- return reader.pagination.pagination$.pipe(
1063
+ return reader.pagination.state$.pipe(
1064
1064
  withLatestFrom(reader.context.manifest$, reader.settings.settings$),
1065
- map$1(([paginationInfo, manifest, { computedPageTurnDirection }]) => {
1066
- const numberOfSpineItems = (manifest == null ? void 0 : manifest.spineItems.length) ?? 0;
1067
- const isAtAbsoluteBeginning = paginationInfo.beginSpineItemIndex === 0;
1068
- const isAtAbsoluteEnd = paginationInfo.endSpineItemIndex === Math.max(numberOfSpineItems - 1, 0);
1069
- const isAtEndSpineItem = paginationInfo.endSpineItemIndex === Math.max(numberOfSpineItems - 1, 0);
1070
- const isAtBeginSpineItem = paginationInfo.beginSpineItemIndex === 0;
1071
- return {
1072
- canGoTopSpineItem: computedPageTurnDirection === "vertical" && !isAtAbsoluteBeginning,
1073
- canGoBottomSpineItem: computedPageTurnDirection === "vertical" && !isAtAbsoluteEnd,
1074
- canGoLeftSpineItem: computedPageTurnDirection !== "vertical" && ((manifest == null ? void 0 : manifest.readingDirection) === "ltr" && !isAtAbsoluteBeginning || (manifest == null ? void 0 : manifest.readingDirection) === "rtl" && !isAtEndSpineItem),
1075
- canGoRightSpineItem: computedPageTurnDirection !== "vertical" && ((manifest == null ? void 0 : manifest.readingDirection) === "ltr" && !isAtAbsoluteEnd || (manifest == null ? void 0 : manifest.readingDirection) === "rtl" && !isAtBeginSpineItem)
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
  };
@@ -1182,7 +1192,7 @@ const getNumberOfPagesForAllSpineItems = (reader) => reader.spineItemsManager.it
1182
1192
  const trackTotalPages = (reader) => {
1183
1193
  const totalPages$ = reader.spine.layout$.pipe(
1184
1194
  debounceTime$1(10, animationFrameScheduler),
1185
- withLatestFrom(reader.pagination.pagination$),
1195
+ withLatestFrom(reader.pagination.state$),
1186
1196
  map$1(() => {
1187
1197
  const numberOfPagesPerItems = getNumberOfPagesForAllSpineItems(reader);
1188
1198
  return {
@@ -1249,16 +1259,16 @@ const trackPaginationInfo = (reader) => {
1249
1259
  const chaptersInfo$ = trackChapterInfo(reader);
1250
1260
  const totalPages$ = trackTotalPages(reader);
1251
1261
  const currentValue = new BehaviorSubject({
1252
- ...reader.pagination.pagination,
1262
+ ...reader.pagination.state,
1253
1263
  ...mapPaginationInfoToExtendedInfo(reader)(
1254
- reader.pagination.pagination,
1264
+ reader.pagination.state,
1255
1265
  getChaptersInfo(reader)
1256
1266
  ),
1257
1267
  beginAbsolutePageIndex: 0,
1258
1268
  endAbsolutePageIndex: 0,
1259
1269
  numberOfTotalPages: 0
1260
1270
  });
1261
- const extandedBasePagination$ = reader.pagination.pagination$.pipe(
1271
+ const extandedBasePagination$ = reader.pagination.state$.pipe(
1262
1272
  combineLatestWith(chaptersInfo$),
1263
1273
  map$1(([info, chaptersInfo]) => ({
1264
1274
  ...info,
@@ -1299,10 +1309,10 @@ const paginationEnhancer = (next) => (options) => {
1299
1309
  ...reader,
1300
1310
  pagination: {
1301
1311
  ...reader.pagination,
1302
- get pagination() {
1312
+ get state() {
1303
1313
  return getPaginationInfo();
1304
1314
  },
1305
- pagination$: paginationInfo$
1315
+ state$: paginationInfo$
1306
1316
  }
1307
1317
  };
1308
1318
  };
@@ -1821,7 +1831,7 @@ class Pagination extends DestroyableClass {
1821
1831
  endSpineItemIndex: void 0,
1822
1832
  navigationId: void 0
1823
1833
  });
1824
- this.pagination$ = this.paginationSubject.pipe(
1834
+ this.state$ = this.paginationSubject.pipe(
1825
1835
  distinctUntilChanged$1(isShallowEqual),
1826
1836
  tap$1((value) => {
1827
1837
  report$3.info(`update`, value);
@@ -1835,7 +1845,7 @@ class Pagination extends DestroyableClass {
1835
1845
  ...pagination
1836
1846
  });
1837
1847
  }
1838
- get pagination() {
1848
+ get state() {
1839
1849
  return this.paginationSubject.value;
1840
1850
  }
1841
1851
  destroy() {
@@ -4438,7 +4448,7 @@ class InternalNavigator extends DestroyableClass {
4438
4448
  map$1(
4439
4449
  () => ({
4440
4450
  ...navigation,
4441
- animation: "turn"
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: 0
4818
+ numberOfAdjacentSpineItemToPreLoad: 2
4809
4819
  };
4810
4820
  }
4811
4821
  }
@@ -4942,7 +4952,7 @@ class PaginationController extends DestroyableClass {
4942
4952
  withLatestFrom(this.context.bridgeEvent.navigation$),
4943
4953
  tap$1(([, navigation]) => {
4944
4954
  const { position } = navigation;
4945
- const previousPagination = this.pagination.pagination;
4955
+ const previousPagination = this.pagination.state;
4946
4956
  const {
4947
4957
  beginIndex: beginSpineItemIndex,
4948
4958
  endIndex: endSpineItemIndex
@@ -5004,7 +5014,7 @@ class PaginationController extends DestroyableClass {
5004
5014
  endSpineItemIndex,
5005
5015
  beginPageIndexInSpineItem,
5006
5016
  endPageIndexInSpineItem
5007
- } = this.pagination.pagination;
5017
+ } = this.pagination.state;
5008
5018
  if (beginPageIndexInSpineItem === void 0 || endPageIndexInSpineItem === void 0 || beginSpineItemIndex === void 0 || endSpineItemIndex === void 0)
5009
5019
  return;
5010
5020
  const beginSpineItem = this.spineItemsManager.get(beginSpineItemIndex);
@@ -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 loadSpineItems$ = merge(navigationUpdate$, layoutHasChanged$).pipe(
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.
@@ -7060,7 +7081,7 @@ const createReader = (inputSettings) => {
7060
7081
  navigator2.viewportState$.subscribe(context.bridgeEvent.viewportStateSubject);
7061
7082
  navigator2.navigation$.subscribe(context.bridgeEvent.navigationSubject);
7062
7083
  navigator2.isLocked$.subscribe(context.bridgeEvent.navigationIsLockedSubject);
7063
- pagination.pagination$.subscribe(context.bridgeEvent.paginationSubject);
7084
+ pagination.state$.subscribe(context.bridgeEvent.paginationSubject);
7064
7085
  const layout = () => {
7065
7086
  var _a;
7066
7087
  const containerElement = (_a = elementSubject$.getValue()) == null ? void 0 : _a.parentElement;
@@ -7180,8 +7201,8 @@ const createReader = (inputSettings) => {
7180
7201
  load,
7181
7202
  destroy,
7182
7203
  pagination: {
7183
- pagination: pagination.pagination,
7184
- pagination$: pagination.pagination$
7204
+ state: pagination.state,
7205
+ state$: pagination.state$
7185
7206
  },
7186
7207
  settings: settingsManager,
7187
7208
  element$,