@prose-reader/core 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/createReaderWithEnhancer.d.ts +0 -83
- package/dist/prose.js +3 -3
- package/dist/prose.js.map +1 -1
- package/dist/prose.umd.cjs +3 -3
- package/dist/prose.umd.cjs.map +1 -1
- package/dist/spine/cfiLocator.d.ts +0 -4
- package/dist/spine/locationResolver.d.ts +0 -8
- package/dist/spineItem/commonSpineItem.d.ts +0 -1
- package/dist/spineItem/createSpineItem.d.ts +0 -2
- package/dist/spineItem/prePaginatedSpineItem.d.ts +0 -2
- package/dist/spineItem/reflowableSpineItem.d.ts +0 -2
- package/dist/spineItemManager.d.ts +0 -13
- package/dist/viewportNavigator/manualViewportNavigator.d.ts +0 -16
- package/dist/viewportNavigator/panViewportNavigator.d.ts +0 -2
- package/package.json +3 -3
package/dist/prose.umd.cjs
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
td {
|
|
34
34
|
max-width: ${p}px;
|
|
35
35
|
}
|
|
36
|
-
`)}}),io(i);let s;return o.layoutAutoResize==="container"&&(s=new ResizeObserver(()=>{i==null||i.layout()}),s.observe(o.containerElement)),Qn(i).subscribe(),r.pipe(Dt(["pageHorizontalMargin","pageVerticalMargin"]),Z(ne),Ee(1),W(()=>{i.layout()}),k(i.$.destroy$)).subscribe(),{...i,destroy:()=>{i.destroy(),s==null||s.disconnect()},setSettings:({pageVerticalMargin:c,pageHorizontalMargin:u,...d})=>{(u!==void 0||c!==void 0)&&r.next({pageHorizontalMargin:u??r.value.pageHorizontalMargin,pageVerticalMargin:c??r.value.pageVerticalMargin}),i.setSettings(d)},$:{...i.$,settings$:v.combineLatest([i.$.settings$,r.asObservable()]).pipe(B(([c,u])=>({...c,...u})))}}},Fe="@prose-reader/core",me=e=>`[${e}]`,ao=(e,t=0)=>{let n=0;const o=performance.now();return()=>{n++;const i=performance.now();L.logMetric({name:`${e} - tick ${n}`,duration:i-o},t)}},_t=e=>({log:(...t)=>{window.__PROSE_READER_DEBUG&&(e?console.log(me(Fe),me(e),...t):console.log(me(Fe),...t))},warn:(...t)=>{window.__PROSE_READER_DEBUG&&(e?console.warn(me(Fe),me(e),...t):console.warn(me(Fe),...t))},error:(...t)=>{console.error(...t)},time:ao,logMetric:(t,n=0)=>{window.__PROSE_READER_DEBUG&&(t.duration<=n||console.warn("[prose-reader] [metric] ",`${t.name} took ${t.duration}ms which is above the ${n}ms target for this function`))},measurePerformance:(t,n=10,o,{disable:i}={})=>i||!window.__PROSE_READER_DEBUG?o:(...r)=>{const s=performance.now(),a=o(...r);if(a&&a.then)return a.then(u=>{const d=performance.now();return L.logMetric({name:t,duration:d-s},n),u});const c=performance.now();return L.logMetric({name:t,duration:c-s},n),a}}),L={..._t(),namespace:e=>_t(e)},co=e=>t=>{const n=e(t),o=new v.Subject,i=r=>{var u;if(!r.href)return;const s=new URL(r.href),a=`${s.origin}${s.pathname}`;((u=n.context.getManifest())==null?void 0:u.spineItems.some(d=>d.href===a))&&n.goToUrl(s)};return n.registerHook("item.onLoad",({frame:r})=>{r.contentDocument&&Array.from(r.contentDocument.querySelectorAll("a")).forEach(s=>s.addEventListener("click",a=>{a.target&&"style"in a.target&&"ELEMENT_NODE"in a.target&&(L.warn("prevented click on",s,a),a.preventDefault(),i(s),o.next({event:"linkClicked",data:s}))}))}),{...n,$:{...n.$,links$:o.asObservable()}}},uo=e=>t=>{const n=e(t),o=()=>{var u;const r=n.getFocusedSpineItemIndex()||0,{end:s=r}=n.locator.getSpineItemsFromReadingOrderPosition(n.getCurrentNavigationPosition())||{},a=((u=n.context.getManifest())==null?void 0:u.spineItems.length)??0,c=s+1;c<a&&n.goToSpineItem(c)},i=()=>{const r=n.getFocusedSpineItemIndex()||0,{begin:s=r}=n.locator.getSpineItemsFromReadingOrderPosition(n.getCurrentNavigationPosition())||{},a=s-1;a>=0&&n.goToSpineItem(a)};return{...n,goToLeftSpineItem:()=>n.context.isRTL()?o():i(),goToRightSpineItem:()=>n.context.isRTL()?i():o()}},lo="pagination",fo=({context:e})=>{const t=new v.BehaviorSubject({beginPageIndex:void 0,beginNumberOfPages:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndex:void 0,endNumberOfPages:0,endCfi:void 0,endSpineItemIndex:void 0}),n=c=>{const u=c.spineItemFrame.getWritingMode(),{width:d,height:l}=c.getElementDimensions();return u==="vertical-rl"?ae(l,e.getPageSize().height):ae(d,e.getPageSize().width)},o=c=>({numberOfPages:n(c.spineItem),pageIndex:c.pageIndex,cfi:c.cfi}),i=L.measurePerformance(`${lo} updateBeginAndEnd`,1,(c,u)=>{const d=o(c),l=o(u),f={beginPageIndex:d.pageIndex,beginNumberOfPages:d.numberOfPages,beginCfi:d.cfi,beginSpineItemIndex:c.spineItemIndex,endPageIndex:l.pageIndex,endNumberOfPages:l.numberOfPages,endCfi:l.cfi,endSpineItemIndex:u.spineItemIndex};t.next({...t.value,...f})},{disable:!0}),r=()=>t.value,s=t.asObservable().pipe(v.distinctUntilChanged(ne));return{destroy:()=>{t.complete()},updateBeginAndEnd:i,getInfo:r,$:{info$:s}}},Mt=(e,t,n)=>{const o=n-e,i=n*(t*e)/n;return Math.max(0,Math.min(o,i))},ae=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),xe=(e,t,n)=>{const o=ae(n,t),i=[...Array(o)].map((r,s)=>s*t);return e>=o*t?i[i.length-1]||0:i.find(r=>e<r+t)||0},go="paginationEnhancer",po=L.namespace(go),ho=e=>t=>{const n=e(t),o={},i=l=>{const f=n.context.getManifest();return l&&f&&mo(f,l)},r=l=>{const f=n.context,g=l.beginSpineItemIndex!==void 0?n.getSpineItem(l.beginSpineItemIndex):void 0,y=l.endSpineItemIndex!==void 0?n.getSpineItem(l.endSpineItemIndex):void 0;return{beginPageIndexInChapter:l.beginPageIndex,beginNumberOfPagesInChapter:l.beginNumberOfPages,beginChapterInfo:g?o[g.item.id]:void 0,beginSpineItemIndex:l.beginSpineItemIndex,beginCfi:l.beginCfi,beginSpineItemReadingDirection:g==null?void 0:g.getReadingDirection(),endChapterInfo:y?o[y.item.id]:void 0,endPageIndexInChapter:l.endPageIndex,endNumberOfPagesInChapter:l.endNumberOfPages,endSpineItemIndex:l.endSpineItemIndex,endSpineItemReadingDirection:y==null?void 0:y.getReadingDirection(),endCfi:l.endCfi,percentageEstimateOfBook:y?n.progression.getPercentageEstimate(f,l.endSpineItemIndex??0,l.endNumberOfPages,l.endPageIndex||0,n.getCurrentViewportPosition(),y):0,isUsingSpread:f.shouldDisplaySpread()}},s=l=>{const f=l.spineItemFrame.getWritingMode(),{width:g,height:y}=l.getElementDimensions(),b=n.context.getSettings();return b.pageTurnDirection==="vertical"&&b.pageTurnMode==="scrollable"?1:f==="vertical-rl"?ae(y,n.context.getPageSize().height):ae(g,n.context.getPageSize().width)},a=()=>n.getSpineItems().map(l=>s(l),0);n.$.itemsCreated$.pipe(W(l=>l.forEach(({item:f})=>{o[f.id]=i(f)})),k(n.$.destroy$)).subscribe();const c=n.$.pagination$.pipe(B(r),Z(ne)),u=n.$.layout$.pipe(je(10,v.animationFrameScheduler),te(n.$.pagination$),B(()=>{const l=a();return{numberOfPagesPerItems:l,numberOfTotalPages:l.reduce((f,g)=>f+g,0)}}),Z(ne),Ze({numberOfPagesPerItems:[],numberOfTotalPages:0})),d=v.combineLatest([c,u]).pipe(B(([l,f])=>({...l,...f,beginAbsolutePageIndex:f.numberOfPagesPerItems.slice(0,l.beginSpineItemIndex).reduce((g,y)=>g+y,l.beginPageIndexInChapter??0),endAbsolutePageIndex:f.numberOfPagesPerItems.slice(0,l.endSpineItemIndex).reduce((g,y)=>g+y,l.endPageIndexInChapter??0)})),W(l=>{po.log("pagination",l)}),Ge(1),k(n.$.destroy$));return{...n,$:{...n.$,pagination$:d}}},mo=(e,t)=>{const{
|
|
36
|
+
`)}}),io(i);let s;return o.layoutAutoResize==="container"&&(s=new ResizeObserver(()=>{i==null||i.layout()}),s.observe(o.containerElement)),Qn(i).subscribe(),r.pipe(Dt(["pageHorizontalMargin","pageVerticalMargin"]),Z(ne),Ee(1),W(()=>{i.layout()}),k(i.$.destroy$)).subscribe(),{...i,destroy:()=>{i.destroy(),s==null||s.disconnect()},setSettings:({pageVerticalMargin:c,pageHorizontalMargin:u,...d})=>{(u!==void 0||c!==void 0)&&r.next({pageHorizontalMargin:u??r.value.pageHorizontalMargin,pageVerticalMargin:c??r.value.pageVerticalMargin}),i.setSettings(d)},$:{...i.$,settings$:v.combineLatest([i.$.settings$,r.asObservable()]).pipe(B(([c,u])=>({...c,...u})))}}},Fe="@prose-reader/core",me=e=>`[${e}]`,ao=(e,t=0)=>{let n=0;const o=performance.now();return()=>{n++;const i=performance.now();L.logMetric({name:`${e} - tick ${n}`,duration:i-o},t)}},_t=e=>({log:(...t)=>{window.__PROSE_READER_DEBUG&&(e?console.log(me(Fe),me(e),...t):console.log(me(Fe),...t))},warn:(...t)=>{window.__PROSE_READER_DEBUG&&(e?console.warn(me(Fe),me(e),...t):console.warn(me(Fe),...t))},error:(...t)=>{console.error(...t)},time:ao,logMetric:(t,n=0)=>{window.__PROSE_READER_DEBUG&&(t.duration<=n||console.warn("[prose-reader] [metric] ",`${t.name} took ${t.duration}ms which is above the ${n}ms target for this function`))},measurePerformance:(t,n=10,o,{disable:i}={})=>i||!window.__PROSE_READER_DEBUG?o:(...r)=>{const s=performance.now(),a=o(...r);if(a&&a.then)return a.then(u=>{const d=performance.now();return L.logMetric({name:t,duration:d-s},n),u});const c=performance.now();return L.logMetric({name:t,duration:c-s},n),a}}),L={..._t(),namespace:e=>_t(e)},co=e=>t=>{const n=e(t),o=new v.Subject,i=r=>{var u;if(!r.href)return;const s=new URL(r.href),a=`${s.origin}${s.pathname}`;((u=n.context.getManifest())==null?void 0:u.spineItems.some(d=>d.href===a))&&n.goToUrl(s)};return n.registerHook("item.onLoad",({frame:r})=>{r.contentDocument&&Array.from(r.contentDocument.querySelectorAll("a")).forEach(s=>s.addEventListener("click",a=>{a.target&&"style"in a.target&&"ELEMENT_NODE"in a.target&&(L.warn("prevented click on",s,a),a.preventDefault(),i(s),o.next({event:"linkClicked",data:s}))}))}),{...n,$:{...n.$,links$:o.asObservable()}}},uo=e=>t=>{const n=e(t),o=()=>{var u;const r=n.getFocusedSpineItemIndex()||0,{end:s=r}=n.locator.getSpineItemsFromReadingOrderPosition(n.getCurrentNavigationPosition())||{},a=((u=n.context.getManifest())==null?void 0:u.spineItems.length)??0,c=s+1;c<a&&n.goToSpineItem(c)},i=()=>{const r=n.getFocusedSpineItemIndex()||0,{begin:s=r}=n.locator.getSpineItemsFromReadingOrderPosition(n.getCurrentNavigationPosition())||{},a=s-1;a>=0&&n.goToSpineItem(a)};return{...n,goToLeftSpineItem:()=>n.context.isRTL()?o():i(),goToRightSpineItem:()=>n.context.isRTL()?i():o()}},lo="pagination",fo=({context:e})=>{const t=new v.BehaviorSubject({beginPageIndex:void 0,beginNumberOfPages:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndex:void 0,endNumberOfPages:0,endCfi:void 0,endSpineItemIndex:void 0}),n=c=>{const u=c.spineItemFrame.getWritingMode(),{width:d,height:l}=c.getElementDimensions();return u==="vertical-rl"?ae(l,e.getPageSize().height):ae(d,e.getPageSize().width)},o=c=>({numberOfPages:n(c.spineItem),pageIndex:c.pageIndex,cfi:c.cfi}),i=L.measurePerformance(`${lo} updateBeginAndEnd`,1,(c,u)=>{const d=o(c),l=o(u),f={beginPageIndex:d.pageIndex,beginNumberOfPages:d.numberOfPages,beginCfi:d.cfi,beginSpineItemIndex:c.spineItemIndex,endPageIndex:l.pageIndex,endNumberOfPages:l.numberOfPages,endCfi:l.cfi,endSpineItemIndex:u.spineItemIndex};t.next({...t.value,...f})},{disable:!0}),r=()=>t.value,s=t.asObservable().pipe(v.distinctUntilChanged(ne));return{destroy:()=>{t.complete()},updateBeginAndEnd:i,getInfo:r,$:{info$:s}}},Mt=(e,t,n)=>{const o=n-e,i=n*(t*e)/n;return Math.max(0,Math.min(o,i))},ae=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),xe=(e,t,n)=>{const o=ae(n,t),i=[...Array(o)].map((r,s)=>s*t);return e>=o*t?i[i.length-1]||0:i.find(r=>e<r+t)||0},go="paginationEnhancer",po=L.namespace(go),ho=e=>t=>{const n=e(t),o={},i=l=>{const f=n.context.getManifest();return l&&f&&mo(f,l)},r=l=>{const f=n.context,g=l.beginSpineItemIndex!==void 0?n.getSpineItem(l.beginSpineItemIndex):void 0,y=l.endSpineItemIndex!==void 0?n.getSpineItem(l.endSpineItemIndex):void 0;return{beginPageIndexInChapter:l.beginPageIndex,beginNumberOfPagesInChapter:l.beginNumberOfPages,beginChapterInfo:g?o[g.item.id]:void 0,beginSpineItemIndex:l.beginSpineItemIndex,beginCfi:l.beginCfi,beginSpineItemReadingDirection:g==null?void 0:g.getReadingDirection(),endChapterInfo:y?o[y.item.id]:void 0,endPageIndexInChapter:l.endPageIndex,endNumberOfPagesInChapter:l.endNumberOfPages,endSpineItemIndex:l.endSpineItemIndex,endSpineItemReadingDirection:y==null?void 0:y.getReadingDirection(),endCfi:l.endCfi,percentageEstimateOfBook:y?n.progression.getPercentageEstimate(f,l.endSpineItemIndex??0,l.endNumberOfPages,l.endPageIndex||0,n.getCurrentViewportPosition(),y):0,isUsingSpread:f.shouldDisplaySpread()}},s=l=>{const f=l.spineItemFrame.getWritingMode(),{width:g,height:y}=l.getElementDimensions(),b=n.context.getSettings();return b.pageTurnDirection==="vertical"&&b.pageTurnMode==="scrollable"?1:f==="vertical-rl"?ae(y,n.context.getPageSize().height):ae(g,n.context.getPageSize().width)},a=()=>n.getSpineItems().map(l=>s(l),0);n.$.itemsCreated$.pipe(W(l=>l.forEach(({item:f})=>{o[f.id]=i(f)})),k(n.$.destroy$)).subscribe();const c=n.$.pagination$.pipe(B(r),Z(ne)),u=n.$.layout$.pipe(je(10,v.animationFrameScheduler),te(n.$.pagination$),B(()=>{const l=a();return{numberOfPagesPerItems:l,numberOfTotalPages:l.reduce((f,g)=>f+g,0)}}),Z(ne),Ze({numberOfPagesPerItems:[],numberOfTotalPages:0})),d=v.combineLatest([c,u]).pipe(B(([l,f])=>({...l,...f,beginAbsolutePageIndex:f.numberOfPagesPerItems.slice(0,l.beginSpineItemIndex).reduce((g,y)=>g+y,l.beginPageIndexInChapter??0),endAbsolutePageIndex:f.numberOfPagesPerItems.slice(0,l.endSpineItemIndex).reduce((g,y)=>g+y,l.endPageIndexInChapter??0)})),W(l=>{po.log("pagination",l)}),Ge(1),k(n.$.destroy$));return{...n,$:{...n.$,pagination$:d}}},mo=(e,t)=>{const{href:n}=t;return Vt(n,e.nav.toc)},Vt=(e,t)=>t.reduce((n,o)=>{const i=o.path.indexOf("#"),r=i>0?o.path.substr(0,i):o.path;if(e.endsWith(r))return{title:o.title,path:o.path};const s=Vt(e,o.contents);return s?{subChapter:s,title:o.title,path:o.path}:n},void 0),kt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],yo=e=>t=>{const n=e(t),o=new v.BehaviorSubject(t.theme??"bright"),i=()=>{const a=kt.find(c=>c.name===o.value);return`
|
|
37
37
|
body {
|
|
38
38
|
${a!==void 0?`background-color: ${a.backgroundColor} !important;`:""}
|
|
39
39
|
}
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
padding: 0px;
|
|
61
61
|
transition: opacity 300ms;
|
|
62
62
|
opacity: 0;
|
|
63
|
-
`,v.of(e)}),Ht=e=>({frame:e,removeStyle:Co(e),addStyle:Eo(e)}),jt=async(e,t)=>{if(typeof e=="string")return e;const n=st.parseContentType(e.headers.get("Content-Type")||"")||st.
|
|
63
|
+
`,v.of(e)}),Ht=e=>({frame:e,removeStyle:Co(e),addStyle:Eo(e)}),jt=async(e,t)=>{if(typeof e=="string")return e;const n=st.parseContentType(e.headers.get("Content-Type")||"")||st.detectMimeTypeFromName(t.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(i=>i===n)){const i=await oo(await e.blob());return`
|
|
64
64
|
<html>
|
|
65
65
|
<head>
|
|
66
66
|
${t.renditionLayout!=="reflowable"?'<meta name="viewport" content="width=device-width, minimum-scale=0.1">':""}
|
|
@@ -247,7 +247,7 @@
|
|
|
247
247
|
`,ei=({item:e,context:t,containerElement:n,iframeEventBridgeElement:o,hooks$:i,viewportState$:r})=>e.renditionLayout==="pre-paginated"?qo({item:e,context:t,containerElement:n,iframeEventBridgeElement:o,hooks$:i,viewportState$:r}):Zo({item:e,context:t,containerElement:n,iframeEventBridgeElement:o,hooks$:i,viewportState$:r}),ti=({iframeEventBridgeElement:e,locator:t})=>({normalizeEventForViewport:o=>{var c;const i=o.target===e,r=Fo(o),s=(c=r==null?void 0:r.view)==null?void 0:c.frameElement;if(!i||!r||!s)return o;const a=t.getSpineItemFromIframe(s);if(!a)return o;if(et(o)){const{clientX:u,clientY:d}=a.translateFramePositionIntoPage(o),l=new PointerEvent(o.type,{...o,clientX:u,clientY:d});return Object.defineProperty(l,"target",{value:r.target,enumerable:!0}),l}if(Xt(o)){const{clientX:u,clientY:d}=a.translateFramePositionIntoPage(o),l=new MouseEvent(o.type,{...o,clientX:u,clientY:d});return Object.defineProperty(l,"target",{value:r.target,enumerable:!0}),l}if(zo(o)){const u=Array.from(o.touches).map(l=>{const{clientX:f,clientY:g}=a.translateFramePositionIntoPage(l);return new Touch({identifier:l.identifier,target:l.target,clientX:f,clientY:g})}),d=new TouchEvent(o.type,{touches:u,changedTouches:u,targetTouches:u});return Object.defineProperty(d,"target",{value:r.target,enumerable:!0}),d}return o}}),tt=Node.ELEMENT_NODE,nt=Node.TEXT_NODE,ot=Node.CDATA_SECTION_NODE;function ni(e){return e.replace(/[\[\]\^,();]/g,"^$&")}function oi(e,t,n){n=n||0;const o=[];let i=0,r;do{if(r=e.match(t),!r)break;o.push(r.index+n),i+=r.index+r.length,e=e.slice(r.index+r.length)}while(i<e.length);return o}function ii(e,t){let n,o,i,r;for(i=0;i<e.length;i++)r=Math.abs(e[i]-t),(!i||r<n)&&(r=n,o=e[i]);return o}function ri(e,t,n){let o=0,i,r=0,s=!0,a,c;for(a=0;a<e.length;a++)if(c=e[a],c.nodeType===tt){if(i||s?(o+=2,s=!1):o++,t===c)return c.tagName.toLowerCase()==="img"?{count:o,offset:n}:{count:o};r=0,i=!0}else if((c==null?void 0:c.nodeType)===nt||(c==null?void 0:c.nodeType)===ot){if((i||s)&&(o++,s=!1),t===c)return{count:o,offset:n+r};r+=c.textContent.length,i=!1}else continue;throw new Error("The specified node was not found in the array of siblings")}function si(e,t){const n=typeof e=="number",o=typeof t=="number";return!n&&!o?0:!n&&o?-1:n&&!o?1:(e||0)-(t||0)}function ai(e,t){if(!e&&!t)return 0;if(!e&&t)return-1;if(e&&!t)return 1;const n=(e.y||0)-(t.y||0);return n||(e.x||0)-(t.x||0)}class ye{constructor(t,n){this.isRange=!1,this.opts=Object.assign({flattenRange:!1,stricter:!0},n||{}),this.cfi=t,this.parts=[];const o=/^epubcfi\((.*)\)$/;t=t.trim();const i=t.match(o);if(!i)throw new Error("Not a valid CFI");if(i.length<2)return;t=i[1]||"";let r,s,a,c=[],u=0;for(;t.length;){if({parsed:r,offset:s,newDoc:a}=this.parse(t),!r||s===null)throw new Error("Parsing failed");if(u&&a)throw new Error("CFI is a range that spans multiple documents. This is not allowed");c.push(r),(a||t.length-s<=0)&&(u===2?this.to=c:this.parts.push(c),c=[]),t=t.slice(s),t[0]===","&&(u===0?(c.length&&this.parts.push(c),c=[]):u===1&&(c.length&&(this.from=c),c=[]),t=t.slice(1),u++)}this.from&&this.from.length&&(this.opts.flattenRange||!this.to||!this.to.length?(this.parts=this.parts.concat(this.from),delete this.from,delete this.to):this.isRange=!0),this.opts.stricter&&this.removeIllegalOpts()}removeIllegalOpts(t){if(!t)if(this.from){if(this.removeIllegalOpts(this.from),!this.to)return;t=this.to}else t=this.parts;let n,o,i,r;for(n=0;n<t.length;n++)for(i=t[n],o=0;o<i.length-1;o++)r=i[o],delete r.temporal,delete r.spatial,delete r.offset,delete r.textLocationAssertion}static generatePart(t,n,o){let i="",r;for(;t.parentNode;)r=ri(t.parentNode.childNodes,t,n),!i&&r.offset&&(i=":"+r.offset),i="/"+r.count+(t.id?"["+ni(t.id)+"]":"")+i,t=t.parentNode;return i}static generate(t,n,o){let i;if(Array.isArray(t)){const r=[];for(const s of t)r.push(this.generatePart(s.node,s.offset,o));i=r.join("!")}else i=this.generatePart(t,n,o);return o&&(i+=o),"epubcfi("+i+")"}static toParsed(t){return t.isRange?t.getFrom():t.get()}static comparePath(t,n){const o=Math.max(t.length,n.length);let i,r,s,a;for(i=0;i<o;i++){if(r=t[i],s=n[i],!r)return-1;if(!s)return 1;if(a=this.compareParts(r,s),a)return a}return 0}static sort(t){t.sort((n,o)=>this.compare(n,o))}static compare(t,n){let o=t.get(),i=n.get();if(t.isRange||n.isRange){if(t.isRange&&n.isRange){const r=this.comparePath(o.from,i.from);return r||this.comparePath(o.to,i.to)}return t.isRange&&(o=o.from),n.isRange&&(i=i.from),this.comparePath(o,i)}else return this.comparePath(o,i)}static compareParts(t,n){const o=Math.max(t.length,n.length);let i,r,s,a;for(i=0;i<o;i++){if(r=t[i],s=n[i],!r)return-1;if(!s)return 1;if(a=r.nodeIndex-s.nodeIndex,a)return a;if(r.nodeIndex===0)return 0;if(!(i<o-1)&&(r.nodeIndex%2===0&&(a=si(r.temporal,s.temporal),a||(a=ai(r.spatial,s.spatial),a))||(a=(r.offset||0)-(s.offset||0),a)))return a}return 0}decodeEntities(t,n){try{const o=t.createElement("textarea");return o.innerHTML=n,o.value||""}catch{return n}}trueLength(t,n){return this.decodeEntities(t,n).length}getFrom(){if(!this.isRange)throw new Error("Trying to get beginning of non-range CFI");if(!this.from)return this.deepClone(this.parts);const t=this.deepClone(this.parts);return t[t.length-1]=t[t.length-1].concat(this.from),t}getTo(){if(!this.isRange)throw new Error("Trying to get end of non-range CFI");const t=this.deepClone(this.parts);return t[t.length-1]=t[t.length-1].concat(this.to),t}get(){return this.isRange?{from:this.getFrom(),to:this.getTo(),isRange:!0}:this.deepClone(this.parts)}parseSideBias(t,n){if(!n)return;const o=n.trim().match(/^(.*);s=([ba])$/);if(!o||o.length<3){typeof t.textLocationAssertion=="object"?t.textLocationAssertion.post=n:t.textLocationAssertion=n;return}o[1]&&(typeof t.textLocationAssertion=="object"?t.textLocationAssertion.post=o[1]:t.textLocationAssertion=o[1]),o[2]==="a"?t.sideBias="after":t.sideBias="before"}parseSpatialRange(t){if(!t)return;const n=t.trim().match(/^([\d\.]+):([\d\.]+)$/);if(!n||n.length<3)return;const o={x:parseInt(n[1]),y:parseInt(n[2])};if(!(typeof o.x!="number"||typeof o.y!="number"))return o}parse(t){const n={},o=/[\d]/;let i,r,s,a,c,u=!1,d=!1,l;for(l=0;l<=t.length;l++){if(l<t.length?a=t[l]:a="",a==="^"&&!c){c=!0;continue}if(r==="/")if(a.match(o)){i?i+=a:i=a,c=!1;continue}else i&&(n.nodeIndex=parseInt(i),i=null),s=r,r=null;if(r===":")if(a.match(o)){i?i+=a:i=a,c=!1;continue}else i&&(n.offset=parseInt(i),i=null),s=r,r=null;if(r==="@"){let f=!1;if(a.match(o)||a==="."||a===":"?a===":"&&(u?f=!0:u=!0):f=!0,f)s=r,r=null,i&&u&&(n.spatial=this.parseSpatialRange(i)),i=null;else{i?i+=a:i=a,c=!1;continue}}if(r==="~")if(a.match(o)||a==="."){i?i+=a:i=a,c=!1;continue}else i&&(n.temporal=parseFloat(i)),s=r,r=null,i=null;if(!r){if(a==="!"){l++,r=a;break}if(a===",")break;if(a==="/"){if(d)break;d=!0,s=r,r=a,c=!1;continue}if(a===":"||a==="~"||a==="@"){if(this.opts.stricter&&(a===":"&&(typeof n.temporal<"u"||typeof n.spatial<"u")||(a==="~"||a==="@")&&typeof n.offset<"u"))break;s=r,r=a,c=!1,u=!1;continue}if(a==="["&&!c&&s===":"){s=r,r="[",c=!1;continue}if(a==="["&&!c&&s==="/"){s=r,r="nodeID",c=!1;continue}}if(r==="["){a==="]"&&!c?(s=r,r=null,this.parseSideBias(n,i),i=null):a===","&&!c?(n.textLocationAssertion={},i&&(n.textLocationAssertion.pre=i),i=null):i?i+=a:i=a,c=!1;continue}if(r==="nodeID"){a==="]"&&!c?(s=r,r=null,n.nodeID=i,i=null):i?i+=a:i=a,c=!1;continue}c=!1}if(!n.nodeIndex&&n.nodeIndex!==0)throw new Error("Missing child node index in CFI");return{parsed:n,offset:l,newDoc:r==="!"}}getChildNodeByCFIIndex(t,n,o,i){const r=n.childNodes;if(!r.length)return{node:n,offset:0};if(o<=0)return{node:r[0],relativeToNode:"before",offset:0};let s=0,a,c,u;for(c=0;c<r.length;c++)switch(u=r[c],u.nodeType){case tt:if(s%2===0){if(s+=2,s>=o)return u.tagName.toLowerCase()==="img"&&i?{node:u,offset:i}:{node:u,offset:0}}else{if(s+=1,s===o)return u.tagName.toLowerCase()==="img"&&i?{node:u,offset:i}:{node:u,offset:0};if(s>o)return a?{node:a,offset:this.trueLength(t,a.textContent)}:{node:n,offset:0}}a=u;break;case nt:case ot:if((s===0||s%2===0)&&(s+=1),s===o){const d=this.trueLength(t,u.textContent);if(i>=d)i-=d;else return{node:u,offset:i}}a=u;break;default:continue}if(o>s){const d={relativeToNode:"after",offset:0};return a?d.node=a:d.node=n,this.isTextNode(d.node)&&(d.offset=this.trueLength(t,d.node.textContent.length)),d}}isTextNode(t){return t?t.nodeType===nt||t.nodeType===ot:!1}correctOffset(t,n,o,i){let r=n,s;if(typeof i=="string"?s=this.decodeEntities(t,i):(i.pre=this.decodeEntities(t,i.pre),i.post=this.decodeEntities(t,i.post),s=i.pre+"."+i.post),!this.isTextNode(n))return{node:n,offset:0};for(;this.isTextNode(r.previousSibling);)r=r.previousSibling;const a=r;let c;const u=[];let d="",l=0;for(;this.isTextNode(r)&&(c=this.decodeEntities(t,r.textContent),u[l]=c.length,d+=c,!!r.nextSibling);)r=r.nextSibling,l++;const f=i.pre?i.pre.length:0,g=oi(d,new RegExp(s),f);if(!g.length)return{node:n,offset:o};let y=ii(g,o);if(r===n&&y===o)return{node:n,offset:o};for(l=0,r=a;y>=u[l];){if(y-=u[l],y<0)return{node:n,offset:o};const b=[];if(!r.nextSibling||l+1>=b.length)return{node:n,offset:o};l++,r=r.nextSibling}return{node:r,offset:y}}resolveNode(t,n,o,i){if(i=Object.assign({},i||{}),!o)throw new Error("Missing DOM argument");let r;if(t===0&&(r=o.querySelector("package")),!r){for(const l of o.childNodes)if(l.nodeType===tt){r=l;break}}if(r=o,!r)throw new Error("Document incompatible with CFIs");let s=r,a=0,c,u;for(c=n.length-1;c>=0;c--)if(u=n[c],!i.ignoreIDs&&u.nodeID&&(s=o.getElementById(u.nodeID))){a=c+1;break}s||(s=r);let d={node:s,offset:0};for(c=a;c<n.length;c++)u=n[c],u&&(d=this.getChildNodeByCFIIndex(o,d.node,u.nodeIndex,u.offset),u.textLocationAssertion&&(d=this.correctOffset(o,d.node,u.offset,u.textLocationAssertion)));return d}resolveURI(t,n,o){if(o=o||{},t<0||t>this.parts.length-2)throw new Error("index is out of bounds");const i=this.parts[t];if(!i)throw new Error("Missing CFI part for index: "+t);let s=this.resolveNode(t,i,n,o).node;const a=s.tagName.toLowerCase();if(a==="itemref"&&s.parentNode.tagName.toLowerCase()==="spine"){const c=s.getAttribute("idref");if(!c)throw new Error("Referenced node had not 'idref' attribute");if(s=n.getElementById(c),!s)throw new Error("Specified node is missing from manifest");const u=s.getAttribute("href");if(!u)throw new Error("Manifest item is missing href attribute");return u}if(a==="iframe"||a==="embed"){const c=s.getAttribute("src");if(!c)throw new Error(a+" element is missing 'src' attribute");return c}if(a==="object"){const c=s.getAttribute("data");if(!c)throw new Error(a+" element is missing 'data' attribute");return c}if(a==="image"||a==="use"){const c=s.getAttribute("xlink:href");if(!c)throw new Error(a+" element is missing 'xlink:href' attribute");return c}throw new Error("No URI found")}deepClone(t){return JSON.parse(JSON.stringify(t))}resolveLocation(t,n){const o=n.length-1,i=n[o];if(!i)throw new Error("Missing CFI part for index: "+o);const r=this.resolveNode(o,i,t),s=this.deepClone(i[i.length-1]);return delete s.nodeIndex,s.offset||delete r.offset,{...s,...r}}resolveLast(t,n){if(n=Object.assign({range:!1},n||{}),!this.isRange)return this.resolveLocation(t,this.parts);if(n.range){const o=t.createRange(),i=this.getFrom();i.relativeToNode==="before"?o.setStartBefore(i.node,i.offset):i.relativeToNode==="after"?o.setStartAfter(i.node,i.offset):o.setStart(i.node,i.offset);const r=this.getTo();return r.relativeToNode==="before"?o.setEndBefore(r.node,r.offset):r.relativeToNode==="after"?o.setEndAfter(r.node,r.offset):o.setEnd(r.node,r.offset),o}return{from:this.resolveLocation(t,this.getFrom()),to:this.resolveLocation(t,this.getTo()),isRange:!0}}resolve(t,n){return this.resolveLast(t,n)}}const it=e=>{var r,s;const[t]=((r=e.match(/\|(\[prose\~anchor[^\]]*\])+/gi))==null?void 0:r.map(a=>a.replace(/\|\[prose\~anchor\~/,"").replace(/\]/,"")))||[],[n]=((s=e.match(/\|(\[prose\~offset[^\]]*\])+/gi))==null?void 0:s.map(a=>a.replace(/\|\[prose\~offset\~/,"").replace(/\]/,"")))||[],o=e.replace(/\|(\[prose\~[^\]]*\~[^\]]*\])+/gi,""),i=parseInt(n||"");return{cleanedCfi:o,itemId:t&&decodeURIComponent(t),offset:isNaN(i)?void 0:i}},ci=(e,t)=>{const n=e.toString();return{toString:()=>n,getAnchorCfi:()=>{if(e.anchorNode)return ye.generate(e.anchorNode,e.anchorOffset,`|[prose~anchor~${encodeURIComponent(t.id)}]`)},getFocusCfi:()=>{if(e.focusNode)return ye.generate(e.focusNode,e.focusOffset,`|[prose~anchor~${encodeURIComponent(t.id)}]`)}}},Ne=L.namespace("spine"),ui=({ownerDocument:e,context:t,pagination:n,iframeEventBridgeElement:o,spineItemManager:i,hooks$:r,spineItemLocator:s,spineLocator:a,cfiLocator:c,navigation$:u,navigationAdjusted$:d,currentNavigationPosition$:l,viewportState$:f})=>{const g=new v.Subject,y=new v.Subject,b=new v.Subject,w=li(e,r),p=ti({context:t,spineItemManager:i,iframeEventBridgeElement:o,locator:a});let F;const N=()=>{var C;y.next(),i.destroyItems(),(C=t.getManifest())==null||C.spineItems.map(async T=>{const E=ei({item:T,containerElement:w,iframeEventBridgeElement:o,context:t,hooks$:r,viewportState$:f});i.add(E)}),g.next(i.getAll())},$=C=>{let T=!1;i.getAll().forEach((E,O)=>{T=E.manipulateSpineItem(A=>C({index:O,...A}))||T}),T&&i.layout()},P=(C,T)=>{var E;(E=i.get(C))==null||E.manipulateSpineItem(T)};t.$.load$.pipe(W(N),k(t.$.destroy$)).subscribe();const m=f.pipe(j(C=>C==="free"),le(1)),h=C=>m.pipe(W(Ne.measurePerformance("adjustPagination",1,()=>{const T=a.getSpineItemsFromReadingOrderPosition(C),E=T?i.get(T.begin):void 0,O=T?i.get(T.end):void 0,A=n.getInfo().beginCfi,R=n.getInfo().endCfi,M=n.getInfo().beginSpineItemIndex!==(T==null?void 0:T.begin)||A===void 0||(A==null?void 0:A.startsWith("epubcfi(/0")),x=n.getInfo().endSpineItemIndex!==(T==null?void 0:T.end)||R===void 0||(R==null?void 0:R.startsWith("epubcfi(/0"));if(E&&O&&T){const _=a.getSpineItemPositionFromSpinePosition(T.beginPosition,E),z=s.getSpineItemPageIndexFromPosition(_,E),I=a.getSpineItemPositionFromSpinePosition(T.endPosition,O),D=s.getSpineItemPageIndexFromPosition(I,O);n.updateBeginAndEnd({spineItem:E,spineItemIndex:i.getSpineItemIndex(E)??0,pageIndex:s.getSpineItemPageIndexFromPosition(_,E),cfi:M?c.getCfi(z,E):A,options:{isAtEndOfChapter:!1}},{spineItem:O,spineItemIndex:i.getSpineItemIndex(O)??0,pageIndex:s.getSpineItemPageIndexFromPosition(I,O),cfi:x?c.getCfi(D,O):R,options:{isAtEndOfChapter:!1}})}},{disable:!0})));v.merge(i.$.focus$.pipe(W(C=>{const T=C.data,E=T.fingerTracker.$,O=T.selectionTracker.$;F==null||F.unsubscribe(),F=v.merge(O.pipe(j(A=>A.event==="selectionchange"),W(A=>{b.next({type:"onSelectionChange",data:A.data?ci(A.data,T.item):null})})),O.pipe(j(({event:A})=>A==="selectstart"),H(A=>E.pipe(j(({event:R})=>R==="fingermove"),Hn(()=>v.interval(1e3)),k(E.pipe(j(({event:R})=>R==="fingerout"),W(()=>{}))),W(({data:R})=>{}))))).subscribe()}),Ce(C=>(L.error(C),v.EMPTY)),k(t.$.destroy$))).subscribe();const S=u.pipe(W(C=>{const T=Ne.time("navigation",1),E=i.getFocusedSpineItem(),O=a.getSpineItemsFromReadingOrderPosition(C.position);let A=O?i.get(O.begin):void 0,R=O?i.get(O.end):void 0;A=A||E,R=R||E;const M=C.position.spineItem||A;if(M&&M!==E?i.focus(M):M||i.focus(0),M&&A&&R&&O){const x=C.lastUserExpectedNavigation,_=i.getSpineItemIndex(A)??0,z=a.getSpineItemPositionFromSpinePosition(O.beginPosition,A),I=s.getSpineItemPageIndexFromPosition(z,A),D=a.getSpineItemPositionFromSpinePosition(O.endPosition,R),V=s.getSpineItemPageIndexFromPosition(D,R),U=i.getSpineItemIndex(R)??0;n.updateBeginAndEnd({spineItem:A,spineItemIndex:_,pageIndex:I,cfi:(x==null?void 0:x.type)==="navigate-from-cfi"&&M===A?x.data:C.triggeredBy==="adjust"&&t.getSettings().computedPageTurnMode==="controlled"?n.getInfo().beginCfi:(_!==n.getInfo().beginSpineItemIndex,c.getRootCfi(A)),options:{isAtEndOfChapter:!1}},{spineItem:R,spineItemIndex:U,pageIndex:V,cfi:(x==null?void 0:x.type)==="navigate-from-cfi"&&M===R?x.data:C.triggeredBy==="adjust"&&t.getSettings().computedPageTurnMode==="controlled"?n.getInfo().endCfi:(U!==n.getInfo().endSpineItemIndex,c.getRootCfi(R)),options:{isAtEndOfChapter:!1}}),Ne.log("navigation$",{spineItemHasChanged:M!==E,item:M,spineItemToFocus:M,index:i.getSpineItemIndex(M),offset:C,endSpineItem:R,beginSpineItem:A,lastExpectedNavigation:x,spineItemsFromPosition:O})}T()}),ee(),k(t.$.destroy$));return S.pipe(H(C=>h(C.position).pipe(k(i.$.layout$))),k(t.$.destroy$)).subscribe(),v.merge(S,d).pipe(H(()=>m.pipe(te(l),B(([,C])=>{const T=i.getFocusedSpineItemIndex();if(Ne.log("update contents",{focusedSpineItemIndex:T}),T===void 0)return;const{begin:E=T,end:O=T}=a.getSpineItemsFromReadingOrderPosition(C)||{};E!==T&&O!==T?(L.warn("Current viewport is not in sync with focus item, load from focus item rather than viewport"),i.loadContents([T,T])):i.loadContents([E,O])}),le(1))),k(t.$.destroy$)).subscribe(),{element:w,locator:a,spineItemLocator:s,cfiLocator:c,normalizeEventForViewport:p.normalizeEventForViewport,manipulateSpineItems:$,manipulateSpineItem:P,destroy:()=>{g.complete(),y.next(),y.complete(),b.complete(),i.destroy(),F==null||F.unsubscribe(),w.remove()},adjustPagination:h,isSelecting:()=>{var C;return(C=i.getFocusedSpineItem())==null?void 0:C.selectionTracker.isSelecting()},getSelection:()=>{var C;return(C=i.getFocusedSpineItem())==null?void 0:C.selectionTracker.getSelection()},$:{$:b.asObservable(),layout$:i.$.layout$,itemsCreated$:g.asObservable(),itemsBeforeDestroy$:y.asObservable()}}},li=(e,t)=>{const n=e.createElement("div");return n.style.cssText=`
|
|
248
248
|
height: 100%;
|
|
249
249
|
position: relative;
|
|
250
|
-
`,n.className=`${Oe}-spine`,t.getValue().reduce((o,i)=>i.name==="spine.onBeforeContainerCreated"?i.fn(o):o,n)},di=e=>{var n;const t=(n=e.guide)==null?void 0:n.find(o=>o.type==="cover");return e.spineItems.findIndex(o=>t==null?void 0:t.href.endsWith(o.path))},fi="spineItemManager",gi=({context:e})=>{const t=new v.Subject,n=new v.Subject;let o=[];const i=new v.BehaviorSubject([]);let r;const s=()=>{const P=e.getManifest(),m=[],h=(P==null?void 0:P.renditionLayout)==="pre-paginated",S=P?di(P):void 0;i.value.reduce((T,E,O)=>{const A=S===O;let R=e.getPageSize().width,M="none";const x=T.edgeX%e.getVisibleAreaRect().width===0,_=O===i.value.length-1;if(e.shouldDisplaySpread()){!h&&E.item.renditionLayout==="reflowable"&&!_&&(R=e.getPageSize().width*2),!h&&E.item.renditionLayout==="reflowable"&&_&&x&&(R=e.getPageSize().width*2);const V=x&&_&&h;E.item.pageSpreadRight&&x&&!e.isRTL()||E.item.pageSpreadLeft&&x&&e.isRTL()?(M="before",R=e.getPageSize().width*2):V&&(e.isRTL()?M="before":M="after",R=e.getPageSize().width*2),h&&A&&(R=e.getPageSize().width*2)}const{width:z,height:I}=E.layout({minimumWidth:R,blankPagePosition:M,spreadPosition:e.shouldDisplaySpread()?x?e.isRTL()?"right":"left":e.isRTL()?"left":"right":"none"});if(e.getSettings().computedPageTurnDirection==="vertical"){const V=x?T.edgeY:T.edgeY-e.getVisibleAreaRect().height,U=x?0:T.edgeX;e.isRTL()?E.adjustPositionOfElement({top:V,left:U}):E.adjustPositionOfElement({top:V,left:U});const Y=z+U,ue=I+V;return m.push({leftStart:U,leftEnd:Y,topStart:V,topEnd:ue,height:I,width:z}),{edgeX:Y,edgeY:ue}}e.isRTL()?E.adjustPositionOfElement({right:T.edgeX,top:0}):E.adjustPositionOfElement({left:T.edgeX,top:0});const D=z+T.edgeX;return m.push({leftStart:T.edgeX,leftEnd:D,topStart:T.edgeY,topEnd:I,height:I,width:z}),{edgeX:D,edgeY:0}},{edgeX:0,edgeY:0});const C=o.some((T,E)=>!ne(T,m[E]));o=m,L.log(fi,"layout",{hasLayoutChanges:C,itemLayoutInformation:o}),n.next(C)},a=P=>{const m=typeof P=="number"?u(P):P;if(!m)return;const h=i.value.indexOf(m);h!==r&&(r=h,t.next({data:m}))},c=L.measurePerformance("loadContents",10,P=>{var E;const[m,h]=P,S=e.getSettings().numberOfAdjacentSpineItemToPreLoad,C=((E=e.getManifest())==null?void 0:E.renditionLayout)==="pre-paginated",T=e.getSettings().computedPageTurnMode==="scrollable";i.value.forEach((O,A)=>{const R=A<m&&!C&&T?!0:A<m-S,M=A>h+S;!R&&!M?O.loadContent():O.unloadContent()})}),u=P=>typeof P=="number"?i.value[P]:i.value.find(({item:m})=>m.id===P),d=L.measurePerformance("getAbsolutePositionOf",10,P=>{e.getSettings().computedPageTurnDirection;const m=typeof P=="number"?P:i.value.indexOf(P);return o[m]?o[m]||{leftStart:0,leftEnd:0,topStart:0,topEnd:0,width:0,height:0}:{leftStart:0,leftEnd:0,topStart:0,topEnd:0,width:0,height:0}},{disable:!0}),l=()=>r!==void 0?i.value[r]:void 0,f=(P,m)=>i.value.indexOf(P)>i.value.indexOf(m)?"after":"before",g=P=>{if(!P)return;const m=i.value.indexOf(P);return m<0?void 0:m},y=P=>{i.value.push(P),P.$.contentLayout$.pipe(k(e.$.destroy$)).subscribe(()=>{s()}),P.$.loaded$.pipe(W(()=>{P.isUsingVerticalWriting()&&e.setHasVerticalWriting()}),k(e.$.destroy$)).subscribe(),P.load()},b=()=>i.value,w=()=>i.value.length,p=()=>{const P=l();return P&&g(P)},F=L.measurePerformance("getSpineItemAtPosition",10,P=>{const m=i.value.find(h=>{const{leftStart:S,leftEnd:C,topEnd:T,topStart:E}=d(h),O=P.x>=S&&P.x<C;return e.getSettings().computedPageTurnDirection==="horizontal"?O:O&&P.y>=E&&P.y<T});return P.x===0&&!m?i.value[0]:m},{disable:!0}),N=()=>{i.value.forEach(P=>P.destroy())};return{destroyItems:N,add:y,get:u,getAll:b,getLength:w,layout:s,focus:a,loadContents:c,comparePositionOf:f,getAbsolutePositionOf:d,getSpineItemAtPosition:F,getFocusedSpineItem:l,getFocusedSpineItemIndex:p,getSpineItemIndex:g,destroy:()=>{N(),t.complete(),n.complete()},$:{focus$:t.asObservable(),layout$:n.asObservable(),itemIsReady$:i.asObservable().pipe(H(P=>{const m=P.map(h=>h.$.isReady$.pipe(B(S=>({item:h.item,isReady:S}))));return v.merge(...m)}))}}},Zt=({context:e})=>{const t=(u,d)=>{const{width:l,height:f}=d.getElementDimensions(),g=d.getReadingDirection();if(d.isUsingVerticalWriting())return{x:0,y:Mt(e.getPageSize().height,u,f)};const y=Mt(e.getPageSize().width,u,l);return g==="rtl"?{x:l-y-e.getPageSize().width,y:0}:{x:y,y:0}},n=(u,d)=>{const{width:l,height:f}=d.getElementDimensions(),g=d.getReadingDirection(),y=e.getPageSize().width,b=e.getPageSize().height;let w=Math.min(l,Math.max(0,u.x));if(g==="rtl"&&(w=l-w-e.getPageSize().width),d.isUsingVerticalWriting()){const p=ae(f,b);return c(u.y,b,p)}else{const p=ae(l,y);return c(w,y,p)}},o=(u,d)=>{var b;const l=((b=d.getElementDimensions())==null?void 0:b.width)||0,f=e.getPageSize().width,g=d.getBoundingRectOfElementFromSelector(u),y=(g==null?void 0:g.x)||0;return xe(y,f,l)},i=(u,d,l)=>{var b;let f;if((u==null?void 0:u.nodeName)==="img"||(u==null?void 0:u.textContent)===""&&u.nodeType===Node.ELEMENT_NODE)f=u.getBoundingClientRect().x;else if(u){const w=u?Bo(u,d):void 0;f=(w==null?void 0:w.getBoundingClientRect().x)||f}const g=((b=l.getElementDimensions())==null?void 0:b.width)||0,y=e.getPageSize().width;if(f)return{x:xe(f,y,g),y:0}},r=(u,d)=>{var g,y,b;const l=e.getPageSize(),f=(y=(g=d.spineItemFrame)==null?void 0:g.getManipulableFrame())==null?void 0:y.frame;if((b=f==null?void 0:f.contentWindow)!=null&&b.document&&f.contentWindow.document.body!==null){const{x:w,y:p}=t(u,d),F={left:w,right:w+l.width,top:p,bottom:p+l.height};return Vo(f.contentWindow.document,F)}},s=(u,d)=>{const{width:l,height:f}=d.getElementDimensions();return{x:xe(u.x,e.getPageSize().width,l),y:xe(u.y,e.getPageSize().height,f)}},a=(u,d,l)=>{const f=i(u,d,l);return f?n(f,l):void 0},c=(u,d,l)=>{const f=[...Array(l)].map((g,y)=>y*d);return u<=0?0:u>=l*d?l-1:Math.max(0,f.findIndex(g=>u<g+d))};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:t,getSpineItemOffsetFromAnchor:o,getSpineItemPageIndexFromPosition:n,getSpineItemPageIndexFromNode:a,getSpineItemClosestPositionFromUnsafePosition:s,getFirstNodeOrRangeAtPage:r}},pi=({context:e})=>{const t=Zt({context:e}),n=(c,u)=>{let d={x:c.x-e.getPageSize().width,y:c.y};return u.isUsingVerticalWriting()&&(d={x:c.x,y:c.y+e.getPageSize().height}),t.getSpineItemClosestPositionFromUnsafePosition(d,u)},o=(c,u)=>{let d={x:c.x+e.getPageSize().width,y:c.y};return u.isUsingVerticalWriting()&&(d={x:c.x,y:c.y-e.getPageSize().height}),t.getSpineItemClosestPositionFromUnsafePosition(d,u)},i=c=>{if(c.isUsingVerticalWriting()){const u=e.getPageSize().height,d=ae(c.getElementDimensions().height,u);return r(d-1,c)}else{const u=e.getPageSize().width,d=ae(c.getElementDimensions().width,u);return r(d-1,c)}},r=(c,u)=>t.getSpineItemPositionFromPageIndex(c,u);return{getNavigationForLeftPage:n,getNavigationForRightPage:o,getNavigationForLastPage:i,getNavigationForPage:r,getNavigationForPosition:(c,u)=>t.getSpineItemClosestPositionFromUnsafePosition(u,c),getNavigationFromNode:(c,u,d)=>t.getSpineItemPositionFromNode(u,d,c)||{x:0,y:0}}},Jt="spineNavigator",hi=({context:e,spineItemManager:t,cfiLocator:n,locator:o})=>{const i=pi({context:e}),r=(m,h)=>m.x!==h.x||m.y!==h.y,s=(m,h)=>r(m,h)||!!m.spineItem&&!!h.spineItem&&m.spineItem!==h.spineItem,a=L.measurePerformance(`${Jt} wrapPositionWithSafeEdge`,1,m=>{const h=t.get(t.getLength()-1),S=t.getAbsolutePositionOf(h||0),C=S.leftEnd-e.getPageSize().width,T=S.topEnd-e.getPageSize().height;return{x:Math.min(Math.max(0,m.x),C),y:Math.min(Math.max(0,m.y),T)}},{disable:!0}),c=({x:m,y:h})=>({x:m%e.getVisibleAreaRect().width!==0?m-e.getPageSize().width:m,y:h}),u=m=>{const h=n.getSpineItemFromCfi(m),{node:S,offset:C=0}=n.resolveCfi(m)||{};if(!h)L.warn(Jt,`unable to detect item id from cfi ${m}`);else{const T=S?i.getNavigationFromNode(h,S,C):{x:0,y:0},E=o.getSpinePositionFromSpineItemPosition(T,h);return{...c(E),spineItem:h}}return{x:0,y:0}},d=(m,h)=>{if(!h){const T=m*e.getPageSize().width;return N({x:T,y:0})}const S=i.getNavigationForPage(m,h),C=o.getSpinePositionFromSpineItemPosition(S,h);return c(C)},l=m=>{const h=i.getNavigationForLastPage(m),S=o.getSpinePositionFromSpineItemPosition(h,m);return c(S)},f=m=>{const h=t.get(m);if(h){const S=o.getSpinePositionFromSpineItem(h);return{...c(S),spineItem:h}}return{x:0,y:0}},g=m=>{const h=e.getSettings().computedPageTurnDirection,S=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem(),C=m;if(!S)return C;const T=o.getSpineItemPositionFromSpinePosition(m,S),E=i.getNavigationForRightPage(T,S);return!T.outsideOfBoundaries&&r(E,T)?o.getSpinePositionFromSpineItemPosition(E,S):a(e.isRTL()?h==="horizontal"?{x:m.x-e.getPageSize().width,y:0}:{y:m.y+e.getPageSize().height,x:0}:h==="horizontal"?{x:m.x+e.getPageSize().width,y:0}:{y:m.y+e.getPageSize().height,x:0})},y=m=>{const h=e.getSettings().computedPageTurnDirection,S=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem(),C={...m,spineItem:S};if(!S)return C;const T=o.getSpineItemPositionFromSpinePosition(m,S),E=i.getNavigationForLeftPage(T,S);return!T.outsideOfBoundaries&&r(E,T)?o.getSpinePositionFromSpineItemPosition(E,S):a(e.isRTL()?h==="horizontal"?{x:m.x+e.getPageSize().width,y:0}:{y:m.y-e.getPageSize().height,x:0}:h==="horizontal"?{x:m.x-e.getPageSize().width,y:0}:{y:m.y-e.getPageSize().height,x:0})},b=m=>{const h=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem();let S=g(m);if(h!=null&&h.isUsingVerticalWriting()&&m.x===S.x)return c(S);if(e.shouldDisplaySpread()){if(h!=null&&h.isUsingVerticalWriting()&&m.x!==S.x)return c(a(e.isRTL()?{...S,x:S.x-e.getPageSize().width}:{...S,x:S.x+e.getPageSize().width}));if(e.getSettings().computedPageTurnDirection==="vertical"&&m.y!==S.y)return c(S);S=g(S)}return c(S)},w=m=>{const h=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem();let S=y(m);if(h!=null&&h.isUsingVerticalWriting()&&m.x===S.x)return c(S);if(e.shouldDisplaySpread()){if(h!=null&&h.isUsingVerticalWriting()&&m.x!==S.x)return c(a(e.isRTL()?{...S,x:S.x+e.getPageSize().width}:{...S,x:S.x-e.getPageSize().width}));if(e.getSettings().computedPageTurnDirection==="vertical"&&m.y!==S.y)return c(S);S=y(S)}return c(S)},p=m=>{var S;let h;try{h=m instanceof URL?m:new URL(m)}catch(C){L.error(C)}if(h){const C=`${h.origin}${h.pathname}`,T=(S=e.getManifest())==null?void 0:S.spineItems.find(E=>E.href===C);if(T){const E=t.get(T.id);if(E){const O=F(h.hash,E);return{...c(O),url:h}}}}},F=(m,h)=>{const S=o.getSpinePositionFromSpineItemAnchor(m,h);return c(S)},N=m=>{const h=o.getSpineItemFromPosition(m);if(h){const S=o.getSpineItemPositionFromSpinePosition(m,h),C=i.getNavigationForPosition(h,S),T=o.getSpinePositionFromSpineItemPosition(C,h);return c(T)}return{x:0,y:0}};return{getNavigationForCfi:u,getNavigationForPage:d,getNavigationForLastPage:l,getNavigationForSpineIndexOrId:f,getNavigationForRightPage:b,getNavigationForLeftPage:w,getNavigationForUrl:p,getNavigationForAnchor:F,getNavigationForPosition:N,getMostPredominantNavigationForPosition:m=>{const h=e.getSettings().computedPageTurnDirection,S=.5,C=h==="horizontal"?m.x+e.getVisibleAreaRect().width*S:0,T=h==="horizontal"?0:m.y+e.getVisibleAreaRect().height*S,E=a({x:C,y:T});return N(E)},wrapPositionWithSafeEdge:a,isNavigationGoingForwardFrom:(m,h)=>e.getSettings().computedPageTurnDirection==="vertical"?m.y>h.y:m.x>h.x,areNavigationDifferent:s,arePositionsDifferent:r}},Kt=200,mi=({context:e,element:t,navigator:n,currentNavigationSubject$:o,spine:i})=>{let r=!1;const s=w=>w.pipe(j(()=>r?(r=!1,!1):!0)),a=({x:w,y:p})=>e.getSettings().computedPageTurnMode==="scrollable"?(r=!0,t.scrollTo({left:w,top:p}),!0):!1,u=(w=>e.$.settings$.pipe(B(()=>e.getSettings().computedPageTurnMode),Z(),H(p=>v.iif(()=>p==="controlled",v.EMPTY,w))))(v.fromEvent(t,"scroll")).pipe(s,ee(),k(e.$.destroy$)),d=({x:w,y:p})=>{const F=i.element.getBoundingClientRect().width/i.element.offsetWidth;return{x:Ae({newScale:1,oldScale:F,screenSize:t.clientWidth,pageSize:i.element.scrollWidth,scrollOffset:w}),y:Ae({newScale:1,oldScale:F,screenSize:t.clientHeight,pageSize:i.element.scrollHeight,scrollOffset:p})}},l=w=>n.getMostPredominantNavigationForPosition(w),f=()=>d({x:t.scrollLeft,y:t.scrollTop}),g=u.pipe(je(Kt,v.animationFrameScheduler),te(o),H(()=>{const w=l(d({x:t.scrollLeft,y:t.scrollTop}));return v.of({position:w,animate:!1,lastUserExpectedNavigation:void 0})}),ee()),y=u.pipe(je(Kt,v.animationFrameScheduler),ee(),k(e.$.destroy$)),b=v.merge(u.pipe(B(()=>"start"),Z()),y.pipe(B(()=>"end"))).pipe(Ze("end"));return{destroy:()=>{},adjustReadingOffset:a,getNavigationForPosition:l,getCurrentViewportPosition:f,$:{state$:b,navigation$:g}}},Re="manualViewportNavigator",yi=({navigator:e,spineItemManager:t,currentNavigationSubject$:n,locator:o,context:i})=>{const r=new v.BehaviorSubject("end"),s=new v.Subject,a=({allowSpineItemChange:h=!0}={})=>s.next({type:"leftPage",data:{allowSpineItemChange:h}}),c=({allowSpineItemChange:h=!0}={})=>{s.next({type:"rightPage",data:{allowSpineItemChange:h}})},u=h=>s.next({type:"chapterPage",data:{pageIndex:h}}),d=h=>s.next({type:"pageIndex",data:{pageIndex:h}}),l=(h,S={animate:!0})=>s.next({type:"cfi",data:{cfi:h,...S}}),f=h=>s.next({type:"url",data:h}),g=(h,S={animate:!0})=>{s.next({type:"spineItem",data:{indexOrId:h,...S}})},y=s.pipe(j(h=>h.type==="url"),H(({data:h})=>{const S=e.getNavigationForUrl(h);return S?v.of({...S,animate:!0,lastUserExpectedNavigation:{type:"navigate-from-anchor",data:S.url.hash}}):v.EMPTY})),b=s.pipe(j(h=>h.type==="spineItem"),H(({data:{animate:h,indexOrId:S}})=>{const C=e.getNavigationForSpineIndexOrId(S),T={type:"navigate-from-previous-item"};return L.log(Re,"goToSpineItem",{indexOrId:S,animate:h,navigation:C}),v.of({...C,animate:h,lastUserExpectedNavigation:T})})),w=s.pipe(j(h=>h.type==="cfi"),B(({data:{animate:h,cfi:S}})=>{const C=e.getNavigationForCfi(S);return L.log(Re,"goToCfi",{cfi:S,animate:h,navigation:C}),{...C,animate:h,lastUserExpectedNavigation:{type:"navigate-from-cfi",data:S}}})),p=s.pipe(j(h=>h.type==="chapterPage"),H(({data:{pageIndex:h}})=>{const S=t.getFocusedSpineItem();if(S){const C=e.getNavigationForPage(h,S);return v.of({...C,lastUserExpectedNavigation:void 0,animate:!0})}return v.EMPTY})),F=s.pipe(j(h=>h.type==="pageIndex"),j(h=>{var S;return((S=i.getManifest())==null?void 0:S.renditionLayout)==="reflowable"?(L.warn("This method only works for pre-paginated content"),!1):!0}),H(({data:{pageIndex:h}})=>v.of({...e.getNavigationForPage(h),lastUserExpectedNavigation:void 0,animate:!0}))),N=L.measurePerformance("turnTo",10,(h,{allowSpineItemChange:S=!0}={})=>{const C=t.getFocusedSpineItem();if(!C)return v.EMPTY;const T=o.getSpineItemFromPosition(h)||C;if(T!==C){if(S)return t.comparePositionOf(T,C)==="before"?v.of({...h,lastUserExpectedNavigation:{type:"navigate-from-next-item"},animate:!0}):v.of({...h,lastUserExpectedNavigation:{type:"navigate-from-previous-item"},animate:!0})}else return v.of({...h,lastUserExpectedNavigation:void 0,animate:!0});return v.EMPTY}),$=s.pipe(j(h=>h.type==="leftPage"),te(n),H(([{data:{allowSpineItemChange:h}},S])=>{const C=e.getNavigationForLeftPage(S);return L.log(Re,"turnLeft"),N(C,{allowSpineItemChange:h})})),P=s.pipe(j(h=>h.type==="rightPage"),te(n),H(([{data:{allowSpineItemChange:h}},S])=>{const C=e.getNavigationForRightPage(S);return L.log(Re,"turnRight"),N(C,{allowSpineItemChange:h})})),m=v.merge(y,b,p,$,P,v.merge(w,F)).pipe(te(n),j(([h,S])=>e.areNavigationDifferent(h,S)),B(([h])=>h));return{destroy:()=>{},adjustReadingOffset:h=>!1,turnLeft:a,turnRight:c,goToCfi:l,goToPageOfCurrentChapter:u,goToSpineItem:g,goToUrl:f,goToPage:d,$:{state$:r.asObservable(),navigation$:m}}},vi="panViewportNavigator",bi=({getCurrentViewportPosition:e,navigator:t,spineItemManager:n,locator:o,context:i,currentNavigationSubject$:r})=>{const s=new v.Subject,a=new v.BehaviorSubject("end");let c={x:0,y:0},u={x:0,y:0};const d=new v.Subject,l=L.measurePerformance(`${vi} moveTo`,5,(w,{final:p,start:F}={})=>{if(i.getSettings().computedPageTurnMode==="scrollable"){L.warn("pan control is not available on free page turn mode");return}const N=i.getSettings().computedPageTurnDirection;F&&(a.next("start"),c={x:0,y:0},u=e());let $=r.value;if(w){const P=w.x-((c==null?void 0:c.x)||0),m=w.y-((c==null?void 0:c.y)||0);$=t.wrapPositionWithSafeEdge({x:N==="horizontal"?i.isRTL()?u.x+P:u.x-P:0,y:N==="horizontal"?0:u.y-m}),c=w}else $=e();if(u=$,p){c={x:0,y:0},f({from:r.value,to:$,pan:u}),a.next("end");return}d.next({position:$})},{disable:!1}),f=w=>{s.next({type:"snap",data:w})},g=L.measurePerformance("turnTo",10,(w,{allowSpineItemChange:p=!0}={})=>{const F=n.getFocusedSpineItem();if(!F)return;const N=o.getSpineItemFromPosition(w)||F;if(N!==F){if(p)return n.comparePositionOf(N,F)==="before"?{type:"navigate-from-next-item"}:{type:"navigate-from-previous-item"}}else return}),y=s.pipe(j(w=>w.type==="snap"),v.withLatestFrom(i.$.settings$),H(([{data:{from:w,to:p}},{navigationSnapThreshold:F}])=>{const N=i.getSettings().computedPageTurnDirection,P=t.isNavigationGoingForwardFrom(p,w)?1-F:F,m=N==="horizontal"?p.x+i.getVisibleAreaRect().width*P:0,h=N==="horizontal"?0:p.y+i.getVisibleAreaRect().height*P,S=t.wrapPositionWithSafeEdge({x:m,y:h}),C=t.getNavigationForPosition(S),T=g(C);return v.of({...C,lastUserExpectedNavigation:T})}));return{moveTo:l,destroy:()=>{d.complete(),a.complete()},adjustReadingOffset:w=>!1,$:{moveToSubject$:d,state$:a.asObservable(),navigation$:v.merge(y)}}},fe="viewportNavigator",Si=({spineItemManager:e,context:t,pagination:n,parentElement:o,cfiLocator:i,spineLocator:r,hooks$:s,spine:a})=>{const c=wi(o.ownerDocument,s);c.appendChild(a.element);const u=new v.Subject;let d;const l=new v.BehaviorSubject({x:-1,y:0}),f=hi({context:t,spineItemManager:e,cfiLocator:i,locator:r}),g=new v.Subject;o.appendChild(c);const y=L.measurePerformance(`${fe} getCurrentViewportPosition`,1,()=>{if(d&&(d==null||d.x,~~(Math.abs(c.getBoundingClientRect().x)*10)/10),t.getSettings().computedPageTurnMode==="scrollable")return w.getCurrentViewportPosition();const{x:I,y:D}=c.getBoundingClientRect();return d={x:~~(Math.abs(I)*10)/10,y:~~(Math.abs(D)*10)/10},d}),b=bi({context:t,element:c,navigator:f,spineItemManager:e,locator:r,getCurrentViewportPosition:y,currentNavigationSubject$:l}),w=mi({context:t,element:c,navigator:f,currentNavigationSubject$:l,spine:a,spineItemManager:e}),p=yi({context:t,element:c,navigator:f,currentNavigationSubject$:l,spineItemManager:e,locator:r}),F=[w,b,p],N=v.merge(...F.map(({$:{state$:I}})=>I));let $;const P=I=>(I.pipe(k(t.$.destroy$)).subscribe(),I),m=L.measurePerformance("adjustReadingOffset",2,({x:I,y:D},V)=>{d=void 0,F.reduce((Y,ue)=>ue.adjustReadingOffset({x:I,y:D})||Y,!1)||(t.isRTL()?c.style.transform=`translate3d(${I}px, -${D}px, 0)`:c.style.transform=`translate3d(-${I}px, -${D}px, 0)`),V.forEach(Y=>{Y.name==="onViewportOffsetAdjust"&&Y.fn()})},{disable:!0}),h=I=>{const D=n.getInfo().beginCfi;let V=l.value;const U=0;if(t.getSettings().computedPageTurnMode==="scrollable")V=w.getNavigationForPosition(y());else if(($==null?void 0:$.type)==="navigate-from-cfi")V=f.getNavigationForCfi($.data),L.log(fe,"adjustNavigation","navigate-from-cfi","use last cfi");else if(($==null?void 0:$.type)==="navigate-from-next-item")V=f.getNavigationForLastPage(I),L.log(fe,"adjustNavigation","navigate-from-next-item",{});else if(($==null?void 0:$.type)==="navigate-from-previous-item")V=f.getNavigationForPage(0,I),L.log(fe,"adjustNavigation","navigate-from-previous-item",{});else if(($==null?void 0:$.type)==="navigate-from-anchor"){const ue=$.data;V=f.getNavigationForAnchor(ue,I)}else if(D)V=f.getNavigationForCfi(D),L.log(fe,"adjustNavigation","use last cfi");else{const ue=n.getInfo().beginPageIndex||0;V=f.getNavigationForPage(ue,I),L.log(fe,"adjustNavigation","use guess strategy",{})}const Y=f.arePositionsDifferent(V,l.value);return L.log(fe,"adjustNavigation",{areDifferent:Y,offsetInSpineItem:U,expectedSpineOffset:V,currentNavigationPosition:l.value,lastUserExpectedNavigation:$}),Y&&g.next({position:V,animate:!1}),v.of({previousNavigationPosition:l.value,adjustedSpinePosition:V,areDifferent:Y})};u.subscribe(()=>{d=void 0});const S=t.$.settings$.pipe(Dt(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),Z(ne),Ee(1));v.merge(u,S).pipe(W(()=>{t.getSettings().computedPageTurnMode==="scrollable"?(c.style.removeProperty("transform"),c.style.removeProperty("transition"),c.style.overflow="scroll"):(c.style.removeProperty("overflow"),c.style.removeProperty("overflowY")),e.layout()})).subscribe();const T=v.merge(b.$.navigation$.pipe(B(I=>({...I,position:{x:I.x,y:I.y,spineItem:I.spineItem},animation:"snap",triggeredBy:"manual"}))),p.$.navigation$.pipe(B(I=>({...I,position:{x:I.x,y:I.y,spineItem:I.spineItem},animation:I.animate?"turn":!1,triggeredBy:"manual"}))),g.pipe(B(I=>({...I,triggeredBy:"adjust",animation:I.animate?"turn":!1}))),w.$.navigation$.pipe(B(I=>({...I,triggeredBy:"scroll",animation:I.animate?"turn":!1})))).pipe(B(I=>("lastUserExpectedNavigation"in I&&($=I.lastUserExpectedNavigation),l.next(I.position),{...I,lastUserExpectedNavigation:$})),ee(),k(t.$.destroy$)),E=T.pipe(j(({triggeredBy:I})=>!(I==="scroll"||t.getSettings().computedPageTurnMode==="scrollable"&&I==="adjust"))),O=v.merge(b.$.moveToSubject$.asObservable().pipe(B(I=>({...I,animation:!1}))),E).pipe(B(({animation:I,position:D})=>({type:"manualAdjust",shouldAnimate:!(!I||I==="turn"&&t.getSettings().computedPageTurnAnimation==="none"),animation:I,position:D})),ee()),A=v.merge(O).pipe(Ze(void 0),Lt(),W(([I,D])=>{(I==null?void 0:I.type)==="manualAdjust"&&(D==null?void 0:D.type)!=="manualAdjust"&&(c.style.setProperty("transition","none"),c.style.setProperty("opacity","1"))}),H(([,I])=>{if((I==null?void 0:I.type)!=="manualAdjust")return v.EMPTY;const D=I.animation==="snap"?t.getSettings().computedSnapAnimationDuration:t.getSettings().computedPageTurnAnimationDuration,V=I.animation==="snap"?"slide":t.getSettings().computedPageTurnAnimation;return v.of(I).pipe(I.shouldAnimate?Xe(1,v.animationFrameScheduler):v.identity,W(U=>{U.shouldAnimate?V==="fade"?(c.style.setProperty("transition",`opacity ${D/2}ms`),c.style.setProperty("opacity","0")):(I.animation==="snap"||V==="slide")&&(c.style.setProperty("transition",`transform ${D}ms`),c.style.setProperty("opacity","1")):(c.style.setProperty("transition","none"),c.style.setProperty("opacity","1"))}),te(s),W(([U,Y])=>{V!=="fade"&&m(U.position,Y)}),I.shouldAnimate?Xe(D/2,v.animationFrameScheduler):v.identity,W(([U,Y])=>{V==="fade"&&(m(U.position,Y),c.style.setProperty("opacity","1"))}),I.shouldAnimate?Xe(D/2,v.animationFrameScheduler):v.identity,W(([U,Y])=>{V==="fade"&&m(U.position,Y)}),k(N.pipe(j(U=>U==="start"),Ee(1))))}),ee(),k(t.$.destroy$)),R=v.merge(v.merge(O).pipe(B(()=>"start")),v.merge(A).pipe(B(()=>"end"))),M=v.combineLatest([...F.map(({$:{state$:I}})=>I),R]).pipe(B(I=>I.every(D=>D==="end")?"free":"busy"),Z(),Ge(1),P),x=M.pipe(j(I=>I==="free"),v.take(1)),_=a.$.layout$.pipe(H(()=>x.pipe(H(()=>{const I=e.getFocusedSpineItem();return I?h(I):v.EMPTY}),k(T))),ee());return{destroy:()=>{u.complete(),g.complete(),l.complete(),F.forEach(I=>I.destroy())},layout:()=>u.next(),getCurrentNavigationPosition:()=>l.value,getCurrentViewportPosition:y,turnLeft:p.turnLeft,turnRight:p.turnRight,goToPage:p.goToPage,goToSpineItem:p.goToSpineItem,goToUrl:p.goToUrl,goToCfi:p.goToCfi,goToPageOfCurrentChapter:p.goToPageOfCurrentChapter,adjustNavigation:h,moveTo:b.moveTo,getLastUserExpectedNavigation:()=>$,element:c,$:{state$:M,navigation$:T,navigationAdjustedAfterLayout$:_,currentNavigationPosition$:l.asObservable()}}},wi=(e,t)=>{const n=e.createElement("div");return n.style.cssText=`
|
|
250
|
+
`,n.className=`${Oe}-spine`,t.getValue().reduce((o,i)=>i.name==="spine.onBeforeContainerCreated"?i.fn(o):o,n)},di=e=>{var n;const t=(n=e.guide)==null?void 0:n.find(o=>o.type==="cover");return e.spineItems.findIndex(o=>t!=null&&t.href?o.href.endsWith(t.href):!1)},fi="spineItemManager",gi=({context:e})=>{const t=new v.Subject,n=new v.Subject;let o=[];const i=new v.BehaviorSubject([]);let r;const s=()=>{const P=e.getManifest(),m=[],h=(P==null?void 0:P.renditionLayout)==="pre-paginated",S=P?di(P):void 0;i.value.reduce((T,E,O)=>{const A=S===O;let R=e.getPageSize().width,M="none";const x=T.edgeX%e.getVisibleAreaRect().width===0,_=O===i.value.length-1;if(e.shouldDisplaySpread()){!h&&E.item.renditionLayout==="reflowable"&&!_&&(R=e.getPageSize().width*2),!h&&E.item.renditionLayout==="reflowable"&&_&&x&&(R=e.getPageSize().width*2);const V=x&&_&&h;E.item.pageSpreadRight&&x&&!e.isRTL()||E.item.pageSpreadLeft&&x&&e.isRTL()?(M="before",R=e.getPageSize().width*2):V&&(e.isRTL()?M="before":M="after",R=e.getPageSize().width*2),h&&A&&(R=e.getPageSize().width*2)}const{width:z,height:I}=E.layout({minimumWidth:R,blankPagePosition:M,spreadPosition:e.shouldDisplaySpread()?x?e.isRTL()?"right":"left":e.isRTL()?"left":"right":"none"});if(e.getSettings().computedPageTurnDirection==="vertical"){const V=x?T.edgeY:T.edgeY-e.getVisibleAreaRect().height,U=x?0:T.edgeX;e.isRTL()?E.adjustPositionOfElement({top:V,left:U}):E.adjustPositionOfElement({top:V,left:U});const Y=z+U,ue=I+V;return m.push({leftStart:U,leftEnd:Y,topStart:V,topEnd:ue,height:I,width:z}),{edgeX:Y,edgeY:ue}}e.isRTL()?E.adjustPositionOfElement({right:T.edgeX,top:0}):E.adjustPositionOfElement({left:T.edgeX,top:0});const D=z+T.edgeX;return m.push({leftStart:T.edgeX,leftEnd:D,topStart:T.edgeY,topEnd:I,height:I,width:z}),{edgeX:D,edgeY:0}},{edgeX:0,edgeY:0});const C=o.some((T,E)=>!ne(T,m[E]));o=m,L.log(fi,"layout",{hasLayoutChanges:C,itemLayoutInformation:o}),n.next(C)},a=P=>{const m=typeof P=="number"?u(P):P;if(!m)return;const h=i.value.indexOf(m);h!==r&&(r=h,t.next({data:m}))},c=L.measurePerformance("loadContents",10,P=>{var E;const[m,h]=P,S=e.getSettings().numberOfAdjacentSpineItemToPreLoad,C=((E=e.getManifest())==null?void 0:E.renditionLayout)==="pre-paginated",T=e.getSettings().computedPageTurnMode==="scrollable";i.value.forEach((O,A)=>{const R=A<m&&!C&&T?!0:A<m-S,M=A>h+S;!R&&!M?O.loadContent():O.unloadContent()})}),u=P=>typeof P=="number"?i.value[P]:i.value.find(({item:m})=>m.id===P),d=L.measurePerformance("getAbsolutePositionOf",10,P=>{e.getSettings().computedPageTurnDirection;const m=typeof P=="number"?P:i.value.indexOf(P);return o[m]?o[m]||{leftStart:0,leftEnd:0,topStart:0,topEnd:0,width:0,height:0}:{leftStart:0,leftEnd:0,topStart:0,topEnd:0,width:0,height:0}},{disable:!0}),l=()=>r!==void 0?i.value[r]:void 0,f=(P,m)=>i.value.indexOf(P)>i.value.indexOf(m)?"after":"before",g=P=>{if(!P)return;const m=i.value.indexOf(P);return m<0?void 0:m},y=P=>{i.value.push(P),P.$.contentLayout$.pipe(k(e.$.destroy$)).subscribe(()=>{s()}),P.$.loaded$.pipe(W(()=>{P.isUsingVerticalWriting()&&e.setHasVerticalWriting()}),k(e.$.destroy$)).subscribe(),P.load()},b=()=>i.value,w=()=>i.value.length,p=()=>{const P=l();return P&&g(P)},F=L.measurePerformance("getSpineItemAtPosition",10,P=>{const m=i.value.find(h=>{const{leftStart:S,leftEnd:C,topEnd:T,topStart:E}=d(h),O=P.x>=S&&P.x<C;return e.getSettings().computedPageTurnDirection==="horizontal"?O:O&&P.y>=E&&P.y<T});return P.x===0&&!m?i.value[0]:m},{disable:!0}),N=()=>{i.value.forEach(P=>P.destroy())};return{destroyItems:N,add:y,get:u,getAll:b,getLength:w,layout:s,focus:a,loadContents:c,comparePositionOf:f,getAbsolutePositionOf:d,getSpineItemAtPosition:F,getFocusedSpineItem:l,getFocusedSpineItemIndex:p,getSpineItemIndex:g,destroy:()=>{N(),t.complete(),n.complete()},$:{focus$:t.asObservable(),layout$:n.asObservable(),itemIsReady$:i.asObservable().pipe(H(P=>{const m=P.map(h=>h.$.isReady$.pipe(B(S=>({item:h.item,isReady:S}))));return v.merge(...m)}))}}},Zt=({context:e})=>{const t=(u,d)=>{const{width:l,height:f}=d.getElementDimensions(),g=d.getReadingDirection();if(d.isUsingVerticalWriting())return{x:0,y:Mt(e.getPageSize().height,u,f)};const y=Mt(e.getPageSize().width,u,l);return g==="rtl"?{x:l-y-e.getPageSize().width,y:0}:{x:y,y:0}},n=(u,d)=>{const{width:l,height:f}=d.getElementDimensions(),g=d.getReadingDirection(),y=e.getPageSize().width,b=e.getPageSize().height;let w=Math.min(l,Math.max(0,u.x));if(g==="rtl"&&(w=l-w-e.getPageSize().width),d.isUsingVerticalWriting()){const p=ae(f,b);return c(u.y,b,p)}else{const p=ae(l,y);return c(w,y,p)}},o=(u,d)=>{var b;const l=((b=d.getElementDimensions())==null?void 0:b.width)||0,f=e.getPageSize().width,g=d.getBoundingRectOfElementFromSelector(u),y=(g==null?void 0:g.x)||0;return xe(y,f,l)},i=(u,d,l)=>{var b;let f;if((u==null?void 0:u.nodeName)==="img"||(u==null?void 0:u.textContent)===""&&u.nodeType===Node.ELEMENT_NODE)f=u.getBoundingClientRect().x;else if(u){const w=u?Bo(u,d):void 0;f=(w==null?void 0:w.getBoundingClientRect().x)||f}const g=((b=l.getElementDimensions())==null?void 0:b.width)||0,y=e.getPageSize().width;if(f)return{x:xe(f,y,g),y:0}},r=(u,d)=>{var g,y,b;const l=e.getPageSize(),f=(y=(g=d.spineItemFrame)==null?void 0:g.getManipulableFrame())==null?void 0:y.frame;if((b=f==null?void 0:f.contentWindow)!=null&&b.document&&f.contentWindow.document.body!==null){const{x:w,y:p}=t(u,d),F={left:w,right:w+l.width,top:p,bottom:p+l.height};return Vo(f.contentWindow.document,F)}},s=(u,d)=>{const{width:l,height:f}=d.getElementDimensions();return{x:xe(u.x,e.getPageSize().width,l),y:xe(u.y,e.getPageSize().height,f)}},a=(u,d,l)=>{const f=i(u,d,l);return f?n(f,l):void 0},c=(u,d,l)=>{const f=[...Array(l)].map((g,y)=>y*d);return u<=0?0:u>=l*d?l-1:Math.max(0,f.findIndex(g=>u<g+d))};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:t,getSpineItemOffsetFromAnchor:o,getSpineItemPageIndexFromPosition:n,getSpineItemPageIndexFromNode:a,getSpineItemClosestPositionFromUnsafePosition:s,getFirstNodeOrRangeAtPage:r}},pi=({context:e})=>{const t=Zt({context:e}),n=(c,u)=>{let d={x:c.x-e.getPageSize().width,y:c.y};return u.isUsingVerticalWriting()&&(d={x:c.x,y:c.y+e.getPageSize().height}),t.getSpineItemClosestPositionFromUnsafePosition(d,u)},o=(c,u)=>{let d={x:c.x+e.getPageSize().width,y:c.y};return u.isUsingVerticalWriting()&&(d={x:c.x,y:c.y-e.getPageSize().height}),t.getSpineItemClosestPositionFromUnsafePosition(d,u)},i=c=>{if(c.isUsingVerticalWriting()){const u=e.getPageSize().height,d=ae(c.getElementDimensions().height,u);return r(d-1,c)}else{const u=e.getPageSize().width,d=ae(c.getElementDimensions().width,u);return r(d-1,c)}},r=(c,u)=>t.getSpineItemPositionFromPageIndex(c,u);return{getNavigationForLeftPage:n,getNavigationForRightPage:o,getNavigationForLastPage:i,getNavigationForPage:r,getNavigationForPosition:(c,u)=>t.getSpineItemClosestPositionFromUnsafePosition(u,c),getNavigationFromNode:(c,u,d)=>t.getSpineItemPositionFromNode(u,d,c)||{x:0,y:0}}},Jt="spineNavigator",hi=({context:e,spineItemManager:t,cfiLocator:n,locator:o})=>{const i=pi({context:e}),r=(m,h)=>m.x!==h.x||m.y!==h.y,s=(m,h)=>r(m,h)||!!m.spineItem&&!!h.spineItem&&m.spineItem!==h.spineItem,a=L.measurePerformance(`${Jt} wrapPositionWithSafeEdge`,1,m=>{const h=t.get(t.getLength()-1),S=t.getAbsolutePositionOf(h||0),C=S.leftEnd-e.getPageSize().width,T=S.topEnd-e.getPageSize().height;return{x:Math.min(Math.max(0,m.x),C),y:Math.min(Math.max(0,m.y),T)}},{disable:!0}),c=({x:m,y:h})=>({x:m%e.getVisibleAreaRect().width!==0?m-e.getPageSize().width:m,y:h}),u=m=>{const h=n.getSpineItemFromCfi(m),{node:S,offset:C=0}=n.resolveCfi(m)||{};if(!h)L.warn(Jt,`unable to detect item id from cfi ${m}`);else{const T=S?i.getNavigationFromNode(h,S,C):{x:0,y:0},E=o.getSpinePositionFromSpineItemPosition(T,h);return{...c(E),spineItem:h}}return{x:0,y:0}},d=(m,h)=>{if(!h){const T=m*e.getPageSize().width;return N({x:T,y:0})}const S=i.getNavigationForPage(m,h),C=o.getSpinePositionFromSpineItemPosition(S,h);return c(C)},l=m=>{const h=i.getNavigationForLastPage(m),S=o.getSpinePositionFromSpineItemPosition(h,m);return c(S)},f=m=>{const h=t.get(m);if(h){const S=o.getSpinePositionFromSpineItem(h);return{...c(S),spineItem:h}}return{x:0,y:0}},g=m=>{const h=e.getSettings().computedPageTurnDirection,S=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem(),C=m;if(!S)return C;const T=o.getSpineItemPositionFromSpinePosition(m,S),E=i.getNavigationForRightPage(T,S);return!T.outsideOfBoundaries&&r(E,T)?o.getSpinePositionFromSpineItemPosition(E,S):a(e.isRTL()?h==="horizontal"?{x:m.x-e.getPageSize().width,y:0}:{y:m.y+e.getPageSize().height,x:0}:h==="horizontal"?{x:m.x+e.getPageSize().width,y:0}:{y:m.y+e.getPageSize().height,x:0})},y=m=>{const h=e.getSettings().computedPageTurnDirection,S=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem(),C={...m,spineItem:S};if(!S)return C;const T=o.getSpineItemPositionFromSpinePosition(m,S),E=i.getNavigationForLeftPage(T,S);return!T.outsideOfBoundaries&&r(E,T)?o.getSpinePositionFromSpineItemPosition(E,S):a(e.isRTL()?h==="horizontal"?{x:m.x+e.getPageSize().width,y:0}:{y:m.y-e.getPageSize().height,x:0}:h==="horizontal"?{x:m.x-e.getPageSize().width,y:0}:{y:m.y-e.getPageSize().height,x:0})},b=m=>{const h=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem();let S=g(m);if(h!=null&&h.isUsingVerticalWriting()&&m.x===S.x)return c(S);if(e.shouldDisplaySpread()){if(h!=null&&h.isUsingVerticalWriting()&&m.x!==S.x)return c(a(e.isRTL()?{...S,x:S.x-e.getPageSize().width}:{...S,x:S.x+e.getPageSize().width}));if(e.getSettings().computedPageTurnDirection==="vertical"&&m.y!==S.y)return c(S);S=g(S)}return c(S)},w=m=>{const h=o.getSpineItemFromPosition(m)||t.getFocusedSpineItem();let S=y(m);if(h!=null&&h.isUsingVerticalWriting()&&m.x===S.x)return c(S);if(e.shouldDisplaySpread()){if(h!=null&&h.isUsingVerticalWriting()&&m.x!==S.x)return c(a(e.isRTL()?{...S,x:S.x+e.getPageSize().width}:{...S,x:S.x-e.getPageSize().width}));if(e.getSettings().computedPageTurnDirection==="vertical"&&m.y!==S.y)return c(S);S=y(S)}return c(S)},p=m=>{var S;let h;try{h=m instanceof URL?m:new URL(m)}catch(C){L.error(C)}if(h){const C=`${h.origin}${h.pathname}`,T=(S=e.getManifest())==null?void 0:S.spineItems.find(E=>E.href===C);if(T){const E=t.get(T.id);if(E){const O=F(h.hash,E);return{...c(O),url:h}}}}},F=(m,h)=>{const S=o.getSpinePositionFromSpineItemAnchor(m,h);return c(S)},N=m=>{const h=o.getSpineItemFromPosition(m);if(h){const S=o.getSpineItemPositionFromSpinePosition(m,h),C=i.getNavigationForPosition(h,S),T=o.getSpinePositionFromSpineItemPosition(C,h);return c(T)}return{x:0,y:0}};return{getNavigationForCfi:u,getNavigationForPage:d,getNavigationForLastPage:l,getNavigationForSpineIndexOrId:f,getNavigationForRightPage:b,getNavigationForLeftPage:w,getNavigationForUrl:p,getNavigationForAnchor:F,getNavigationForPosition:N,getMostPredominantNavigationForPosition:m=>{const h=e.getSettings().computedPageTurnDirection,S=.5,C=h==="horizontal"?m.x+e.getVisibleAreaRect().width*S:0,T=h==="horizontal"?0:m.y+e.getVisibleAreaRect().height*S,E=a({x:C,y:T});return N(E)},wrapPositionWithSafeEdge:a,isNavigationGoingForwardFrom:(m,h)=>e.getSettings().computedPageTurnDirection==="vertical"?m.y>h.y:m.x>h.x,areNavigationDifferent:s,arePositionsDifferent:r}},Kt=200,mi=({context:e,element:t,navigator:n,currentNavigationSubject$:o,spine:i})=>{let r=!1;const s=w=>w.pipe(j(()=>r?(r=!1,!1):!0)),a=({x:w,y:p})=>e.getSettings().computedPageTurnMode==="scrollable"?(r=!0,t.scrollTo({left:w,top:p}),!0):!1,u=(w=>e.$.settings$.pipe(B(()=>e.getSettings().computedPageTurnMode),Z(),H(p=>v.iif(()=>p==="controlled",v.EMPTY,w))))(v.fromEvent(t,"scroll")).pipe(s,ee(),k(e.$.destroy$)),d=({x:w,y:p})=>{const F=i.element.getBoundingClientRect().width/i.element.offsetWidth;return{x:Ae({newScale:1,oldScale:F,screenSize:t.clientWidth,pageSize:i.element.scrollWidth,scrollOffset:w}),y:Ae({newScale:1,oldScale:F,screenSize:t.clientHeight,pageSize:i.element.scrollHeight,scrollOffset:p})}},l=w=>n.getMostPredominantNavigationForPosition(w),f=()=>d({x:t.scrollLeft,y:t.scrollTop}),g=u.pipe(je(Kt,v.animationFrameScheduler),te(o),H(()=>{const w=l(d({x:t.scrollLeft,y:t.scrollTop}));return v.of({position:w,animate:!1,lastUserExpectedNavigation:void 0})}),ee()),y=u.pipe(je(Kt,v.animationFrameScheduler),ee(),k(e.$.destroy$)),b=v.merge(u.pipe(B(()=>"start"),Z()),y.pipe(B(()=>"end"))).pipe(Ze("end"));return{destroy:()=>{},adjustReadingOffset:a,getNavigationForPosition:l,getCurrentViewportPosition:f,$:{state$:b,navigation$:g}}},Re="manualViewportNavigator",yi=({navigator:e,spineItemManager:t,currentNavigationSubject$:n,locator:o,context:i})=>{const r=new v.BehaviorSubject("end"),s=new v.Subject,a=({allowSpineItemChange:h=!0}={})=>s.next({type:"leftPage",data:{allowSpineItemChange:h}}),c=({allowSpineItemChange:h=!0}={})=>{s.next({type:"rightPage",data:{allowSpineItemChange:h}})},u=h=>s.next({type:"chapterPage",data:{pageIndex:h}}),d=h=>s.next({type:"pageIndex",data:{pageIndex:h}}),l=(h,S={animate:!0})=>s.next({type:"cfi",data:{cfi:h,...S}}),f=h=>s.next({type:"url",data:h}),g=(h,S={animate:!0})=>{s.next({type:"spineItem",data:{indexOrId:h,...S}})},y=s.pipe(j(h=>h.type==="url"),H(({data:h})=>{const S=e.getNavigationForUrl(h);return S?v.of({...S,animate:!0,lastUserExpectedNavigation:{type:"navigate-from-anchor",data:S.url.hash}}):v.EMPTY})),b=s.pipe(j(h=>h.type==="spineItem"),H(({data:{animate:h,indexOrId:S}})=>{const C=e.getNavigationForSpineIndexOrId(S),T={type:"navigate-from-previous-item"};return L.log(Re,"goToSpineItem",{indexOrId:S,animate:h,navigation:C}),v.of({...C,animate:h,lastUserExpectedNavigation:T})})),w=s.pipe(j(h=>h.type==="cfi"),B(({data:{animate:h,cfi:S}})=>{const C=e.getNavigationForCfi(S);return L.log(Re,"goToCfi",{cfi:S,animate:h,navigation:C}),{...C,animate:h,lastUserExpectedNavigation:{type:"navigate-from-cfi",data:S}}})),p=s.pipe(j(h=>h.type==="chapterPage"),H(({data:{pageIndex:h}})=>{const S=t.getFocusedSpineItem();if(S){const C=e.getNavigationForPage(h,S);return v.of({...C,lastUserExpectedNavigation:void 0,animate:!0})}return v.EMPTY})),F=s.pipe(j(h=>h.type==="pageIndex"),j(h=>{var S;return((S=i.getManifest())==null?void 0:S.renditionLayout)==="reflowable"?(L.warn("This method only works for pre-paginated content"),!1):!0}),H(({data:{pageIndex:h}})=>v.of({...e.getNavigationForPage(h),lastUserExpectedNavigation:void 0,animate:!0}))),N=L.measurePerformance("turnTo",10,(h,{allowSpineItemChange:S=!0}={})=>{const C=t.getFocusedSpineItem();if(!C)return v.EMPTY;const T=o.getSpineItemFromPosition(h)||C;if(T!==C){if(S)return t.comparePositionOf(T,C)==="before"?v.of({...h,lastUserExpectedNavigation:{type:"navigate-from-next-item"},animate:!0}):v.of({...h,lastUserExpectedNavigation:{type:"navigate-from-previous-item"},animate:!0})}else return v.of({...h,lastUserExpectedNavigation:void 0,animate:!0});return v.EMPTY}),$=s.pipe(j(h=>h.type==="leftPage"),te(n),H(([{data:{allowSpineItemChange:h}},S])=>{const C=e.getNavigationForLeftPage(S);return L.log(Re,"turnLeft"),N(C,{allowSpineItemChange:h})})),P=s.pipe(j(h=>h.type==="rightPage"),te(n),H(([{data:{allowSpineItemChange:h}},S])=>{const C=e.getNavigationForRightPage(S);return L.log(Re,"turnRight"),N(C,{allowSpineItemChange:h})})),m=v.merge(y,b,p,$,P,v.merge(w,F)).pipe(te(n),j(([h,S])=>e.areNavigationDifferent(h,S)),B(([h])=>h));return{destroy:()=>{},adjustReadingOffset:h=>!1,turnLeft:a,turnRight:c,goToCfi:l,goToPageOfCurrentChapter:u,goToSpineItem:g,goToUrl:f,goToPage:d,$:{state$:r.asObservable(),navigation$:m}}},vi="panViewportNavigator",bi=({getCurrentViewportPosition:e,navigator:t,spineItemManager:n,locator:o,context:i,currentNavigationSubject$:r})=>{const s=new v.Subject,a=new v.BehaviorSubject("end");let c={x:0,y:0},u={x:0,y:0};const d=new v.Subject,l=L.measurePerformance(`${vi} moveTo`,5,(w,{final:p,start:F}={})=>{if(i.getSettings().computedPageTurnMode==="scrollable"){L.warn("pan control is not available on free page turn mode");return}const N=i.getSettings().computedPageTurnDirection;F&&(a.next("start"),c={x:0,y:0},u=e());let $=r.value;if(w){const P=w.x-((c==null?void 0:c.x)||0),m=w.y-((c==null?void 0:c.y)||0);$=t.wrapPositionWithSafeEdge({x:N==="horizontal"?i.isRTL()?u.x+P:u.x-P:0,y:N==="horizontal"?0:u.y-m}),c=w}else $=e();if(u=$,p){c={x:0,y:0},f({from:r.value,to:$,pan:u}),a.next("end");return}d.next({position:$})},{disable:!1}),f=w=>{s.next({type:"snap",data:w})},g=L.measurePerformance("turnTo",10,(w,{allowSpineItemChange:p=!0}={})=>{const F=n.getFocusedSpineItem();if(!F)return;const N=o.getSpineItemFromPosition(w)||F;if(N!==F){if(p)return n.comparePositionOf(N,F)==="before"?{type:"navigate-from-next-item"}:{type:"navigate-from-previous-item"}}else return}),y=s.pipe(j(w=>w.type==="snap"),v.withLatestFrom(i.$.settings$),H(([{data:{from:w,to:p}},{navigationSnapThreshold:F}])=>{const N=i.getSettings().computedPageTurnDirection,P=t.isNavigationGoingForwardFrom(p,w)?1-F:F,m=N==="horizontal"?p.x+i.getVisibleAreaRect().width*P:0,h=N==="horizontal"?0:p.y+i.getVisibleAreaRect().height*P,S=t.wrapPositionWithSafeEdge({x:m,y:h}),C=t.getNavigationForPosition(S),T=g(C);return v.of({...C,lastUserExpectedNavigation:T})}));return{moveTo:l,destroy:()=>{d.complete(),a.complete()},adjustReadingOffset:w=>!1,$:{moveToSubject$:d,state$:a.asObservable(),navigation$:v.merge(y)}}},fe="viewportNavigator",Si=({spineItemManager:e,context:t,pagination:n,parentElement:o,cfiLocator:i,spineLocator:r,hooks$:s,spine:a})=>{const c=wi(o.ownerDocument,s);c.appendChild(a.element);const u=new v.Subject;let d;const l=new v.BehaviorSubject({x:-1,y:0}),f=hi({context:t,spineItemManager:e,cfiLocator:i,locator:r}),g=new v.Subject;o.appendChild(c);const y=L.measurePerformance(`${fe} getCurrentViewportPosition`,1,()=>{if(d&&(d==null||d.x,~~(Math.abs(c.getBoundingClientRect().x)*10)/10),t.getSettings().computedPageTurnMode==="scrollable")return w.getCurrentViewportPosition();const{x:I,y:D}=c.getBoundingClientRect();return d={x:~~(Math.abs(I)*10)/10,y:~~(Math.abs(D)*10)/10},d}),b=bi({context:t,element:c,navigator:f,spineItemManager:e,locator:r,getCurrentViewportPosition:y,currentNavigationSubject$:l}),w=mi({context:t,element:c,navigator:f,currentNavigationSubject$:l,spine:a,spineItemManager:e}),p=yi({context:t,element:c,navigator:f,currentNavigationSubject$:l,spineItemManager:e,locator:r}),F=[w,b,p],N=v.merge(...F.map(({$:{state$:I}})=>I));let $;const P=I=>(I.pipe(k(t.$.destroy$)).subscribe(),I),m=L.measurePerformance("adjustReadingOffset",2,({x:I,y:D},V)=>{d=void 0,F.reduce((Y,ue)=>ue.adjustReadingOffset({x:I,y:D})||Y,!1)||(t.isRTL()?c.style.transform=`translate3d(${I}px, -${D}px, 0)`:c.style.transform=`translate3d(-${I}px, -${D}px, 0)`),V.forEach(Y=>{Y.name==="onViewportOffsetAdjust"&&Y.fn()})},{disable:!0}),h=I=>{const D=n.getInfo().beginCfi;let V=l.value;const U=0;if(t.getSettings().computedPageTurnMode==="scrollable")V=w.getNavigationForPosition(y());else if(($==null?void 0:$.type)==="navigate-from-cfi")V=f.getNavigationForCfi($.data),L.log(fe,"adjustNavigation","navigate-from-cfi","use last cfi");else if(($==null?void 0:$.type)==="navigate-from-next-item")V=f.getNavigationForLastPage(I),L.log(fe,"adjustNavigation","navigate-from-next-item",{});else if(($==null?void 0:$.type)==="navigate-from-previous-item")V=f.getNavigationForPage(0,I),L.log(fe,"adjustNavigation","navigate-from-previous-item",{});else if(($==null?void 0:$.type)==="navigate-from-anchor"){const ue=$.data;V=f.getNavigationForAnchor(ue,I)}else if(D)V=f.getNavigationForCfi(D),L.log(fe,"adjustNavigation","use last cfi");else{const ue=n.getInfo().beginPageIndex||0;V=f.getNavigationForPage(ue,I),L.log(fe,"adjustNavigation","use guess strategy",{})}const Y=f.arePositionsDifferent(V,l.value);return L.log(fe,"adjustNavigation",{areDifferent:Y,offsetInSpineItem:U,expectedSpineOffset:V,currentNavigationPosition:l.value,lastUserExpectedNavigation:$}),Y&&g.next({position:V,animate:!1}),v.of({previousNavigationPosition:l.value,adjustedSpinePosition:V,areDifferent:Y})};u.subscribe(()=>{d=void 0});const S=t.$.settings$.pipe(Dt(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),Z(ne),Ee(1));v.merge(u,S).pipe(W(()=>{t.getSettings().computedPageTurnMode==="scrollable"?(c.style.removeProperty("transform"),c.style.removeProperty("transition"),c.style.overflow="scroll"):(c.style.removeProperty("overflow"),c.style.removeProperty("overflowY")),e.layout()})).subscribe();const T=v.merge(b.$.navigation$.pipe(B(I=>({...I,position:{x:I.x,y:I.y,spineItem:I.spineItem},animation:"snap",triggeredBy:"manual"}))),p.$.navigation$.pipe(B(I=>({...I,position:{x:I.x,y:I.y,spineItem:I.spineItem},animation:I.animate?"turn":!1,triggeredBy:"manual"}))),g.pipe(B(I=>({...I,triggeredBy:"adjust",animation:I.animate?"turn":!1}))),w.$.navigation$.pipe(B(I=>({...I,triggeredBy:"scroll",animation:I.animate?"turn":!1})))).pipe(B(I=>("lastUserExpectedNavigation"in I&&($=I.lastUserExpectedNavigation),l.next(I.position),{...I,lastUserExpectedNavigation:$})),ee(),k(t.$.destroy$)),E=T.pipe(j(({triggeredBy:I})=>!(I==="scroll"||t.getSettings().computedPageTurnMode==="scrollable"&&I==="adjust"))),O=v.merge(b.$.moveToSubject$.asObservable().pipe(B(I=>({...I,animation:!1}))),E).pipe(B(({animation:I,position:D})=>({type:"manualAdjust",shouldAnimate:!(!I||I==="turn"&&t.getSettings().computedPageTurnAnimation==="none"),animation:I,position:D})),ee()),A=v.merge(O).pipe(Ze(void 0),Lt(),W(([I,D])=>{(I==null?void 0:I.type)==="manualAdjust"&&(D==null?void 0:D.type)!=="manualAdjust"&&(c.style.setProperty("transition","none"),c.style.setProperty("opacity","1"))}),H(([,I])=>{if((I==null?void 0:I.type)!=="manualAdjust")return v.EMPTY;const D=I.animation==="snap"?t.getSettings().computedSnapAnimationDuration:t.getSettings().computedPageTurnAnimationDuration,V=I.animation==="snap"?"slide":t.getSettings().computedPageTurnAnimation;return v.of(I).pipe(I.shouldAnimate?Xe(1,v.animationFrameScheduler):v.identity,W(U=>{U.shouldAnimate?V==="fade"?(c.style.setProperty("transition",`opacity ${D/2}ms`),c.style.setProperty("opacity","0")):(I.animation==="snap"||V==="slide")&&(c.style.setProperty("transition",`transform ${D}ms`),c.style.setProperty("opacity","1")):(c.style.setProperty("transition","none"),c.style.setProperty("opacity","1"))}),te(s),W(([U,Y])=>{V!=="fade"&&m(U.position,Y)}),I.shouldAnimate?Xe(D/2,v.animationFrameScheduler):v.identity,W(([U,Y])=>{V==="fade"&&(m(U.position,Y),c.style.setProperty("opacity","1"))}),I.shouldAnimate?Xe(D/2,v.animationFrameScheduler):v.identity,W(([U,Y])=>{V==="fade"&&m(U.position,Y)}),k(N.pipe(j(U=>U==="start"),Ee(1))))}),ee(),k(t.$.destroy$)),R=v.merge(v.merge(O).pipe(B(()=>"start")),v.merge(A).pipe(B(()=>"end"))),M=v.combineLatest([...F.map(({$:{state$:I}})=>I),R]).pipe(B(I=>I.every(D=>D==="end")?"free":"busy"),Z(),Ge(1),P),x=M.pipe(j(I=>I==="free"),v.take(1)),_=a.$.layout$.pipe(H(()=>x.pipe(H(()=>{const I=e.getFocusedSpineItem();return I?h(I):v.EMPTY}),k(T))),ee());return{destroy:()=>{u.complete(),g.complete(),l.complete(),F.forEach(I=>I.destroy())},layout:()=>u.next(),getCurrentNavigationPosition:()=>l.value,getCurrentViewportPosition:y,turnLeft:p.turnLeft,turnRight:p.turnRight,goToPage:p.goToPage,goToSpineItem:p.goToSpineItem,goToUrl:p.goToUrl,goToCfi:p.goToCfi,goToPageOfCurrentChapter:p.goToPageOfCurrentChapter,adjustNavigation:h,moveTo:b.moveTo,getLastUserExpectedNavigation:()=>$,element:c,$:{state$:M,navigation$:T,navigationAdjustedAfterLayout$:_,currentNavigationPosition$:l.asObservable()}}},wi=(e,t)=>{const n=e.createElement("div");return n.style.cssText=`
|
|
251
251
|
height: 100%;
|
|
252
252
|
position: relative;
|
|
253
253
|
`,n.className=`${Oe}-viewport-navigator`,t.getValue().reduce((o,i)=>i.name==="viewportNavigator.onBeforeContainerCreated"?i.fn(o):o,n)},Pi=({spineItemManager:e,context:t,spineItemLocator:n})=>{const o=L.measurePerformance("getSpineItemPositionFromSpinePosition",10,(l,f)=>{const{leftEnd:g,leftStart:y,topStart:b,topEnd:w}=e.getAbsolutePositionOf(f);return t.isRTL()?{x:g-l.x-t.getPageSize().width,y:Math.max(0,l.y-b)}:{x:Math.max(0,l.x-y),y:Math.max(0,l.y-b)}},{disable:!0}),i=(l,f)=>{const{leftEnd:g,leftStart:y,topStart:b,topEnd:w}=e.getAbsolutePositionOf(f);return t.isRTL()?{x:g-l.x-t.getPageSize().width,y:b+l.y}:{x:y+l.x,y:b+l.y}},r=L.measurePerformance("getSpineItemFromOffset",10,l=>e.getSpineItemAtPosition(l),{disable:!0});return{getSpinePositionFromSpineItemPosition:i,getSpinePositionFromSpineItem:l=>i({x:0,y:0},l),getSpinePositionFromSpineItemAnchor:(l,f)=>{const g=n.getSpineItemOffsetFromAnchor(l,f);return i({x:g,y:0},f)},getSpineItemPositionFromSpinePosition:o,getSpineItemFromPosition:r,getSpineItemFromIframe:l=>e.getAll().find(f=>f.spineItemFrame.getFrameElement()===l),getSpineItemPageIndexFromNode:(l,f,g)=>{if(typeof g=="number"){const y=e.get(g);return y?n.getSpineItemPageIndexFromNode(l,f||0,y):void 0}return n.getSpineItemPageIndexFromNode(l,f||0,g)},getSpineItemsFromReadingOrderPosition:l=>{const f=r(l)||e.getFocusedSpineItem(),g=e.getSpineItemIndex(f);if(g===void 0)return;let y=l;t.shouldDisplaySpread()&&(y={x:l.x+t.getPageSize().width,y:l.y});const b=e.getSpineItemIndex(r(y)||e.getFocusedSpineItem())??g,[w=g,p=g]=[g,b].sort((F,N)=>F-N);return{begin:g,beginPosition:l,end:b,endPosition:y,left:w,right:p}}}},Ii=({spineItemManager:e,spineItemLocator:t})=>{const n=u=>`|[prose~anchor~${encodeURIComponent(u.item.id)}]`,o=L.measurePerformance("getCfi",10,(u,d)=>{var b,w,p;const l=t.getFirstNodeOrRangeAtPage(u,d),f=(p=(w=(b=d.spineItemFrame.getManipulableFrame())==null?void 0:b.frame)==null?void 0:w.contentWindow)==null?void 0:p.document,g=n(d),y=`|[prose~offset~${(l==null?void 0:l.offset)||0}]`;return l&&f?ye.generate(l.node,0,`${g}${y}`):i(d)}),i=u=>`epubcfi(/0${n(u)}) `,r=u=>{const{itemId:d}=it(u);if(d){const{itemId:l}=it(u);return(l?e.get(l):void 0)||e.get(0)}};return{getSpineItemFromCfi:r,getCfiMetaInformation:u=>{const d=r(u);if(d)return{spineItemIndex:e.getSpineItemIndex(d)}},getCfi:o,getRootCfi:i,resolveCfi:u=>{var w,p,F;if(!u)return;const d=r(u),l=e.getSpineItemIndex(d)||0;if(!d)return;const{cleanedCfi:f,offset:g}=it(u),y=new ye(f,{}),b=(F=(p=(w=d.spineItemFrame.getManipulableFrame())==null?void 0:w.frame)==null?void 0:p.contentWindow)==null?void 0:F.document;if(b)try{const{node:N,offset:$}=y.resolve(b,{});return{node:N,offset:g??$,spineItemIndex:l}}catch(N){return L.error(N),{spineItemIndex:l}}return{spineItemIndex:l}},generateFromRange:({startNode:u,start:d,end:l,endNode:f},g)=>{const y=ye.generate(u,d,`|[prose~anchor~${encodeURIComponent(g.id)}]`),b=ye.generate(f,l,`|[prose~anchor~${encodeURIComponent(g.id)}]`);return{start:y,end:b}}}},$i="proseReaderIframeEventBridgeElement",Qt=({containerElement:e,hooks:t,...n})=>{const o=new v.BehaviorSubject({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),i=new v.Subject,r=new v.Subject,s=new v.Subject,a=new v.BehaviorSubject(t||[]),c=new v.Subject,u=new v.Subject,d=new v.BehaviorSubject({x:0,y:0}),l=new v.BehaviorSubject("free"),f=Io(n),g=gi({context:f}),y=fo({context:f,spineItemManager:g}),b=Ti(e),w=Ci(e),p=Zt({context:f}),F=Pi({context:f,spineItemManager:g,spineItemLocator:p}),N=Ii({spineItemManager:g,context:f,spineItemLocator:p}),$=c.asObservable(),P=ui({ownerDocument:b.ownerDocument,iframeEventBridgeElement:w,context:f,pagination:y,spineItemManager:g,hooks$:a,navigation$:$,spineLocator:F,spineItemLocator:p,cfiLocator:N,navigationAdjusted$:u.asObservable(),viewportState$:l.asObservable(),currentNavigationPosition$:d.asObservable()}),m=Si({context:f,pagination:y,spineItemManager:g,parentElement:b,cfiLocator:N,spineLocator:F,hooks$:a,spine:P});e.appendChild(b),b.appendChild(w),m.$.state$.subscribe(l),m.$.navigation$.subscribe(c),m.$.navigationAdjustedAfterLayout$.subscribe(u),m.$.currentNavigationPosition$.subscribe(d);const h=()=>{const A={width:e.offsetWidth,height:e.offsetHeight},R=0,M=0,x=0,_=!0,z=A.width,I=z%2===0||_?z:z-1;b.style.setProperty("overflow","hidden"),b.style.height=`${A.height-M-x}px`,b.style.width=`${I-2*R}px`;const D=b.getBoundingClientRect();f.setVisibleAreaRect(D.x,D.y,I,A.height),m.layout()},S=(A,R={})=>{if(f.getManifest()){L.warn("loading a new book is not supported yet");return}L.log("load",{manifest:A,loadOptions:R}),f.load(A,R),h(),R.cfi?m.goToCfi(R.cfi,{animate:!1}):m.goToSpineItem(0,{animate:!1}),i.next()},C=(A,R)=>{a.next([...a.getValue(),{name:A,fn:R}])},T=A=>{A(b)};P.$.$.pipe(W(A=>{A.type==="onSelectionChange"&&s.next(A.data)}),k(r)).subscribe(),m.$.navigationAdjustedAfterLayout$.pipe(v.switchMap(({adjustedSpinePosition:A})=>P.adjustPagination(A).pipe(k($))),k(f.$.destroy$)).subscribe(),v.merge(f.$.load$,f.$.settings$,f.$.hasVerticalWriting$).pipe(de(void 0),te(f.$.hasVerticalWriting$),B(([,A])=>{const R=f.getSettings(),M=f.getManifest();return{hasVerticalWriting:A,renditionFlow:M==null?void 0:M.renditionFlow,renditionLayout:M==null?void 0:M.renditionLayout,computedPageTurnMode:R.computedPageTurnMode}}),Z(ne),B(({hasVerticalWriting:A,renditionFlow:R,renditionLayout:M,computedPageTurnMode:x})=>({...o.value,supportedPageTurnMode:R==="scrolled-continuous"?["scrollable"]:f.areAllItemsPrePaginated()?["controlled","scrollable"]:["controlled"],supportedPageTurnAnimation:R==="scrolled-continuous"||x==="scrollable"?["none"]:A?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:x==="scrollable"?["vertical"]:M==="reflowable"?["horizontal"]:["horizontal","vertical"]})),k(r)).subscribe(o);const E=()=>{a.next([]),a.complete(),y.destroy(),f.destroy(),m.destroy(),P.destroy(),b.remove(),w.remove(),i.complete(),o.complete(),s.complete(),r.next(),r.complete()};return{context:f,registerHook:C,spine:P,viewportNavigator:m,manipulateSpineItems:P.manipulateSpineItems,manipulateSpineItem:P.manipulateSpineItem,manipulateContainer:T,moveTo:m.moveTo,turnLeft:m.turnLeft,turnRight:m.turnRight,goToPageOfCurrentChapter:m.goToPageOfCurrentChapter,goToPage:m.goToPage,goToUrl:m.goToUrl,goToCfi:m.goToCfi,goToSpineItem:m.goToSpineItem,getFocusedSpineItemIndex:g.getFocusedSpineItemIndex,getSpineItem:g.get,getSpineItems:g.getAll,getAbsolutePositionOf:g.getAbsolutePositionOf,getSelection:P.getSelection,isSelecting:P.isSelecting,normalizeEventForViewport:P.normalizeEventForViewport,getCfiMetaInformation:P.cfiLocator.getCfiMetaInformation,resolveCfi:P.cfiLocator.resolveCfi,generateCfi:P.cfiLocator.generateFromRange,locator:P.locator,getCurrentNavigationPosition:m.getCurrentNavigationPosition,getCurrentViewportPosition:m.getCurrentViewportPosition,layout:h,load:S,destroy:E,setSettings:f.setSettings,$:{pagination$:y.$.info$,settings$:f.$.settings$,state$:o.asObservable(),ready$:i.asObservable(),selection$:s.asObservable(),viewportState$:m.$.state$,layout$:P.$.layout$,itemsCreated$:P.$.itemsCreated$,itemsBeforeDestroy$:P.$.itemsBeforeDestroy$,itemIsReady$:g.$.itemIsReady$,destroy$:r},__debug:{pagination:y,context:f,spineItemManager:g}}},Ti=e=>{const t=e.ownerDocument.createElement("div");return t.style.cssText=`
|