{"_id":"@aurorah/epub-studio","_rev":"14-ec2558e88450b3e99f7bd6785da1bbc5","name":"@aurorah/epub-studio","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@aurorah/epub-studio","version":"1.0.0","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.0","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read the wmcp-manifest.json file shipped with the package. It defines the full wMCP contract: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"10780f033a85dad25303cb2d42be350f0aab3608","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.0.tgz","fileCount":6,"integrity":"sha512-heYS8OPSGM1OdPYnTnRTd7ouU9mivoggK885e3mwD/U23b5pCSA7fSoXw94hiA9tbmvVTdCrXUIDFdCXWXe+vQ==","signatures":[{"sig":"MEUCICPgYvTKFPdNoBPL6pCC0SorrJd1Dz3wwbibU+51DnluAiEAk9TT9mzdEoUJQ8ziJtwjIpdj/rUKqWL7MofaBekVSSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404258},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.0_1775293053694_0.8144555090444716","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aurorah/epub-studio","version":"1.0.1","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.1","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"e862b85e23538dec7ef70613af2ed86bc80b942b","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.1.tgz","fileCount":7,"integrity":"sha512-HQezf0qqggZjyss4VKS0cKDslL1dTI5JOhNMZIvGnRhbVoKUExJZ6PdQCxrljuzRnSRBvb8UB+EWJHkEQgs/bQ==","signatures":[{"sig":"MEYCIQDYnibOKvoz1Y+wgf0eqnd5O0yxy05+AM3mARIVNERbygIhAPRVwpANC27GE0arH83wYix0SP5pRaJyfNOFs1Yoh62e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410743},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"d7d4e58490dce6240bbc1eaa6294d08870b03303","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.1_1775304523497_0.20418962498489224","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aurorah/epub-studio","version":"1.0.2","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.2","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"37c1b5caf17f0ec7d0ad4a98e162fdb8cf2645b7","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.2.tgz","fileCount":7,"integrity":"sha512-uSOs7WCtxGSb0H0W88cWwNjcmy0K/HvK1YiFQQMEr75lly5r/q/TXMxcGYgbBTx+Zz1VK1hfZp6JlkgqgMmoiQ==","signatures":[{"sig":"MEQCID+IO/qHt1+PZLCLfy5ar64XTKT0sxdClg7NpNihmVabAiBY6KRYSj4YeGAii0fWExKTvxKGbAPUer/wVNYqrsaoxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410849},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"d7a08eeb9befc2606711c397342090fa0fcf920a","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.2_1775305009386_0.44621720617646377","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aurorah/epub-studio","version":"1.0.3","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.3","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"e612eb43e4c2c02432f1b26377209773c26f0ce1","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.3.tgz","fileCount":7,"integrity":"sha512-NP1aX3H07cfflinahIWZO+y8TWUh77vwLZHWjzaJepwwaddcsggfFMc2EOyqfomO3U2rwabfjM2neHK72xuYEA==","signatures":[{"sig":"MEUCIQC39v8J7ewiT8RlvFBzgBqS9Iq289Q4CsTYhhtFM6Fc4QIgJtCiPNXobkiNRBE5as34Ki3BK5o2g2HauPaZku8F7Lk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419139},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"eec1bd0a9b020410716a962356f8190abc5e165a","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.3_1775309910051_0.8323514661753542","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aurorah/epub-studio","version":"1.0.4","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.4","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"e9dfccfb8b8a30116ad7e35e36a755736f17ce05","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.4.tgz","fileCount":7,"integrity":"sha512-VGoK1WoB5h/2KVdDM9ICUYSlffFYT2V5b8mH+OVPv8isJelI3MkiwRy9NfE9qLbojf+X9z5PdLrCzQHB4q9NcQ==","signatures":[{"sig":"MEUCIFpec1hHyyJxrwUFQEKW7Csjk/WC/ric71dkjJPthJvhAiEArTnawD5tqbgtSTvmmtxj45btzJ6g9nr9l40zsvAlh0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434277},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"bed28538ef63d40487cda5de6a257be9d70eadd0","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.4_1775314066447_0.10926249280936995","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aurorah/epub-studio","version":"1.0.5","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.5","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"b646d835bda901e696acaac7904c8f7fec06b759","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.5.tgz","fileCount":7,"integrity":"sha512-zb75HJYNHtz52p49URU07EVs2UkEUEW+4GeHzMZ6HI6CjoKd1CZStk+GmTXkVHa6Gqi5b9Wa2IkNAmvoJBHxIg==","signatures":[{"sig":"MEUCIQC4pQF1CteN4VYVTgqvjxPLZUcLuQ62HwQl9uxGFiSragIgEmXK3sXxYofpSSrVOGWhweMq7fVsVac7SEjH4fLdsxE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434643},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"7e80beb8cbe5f2392b21cb84b79338abc1c4a978","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.5_1775317014679_0.5971714847308471","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aurorah/epub-studio","version":"1.0.6","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.6","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"1ce2efd9416b2ccc1f5382740f412e1d73b836b0","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.6.tgz","fileCount":7,"integrity":"sha512-ZA/iDsC++2qMKANvdAvogju642xpAA7UYkbktKW6oCV1tFcbtz7hFId0Yb367kHk9kSkf+IF1pQhOV2zqmJQ0A==","signatures":[{"sig":"MEUCIQDKavTK1VZVp9lTr6T23I/OH7kvhXxv/D+7xVR6825NWgIgCNqisJCqDTsXFCe9N45lOUC5taKgrE+oiRn1u413WnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474623},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"f1da009fe267d02126e85a6387546c6568dddb03","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.6_1775361638712_0.8899791194707833","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aurorah/epub-studio","version":"1.0.7","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.0.7","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"64caeeee0d2a814da5176ada8093587d4fff8acc","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.0.7.tgz","fileCount":7,"integrity":"sha512-UvKk2ve8vXQF2Aq8pGO7EdneglymUDDuCskgLgNjwEi/CocPplR4YjbYvyInCJDa6CjtDaM4qoH1ylXWtvaxaw==","signatures":[{"sig":"MEUCIEl3Zpz7W+O/G389W5jHbORCWVxeY3a7VaMoaFsSx3USAiEAx0/0ufZe2cUexeGJ9xDIJ9zZgUG2jWlCcDuUymeXIsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529698},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"867543264bf2ce7f1bb2df7eb6d579ade7cb1c8c","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.0.7_1775377650685_0.10700433608966042","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aurorah/epub-studio","version":"1.1.0","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.1.0","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"7b992fd7a8841d28a7a5f7e6ec182be161277a96","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.1.0.tgz","fileCount":21,"integrity":"sha512-CLLk6Gyf1E6om+xMrTBchtpufr0opDtjjN8YklQzLSkbMgmgxoFRPtnKlQvsFuGCyrE4e9aLfNeUgSMtnG7XBQ==","signatures":[{"sig":"MEYCIQDanKUcB0kLnRGsZ/xHMs3KU4DIFk6K9BhvFsGtLed3eAIhAO7gX+1dV3qC2SxThKMFgF0j9NF0dTFnXGAnp3AIeI9b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11920065},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"867543264bf2ce7f1bb2df7eb6d579ade7cb1c8c","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1","prettier":"^3.8.3","monaco-editor":"^0.55.1","@prettier/plugin-xml":"^3.4.2"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.1.0_1777547766230_0.703276677558577","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aurorah/epub-studio","version":"1.1.1","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.1.1","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"71e9a7c028faf465f8a2c8a16d6f95f714bcbda0","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.1.1.tgz","fileCount":15,"integrity":"sha512-7UzIM4mLlv0WGJYlbr9YIo99NEFvCP9X7wSUalSeVF/RoDELb0/cL+U9sRszCEVnAE5tdk2JKB3NertIZ5t69g==","signatures":[{"sig":"MEUCIF46WKUYRRcm61UXw0FU/Zz7izYDUR9FF7K5oXRWx3AxAiEA44ioDwF7p1DRQpxFFGn+GfKi6Q2mmEsL+dbL1GoSv1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11161269},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"c0a7948def14bea18d0b8c530a938b01d2277c2f","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1","prettier":"^3.8.3","monaco-editor":"^0.55.1","@prettier/plugin-xml":"^3.4.2"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.1.1_1777551154030_0.44223794701810126","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@aurorah/epub-studio","version":"1.1.2","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.1.2","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"3c1006e28691aabac44418dfb91b2feb2ef06cc7","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.1.2.tgz","fileCount":15,"integrity":"sha512-PAERkfCltrs86Zkt1ddBZNw3dxLlOEEKwf39cCoQejdQbE+MPgPqV5NXi3llrbpX0GzKrnW7Z7uYFUtkcPFfFQ==","signatures":[{"sig":"MEQCIGORN/JrT1oHx5XSKiYQXUKvJcDYf9W+OoF2+ZzYWpIsAiBnW7UHF4395Nz3J/sO6eOnFP0yuV8WmIbJ8EaPvTeSeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11170143},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"c0a7948def14bea18d0b8c530a938b01d2277c2f","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.3.0","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jszip":"^3.10.1","prettier":"^3.8.3","monaco-editor":"^0.55.1","@prettier/plugin-xml":"^3.4.2"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@aurorah/wmcp":"^1.0.3","vite-plugin-dts":"^4.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.1.2_1777553867055_0.7219093993764854","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@aurorah/epub-studio","version":"1.1.4","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.1.4","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"2dbf9801d15414908287f5eabbb3eeedd634bce1","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.1.4.tgz","fileCount":46,"integrity":"sha512-xohjBGTYn1jft4exeV7EEa1mQOm7inuuA1aMDIRYhG/mS5neiRUNq4Kr6YZCkBtbWy22FeXBnyfS+noHkYCZ3A==","signatures":[{"sig":"MEUCIQDDha/+85W3CA2ZOFm0oPvkZv1mNaH/QjbjF6/Y2YYSjgIgTEpRtyZe9lxTX+MnfYpT2oVOg8VZwSG2jAOTDtIGPSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10473714},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"d8fbd57349047344db629237a107e185cb465c34","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.12.1","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jszip":"^3.10.1","prettier":"^3.8.3","monaco-editor":"^0.55.1","@prettier/plugin-xml":"^3.4.2"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.11","vitest":"^4.1.5","typescript":"^6.0.3","@aurorah/wmcp":"^1.1.0","vite-plugin-dts":"^5.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.1.4_1778247378325_0.9665761854288271","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aurorah/epub-studio","version":"1.2.0","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"_id":"@aurorah/epub-studio@1.2.0","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"ai":{"demo":"./demo/nextjs","mount":{"styles":"import '@aurorah/epub-studio/style.css'","returns":"{ wmcpClient: WmcpClient, state, destroy() }","function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })"},"manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","integration":{"events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module.","standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation."},"protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"]},"dist":{"shasum":"22f990b92d06a44cce4b7618ee6c8c64ac025f5f","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.2.0.tgz","fileCount":51,"integrity":"sha512-oDJOF4Sa0PA4ZVk2lMGY+ulpkK8jpWC38oBTFx90PDgzpqFZcbApUpFSxYPR/aFudfsOGKfLgeXl/x7z7Ze0aQ==","signatures":[{"sig":"MEYCIQCPZVHd9SdFlzUMzR4trY/+vXMLimSR4wXocJlX6ldTNwIhAMfhQ02EcTcjfaaVXARDV0HzSlIPuK9kN/tADwfGiywD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11392909},"main":"./dist/epub-studio.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/epub-studio.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"gitHead":"ef719302113d881644699ce4acf1542371ba99bf","scripts":{"dev":"vite","test":"vitest run","build":"tsc && vite build","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"repository":{"url":"git+https://github.com/z-order/aurorah-epub-studio.git","type":"git"},"_npmVersion":"11.12.1","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jszip":"^3.10.1","prettier":"^3.8.3","@tiptap/pm":"^3.23.1","@tiptap/core":"^3.23.1","monaco-editor":"^0.55.1","@tiptap/starter-kit":"^3.23.1","@prettier/plugin-xml":"^3.4.2","@tiptap/extension-link":"^3.23.1","@tiptap/extension-color":"^3.23.1","@tiptap/extension-image":"^3.23.1","@tiptap/extension-highlight":"^3.23.1","@tiptap/extension-underline":"^3.23.1","@tiptap/extension-text-align":"^3.23.1","@tiptap/extension-text-style":"^3.23.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.11","jsdom":"^29.1.1","vitest":"^4.1.5","typescript":"^6.0.3","@aurorah/wmcp":"^1.1.0","vite-plugin-dts":"^5.0.0"},"peerDependencies":{"@aurorah/wmcp":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/epub-studio_1.2.0_1778538085308_0.2447610404002296","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@aurorah/epub-studio","version":"1.2.1","description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","type":"module","main":"./dist/epub-studio.cjs.js","module":"./dist/epub-studio.es.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/epub-studio.es.js","require":"./dist/epub-studio.cjs.js"},"./style.css":"./dist/epub-studio.css"},"keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"scripts":{"dev":"vite","build":"tsc && vite build","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build"},"ai":{"important":"Before integrating this package, AI agents MUST read README.md and wmcp-manifest.json. README.md contains the full getting-started guide, project structure, config reference, and wMCP contract summary. wmcp-manifest.json defines the protocol: module:capabilities (epub:open, epub:save, epub:export), module:events (epub:loaded, epub:modified, epub:close), module:listeners (epub:openFile, epub:setTheme), host:requires (log:write), and host:config (theme, locale, readOnly, closeButton).","manifest":"./wmcp-manifest.json","protocol":"@aurorah/wmcp","protocolDocs":["https://github.com/z-order/wmcp/blob/main/docs/%5B1%5D-CONCEPTS.md","https://github.com/z-order/wmcp/blob/main/docs/%5B4%5D-GETTING-STARTED.md","https://github.com/z-order/wmcp/blob/main/docs/%5B5%5D-SPECIFICATION.md"],"mount":{"function":"mount(container: HTMLElement, config?: { theme, locale, readOnly })","returns":"{ wmcpClient: WmcpClient, state, destroy() }","styles":"import '@aurorah/epub-studio/style.css'"},"integration":{"standalone":"Call mount() directly — all capabilities run locally with browser FileReader and download.","host-connected":"Pass instance.wmcpClient to WmcpHost, then use host.override() for epub:open/save/export to route through server APIs (e.g. Next.js server actions). The host handler receives (params, superFn) where superFn is the module's default implementation.","events":"Listen via host.on('epub:loaded' | 'epub:modified') for state changes. Emit host.emit('epub:openFile' | 'epub:setTheme') to command the module."},"demo":"./demo/nextjs"},"repository":{"type":"git","url":"git+https://github.com/z-order/aurorah-epub-studio.git"},"publishConfig":{"access":"restricted"},"peerDependencies":{"@aurorah/wmcp":"^1.1.0"},"dependencies":{"@prettier/plugin-xml":"^3.4.2","jszip":"^3.10.1","monaco-editor":"^0.55.1","prettier":"^3.8.3"},"devDependencies":{"@aurorah/wmcp":"^1.1.0","jsdom":"^29.1.1","typescript":"^6.0.3","vite":"^8.0.11","vite-plugin-dts":"^5.0.0","vitest":"^4.1.5"},"gitHead":"a736d7c471ecd668c1db999316cf358179ac7904","_id":"@aurorah/epub-studio@1.2.1","bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-pPOvn/kUIUHzpAJNJx+UDuDWWn3T+knUwMvd8ljKdUmRpYUcuERbugzOs0CbHnfWR6mm7mw0VQ/OSxycTHlPiw==","shasum":"f8eefd0a9e351c4c812f494dd828e94d1a25e4c5","tarball":"https://registry.npmjs.org/@aurorah/epub-studio/-/epub-studio-1.2.1.tgz","fileCount":53,"unpackedSize":10577741,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDN9kWsbboMjPAMAA3hOt48P0cWrXtOJASqFzWv5I1gGwIgTPVWhoJPvfjCbr4TW0w5eT+chlG8GXm8mRZh71fplF8="}]},"_npmUser":{"name":"chris-stanley","email":"st.theway@gmail.com"},"directories":{},"maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/epub-studio_1.2.1_1778690276084_0.0010733045579582878"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-04T08:57:33.571Z","modified":"2026-05-13T16:37:56.759Z","1.0.0":"2026-04-04T08:57:33.895Z","1.0.1":"2026-04-04T12:08:43.663Z","1.0.2":"2026-04-04T12:16:49.632Z","1.0.3":"2026-04-04T13:38:30.225Z","1.0.4":"2026-04-04T14:47:46.617Z","1.0.5":"2026-04-04T15:36:54.842Z","1.0.6":"2026-04-05T04:00:38.917Z","1.0.7":"2026-04-05T08:27:30.882Z","1.1.0":"2026-04-30T11:16:06.565Z","1.1.1":"2026-04-30T12:12:34.326Z","1.1.2":"2026-04-30T12:57:47.326Z","1.1.4":"2026-05-08T13:36:18.638Z","1.2.0":"2026-05-11T22:21:25.568Z","1.2.1":"2026-05-13T16:37:56.447Z"},"bugs":{"url":"https://github.com/z-order/aurorah-epub-studio/issues"},"homepage":"https://github.com/z-order/aurorah-epub-studio#readme","keywords":["epub","epub-editor","ebook","wmcp","web-module-connection-protocol","micro-frontend","plugin-architecture"],"repository":{"type":"git","url":"git+https://github.com/z-order/aurorah-epub-studio.git"},"description":"EPUB editor with reader, code view, TOC management, and multi-platform export — built on wMCP (Web Module Connection Protocol)","maintainers":[{"name":"chris-stanley","email":"st.theway@gmail.com"}],"readme":"# @aurorah/epub-studio\n\n<!-- AI-AGENT: You MUST read this entire README before making any changes to this project. -->\n\nEPUB editor with reader, Monaco code view, TOC management, image management, and multi-platform export -- built on [wMCP (Web Module Connection Protocol)](https://github.com/z-order/wmcp).\n\nCurrent package version: `1.1.4`.\n\n## v1.1.4 Notes\n\n- Requires `@aurorah/wmcp >= 1.1.0` for the new readiness contract.\n- `mount()` now opts in to wMCP's readiness gating: host->module events received before the studio's first paint are buffered by wMCP (FIFO) and replayed once `client._setReady()` is called (after two chained `requestAnimationFrame`s, when the deferred Reader / Editor / CodeEditor / Monaco-worker / Fonts init has drained).\n- Hosts may subscribe to the protocol-level `wmcp:ready` event (`host.on(\"wmcp:ready\", ...)`) to coordinate post-mount UI such as loading spinners.\n- Hosts that previously worked around this race with a manual `await yieldForStudioInit()` (or similar `setTimeout` / `requestAnimationFrame` waits before emitting `epub:openFile`) can drop those workarounds.\n- Fixes the host-emit-before-module-ready race tracked in `cursor_button_switch_delay_issue.md` -- TOC / 파일구조 used to populate while the viewer / editor / code panes stayed empty until a refresh, with about a 20% success rate on cache-warm CDN fetches.\n\n## v1.1.1 Notes\n\n- Monaco code editor is bundled with an inline editor worker and uses Prettier plus `@prettier/plugin-xml` for formatting.\n- The Next.js demo dynamically imports `@aurorah/epub-studio` inside the client effect while keeping the stylesheet import static.\n- Host integrations can enable `translateButton`; clicking it emits `epub:translate`.\n- The wMCP manifest includes optional host requirements for `log:write` and `export:pdf`.\n\n## Prerequisites\n\n- Node.js >= 18\n- pnpm\n\n## Project Structure\n\n```text\nv1.1/\n  src/\n    code-editor.ts             # Monaco HTML editor, formatting, linting, search, shortcuts, fullscreen\n    color-picker.ts            # Shared color picker for reader colors and selected editor text/background\n    cursor-sync-indicator.ts   # Maps editor/code cursor position to content blocks for sync indicators\n    dev.ts                     # Standalone Vite dev entry that mounts EPUB Studio directly\n    dom.ts                     # Static HTML template builder for the full EPUB Studio UI\n    editable-select.ts         # Reusable editable select/dropdown helper\n    editor-history.ts          # Undo/redo history tracking for WYSIWYG editor changes\n    editor-selection.ts        # Selection save/restore helpers for toolbar and popup interactions\n    editor.ts                  # WYSIWYG chapter editor, metadata editing, links, images, TOC actions\n    engine.ts                  # EPUB ZIP/OPF/spine/TOC parser and open/drop file loading\n    exporter.ts                # EPUB rebuild/export logic and platform presets\n    font-size-selection-input.ts # Selection-aware font-size input for editor formatting\n    fonts.ts                   # Reader font catalog, font loading, and font select rendering\n    format-toolbar.ts          # Editor toolbar wiring and formatting command dispatch\n    format.ts                  # Pure formatting helpers and format action definitions\n    image-library.ts           # Pure image path normalization, discovery, and asset helpers\n    image-manager.ts           # Image panel UI, image import/remove/preview, cover/chapter image handling\n    index.ts                   # Public mount API, config handling, module initialization, wMCP wiring\n    link.ts                    # Internal link picker, link preview, link context menu, link editing\n    notify.ts                  # Toasts, button tooltips, and lightweight notification helpers\n    reader.ts                  # Reader view rendering, pagination, search, theme, font, writing mode\n    shortcuts.ts               # Platform-aware shortcut labels and toolbar titles\n    state.ts                   # Legacy state compatibility exports\n    store.ts                   # AppState, reducer/store, preferences, and legacy bridge\n    styles/\n      index.css                # EPUB Studio styles, themes, layout, panels, modals, editor, reader\n    structure-edit.ts          # Structure tree edit operations: rename, move, promote/demote, TOC visibility\n    structure-rewrite.ts       # Pure HTML/nav rewrite helpers for structure edits and ID/reference updates\n    structure-undo.ts          # Snapshot/restore stack for structure editing undo\n    structure.ts               # Chapter/TOC flat/tree rendering, selection, expansion, drag/drop structure UI\n    ui.ts                      # Sidebar/panel tabs, mode switching, modal handling, chapter/TOC list rendering\n    utils.ts                   # Shared DOM, HTML, file, status, preference, and download helpers\n    viewer-width.ts            # Reader content width controls and persistence\n    viewer-zoom.ts             # Reader zoom controls, presets, keyboard shortcuts, persistence\n    vite-env.d.ts              # Vite and asset module type declarations\n  tests/\n    engine.test.ts             # EPUB parsing behavior tests\n    exporter.test.ts           # EPUB export/rebuild behavior tests\n    image-library.test.ts      # Image helper and path normalization tests\n    state.test.ts              # Store/state behavior tests\n    wmcp.test.ts               # wMCP manifest/integration contract tests\n  demo/\n    nextjs/\n      src/\n        app/\n          api/\n            epub/\n              route.ts         # Demo API route for EPUB upload/export flows\n          epub/\n            actions.ts         # Demo server actions for save/export/audit logging\n            page.tsx           # Client EPUB Studio mount page with dynamic package import\n          globals.css          # Demo app global CSS\n          layout.tsx           # Demo app root layout\n          page.tsx             # Demo app home page\n        wmcp/\n          epub-studio.ts       # Demo wMCP host setup, overrides, host listeners, close handling\n```\n\n## Getting Started\n\n### 1. Install dependencies\n\n```bash\ncd v1.1\npnpm install\n```\n\n### 2. Dev mode (standalone, no wMCP host)\n\n```bash\npnpm run dev\n```\n\nOpens at `http://localhost:5173`. Uses `src/dev.ts` which calls `mount()` directly.\n\n### 3. Build the library\n\n```bash\npnpm run build\n```\n\nOutputs to `dist/`:\n\n- `epub-studio.es.js` (ESM)\n- `epub-studio.cjs.js` (CJS)\n- `epub-studio.css`\n- `index.d.ts`\n\n### 4. Run the Next.js demo (with wMCP host)\n\n```bash\ncd demo/nextjs\npnpm install\npnpm run dev\n```\n\nOpens at `http://localhost:3000/epub`.\n\n> After rebuilding the library (`pnpm run build` in `v1.1/`), run `pnpm install` in `demo/nextjs/` to re-link the updated dist, then restart the Next.js dev server.\n\n## Usage\n\n### Standalone (no host)\n\n```typescript\nimport { mount } from \"@aurorah/epub-studio\";\nimport \"@aurorah/epub-studio/style.css\";\n\nconst instance = mount(document.getElementById(\"root\")!, {\n  theme: \"dark\",\n  locale: \"ko\",\n});\n\n// Later: instance.destroy();\n```\n\n### With wMCP host\n\n```typescript\nimport { mount } from \"@aurorah/epub-studio\";\nimport \"@aurorah/epub-studio/style.css\";\nimport { WmcpHost } from \"@aurorah/wmcp\";\n\nconst instance = mount(container, {\n  theme: \"dark\",\n  locale: \"ko\",\n  openButton: false,\n  translateButton: true,\n  closeButton: true,\n});\n\nconst host = new WmcpHost(instance.wmcpClient);\n\n// Override capabilities to route through server APIs\nhost.override(\"epub:save\", async (params, defaultSave) => {\n  const blob = await defaultSave(params);\n  return await saveToServer(blob);\n});\n\n// Listen for module events\nhost.on(\"epub:loaded\", (data) => console.log(data));\nhost.on(\"epub:modified\", (data) => console.log(data));\nhost.on(\"epub:translate\", (data) => console.log(data));\nhost.on(\"epub:close\", () => {\n  host.destroy();\n  instance.destroy();\n});\n\n// IMPORTANT: gate `epub:openFile` on `wmcp:ready`.\n//\n// `mount()` returns synchronously but several studio subsystems (Reader\n// pane sizing, Monaco editor worker, Fonts, CodeEditor) only stabilize\n// after the browser paints once. Emitting `epub:openFile` during that\n// gap causes a race where TOC / 파일구조 populates but the\n// viewer / editor / code panes silently stay on the placeholder.\n//\n// `@aurorah/epub-studio@1.1.4` (with `@aurorah/wmcp@1.1.0`) emits the\n// protocol-level `wmcp:ready` event once all subsystems have laid out.\n// Do the fetch + `host.emit(\"epub:openFile\", ...)` inside this listener\n// to guarantee the studio is fully wired before the EPUB lands.\nhost.on(\"wmcp:ready\", async () => {\n  const blob = await fetchEpubBlob();\n  host.emit(\"epub:openFile\", { fileData: blob, fileName: \"book.epub\" });\n});\n\n// Other host->module commands can also be sent at any time; wMCP buffers\n// them until `wmcp:ready` and replays FIFO.\nhost.emit(\"epub:setTheme\", { theme: \"sepia\" });\n```\n\n## Config\n\n`mount(container, config?)` accepts `EpubStudioConfig`:\n\n| Property          | Type                                      | Default   | Description                                                    |\n| ----------------- | ----------------------------------------- | --------- | -------------------------------------------------------------- |\n| `theme`           | `\"dark\" \\| \"sepia\" \\| \"white\" \\| \"paper\"` | `\"sepia\"` | Initial color theme                                            |\n| `locale`          | `string`                                  | `\"ko\"`    | Locale hint                                                    |\n| `readOnly`        | `boolean`                                 | `false`   | Disable editing                                                |\n| `openButton`      | `boolean`                                 | `false`   | Show an open-file button in the toolbar                        |\n| `translateButton` | `boolean`                                 | `false`   | Show a translate button; emits `epub:translate` via wMCP       |\n| `closeButton`     | `boolean`                                 | `true`    | Show a close button; emits `epub:close` event via wMCP         |\n| `useCustomFonts`  | `boolean`                                 | `false`   | If `true`, skip auto-loading Google Fonts; host provides fonts |\n\n## Code Editor\n\nThe code tab uses `monaco-editor` for HTML editing. It supports undo/redo, find/replace, go to line, folding, format, lint markers, word wrap, invisibles, autocomplete, fullscreen, and image-aware cursor sync.\n\nFormatting is powered by `prettier` and `@prettier/plugin-xml`. The Vite library build externalizes `@aurorah/wmcp`, `prettier`, and `@prettier/plugin-xml`, and bundles Monaco's editor worker inline for browser compatibility.\n\n## Fonts\n\n### Architecture\n\nFont rendering has two layers:\n\n1. **CSS variables** (`--font`, `--r-font`, `--mono`) -- defined in `src/styles/index.css` at `:root`. These declare font-family **names** only. Every UI element in the stylesheet references them via `var()`.\n2. **Font file loading** -- the actual `.woff2` files that the browser needs to render those named families. This is handled by `injectFonts()` in `src/index.ts`.\n\n```text\nmount() called\n  |\n  |- useCustomFonts: false (default)\n  |    |\n  |    +-> injectFonts() appends a Google Fonts <link> to <head>\n  |        Google Fonts serves @font-face rules that load .woff2 files\n  |        matching the font-family names in --font, --r-font, --mono\n  |\n  |- useCustomFonts: true\n       |\n       +-> injectFonts() is skipped\n           Host must load fonts itself (next/font, @font-face, CDN link)\n           Host can also override --font, --r-font, --mono on :root\n           to use entirely different font families\n```\n\n### CSS variables\n\n| Variable   | Used for                                               | Default value                                                                                                                                                                |\n| ---------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `--font`   | UI -- header, sidebar, panels, buttons, inputs, modals | `\"Noto Sans KR\", \"Noto Sans JP\", \"Noto Sans SC\", \"Noto Sans TC\", \"Noto Sans Arabic\", \"Noto Sans Devanagari\", \"Noto Sans Thai\", \"Noto Sans Bengali\", \"Noto Sans\", sans-serif` |\n| `--r-font` | Reader -- EPUB content viewer, chapter text            | `\"Noto Serif KR\", \"Noto Serif JP\", \"Noto Serif SC\", \"Noto Serif TC\", \"Noto Serif\", \"Batang\", serif`                                                                          |\n| `--mono`   | Code -- code editor, raw HTML view, metadata fields    | `\"JetBrains Mono\", monospace`                                                                                                                                                |\n\nThese variables are defined in `src/styles/index.css` and bundled into `dist/epub-studio.css`. The fallback chain ensures the browser picks the correct font per character (e.g. Korean glyphs from `Noto Sans KR`, Japanese from `Noto Sans JP`, Arabic from `Noto Sans Arabic`, etc.).\n\n### Default fonts loaded\n\n| CSS Variable | Fonts loaded from Google Fonts                                | Coverage                                       |\n| ------------ | ------------------------------------------------------------- | ---------------------------------------------- |\n| `--font`     | Noto Sans + KR, JP, SC, TC, Arabic, Devanagari, Thai, Bengali | UI -- Latin, CJK, Arabic, Hindi, Thai, Bengali |\n| `--r-font`   | Noto Serif + KR, JP, SC, TC                                   | Reader -- Latin, CJK                           |\n| `--mono`     | JetBrains Mono                                                | Code editor                                    |\n\nGoogle Fonts only downloads glyphs actually used on the page (unicode-range subsetting), so the real network payload stays small.\n\n### Custom fonts\n\nIf your host app already loads fonts (e.g. via `next/font`, `@font-face`, or a different CDN), pass `useCustomFonts: true` to skip auto-injection:\n\n```typescript\nconst instance = mount(container, {\n  useCustomFonts: true,\n});\n```\n\nWhen `useCustomFonts` is `true`, you must ensure the font families referenced by `--font`, `--r-font`, and `--mono` are available in the document. You can either:\n\n- Load the same font families that the defaults reference (e.g. Noto Sans KR)\n- Override the CSS variables on `:root` or `.epub-studio-root` to point to your own fonts\n\n### Next.js examples\n\n**Default (auto-inject) -- no font setup needed:**\n\n```tsx\n// app/epub/page.tsx\n\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport \"@aurorah/epub-studio/style.css\";\n\nexport default function EpubPage() {\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    let cleanup: (() => void) | undefined;\n    let cancelled = false;\n\n    async function init() {\n      const { mount } = await import(\"@aurorah/epub-studio\");\n      if (cancelled || !ref.current) return;\n\n      const instance = mount(ref.current, { theme: \"dark\" });\n      cleanup = () => instance.destroy();\n    }\n\n    init();\n\n    return () => {\n      cancelled = true;\n      cleanup?.();\n    };\n  }, []);\n\n  return <div ref={ref} style={{ width: \"100vw\", height: \"100vh\" }} />;\n}\n```\n\n**With wMCP host integration:**\n\nUse this when the Next.js app should observe EPUB Studio events, override save/export behavior, or close/navigate from the host app.\n\n```tsx\n// app/epub/page.tsx\n\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport \"@aurorah/epub-studio/style.css\";\nimport { setupHost } from \"@/wmcp/epub-studio\";\n\nexport default function EpubPage() {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const mountedRef = useRef(false);\n  const [ready, setReady] = useState(false);\n\n  useEffect(() => {\n    setReady(true);\n  }, []);\n\n  useEffect(() => {\n    if (!ready || !containerRef.current || mountedRef.current) return;\n    mountedRef.current = true;\n\n    let cleanup: (() => void) | undefined;\n    let cancelled = false;\n\n    async function init() {\n      const { mount } = await import(\"@aurorah/epub-studio\");\n      if (cancelled || !containerRef.current) return;\n\n      const instance = mount(containerRef.current, {\n        theme: \"dark\",\n        locale: \"ko\",\n        openButton: true,\n        translateButton: true,\n        closeButton: true,\n      });\n\n      const host = setupHost(instance.wmcpClient, {\n        onClose: () => {\n          cleanup?.();\n          window.location.href = \"/\";\n        },\n      });\n\n      // Gate the EPUB fetch + open on `wmcp:ready`. See the \"Studio readiness\"\n      // note below for why this matters — emitting `epub:openFile` before the\n      // studio's first paint causes a race where TOC populates but the\n      // viewer / editor / code panes stay empty.\n      host.on(\"wmcp:ready\", async () => {\n        const blob = await fetchEpubBlob();\n        host.emit(\"epub:openFile\", { fileData: blob, fileName: \"book.epub\" });\n      });\n\n      cleanup = () => {\n        host.destroy();\n        instance.destroy();\n      };\n    }\n\n    init();\n\n    return () => {\n      cancelled = true;\n      cleanup?.();\n      mountedRef.current = false;\n    };\n  }, [ready]);\n\n  return <div ref={containerRef} id=\"epub-studio-root\" style={{ width: \"100vw\", height: \"100vh\" }} />;\n}\n```\n\n```ts\n// src/wmcp/epub-studio.ts\nimport { WmcpHost } from \"@aurorah/wmcp\";\nimport type { WmcpClient } from \"@aurorah/wmcp\";\nimport { saveEpubToApi, exportEpubToApi, writeAuditLog } from \"@/app/epub/actions\";\n\nexport function setupHost(client: WmcpClient, opts?: { onClose?: () => void }): WmcpHost {\n  const host = new WmcpHost(client);\n\n  host.override(\"epub:open\", async (params, defaultEpubOpen) => {\n    const result = await defaultEpubOpen(params);\n    await writeAuditLog({ action: \"open\", detail: { fileName: params.fileName } });\n    return result;\n  });\n\n  host.override(\"epub:save\", async (params, defaultEpubSave) => {\n    const blob = await defaultEpubSave(params);\n    return await saveEpubToApi(blob as Blob);\n  });\n\n  host.override(\"epub:export\", async (params, defaultEpubExport) => {\n    const blob = await defaultEpubExport(params);\n    return await exportEpubToApi(params.platformId as string, blob as Blob);\n  });\n\n  host.connectDirect({\n    \"log:write\": async (params) => writeAuditLog(params as { action: string; detail?: object }),\n  });\n\n  host.on(\"epub:loaded\", (data) => console.log(\"[Host] EPUB loaded:\", data));\n  host.on(\"epub:modified\", (data) => console.log(\"[Host] EPUB modified:\", data));\n  host.on(\"epub:translate\", (data) => console.log(\"[Host] EPUB translate requested:\", data));\n\n  if (opts?.onClose) {\n    host.on(\"epub:close\", () => opts.onClose!());\n  }\n\n  return host;\n}\n```\n\nKey points:\n\n- Keep `import \"@aurorah/epub-studio/style.css\"` static so Next.js includes the CSS.\n- Dynamically import `mount()` inside the client effect because EPUB Studio depends on browser APIs.\n- Use `mountedRef` and `cancelled` to avoid duplicate mounts and async mount after unmount.\n- `setupHost(instance.wmcpClient)` connects the module to the host app.\n- `host.override()` lets the host wrap default module behavior and then forward blobs to server actions.\n- `host.connectDirect()` exposes optional host requirements like `log:write` back to the module.\n- Always destroy both `host` and `instance` in cleanup.\n- **Always do `epub:openFile` (and any other host-side EPUB load logic) inside `host.on(\"wmcp:ready\", ...)`** — see \"Studio readiness\" below.\n\n#### Studio readiness — `wmcp:ready`\n\n`mount()` returns synchronously, but the Reader pane sizing, Monaco editor worker, CodeEditor, and Fonts only stabilize after the browser paints once. Emitting `epub:openFile` during that gap causes a race where TOC / 파일구조 populates (sync wMCP listeners on the store) but the viewer / editor / code panes silently stay on the placeholder.\n\nStarting in `@aurorah/epub-studio@1.1.4` (with `@aurorah/wmcp@1.1.0`), the studio emits the protocol-level `wmcp:ready` event once all subsystems have laid out (after two chained `requestAnimationFrame`s inside `mount()`). Hosts MUST run their EPUB fetch + open logic inside this listener:\n\n```ts\nhost.on(\"wmcp:ready\", async () => {\n  const blob = await fetchEpubBlob();\n  host.emit(\"epub:openFile\", { fileData: blob, fileName: \"book.epub\" });\n});\n```\n\nwMCP also buffers host->module events that arrive before the studio's first paint and replays them FIFO once readiness fires, so an early emit will not be lost. The `wmcp:ready` listener is still the recommended entry point because (1) it lets the host start its fetch lazily — only after the studio is actually mounted — and (2) any post-emit UI like a \"loading EPUB\" spinner can be coordinated against the same readiness signal.\n\n**Custom fonts with `next/font` (2 files needed):**\n\nStep 1 -- Load fonts in your root layout:\n\n```tsx\n// app/layout.tsx\nimport { Noto_Sans_KR, Noto_Serif_KR } from \"next/font/google\";\n\nconst sans = Noto_Sans_KR({ subsets: [\"latin\"], variable: \"--font\" });\nconst serif = Noto_Serif_KR({ subsets: [\"latin\"], variable: \"--r-font\" });\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n  return (\n    <html lang=\"ko\" className={`${sans.variable} ${serif.variable}`}>\n      <body>{children}</body>\n    </html>\n  );\n}\n```\n\nStep 2 -- Mount with `useCustomFonts: true` so the package uses the fonts from Step 1 instead of auto-injecting:\n\n```tsx\n// app/epub/page.tsx\n\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport \"@aurorah/epub-studio/style.css\";\n\nexport default function EpubPage() {\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    let cleanup: (() => void) | undefined;\n    let cancelled = false;\n\n    async function init() {\n      const { mount } = await import(\"@aurorah/epub-studio\");\n      if (cancelled || !ref.current) return;\n\n      const instance = mount(ref.current, {\n        theme: \"dark\",\n        useCustomFonts: true,\n      });\n      cleanup = () => instance.destroy();\n    }\n\n    init();\n\n    return () => {\n      cancelled = true;\n      cleanup?.();\n    };\n  }, []);\n\n  return <div ref={ref} style={{ width: \"100vw\", height: \"100vh\" }} />;\n}\n```\n\n## wMCP Contract\n\nDefined in `wmcp-manifest.json`. Read it for the full protocol spec.\n\n### module:capabilities (module provides, host can override)\n\n| Capability    | Description                          |\n| ------------- | ------------------------------------ |\n| `epub:open`   | Open and parse an EPUB file          |\n| `epub:save`   | Build an EPUB Blob from editor state |\n| `epub:export` | Export EPUB for a specific platform  |\n\n### module:events (module emits, host listens)\n\n| Event            | Description                        |\n| ---------------- | ---------------------------------- |\n| `epub:loaded`    | EPUB file was loaded and parsed    |\n| `epub:modified`  | Content was modified in the editor |\n| `epub:translate` | User clicked the translate button  |\n| `epub:close`     | User clicked the close button      |\n\nIn addition, the protocol-level `wmcp:ready` event (emitted by `@aurorah/wmcp >= 1.1.0`) fires once after `mount()` when the studio is fully wired. Hosts MUST gate `epub:openFile` (and other initial host->module commands that depend on a stable studio) on this event — see [Studio readiness](#studio-readiness--wmcpready).\n\n### module:listeners (host emits, module listens)\n\n| Listener        | Description                           |\n| --------------- | ------------------------------------- |\n| `epub:openFile` | Host requests opening a specific EPUB |\n| `epub:setTheme` | Host requests theme change            |\n\n### host:requires (module needs from host, optional)\n\n| Requirement  | Description                                            |\n| ------------ | ------------------------------------------------------ |\n| `log:write`  | Write an audit log                                     |\n| `export:pdf` | Render book HTML to PDF through a host-side PDF engine |\n\n## Export Platforms\n\nThe exporter supports: `standard`, `epub2`, `ridi`, `kakao`, `naver`, `kindle`, `apple`, `syosetu`.\n\n## Tests\n\n```bash\npnpm test\n```\n","readmeFilename":"README.md"}