New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

react-reader

Package Overview
Dependencies
Maintainers
1
Versions
92
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-reader - npm Package Compare versions

Comparing version
2.0.13
to
2.0.14
+2
-0
dist/EpubView/EpubView.d.ts

@@ -19,2 +19,3 @@ import { default as React, Component } from 'react';

loadingView?: React.ReactNode;
errorView?: React.ReactNode;
location: string | number | null;

@@ -30,2 +31,3 @@ locationChanged(value: string): void;

isLoaded: boolean;
isError: boolean;
toc: NavItem[];

@@ -32,0 +34,0 @@ };

@@ -23,2 +23,3 @@ var __defProp = Object.defineProperty;

isLoaded: false,
isError: false,
toc: []

@@ -61,2 +62,7 @@ });

this.book = Epub(url, epubInitOptions);
this.book.on("openFailed", (error) => {
this.setState({
isError: true
});
});
this.book.loaded.navigation.then(({ toc }) => {

@@ -66,2 +72,3 @@ this.setState(

isLoaded: true,
isError: false,
toc

@@ -140,5 +147,9 @@ },

render() {
const { isLoaded } = this.state;
const { loadingView = null, epubViewStyles = EpubViewStyle } = this.props;
return /* @__PURE__ */ jsx("div", { style: epubViewStyles.viewHolder, children: isLoaded && this.renderBook() || loadingView });
const { isLoaded, isError } = this.state;
const { loadingView = null, errorView = null, epubViewStyles = EpubViewStyle } = this.props;
return /* @__PURE__ */ jsxs("div", { style: epubViewStyles.viewHolder, children: [
isLoaded && this.renderBook(),
!isLoaded && !isError && loadingView,
!isLoaded && isError && errorView
] });
}

@@ -288,2 +299,11 @@ }

marginTop: "-.5em"
},
errorView: {
position: "absolute",
top: "50%",
left: "10%",
right: "10%",
color: "#c00",
textAlign: "center",
marginTop: "-.5em"
}

@@ -521,2 +541,3 @@ };

loadingView,
errorView,
readerStyles = ReactReaderStyle,

@@ -569,2 +590,3 @@ locationChanged,

loadingView: loadingView === void 0 ? /* @__PURE__ */ jsx("div", { style: readerStyles.loadingView, children: "Loading…" }) : loadingView,
errorView: errorView === void 0 ? /* @__PURE__ */ jsx("div", { style: readerStyles.errorView, children: "Error loading book" }) : errorView,
epubViewStyles,

