@prose-reader/core 1.201.0 → 1.203.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 +10 -10
- package/dist/enhancers/{layoutEnhancer → layout}/types.d.ts +1 -0
- package/dist/enhancers/layout/viewportMode.d.ts +3 -0
- package/dist/enhancers/navigation/navigators/manualNavigator.d.ts +1 -1
- package/dist/enhancers/pagination/enhancer.d.ts +1 -1
- package/dist/enhancers/pagination/pagination.d.ts +1 -1
- package/dist/enhancers/pagination/progression.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +169 -96
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +171 -97
- package/dist/index.umd.cjs.map +1 -1
- package/dist/navigation/InternalNavigator.d.ts +1 -1
- package/dist/navigation/Navigator.d.ts +4 -2
- package/dist/navigation/UserScrollNavigation.d.ts +18 -0
- package/dist/navigation/consolidation/mapUserNavigationToInternal.d.ts +1 -1
- package/dist/navigation/controllers/ScrollNavigationController.d.ts +1 -0
- package/dist/navigation/tests/utils.d.ts +0 -11
- package/dist/navigation/types.d.ts +11 -0
- package/dist/reader.d.ts +2 -2
- package/dist/settings/SettingsManagerOverload.d.ts +1 -0
- package/dist/spine/loader/SpineItemsLoader.d.ts +2 -1
- package/dist/spineItem/renderer/DocumentRenderer.d.ts +4 -1
- package/dist/utils/rxjs.d.ts +1 -0
- package/dist/viewport/Viewport.d.ts +5 -1
- package/package.json +3 -3
- package/dist/navigation/UserNavigator.d.ts +0 -29
- package/dist/enhancers/{layoutEnhancer → layout}/SettingsManager.d.ts +1 -1
- /package/dist/enhancers/{layoutEnhancer → layout}/createMovingSafePan$.d.ts +0 -0
- /package/dist/enhancers/{layoutEnhancer → layout}/fixReflowable.d.ts +0 -0
- /package/dist/enhancers/{layoutEnhancer → layout}/layoutEnhancer.d.ts +0 -0
- /package/dist/enhancers/{layoutEnhancer → layout}/layoutInfo.d.ts +0 -0
package/dist/index.umd.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function(global, factory) {
|
|
2
|
-
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("rxjs"), require("rxjs/operators"), require("@prose-reader/shared")
|
|
3
|
-
})(this, function(exports2, rxjs, operators, shared
|
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("rxjs"), require("rxjs/operators"), require("@prose-reader/shared")) : typeof define === "function" && define.amd ? define(["exports", "rxjs", "rxjs/operators", "@prose-reader/shared"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.prose = {}, global.rxjs, global.operators, global.shared));
|
|
3
|
+
})(this, function(exports2, rxjs, operators, shared) {
|
|
4
4
|
"use strict";
|
|
5
5
|
const getAttributeValueFromString = (string, key) => {
|
|
6
6
|
const regExp = new RegExp(`${key}\\s*=\\s*([0-9.]+)`, `i`);
|
|
@@ -677,6 +677,17 @@
|
|
|
677
677
|
return () => observer.disconnect();
|
|
678
678
|
});
|
|
679
679
|
};
|
|
680
|
+
function observeIntersection(element, options) {
|
|
681
|
+
return new rxjs.Observable((observer) => {
|
|
682
|
+
const intersectionObserver = new IntersectionObserver((entries) => {
|
|
683
|
+
observer.next(entries);
|
|
684
|
+
}, options);
|
|
685
|
+
intersectionObserver.observe(element);
|
|
686
|
+
return () => {
|
|
687
|
+
intersectionObserver.disconnect();
|
|
688
|
+
};
|
|
689
|
+
});
|
|
690
|
+
}
|
|
680
691
|
class SettingsManagerOverload {
|
|
681
692
|
constructor(initialSettings, settingsManager) {
|
|
682
693
|
this.settingsManager = settingsManager;
|
|
@@ -731,9 +742,12 @@
|
|
|
731
742
|
...this.outputSettings
|
|
732
743
|
};
|
|
733
744
|
}
|
|
734
|
-
watch(
|
|
745
|
+
watch(keyOrKeys) {
|
|
746
|
+
if (Array.isArray(keyOrKeys)) {
|
|
747
|
+
return this.values$.pipe(watchKeys(keyOrKeys));
|
|
748
|
+
}
|
|
735
749
|
return this.values$.pipe(
|
|
736
|
-
|
|
750
|
+
operators.map((result) => result[keyOrKeys]),
|
|
737
751
|
operators.distinctUntilChanged(shared.isShallowEqual)
|
|
738
752
|
);
|
|
739
753
|
}
|
|
@@ -931,7 +945,7 @@
|
|
|
931
945
|
this.destroySubject.complete();
|
|
932
946
|
}
|
|
933
947
|
}
|
|
934
|
-
class
|
|
948
|
+
const _DocumentRenderer = class _DocumentRenderer extends DestroyableClass {
|
|
935
949
|
constructor(params) {
|
|
936
950
|
super();
|
|
937
951
|
this.triggerSubject = new rxjs.Subject();
|
|
@@ -1021,6 +1035,12 @@
|
|
|
1021
1035
|
);
|
|
1022
1036
|
rxjs.merge(unload$).pipe(rxjs.takeUntil(this.destroy$)).subscribe();
|
|
1023
1037
|
}
|
|
1038
|
+
setDocumentContainer(element) {
|
|
1039
|
+
this._documentContainer = element;
|
|
1040
|
+
this._documentContainer.classList.add(
|
|
1041
|
+
_DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME
|
|
1042
|
+
);
|
|
1043
|
+
}
|
|
1024
1044
|
attach() {
|
|
1025
1045
|
if (this.documentContainer) {
|
|
1026
1046
|
this.containerElement.appendChild(this.documentContainer);
|
|
@@ -1028,8 +1048,8 @@
|
|
|
1028
1048
|
}
|
|
1029
1049
|
detach() {
|
|
1030
1050
|
var _a;
|
|
1031
|
-
(_a = this.
|
|
1032
|
-
this.
|
|
1051
|
+
(_a = this._documentContainer) == null ? void 0 : _a.remove();
|
|
1052
|
+
this._documentContainer = void 0;
|
|
1033
1053
|
}
|
|
1034
1054
|
get state$() {
|
|
1035
1055
|
return this.stateSubject;
|
|
@@ -1070,8 +1090,12 @@
|
|
|
1070
1090
|
return rxjs.defer(() => this.onLayout(params)).pipe();
|
|
1071
1091
|
}
|
|
1072
1092
|
destroy() {
|
|
1073
|
-
|
|
1093
|
+
this.unload();
|
|
1074
1094
|
this.stateSubject.complete();
|
|
1095
|
+
super.destroy();
|
|
1096
|
+
}
|
|
1097
|
+
get documentContainer() {
|
|
1098
|
+
return this._documentContainer;
|
|
1075
1099
|
}
|
|
1076
1100
|
get writingMode() {
|
|
1077
1101
|
return void 0;
|
|
@@ -1090,7 +1114,9 @@
|
|
|
1090
1114
|
}
|
|
1091
1115
|
return ((_a = this.context.manifest) == null ? void 0 : _a.renditionLayout) ?? "reflowable";
|
|
1092
1116
|
}
|
|
1093
|
-
}
|
|
1117
|
+
};
|
|
1118
|
+
_DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME = `prose-reader-document-container`;
|
|
1119
|
+
let DocumentRenderer = _DocumentRenderer;
|
|
1094
1120
|
const defaultGetResource = (item) => new URL(item.href);
|
|
1095
1121
|
class ResourceHandler {
|
|
1096
1122
|
constructor(item, settings) {
|
|
@@ -1883,7 +1909,7 @@
|
|
|
1883
1909
|
}
|
|
1884
1910
|
onCreateDocument() {
|
|
1885
1911
|
const frameElement = createFrameElement();
|
|
1886
|
-
this.
|
|
1912
|
+
this.setDocumentContainer(frameElement);
|
|
1887
1913
|
return rxjs.of(frameElement);
|
|
1888
1914
|
}
|
|
1889
1915
|
onLoadDocument() {
|
|
@@ -2053,6 +2079,7 @@
|
|
|
2053
2079
|
pageHorizontalMargin,
|
|
2054
2080
|
pageVerticalMargin,
|
|
2055
2081
|
layoutLayerTransition,
|
|
2082
|
+
viewportMode,
|
|
2056
2083
|
...rest
|
|
2057
2084
|
} = settings;
|
|
2058
2085
|
return rest;
|
|
@@ -2062,7 +2089,8 @@
|
|
|
2062
2089
|
layoutAutoResize: "container",
|
|
2063
2090
|
pageHorizontalMargin: 24,
|
|
2064
2091
|
pageVerticalMargin: 24,
|
|
2065
|
-
layoutLayerTransition: true
|
|
2092
|
+
layoutLayerTransition: true,
|
|
2093
|
+
viewportMode: "normal"
|
|
2066
2094
|
};
|
|
2067
2095
|
}
|
|
2068
2096
|
};
|
|
@@ -2240,6 +2268,24 @@
|
|
|
2240
2268
|
info$.pipe(rxjs.takeUntil(reader.$.destroy$)).subscribe();
|
|
2241
2269
|
return { layout$, info$ };
|
|
2242
2270
|
};
|
|
2271
|
+
const createViewportModeHandler = (reader, viewportMode$) => {
|
|
2272
|
+
return viewportMode$.pipe(
|
|
2273
|
+
rxjs.tap((viewportMode) => {
|
|
2274
|
+
reader.viewport.value.element.style.transition = `transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)`;
|
|
2275
|
+
if (reader.settings.values.computedPageTurnMode === "scrollable") {
|
|
2276
|
+
reader.viewport.value.element.style.transformOrigin = `top`;
|
|
2277
|
+
} else {
|
|
2278
|
+
reader.viewport.value.element.style.transformOrigin = `center`;
|
|
2279
|
+
}
|
|
2280
|
+
if (viewportMode === `thumbnails`) {
|
|
2281
|
+
reader.viewport.value.element.style.transform = `scale(0.5)`;
|
|
2282
|
+
} else {
|
|
2283
|
+
reader.viewport.value.element.style.transform = `scale(1)`;
|
|
2284
|
+
}
|
|
2285
|
+
reader.layout();
|
|
2286
|
+
})
|
|
2287
|
+
);
|
|
2288
|
+
};
|
|
2243
2289
|
const layoutEnhancer = (next) => (options) => {
|
|
2244
2290
|
const {
|
|
2245
2291
|
pageHorizontalMargin,
|
|
@@ -2375,11 +2421,16 @@
|
|
|
2375
2421
|
})
|
|
2376
2422
|
);
|
|
2377
2423
|
const { layout$, info$ } = createLayoutInfo(reader);
|
|
2424
|
+
const viewportModeHandler$ = createViewportModeHandler(
|
|
2425
|
+
reader,
|
|
2426
|
+
settingsManager.watch(`viewportMode`)
|
|
2427
|
+
);
|
|
2378
2428
|
rxjs.merge(
|
|
2379
2429
|
updateSpineItemClassName$,
|
|
2380
2430
|
revealItemOnReady$,
|
|
2381
2431
|
movingSafePan$,
|
|
2382
|
-
layoutOnContainerResize
|
|
2432
|
+
layoutOnContainerResize$,
|
|
2433
|
+
viewportModeHandler$
|
|
2383
2434
|
).pipe(operators.takeUntil(reader.$.destroy$)).subscribe();
|
|
2384
2435
|
return {
|
|
2385
2436
|
...reader,
|
|
@@ -2525,7 +2576,7 @@
|
|
|
2525
2576
|
const imgElement = this.containerElement.ownerDocument.createElement(`img`);
|
|
2526
2577
|
return rxjs.from(this.resourcesHandler.getResource()).pipe(
|
|
2527
2578
|
rxjs.switchMap((responseOrUrl) => {
|
|
2528
|
-
this.
|
|
2579
|
+
this.setDocumentContainer(imgElement);
|
|
2529
2580
|
imgElement.style.objectFit = `contain`;
|
|
2530
2581
|
imgElement.style.userSelect = `none`;
|
|
2531
2582
|
if (responseOrUrl instanceof URL) {
|
|
@@ -2698,7 +2749,7 @@
|
|
|
2698
2749
|
})
|
|
2699
2750
|
);
|
|
2700
2751
|
};
|
|
2701
|
-
const report$
|
|
2752
|
+
const report$3 = Report.namespace(`navigation`);
|
|
2702
2753
|
class SpineItemPosition {
|
|
2703
2754
|
constructor(position) {
|
|
2704
2755
|
this.__symbol = Symbol(`SpineItemPosition`);
|
|
@@ -3098,7 +3149,7 @@
|
|
|
3098
3149
|
pageIndex,
|
|
3099
3150
|
spineItemId
|
|
3100
3151
|
});
|
|
3101
|
-
report$
|
|
3152
|
+
report$3.debug(`.goToPageOfSpineItem()`, {
|
|
3102
3153
|
pageIndex,
|
|
3103
3154
|
spineItemId,
|
|
3104
3155
|
...rest,
|
|
@@ -3116,7 +3167,7 @@
|
|
|
3116
3167
|
const foundInfo = this.reader.spine.locator.getSpineInfoFromAbsolutePageIndex({
|
|
3117
3168
|
absolutePageIndex
|
|
3118
3169
|
});
|
|
3119
|
-
report$
|
|
3170
|
+
report$3.debug(`.goToAbsolutePageIndex()`, {
|
|
3120
3171
|
absolutePageIndex,
|
|
3121
3172
|
...rest,
|
|
3122
3173
|
foundInfo
|
|
@@ -3159,7 +3210,7 @@
|
|
|
3159
3210
|
}
|
|
3160
3211
|
let navigation = this.reader.navigation.getNavigation().position;
|
|
3161
3212
|
if (delta) {
|
|
3162
|
-
const viewportScale = this.reader.viewport.absoluteViewport.width / this.reader.viewport.
|
|
3213
|
+
const viewportScale = this.reader.viewport.absoluteViewport.width / this.reader.viewport.relativeViewport.width;
|
|
3163
3214
|
const correctedX = Math.floor(delta.x) - (((_b = this.lastDelta) == null ? void 0 : _b.x) || 0);
|
|
3164
3215
|
const correctedY = Math.floor(delta.y) - (((_c = this.lastDelta) == null ? void 0 : _c.y) || 0);
|
|
3165
3216
|
const x = Math.floor(
|
|
@@ -3285,7 +3336,7 @@
|
|
|
3285
3336
|
}
|
|
3286
3337
|
};
|
|
3287
3338
|
};
|
|
3288
|
-
const NAMESPACE$
|
|
3339
|
+
const NAMESPACE$4 = `paginationEnhancer`;
|
|
3289
3340
|
const consolidate = (item, reader) => {
|
|
3290
3341
|
var _a;
|
|
3291
3342
|
let itemPageIndex = (_a = item.meta) == null ? void 0 : _a.itemPageIndex;
|
|
@@ -3640,7 +3691,7 @@
|
|
|
3640
3691
|
);
|
|
3641
3692
|
return { paginationInfo$, getPaginationInfo: () => currentValue.value };
|
|
3642
3693
|
};
|
|
3643
|
-
Report.namespace(NAMESPACE$
|
|
3694
|
+
Report.namespace(NAMESPACE$4);
|
|
3644
3695
|
const paginationEnhancer = (next) => (options) => {
|
|
3645
3696
|
const reader = next(options);
|
|
3646
3697
|
const { paginationInfo$, getPaginationInfo } = trackPaginationInfo(reader);
|
|
@@ -6157,8 +6208,8 @@
|
|
|
6157
6208
|
);
|
|
6158
6209
|
})
|
|
6159
6210
|
);
|
|
6160
|
-
const NAMESPACE$
|
|
6161
|
-
const report$
|
|
6211
|
+
const NAMESPACE$3 = `navigation/InternalNavigator`;
|
|
6212
|
+
const report$2 = Report.namespace(NAMESPACE$3);
|
|
6162
6213
|
class InternalNavigator extends DestroyableClass {
|
|
6163
6214
|
constructor(settings, context, userNavigation$, viewportController, scrollNavigationController, navigationResolver, spine, isUserLocked$) {
|
|
6164
6215
|
super();
|
|
@@ -6360,7 +6411,7 @@
|
|
|
6360
6411
|
);
|
|
6361
6412
|
const notifyNavigationUpdate = (stream) => stream.pipe(
|
|
6362
6413
|
rxjs.tap(([currentNavigation, previousNavigation]) => {
|
|
6363
|
-
report$
|
|
6414
|
+
report$2.info(
|
|
6364
6415
|
`navigation updated from ${currentNavigation.meta.triggeredBy} of type ${currentNavigation.type}`,
|
|
6365
6416
|
{
|
|
6366
6417
|
previousNavigation,
|
|
@@ -6436,40 +6487,23 @@
|
|
|
6436
6487
|
return scaledDownPosition;
|
|
6437
6488
|
};
|
|
6438
6489
|
const SCROLL_FINISHED_DEBOUNCE_TIMEOUT = 500;
|
|
6439
|
-
|
|
6440
|
-
|
|
6441
|
-
class UserNavigator extends DestroyableClass {
|
|
6442
|
-
constructor(settings, scrollNavigatorElement$, context, scrollHappeningFromBrowser$, spine) {
|
|
6490
|
+
class UserScrollNavigation extends DestroyableClass {
|
|
6491
|
+
constructor(settings, context, spine, scrollNavigationController, locker) {
|
|
6443
6492
|
super();
|
|
6444
6493
|
this.settings = settings;
|
|
6445
|
-
this.scrollNavigatorElement$ = scrollNavigatorElement$;
|
|
6446
6494
|
this.context = context;
|
|
6447
|
-
this.scrollHappeningFromBrowser$ = scrollHappeningFromBrowser$;
|
|
6448
6495
|
this.spine = spine;
|
|
6496
|
+
this.scrollNavigationController = scrollNavigationController;
|
|
6497
|
+
this.locker = locker;
|
|
6449
6498
|
this.navigationSubject = new rxjs.Subject();
|
|
6450
|
-
this.locker = new Locker();
|
|
6451
6499
|
this.navigation$ = this.navigationSubject.asObservable();
|
|
6452
|
-
const
|
|
6453
|
-
rxjs.filter(reactjrx.isDefined),
|
|
6454
|
-
rxjs.switchMap(
|
|
6455
|
-
(element) => settings.watch(["computedPageTurnMode"]).pipe(
|
|
6456
|
-
rxjs.switchMap(
|
|
6457
|
-
({ computedPageTurnMode }) => computedPageTurnMode === "controlled" ? rxjs.NEVER : rxjs.fromEvent(element, `scroll`).pipe(
|
|
6458
|
-
rxjs.withLatestFrom(scrollHappeningFromBrowser$),
|
|
6459
|
-
rxjs.filter(
|
|
6460
|
-
([, shouldAvoidScrollEvent]) => !shouldAvoidScrollEvent
|
|
6461
|
-
),
|
|
6462
|
-
rxjs.map(([event]) => event)
|
|
6463
|
-
)
|
|
6464
|
-
)
|
|
6465
|
-
)
|
|
6466
|
-
),
|
|
6467
|
-
rxjs.share()
|
|
6468
|
-
);
|
|
6469
|
-
const navigateOnScroll$ = userScroll$.pipe(
|
|
6500
|
+
const navigateOnScroll$ = this.scrollNavigationController.userScroll$.pipe(
|
|
6470
6501
|
rxjs.exhaustMap((event) => {
|
|
6471
6502
|
const unlock = this.locker.lock();
|
|
6472
|
-
return rxjs.merge(
|
|
6503
|
+
return rxjs.merge(
|
|
6504
|
+
this.scrollNavigationController.userScroll$,
|
|
6505
|
+
rxjs.of(event)
|
|
6506
|
+
).pipe(
|
|
6473
6507
|
rxjs.debounceTime(
|
|
6474
6508
|
SCROLL_FINISHED_DEBOUNCE_TIMEOUT,
|
|
6475
6509
|
rxjs.animationFrameScheduler
|
|
@@ -6485,7 +6519,7 @@
|
|
|
6485
6519
|
}),
|
|
6486
6520
|
spineElement: this.spine.element
|
|
6487
6521
|
});
|
|
6488
|
-
this.
|
|
6522
|
+
this.navigationSubject.next({
|
|
6489
6523
|
animation: false,
|
|
6490
6524
|
type: "scroll",
|
|
6491
6525
|
position: scaledDownPosition
|
|
@@ -6499,15 +6533,6 @@
|
|
|
6499
6533
|
);
|
|
6500
6534
|
rxjs.merge(navigateOnScroll$).pipe(rxjs.takeUntil(this.destroy$)).subscribe();
|
|
6501
6535
|
}
|
|
6502
|
-
/**
|
|
6503
|
-
* Remember that this navigation is not trustable.
|
|
6504
|
-
*
|
|
6505
|
-
* It needs to be verified and adjusted if necessary before becoming internal.
|
|
6506
|
-
*/
|
|
6507
|
-
navigate(to) {
|
|
6508
|
-
report$2.info(`.navigate`, to);
|
|
6509
|
-
this.navigationSubject.next(to);
|
|
6510
|
-
}
|
|
6511
6536
|
}
|
|
6512
6537
|
const spinePositionToTranslation = (position) => {
|
|
6513
6538
|
return {
|
|
@@ -6772,6 +6797,46 @@
|
|
|
6772
6797
|
rxjs.switchMap(() => rxjs.merge(rxjs.of(true), rxjs.of(false))),
|
|
6773
6798
|
rxjs.shareReplay(1)
|
|
6774
6799
|
);
|
|
6800
|
+
const isSpineScrolling$ = rxjs.merge(
|
|
6801
|
+
spine.element$.pipe(rxjs.switchMap((element) => observeResize(element))),
|
|
6802
|
+
spine.element$.pipe(rxjs.switchMap((element) => rxjs.fromEvent(element, "scroll"))),
|
|
6803
|
+
spine.spineItemsObserver.itemResize$
|
|
6804
|
+
).pipe(
|
|
6805
|
+
rxjs.switchMap(
|
|
6806
|
+
() => rxjs.timer(10).pipe(
|
|
6807
|
+
rxjs.map(() => false),
|
|
6808
|
+
rxjs.startWith(true)
|
|
6809
|
+
)
|
|
6810
|
+
),
|
|
6811
|
+
rxjs.distinctUntilChanged(),
|
|
6812
|
+
rxjs.startWith(false)
|
|
6813
|
+
);
|
|
6814
|
+
const scrollHappeningFromBrowser$ = rxjs.combineLatest([
|
|
6815
|
+
isSpineScrolling$,
|
|
6816
|
+
this.isScrolling$
|
|
6817
|
+
]).pipe(
|
|
6818
|
+
rxjs.map(
|
|
6819
|
+
([spineScrolling, viewportScrolling]) => spineScrolling || viewportScrolling
|
|
6820
|
+
),
|
|
6821
|
+
rxjs.shareReplay(1)
|
|
6822
|
+
);
|
|
6823
|
+
this.userScroll$ = this.watch("element").pipe(
|
|
6824
|
+
rxjs.filter(isDefined),
|
|
6825
|
+
rxjs.switchMap(
|
|
6826
|
+
(element) => settings.watch(["computedPageTurnMode"]).pipe(
|
|
6827
|
+
rxjs.switchMap(
|
|
6828
|
+
({ computedPageTurnMode }) => computedPageTurnMode === "controlled" ? rxjs.NEVER : rxjs.fromEvent(element, `scroll`).pipe(
|
|
6829
|
+
rxjs.withLatestFrom(scrollHappeningFromBrowser$),
|
|
6830
|
+
rxjs.filter(
|
|
6831
|
+
([, shouldAvoidScrollEvent]) => !shouldAvoidScrollEvent
|
|
6832
|
+
),
|
|
6833
|
+
rxjs.map(([event]) => event)
|
|
6834
|
+
)
|
|
6835
|
+
)
|
|
6836
|
+
)
|
|
6837
|
+
),
|
|
6838
|
+
rxjs.share()
|
|
6839
|
+
);
|
|
6775
6840
|
rxjs.merge(elementCreation$, toggleElementDisplay$, navigate$).pipe(rxjs.takeUntil(this.destroy$)).subscribe();
|
|
6776
6841
|
}
|
|
6777
6842
|
navigate(navigation) {
|
|
@@ -7415,6 +7480,8 @@
|
|
|
7415
7480
|
settings,
|
|
7416
7481
|
viewport
|
|
7417
7482
|
}) => {
|
|
7483
|
+
const userExplicitNavigationSubject = new rxjs.Subject();
|
|
7484
|
+
const locker = new Locker();
|
|
7418
7485
|
const navigationResolver = createNavigationResolver({
|
|
7419
7486
|
context,
|
|
7420
7487
|
settings,
|
|
@@ -7436,58 +7503,42 @@
|
|
|
7436
7503
|
spine,
|
|
7437
7504
|
context
|
|
7438
7505
|
);
|
|
7439
|
-
const
|
|
7440
|
-
spine.element$.pipe(operators.switchMap((element) => observeResize(element))),
|
|
7441
|
-
spine.element$.pipe(operators.switchMap((element) => rxjs.fromEvent(element, "scroll"))),
|
|
7442
|
-
spine.spineItemsObserver.itemResize$
|
|
7443
|
-
).pipe(
|
|
7444
|
-
operators.switchMap(
|
|
7445
|
-
() => rxjs.timer(10).pipe(
|
|
7446
|
-
operators.map(() => false),
|
|
7447
|
-
operators.startWith(true)
|
|
7448
|
-
)
|
|
7449
|
-
),
|
|
7450
|
-
operators.distinctUntilChanged(),
|
|
7451
|
-
operators.startWith(false)
|
|
7452
|
-
);
|
|
7453
|
-
const scrollHappeningFromBrowser$ = rxjs.combineLatest([
|
|
7454
|
-
isSpineScrolling$,
|
|
7455
|
-
scrollNavigationController.isScrolling$
|
|
7456
|
-
]).pipe(
|
|
7457
|
-
operators.map(
|
|
7458
|
-
([spineScrolling, viewportScrolling]) => spineScrolling || viewportScrolling
|
|
7459
|
-
),
|
|
7460
|
-
operators.shareReplay(1)
|
|
7461
|
-
);
|
|
7462
|
-
const userNavigator = new UserNavigator(
|
|
7506
|
+
const userScrollNavigation = new UserScrollNavigation(
|
|
7463
7507
|
settings,
|
|
7464
|
-
scrollNavigationController.watch("element"),
|
|
7465
7508
|
context,
|
|
7466
|
-
|
|
7467
|
-
|
|
7509
|
+
spine,
|
|
7510
|
+
scrollNavigationController,
|
|
7511
|
+
locker
|
|
7512
|
+
);
|
|
7513
|
+
const userNavigation$ = rxjs.merge(
|
|
7514
|
+
userExplicitNavigationSubject,
|
|
7515
|
+
userScrollNavigation.navigation$
|
|
7468
7516
|
);
|
|
7469
7517
|
const internalNavigator = new InternalNavigator(
|
|
7470
7518
|
settings,
|
|
7471
7519
|
context,
|
|
7472
|
-
|
|
7520
|
+
userNavigation$,
|
|
7473
7521
|
controlledNavigationController,
|
|
7474
7522
|
scrollNavigationController,
|
|
7475
7523
|
navigationResolver,
|
|
7476
7524
|
spine,
|
|
7477
|
-
|
|
7525
|
+
locker.isLocked$
|
|
7478
7526
|
);
|
|
7479
7527
|
const viewportState$ = rxjs.combineLatest([
|
|
7480
7528
|
controlledNavigationController.isNavigating$,
|
|
7481
7529
|
scrollNavigationController.isNavigating$,
|
|
7482
|
-
|
|
7530
|
+
locker.isLocked$,
|
|
7483
7531
|
internalNavigator.locker.isLocked$
|
|
7484
7532
|
]).pipe(
|
|
7485
7533
|
operators.map((states) => states.some((isLocked) => isLocked) ? `busy` : `free`),
|
|
7486
7534
|
operators.distinctUntilChanged(),
|
|
7487
7535
|
operators.shareReplay(1)
|
|
7488
7536
|
);
|
|
7537
|
+
const navigate = (to) => {
|
|
7538
|
+
userExplicitNavigationSubject.next(to);
|
|
7539
|
+
};
|
|
7489
7540
|
const destroy = () => {
|
|
7490
|
-
|
|
7541
|
+
userScrollNavigation.destroy();
|
|
7491
7542
|
controlledNavigationController.destroy();
|
|
7492
7543
|
internalNavigator.destroy();
|
|
7493
7544
|
};
|
|
@@ -7497,11 +7548,11 @@
|
|
|
7497
7548
|
internalNavigator,
|
|
7498
7549
|
scrollNavigationController,
|
|
7499
7550
|
controlledNavigationController,
|
|
7500
|
-
|
|
7551
|
+
locker,
|
|
7501
7552
|
viewportState$,
|
|
7502
|
-
navigate
|
|
7553
|
+
navigate,
|
|
7503
7554
|
lock() {
|
|
7504
|
-
return
|
|
7555
|
+
return locker.lock();
|
|
7505
7556
|
},
|
|
7506
7557
|
navigationResolver,
|
|
7507
7558
|
navigation$: internalNavigator.navigation$
|
|
@@ -8368,11 +8419,16 @@
|
|
|
8368
8419
|
loadSpineItems$.pipe(rxjs.takeUntil(this.destroy$)).subscribe();
|
|
8369
8420
|
}
|
|
8370
8421
|
forceOpen(spineItems) {
|
|
8371
|
-
|
|
8422
|
+
const indexes = spineItems.map(
|
|
8423
|
+
(item) => typeof item === "number" ? item : item.index
|
|
8424
|
+
);
|
|
8425
|
+
this.forcedOpenSubject.next([...this.forcedOpenSubject.value, indexes]);
|
|
8372
8426
|
return () => {
|
|
8373
8427
|
if (this.isDestroyed) return;
|
|
8374
8428
|
this.forcedOpenSubject.next(
|
|
8375
|
-
this.forcedOpenSubject.value.filter(
|
|
8429
|
+
this.forcedOpenSubject.value.filter(
|
|
8430
|
+
(arrayOfIndexes) => arrayOfIndexes !== indexes
|
|
8431
|
+
)
|
|
8376
8432
|
);
|
|
8377
8433
|
};
|
|
8378
8434
|
}
|
|
@@ -8954,11 +9010,23 @@
|
|
|
8954
9010
|
`;
|
|
8955
9011
|
element.className = `${HTML_PREFIX$1}-viewport`;
|
|
8956
9012
|
super({
|
|
8957
|
-
element
|
|
9013
|
+
element,
|
|
9014
|
+
pageSize: {
|
|
9015
|
+
width: 1,
|
|
9016
|
+
height: 1
|
|
9017
|
+
}
|
|
8958
9018
|
});
|
|
8959
9019
|
this.context = context;
|
|
9020
|
+
const updatePageSize$ = this.context.watch("visibleAreaRect").pipe(
|
|
9021
|
+
rxjs.tap(() => {
|
|
9022
|
+
this.update({
|
|
9023
|
+
pageSize: this.calculatePageSize()
|
|
9024
|
+
});
|
|
9025
|
+
})
|
|
9026
|
+
);
|
|
9027
|
+
rxjs.merge(updatePageSize$).pipe(rxjs.takeUntil(this.destroy$)).subscribe();
|
|
8960
9028
|
}
|
|
8961
|
-
|
|
9029
|
+
calculatePageSize() {
|
|
8962
9030
|
const absoluteViewport = this.absoluteViewport;
|
|
8963
9031
|
const { isUsingSpreadMode: isUsingSpreadMode2 } = this.context.state;
|
|
8964
9032
|
return {
|
|
@@ -8977,6 +9045,9 @@
|
|
|
8977
9045
|
* @important
|
|
8978
9046
|
*
|
|
8979
9047
|
* Contains long floating values.
|
|
9048
|
+
*
|
|
9049
|
+
* @todo take position of translate into consideration in something
|
|
9050
|
+
* like relativeViewportPosition or even better a ViewportSlicePosition
|
|
8980
9051
|
*/
|
|
8981
9052
|
get relativeViewport() {
|
|
8982
9053
|
const absoluteViewport = this.absoluteViewport;
|
|
@@ -9037,7 +9108,9 @@
|
|
|
9037
9108
|
);
|
|
9038
9109
|
navigator2.viewportState$.subscribe(context.bridgeEvent.viewportStateSubject);
|
|
9039
9110
|
navigator2.navigation$.subscribe(context.bridgeEvent.navigationSubject);
|
|
9040
|
-
navigator2.isLocked$.subscribe(
|
|
9111
|
+
navigator2.locker.isLocked$.subscribe(
|
|
9112
|
+
context.bridgeEvent.navigationIsLockedSubject
|
|
9113
|
+
);
|
|
9041
9114
|
pagination.state$.subscribe(context.bridgeEvent.paginationSubject);
|
|
9042
9115
|
const layout = () => {
|
|
9043
9116
|
var _a;
|
|
@@ -9244,6 +9317,7 @@
|
|
|
9244
9317
|
exports2.isHtmlElement = isHtmlElement;
|
|
9245
9318
|
exports2.isHtmlTagElement = isHtmlTagElement;
|
|
9246
9319
|
exports2.mapKeysTo = mapKeysTo;
|
|
9320
|
+
exports2.observeIntersection = observeIntersection;
|
|
9247
9321
|
exports2.observeMutation = observeMutation;
|
|
9248
9322
|
exports2.observeResize = observeResize;
|
|
9249
9323
|
exports2.removeCSS = removeCSS;
|