@nypl/web-reader 4.2.0 → 4.3.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/README.md +178 -188
- package/dist/cjs/index.js +16 -16
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/index.js +277 -194
- package/dist/esm/index.js.map +3 -3
- package/dist/types/HtmlReader/index.d.ts +0 -12
- package/dist/types/HtmlReader/lib.d.ts +0 -5
- package/dist/types/HtmlReader/useUpdateCSS.d.ts +1 -2
- package/dist/types/PdfReader/addTocToManifest.d.ts +10 -0
- package/dist/types/PdfReader/index.d.ts +0 -1
- package/dist/types/PdfReader/lib.d.ts +26 -0
- package/dist/types/PdfReader/reducer.d.ts +3 -0
- package/dist/types/PdfReader/types.d.ts +61 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/utils/localstorage.d.ts +5 -9
- package/package.json +2 -13
- package/dist/types/utils/decryptAxisNow.d.ts +0 -0
package/dist/esm/index.js
CHANGED
|
@@ -35625,7 +35625,23 @@ function getTheme3(colorMode = "day") {
|
|
|
35625
35625
|
|
|
35626
35626
|
// src/ui/ToggleButton.tsx
|
|
35627
35627
|
function ToggleButton(props) {
|
|
35628
|
-
const _a = props, {
|
|
35628
|
+
const _a = props, {
|
|
35629
|
+
children,
|
|
35630
|
+
colorMode,
|
|
35631
|
+
icon,
|
|
35632
|
+
iconFill,
|
|
35633
|
+
label,
|
|
35634
|
+
value,
|
|
35635
|
+
isChecked
|
|
35636
|
+
} = _a, rest = __objRest(_a, [
|
|
35637
|
+
"children",
|
|
35638
|
+
"colorMode",
|
|
35639
|
+
"icon",
|
|
35640
|
+
"iconFill",
|
|
35641
|
+
"label",
|
|
35642
|
+
"value",
|
|
35643
|
+
"isChecked"
|
|
35644
|
+
]);
|
|
35629
35645
|
const { getInputProps, getCheckboxProps } = useRadio(props);
|
|
35630
35646
|
const input = getInputProps();
|
|
35631
35647
|
const checkbox = getCheckboxProps();
|
|
@@ -40480,81 +40496,10 @@ function LoadingSkeleton({
|
|
|
40480
40496
|
}));
|
|
40481
40497
|
}
|
|
40482
40498
|
|
|
40483
|
-
// src/PdfReader/
|
|
40499
|
+
// src/PdfReader/lib.ts
|
|
40484
40500
|
var IFRAME_WRAPPER_ID = "iframe-wrapper";
|
|
40485
40501
|
var SCALE_STEP = 0.1;
|
|
40486
40502
|
var START_QUERY = "start";
|
|
40487
|
-
function pdfReducer(state2, action) {
|
|
40488
|
-
switch (action.type) {
|
|
40489
|
-
case "ARGS_CHANGED": {
|
|
40490
|
-
return {
|
|
40491
|
-
state: "ACTIVE",
|
|
40492
|
-
settings: DEFAULT_SETTINGS,
|
|
40493
|
-
resourceIndex: 0,
|
|
40494
|
-
resource: null,
|
|
40495
|
-
pageNumber: 1,
|
|
40496
|
-
numPages: null,
|
|
40497
|
-
scale: 1,
|
|
40498
|
-
pdfWidth: 0,
|
|
40499
|
-
pdfHeight: 0,
|
|
40500
|
-
pageHeight: void 0,
|
|
40501
|
-
pageWidth: void 0,
|
|
40502
|
-
atStart: true,
|
|
40503
|
-
atEnd: false
|
|
40504
|
-
};
|
|
40505
|
-
}
|
|
40506
|
-
case "SET_CURRENT_RESOURCE":
|
|
40507
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40508
|
-
resource: null,
|
|
40509
|
-
resourceIndex: action.index,
|
|
40510
|
-
pageNumber: action.shouldNavigateToEnd ? -1 : 1,
|
|
40511
|
-
numPages: null
|
|
40512
|
-
});
|
|
40513
|
-
case "RESOURCE_FETCH_SUCCESS":
|
|
40514
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40515
|
-
resource: action.resource
|
|
40516
|
-
});
|
|
40517
|
-
case "PDF_PARSED":
|
|
40518
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40519
|
-
numPages: action.numPages,
|
|
40520
|
-
pageNumber: state2.pageNumber === -1 ? action.numPages : state2.pageNumber
|
|
40521
|
-
});
|
|
40522
|
-
case "NAVIGATE_PAGE":
|
|
40523
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40524
|
-
pageNumber: action.pageNum
|
|
40525
|
-
});
|
|
40526
|
-
case "SET_SCROLL":
|
|
40527
|
-
if (state2.state !== "ACTIVE") {
|
|
40528
|
-
return handleInvalidTransition(state2, action);
|
|
40529
|
-
}
|
|
40530
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40531
|
-
settings: __spreadProps(__spreadValues({}, state2.settings), {
|
|
40532
|
-
isScrolling: action.isScrolling
|
|
40533
|
-
})
|
|
40534
|
-
});
|
|
40535
|
-
case "SET_SCALE":
|
|
40536
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40537
|
-
scale: action.scale
|
|
40538
|
-
});
|
|
40539
|
-
case "PAGE_LOAD_SUCCESS":
|
|
40540
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40541
|
-
pdfWidth: action.width,
|
|
40542
|
-
pdfHeight: action.height,
|
|
40543
|
-
pageWidth: action.width,
|
|
40544
|
-
pageHeight: action.height
|
|
40545
|
-
});
|
|
40546
|
-
case "RESIZE_PAGE":
|
|
40547
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40548
|
-
pageWidth: action.width,
|
|
40549
|
-
pageHeight: action.height
|
|
40550
|
-
});
|
|
40551
|
-
case "BOOK_BOUNDARY_CHANGED":
|
|
40552
|
-
return __spreadProps(__spreadValues({}, state2), {
|
|
40553
|
-
atStart: action.atStart,
|
|
40554
|
-
atEnd: action.atEnd
|
|
40555
|
-
});
|
|
40556
|
-
}
|
|
40557
|
-
}
|
|
40558
40503
|
var getResourceUrl = (index, readingOrder) => {
|
|
40559
40504
|
if (!readingOrder || !readingOrder.length) {
|
|
40560
40505
|
throw new Error("A manifest has been returned, but has no reading order");
|
|
@@ -40565,19 +40510,197 @@ var loadResource = (resourceUrl, proxyUrl) => __async(void 0, null, function* ()
|
|
|
40565
40510
|
const url = proxyUrl ? `${proxyUrl}${encodeURIComponent(resourceUrl)}` : resourceUrl;
|
|
40566
40511
|
const response = yield fetch(url, { mode: "cors" });
|
|
40567
40512
|
const array = new Uint8Array(yield response.arrayBuffer());
|
|
40568
|
-
console.log("proxied", url, response);
|
|
40569
40513
|
if (!response.ok) {
|
|
40570
40514
|
throw new Error("Response not Ok for URL: " + url);
|
|
40571
40515
|
}
|
|
40572
40516
|
return array;
|
|
40573
40517
|
});
|
|
40574
|
-
|
|
40575
|
-
|
|
40518
|
+
function getIndexFromHref(href, manifest) {
|
|
40519
|
+
var _a;
|
|
40520
|
+
const input = new URL(href);
|
|
40521
|
+
const index = (_a = manifest == null ? void 0 : manifest.readingOrder) == null ? void 0 : _a.findIndex((link2) => {
|
|
40522
|
+
return doHrefsMatch(link2.href, input);
|
|
40523
|
+
});
|
|
40524
|
+
if (index < 0) {
|
|
40525
|
+
throw new Error(`Cannot find resource in readingOrder: ${href}`);
|
|
40526
|
+
}
|
|
40527
|
+
return index;
|
|
40528
|
+
}
|
|
40529
|
+
function doHrefsMatch(href1, href2) {
|
|
40530
|
+
const input1 = new URL(href1);
|
|
40531
|
+
const input2 = new URL(href2);
|
|
40532
|
+
return input1.pathname === input2.pathname && input1.hostname === input2.hostname && input1.protocol === input2.protocol;
|
|
40533
|
+
}
|
|
40534
|
+
var getStartPageFromHref = (href) => {
|
|
40535
|
+
const params = new URL(href).searchParams;
|
|
40576
40536
|
const startPage = params.get(START_QUERY);
|
|
40577
|
-
return startPage ? parseInt(startPage) :
|
|
40537
|
+
return startPage ? parseInt(startPage) : void 0;
|
|
40578
40538
|
};
|
|
40539
|
+
var getPageNumberFromHref = (href) => {
|
|
40540
|
+
const hash4 = new URL(href).hash;
|
|
40541
|
+
try {
|
|
40542
|
+
const strPageNumber = hash4.replace("#page=", "");
|
|
40543
|
+
if (!strPageNumber || strPageNumber === "NaN")
|
|
40544
|
+
return void 0;
|
|
40545
|
+
const pageNumber = parseInt(strPageNumber);
|
|
40546
|
+
return pageNumber;
|
|
40547
|
+
} catch (e) {
|
|
40548
|
+
console.warn(`Failed to parse page number from hash ${hash4}`);
|
|
40549
|
+
return void 0;
|
|
40550
|
+
}
|
|
40551
|
+
};
|
|
40552
|
+
|
|
40553
|
+
// src/PdfReader/reducer.ts
|
|
40554
|
+
function makePdfReducer(args) {
|
|
40555
|
+
if (!args)
|
|
40556
|
+
return (state2, _action) => state2;
|
|
40557
|
+
const { manifest } = args;
|
|
40558
|
+
return function reducer(state2, action) {
|
|
40559
|
+
var _a, _b, _c;
|
|
40560
|
+
if (state2.state !== "ACTIVE" && action.type !== "ARGS_CHANGED") {
|
|
40561
|
+
return handleInvalidTransition(state2, action);
|
|
40562
|
+
}
|
|
40563
|
+
function goToLocation(index, page = 1) {
|
|
40564
|
+
const shouldResetResource = state2.resourceIndex !== index;
|
|
40565
|
+
const href = manifest.readingOrder[index].href;
|
|
40566
|
+
const startPage = getStartPageFromHref(href);
|
|
40567
|
+
const isNavigatingToEnd = page === -1;
|
|
40568
|
+
const requestedPageIsBeforeStartPage = startPage && page < startPage;
|
|
40569
|
+
const pageNumberToNavigateTo = !isNavigatingToEnd && requestedPageIsBeforeStartPage ? startPage : page;
|
|
40570
|
+
const newState = __spreadProps(__spreadValues({}, state2), {
|
|
40571
|
+
resourceIndex: index,
|
|
40572
|
+
pageNumber: pageNumberToNavigateTo
|
|
40573
|
+
});
|
|
40574
|
+
if (shouldResetResource) {
|
|
40575
|
+
return __spreadProps(__spreadValues({}, newState), {
|
|
40576
|
+
resource: null,
|
|
40577
|
+
numPages: null,
|
|
40578
|
+
rendered: false,
|
|
40579
|
+
pageHeight: void 0,
|
|
40580
|
+
pageWidth: void 0,
|
|
40581
|
+
pdfHeight: 0,
|
|
40582
|
+
pdfWidth: 0
|
|
40583
|
+
});
|
|
40584
|
+
}
|
|
40585
|
+
return newState;
|
|
40586
|
+
}
|
|
40587
|
+
switch (action.type) {
|
|
40588
|
+
case "ARGS_CHANGED": {
|
|
40589
|
+
return {
|
|
40590
|
+
state: "ACTIVE",
|
|
40591
|
+
settings: DEFAULT_SETTINGS,
|
|
40592
|
+
resourceIndex: 0,
|
|
40593
|
+
resource: null,
|
|
40594
|
+
pageNumber: 1,
|
|
40595
|
+
numPages: null,
|
|
40596
|
+
scale: 1,
|
|
40597
|
+
pdfWidth: 0,
|
|
40598
|
+
pdfHeight: 0,
|
|
40599
|
+
pageHeight: void 0,
|
|
40600
|
+
pageWidth: void 0,
|
|
40601
|
+
atStart: true,
|
|
40602
|
+
atEnd: false,
|
|
40603
|
+
rendered: false
|
|
40604
|
+
};
|
|
40605
|
+
}
|
|
40606
|
+
case "GO_FORWARD": {
|
|
40607
|
+
if ((_a = state2.settings) == null ? void 0 : _a.isScrolling) {
|
|
40608
|
+
const atEndOfBook2 = state2.resourceIndex === args.manifest.readingOrder.length - 1;
|
|
40609
|
+
if (atEndOfBook2)
|
|
40610
|
+
return state2;
|
|
40611
|
+
return goToLocation(state2.resourceIndex + 1);
|
|
40612
|
+
}
|
|
40613
|
+
if (!state2.numPages)
|
|
40614
|
+
return state2;
|
|
40615
|
+
const atEndOfResource = state2.pageNumber === state2.numPages;
|
|
40616
|
+
const atEndOfBook = state2.resourceIndex === args.manifest.readingOrder.length - 1;
|
|
40617
|
+
if (atEndOfResource) {
|
|
40618
|
+
if (atEndOfBook)
|
|
40619
|
+
return state2;
|
|
40620
|
+
return goToLocation(state2.resourceIndex + 1);
|
|
40621
|
+
}
|
|
40622
|
+
return goToLocation(state2.resourceIndex, state2.pageNumber + 1);
|
|
40623
|
+
}
|
|
40624
|
+
case "GO_BACKWARD": {
|
|
40625
|
+
if ((_b = state2.settings) == null ? void 0 : _b.isScrolling) {
|
|
40626
|
+
const atStartOfBook2 = state2.resourceIndex === 0;
|
|
40627
|
+
if (atStartOfBook2)
|
|
40628
|
+
return state2;
|
|
40629
|
+
return goToLocation(state2.resourceIndex - 1);
|
|
40630
|
+
}
|
|
40631
|
+
if (!state2.numPages)
|
|
40632
|
+
return state2;
|
|
40633
|
+
const atStartOfResource = isStartOfResource(state2.pageNumber, args.manifest.readingOrder[state2.resourceIndex].href);
|
|
40634
|
+
const atStartOfBook = state2.resourceIndex === 0;
|
|
40635
|
+
if (atStartOfResource) {
|
|
40636
|
+
if (atStartOfBook)
|
|
40637
|
+
return state2;
|
|
40638
|
+
return __spreadValues({}, goToLocation(state2.resourceIndex - 1, -1));
|
|
40639
|
+
}
|
|
40640
|
+
return goToLocation(state2.resourceIndex, state2.pageNumber - 1);
|
|
40641
|
+
}
|
|
40642
|
+
case "GO_TO_HREF": {
|
|
40643
|
+
const resourceIndex = getIndexFromHref(action.href, args.manifest);
|
|
40644
|
+
const startPage = getStartPageFromHref(action.href);
|
|
40645
|
+
const pageNumber = getPageNumberFromHref(action.href);
|
|
40646
|
+
const page = (_c = pageNumber != null ? pageNumber : startPage) != null ? _c : 1;
|
|
40647
|
+
return goToLocation(resourceIndex, page);
|
|
40648
|
+
}
|
|
40649
|
+
case "RESOURCE_FETCH_SUCCESS":
|
|
40650
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40651
|
+
resource: action.resource
|
|
40652
|
+
});
|
|
40653
|
+
case "PDF_PARSED":
|
|
40654
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40655
|
+
numPages: action.numPages,
|
|
40656
|
+
pageNumber: state2.pageNumber === -1 ? action.numPages : state2.pageNumber
|
|
40657
|
+
});
|
|
40658
|
+
case "SET_SCROLL":
|
|
40659
|
+
if (state2.state !== "ACTIVE") {
|
|
40660
|
+
return handleInvalidTransition(state2, action);
|
|
40661
|
+
}
|
|
40662
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40663
|
+
settings: __spreadProps(__spreadValues({}, state2.settings), {
|
|
40664
|
+
isScrolling: action.isScrolling
|
|
40665
|
+
})
|
|
40666
|
+
});
|
|
40667
|
+
case "SET_SCALE":
|
|
40668
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40669
|
+
scale: action.scale
|
|
40670
|
+
});
|
|
40671
|
+
case "PAGE_LOAD_SUCCESS":
|
|
40672
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40673
|
+
rendered: true,
|
|
40674
|
+
pdfWidth: action.width,
|
|
40675
|
+
pdfHeight: action.height,
|
|
40676
|
+
pageWidth: action.width,
|
|
40677
|
+
pageHeight: action.height
|
|
40678
|
+
});
|
|
40679
|
+
case "RESIZE_PAGE":
|
|
40680
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40681
|
+
pageWidth: action.width,
|
|
40682
|
+
pageHeight: action.height
|
|
40683
|
+
});
|
|
40684
|
+
case "BOOK_BOUNDARY_CHANGED":
|
|
40685
|
+
return __spreadProps(__spreadValues({}, state2), {
|
|
40686
|
+
atStart: action.atStart,
|
|
40687
|
+
atEnd: action.atEnd
|
|
40688
|
+
});
|
|
40689
|
+
}
|
|
40690
|
+
};
|
|
40691
|
+
}
|
|
40692
|
+
function handleInvalidTransition(state2, action) {
|
|
40693
|
+
console.trace(`Inavlid state transition attempted: ${state2} with ${action.type}`);
|
|
40694
|
+
return state2;
|
|
40695
|
+
}
|
|
40696
|
+
function isStartOfResource(pageNumber, resourceHref) {
|
|
40697
|
+
const startPage = getStartPageFromHref(resourceHref);
|
|
40698
|
+
return pageNumber === (startPage != null ? startPage : 1);
|
|
40699
|
+
}
|
|
40700
|
+
|
|
40701
|
+
// src/PdfReader/index.tsx
|
|
40579
40702
|
function usePdfReader(args) {
|
|
40580
|
-
var _a;
|
|
40703
|
+
var _a, _b, _c, _d;
|
|
40581
40704
|
if (args == null ? void 0 : args.pdfWorkerSrc) {
|
|
40582
40705
|
pdfjs4.GlobalWorkerOptions.workerSrc = args.pdfWorkerSrc;
|
|
40583
40706
|
}
|
|
@@ -40591,7 +40714,7 @@ function usePdfReader(args) {
|
|
|
40591
40714
|
height = DEFAULT_HEIGHT,
|
|
40592
40715
|
growWhenScrolling = DEFAULT_SHOULD_GROW_WHEN_SCROLLING
|
|
40593
40716
|
} = args != null ? args : {};
|
|
40594
|
-
const [state2, dispatch] = React71.useReducer(
|
|
40717
|
+
const [state2, dispatch] = React71.useReducer(makePdfReducer(args), {
|
|
40595
40718
|
state: "INACTIVE",
|
|
40596
40719
|
resourceIndex: 0,
|
|
40597
40720
|
resource: null,
|
|
@@ -40604,11 +40727,11 @@ function usePdfReader(args) {
|
|
|
40604
40727
|
pageWidth: void 0,
|
|
40605
40728
|
atStart: true,
|
|
40606
40729
|
atEnd: false,
|
|
40607
|
-
settings: void 0
|
|
40730
|
+
settings: void 0,
|
|
40731
|
+
rendered: false
|
|
40608
40732
|
});
|
|
40609
40733
|
const isFetching = !state2.resource;
|
|
40610
40734
|
const isParsed = typeof state2.numPages === "number";
|
|
40611
|
-
const isSinglePDF = manifest && (manifest == null ? void 0 : manifest.readingOrder.length) === 1;
|
|
40612
40735
|
const [containerRef, containerSize] = useMeasure();
|
|
40613
40736
|
React71.useEffect(() => {
|
|
40614
40737
|
if (!webpubManifestUrl || !manifest) {
|
|
@@ -40661,96 +40784,43 @@ function usePdfReader(args) {
|
|
|
40661
40784
|
resizePage(state2.pdfWidth, state2.pdfHeight, containerSize);
|
|
40662
40785
|
}, [containerSize, state2.pdfWidth, state2.pdfHeight, resizePage]);
|
|
40663
40786
|
React71.useEffect(() => {
|
|
40664
|
-
var _a2;
|
|
40665
|
-
|
|
40666
|
-
|
|
40667
|
-
|
|
40668
|
-
|
|
40669
|
-
|
|
40670
|
-
|
|
40671
|
-
|
|
40672
|
-
|
|
40673
|
-
|
|
40674
|
-
|
|
40675
|
-
|
|
40676
|
-
|
|
40677
|
-
const isResourceEnd = isLastResource && state2.pageNumber === state2.numPages || state2.settings.isScrolling && isLastResource;
|
|
40678
|
-
dispatch({
|
|
40679
|
-
type: "BOOK_BOUNDARY_CHANGED",
|
|
40680
|
-
atStart: isResourceStart,
|
|
40681
|
-
atEnd: isResourceEnd
|
|
40682
|
-
});
|
|
40683
|
-
}
|
|
40787
|
+
var _a2, _b2, _c2;
|
|
40788
|
+
const isScrolling = (_a2 = state2.settings) == null ? void 0 : _a2.isScrolling;
|
|
40789
|
+
const isFirstResource = state2.resourceIndex === 0;
|
|
40790
|
+
const isFirstResourceStart = isFirstResource && state2.pageNumber === 1;
|
|
40791
|
+
const showPrevButton = isScrolling ? !isFirstResource : !isFirstResourceStart;
|
|
40792
|
+
const isLastResource = state2.resourceIndex === ((_c2 = (_b2 = manifest == null ? void 0 : manifest.readingOrder) == null ? void 0 : _b2.length) != null ? _c2 : 1) - 1;
|
|
40793
|
+
const isLastResourceEnd = isLastResource && state2.pageNumber === state2.numPages;
|
|
40794
|
+
const showNextButton = isScrolling ? !isLastResource : !isLastResourceEnd;
|
|
40795
|
+
dispatch({
|
|
40796
|
+
type: "BOOK_BOUNDARY_CHANGED",
|
|
40797
|
+
atStart: !showPrevButton,
|
|
40798
|
+
atEnd: !showNextButton
|
|
40799
|
+
});
|
|
40684
40800
|
}, [
|
|
40685
|
-
manifest,
|
|
40686
|
-
state2.state,
|
|
40687
|
-
state2.settings,
|
|
40688
|
-
state2.numPages,
|
|
40801
|
+
(_a = manifest == null ? void 0 : manifest.readingOrder) == null ? void 0 : _a.length,
|
|
40689
40802
|
state2.pageNumber,
|
|
40690
40803
|
state2.resourceIndex,
|
|
40691
|
-
|
|
40804
|
+
(_b = state2.settings) == null ? void 0 : _b.isScrolling,
|
|
40805
|
+
state2.numPages
|
|
40692
40806
|
]);
|
|
40693
|
-
|
|
40807
|
+
React71.useEffect(() => {
|
|
40694
40808
|
var _a2;
|
|
40695
|
-
if (!state2.
|
|
40809
|
+
if (!((_a2 = state2.settings) == null ? void 0 : _a2.isScrolling))
|
|
40696
40810
|
return;
|
|
40697
|
-
if (state2.
|
|
40811
|
+
if (!state2.rendered)
|
|
40698
40812
|
return;
|
|
40699
|
-
|
|
40700
|
-
|
|
40701
|
-
|
|
40702
|
-
|
|
40703
|
-
|
|
40704
|
-
|
|
40705
|
-
|
|
40706
|
-
|
|
40707
|
-
type: "SET_CURRENT_RESOURCE",
|
|
40708
|
-
index: nextIndex,
|
|
40709
|
-
shouldNavigateToEnd: false
|
|
40710
|
-
});
|
|
40711
|
-
if (manifest == null ? void 0 : manifest.readingOrder[nextIndex]) {
|
|
40712
|
-
const pageNum = getStartPage(manifest == null ? void 0 : manifest.readingOrder[nextIndex].href);
|
|
40713
|
-
dispatch({
|
|
40714
|
-
type: "NAVIGATE_PAGE",
|
|
40715
|
-
pageNum
|
|
40716
|
-
});
|
|
40717
|
-
}
|
|
40718
|
-
}
|
|
40719
|
-
}), [
|
|
40720
|
-
state2.state,
|
|
40721
|
-
manifest,
|
|
40722
|
-
state2.settings,
|
|
40723
|
-
state2.numPages,
|
|
40724
|
-
state2.pageNumber,
|
|
40725
|
-
state2.resourceIndex
|
|
40726
|
-
]);
|
|
40813
|
+
process.nextTick(() => {
|
|
40814
|
+
const page = document.querySelector(`[data-page-number="${state2.pageNumber}"]`);
|
|
40815
|
+
page == null ? void 0 : page.scrollIntoView();
|
|
40816
|
+
});
|
|
40817
|
+
}, [state2.pageNumber, (_c = state2.settings) == null ? void 0 : _c.isScrolling, state2.rendered]);
|
|
40818
|
+
const goForward = React71.useCallback(() => __async(this, null, function* () {
|
|
40819
|
+
dispatch({ type: "GO_FORWARD" });
|
|
40820
|
+
}), []);
|
|
40727
40821
|
const goBackward = React71.useCallback(() => __async(this, null, function* () {
|
|
40728
|
-
|
|
40729
|
-
|
|
40730
|
-
if (state2.state !== "ACTIVE")
|
|
40731
|
-
return;
|
|
40732
|
-
const startPage = (manifest == null ? void 0 : manifest.readingOrder) && (manifest == null ? void 0 : manifest.readingOrder[state2.resourceIndex]) ? getStartPage(manifest == null ? void 0 : manifest.readingOrder[state2.resourceIndex].href) : 1;
|
|
40733
|
-
if (state2.pageNumber > startPage && !state2.settings.isScrolling) {
|
|
40734
|
-
dispatch({
|
|
40735
|
-
type: "NAVIGATE_PAGE",
|
|
40736
|
-
pageNum: state2.pageNumber - 1
|
|
40737
|
-
});
|
|
40738
|
-
} else if ((manifest == null ? void 0 : manifest.readingOrder) && state2.resourceIndex > 0) {
|
|
40739
|
-
const nextIndex = state2.resourceIndex - 1;
|
|
40740
|
-
dispatch({
|
|
40741
|
-
type: "SET_CURRENT_RESOURCE",
|
|
40742
|
-
index: nextIndex,
|
|
40743
|
-
shouldNavigateToEnd: !state2.settings.isScrolling
|
|
40744
|
-
});
|
|
40745
|
-
}
|
|
40746
|
-
}), [
|
|
40747
|
-
manifest,
|
|
40748
|
-
isParsed,
|
|
40749
|
-
state2.state,
|
|
40750
|
-
state2.settings,
|
|
40751
|
-
state2.pageNumber,
|
|
40752
|
-
state2.resourceIndex
|
|
40753
|
-
]);
|
|
40822
|
+
dispatch({ type: "GO_BACKWARD" });
|
|
40823
|
+
}), []);
|
|
40754
40824
|
const setScroll = React71.useCallback((val) => __async(this, null, function* () {
|
|
40755
40825
|
const isScrolling = val === "scrolling";
|
|
40756
40826
|
dispatch({ type: "SET_SCROLL", isScrolling });
|
|
@@ -40768,30 +40838,8 @@ function usePdfReader(args) {
|
|
|
40768
40838
|
});
|
|
40769
40839
|
}), [state2.scale]);
|
|
40770
40840
|
const goToPage = React71.useCallback((href) => __async(this, null, function* () {
|
|
40771
|
-
|
|
40772
|
-
|
|
40773
|
-
const index = (_a2 = manifest == null ? void 0 : manifest.readingOrder) == null ? void 0 : _a2.findIndex((link2) => {
|
|
40774
|
-
return link2.href === href2;
|
|
40775
|
-
});
|
|
40776
|
-
if (index < 0) {
|
|
40777
|
-
throw new Error("Cannot find resource in readingOrder");
|
|
40778
|
-
}
|
|
40779
|
-
return index;
|
|
40780
|
-
};
|
|
40781
|
-
const resourceIndex = getIndexFromHref(href);
|
|
40782
|
-
dispatch({
|
|
40783
|
-
type: "SET_CURRENT_RESOURCE",
|
|
40784
|
-
index: resourceIndex,
|
|
40785
|
-
shouldNavigateToEnd: false
|
|
40786
|
-
});
|
|
40787
|
-
if ((manifest == null ? void 0 : manifest.readingOrder) && (manifest == null ? void 0 : manifest.readingOrder[resourceIndex])) {
|
|
40788
|
-
const startPage = getStartPage(manifest == null ? void 0 : manifest.readingOrder[resourceIndex].href);
|
|
40789
|
-
dispatch({
|
|
40790
|
-
type: "NAVIGATE_PAGE",
|
|
40791
|
-
pageNum: startPage
|
|
40792
|
-
});
|
|
40793
|
-
}
|
|
40794
|
-
}), [manifest == null ? void 0 : manifest.readingOrder]);
|
|
40841
|
+
dispatch({ type: "GO_TO_HREF", href });
|
|
40842
|
+
}), []);
|
|
40795
40843
|
if (!webpubManifestUrl || !manifest)
|
|
40796
40844
|
return null;
|
|
40797
40845
|
if (state2.state === "INACTIVE" || isFetching) {
|
|
@@ -40825,7 +40873,7 @@ function usePdfReader(args) {
|
|
|
40825
40873
|
resizePage(page.width, page.height, containerSize);
|
|
40826
40874
|
}
|
|
40827
40875
|
}
|
|
40828
|
-
const shouldGrow = ((
|
|
40876
|
+
const shouldGrow = ((_d = state2.settings) == null ? void 0 : _d.isScrolling) && growWhenScrolling;
|
|
40829
40877
|
const finalHeight = shouldGrow ? "initial" : height;
|
|
40830
40878
|
return {
|
|
40831
40879
|
type: "PDF",
|
|
@@ -40877,10 +40925,6 @@ function usePdfReader(args) {
|
|
|
40877
40925
|
}
|
|
40878
40926
|
};
|
|
40879
40927
|
}
|
|
40880
|
-
function handleInvalidTransition(state2, action) {
|
|
40881
|
-
console.trace(`Inavlid state transition attempted: ${state2} with ${action.type}`);
|
|
40882
|
-
return state2;
|
|
40883
|
-
}
|
|
40884
40928
|
|
|
40885
40929
|
// src/HtmlReader/index.tsx
|
|
40886
40930
|
import React79 from "react";
|
|
@@ -41919,9 +41963,9 @@ function useHtmlReader(args) {
|
|
|
41919
41963
|
const numResources = manifest.readingOrder.length;
|
|
41920
41964
|
const isFirstResource = resourceIndex === 0;
|
|
41921
41965
|
const isLastResource = resourceIndex === numResources - 1;
|
|
41922
|
-
const
|
|
41966
|
+
const isStartOfResource2 = state2.location.locations.position === 1;
|
|
41923
41967
|
const isEndOfResource = state2.location.locations.remainingPositions === 0;
|
|
41924
|
-
const atStart = isFirstResource &&
|
|
41968
|
+
const atStart = isFirstResource && isStartOfResource2;
|
|
41925
41969
|
const atEnd = isLastResource && isEndOfResource;
|
|
41926
41970
|
return {
|
|
41927
41971
|
type: "HTML",
|
|
@@ -42030,6 +42074,44 @@ function useWebReader(args) {
|
|
|
42030
42074
|
throw new Error(`No reader was initialized for the webpub with url: ${webpubManifestUrl} and type: ${readerType}.`);
|
|
42031
42075
|
}
|
|
42032
42076
|
|
|
42077
|
+
// src/PdfReader/addTocToManifest.tsx
|
|
42078
|
+
function addTocToManifest(manifest, getResource, pdfWorkerSrc) {
|
|
42079
|
+
return __async(this, null, function* () {
|
|
42080
|
+
const pdfUrl = manifest.readingOrder[0].href;
|
|
42081
|
+
const pdfData = yield getResource(pdfUrl);
|
|
42082
|
+
try {
|
|
42083
|
+
pdfjs4.GlobalWorkerOptions.workerSrc = pdfWorkerSrc;
|
|
42084
|
+
const pdf = yield pdfjs4.getDocument(pdfData).promise;
|
|
42085
|
+
const outline5 = yield pdf.getOutline();
|
|
42086
|
+
const tocPromises = outline5.map((chapter) => __async(this, null, function* () {
|
|
42087
|
+
const dest = chapter.dest;
|
|
42088
|
+
if (dest && dest.length > 0) {
|
|
42089
|
+
const ref = dest[0];
|
|
42090
|
+
const pageIndex = yield pdf.getPageIndex(ref);
|
|
42091
|
+
if (typeof pageIndex !== "number")
|
|
42092
|
+
return void 0;
|
|
42093
|
+
if (pageIndex) {
|
|
42094
|
+
const link2 = {
|
|
42095
|
+
title: chapter.title,
|
|
42096
|
+
href: `${pdfUrl}#page=${pageIndex + 1}`,
|
|
42097
|
+
children: []
|
|
42098
|
+
};
|
|
42099
|
+
return link2;
|
|
42100
|
+
}
|
|
42101
|
+
}
|
|
42102
|
+
return void 0;
|
|
42103
|
+
}));
|
|
42104
|
+
const toc = (yield Promise.all(tocPromises)).filter((item) => !!item);
|
|
42105
|
+
if (toc.length > 0) {
|
|
42106
|
+
manifest.toc = toc;
|
|
42107
|
+
}
|
|
42108
|
+
} catch (e) {
|
|
42109
|
+
console.error(e);
|
|
42110
|
+
}
|
|
42111
|
+
return manifest;
|
|
42112
|
+
});
|
|
42113
|
+
}
|
|
42114
|
+
|
|
42033
42115
|
// src/index.tsx
|
|
42034
42116
|
var WebReaderWithoutBoundary = (_a) => {
|
|
42035
42117
|
var _b = _a, {
|
|
@@ -42070,6 +42152,7 @@ export {
|
|
|
42070
42152
|
LOCAL_STORAGE_SETTINGS_KEY,
|
|
42071
42153
|
ReadiumWebpubContext,
|
|
42072
42154
|
WebReaderWithoutBoundary,
|
|
42155
|
+
addTocToManifest,
|
|
42073
42156
|
clearWebReaderLocalStorage,
|
|
42074
42157
|
src_default as default,
|
|
42075
42158
|
getTheme3 as getTheme,
|