@@ -571,0 +593,0 @@ ...props,

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"react-reader.es.js","sources":["../lib/EpubView/style.ts","../lib/EpubView/EpubView.tsx","../lib/ReactReader/style.ts","../lib/ReactReader/ReactReader.tsx"],"sourcesContent":["import type { CSSProperties } from 'react'\n\nexport interface IEpubViewStyle {\n viewHolder: CSSProperties\n view: CSSProperties\n}\n\nexport const EpubViewStyle: IEpubViewStyle = {\n viewHolder: {\n position: 'relative',\n height: '100%',\n width: '100%',\n },\n view: {\n height: '100%',\n },\n}\n","import React, { Component } from 'react'\nimport Epub, { Book } from 'epubjs'\nimport type { NavItem, Contents, Rendition, Location } from 'epubjs'\nimport { EpubViewStyle as defaultStyles, type IEpubViewStyle } from './style'\nimport type { RenditionOptions } from 'epubjs/types/rendition'\nimport type { BookOptions } from 'epubjs/types/book'\n\nexport type RenditionOptionsFix = RenditionOptions & {\n allowPopups: boolean\n}\n\nexport type IToc = {\n label: string\n href: string\n}\n\nexport type IEpubViewProps = {\n url: string | ArrayBuffer\n epubInitOptions?: Partial<BookOptions>\n epubOptions?: Partial<RenditionOptionsFix>\n epubViewStyles?: IEpubViewStyle\n loadingView?: React.ReactNode\n location: string | number | null\n locationChanged(value: string): void\n showToc?: boolean\n tocChanged?(value: NavItem[]): void\n getRendition?(rendition: Rendition): void\n handleKeyPress?(): void\n handleTextSelected?(cfiRange: string, contents: Contents): void\n}\ntype IEpubViewState = {\n isLoaded: boolean\n toc: NavItem[]\n}\n\nexport class EpubView extends Component<IEpubViewProps, IEpubViewState> {\n state: Readonly<IEpubViewState> = {\n isLoaded: false,\n toc: [],\n }\n viewerRef = React.createRef<HTMLDivElement>()\n location?: string | number | null\n book?: Book\n rendition?: Rendition\n prevPage?: () => void\n nextPage?: () => void\n\n constructor(props: IEpubViewProps) {\n super(props)\n this.location = props.location\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n }\n\n componentDidMount() {\n this.initBook()\n document.addEventListener('keyup', this.handleKeyPress, false)\n }\n\n initBook() {\n const { url, tocChanged, epubInitOptions } = this.props\n if (this.book) {\n this.book.destroy()\n }\n this.book = Epub(url, epubInitOptions)\n this.book.loaded.navigation.then(({ toc }) => {\n this.setState(\n {\n isLoaded: true,\n toc: toc,\n },\n () => {\n tocChanged && tocChanged(toc)\n this.initReader()\n }\n )\n })\n }\n\n componentWillUnmount() {\n if (this.book) {\n this.book.destroy()\n }\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n document.removeEventListener('keyup', this.handleKeyPress, false)\n }\n\n shouldComponentUpdate(nextProps: IEpubViewProps) {\n return (\n !this.state.isLoaded ||\n nextProps.location !== this.props.location ||\n nextProps.url !== this.props.url\n )\n }\n\n componentDidUpdate(prevProps: IEpubViewProps) {\n if (\n prevProps.location !== this.props.location &&\n this.location !== this.props.location\n ) {\n this.rendition?.display(this.props.location + '')\n }\n if (prevProps.url !== this.props.url) {\n this.initBook()\n }\n }\n\n initReader() {\n const { toc } = this.state\n const { location, epubOptions, getRendition } = this.props\n if (this.viewerRef.current) {\n const node = this.viewerRef.current\n if (this.book) {\n const rendition = this.book.renderTo(node, {\n width: '100%',\n height: '100%',\n ...epubOptions,\n })\n this.rendition = rendition\n this.prevPage = () => {\n rendition.prev()\n }\n this.nextPage = () => {\n rendition.next()\n }\n this.registerEvents()\n getRendition && getRendition(rendition)\n\n if (typeof location === 'string' || typeof location === 'number') {\n rendition.display(location + '')\n } else if (toc.length > 0 && toc[0].href) {\n rendition.display(toc[0].href)\n } else {\n rendition.display()\n }\n }\n }\n }\n\n registerEvents() {\n const { handleKeyPress, handleTextSelected } = this.props\n if (this.rendition) {\n this.rendition.on('locationChanged', this.onLocationChange)\n this.rendition.on('keyup', handleKeyPress || this.handleKeyPress)\n if (handleTextSelected) {\n this.rendition.on('selected', handleTextSelected)\n }\n }\n }\n\n onLocationChange = (loc: Location) => {\n const { location, locationChanged } = this.props\n const newLocation = `${loc.start}`\n if (location !== newLocation) {\n this.location = newLocation\n locationChanged && locationChanged(newLocation)\n }\n }\n\n renderBook() {\n const { epubViewStyles = defaultStyles } = this.props\n return <div ref={this.viewerRef} style={epubViewStyles.view} />\n }\n\n handleKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight' && this.nextPage) {\n this.nextPage()\n }\n if (event.key === 'ArrowLeft' && this.prevPage) {\n this.prevPage()\n }\n }\n\n render() {\n const { isLoaded } = this.state\n const { loadingView = null, epubViewStyles = defaultStyles } = this.props\n return (\n <div style={epubViewStyles.viewHolder}>\n {(isLoaded && this.renderBook()) || loadingView}\n </div>\n )\n }\n}\n","import type { CSSProperties } from 'react'\n\nexport interface IReactReaderStyle {\n container: CSSProperties\n readerArea: CSSProperties\n containerExpanded: CSSProperties\n titleArea: CSSProperties\n reader: CSSProperties\n swipeWrapper: CSSProperties\n prev: CSSProperties\n next: CSSProperties\n arrow: CSSProperties\n arrowHover: CSSProperties\n tocBackground: CSSProperties\n toc: CSSProperties\n tocArea: CSSProperties\n tocAreaButton: CSSProperties\n tocButton: CSSProperties\n tocButtonExpanded: CSSProperties\n tocButtonBar: CSSProperties\n tocButtonBarTop: CSSProperties\n loadingView: CSSProperties\n tocButtonBottom: CSSProperties\n}\n\nexport const ReactReaderStyle: IReactReaderStyle = {\n container: {\n overflow: 'hidden',\n position: 'relative',\n height: '100%',\n },\n readerArea: {\n position: 'relative',\n zIndex: 1,\n height: '100%',\n width: '100%',\n backgroundColor: '#fff',\n transition: 'all .3s ease',\n },\n containerExpanded: {\n transform: 'translateX(256px)',\n },\n titleArea: {\n position: 'absolute',\n top: 20,\n left: 50,\n right: 50,\n textAlign: 'center',\n color: '#999',\n },\n reader: {\n position: 'absolute',\n top: 50,\n left: 50,\n bottom: 20,\n right: 50,\n },\n swipeWrapper: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: 200,\n },\n prev: {\n left: 1,\n },\n next: {\n right: 1,\n },\n arrow: {\n outline: 'none',\n border: 'none',\n background: 'none',\n position: 'absolute',\n top: '50%',\n marginTop: -32,\n fontSize: 64,\n padding: '0 10px',\n color: '#E2E2E2',\n fontFamily: 'arial, sans-serif',\n cursor: 'pointer',\n userSelect: 'none',\n appearance: 'none',\n fontWeight: 'normal',\n },\n arrowHover: {\n color: '#777',\n },\n toc: {},\n tocBackground: {\n position: 'absolute',\n left: 256,\n top: 0,\n bottom: 0,\n right: 0,\n zIndex: 1,\n },\n tocArea: {\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n zIndex: 0,\n width: 256,\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n background: '#f2f2f2',\n padding: '10px 0',\n },\n tocAreaButton: {\n userSelect: 'none',\n appearance: 'none',\n background: 'none',\n border: 'none',\n display: 'block',\n fontFamily: 'sans-serif',\n width: '100%',\n fontSize: '.9em',\n textAlign: 'left',\n padding: '.9em 1em',\n borderBottom: '1px solid #ddd',\n color: '#aaa',\n boxSizing: 'border-box',\n outline: 'none',\n cursor: 'pointer',\n },\n tocButton: {\n background: 'none',\n border: 'none',\n width: 32,\n height: 32,\n position: 'absolute',\n top: 10,\n left: 10,\n borderRadius: 2,\n outline: 'none',\n cursor: 'pointer',\n },\n tocButtonExpanded: {\n background: '#f2f2f2',\n },\n tocButtonBar: {\n position: 'absolute',\n width: '60%',\n background: '#ccc',\n height: 2,\n left: '50%',\n margin: '-1px -30%',\n top: '50%',\n transition: 'all .5s ease',\n },\n tocButtonBarTop: {\n top: '35%',\n },\n tocButtonBottom: {\n top: '66%',\n },\n loadingView: {\n position: 'absolute',\n top: '50%',\n left: '10%',\n right: '10%',\n color: '#ccc',\n textAlign: 'center',\n marginTop: '-.5em',\n },\n}\n","import React, { type CSSProperties, PureComponent, type ReactNode } from 'react'\nimport {\n type SwipeableProps,\n type SwipeEventData,\n useSwipeable,\n} from 'react-swipeable'\nimport { EpubView, type IEpubViewStyle, type IEpubViewProps } from '..'\nimport {\n ReactReaderStyle as defaultStyles,\n type IReactReaderStyle,\n} from './style'\nimport { type NavItem } from 'epubjs'\n\ntype SwipeWrapperProps = {\n children: ReactNode\n swipeProps: Partial<SwipeableProps>\n}\n\nconst SwipeWrapper = ({ children, swipeProps }: SwipeWrapperProps) => {\n const handlers = useSwipeable(swipeProps)\n return (\n <div style={{ height: '100%' }} {...handlers}>\n {children}\n </div>\n )\n}\n\ntype TocItemProps = {\n data: NavItem\n setLocation: (value: string) => void\n styles?: CSSProperties\n}\n\nconst TocItem = ({ data, setLocation, styles }: TocItemProps) => (\n <div>\n <button onClick={() => setLocation(data.href)} style={styles}>\n {data.label}\n </button>\n {data.subitems && data.subitems.length > 0 && (\n <div style={{ paddingLeft: 10 }}>\n {data.subitems.map((item, i) => (\n <TocItem\n key={i}\n data={item}\n styles={styles}\n setLocation={setLocation}\n />\n ))}\n </div>\n )}\n </div>\n)\n\nexport type IReactReaderProps = IEpubViewProps & {\n title?: string\n showToc?: boolean\n readerStyles?: IReactReaderStyle\n epubViewStyles?: IEpubViewStyle\n swipeable?: boolean\n isRTL?: boolean\n pageTurnOnScroll?: boolean\n searchQuery?: string\n contextLength?: number\n onSearchResults?: (results: SearchResult[]) => void\n}\n\ntype SearchResult = { cfi: string; excerpt: string }\n\ntype IReactReaderState = {\n isLoaded: boolean\n expandedToc: boolean\n toc: NavItem[]\n}\n\nexport class ReactReader extends PureComponent<\n IReactReaderProps,\n IReactReaderState\n> {\n state: Readonly<IReactReaderState> = {\n isLoaded: false,\n expandedToc: false,\n toc: [],\n }\n readerRef = React.createRef<EpubView>()\n constructor(props: IReactReaderProps) {\n super(props)\n }\n toggleToc = () => {\n this.setState({\n expandedToc: !this.state.expandedToc,\n })\n }\n\n next = () => {\n const node = this.readerRef.current\n if (node && node.nextPage) {\n node.nextPage()\n }\n }\n\n prev = () => {\n const node = this.readerRef.current\n if (node && node.prevPage) {\n node.prevPage()\n }\n }\n\n onTocChange = (toc: NavItem[]) => {\n const { tocChanged } = this.props\n this.setState(\n {\n toc: toc,\n },\n () => tocChanged && tocChanged(toc)\n )\n }\n\n renderToc() {\n const { toc, expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <div>\n <div style={readerStyles.tocArea}>\n <div style={readerStyles.toc}>\n {toc.map((item, i) => (\n <TocItem\n data={item}\n key={i}\n setLocation={this.setLocation}\n styles={readerStyles.tocAreaButton}\n />\n ))}\n </div>\n </div>\n {expandedToc && (\n <div style={readerStyles.tocBackground} onClick={this.toggleToc} />\n )}\n </div>\n )\n }\n\n setLocation = (loc: string) => {\n const { locationChanged } = this.props\n this.setState(\n {\n expandedToc: false,\n },\n () => locationChanged && locationChanged(loc)\n )\n }\n\n renderTocToggle() {\n const { expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <button\n style={Object.assign(\n {},\n readerStyles.tocButton,\n expandedToc ? readerStyles.tocButtonExpanded : {}\n )}\n onClick={this.toggleToc}\n >\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBarTop\n )}\n />\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBottom\n )}\n />\n </button>\n )\n }\n\n // Changing Page based on direction of scroll\n handleWheel = (event: WheelEvent) => {\n event.preventDefault()\n\n const node = this.readerRef.current\n if (!node) return\n\n if (event.deltaY > 0) {\n node.nextPage?.()\n } else if (event.deltaY < 0) {\n node.prevPage?.()\n }\n }\n\n // Setting up event listener in the iframe of the viewer\n attachWheelListener = () => {\n if (!this.readerRef.current) return\n\n const rendition = this.readerRef.current.rendition\n\n if (rendition) {\n rendition.hooks.content.register(\n (contents: { window: { document: any } }) => {\n const iframeDoc = contents.window.document\n\n // Remove any existing listener before adding a new one\n iframeDoc.removeEventListener('wheel', this.handleWheel)\n iframeDoc.addEventListener('wheel', this.handleWheel, {\n passive: false,\n })\n }\n )\n }\n }\n\n //search function to find all occurence and set amount of charecters for context\n searchInBook = async (query?: string) => {\n if (!this.readerRef.current) return\n const rendition = this.readerRef.current?.rendition\n const book = rendition?.book\n if (!book) return\n\n if (!query) {\n this.props.onSearchResults?.([])\n return\n }\n\n await book.ready\n const results: SearchResult[] = []\n const promises: Promise<void>[] = []\n\n book.spine.each((item: any) => {\n if (query == '' || query == null) results\n const promise = (async () => {\n try {\n await item.load(book.load.bind(book))\n const doc = item.document\n const textNodes: Node[] = []\n\n const treeWalker = doc.createTreeWalker(\n doc,\n NodeFilter.SHOW_TEXT,\n null,\n false\n )\n let node\n while ((node = treeWalker.nextNode())) {\n textNodes.push(node)\n }\n\n const fullText = textNodes\n .map((n) => n.textContent)\n .join('')\n .toLowerCase()\n const searchQuery = query.toLowerCase()\n let pos = fullText.indexOf(searchQuery)\n\n while (pos !== -1) {\n let nodeIndex = 0\n let foundOffset = pos\n\n while (nodeIndex < textNodes.length) {\n const nodeText = textNodes[nodeIndex].textContent || ''\n if (foundOffset < nodeText.length) break\n foundOffset -= nodeText.length\n nodeIndex++\n }\n\n if (nodeIndex < textNodes.length) {\n let range = doc.createRange()\n try {\n range.setStart(textNodes[nodeIndex], foundOffset)\n range.setEnd(\n textNodes[nodeIndex],\n foundOffset + searchQuery.length\n )\n const cfi = item.cfiFromRange(range)\n const excerpt = `${fullText.substring(\n Math.max(0, pos - (this.props.contextLength || 15)),\n pos + searchQuery.length + (this.props.contextLength || 15)\n )}`\n\n results.push({ cfi, excerpt })\n } catch (e) {\n console.warn('Skipping invalid range:', e)\n }\n }\n\n pos = fullText.indexOf(searchQuery, pos + 1)\n }\n\n item.unload()\n } catch (error) {\n console.error('Error searching chapter:', error)\n }\n })()\n promises.push(promise)\n })\n\n await Promise.all(promises)\n //Fix for Search Result of previous query retaining when\n if (query == this.props.searchQuery) {\n this.props.onSearchResults?.(results) //passing result as an array of objects with cfi and excerpt\n }\n }\n\n //Actions to perform when the component updates\n componentDidUpdate(prevProps: IReactReaderProps) {\n //searching only when new search query is passed\n if (prevProps.searchQuery !== this.props.searchQuery) {\n this.searchInBook(this.props.searchQuery)\n }\n\n //attaching the wheel listner only when pageTurnOnScroll is set as true\n if (this.props.pageTurnOnScroll === true) {\n this.attachWheelListener()\n }\n }\n\n render() {\n const {\n title,\n showToc = true,\n loadingView,\n readerStyles = defaultStyles,\n locationChanged,\n swipeable,\n epubViewStyles,\n isRTL = false,\n pageTurnOnScroll = false,\n searchQuery,\n contextLength,\n ...props\n } = this.props\n const { toc, expandedToc } = this.state\n return (\n <div style={readerStyles.container}>\n <div\n style={Object.assign(\n {},\n readerStyles.readerArea,\n expandedToc ? readerStyles.containerExpanded : {}\n )}\n >\n {showToc && this.renderTocToggle()}\n <div style={readerStyles.titleArea}>{title}</div>\n <SwipeWrapper\n swipeProps={{\n onSwiped: (eventData: SwipeEventData) => {\n const { dir } = eventData\n if (dir === 'Left') {\n isRTL ? this.prev() : this.next()\n }\n if (dir === 'Right') {\n isRTL ? this.next() : this.prev()\n }\n },\n onTouchStartOrOnMouseDown: ({ event }) => event.preventDefault(),\n touchEventOptions: { passive: false },\n preventScrollOnSwipe: true,\n trackMouse: true,\n }}\n >\n <div style={readerStyles.reader}>\n <EpubView\n ref={this.readerRef}\n loadingView={\n loadingView === undefined ? (\n <div style={readerStyles.loadingView}>Loading…</div>\n ) : (\n loadingView\n )\n }\n epubViewStyles={epubViewStyles}\n {...props}\n tocChanged={this.onTocChange}\n locationChanged={locationChanged}\n />\n {swipeable && <div style={readerStyles.swipeWrapper} />}\n </div>\n </SwipeWrapper>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.prev)}\n onClick={isRTL ? this.next : this.prev}\n >\n ‹\n </button>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.next)}\n onClick={isRTL ? this.prev : this.next}\n >\n ›\n </button>\n </div>\n {showToc && toc && this.renderToc()}\n </div>\n )\n }\n}\n"],"names":["defaultStyles"],"mappings":"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"}
{"version":3,"file":"react-reader.es.js","sources":["../lib/EpubView/style.ts","../lib/EpubView/EpubView.tsx","../lib/ReactReader/style.ts","../lib/ReactReader/ReactReader.tsx"],"sourcesContent":["import type { CSSProperties } from 'react'\n\nexport interface IEpubViewStyle {\n viewHolder: CSSProperties\n view: CSSProperties\n}\n\nexport const EpubViewStyle: IEpubViewStyle = {\n viewHolder: {\n position: 'relative',\n height: '100%',\n width: '100%',\n },\n view: {\n height: '100%',\n },\n}\n","import React, { Component } from 'react'\nimport Epub, { Book } from 'epubjs'\nimport type { NavItem, Contents, Rendition, Location } from 'epubjs'\nimport { EpubViewStyle as defaultStyles, type IEpubViewStyle } from './style'\nimport type { RenditionOptions } from 'epubjs/types/rendition'\nimport type { BookOptions } from 'epubjs/types/book'\n\nexport type RenditionOptionsFix = RenditionOptions & {\n allowPopups: boolean\n}\n\nexport type IToc = {\n label: string\n href: string\n}\n\nexport type IEpubViewProps = {\n url: string | ArrayBuffer\n epubInitOptions?: Partial<BookOptions>\n epubOptions?: Partial<RenditionOptionsFix>\n epubViewStyles?: IEpubViewStyle\n loadingView?: React.ReactNode\n errorView?: React.ReactNode\n location: string | number | null\n locationChanged(value: string): void\n showToc?: boolean\n tocChanged?(value: NavItem[]): void\n getRendition?(rendition: Rendition): void\n handleKeyPress?(): void\n handleTextSelected?(cfiRange: string, contents: Contents): void\n}\ntype IEpubViewState = {\n isLoaded: boolean\n isError: boolean\n toc: NavItem[]\n}\n\nexport class EpubView extends Component<IEpubViewProps, IEpubViewState> {\n state: Readonly<IEpubViewState> = {\n isLoaded: false,\n isError: false,\n toc: [],\n }\n viewerRef = React.createRef<HTMLDivElement>()\n location?: string | number | null\n book?: Book\n rendition?: Rendition\n prevPage?: () => void\n nextPage?: () => void\n\n constructor(props: IEpubViewProps) {\n super(props)\n this.location = props.location\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n }\n\n componentDidMount() {\n this.initBook()\n document.addEventListener('keyup', this.handleKeyPress, false)\n }\n\n initBook() {\n const { url, tocChanged, epubInitOptions } = this.props\n if (this.book) {\n this.book.destroy()\n }\n this.book = Epub(url, epubInitOptions)\n this.book.on('openFailed', (error: Error) => {\n this.setState({\n isError: true\n })\n })\n this.book.loaded.navigation.then(({ toc }) => {\n this.setState(\n {\n isLoaded: true,\n isError: false,\n toc: toc,\n },\n () => {\n tocChanged && tocChanged(toc)\n this.initReader()\n }\n )\n })\n }\n\n componentWillUnmount() {\n if (this.book) {\n this.book.destroy()\n }\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n document.removeEventListener('keyup', this.handleKeyPress, false)\n }\n\n shouldComponentUpdate(nextProps: IEpubViewProps) {\n return (\n !this.state.isLoaded ||\n nextProps.location !== this.props.location ||\n nextProps.url !== this.props.url\n )\n }\n\n componentDidUpdate(prevProps: IEpubViewProps) {\n if (\n prevProps.location !== this.props.location &&\n this.location !== this.props.location\n ) {\n this.rendition?.display(this.props.location + '')\n }\n if (prevProps.url !== this.props.url) {\n this.initBook()\n }\n }\n\n initReader() {\n const { toc } = this.state\n const { location, epubOptions, getRendition } = this.props\n if (this.viewerRef.current) {\n const node = this.viewerRef.current\n if (this.book) {\n const rendition = this.book.renderTo(node, {\n width: '100%',\n height: '100%',\n ...epubOptions,\n })\n this.rendition = rendition\n this.prevPage = () => {\n rendition.prev()\n }\n this.nextPage = () => {\n rendition.next()\n }\n this.registerEvents()\n getRendition && getRendition(rendition)\n\n if (typeof location === 'string' || typeof location === 'number') {\n rendition.display(location + '')\n } else if (toc.length > 0 && toc[0].href) {\n rendition.display(toc[0].href)\n } else {\n rendition.display()\n }\n }\n }\n }\n\n registerEvents() {\n const { handleKeyPress, handleTextSelected } = this.props\n if (this.rendition) {\n this.rendition.on('locationChanged', this.onLocationChange)\n this.rendition.on('keyup', handleKeyPress || this.handleKeyPress)\n if (handleTextSelected) {\n this.rendition.on('selected', handleTextSelected)\n }\n }\n }\n\n onLocationChange = (loc: Location) => {\n const { location, locationChanged } = this.props\n const newLocation = `${loc.start}`\n if (location !== newLocation) {\n this.location = newLocation\n locationChanged && locationChanged(newLocation)\n }\n }\n\n renderBook() {\n const { epubViewStyles = defaultStyles } = this.props\n return <div ref={this.viewerRef} style={epubViewStyles.view} />\n }\n\n handleKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight' && this.nextPage) {\n this.nextPage()\n }\n if (event.key === 'ArrowLeft' && this.prevPage) {\n this.prevPage()\n }\n }\n\n render() {\n const { isLoaded, isError } = this.state\n const { loadingView = null, errorView = null, epubViewStyles = defaultStyles } = this.props\n return (\n <div style={epubViewStyles.viewHolder}>\n {isLoaded && this.renderBook()}\n {!isLoaded && !isError && loadingView}\n {!isLoaded && isError && errorView}\n </div>\n )\n }\n}\n","import type { CSSProperties } from 'react'\n\nexport interface IReactReaderStyle {\n container: CSSProperties\n readerArea: CSSProperties\n containerExpanded: CSSProperties\n titleArea: CSSProperties\n reader: CSSProperties\n swipeWrapper: CSSProperties\n prev: CSSProperties\n next: CSSProperties\n arrow: CSSProperties\n arrowHover: CSSProperties\n tocBackground: CSSProperties\n toc: CSSProperties\n tocArea: CSSProperties\n tocAreaButton: CSSProperties\n tocButton: CSSProperties\n tocButtonExpanded: CSSProperties\n tocButtonBar: CSSProperties\n tocButtonBarTop: CSSProperties\n loadingView: CSSProperties\n errorView: CSSProperties\n tocButtonBottom: CSSProperties\n}\n\nexport const ReactReaderStyle: IReactReaderStyle = {\n container: {\n overflow: 'hidden',\n position: 'relative',\n height: '100%',\n },\n readerArea: {\n position: 'relative',\n zIndex: 1,\n height: '100%',\n width: '100%',\n backgroundColor: '#fff',\n transition: 'all .3s ease',\n },\n containerExpanded: {\n transform: 'translateX(256px)',\n },\n titleArea: {\n position: 'absolute',\n top: 20,\n left: 50,\n right: 50,\n textAlign: 'center',\n color: '#999',\n },\n reader: {\n position: 'absolute',\n top: 50,\n left: 50,\n bottom: 20,\n right: 50,\n },\n swipeWrapper: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: 200,\n },\n prev: {\n left: 1,\n },\n next: {\n right: 1,\n },\n arrow: {\n outline: 'none',\n border: 'none',\n background: 'none',\n position: 'absolute',\n top: '50%',\n marginTop: -32,\n fontSize: 64,\n padding: '0 10px',\n color: '#E2E2E2',\n fontFamily: 'arial, sans-serif',\n cursor: 'pointer',\n userSelect: 'none',\n appearance: 'none',\n fontWeight: 'normal',\n },\n arrowHover: {\n color: '#777',\n },\n toc: {},\n tocBackground: {\n position: 'absolute',\n left: 256,\n top: 0,\n bottom: 0,\n right: 0,\n zIndex: 1,\n },\n tocArea: {\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n zIndex: 0,\n width: 256,\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n background: '#f2f2f2',\n padding: '10px 0',\n },\n tocAreaButton: {\n userSelect: 'none',\n appearance: 'none',\n background: 'none',\n border: 'none',\n display: 'block',\n fontFamily: 'sans-serif',\n width: '100%',\n fontSize: '.9em',\n textAlign: 'left',\n padding: '.9em 1em',\n borderBottom: '1px solid #ddd',\n color: '#aaa',\n boxSizing: 'border-box',\n outline: 'none',\n cursor: 'pointer',\n },\n tocButton: {\n background: 'none',\n border: 'none',\n width: 32,\n height: 32,\n position: 'absolute',\n top: 10,\n left: 10,\n borderRadius: 2,\n outline: 'none',\n cursor: 'pointer',\n },\n tocButtonExpanded: {\n background: '#f2f2f2',\n },\n tocButtonBar: {\n position: 'absolute',\n width: '60%',\n background: '#ccc',\n height: 2,\n left: '50%',\n margin: '-1px -30%',\n top: '50%',\n transition: 'all .5s ease',\n },\n tocButtonBarTop: {\n top: '35%',\n },\n tocButtonBottom: {\n top: '66%',\n },\n loadingView: {\n position: 'absolute',\n top: '50%',\n left: '10%',\n right: '10%',\n color: '#ccc',\n textAlign: 'center',\n marginTop: '-.5em',\n },\n errorView: {\n position: 'absolute',\n top: '50%',\n left: '10%',\n right: '10%',\n color: '#c00',\n textAlign: 'center',\n marginTop: '-.5em',\n },\n}\n","import React, { type CSSProperties, PureComponent, type ReactNode } from 'react'\nimport {\n type SwipeableProps,\n type SwipeEventData,\n useSwipeable,\n} from 'react-swipeable'\nimport { EpubView, type IEpubViewStyle, type IEpubViewProps } from '..'\nimport {\n ReactReaderStyle as defaultStyles,\n type IReactReaderStyle,\n} from './style'\nimport { type NavItem } from 'epubjs'\n\ntype SwipeWrapperProps = {\n children: ReactNode\n swipeProps: Partial<SwipeableProps>\n}\n\nconst SwipeWrapper = ({ children, swipeProps }: SwipeWrapperProps) => {\n const handlers = useSwipeable(swipeProps)\n return (\n <div style={{ height: '100%' }} {...handlers}>\n {children}\n </div>\n )\n}\n\ntype TocItemProps = {\n data: NavItem\n setLocation: (value: string) => void\n styles?: CSSProperties\n}\n\nconst TocItem = ({ data, setLocation, styles }: TocItemProps) => (\n <div>\n <button onClick={() => setLocation(data.href)} style={styles}>\n {data.label}\n </button>\n {data.subitems && data.subitems.length > 0 && (\n <div style={{ paddingLeft: 10 }}>\n {data.subitems.map((item, i) => (\n <TocItem\n key={i}\n data={item}\n styles={styles}\n setLocation={setLocation}\n />\n ))}\n </div>\n )}\n </div>\n)\n\nexport type IReactReaderProps = IEpubViewProps & {\n title?: string\n showToc?: boolean\n readerStyles?: IReactReaderStyle\n epubViewStyles?: IEpubViewStyle\n swipeable?: boolean\n isRTL?: boolean\n pageTurnOnScroll?: boolean\n searchQuery?: string\n contextLength?: number\n onSearchResults?: (results: SearchResult[]) => void\n}\n\ntype SearchResult = { cfi: string; excerpt: string }\n\ntype IReactReaderState = {\n isLoaded: boolean\n expandedToc: boolean\n toc: NavItem[]\n}\n\nexport class ReactReader extends PureComponent<\n IReactReaderProps,\n IReactReaderState\n> {\n state: Readonly<IReactReaderState> = {\n isLoaded: false,\n expandedToc: false,\n toc: [],\n }\n readerRef = React.createRef<EpubView>()\n constructor(props: IReactReaderProps) {\n super(props)\n }\n toggleToc = () => {\n this.setState({\n expandedToc: !this.state.expandedToc,\n })\n }\n\n next = () => {\n const node = this.readerRef.current\n if (node && node.nextPage) {\n node.nextPage()\n }\n }\n\n prev = () => {\n const node = this.readerRef.current\n if (node && node.prevPage) {\n node.prevPage()\n }\n }\n\n onTocChange = (toc: NavItem[]) => {\n const { tocChanged } = this.props\n this.setState(\n {\n toc: toc,\n },\n () => tocChanged && tocChanged(toc)\n )\n }\n\n renderToc() {\n const { toc, expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <div>\n <div style={readerStyles.tocArea}>\n <div style={readerStyles.toc}>\n {toc.map((item, i) => (\n <TocItem\n data={item}\n key={i}\n setLocation={this.setLocation}\n styles={readerStyles.tocAreaButton}\n />\n ))}\n </div>\n </div>\n {expandedToc && (\n <div style={readerStyles.tocBackground} onClick={this.toggleToc} />\n )}\n </div>\n )\n }\n\n setLocation = (loc: string) => {\n const { locationChanged } = this.props\n this.setState(\n {\n expandedToc: false,\n },\n () => locationChanged && locationChanged(loc)\n )\n }\n\n renderTocToggle() {\n const { expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <button\n style={Object.assign(\n {},\n readerStyles.tocButton,\n expandedToc ? readerStyles.tocButtonExpanded : {}\n )}\n onClick={this.toggleToc}\n >\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBarTop\n )}\n />\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBottom\n )}\n />\n </button>\n )\n }\n\n // Changing Page based on direction of scroll\n handleWheel = (event: WheelEvent) => {\n event.preventDefault()\n\n const node = this.readerRef.current\n if (!node) return\n\n if (event.deltaY > 0) {\n node.nextPage?.()\n } else if (event.deltaY < 0) {\n node.prevPage?.()\n }\n }\n\n // Setting up event listener in the iframe of the viewer\n attachWheelListener = () => {\n if (!this.readerRef.current) return\n\n const rendition = this.readerRef.current.rendition\n\n if (rendition) {\n rendition.hooks.content.register(\n (contents: { window: { document: any } }) => {\n const iframeDoc = contents.window.document\n\n // Remove any existing listener before adding a new one\n iframeDoc.removeEventListener('wheel', this.handleWheel)\n iframeDoc.addEventListener('wheel', this.handleWheel, {\n passive: false,\n })\n }\n )\n }\n }\n\n //search function to find all occurence and set amount of charecters for context\n searchInBook = async (query?: string) => {\n if (!this.readerRef.current) return\n const rendition = this.readerRef.current?.rendition\n const book = rendition?.book\n if (!book) return\n\n if (!query) {\n this.props.onSearchResults?.([])\n return\n }\n\n await book.ready\n const results: SearchResult[] = []\n const promises: Promise<void>[] = []\n\n book.spine.each((item: any) => {\n if (query == '' || query == null) results\n const promise = (async () => {\n try {\n await item.load(book.load.bind(book))\n const doc = item.document\n const textNodes: Node[] = []\n\n const treeWalker = doc.createTreeWalker(\n doc,\n NodeFilter.SHOW_TEXT,\n null,\n false\n )\n let node\n while ((node = treeWalker.nextNode())) {\n textNodes.push(node)\n }\n\n const fullText = textNodes\n .map((n) => n.textContent)\n .join('')\n .toLowerCase()\n const searchQuery = query.toLowerCase()\n let pos = fullText.indexOf(searchQuery)\n\n while (pos !== -1) {\n let nodeIndex = 0\n let foundOffset = pos\n\n while (nodeIndex < textNodes.length) {\n const nodeText = textNodes[nodeIndex].textContent || ''\n if (foundOffset < nodeText.length) break\n foundOffset -= nodeText.length\n nodeIndex++\n }\n\n if (nodeIndex < textNodes.length) {\n let range = doc.createRange()\n try {\n range.setStart(textNodes[nodeIndex], foundOffset)\n range.setEnd(\n textNodes[nodeIndex],\n foundOffset + searchQuery.length\n )\n const cfi = item.cfiFromRange(range)\n const excerpt = `${fullText.substring(\n Math.max(0, pos - (this.props.contextLength || 15)),\n pos + searchQuery.length + (this.props.contextLength || 15)\n )}`\n\n results.push({ cfi, excerpt })\n } catch (e) {\n console.warn('Skipping invalid range:', e)\n }\n }\n\n pos = fullText.indexOf(searchQuery, pos + 1)\n }\n\n item.unload()\n } catch (error) {\n console.error('Error searching chapter:', error)\n }\n })()\n promises.push(promise)\n })\n\n await Promise.all(promises)\n //Fix for Search Result of previous query retaining when\n if (query == this.props.searchQuery) {\n this.props.onSearchResults?.(results) //passing result as an array of objects with cfi and excerpt\n }\n }\n\n //Actions to perform when the component updates\n componentDidUpdate(prevProps: IReactReaderProps) {\n //searching only when new search query is passed\n if (prevProps.searchQuery !== this.props.searchQuery) {\n this.searchInBook(this.props.searchQuery)\n }\n\n //attaching the wheel listner only when pageTurnOnScroll is set as true\n if (this.props.pageTurnOnScroll === true) {\n this.attachWheelListener()\n }\n }\n\n render() {\n const {\n title,\n showToc = true,\n loadingView,\n errorView,\n readerStyles = defaultStyles,\n locationChanged,\n swipeable,\n epubViewStyles,\n isRTL = false,\n pageTurnOnScroll = false,\n searchQuery,\n contextLength,\n ...props\n } = this.props\n const { toc, expandedToc } = this.state\n return (\n <div style={readerStyles.container}>\n <div\n style={Object.assign(\n {},\n readerStyles.readerArea,\n expandedToc ? readerStyles.containerExpanded : {}\n )}\n >\n {showToc && this.renderTocToggle()}\n <div style={readerStyles.titleArea}>{title}</div>\n <SwipeWrapper\n swipeProps={{\n onSwiped: (eventData: SwipeEventData) => {\n const { dir } = eventData\n if (dir === 'Left') {\n isRTL ? this.prev() : this.next()\n }\n if (dir === 'Right') {\n isRTL ? this.next() : this.prev()\n }\n },\n onTouchStartOrOnMouseDown: ({ event }) => event.preventDefault(),\n touchEventOptions: { passive: false },\n preventScrollOnSwipe: true,\n trackMouse: true,\n }}\n >\n <div style={readerStyles.reader}>\n <EpubView\n ref={this.readerRef}\n loadingView={\n loadingView === undefined ? (\n <div style={readerStyles.loadingView}>Loading…</div>\n ) : (\n loadingView\n )\n }\n errorView={\n errorView === undefined ? (\n <div style={readerStyles.errorView}>Error loading book</div>\n ) : (\n errorView\n )\n }\n epubViewStyles={epubViewStyles}\n {...props}\n tocChanged={this.onTocChange}\n locationChanged={locationChanged}\n />\n {swipeable && <div style={readerStyles.swipeWrapper} />}\n </div>\n </SwipeWrapper>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.prev)}\n onClick={isRTL ? this.next : this.prev}\n >\n ‹\n </button>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.next)}\n onClick={isRTL ? this.prev : this.next}\n >\n ›\n </button>\n </div>\n {showToc && toc && this.renderToc()}\n </div>\n )\n }\n}\n"],"names":["defaultStyles"],"mappings":";;;;;;;AAOO,MAAM,gBAAgC;AAAA,EAC3C,YAAY;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,EAAA;AAEZ;ACqBO,MAAM,iBAAiB,UAA0C;AAAA,EAatE,YAAY,OAAuB;AACjC,UAAM,KAAK;AAbb,iCAAkC;AAAA,MAChC,UAAU;AAAA,MACV,SAAS;AAAA,MACT,KAAK,CAAA;AAAA,IACP;AACA,qCAAY,MAAM,UAA0B;AAC5C;AACA;AACA;AACA;AACA;AA8GA,4CAAmB,CAAC,QAAkB;AACpC,YAAM,EAAE,UAAU,gBAAgB,IAAI,KAAK;AACrC,YAAA,cAAc,GAAG,IAAI,KAAK;AAChC,UAAI,aAAa,aAAa;AAC5B,aAAK,WAAW;AAChB,2BAAmB,gBAAgB,WAAW;AAAA,MAAA;AAAA,IAElD;AAOA,0CAAiB,CAAC,UAAyB;AACzC,UAAI,MAAM,QAAQ,gBAAgB,KAAK,UAAU;AAC/C,aAAK,SAAS;AAAA,MAAA;AAEhB,UAAI,MAAM,QAAQ,eAAe,KAAK,UAAU;AAC9C,aAAK,SAAS;AAAA,MAAA;AAAA,IAElB;AA/HE,SAAK,WAAW,MAAM;AACtB,SAAK,OAAO,KAAK,YAAY,KAAK,WAAW,KAAK,WAAW;AAAA,EAAA;AAAA,EAG/D,oBAAoB;AAClB,SAAK,SAAS;AACd,aAAS,iBAAiB,SAAS,KAAK,gBAAgB,KAAK;AAAA,EAAA;AAAA,EAG/D,WAAW;AACT,UAAM,EAAE,KAAK,YAAY,oBAAoB,KAAK;AAClD,QAAI,KAAK,MAAM;AACb,WAAK,KAAK,QAAQ;AAAA,IAAA;AAEf,SAAA,OAAO,KAAK,KAAK,eAAe;AACrC,SAAK,KAAK,GAAG,cAAc,CAAC,UAAiB;AAC3C,WAAK,SAAS;AAAA,QACZ,SAAS;AAAA,MAAA,CACV;AAAA,IAAA,CACF;AACD,SAAK,KAAK,OAAO,WAAW,KAAK,CAAC,EAAE,UAAU;AACvC,WAAA;AAAA,QACH;AAAA,UACE,UAAU;AAAA,UACV,SAAS;AAAA,UACT;AAAA,QACF;AAAA,QACA,MAAM;AACJ,wBAAc,WAAW,GAAG;AAC5B,eAAK,WAAW;AAAA,QAAA;AAAA,MAEpB;AAAA,IAAA,CACD;AAAA,EAAA;AAAA,EAGH,uBAAuB;AACrB,QAAI,KAAK,MAAM;AACb,WAAK,KAAK,QAAQ;AAAA,IAAA;AAEpB,SAAK,OAAO,KAAK,YAAY,KAAK,WAAW,KAAK,WAAW;AAC7D,aAAS,oBAAoB,SAAS,KAAK,gBAAgB,KAAK;AAAA,EAAA;AAAA,EAGlE,sBAAsB,WAA2B;AAC/C,WACE,CAAC,KAAK,MAAM,YACZ,UAAU,aAAa,KAAK,MAAM,YAClC,UAAU,QAAQ,KAAK,MAAM;AAAA,EAAA;AAAA,EAIjC,mBAAmB,WAA2B;;AAE1C,QAAA,UAAU,aAAa,KAAK,MAAM,YAClC,KAAK,aAAa,KAAK,MAAM,UAC7B;AACA,iBAAK,cAAL,mBAAgB,QAAQ,KAAK,MAAM,WAAW;AAAA,IAAE;AAElD,QAAI,UAAU,QAAQ,KAAK,MAAM,KAAK;AACpC,WAAK,SAAS;AAAA,IAAA;AAAA,EAChB;AAAA,EAGF,aAAa;AACL,UAAA,EAAE,QAAQ,KAAK;AACrB,UAAM,EAAE,UAAU,aAAa,iBAAiB,KAAK;AACjD,QAAA,KAAK,UAAU,SAAS;AACpB,YAAA,OAAO,KAAK,UAAU;AAC5B,UAAI,KAAK,MAAM;AACb,cAAM,YAAY,KAAK,KAAK,SAAS,MAAM;AAAA,UACzC,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,GAAG;AAAA,QAAA,CACJ;AACD,aAAK,YAAY;AACjB,aAAK,WAAW,MAAM;AACpB,oBAAU,KAAK;AAAA,QACjB;AACA,aAAK,WAAW,MAAM;AACpB,oBAAU,KAAK;AAAA,QACjB;AACA,aAAK,eAAe;AACpB,wBAAgB,aAAa,SAAS;AAEtC,YAAI,OAAO,aAAa,YAAY,OAAO,aAAa,UAAU;AACtD,oBAAA,QAAQ,WAAW,EAAE;AAAA,QAAA,WACtB,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE,MAAM;AACxC,oBAAU,QAAQ,IAAI,CAAC,EAAE,IAAI;AAAA,QAAA,OACxB;AACL,oBAAU,QAAQ;AAAA,QAAA;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAGF,iBAAiB;AACf,UAAM,EAAE,gBAAgB,mBAAmB,IAAI,KAAK;AACpD,QAAI,KAAK,WAAW;AAClB,WAAK,UAAU,GAAG,mBAAmB,KAAK,gBAAgB;AAC1D,WAAK,UAAU,GAAG,SAAS,kBAAkB,KAAK,cAAc;AAChE,UAAI,oBAAoB;AACjB,aAAA,UAAU,GAAG,YAAY,kBAAkB;AAAA,MAAA;AAAA,IAClD;AAAA,EACF;AAAA,EAYF,aAAa;AACX,UAAM,EAAE,iBAAiBA,cAAc,IAAI,KAAK;AAChD,+BAAQ,OAAI,EAAA,KAAK,KAAK,WAAW,OAAO,eAAe,MAAM;AAAA,EAAA;AAAA,EAY/D,SAAS;AACP,UAAM,EAAE,UAAU,QAAQ,IAAI,KAAK;AAC7B,UAAA,EAAE,cAAc,MAAM,YAAY,MAAM,iBAAiBA,kBAAkB,KAAK;AACtF,WACG,qBAAA,OAAA,EAAI,OAAO,eAAe,YACxB,UAAA;AAAA,MAAA,YAAY,KAAK,WAAW;AAAA,MAC5B,CAAC,YAAY,CAAC,WAAW;AAAA,MACzB,CAAC,YAAY,WAAW;AAAA,IAAA,GAC3B;AAAA,EAAA;AAGN;ACtKO,MAAM,mBAAsC;AAAA,EACjD,WAAW;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,YAAY;AAAA,EACd;AAAA,EACA,mBAAmB;AAAA,IACjB,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,KAAK,CAAC;AAAA,EACN,eAAe;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,yBAAyB;AAAA,IACzB,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AAAA,IACd,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,IACjB,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,KAAK;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,IACf,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,EAAA;AAEf;AChKA,MAAM,eAAe,CAAC,EAAE,UAAU,iBAAoC;AAC9D,QAAA,WAAW,aAAa,UAAU;AAEtC,SAAA,oBAAC,SAAI,OAAO,EAAE,QAAQ,UAAW,GAAG,UACjC,UACH;AAEJ;AAQA,MAAM,UAAU,CAAC,EAAE,MAAM,aAAa,OAAO,2BAC1C,OACC,EAAA,UAAA;AAAA,EAAC,oBAAA,UAAA,EAAO,SAAS,MAAM,YAAY,KAAK,IAAI,GAAG,OAAO,QACnD,UAAA,KAAK,MACR,CAAA;AAAA,EACC,KAAK,YAAY,KAAK,SAAS,SAAS,yBACtC,OAAI,EAAA,OAAO,EAAE,aAAa,MACxB,UAAA,KAAK,SAAS,IAAI,CAAC,MAAM,MACxB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA;AAAA,IAHK;AAAA,EAAA,CAKR,EACH,CAAA;AAAA,GAEJ;AAwBK,MAAM,oBAAoB,cAG/B;AAAA,EAOA,YAAY,OAA0B;AACpC,UAAM,KAAK;AAPb,iCAAqC;AAAA,MACnC,UAAU;AAAA,MACV,aAAa;AAAA,MACb,KAAK,CAAA;AAAA,IACP;AACA,qCAAY,MAAM,UAAoB;AAItC,qCAAY,MAAM;AAChB,WAAK,SAAS;AAAA,QACZ,aAAa,CAAC,KAAK,MAAM;AAAA,MAAA,CAC1B;AAAA,IACH;AAEA,gCAAO,MAAM;AACL,YAAA,OAAO,KAAK,UAAU;AACxB,UAAA,QAAQ,KAAK,UAAU;AACzB,aAAK,SAAS;AAAA,MAAA;AAAA,IAElB;AAEA,gCAAO,MAAM;AACL,YAAA,OAAO,KAAK,UAAU;AACxB,UAAA,QAAQ,KAAK,UAAU;AACzB,aAAK,SAAS;AAAA,MAAA;AAAA,IAElB;AAEA,uCAAc,CAAC,QAAmB;AAC1B,YAAA,EAAE,eAAe,KAAK;AACvB,WAAA;AAAA,QACH;AAAA,UACE;AAAA,QACF;AAAA,QACA,MAAM,cAAc,WAAW,GAAG;AAAA,MACpC;AAAA,IACF;AA0BA,uCAAc,CAAC,QAAgB;AACvB,YAAA,EAAE,oBAAoB,KAAK;AAC5B,WAAA;AAAA,QACH;AAAA,UACE,aAAa;AAAA,QACf;AAAA,QACA,MAAM,mBAAmB,gBAAgB,GAAG;AAAA,MAC9C;AAAA,IACF;AAiCA;AAAA,uCAAc,CAAC,UAAsB;;AACnC,YAAM,eAAe;AAEf,YAAA,OAAO,KAAK,UAAU;AAC5B,UAAI,CAAC,KAAM;AAEP,UAAA,MAAM,SAAS,GAAG;AACpB,mBAAK,aAAL;AAAA,MAAgB,WACP,MAAM,SAAS,GAAG;AAC3B,mBAAK,aAAL;AAAA,MAAgB;AAAA,IAEpB;AAGA;AAAA,+CAAsB,MAAM;AACtB,UAAA,CAAC,KAAK,UAAU,QAAS;AAEvB,YAAA,YAAY,KAAK,UAAU,QAAQ;AAEzC,UAAI,WAAW;AACb,kBAAU,MAAM,QAAQ;AAAA,UACtB,CAAC,aAA4C;AACrC,kBAAA,YAAY,SAAS,OAAO;AAGxB,sBAAA,oBAAoB,SAAS,KAAK,WAAW;AAC7C,sBAAA,iBAAiB,SAAS,KAAK,aAAa;AAAA,cACpD,SAAS;AAAA,YAAA,CACV;AAAA,UAAA;AAAA,QAEL;AAAA,MAAA;AAAA,IAEJ;AAGA;AAAA,wCAAe,OAAO,UAAmB;;AACnC,UAAA,CAAC,KAAK,UAAU,QAAS;AACvB,YAAA,aAAY,UAAK,UAAU,YAAf,mBAAwB;AAC1C,YAAM,OAAO,uCAAW;AACxB,UAAI,CAAC,KAAM;AAEX,UAAI,CAAC,OAAO;AACL,yBAAA,OAAM,oBAAN,4BAAwB;AAC7B;AAAA,MAAA;AAGF,YAAM,KAAK;AACX,YAAM,UAA0B,CAAC;AACjC,YAAM,WAA4B,CAAC;AAE9B,WAAA,MAAM,KAAK,CAAC,SAAc;AAE7B,cAAM,WAAW,YAAY;AACvB,cAAA;AACF,kBAAM,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;AACpC,kBAAM,MAAM,KAAK;AACjB,kBAAM,YAAoB,CAAC;AAE3B,kBAAM,aAAa,IAAI;AAAA,cACrB;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA;AAAA,YACF;AACI,gBAAA;AACI,mBAAA,OAAO,WAAW,YAAa;AACrC,wBAAU,KAAK,IAAI;AAAA,YAAA;AAGf,kBAAA,WAAW,UACd,IAAI,CAAC,MAAM,EAAE,WAAW,EACxB,KAAK,EAAE,EACP,YAAY;AACT,kBAAA,cAAc,MAAM,YAAY;AAClC,gBAAA,MAAM,SAAS,QAAQ,WAAW;AAEtC,mBAAO,QAAQ,IAAI;AACjB,kBAAI,YAAY;AAChB,kBAAI,cAAc;AAEX,qBAAA,YAAY,UAAU,QAAQ;AACnC,sBAAM,WAAW,UAAU,SAAS,EAAE,eAAe;AACjD,oBAAA,cAAc,SAAS,OAAQ;AACnC,+BAAe,SAAS;AACxB;AAAA,cAAA;AAGE,kBAAA,YAAY,UAAU,QAAQ;AAC5B,oBAAA,QAAQ,IAAI,YAAY;AACxB,oBAAA;AACF,wBAAM,SAAS,UAAU,SAAS,GAAG,WAAW;AAC1C,wBAAA;AAAA,oBACJ,UAAU,SAAS;AAAA,oBACnB,cAAc,YAAY;AAAA,kBAC5B;AACM,wBAAA,MAAM,KAAK,aAAa,KAAK;AAC7B,wBAAA,UAAU,GAAG,SAAS;AAAA,oBAC1B,KAAK,IAAI,GAAG,OAAO,KAAK,MAAM,iBAAiB,GAAG;AAAA,oBAClD,MAAM,YAAY,UAAU,KAAK,MAAM,iBAAiB;AAAA,kBAAA,CACzD;AAED,0BAAQ,KAAK,EAAE,KAAK,QAAA,CAAS;AAAA,yBACtB,GAAG;AACF,0BAAA,KAAK,2BAA2B,CAAC;AAAA,gBAAA;AAAA,cAC3C;AAGF,oBAAM,SAAS,QAAQ,aAAa,MAAM,CAAC;AAAA,YAAA;AAG7C,iBAAK,OAAO;AAAA,mBACL,OAAO;AACN,oBAAA,MAAM,4BAA4B,KAAK;AAAA,UAAA;AAAA,QACjD,GACC;AACH,iBAAS,KAAK,OAAO;AAAA,MAAA,CACtB;AAEK,YAAA,QAAQ,IAAI,QAAQ;AAEtB,UAAA,SAAS,KAAK,MAAM,aAAa;AAC9B,yBAAA,OAAM,oBAAN,4BAAwB;AAAA,MAAO;AAAA,IAExC;AAAA,EA5Na;AAAA,EAgCb,YAAY;AACV,UAAM,EAAE,KAAK,YAAY,IAAI,KAAK;AAClC,UAAM,EAAE,eAAeA,iBAAc,IAAI,KAAK;AAC9C,gCACG,OACC,EAAA,UAAA;AAAA,MAAA,oBAAC,OAAI,EAAA,OAAO,aAAa,SACvB,UAAC,oBAAA,OAAA,EAAI,OAAO,aAAa,KACtB,UAAA,IAAI,IAAI,CAAC,MAAM,MACd;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UAEN,aAAa,KAAK;AAAA,UAClB,QAAQ,aAAa;AAAA,QAAA;AAAA,QAFhB;AAAA,MAAA,CAIR,GACH,EACF,CAAA;AAAA,MACC,mCACE,OAAI,EAAA,OAAO,aAAa,eAAe,SAAS,KAAK,UAAW,CAAA;AAAA,IAAA,GAErE;AAAA,EAAA;AAAA,EAcJ,kBAAkB;AACV,UAAA,EAAE,gBAAgB,KAAK;AAC7B,UAAM,EAAE,eAAeA,iBAAc,IAAI,KAAK;AAE5C,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,OAAO;AAAA,UACZ,CAAC;AAAA,UACD,aAAa;AAAA,UACb,cAAc,aAAa,oBAAoB,CAAA;AAAA,QACjD;AAAA,QACA,SAAS,KAAK;AAAA,QAEd,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO;AAAA,gBACZ,CAAC;AAAA,gBACD,aAAa;AAAA,gBACb,aAAa;AAAA,cAAA;AAAA,YACf;AAAA,UACF;AAAA,UACA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO;AAAA,gBACZ,CAAC;AAAA,gBACD,aAAa;AAAA,gBACb,aAAa;AAAA,cAAA;AAAA,YACf;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAAA;AAAA,EAmIJ,mBAAmB,WAA8B;AAE/C,QAAI,UAAU,gBAAgB,KAAK,MAAM,aAAa;AAC/C,WAAA,aAAa,KAAK,MAAM,WAAW;AAAA,IAAA;AAItC,QAAA,KAAK,MAAM,qBAAqB,MAAM;AACxC,WAAK,oBAAoB;AAAA,IAAA;AAAA,EAC3B;AAAA,EAGF,SAAS;AACD,UAAA;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,eAAeA;AAAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,GAAG;AAAA,QACD,KAAK;AACT,UAAM,EAAE,KAAK,YAAY,IAAI,KAAK;AAClC,WACG,qBAAA,OAAA,EAAI,OAAO,aAAa,WACvB,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,OAAO;AAAA,YACZ,CAAC;AAAA,YACD,aAAa;AAAA,YACb,cAAc,aAAa,oBAAoB,CAAA;AAAA,UACjD;AAAA,UAEC,UAAA;AAAA,YAAA,WAAW,KAAK,gBAAgB;AAAA,YAChC,oBAAA,OAAA,EAAI,OAAO,aAAa,WAAY,UAAM,OAAA;AAAA,YAC3C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,YAAY;AAAA,kBACV,UAAU,CAAC,cAA8B;AACjC,0BAAA,EAAE,QAAQ;AAChB,wBAAI,QAAQ,QAAQ;AAClB,8BAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,oBAAA;AAElC,wBAAI,QAAQ,SAAS;AACnB,8BAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,oBAAA;AAAA,kBAEpC;AAAA,kBACA,2BAA2B,CAAC,EAAE,YAAY,MAAM,eAAe;AAAA,kBAC/D,mBAAmB,EAAE,SAAS,MAAM;AAAA,kBACpC,sBAAsB;AAAA,kBACtB,YAAY;AAAA,gBACd;AAAA,gBAEA,UAAC,qBAAA,OAAA,EAAI,OAAO,aAAa,QACvB,UAAA;AAAA,kBAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAK,KAAK;AAAA,sBACV,aACE,gBAAgB,SACd,oBAAC,SAAI,OAAO,aAAa,aAAa,UAAA,WAAA,CAAQ,IAE9C;AAAA,sBAGJ,WACE,cAAc,SACZ,oBAAC,SAAI,OAAO,aAAa,WAAW,UAAA,qBAAA,CAAkB,IAEtD;AAAA,sBAGJ;AAAA,sBACC,GAAG;AAAA,sBACJ,YAAY,KAAK;AAAA,sBACjB;AAAA,oBAAA;AAAA,kBACF;AAAA,kBACC,aAAa,oBAAC,OAAI,EAAA,OAAO,aAAa,aAAc,CAAA;AAAA,gBAAA,EACvD,CAAA;AAAA,cAAA;AAAA,YACF;AAAA,YACA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,OAAO,OAAO,CAAA,GAAI,aAAa,OAAO,aAAa,IAAI;AAAA,gBAC9D,SAAS,QAAQ,KAAK,OAAO,KAAK;AAAA,gBACnC,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,YACA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,OAAO,OAAO,CAAA,GAAI,aAAa,OAAO,aAAa,IAAI;AAAA,gBAC9D,SAAS,QAAQ,KAAK,OAAO,KAAK;AAAA,gBACnC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA;AAAA,MACF;AAAA,MACC,WAAW,OAAO,KAAK,UAAU;AAAA,IAAA,GACpC;AAAA,EAAA;AAGN;"}

