{"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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"}