UNPKG

@vivliostyle/react

Version:

React component for Vivliostyle

1 lines 11.2 kB
{"version":3,"file":"react-vivliostyle.modern.mjs","sources":["../.microbundle/renderer.js","../.microbundle/epage.js"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { CoreViewer, Navigation, PageViewMode, ReadyState, } from \"@vivliostyle/core\";\nimport React, { useEffect, useRef } from \"react\";\nimport { epageFromPageNumber } from \"./epage\";\nexport const Renderer = ({ source, page = 1, zoom = 1, bookMode = true, fontSize = 16, background = \"#ececec\", renderAllPages = true, autoResize = true, pageViewMode = PageViewMode.SINGLE_PAGE, defaultPaperSize, pageBorderWidth = 1, fitToScreen = false, userStyleSheet, authorStyleSheet, style, onMessage, onError, onReadyStateChange, onLoad, onNavigation, onHyperlink, children, }) => {\n const containerRef = useRef(null);\n const instanceRef = useRef(undefined);\n const stateRef = React.useRef(undefined);\n // Use a key to force re-creation of the container element on re-mount (e.g., in StrictMode)\n const [containerKey, setContainerKey] = React.useState(0);\n function setViewerOptions() {\n const viewerOptions = {\n fontSize,\n pageViewMode,\n renderAllPages,\n autoResize,\n defaultPaperSize,\n pageBorderWidth,\n };\n instanceRef.current.setOptions(viewerOptions);\n }\n function loadSource() {\n const instance = instanceRef.current;\n const documentOptions = Object.assign(Object.assign({}, (userStyleSheet\n ? {\n userStyleSheet: [\n {\n [userStyleSheet.endsWith(\".css\") ? \"url\" : \"text\"]: userStyleSheet,\n },\n ],\n }\n : null)), (authorStyleSheet\n ? {\n authorStyleSheet: [\n {\n [authorStyleSheet.endsWith(\".css\") ? \"url\" : \"text\"]: authorStyleSheet,\n },\n ],\n }\n : null));\n if (bookMode) {\n instance.loadPublication(source, documentOptions);\n }\n else {\n instance.loadDocument({ url: source }, documentOptions, {\n fontSize,\n pageViewMode,\n zoom,\n renderAllPages,\n autoResize,\n defaultPaperSize,\n pageBorderWidth,\n fitToScreen,\n });\n }\n }\n function registerEventHandlers() {\n const getMessage = (payload) => { var _a, _b; return (_b = (_a = payload.content.error) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : payload.content.messages.join(\"\\n\"); };\n function handleMessage(payload, type) {\n onMessage && onMessage(getMessage(payload), type);\n }\n const handleDebug = (payload) => handleMessage(payload, \"debug\");\n const handleInfo = (payload) => handleMessage(payload, \"info\");\n const handleWarn = (payload) => handleMessage(payload, \"warn\");\n function handleError(payload) {\n onError && onError(getMessage(payload));\n }\n function handleReadyStateChange() {\n const { readyState } = instanceRef.current;\n onReadyStateChange && onReadyStateChange(readyState);\n }\n function handleLoaded() {\n onLoad && onLoad(stateRef.current);\n }\n function handleNavigation(payload) {\n const { docTitle, epageCount, epage, metadata } = payload;\n const currentState = {\n docTitle,\n epageCount,\n epage: epage,\n metadata,\n };\n stateRef.current = currentState;\n onNavigation && onNavigation(currentState);\n }\n function handleHyperlink(payload) {\n onHyperlink && onHyperlink(payload);\n }\n const instance = instanceRef.current;\n instance.addListener(\"debug\", handleDebug);\n instance.addListener(\"info\", handleInfo);\n instance.addListener(\"warn\", handleWarn);\n instance.addListener(\"error\", handleError);\n instance.addListener(\"readystatechange\", handleReadyStateChange);\n instance.addListener(\"loaded\", handleLoaded);\n instance.addListener(\"nav\", handleNavigation);\n instance.addListener(\"hyperlink\", handleHyperlink);\n return () => {\n onReadyStateChange && onReadyStateChange(ReadyState.LOADING);\n instance.removeListener(\"debug\", handleDebug);\n instance.removeListener(\"info\", handleInfo);\n instance.removeListener(\"warn\", handleWarn);\n instance.removeListener(\"error\", handleError);\n instance.removeListener(\"readystatechange\", handleReadyStateChange);\n instance.removeListener(\"loaded\", handleLoaded);\n instance.removeListener(\"nav\", handleNavigation);\n instance.removeListener(\"hyperlink\", handleHyperlink);\n };\n }\n function initInstance() {\n instanceRef.current = new CoreViewer({\n viewportElement: containerRef.current,\n });\n }\n // initialize document and event handlers\n useEffect(() => {\n // Increment key to force new container element, ensuring previous CoreViewer's\n // async rendering won't affect the new container (handles StrictMode double-mount)\n setContainerKey((k) => k + 1);\n }, []);\n useEffect(() => {\n initInstance();\n setViewerOptions();\n const cleanup = registerEventHandlers();\n return cleanup;\n }, [containerKey]);\n useEffect(() => {\n if (containerKey === 0)\n return; // Skip initial render before key is set\n loadSource();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n containerKey,\n source,\n authorStyleSheet,\n userStyleSheet,\n zoom,\n fitToScreen,\n bookMode,\n ]);\n useEffect(() => {\n setViewerOptions();\n }, [\n fontSize,\n pageViewMode,\n renderAllPages,\n autoResize,\n defaultPaperSize,\n pageBorderWidth,\n ]);\n // sync location\n useEffect(() => {\n var _a;\n const epage = epageFromPageNumber(page);\n (_a = instanceRef.current) === null || _a === void 0 ? void 0 : _a.navigateToPage(Navigation.EPAGE, epage);\n }, [page]);\n const container = (React.createElement(Container, { key: containerKey, ref: containerRef, style: style, background: background }));\n if (typeof children === \"function\" && children instanceof Function) {\n return children({ container, reload: loadSource });\n }\n return container;\n};\nconst Container = styled.div `\n overflow: scroll;\n background: ${({ background }) => background} !important;\n`;\n//# sourceMappingURL=renderer.js.map","export function epageToPageNumber(epage) {\n return Math.round(epage + 1);\n}\nexport function epageFromPageNumber(pageNumber) {\n return pageNumber - 1;\n}\n//# sourceMappingURL=epage.js.map"],"names":["Renderer","source","page","zoom","bookMode","fontSize","background","renderAllPages","autoResize","pageViewMode","PageViewMode","SINGLE_PAGE","defaultPaperSize","pageBorderWidth","fitToScreen","userStyleSheet","authorStyleSheet","style","onMessage","onError","onReadyStateChange","onLoad","onNavigation","onHyperlink","children","containerRef","useRef","instanceRef","undefined","stateRef","React","containerKey","setContainerKey","useState","setViewerOptions","current","setOptions","loadSource","instance","documentOptions","Object","assign","endsWith","loadPublication","loadDocument","url","useEffect","k","CoreViewer","viewportElement","getMessage","payload","_a","_b","content","error","toString","messages","join","handleMessage","type","handleDebug","handleInfo","handleWarn","handleError","handleReadyStateChange","readyState","handleLoaded","handleNavigation","docTitle","epageCount","epage","metadata","currentState","handleHyperlink","addListener","ReadyState","LOADING","removeListener","registerEventHandlers","navigateToPage","Navigation","EPAGE","container","createElement","Container","key","ref","Function","reload","styled","div","_t"],"mappings":"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"}