@@ -23,2 +23,3 @@ (function(global, factory) {

isLoaded: false,
isError: false,
toc: []

@@ -61,2 +62,7 @@ });

this.book = Epub(url, epubInitOptions);
this.book.on("openFailed", (error) => {
this.setState({
isError: true
});
});
this.book.loaded.navigation.then(({ toc }) => {

@@ -66,2 +72,3 @@ this.setState(

isLoaded: true,
isError: false,
toc

@@ -140,5 +147,9 @@ },

render() {
const { isLoaded } = this.state;
const { loadingView = null, epubViewStyles = EpubViewStyle } = this.props;
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: epubViewStyles.viewHolder, children: isLoaded && this.renderBook() || loadingView });
const { isLoaded, isError } = this.state;
const { loadingView = null, errorView = null, epubViewStyles = EpubViewStyle } = this.props;
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: epubViewStyles.viewHolder, children: [
isLoaded && this.renderBook(),
!isLoaded && !isError && loadingView,
!isLoaded && isError && errorView
] });
}

@@ -288,2 +299,11 @@ }

marginTop: "-.5em"
},
errorView: {
position: "absolute",
top: "50%",
left: "10%",
right: "10%",
color: "#c00",
textAlign: "center",
marginTop: "-.5em"
}

@@ -521,2 +541,3 @@ };

loadingView,
errorView,
readerStyles = ReactReaderStyle,

@@ -569,2 +590,3 @@ locationChanged,

loadingView: loadingView === void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: readerStyles.loadingView, children: "Loading…" }) : loadingView,
errorView: errorView === void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: readerStyles.errorView, children: "Error loading book" }) : errorView,
epubViewStyles,

@@ -571,0 +593,0 @@ ...props,

@@ -1,1 +0,1 @@

{"version":3,"file":"react-reader.umd.js","sources":["../lib/EpubView/style.ts","../lib/EpubView/EpubView.tsx","../lib/ReactReader/style.ts","../lib/ReactReader/ReactReader.tsx"],"sourcesContent":["import type { CSSProperties } from 'react'\n\nexport interface IEpubViewStyle {\n viewHolder: CSSProperties\n view: CSSProperties\n}\n\nexport const EpubViewStyle: IEpubViewStyle = {\n viewHolder: {\n position: 'relative',\n height: '100%',\n width: '100%',\n },\n view: {\n height: '100%',\n },\n}\n","import React, { Component } from 'react'\nimport Epub, { Book } from 'epubjs'\nimport type { NavItem, Contents, Rendition, Location } from 'epubjs'\nimport { EpubViewStyle as defaultStyles, type IEpubViewStyle } from './style'\nimport type { RenditionOptions } from 'epubjs/types/rendition'\nimport type { BookOptions } from 'epubjs/types/book'\n\nexport type RenditionOptionsFix = RenditionOptions & {\n allowPopups: boolean\n}\n\nexport type IToc = {\n label: string\n href: string\n}\n\nexport type IEpubViewProps = {\n url: string | ArrayBuffer\n epubInitOptions?: Partial<BookOptions>\n epubOptions?: Partial<RenditionOptionsFix>\n epubViewStyles?: IEpubViewStyle\n loadingView?: React.ReactNode\n location: string | number | null\n locationChanged(value: string): void\n showToc?: boolean\n tocChanged?(value: NavItem[]): void\n getRendition?(rendition: Rendition): void\n handleKeyPress?(): void\n handleTextSelected?(cfiRange: string, contents: Contents): void\n}\ntype IEpubViewState = {\n isLoaded: boolean\n toc: NavItem[]\n}\n\nexport class EpubView extends Component<IEpubViewProps, IEpubViewState> {\n state: Readonly<IEpubViewState> = {\n isLoaded: false,\n toc: [],\n }\n viewerRef = React.createRef<HTMLDivElement>()\n location?: string | number | null\n book?: Book\n rendition?: Rendition\n prevPage?: () => void\n nextPage?: () => void\n\n constructor(props: IEpubViewProps) {\n super(props)\n this.location = props.location\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n }\n\n componentDidMount() {\n this.initBook()\n document.addEventListener('keyup', this.handleKeyPress, false)\n }\n\n initBook() {\n const { url, tocChanged, epubInitOptions } = this.props\n if (this.book) {\n this.book.destroy()\n }\n this.book = Epub(url, epubInitOptions)\n this.book.loaded.navigation.then(({ toc }) => {\n this.setState(\n {\n isLoaded: true,\n toc: toc,\n },\n () => {\n tocChanged && tocChanged(toc)\n this.initReader()\n }\n )\n })\n }\n\n componentWillUnmount() {\n if (this.book) {\n this.book.destroy()\n }\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n document.removeEventListener('keyup', this.handleKeyPress, false)\n }\n\n shouldComponentUpdate(nextProps: IEpubViewProps) {\n return (\n !this.state.isLoaded ||\n nextProps.location !== this.props.location ||\n nextProps.url !== this.props.url\n )\n }\n\n componentDidUpdate(prevProps: IEpubViewProps) {\n if (\n prevProps.location !== this.props.location &&\n this.location !== this.props.location\n ) {\n this.rendition?.display(this.props.location + '')\n }\n if (prevProps.url !== this.props.url) {\n this.initBook()\n }\n }\n\n initReader() {\n const { toc } = this.state\n const { location, epubOptions, getRendition } = this.props\n if (this.viewerRef.current) {\n const node = this.viewerRef.current\n if (this.book) {\n const rendition = this.book.renderTo(node, {\n width: '100%',\n height: '100%',\n ...epubOptions,\n })\n this.rendition = rendition\n this.prevPage = () => {\n rendition.prev()\n }\n this.nextPage = () => {\n rendition.next()\n }\n this.registerEvents()\n getRendition && getRendition(rendition)\n\n if (typeof location === 'string' || typeof location === 'number') {\n rendition.display(location + '')\n } else if (toc.length > 0 && toc[0].href) {\n rendition.display(toc[0].href)\n } else {\n rendition.display()\n }\n }\n }\n }\n\n registerEvents() {\n const { handleKeyPress, handleTextSelected } = this.props\n if (this.rendition) {\n this.rendition.on('locationChanged', this.onLocationChange)\n this.rendition.on('keyup', handleKeyPress || this.handleKeyPress)\n if (handleTextSelected) {\n this.rendition.on('selected', handleTextSelected)\n }\n }\n }\n\n onLocationChange = (loc: Location) => {\n const { location, locationChanged } = this.props\n const newLocation = `${loc.start}`\n if (location !== newLocation) {\n this.location = newLocation\n locationChanged && locationChanged(newLocation)\n }\n }\n\n renderBook() {\n const { epubViewStyles = defaultStyles } = this.props\n return <div ref={this.viewerRef} style={epubViewStyles.view} />\n }\n\n handleKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight' && this.nextPage) {\n this.nextPage()\n }\n if (event.key === 'ArrowLeft' && this.prevPage) {\n this.prevPage()\n }\n }\n\n render() {\n const { isLoaded } = this.state\n const { loadingView = null, epubViewStyles = defaultStyles } = this.props\n return (\n <div style={epubViewStyles.viewHolder}>\n {(isLoaded && this.renderBook()) || loadingView}\n </div>\n )\n }\n}\n","import type { CSSProperties } from 'react'\n\nexport interface IReactReaderStyle {\n container: CSSProperties\n readerArea: CSSProperties\n containerExpanded: CSSProperties\n titleArea: CSSProperties\n reader: CSSProperties\n swipeWrapper: CSSProperties\n prev: CSSProperties\n next: CSSProperties\n arrow: CSSProperties\n arrowHover: CSSProperties\n tocBackground: CSSProperties\n toc: CSSProperties\n tocArea: CSSProperties\n tocAreaButton: CSSProperties\n tocButton: CSSProperties\n tocButtonExpanded: CSSProperties\n tocButtonBar: CSSProperties\n tocButtonBarTop: CSSProperties\n loadingView: CSSProperties\n tocButtonBottom: CSSProperties\n}\n\nexport const ReactReaderStyle: IReactReaderStyle = {\n container: {\n overflow: 'hidden',\n position: 'relative',\n height: '100%',\n },\n readerArea: {\n position: 'relative',\n zIndex: 1,\n height: '100%',\n width: '100%',\n backgroundColor: '#fff',\n transition: 'all .3s ease',\n },\n containerExpanded: {\n transform: 'translateX(256px)',\n },\n titleArea: {\n position: 'absolute',\n top: 20,\n left: 50,\n right: 50,\n textAlign: 'center',\n color: '#999',\n },\n reader: {\n position: 'absolute',\n top: 50,\n left: 50,\n bottom: 20,\n right: 50,\n },\n swipeWrapper: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: 200,\n },\n prev: {\n left: 1,\n },\n next: {\n right: 1,\n },\n arrow: {\n outline: 'none',\n border: 'none',\n background: 'none',\n position: 'absolute',\n top: '50%',\n marginTop: -32,\n fontSize: 64,\n padding: '0 10px',\n color: '#E2E2E2',\n fontFamily: 'arial, sans-serif',\n cursor: 'pointer',\n userSelect: 'none',\n appearance: 'none',\n fontWeight: 'normal',\n },\n arrowHover: {\n color: '#777',\n },\n toc: {},\n tocBackground: {\n position: 'absolute',\n left: 256,\n top: 0,\n bottom: 0,\n right: 0,\n zIndex: 1,\n },\n tocArea: {\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n zIndex: 0,\n width: 256,\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n background: '#f2f2f2',\n padding: '10px 0',\n },\n tocAreaButton: {\n userSelect: 'none',\n appearance: 'none',\n background: 'none',\n border: 'none',\n display: 'block',\n fontFamily: 'sans-serif',\n width: '100%',\n fontSize: '.9em',\n textAlign: 'left',\n padding: '.9em 1em',\n borderBottom: '1px solid #ddd',\n color: '#aaa',\n boxSizing: 'border-box',\n outline: 'none',\n cursor: 'pointer',\n },\n tocButton: {\n background: 'none',\n border: 'none',\n width: 32,\n height: 32,\n position: 'absolute',\n top: 10,\n left: 10,\n borderRadius: 2,\n outline: 'none',\n cursor: 'pointer',\n },\n tocButtonExpanded: {\n background: '#f2f2f2',\n },\n tocButtonBar: {\n position: 'absolute',\n width: '60%',\n background: '#ccc',\n height: 2,\n left: '50%',\n margin: '-1px -30%',\n top: '50%',\n transition: 'all .5s ease',\n },\n tocButtonBarTop: {\n top: '35%',\n },\n tocButtonBottom: {\n top: '66%',\n },\n loadingView: {\n position: 'absolute',\n top: '50%',\n left: '10%',\n right: '10%',\n color: '#ccc',\n textAlign: 'center',\n marginTop: '-.5em',\n },\n}\n","import React, { type CSSProperties, PureComponent, type ReactNode } from 'react'\nimport {\n type SwipeableProps,\n type SwipeEventData,\n useSwipeable,\n} from 'react-swipeable'\nimport { EpubView, type IEpubViewStyle, type IEpubViewProps } from '..'\nimport {\n ReactReaderStyle as defaultStyles,\n type IReactReaderStyle,\n} from './style'\nimport { type NavItem } from 'epubjs'\n\ntype SwipeWrapperProps = {\n children: ReactNode\n swipeProps: Partial<SwipeableProps>\n}\n\nconst SwipeWrapper = ({ children, swipeProps }: SwipeWrapperProps) => {\n const handlers = useSwipeable(swipeProps)\n return (\n <div style={{ height: '100%' }} {...handlers}>\n {children}\n </div>\n )\n}\n\ntype TocItemProps = {\n data: NavItem\n setLocation: (value: string) => void\n styles?: CSSProperties\n}\n\nconst TocItem = ({ data, setLocation, styles }: TocItemProps) => (\n <div>\n <button onClick={() => setLocation(data.href)} style={styles}>\n {data.label}\n </button>\n {data.subitems && data.subitems.length > 0 && (\n <div style={{ paddingLeft: 10 }}>\n {data.subitems.map((item, i) => (\n <TocItem\n key={i}\n data={item}\n styles={styles}\n setLocation={setLocation}\n />\n ))}\n </div>\n )}\n </div>\n)\n\nexport type IReactReaderProps = IEpubViewProps & {\n title?: string\n showToc?: boolean\n readerStyles?: IReactReaderStyle\n epubViewStyles?: IEpubViewStyle\n swipeable?: boolean\n isRTL?: boolean\n pageTurnOnScroll?: boolean\n searchQuery?: string\n contextLength?: number\n onSearchResults?: (results: SearchResult[]) => void\n}\n\ntype SearchResult = { cfi: string; excerpt: string }\n\ntype IReactReaderState = {\n isLoaded: boolean\n expandedToc: boolean\n toc: NavItem[]\n}\n\nexport class ReactReader extends PureComponent<\n IReactReaderProps,\n IReactReaderState\n> {\n state: Readonly<IReactReaderState> = {\n isLoaded: false,\n expandedToc: false,\n toc: [],\n }\n readerRef = React.createRef<EpubView>()\n constructor(props: IReactReaderProps) {\n super(props)\n }\n toggleToc = () => {\n this.setState({\n expandedToc: !this.state.expandedToc,\n })\n }\n\n next = () => {\n const node = this.readerRef.current\n if (node && node.nextPage) {\n node.nextPage()\n }\n }\n\n prev = () => {\n const node = this.readerRef.current\n if (node && node.prevPage) {\n node.prevPage()\n }\n }\n\n onTocChange = (toc: NavItem[]) => {\n const { tocChanged } = this.props\n this.setState(\n {\n toc: toc,\n },\n () => tocChanged && tocChanged(toc)\n )\n }\n\n renderToc() {\n const { toc, expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <div>\n <div style={readerStyles.tocArea}>\n <div style={readerStyles.toc}>\n {toc.map((item, i) => (\n <TocItem\n data={item}\n key={i}\n setLocation={this.setLocation}\n styles={readerStyles.tocAreaButton}\n />\n ))}\n </div>\n </div>\n {expandedToc && (\n <div style={readerStyles.tocBackground} onClick={this.toggleToc} />\n )}\n </div>\n )\n }\n\n setLocation = (loc: string) => {\n const { locationChanged } = this.props\n this.setState(\n {\n expandedToc: false,\n },\n () => locationChanged && locationChanged(loc)\n )\n }\n\n renderTocToggle() {\n const { expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <button\n style={Object.assign(\n {},\n readerStyles.tocButton,\n expandedToc ? readerStyles.tocButtonExpanded : {}\n )}\n onClick={this.toggleToc}\n >\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBarTop\n )}\n />\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBottom\n )}\n />\n </button>\n )\n }\n\n // Changing Page based on direction of scroll\n handleWheel = (event: WheelEvent) => {\n event.preventDefault()\n\n const node = this.readerRef.current\n if (!node) return\n\n if (event.deltaY > 0) {\n node.nextPage?.()\n } else if (event.deltaY < 0) {\n node.prevPage?.()\n }\n }\n\n // Setting up event listener in the iframe of the viewer\n attachWheelListener = () => {\n if (!this.readerRef.current) return\n\n const rendition = this.readerRef.current.rendition\n\n if (rendition) {\n rendition.hooks.content.register(\n (contents: { window: { document: any } }) => {\n const iframeDoc = contents.window.document\n\n // Remove any existing listener before adding a new one\n iframeDoc.removeEventListener('wheel', this.handleWheel)\n iframeDoc.addEventListener('wheel', this.handleWheel, {\n passive: false,\n })\n }\n )\n }\n }\n\n //search function to find all occurence and set amount of charecters for context\n searchInBook = async (query?: string) => {\n if (!this.readerRef.current) return\n const rendition = this.readerRef.current?.rendition\n const book = rendition?.book\n if (!book) return\n\n if (!query) {\n this.props.onSearchResults?.([])\n return\n }\n\n await book.ready\n const results: SearchResult[] = []\n const promises: Promise<void>[] = []\n\n book.spine.each((item: any) => {\n if (query == '' || query == null) results\n const promise = (async () => {\n try {\n await item.load(book.load.bind(book))\n const doc = item.document\n const textNodes: Node[] = []\n\n const treeWalker = doc.createTreeWalker(\n doc,\n NodeFilter.SHOW_TEXT,\n null,\n false\n )\n let node\n while ((node = treeWalker.nextNode())) {\n textNodes.push(node)\n }\n\n const fullText = textNodes\n .map((n) => n.textContent)\n .join('')\n .toLowerCase()\n const searchQuery = query.toLowerCase()\n let pos = fullText.indexOf(searchQuery)\n\n while (pos !== -1) {\n let nodeIndex = 0\n let foundOffset = pos\n\n while (nodeIndex < textNodes.length) {\n const nodeText = textNodes[nodeIndex].textContent || ''\n if (foundOffset < nodeText.length) break\n foundOffset -= nodeText.length\n nodeIndex++\n }\n\n if (nodeIndex < textNodes.length) {\n let range = doc.createRange()\n try {\n range.setStart(textNodes[nodeIndex], foundOffset)\n range.setEnd(\n textNodes[nodeIndex],\n foundOffset + searchQuery.length\n )\n const cfi = item.cfiFromRange(range)\n const excerpt = `${fullText.substring(\n Math.max(0, pos - (this.props.contextLength || 15)),\n pos + searchQuery.length + (this.props.contextLength || 15)\n )}`\n\n results.push({ cfi, excerpt })\n } catch (e) {\n console.warn('Skipping invalid range:', e)\n }\n }\n\n pos = fullText.indexOf(searchQuery, pos + 1)\n }\n\n item.unload()\n } catch (error) {\n console.error('Error searching chapter:', error)\n }\n })()\n promises.push(promise)\n })\n\n await Promise.all(promises)\n //Fix for Search Result of previous query retaining when\n if (query == this.props.searchQuery) {\n this.props.onSearchResults?.(results) //passing result as an array of objects with cfi and excerpt\n }\n }\n\n //Actions to perform when the component updates\n componentDidUpdate(prevProps: IReactReaderProps) {\n //searching only when new search query is passed\n if (prevProps.searchQuery !== this.props.searchQuery) {\n this.searchInBook(this.props.searchQuery)\n }\n\n //attaching the wheel listner only when pageTurnOnScroll is set as true\n if (this.props.pageTurnOnScroll === true) {\n this.attachWheelListener()\n }\n }\n\n render() {\n const {\n title,\n showToc = true,\n loadingView,\n readerStyles = defaultStyles,\n locationChanged,\n swipeable,\n epubViewStyles,\n isRTL = false,\n pageTurnOnScroll = false,\n searchQuery,\n contextLength,\n ...props\n } = this.props\n const { toc, expandedToc } = this.state\n return (\n <div style={readerStyles.container}>\n <div\n style={Object.assign(\n {},\n readerStyles.readerArea,\n expandedToc ? readerStyles.containerExpanded : {}\n )}\n >\n {showToc && this.renderTocToggle()}\n <div style={readerStyles.titleArea}>{title}</div>\n <SwipeWrapper\n swipeProps={{\n onSwiped: (eventData: SwipeEventData) => {\n const { dir } = eventData\n if (dir === 'Left') {\n isRTL ? this.prev() : this.next()\n }\n if (dir === 'Right') {\n isRTL ? this.next() : this.prev()\n }\n },\n onTouchStartOrOnMouseDown: ({ event }) => event.preventDefault(),\n touchEventOptions: { passive: false },\n preventScrollOnSwipe: true,\n trackMouse: true,\n }}\n >\n <div style={readerStyles.reader}>\n <EpubView\n ref={this.readerRef}\n loadingView={\n loadingView === undefined ? (\n <div style={readerStyles.loadingView}>Loading…</div>\n ) : (\n loadingView\n )\n }\n epubViewStyles={epubViewStyles}\n {...props}\n tocChanged={this.onTocChange}\n locationChanged={locationChanged}\n />\n {swipeable && <div style={readerStyles.swipeWrapper} />}\n </div>\n </SwipeWrapper>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.prev)}\n onClick={isRTL ? this.next : this.prev}\n >\n ‹\n </button>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.next)}\n onClick={isRTL ? this.prev : this.next}\n >\n ›\n </button>\n </div>\n {showToc && toc && this.renderToc()}\n </div>\n )\n }\n}\n"],"names":["Component","defaultStyles","jsx","useSwipeable","PureComponent","jsxs"],"mappings":"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"}
{"version":3,"file":"react-reader.umd.js","sources":["../lib/EpubView/style.ts","../lib/EpubView/EpubView.tsx","../lib/ReactReader/style.ts","../lib/ReactReader/ReactReader.tsx"],"sourcesContent":["import type { CSSProperties } from 'react'\n\nexport interface IEpubViewStyle {\n viewHolder: CSSProperties\n view: CSSProperties\n}\n\nexport const EpubViewStyle: IEpubViewStyle = {\n viewHolder: {\n position: 'relative',\n height: '100%',\n width: '100%',\n },\n view: {\n height: '100%',\n },\n}\n","import React, { Component } from 'react'\nimport Epub, { Book } from 'epubjs'\nimport type { NavItem, Contents, Rendition, Location } from 'epubjs'\nimport { EpubViewStyle as defaultStyles, type IEpubViewStyle } from './style'\nimport type { RenditionOptions } from 'epubjs/types/rendition'\nimport type { BookOptions } from 'epubjs/types/book'\n\nexport type RenditionOptionsFix = RenditionOptions & {\n allowPopups: boolean\n}\n\nexport type IToc = {\n label: string\n href: string\n}\n\nexport type IEpubViewProps = {\n url: string | ArrayBuffer\n epubInitOptions?: Partial<BookOptions>\n epubOptions?: Partial<RenditionOptionsFix>\n epubViewStyles?: IEpubViewStyle\n loadingView?: React.ReactNode\n errorView?: React.ReactNode\n location: string | number | null\n locationChanged(value: string): void\n showToc?: boolean\n tocChanged?(value: NavItem[]): void\n getRendition?(rendition: Rendition): void\n handleKeyPress?(): void\n handleTextSelected?(cfiRange: string, contents: Contents): void\n}\ntype IEpubViewState = {\n isLoaded: boolean\n isError: boolean\n toc: NavItem[]\n}\n\nexport class EpubView extends Component<IEpubViewProps, IEpubViewState> {\n state: Readonly<IEpubViewState> = {\n isLoaded: false,\n isError: false,\n toc: [],\n }\n viewerRef = React.createRef<HTMLDivElement>()\n location?: string | number | null\n book?: Book\n rendition?: Rendition\n prevPage?: () => void\n nextPage?: () => void\n\n constructor(props: IEpubViewProps) {\n super(props)\n this.location = props.location\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n }\n\n componentDidMount() {\n this.initBook()\n document.addEventListener('keyup', this.handleKeyPress, false)\n }\n\n initBook() {\n const { url, tocChanged, epubInitOptions } = this.props\n if (this.book) {\n this.book.destroy()\n }\n this.book = Epub(url, epubInitOptions)\n this.book.on('openFailed', (error: Error) => {\n this.setState({\n isError: true\n })\n })\n this.book.loaded.navigation.then(({ toc }) => {\n this.setState(\n {\n isLoaded: true,\n isError: false,\n toc: toc,\n },\n () => {\n tocChanged && tocChanged(toc)\n this.initReader()\n }\n )\n })\n }\n\n componentWillUnmount() {\n if (this.book) {\n this.book.destroy()\n }\n this.book = this.rendition = this.prevPage = this.nextPage = undefined\n document.removeEventListener('keyup', this.handleKeyPress, false)\n }\n\n shouldComponentUpdate(nextProps: IEpubViewProps) {\n return (\n !this.state.isLoaded ||\n nextProps.location !== this.props.location ||\n nextProps.url !== this.props.url\n )\n }\n\n componentDidUpdate(prevProps: IEpubViewProps) {\n if (\n prevProps.location !== this.props.location &&\n this.location !== this.props.location\n ) {\n this.rendition?.display(this.props.location + '')\n }\n if (prevProps.url !== this.props.url) {\n this.initBook()\n }\n }\n\n initReader() {\n const { toc } = this.state\n const { location, epubOptions, getRendition } = this.props\n if (this.viewerRef.current) {\n const node = this.viewerRef.current\n if (this.book) {\n const rendition = this.book.renderTo(node, {\n width: '100%',\n height: '100%',\n ...epubOptions,\n })\n this.rendition = rendition\n this.prevPage = () => {\n rendition.prev()\n }\n this.nextPage = () => {\n rendition.next()\n }\n this.registerEvents()\n getRendition && getRendition(rendition)\n\n if (typeof location === 'string' || typeof location === 'number') {\n rendition.display(location + '')\n } else if (toc.length > 0 && toc[0].href) {\n rendition.display(toc[0].href)\n } else {\n rendition.display()\n }\n }\n }\n }\n\n registerEvents() {\n const { handleKeyPress, handleTextSelected } = this.props\n if (this.rendition) {\n this.rendition.on('locationChanged', this.onLocationChange)\n this.rendition.on('keyup', handleKeyPress || this.handleKeyPress)\n if (handleTextSelected) {\n this.rendition.on('selected', handleTextSelected)\n }\n }\n }\n\n onLocationChange = (loc: Location) => {\n const { location, locationChanged } = this.props\n const newLocation = `${loc.start}`\n if (location !== newLocation) {\n this.location = newLocation\n locationChanged && locationChanged(newLocation)\n }\n }\n\n renderBook() {\n const { epubViewStyles = defaultStyles } = this.props\n return <div ref={this.viewerRef} style={epubViewStyles.view} />\n }\n\n handleKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight' && this.nextPage) {\n this.nextPage()\n }\n if (event.key === 'ArrowLeft' && this.prevPage) {\n this.prevPage()\n }\n }\n\n render() {\n const { isLoaded, isError } = this.state\n const { loadingView = null, errorView = null, epubViewStyles = defaultStyles } = this.props\n return (\n <div style={epubViewStyles.viewHolder}>\n {isLoaded && this.renderBook()}\n {!isLoaded && !isError && loadingView}\n {!isLoaded && isError && errorView}\n </div>\n )\n }\n}\n","import type { CSSProperties } from 'react'\n\nexport interface IReactReaderStyle {\n container: CSSProperties\n readerArea: CSSProperties\n containerExpanded: CSSProperties\n titleArea: CSSProperties\n reader: CSSProperties\n swipeWrapper: CSSProperties\n prev: CSSProperties\n next: CSSProperties\n arrow: CSSProperties\n arrowHover: CSSProperties\n tocBackground: CSSProperties\n toc: CSSProperties\n tocArea: CSSProperties\n tocAreaButton: CSSProperties\n tocButton: CSSProperties\n tocButtonExpanded: CSSProperties\n tocButtonBar: CSSProperties\n tocButtonBarTop: CSSProperties\n loadingView: CSSProperties\n errorView: CSSProperties\n tocButtonBottom: CSSProperties\n}\n\nexport const ReactReaderStyle: IReactReaderStyle = {\n container: {\n overflow: 'hidden',\n position: 'relative',\n height: '100%',\n },\n readerArea: {\n position: 'relative',\n zIndex: 1,\n height: '100%',\n width: '100%',\n backgroundColor: '#fff',\n transition: 'all .3s ease',\n },\n containerExpanded: {\n transform: 'translateX(256px)',\n },\n titleArea: {\n position: 'absolute',\n top: 20,\n left: 50,\n right: 50,\n textAlign: 'center',\n color: '#999',\n },\n reader: {\n position: 'absolute',\n top: 50,\n left: 50,\n bottom: 20,\n right: 50,\n },\n swipeWrapper: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: 200,\n },\n prev: {\n left: 1,\n },\n next: {\n right: 1,\n },\n arrow: {\n outline: 'none',\n border: 'none',\n background: 'none',\n position: 'absolute',\n top: '50%',\n marginTop: -32,\n fontSize: 64,\n padding: '0 10px',\n color: '#E2E2E2',\n fontFamily: 'arial, sans-serif',\n cursor: 'pointer',\n userSelect: 'none',\n appearance: 'none',\n fontWeight: 'normal',\n },\n arrowHover: {\n color: '#777',\n },\n toc: {},\n tocBackground: {\n position: 'absolute',\n left: 256,\n top: 0,\n bottom: 0,\n right: 0,\n zIndex: 1,\n },\n tocArea: {\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n zIndex: 0,\n width: 256,\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n background: '#f2f2f2',\n padding: '10px 0',\n },\n tocAreaButton: {\n userSelect: 'none',\n appearance: 'none',\n background: 'none',\n border: 'none',\n display: 'block',\n fontFamily: 'sans-serif',\n width: '100%',\n fontSize: '.9em',\n textAlign: 'left',\n padding: '.9em 1em',\n borderBottom: '1px solid #ddd',\n color: '#aaa',\n boxSizing: 'border-box',\n outline: 'none',\n cursor: 'pointer',\n },\n tocButton: {\n background: 'none',\n border: 'none',\n width: 32,\n height: 32,\n position: 'absolute',\n top: 10,\n left: 10,\n borderRadius: 2,\n outline: 'none',\n cursor: 'pointer',\n },\n tocButtonExpanded: {\n background: '#f2f2f2',\n },\n tocButtonBar: {\n position: 'absolute',\n width: '60%',\n background: '#ccc',\n height: 2,\n left: '50%',\n margin: '-1px -30%',\n top: '50%',\n transition: 'all .5s ease',\n },\n tocButtonBarTop: {\n top: '35%',\n },\n tocButtonBottom: {\n top: '66%',\n },\n loadingView: {\n position: 'absolute',\n top: '50%',\n left: '10%',\n right: '10%',\n color: '#ccc',\n textAlign: 'center',\n marginTop: '-.5em',\n },\n errorView: {\n position: 'absolute',\n top: '50%',\n left: '10%',\n right: '10%',\n color: '#c00',\n textAlign: 'center',\n marginTop: '-.5em',\n },\n}\n","import React, { type CSSProperties, PureComponent, type ReactNode } from 'react'\nimport {\n type SwipeableProps,\n type SwipeEventData,\n useSwipeable,\n} from 'react-swipeable'\nimport { EpubView, type IEpubViewStyle, type IEpubViewProps } from '..'\nimport {\n ReactReaderStyle as defaultStyles,\n type IReactReaderStyle,\n} from './style'\nimport { type NavItem } from 'epubjs'\n\ntype SwipeWrapperProps = {\n children: ReactNode\n swipeProps: Partial<SwipeableProps>\n}\n\nconst SwipeWrapper = ({ children, swipeProps }: SwipeWrapperProps) => {\n const handlers = useSwipeable(swipeProps)\n return (\n <div style={{ height: '100%' }} {...handlers}>\n {children}\n </div>\n )\n}\n\ntype TocItemProps = {\n data: NavItem\n setLocation: (value: string) => void\n styles?: CSSProperties\n}\n\nconst TocItem = ({ data, setLocation, styles }: TocItemProps) => (\n <div>\n <button onClick={() => setLocation(data.href)} style={styles}>\n {data.label}\n </button>\n {data.subitems && data.subitems.length > 0 && (\n <div style={{ paddingLeft: 10 }}>\n {data.subitems.map((item, i) => (\n <TocItem\n key={i}\n data={item}\n styles={styles}\n setLocation={setLocation}\n />\n ))}\n </div>\n )}\n </div>\n)\n\nexport type IReactReaderProps = IEpubViewProps & {\n title?: string\n showToc?: boolean\n readerStyles?: IReactReaderStyle\n epubViewStyles?: IEpubViewStyle\n swipeable?: boolean\n isRTL?: boolean\n pageTurnOnScroll?: boolean\n searchQuery?: string\n contextLength?: number\n onSearchResults?: (results: SearchResult[]) => void\n}\n\ntype SearchResult = { cfi: string; excerpt: string }\n\ntype IReactReaderState = {\n isLoaded: boolean\n expandedToc: boolean\n toc: NavItem[]\n}\n\nexport class ReactReader extends PureComponent<\n IReactReaderProps,\n IReactReaderState\n> {\n state: Readonly<IReactReaderState> = {\n isLoaded: false,\n expandedToc: false,\n toc: [],\n }\n readerRef = React.createRef<EpubView>()\n constructor(props: IReactReaderProps) {\n super(props)\n }\n toggleToc = () => {\n this.setState({\n expandedToc: !this.state.expandedToc,\n })\n }\n\n next = () => {\n const node = this.readerRef.current\n if (node && node.nextPage) {\n node.nextPage()\n }\n }\n\n prev = () => {\n const node = this.readerRef.current\n if (node && node.prevPage) {\n node.prevPage()\n }\n }\n\n onTocChange = (toc: NavItem[]) => {\n const { tocChanged } = this.props\n this.setState(\n {\n toc: toc,\n },\n () => tocChanged && tocChanged(toc)\n )\n }\n\n renderToc() {\n const { toc, expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <div>\n <div style={readerStyles.tocArea}>\n <div style={readerStyles.toc}>\n {toc.map((item, i) => (\n <TocItem\n data={item}\n key={i}\n setLocation={this.setLocation}\n styles={readerStyles.tocAreaButton}\n />\n ))}\n </div>\n </div>\n {expandedToc && (\n <div style={readerStyles.tocBackground} onClick={this.toggleToc} />\n )}\n </div>\n )\n }\n\n setLocation = (loc: string) => {\n const { locationChanged } = this.props\n this.setState(\n {\n expandedToc: false,\n },\n () => locationChanged && locationChanged(loc)\n )\n }\n\n renderTocToggle() {\n const { expandedToc } = this.state\n const { readerStyles = defaultStyles } = this.props\n return (\n <button\n style={Object.assign(\n {},\n readerStyles.tocButton,\n expandedToc ? readerStyles.tocButtonExpanded : {}\n )}\n onClick={this.toggleToc}\n >\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBarTop\n )}\n />\n <span\n style={Object.assign(\n {},\n readerStyles.tocButtonBar,\n readerStyles.tocButtonBottom\n )}\n />\n </button>\n )\n }\n\n // Changing Page based on direction of scroll\n handleWheel = (event: WheelEvent) => {\n event.preventDefault()\n\n const node = this.readerRef.current\n if (!node) return\n\n if (event.deltaY > 0) {\n node.nextPage?.()\n } else if (event.deltaY < 0) {\n node.prevPage?.()\n }\n }\n\n // Setting up event listener in the iframe of the viewer\n attachWheelListener = () => {\n if (!this.readerRef.current) return\n\n const rendition = this.readerRef.current.rendition\n\n if (rendition) {\n rendition.hooks.content.register(\n (contents: { window: { document: any } }) => {\n const iframeDoc = contents.window.document\n\n // Remove any existing listener before adding a new one\n iframeDoc.removeEventListener('wheel', this.handleWheel)\n iframeDoc.addEventListener('wheel', this.handleWheel, {\n passive: false,\n })\n }\n )\n }\n }\n\n //search function to find all occurence and set amount of charecters for context\n searchInBook = async (query?: string) => {\n if (!this.readerRef.current) return\n const rendition = this.readerRef.current?.rendition\n const book = rendition?.book\n if (!book) return\n\n if (!query) {\n this.props.onSearchResults?.([])\n return\n }\n\n await book.ready\n const results: SearchResult[] = []\n const promises: Promise<void>[] = []\n\n book.spine.each((item: any) => {\n if (query == '' || query == null) results\n const promise = (async () => {\n try {\n await item.load(book.load.bind(book))\n const doc = item.document\n const textNodes: Node[] = []\n\n const treeWalker = doc.createTreeWalker(\n doc,\n NodeFilter.SHOW_TEXT,\n null,\n false\n )\n let node\n while ((node = treeWalker.nextNode())) {\n textNodes.push(node)\n }\n\n const fullText = textNodes\n .map((n) => n.textContent)\n .join('')\n .toLowerCase()\n const searchQuery = query.toLowerCase()\n let pos = fullText.indexOf(searchQuery)\n\n while (pos !== -1) {\n let nodeIndex = 0\n let foundOffset = pos\n\n while (nodeIndex < textNodes.length) {\n const nodeText = textNodes[nodeIndex].textContent || ''\n if (foundOffset < nodeText.length) break\n foundOffset -= nodeText.length\n nodeIndex++\n }\n\n if (nodeIndex < textNodes.length) {\n let range = doc.createRange()\n try {\n range.setStart(textNodes[nodeIndex], foundOffset)\n range.setEnd(\n textNodes[nodeIndex],\n foundOffset + searchQuery.length\n )\n const cfi = item.cfiFromRange(range)\n const excerpt = `${fullText.substring(\n Math.max(0, pos - (this.props.contextLength || 15)),\n pos + searchQuery.length + (this.props.contextLength || 15)\n )}`\n\n results.push({ cfi, excerpt })\n } catch (e) {\n console.warn('Skipping invalid range:', e)\n }\n }\n\n pos = fullText.indexOf(searchQuery, pos + 1)\n }\n\n item.unload()\n } catch (error) {\n console.error('Error searching chapter:', error)\n }\n })()\n promises.push(promise)\n })\n\n await Promise.all(promises)\n //Fix for Search Result of previous query retaining when\n if (query == this.props.searchQuery) {\n this.props.onSearchResults?.(results) //passing result as an array of objects with cfi and excerpt\n }\n }\n\n //Actions to perform when the component updates\n componentDidUpdate(prevProps: IReactReaderProps) {\n //searching only when new search query is passed\n if (prevProps.searchQuery !== this.props.searchQuery) {\n this.searchInBook(this.props.searchQuery)\n }\n\n //attaching the wheel listner only when pageTurnOnScroll is set as true\n if (this.props.pageTurnOnScroll === true) {\n this.attachWheelListener()\n }\n }\n\n render() {\n const {\n title,\n showToc = true,\n loadingView,\n errorView,\n readerStyles = defaultStyles,\n locationChanged,\n swipeable,\n epubViewStyles,\n isRTL = false,\n pageTurnOnScroll = false,\n searchQuery,\n contextLength,\n ...props\n } = this.props\n const { toc, expandedToc } = this.state\n return (\n <div style={readerStyles.container}>\n <div\n style={Object.assign(\n {},\n readerStyles.readerArea,\n expandedToc ? readerStyles.containerExpanded : {}\n )}\n >\n {showToc && this.renderTocToggle()}\n <div style={readerStyles.titleArea}>{title}</div>\n <SwipeWrapper\n swipeProps={{\n onSwiped: (eventData: SwipeEventData) => {\n const { dir } = eventData\n if (dir === 'Left') {\n isRTL ? this.prev() : this.next()\n }\n if (dir === 'Right') {\n isRTL ? this.next() : this.prev()\n }\n },\n onTouchStartOrOnMouseDown: ({ event }) => event.preventDefault(),\n touchEventOptions: { passive: false },\n preventScrollOnSwipe: true,\n trackMouse: true,\n }}\n >\n <div style={readerStyles.reader}>\n <EpubView\n ref={this.readerRef}\n loadingView={\n loadingView === undefined ? (\n <div style={readerStyles.loadingView}>Loading…</div>\n ) : (\n loadingView\n )\n }\n errorView={\n errorView === undefined ? (\n <div style={readerStyles.errorView}>Error loading book</div>\n ) : (\n errorView\n )\n }\n epubViewStyles={epubViewStyles}\n {...props}\n tocChanged={this.onTocChange}\n locationChanged={locationChanged}\n />\n {swipeable && <div style={readerStyles.swipeWrapper} />}\n </div>\n </SwipeWrapper>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.prev)}\n onClick={isRTL ? this.next : this.prev}\n >\n ‹\n </button>\n <button\n style={Object.assign({}, readerStyles.arrow, readerStyles.next)}\n onClick={isRTL ? this.prev : this.next}\n >\n ›\n </button>\n </div>\n {showToc && toc && this.renderToc()}\n </div>\n )\n }\n}\n"],"names":["Component","defaultStyles","jsxs","useSwipeable","jsx","PureComponent"],"mappings":"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"}

@@ -22,4 +22,5 @@ import { CSSProperties } from 'react';

loadingView: CSSProperties;
errorView: CSSProperties;
tocButtonBottom: CSSProperties;
}
export declare const ReactReaderStyle: IReactReaderStyle;
{
"name": "react-reader",
"version": "2.0.13",
"version": "2.0.14",
"description": "A epub-reader for React powered by ePubJS",

@@ -5,0 +5,0 @@ "type": "module",