@prose-reader/core 1.261.0 → 1.264.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.
@@ -1,9 +1,9 @@
1
- (function(b,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi"],o):(b=typeof globalThis<"u"?globalThis:b||self,o(b.prose={},b.rxjs,b.shared,b.operators,b.cfi))})(this,(function(b,o,$,I,z){"use strict";const L=$.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),Bt=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function xt(n,e,t){if("caretPositionFromPoint"in n)return n.caretPositionFromPoint(e,t);if("caretRangeFromPoint"in n&&typeof n.caretRangeFromPoint<"u")return n.caretRangeFromPoint(e,t)}const Yt=(n,e)=>{const t="body"in n?ce(n.body,e):ce(n,e),i="createRange"in n?n:n.ownerDocument;if(t){let s,r=0;const a=i.createRange();return Array.from(t.childNodes).some(c=>{a.selectNodeContents(c);const u=a.getClientRects(),l=Xt(u,e);if(l){s=a.cloneRange();const d=xt(i,Math.ceil(l.left),Math.ceil(l.top));return d&&"startContainer"in d&&d.startContainer===s.startContainer&&(r=d.startOffset),d&&"offsetNode"in d&&d.offsetNode===s.startContainer&&(r=d.offset),!0}return!1}),s?{node:s.startContainer,offset:r}:{node:t,offset:0}}},ce=(n,e)=>{const t=n.getBoundingClientRect(),i=De(t,e);let s;i!=="before"&&i!=="after"&&(s=n);for(const r of n.children){const a=ce(r,e);if(a)return a}return s};function De(n,{left:e,right:t}){return n.left<=e&&n.right<=e?"before":n.left<=e&&n.right>e&&n.right<=t?"partially-before":n.left<=t&&n.right>t?"partially-after":n.left>t?"after":"within"}function Xt(n,e){return Array.from(n).find(t=>{const i=De(t,e);return i!=="before"&&i!=="after"})}const qt=(n,e)=>{if(n.nodeType!==Node.CDATA_SECTION_NODE&&n.nodeType!==Node.DOCUMENT_TYPE_NODE){const t=n.ownerDocument?.createRange();t?.selectNodeContents(n);try{e<=(t?.endOffset||0)&&t?.setStart(n,e||0)}catch(i){L.error(i)}return t}},ue=n=>{if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.PointerEvent&&n instanceof e.PointerEvent)return!0}if(n?.view?.window){const e=n?.view;if(e.PointerEvent&&n instanceof e.PointerEvent)return!0}return!!Bt.includes(n.type)},Gt=n=>{if(ue(n))return!1;if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.MouseEvent)return n instanceof e.MouseEvent}if(n?.view?.window){const e=n?.view;if(e.MouseEvent)return n instanceof e.MouseEvent}return!1},Zt=n=>{if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.TouchEvent)return n instanceof e.TouchEvent}if(n?.view?.window){const e=n?.view;if(e.TouchEvent)return n instanceof e.TouchEvent}return!1},Jt=()=>document.createElement("div"),Oe=n=>{const e=["img","video","audio","source","link","script"].join(",");return Array.from(n?.querySelectorAll(e)||[])},Kt=n=>{if(Oe(n).forEach(t=>{const i=t.getAttribute("src")||t.getAttribute("href");i?.startsWith("blob:")&&n?.defaultView?.URL.revokeObjectURL(i)}),n){const t=Array.from(n.styleSheets||[]);for(const i of t){const s=Array.from(i.cssRules||[]);for(const r of s)if(n.defaultView&&r instanceof n.defaultView.CSSFontFaceRule){const c=r.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);c&&c.forEach(u=>{n?.defaultView?.URL.revokeObjectURL(u)})}}}};function Ne(n,e,t=[]){if(typeof n!="object"||n===null)return!1;for(const i of e)if(!(i in n))return!1;for(const i of t)if(i in n&&typeof n[i]!="function")return!1;return!0}function le(n){return Ne(n,["nodeType"],[])&&n.nodeType===Node.ELEMENT_NODE}function Ve(n,e){return le(n)&&n.tagName.toLowerCase()===e.toLowerCase()}function Qt(n){return Ne(n,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const de=(n,e,t,i)=>{const s=n.createElement("style");s.id=e,s.innerHTML=t,i?n.head.prepend(s):n.head.appendChild(s)},pe=(n,e)=>{if(n?.head){const t=n.getElementById(e);t&&t.remove()}},ge=(n,e)=>{const t=new RegExp(`${e}\\s*=\\s*([0-9.]+)`,"i"),i=n.match(t)||[],s=i[1]||"0";return i&&Number.parseFloat(s)||0},Ue=(n,e,t,i)=>{n?.contentDocument?.head&&de(n.contentDocument,e,t,i)},jt=(n,e)=>{n?.contentDocument&&pe(n.contentDocument,e)},N=(n,e,t,i)=>{if(!n)return;const s=n?.contentDocument?.getElementById(e);if(s){s.innerHTML=t;return}Ue(n,e,t,i)},q=n=>{if(n?.contentDocument){const t=n.contentDocument.querySelector("meta[name='viewport']");if(t){const i=t.getAttribute("content");if(i){const s=ge(i,"width"),r=ge(i,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},ke=n=>n.pipe(o.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?o.of(e):o.fromEvent(e,"load").pipe(o.take(1),o.map(()=>e)))),ze=n=>n.pipe(o.switchMap(e=>{const t=e?.contentDocument?.fonts.ready;return t?o.from(t).pipe(o.map(()=>e)):o.of(void 0)})),en=n=>e=>{const t=n(e),i=new IntersectionObserver(s=>{s.forEach(r=>{r.isIntersecting?r.target.removeAttribute("tab-index"):r.target.setAttribute("tab-index","-1")})},{});return t.hookManager.register("item.onDocumentLoad",({itemId:s,destroy:r})=>{const a=t.spineItemsManager.get(s);if(!a)return;const c=a.renderer.getDocumentFrame();if(!c)return;N(c,"prose-reader-accessibility",`
1
+ (function(b,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi"],o):(b=typeof globalThis<"u"?globalThis:b||self,o(b.prose={},b.rxjs,b.shared,b.operators,b.cfi))})(this,(function(b,o,$,I,W){"use strict";const L=$.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),xt=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function Yt(n,e,t){if("caretPositionFromPoint"in n)return n.caretPositionFromPoint(e,t);if("caretRangeFromPoint"in n&&typeof n.caretRangeFromPoint<"u")return n.caretRangeFromPoint(e,t)}const Xt=(n,e)=>{const t="body"in n?le(n.body,e):le(n,e),i="createRange"in n?n:n.ownerDocument;if(t){let s,r=0;const a=i.createRange();return Array.from(t.childNodes).some(c=>{a.selectNodeContents(c);const u=a.getClientRects(),l=qt(u,e);if(l){s=a.cloneRange();const d=Yt(i,Math.ceil(l.left),Math.ceil(l.top));return d&&"startContainer"in d&&d.startContainer===s.startContainer&&(r=d.startOffset),d&&"offsetNode"in d&&d.offsetNode===s.startContainer&&(r=d.offset),!0}return!1}),s?{node:s.startContainer,offset:r}:{node:t,offset:0}}},le=(n,e)=>{const t=n.getBoundingClientRect(),i=De(t,e);let s;i!=="before"&&i!=="after"&&(s=n);for(const r of n.children){const a=le(r,e);if(a)return a}return s};function De(n,{left:e,right:t}){return n.left<=e&&n.right<=e?"before":n.left<=e&&n.right>e&&n.right<=t?"partially-before":n.left<=t&&n.right>t?"partially-after":n.left>t?"after":"within"}function qt(n,e){return Array.from(n).find(t=>{const i=De(t,e);return i!=="before"&&i!=="after"})}const Gt=(n,e)=>{if(n.nodeType!==Node.CDATA_SECTION_NODE&&n.nodeType!==Node.DOCUMENT_TYPE_NODE){const t=n.ownerDocument?.createRange();t?.selectNodeContents(n);try{e<=(t?.endOffset||0)&&t?.setStart(n,e||0)}catch(i){L.error(i)}return t}},de=n=>{if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.PointerEvent&&n instanceof e.PointerEvent)return!0}if(n?.view?.window){const e=n?.view;if(e.PointerEvent&&n instanceof e.PointerEvent)return!0}return!!xt.includes(n.type)},Zt=n=>{if(de(n))return!1;if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.MouseEvent)return n instanceof e.MouseEvent}if(n?.view?.window){const e=n?.view;if(e.MouseEvent)return n instanceof e.MouseEvent}return!1},Jt=n=>{if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.TouchEvent)return n instanceof e.TouchEvent}if(n?.view?.window){const e=n?.view;if(e.TouchEvent)return n instanceof e.TouchEvent}return!1},Kt=()=>document.createElement("div"),Oe=n=>{const e=["img","video","audio","source","link","script"].join(",");return Array.from(n?.querySelectorAll(e)||[])},Qt=n=>{if(Oe(n).forEach(t=>{const i=t.getAttribute("src")||t.getAttribute("href");i?.startsWith("blob:")&&n?.defaultView?.URL.revokeObjectURL(i)}),n){const t=Array.from(n.styleSheets||[]);for(const i of t){const s=Array.from(i.cssRules||[]);for(const r of s)if(n.defaultView&&r instanceof n.defaultView.CSSFontFaceRule){const c=r.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);c&&c.forEach(u=>{n?.defaultView?.URL.revokeObjectURL(u)})}}}};function Ne(n,e,t=[]){if(typeof n!="object"||n===null)return!1;for(const i of e)if(!(i in n))return!1;for(const i of t)if(i in n&&typeof n[i]!="function")return!1;return!0}function pe(n){return Ne(n,["nodeType"],[])&&n.nodeType===Node.ELEMENT_NODE}function Ve(n,e){return pe(n)&&n.tagName.toLowerCase()===e.toLowerCase()}function jt(n){return Ne(n,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const q=(n,e,t,i)=>{const s=n.createElement("style");return s.id=e,s.innerHTML=t,i?n.head.prepend(s):n.head.appendChild(s),()=>{G(n,e)}},G=(n,e)=>{if(n?.head){const t=n.getElementById(e);t&&t.remove()}},ge=(n,e)=>{const t=new RegExp(`${e}\\s*=\\s*([0-9.]+)`,"i"),i=n.match(t)||[],s=i[1]||"0";return i&&Number.parseFloat(s)||0},Ue=(n,e,t,i)=>{n?.contentDocument?.head&&q(n.contentDocument,e,t,i)},en=(n,e)=>{n?.contentDocument&&G(n.contentDocument,e)},N=(n,e,t,i)=>{if(!n)return;const s=n?.contentDocument?.getElementById(e);if(s){s.innerHTML=t;return}Ue(n,e,t,i)},Z=n=>{if(n?.contentDocument){const t=n.contentDocument.querySelector("meta[name='viewport']");if(t){const i=t.getAttribute("content");if(i){const s=ge(i,"width"),r=ge(i,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},ke=n=>n.pipe(o.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?o.of(e):o.fromEvent(e,"load").pipe(o.take(1),o.map(()=>e)))),ze=n=>n.pipe(o.switchMap(e=>{const t=e?.contentDocument?.fonts.ready;return t?o.from(t).pipe(o.map(()=>e)):o.of(void 0)})),tn=n=>e=>{const t=n(e),i=new IntersectionObserver(s=>{s.forEach(r=>{r.isIntersecting?r.target.removeAttribute("tab-index"):r.target.setAttribute("tab-index","-1")})},{});return t.hookManager.register("item.onDocumentLoad",({itemId:s,destroy:r})=>{const a=t.spineItemsManager.get(s);if(!a)return;const c=a.renderer.getDocumentFrame();if(!c)return;N(c,"prose-reader-accessibility",`
2
2
  :focus-visible {
3
3
 
4
4
  outline: -webkit-focus-ring-color auto 1px;
5
5
  }
6
- `);const u=c.contentDocument?.body.querySelectorAll("a");u?.forEach(l=>{i.observe(l)}),r(()=>{u?.forEach(l=>{i.unobserve(l)})})}),{...t}},tn=n=>e=>{const t=n(e);return t.context.watch("rootElement").pipe(o.takeUntil(t.context.destroy$)).subscribe(i=>{if(!i)return;const s=()=>{t.settings.values.computedPageTurnMode==="controlled"&&i.scrollTo(0,0)};i.addEventListener("scroll",s)}),t.hookManager.register("item.onDocumentLoad",({itemId:i})=>{const r=t.spineItemsManager.get(i)?.renderer.getDocumentFrame();r&&r.contentDocument?.body.setAttribute("tabindex","-1")}),t},he=({position:n,frameElement:e})=>{const t=e.getBoundingClientRect(),i=t.width/e.offsetWidth,s=t.height/e.offsetHeight,{left:r=0,top:a=0}=t,c=n.clientX*i+r,u=n.clientY*s+a;return{clientX:c,clientY:u}},nn=(n,e,t,i)=>{const s=e?.view?.frameElement;if(!e||!s)return n;const r=t.getSpineItemFromIframe(s),a=s,{height:c,width:u}=i.pageSize;if(!r||!(a instanceof HTMLIFrameElement))return n;if(ue(n)){const{clientX:l,clientY:d}=he({position:n,frameElement:a}),p=new PointerEvent(n.type,{...n,pointerId:n.pointerId,clientX:l,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(Gt(n)){const{clientX:l,clientY:d}=he({position:n,frameElement:a}),p=new MouseEvent(n.type,{...n,clientX:l,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(Zt(n)){const l=Array.from(n.touches).map(p=>{const{clientX:h,clientY:m}=he({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:h,clientY:m})}),d=new TouchEvent(n.type,{touches:l,changedTouches:l,targetTouches:l});return Object.defineProperty(d,"target",{value:e.target,enumerable:!0}),d}return n},on=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],sn=n=>e=>{const t=n(e);return t.hookManager.register("item.onDocumentLoad",({destroy:i,itemId:s})=>{const r=t.spineItemsManager.get(s),a=r?.renderer.getDocumentFrame();if(!a||!r)return;const c=on.map(u=>{const l=d=>{let p=d;if(ue(d)&&(p=new PointerEvent(d.type,d)),p!==d){const h=nn(p,d,t.spine.locator,t.viewport);t.context.value.rootElement?.dispatchEvent(h)}};return a.contentDocument?.addEventListener(u,l),()=>{a.contentDocument?.removeEventListener(u,l)}});i(()=>{c.forEach(u=>{u()})})}),t},me=n=>I.map(e=>Object.entries(e).reduce((t,[i,s])=>n.includes(i)?{...t,[i]:s}:t,{})),G=n=>e=>e.pipe(me(n),I.distinctUntilChanged($.isShallowEqual));function Z(n){return new o.Observable(e=>{const t=new ResizeObserver(i=>{e.next(i)});return t.observe(n),()=>{t.disconnect()}})}const Y=n=>e=>e.pipe(I.switchMap(t=>n.pipe(I.first(),I.map(()=>t)))),We=n=>{let e;const t=n.subscribe(i=>{e={result:i}});return()=>(t.unsubscribe(),e?o.of(e.result):n)};function fe(){return new o.Observable(n=>{if(window.requestIdleCallback){const t=window.requestIdleCallback(()=>{n.next(),n.complete()});return()=>cancelIdleCallback(t)}const e=setTimeout(()=>{n.next(),n.complete()},1);return()=>clearTimeout(e)})}function Se(n){return o.defer(()=>fe().pipe(I.switchMap(n)))}const ye=(n,e)=>new o.Observable(t=>{const i=new MutationObserver(s=>{t.next(s)});return i.observe(n,e),()=>i.disconnect()});function rn(n,e){return new o.Observable(t=>{const i=new IntersectionObserver(s=>{t.next(s)},e);return i.observe(n),()=>{i.disconnect()}})}class _e{constructor(e,t){this.settingsManager=t;const i=$.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(i),this.inputSettings=$.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(I.startWith(this.outputSettings))]).pipe(I.map(([s,r])=>({...s,...r})),I.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const t=this.getCleanedParentInputSettings(e),i=this.settingsManager._prepareUpdate(t),s=$.shallowMergeIfDefined(this.inputSettings,e),r=this.computeOutputSettings(s),a=this.hasSettingsChanged(r);return{hasChanged:a||i.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!i.hasChanged&&a&&this.outputSettingsUpdateSubject.next(r),{...i.commit(),...r})}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(e){return Array.isArray(e)?this.values$.pipe(G(e)):this.values$.pipe(I.map(t=>t[e]),I.distinctUntilChanged($.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}const an=n=>{const e=new FileReader;return new Promise(t=>{e.addEventListener("load",()=>{t(e.result)},!1),e.readAsDataURL(n)})};let cn=class extends _e{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:t,fontScale:i,fontWeight:s,lineHeight:r,...a}=e;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const un=n=>e=>{const{fontScale:t,lineHeight:i,fontWeight:s,fontJustification:r}=e,a=new o.Subject,c=n(e),u=new cn({fontScale:t,lineHeight:i,fontWeight:s,fontJustification:r},c.settings),l=()=>`
6
+ `);const u=c.contentDocument?.body.querySelectorAll("a");u?.forEach(l=>{i.observe(l)}),r(()=>{u?.forEach(l=>{i.unobserve(l)})})}),{...t}},nn=n=>e=>{const t=n(e);return t.context.watch("rootElement").pipe(o.takeUntil(t.context.destroy$)).subscribe(i=>{if(!i)return;const s=()=>{t.settings.values.computedPageTurnMode==="controlled"&&i.scrollTo(0,0)};i.addEventListener("scroll",s)}),t.hookManager.register("item.onDocumentLoad",({itemId:i})=>{const r=t.spineItemsManager.get(i)?.renderer.getDocumentFrame();r&&r.contentDocument?.body.setAttribute("tabindex","-1")}),t},he=({position:n,frameElement:e})=>{const t=e.getBoundingClientRect(),i=t.width/e.offsetWidth,s=t.height/e.offsetHeight,{left:r=0,top:a=0}=t,c=n.clientX*i+r,u=n.clientY*s+a;return{clientX:c,clientY:u}},on=(n,e,t,i)=>{const s=e?.view?.frameElement;if(!e||!s)return n;const r=t.getSpineItemFromIframe(s),a=s,{height:c,width:u}=i.pageSize;if(!r||!(a instanceof HTMLIFrameElement))return n;if(de(n)){const{clientX:l,clientY:d}=he({position:n,frameElement:a}),p=new PointerEvent(n.type,{...n,pointerId:n.pointerId,clientX:l,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(Zt(n)){const{clientX:l,clientY:d}=he({position:n,frameElement:a}),p=new MouseEvent(n.type,{...n,clientX:l,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(Jt(n)){const l=Array.from(n.touches).map(p=>{const{clientX:h,clientY:m}=he({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:h,clientY:m})}),d=new TouchEvent(n.type,{touches:l,changedTouches:l,targetTouches:l});return Object.defineProperty(d,"target",{value:e.target,enumerable:!0}),d}return n},sn=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],rn=n=>e=>{const t=n(e);return t.hookManager.register("item.onDocumentLoad",({destroy:i,itemId:s})=>{const r=t.spineItemsManager.get(s),a=r?.renderer.getDocumentFrame();if(!a||!r)return;const c=sn.map(u=>{const l=d=>{let p=d;if(de(d)&&(p=new PointerEvent(d.type,d)),p!==d){const h=on(p,d,t.spine.locator,t.viewport);t.context.value.rootElement?.dispatchEvent(h)}};return a.contentDocument?.addEventListener(u,l),()=>{a.contentDocument?.removeEventListener(u,l)}});i(()=>{c.forEach(u=>{u()})})}),t},me=n=>I.map(e=>Object.entries(e).reduce((t,[i,s])=>n.includes(i)?{...t,[i]:s}:t,{})),J=n=>e=>e.pipe(me(n),I.distinctUntilChanged($.isShallowEqual));function K(n){return new o.Observable(e=>{const t=new ResizeObserver(i=>{e.next(i)});return t.observe(n),()=>{t.disconnect()}})}const Y=n=>e=>e.pipe(I.switchMap(t=>n.pipe(I.first(),I.map(()=>t)))),We=n=>{let e;const t=n.subscribe(i=>{e={result:i}});return()=>(t.unsubscribe(),e?o.of(e.result):n)};function fe(){return new o.Observable(n=>{if(window.requestIdleCallback){const t=window.requestIdleCallback(()=>{n.next(),n.complete()});return()=>cancelIdleCallback(t)}const e=setTimeout(()=>{n.next(),n.complete()},1);return()=>clearTimeout(e)})}function Se(n){return o.defer(()=>fe().pipe(I.switchMap(n)))}const ye=(n,e)=>new o.Observable(t=>{const i=new MutationObserver(s=>{t.next(s)});return i.observe(n,e),()=>i.disconnect()});function an(n,e){return new o.Observable(t=>{const i=new IntersectionObserver(s=>{t.next(s)},e);return i.observe(n),()=>{i.disconnect()}})}class _e{constructor(e,t){this.settingsManager=t;const i=$.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(i),this.inputSettings=$.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(I.startWith(this.outputSettings))]).pipe(I.map(([s,r])=>({...s,...r})),I.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const t=this.getCleanedParentInputSettings(e),i=this.settingsManager._prepareUpdate(t),s=$.shallowMergeIfDefined(this.inputSettings,e),r=this.computeOutputSettings(s),a=this.hasSettingsChanged(r);return{hasChanged:a||i.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!i.hasChanged&&a&&this.outputSettingsUpdateSubject.next(r),{...i.commit(),...r})}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(e){return Array.isArray(e)?this.values$.pipe(J(e)):this.values$.pipe(I.map(t=>t[e]),I.distinctUntilChanged($.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}const cn=n=>{const e=new FileReader;return new Promise(t=>{e.addEventListener("load",()=>{t(e.result)},!1),e.readAsDataURL(n)})};let un=class extends _e{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:t,fontScale:i,fontWeight:s,lineHeight:r,...a}=e;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const ln=n=>e=>{const{fontScale:t,lineHeight:i,fontWeight:s,fontJustification:r}=e,a=new o.Subject,c=n(e),u=new un({fontScale:t,lineHeight:i,fontWeight:s,fontJustification:r},c.settings),l=()=>`
7
7
 
8
8
  body {
9
9
  ${u.values.fontScale!==1?`font-size: ${u.values.fontScale}em !important;`:""}
@@ -11,7 +11,7 @@
11
11
  ${u.values.fontWeight!=="publisher"?`font-weight: ${u.values.fontWeight} !important;`:""}
12
12
  ${u.values.fontJustification!=="publisher"?`text-align: ${u.values.fontJustification} !important;`:""}
13
13
  }
14
- `,d=h=>{c.spineItemsManager.items.forEach(m=>{if(m.renditionLayout!=="pre-paginated"){const g=m.renderer.getDocumentFrame();g&&N(g,"prose-reader-fonts",l())}}),h&&c.layout()};c.hookManager.register("item.onDocumentLoad",({itemId:h})=>{const m=c.spineItemsManager.get(h);if(m?.renditionLayout!=="pre-paginated"){const g=m?.renderer.getDocumentFrame();g&&N(g,"prose-reader-fonts",l())}});const p=h=>h.pipe(I.pairwise(),o.map(([m,g])=>g.fontScale!==m.fontScale||g.lineHeight!==m.lineHeight));return u.values$.pipe(p,I.tap(d),o.takeUntil(c.$.destroy$)).subscribe(),{...c,destroy:()=>{a.complete(),u.destroy(),c.destroy()},settings:u}},ln=n=>e=>{const t=n(e),i=s=>o.fromEvent(s,"keyup").pipe(o.map(r=>{const{pageTurnDirection:a,computedPageTurnMode:c}=t.settings.values;if(c==="scrollable")return r;if(a==="horizontal"){if(r.key==="ArrowRight")return t.navigation.turnRight();if(r.key==="ArrowLeft")return t.navigation.turnLeft()}if(a==="vertical"){if(r.key==="ArrowDown")return t.navigation.turnRight();if(r.key==="ArrowUp")return t.navigation.turnLeft()}return r}));return i(document).pipe(o.takeUntil(t.$.destroy$)).subscribe(),t.spineItemsManager.items$.pipe(o.switchMap(s=>o.merge(...s.map(r=>r.watch("isLoaded").pipe(o.switchMap(()=>{const a=r.renderer.getDocumentFrame();return a instanceof HTMLIFrameElement&&a?.contentDocument?i(a.contentDocument):o.EMPTY}))))),o.takeUntil(t.$.destroy$)).subscribe(),t},dn=n=>n.spine.spineItemsManager.items$.pipe(o.switchMap(e=>o.merge(...e.map(t=>t.watch("isLoaded").pipe(o.switchMap(()=>{const i=t.renderer.getDocumentFrame();if(!i||!i?.contentDocument)return o.NEVER;const r=Array.from(i.contentDocument.querySelectorAll("a")).map(a=>o.fromEvent(a,"click"));return o.merge(...r)}))))),o.tap(e=>{e.preventDefault()}),o.share());class R{constructor(){this.isDestroyed=!1,this.destroySubject=new o.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const re=class re extends R{constructor(e){super(),this.triggerSubject=new o.Subject,this.stateSubject=new o.BehaviorSubject("idle"),this.unload$=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share()),this.load$=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="load"&&r!=="loaded"&&r!=="loading"),o.map(()=>{}),o.share()),this.context=e.context,this.settings=e.settings,this.hookManager=e.hookManager,this.item=e.item,this.containerElement=e.containerElement,this.resourcesHandler=e.resourcesHandler,this.viewport=e.viewport;const t=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share());this.loaded$=this.load$.pipe(o.switchMap(()=>(this.stateSubject.next("loading"),this.onCreateDocument().pipe(o.first()).pipe(o.mergeMap(r=>(this.hookManager.execute("item.onDocumentCreated",this.item.id,{itemId:this.item.id,documentContainer:r}),this.onLoadDocument().pipe(o.endWith(null),o.first()).pipe(Y(this.context.bridgeEvent.viewportFree$),o.switchMap(()=>{const c=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:r}).filter(u=>u instanceof o.Observable);return o.combineLatest([o.of(null),...c]).pipe(o.first())})))),o.map(()=>{this.stateSubject.next("loaded")}),o.takeUntil(t)))),o.share());const i=t.pipe(o.switchMap(()=>(this.stateSubject.next("unloading"),this.context.bridgeEvent.viewportFree$.pipe(o.first(),o.tap(()=>{this.hookManager.destroy("item.onDocumentLoad",this.item.id)}),o.switchMap(()=>this.onUnload().pipe(o.endWith(null),o.first())),o.tap(()=>{this.stateSubject.next("idle")}),o.takeUntil(this.load$)))));o.merge(this.unload$,i).pipe(o.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){this._documentContainer=e,this._documentContainer.classList.add(re.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this._documentContainer?.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(o.map(e=>e==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new o.Subject;return o.defer(()=>this.onRenderHeadless({release:e})).pipe(o.endWith(void 0),o.first(),o.map(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),o.finalize(()=>{e.complete()}),o.catchError(t=>(L.error(t),o.of(void 0))))}layout(e){return o.defer(()=>this.onLayout(e))}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this._documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){const e=this.item.renditionLayout;if(e)return e;const t=this.getDocumentFrame();if(t){const{hasViewport:i}=q(t);if(i)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};re.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let x=re;const pn=n=>new URL(n.href);class J{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await o.lastValueFrom(this.settings.values.getResource?.(this.item)??o.of(void 0))??pn(this.item)}async fetchResource(){const e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}}const He=(n,e)=>{const t=n.startsWith("file://"),i=t?n.replace("file://","http://"):n,s=new URL(e,i).toString();return t?s.replace("http://","file://"):s},gn=async(n,e,t,i,s)=>{if(!n||!n.defaultView)return;const r=e.sheet;if(r)try{const a=Array.from(r.cssRules||[]);for(let c=0;c<a.length;c++){const u=a[c];if(n.defaultView&&u instanceof n.defaultView.CSSFontFaceRule){const l=u.style.getPropertyValue("src");if(l.match(/url\(['"]?([^'"]+)['"]?\)/g)){const p=l.split(",").map(g=>g.trim()),h=await Promise.all(p.map(async g=>{if(g.startsWith("local("))return g;const f=g.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return g;const y=f[1]??"",S=i.manifest?.items.find(({href:w})=>`${He(t,y).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(S){const w=new J(S,s);try{const v=await w.getResource();if(v instanceof Response){const T=await v.blob(),P=n.defaultView?.URL.createObjectURL(T);return g.replace(f[0],`url("${P}")`)}}catch(v){console.error("Error loading font:",v)}}return g})),m=u.cssText.replace(/src:\s*[^;]+;/,`src: ${h.join(", ")};`);r.deleteRule(c),r.insertRule(m,c)}}}}catch(a){console.error("Could not access stylesheet rules:",a)}},hn=(n,e,t,i,s)=>{const r=e.getAttribute("src")||e.getAttribute("href");if(!r)return o.of(null);const a=i.manifest?.items.find(({href:u})=>`${He(t,r).toLowerCase()}`.endsWith(`${u.toLowerCase()}`));if(!a)return o.of(null);const c=new J(a,s);return o.from(c.getResource()).pipe(o.mergeMap(u=>u instanceof Response?o.from(u.blob()):o.of(void 0)),o.mergeMap(u=>{if(!u)return o.of(null);const l=n?.defaultView?.URL.createObjectURL(u)??"";if(e.hasAttribute("src"))e.setAttribute("src",l);else if(e.hasAttribute("href")&&(e.setAttribute("href",l),n?.defaultView&&e instanceof n.defaultView.HTMLLinkElement))return new o.Observable(d=>{e.onload=async()=>{try{e.sheet&&await gn(n,e,t,i,s),d.next(),d.complete()}catch(p){d.error(p)}},e.onerror=d.error});return o.of(null)}))},mn=({settings:n,item:e,context:t})=>i=>i.pipe(o.switchMap(s=>{const r=Oe(s.contentDocument),a=$.getParentPath(e.href),c=r.map(u=>hn(s.contentDocument,u,a,t,n));return o.combineLatest(c).pipe(o.map(()=>s))})),fn=n=>{Kt(n?.contentDocument)},Sn="@prose-reader/core",yn=0,bn=200,Be=[".xhtml",".html",".htm"],C="prose-reader",be=`${C}-style`,xe=`data-${C}-id`,Ye=`${C}-viewport`,Xe=`${C}-scroll-navigator`,In=async(n,e)=>{if(typeof n=="string")return n;const t=$.parseContentType(n.headers.get("Content-Type")||"")||$.detectMimeTypeFromName(e.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(s=>s===t)){const s=await n.blob(),r=URL.createObjectURL(s),a=await createImageBitmap(s),{width:c,height:u}={width:a.width,height:a.height};return a.close(),`
14
+ `,d=h=>{c.spineItemsManager.items.forEach(m=>{if(m.renditionLayout!=="pre-paginated"){const g=m.renderer.getDocumentFrame();g&&N(g,"prose-reader-fonts",l())}}),h&&c.layout()};c.hookManager.register("item.onDocumentLoad",({itemId:h})=>{const m=c.spineItemsManager.get(h);if(m?.renditionLayout!=="pre-paginated"){const g=m?.renderer.getDocumentFrame();g&&N(g,"prose-reader-fonts",l())}});const p=h=>h.pipe(I.pairwise(),o.map(([m,g])=>g.fontScale!==m.fontScale||g.lineHeight!==m.lineHeight));return u.values$.pipe(p,I.tap(d),o.takeUntil(c.$.destroy$)).subscribe(),{...c,destroy:()=>{a.complete(),u.destroy(),c.destroy()},settings:u}},dn=n=>e=>{const t=n(e),i=s=>o.fromEvent(s,"keyup").pipe(o.map(r=>{const{pageTurnDirection:a,computedPageTurnMode:c}=t.settings.values;if(c==="scrollable")return r;if(a==="horizontal"){if(r.key==="ArrowRight")return t.navigation.turnRight();if(r.key==="ArrowLeft")return t.navigation.turnLeft()}if(a==="vertical"){if(r.key==="ArrowDown")return t.navigation.turnRight();if(r.key==="ArrowUp")return t.navigation.turnLeft()}return r}));return i(document).pipe(o.takeUntil(t.$.destroy$)).subscribe(),t.spineItemsManager.items$.pipe(o.switchMap(s=>o.merge(...s.map(r=>r.watch("isLoaded").pipe(o.switchMap(()=>{const a=r.renderer.getDocumentFrame();return a instanceof HTMLIFrameElement&&a?.contentDocument?i(a.contentDocument):o.EMPTY}))))),o.takeUntil(t.$.destroy$)).subscribe(),t},pn=n=>n.spine.spineItemsManager.items$.pipe(o.switchMap(e=>o.merge(...e.map(t=>t.watch("isLoaded").pipe(o.switchMap(()=>{const i=t.renderer.getDocumentFrame();if(!i||!i?.contentDocument)return o.NEVER;const r=Array.from(i.contentDocument.querySelectorAll("a")).map(a=>o.fromEvent(a,"click"));return o.merge(...r)}))))),o.tap(e=>{e.preventDefault()}),o.share());class R{constructor(){this.isDestroyed=!1,this.destroySubject=new o.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const ce=class ce extends R{constructor(e){super(),this.triggerSubject=new o.Subject,this.stateSubject=new o.BehaviorSubject("idle"),this.unload$=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share()),this.load$=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="load"&&r!=="loaded"&&r!=="loading"),o.map(()=>{}),o.share()),this.context=e.context,this.settings=e.settings,this.hookManager=e.hookManager,this.item=e.item,this.containerElement=e.containerElement,this.resourcesHandler=e.resourcesHandler,this.viewport=e.viewport;const t=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share());this.loaded$=this.load$.pipe(o.switchMap(()=>(this.stateSubject.next("loading"),this.onCreateDocument().pipe(o.first()).pipe(o.mergeMap(r=>(this.hookManager.execute("item.onDocumentCreated",this.item.id,{itemId:this.item.id,documentContainer:r}),this.onLoadDocument().pipe(o.endWith(null),o.first()).pipe(Y(this.context.bridgeEvent.viewportFree$),o.switchMap(()=>{const c=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:r}).filter(u=>u instanceof o.Observable);return o.combineLatest([o.of(null),...c]).pipe(o.first())})))),o.map(()=>{this.stateSubject.next("loaded")}),o.takeUntil(t)))),o.share());const i=t.pipe(o.switchMap(()=>(this.stateSubject.next("unloading"),this.context.bridgeEvent.viewportFree$.pipe(o.first(),o.tap(()=>{this.hookManager.destroy("item.onDocumentLoad",this.item.id)}),o.switchMap(()=>this.onUnload().pipe(o.endWith(null),o.first())),o.tap(()=>{this.stateSubject.next("idle")}),o.takeUntil(this.load$)))));o.merge(this.unload$,i).pipe(o.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){this._documentContainer=e,this._documentContainer.classList.add(ce.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this._documentContainer?.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(o.map(e=>e==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new o.Subject;return o.defer(()=>this.onRenderHeadless({release:e})).pipe(o.endWith(void 0),o.first(),o.map(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),o.finalize(()=>{e.complete()}),o.catchError(t=>(L.error(t),o.of(void 0))))}layout(e){return o.defer(()=>this.onLayout(e))}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this._documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){const e=this.item.renditionLayout;if(e)return e;const t=this.getDocumentFrame();if(t){const{hasViewport:i}=Z(t);if(i)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};ce.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let x=ce;const gn=n=>new URL(n.href);class Q{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await o.lastValueFrom(this.settings.values.getResource?.(this.item)??o.of(void 0))??gn(this.item)}async fetchResource(){const e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}}const He=(n,e)=>{const t=n.startsWith("file://"),i=t?n.replace("file://","http://"):n,s=new URL(e,i).toString();return t?s.replace("http://","file://"):s},hn=async(n,e,t,i,s)=>{if(!n||!n.defaultView)return;const r=e.sheet;if(r)try{const a=Array.from(r.cssRules||[]);for(let c=0;c<a.length;c++){const u=a[c];if(n.defaultView&&u instanceof n.defaultView.CSSFontFaceRule){const l=u.style.getPropertyValue("src");if(l.match(/url\(['"]?([^'"]+)['"]?\)/g)){const p=l.split(",").map(g=>g.trim()),h=await Promise.all(p.map(async g=>{if(g.startsWith("local("))return g;const f=g.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return g;const y=f[1]??"",S=i.manifest?.items.find(({href:w})=>`${He(t,y).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(S){const w=new Q(S,s);try{const v=await w.getResource();if(v instanceof Response){const T=await v.blob(),P=n.defaultView?.URL.createObjectURL(T);return g.replace(f[0],`url("${P}")`)}}catch(v){console.error("Error loading font:",v)}}return g})),m=u.cssText.replace(/src:\s*[^;]+;/,`src: ${h.join(", ")};`);r.deleteRule(c),r.insertRule(m,c)}}}}catch(a){console.error("Could not access stylesheet rules:",a)}},mn=(n,e,t,i,s)=>{const r=e.getAttribute("src")||e.getAttribute("href");if(!r)return o.of(null);const a=i.manifest?.items.find(({href:u})=>`${He(t,r).toLowerCase()}`.endsWith(`${u.toLowerCase()}`));if(!a)return o.of(null);const c=new Q(a,s);return o.from(c.getResource()).pipe(o.mergeMap(u=>u instanceof Response?o.from(u.blob()):o.of(void 0)),o.mergeMap(u=>{if(!u)return o.of(null);const l=n?.defaultView?.URL.createObjectURL(u)??"";if(e.hasAttribute("src"))e.setAttribute("src",l);else if(e.hasAttribute("href")&&(e.setAttribute("href",l),n?.defaultView&&e instanceof n.defaultView.HTMLLinkElement))return new o.Observable(d=>{e.onload=async()=>{try{e.sheet&&await hn(n,e,t,i,s),d.next(),d.complete()}catch(p){d.error(p)}},e.onerror=d.error});return o.of(null)}))},fn=({settings:n,item:e,context:t})=>i=>i.pipe(o.switchMap(s=>{const r=Oe(s.contentDocument),a=$.getParentPath(e.href),c=r.map(u=>mn(s.contentDocument,u,a,t,n));return o.combineLatest(c).pipe(o.map(()=>s))})),Sn=n=>{Qt(n?.contentDocument)},yn="@prose-reader/core",bn=0,In=200,Be=[".xhtml",".html",".htm"],E="prose-reader",be=`${E}-style`,xe=`data-${E}-id`,Ye=`${E}-viewport`,Xe=`${E}-scroll-navigator`,wn=async(n,e)=>{if(typeof n=="string")return n;const t=$.parseContentType(n.headers.get("Content-Type")||"")||$.detectMimeTypeFromName(e.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(s=>s===t)){const s=await n.blob(),r=URL.createObjectURL(s),a=await createImageBitmap(s),{width:c,height:u}={width:a.width,height:a.height};return a.close(),`
15
15
  <html>
16
16
  <head>
17
17
  ${e.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${c}, height=${u}">`:""}
@@ -39,7 +39,7 @@
39
39
  <pre>${await n.text()}</pre>
40
40
  </body>
41
41
  </html>
42
- `:await n.text()},wn=({item:n,resourcesHandler:e})=>{const t=i=>In(i,n);return i=>i.pipe(o.switchMap(s=>o.from(e.getResource()).pipe(o.switchMap(r=>r instanceof URL&&n.href.startsWith(window.location.origin)&&(n.mediaType&&["application/xhtml+xml","application/xml","text/html","text/xml"].includes(n.mediaType)||!n.mediaType&&Be.some(c=>n.href.endsWith(c)))?(s?.setAttribute("src",n.href),o.of(s)):(r instanceof URL?o.from(e.fetchResource()):o.of(r)).pipe(o.switchMap(c=>{if(!(c instanceof Response))throw new Error("Invalid resource");return o.from(t(c))}),o.tap(c=>{if(c){const u=new Blob([c],{type:"text/html"}),l=URL.createObjectURL(u);s?.setAttribute("src",l)}}),o.map(()=>s),o.catchError(c=>(L.error(`Error while trying to fetch or load resource for item ${n.id}`,r),L.error(c),o.of(s))))))))},vn=()=>{const n=document.createElement("iframe");return n.frameBorder="no",n.tabIndex=0,n.setAttribute("sandbox",`
42
+ `:await n.text()},vn=({item:n,resourcesHandler:e})=>{const t=i=>wn(i,n);return i=>i.pipe(o.switchMap(s=>o.from(e.getResource()).pipe(o.switchMap(r=>r instanceof URL&&n.href.startsWith(window.location.origin)&&(n.mediaType&&["application/xhtml+xml","application/xml","text/html","text/xml"].includes(n.mediaType)||!n.mediaType&&Be.some(c=>n.href.endsWith(c)))?(s?.setAttribute("src",n.href),o.of(s)):(r instanceof URL?o.from(e.fetchResource()):o.of(r)).pipe(o.switchMap(c=>{if(!(c instanceof Response))throw new Error("Invalid resource");return o.from(t(c))}),o.tap(c=>{if(c){const u=new Blob([c],{type:"text/html"}),l=URL.createObjectURL(u);s?.setAttribute("src",l)}}),o.map(()=>s),o.catchError(c=>(L.error(`Error while trying to fetch or load resource for item ${n.id}`,r),L.error(c),o.of(s))))))))},Pn=()=>{const n=document.createElement("iframe");return n.frameBorder="no",n.tabIndex=0,n.setAttribute("sandbox",`
43
43
  allow-same-origin
44
44
  allow-scripts
45
45
  allow-top-navigation-to-custom-protocols
@@ -53,7 +53,7 @@
53
53
  margin: 0;
54
54
  }
55
55
  }
56
- `,Ge=({pageHeight:n,pageWidth:e,frameElement:t})=>{const i=q(t);if(t?.contentDocument&&t.contentWindow&&i){const s=e/(i.width??1);return{computedScale:Math.min(s,n/(i.height??1)),computedWidthScale:s,viewportDimensions:i}}},Pn=({columnWidth:n,enableTouch:e,spreadPosition:t},i)=>`
56
+ `,Ge=({pageHeight:n,pageWidth:e,frameElement:t})=>{const i=Z(t);if(t?.contentDocument&&t.contentWindow&&i){const s=e/(i.width??1);return{computedScale:Math.min(s,n/(i.height??1)),computedWidthScale:s,viewportDimensions:i}}},$n=({columnWidth:n,enableTouch:e,spreadPosition:t},i)=>`
57
57
  ${qe()}
58
58
  body {
59
59
  ${i?"":`
@@ -72,9 +72,9 @@
72
72
  }
73
73
 
74
74
  html, body {
75
- ${e?`
75
+ ${e?"":`
76
76
  touch-action: none
77
- `:""}
77
+ `}
78
78
  }
79
79
 
80
80
  img {
@@ -94,7 +94,7 @@
94
94
  object-fit:contain;
95
95
  `}
96
96
  }
97
- `,$n=({pageHeight:n,pageWidth:e})=>({columnHeight:n,columnWidth:e}),Ze=(n,e)=>{n.style.width=`${e.width}px`,n.style.height=`${e.height}px`},Tn=({minPageSpread:n,blankPagePosition:e,spreadPosition:t,pageHeight:i,pageWidth:s,frameElement:r,isRTL:a,enableTouch:c})=>{const u=n*s;if(r?.contentDocument&&r?.contentWindow){const{viewportDimensions:l,computedScale:d=1}=Ge({frameElement:r,pageHeight:i,pageWidth:s})??{},p=s,h=i,m=Pn({...$n({pageHeight:i,pageWidth:s}),enableTouch:c,spreadPosition:t},l);if(N(r,"prose-reader-css",m),l?Ze(r,{width:l.width??1,height:l.height??1}):Ze(r,{width:p,height:h}),l){r?.style.setProperty("position","absolute"),r?.style.setProperty("top","50%"),t==="left"?(r?.style.setProperty("right","0"),r?.style.removeProperty("left")):e==="before"&&a?(r?.style.setProperty("right","50%"),r?.style.removeProperty("left")):t==="right"?(r?.style.setProperty("left","0"),r?.style.removeProperty("right")):(r?.style.setProperty("left",e==="before"?a?"25%":"75%":e==="after"?a?"75%":"25%":"50%"),r?.style.removeProperty("right"));const g=t!=="none"?"0":"-50%",f=t==="right"&&e!=="before"?"left":t==="left"||e==="before"&&a?"right":"center";r?.style.setProperty("transform",`translate(${g}, -50%) scale(${d})`),r?.style.setProperty("transform-origin",`${f} center`)}else e==="before"?a?r?.style.setProperty("margin-right",`${s}px`):r?.style.setProperty("margin-left",`${s}px`):(r?.style.removeProperty("margin-left"),r?.style.removeProperty("margin-right"));return{width:u,height:h}}return{width:u,height:i}},Mn=()=>`
97
+ `,Tn=({pageHeight:n,pageWidth:e})=>({columnHeight:n,columnWidth:e}),Ze=(n,e)=>{n.style.width=`${e.width}px`,n.style.height=`${e.height}px`},Mn=({minPageSpread:n,blankPagePosition:e,spreadPosition:t,pageHeight:i,pageWidth:s,frameElement:r,isRTL:a,enableTouch:c})=>{const u=n*s;if(r?.contentDocument&&r?.contentWindow){const{viewportDimensions:l,computedScale:d=1}=Ge({frameElement:r,pageHeight:i,pageWidth:s})??{},p=s,h=i,m=$n({...Tn({pageHeight:i,pageWidth:s}),enableTouch:c,spreadPosition:t},l);if(N(r,"prose-reader-css",m),l?Ze(r,{width:l.width??1,height:l.height??1}):Ze(r,{width:p,height:h}),l){r?.style.setProperty("position","absolute"),r?.style.setProperty("top","50%"),t==="left"?(r?.style.setProperty("right","0"),r?.style.removeProperty("left")):e==="before"&&a?(r?.style.setProperty("right","50%"),r?.style.removeProperty("left")):t==="right"?(r?.style.setProperty("left","0"),r?.style.removeProperty("right")):(r?.style.setProperty("left",e==="before"?a?"25%":"75%":e==="after"?a?"75%":"25%":"50%"),r?.style.removeProperty("right"));const g=t!=="none"?"0":"-50%",f=t==="right"&&e!=="before"?"left":t==="left"||e==="before"&&a?"right":"center";r?.style.setProperty("transform",`translate(${g}, -50%) scale(${d})`),r?.style.setProperty("transform-origin",`${f} center`)}else e==="before"?a?r?.style.setProperty("margin-right",`${s}px`):r?.style.setProperty("margin-left",`${s}px`):(r?.style.removeProperty("margin-left"),r?.style.removeProperty("margin-right"));return{width:u,height:h}}return{width:u,height:i}},Fn=()=>`
98
98
  ${qe()}
99
99
  html {
100
100
  width: 100%;
@@ -109,15 +109,15 @@
109
109
  html, body {
110
110
  touch-action: none;
111
111
  }
112
- `,Fn=({isScrollable:n,enableTouch:e})=>`
112
+ `,Ln=({isScrollable:n,enableTouch:e})=>`
113
113
 
114
114
  html, body {
115
115
  width: 100%;
116
116
  margin: 0;
117
117
  padding: 0;
118
- ${e?`
118
+ ${e?"":`
119
119
  touch-action: none
120
- `:""}
120
+ `}
121
121
  }
122
122
  ${n?`
123
123
  img {
@@ -131,7 +131,7 @@
131
131
  display: block;
132
132
  }
133
133
  `:""}
134
- `,Ln=({width:n,columnHeight:e,columnWidth:t})=>`
134
+ `,Cn=({width:n,columnHeight:e,columnWidth:t})=>`
135
135
  parsererror {
136
136
  display: none !important;
137
137
  }
@@ -195,24 +195,24 @@
195
195
  td {
196
196
  max-width: ${t}px;
197
197
  }
198
- `,En=({isUsingVerticalWriting:n,minimumWidth:e,pageHeight:t,pageWidth:i})=>{let a=i-0;const c=t-0;let u=i-0;return n&&(u=e-0,a=c),{columnHeight:c,columnWidth:a,width:u}},K=(n,e)=>{n.style.width=`${e.width}px`,n.style.height=`${e.height}px`},Cn=({pageHeight:n,pageWidth:e,frameElement:t,manifest:i,minPageSpread:s,isRTL:r,blankPagePosition:a,isImageType:c,enableTouch:u,isUsingVerticalWriting:l})=>{const d=s*e,p=i?.renditionLayout==="reflowable"&&i?.renditionFlow==="scrolled-continuous",h=p?Math.min(400,n):n;t?.style.setProperty("width",`${e}px`),p?t?.style.removeProperty("height"):t?.style.setProperty("height",`${h}px`);const{viewportDimensions:m,computedScale:g=1}=Ge({frameElement:t,pageHeight:h,pageWidth:e})??{},f=i?.renditionLayout==="pre-paginated";if(t?.contentDocument&&t?.contentWindow&&t.contentDocument.body){let y=e,S=h;if(m?.hasViewport)N(t,"prose-reader-html-renderer-framce-css",Mn()),K(t,{width:m.width??1,height:m.height??1}),t?.style.setProperty("position","absolute"),t?.style.setProperty("top","50%"),t?.style.setProperty("left",a==="before"?r?"25%":"75%":a==="after"?r?"75%":"25%":"50%"),t?.style.setProperty("transform",`translate(-50%, -50%) scale(${g})`),t?.style.setProperty("transform-origin","center center");else{const v=c?Fn({isScrollable:i?.renditionFlow==="scrolled-continuous",enableTouch:u}):Ln(En({isUsingVerticalWriting:l,minimumWidth:d,pageHeight:h,pageWidth:e}));if(N(t,"prose-reader-css",v,!0),l)S=Math.ceil(t.contentDocument.documentElement.scrollHeight/h)*h,K(t,{width:d,height:S});else if(i?.renditionFlow==="scrolled-continuous")S=t.contentDocument.body.scrollHeight,K(t,{width:d,height:S});else{const T=Math.ceil(t.contentDocument.documentElement.scrollWidth/e);f?y=e:y=T*e,K(t,{width:y,height:S})}}return y%d===0?t?.style.setProperty("margin-left","0px"):(y=y+e,r&&!l&&t?.style.setProperty("margin-left",`${e}px`)),{width:y,height:S}}};class Rn extends x{constructor(){super(...arguments),this.isImageType=()=>!!(this.item.mediaType??$.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=vn();return this.setDocumentContainer(e),o.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return o.of(e).pipe(wn({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),Y(this.context.bridgeEvent.viewportFree$),o.tap(()=>{this.attach()}),ke,mn({context:this.context,item:this.item,settings:this.settings}),ze)}onUnload(){return fn(this.getFrameElement()),this.detach(),o.EMPTY}onLayout({minPageSpread:e,blankPagePosition:t,spreadPosition:i}){const{width:s,height:r}=this.viewport.pageSize,a=this.getFrameElement();if(!a)return o.of(void 0);const c=!!this.writingMode?.startsWith("vertical");if(this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&this.context.manifest?.renditionLayout==="pre-paginated"){const l=Tn({blankPagePosition:t,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:a,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:r,pageWidth:s,spreadPosition:i});return o.of(l)}const u=Cn({pageHeight:r,pageWidth:s,frameElement:a,manifest:this.context.manifest,blankPagePosition:t,isUsingVerticalWriting:c,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode!=="scrollable"});return o.of(u)}onRenderHeadless(){return o.from(this.resourcesHandler.fetchResource()).pipe(o.switchMap(e=>{if(e instanceof Response){const t=e.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(t))return o.from(e.text()).pipe(o.map(s=>new DOMParser().parseFromString(s,t)))}return o.of(void 0)}))}getFrameElement(){const e=this.documentContainer;if(e instanceof HTMLIFrameElement)return e}getComputedStyleAfterLoad(){const e=this.getFrameElement(),t=e?.contentDocument?.body;if(t)return e?.contentWindow?.getComputedStyle(t)}get writingMode(){return this.getComputedStyleAfterLoad()?.writingMode}get readingDirection(){if(this.writingMode==="vertical-rl")return"rtl";switch(this.getComputedStyleAfterLoad()?.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const Je=n=>e=>{const t=n({...e,getRenderer(s){return e.getRenderer?.(s)??(a=>new Rn(a))}}),i=dn(t);return i.pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,links$:i}};function O(n){return n!=null}class Q{constructor(e){this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.width=e.width,this.height=e.height,this.x=e.x,this.y=e.y}}class F{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class j{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class Ke extends Q{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class ee extends Q{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class Qe extends Q{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class Ie{constructor(e){this.x=e.x,this.y=e.y}}class M extends Ie{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new M(e)}}class V extends Ie{constructor(){super(...arguments),this.__symbol="UnboundSpinePosition"}static from(e){return new V(e)}}const An=(n,e)=>{const t=e.getBoundingClientRect(),{x:i,y:s}=n,{left:r,top:a}=t,c=t.width/e.offsetWidth,u=t.height/e.offsetHeight,l=i-r,d=s-a;return{x:l/c,y:d/u}},Dn=(n,e)=>new V(An(n,e)),On=n=>({getSpinePositionFromClientPosition:e=>n.spine.element?Dn(e,n.spine.element):void 0}),Nn=n=>{let e;const t=n.context.watch("rootElement").pipe(I.switchMap(u=>u?new o.Observable(()=>(e=u.ownerDocument.createElement("div"),e.style.cssText=`
198
+ `,En=({isUsingVerticalWriting:n,minimumWidth:e,pageHeight:t,pageWidth:i})=>{let a=i-0;const c=t-0;let u=i-0;return n&&(u=e-0,a=c),{columnHeight:c,columnWidth:a,width:u}},j=(n,e)=>{n.style.width=`${e.width}px`,n.style.height=`${e.height}px`},Rn=({pageHeight:n,pageWidth:e,frameElement:t,manifest:i,minPageSpread:s,isRTL:r,blankPagePosition:a,isImageType:c,enableTouch:u,isUsingVerticalWriting:l})=>{const d=s*e,p=i?.renditionLayout==="reflowable"&&i?.renditionFlow==="scrolled-continuous",h=p?Math.min(400,n):n;t?.style.setProperty("width",`${e}px`),p?t?.style.removeProperty("height"):t?.style.setProperty("height",`${h}px`);const{viewportDimensions:m,computedScale:g=1}=Ge({frameElement:t,pageHeight:h,pageWidth:e})??{},f=i?.renditionLayout==="pre-paginated";if(t?.contentDocument&&t?.contentWindow&&t.contentDocument.body){let y=e,S=h;if(m?.hasViewport)N(t,"prose-reader-html-renderer-framce-css",Fn()),j(t,{width:m.width??1,height:m.height??1}),t?.style.setProperty("position","absolute"),t?.style.setProperty("top","50%"),t?.style.setProperty("left",a==="before"?r?"25%":"75%":a==="after"?r?"75%":"25%":"50%"),t?.style.setProperty("transform",`translate(-50%, -50%) scale(${g})`),t?.style.setProperty("transform-origin","center center");else{const v=c?Ln({isScrollable:i?.renditionFlow==="scrolled-continuous",enableTouch:u}):Cn(En({isUsingVerticalWriting:l,minimumWidth:d,pageHeight:h,pageWidth:e}));if(N(t,"prose-reader-css",v,!0),l)S=Math.ceil(t.contentDocument.documentElement.scrollHeight/h)*h,j(t,{width:d,height:S});else if(i?.renditionFlow==="scrolled-continuous")S=t.contentDocument.body.scrollHeight,j(t,{width:d,height:S});else{const T=Math.ceil(t.contentDocument.documentElement.scrollWidth/e);f?y=e:y=T*e,j(t,{width:y,height:S})}}return y%d===0?t?.style.setProperty("margin-left","0px"):(y=y+e,r&&!l&&t?.style.setProperty("margin-left",`${e}px`)),{width:y,height:S}}};class An extends x{constructor(){super(...arguments),this.isImageType=()=>!!(this.item.mediaType??$.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=Pn();return this.setDocumentContainer(e),o.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return o.of(e).pipe(vn({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),Y(this.context.bridgeEvent.viewportFree$),o.tap(()=>{this.attach()}),ke,fn({context:this.context,item:this.item,settings:this.settings}),ze)}onUnload(){return Sn(this.getFrameElement()),this.detach(),o.EMPTY}onLayout({minPageSpread:e,blankPagePosition:t,spreadPosition:i}){const{width:s,height:r}=this.viewport.pageSize,a=this.getFrameElement();if(!a)return o.of(void 0);const c=!!this.writingMode?.startsWith("vertical");if(this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&this.context.manifest?.renditionLayout==="pre-paginated"){const l=Mn({blankPagePosition:t,enableTouch:this.settings.values.computedPageTurnMode==="scrollable",frameElement:a,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:r,pageWidth:s,spreadPosition:i});return o.of(l)}const u=Rn({pageHeight:r,pageWidth:s,frameElement:a,manifest:this.context.manifest,blankPagePosition:t,isUsingVerticalWriting:c,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode==="scrollable"});return o.of(u)}onRenderHeadless(){return o.from(this.resourcesHandler.fetchResource()).pipe(o.switchMap(e=>{if(e instanceof Response){const t=e.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(t))return o.from(e.text()).pipe(o.map(s=>new DOMParser().parseFromString(s,t)))}return o.of(void 0)}))}getFrameElement(){const e=this.documentContainer;if(e instanceof HTMLIFrameElement)return e}getComputedStyleAfterLoad(){const e=this.getFrameElement(),t=e?.contentDocument?.body;if(t)return e?.contentWindow?.getComputedStyle(t)}get writingMode(){return this.getComputedStyleAfterLoad()?.writingMode}get readingDirection(){if(this.writingMode==="vertical-rl")return"rtl";switch(this.getComputedStyleAfterLoad()?.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const Je=n=>e=>{const t=n({...e,getRenderer(s){return e.getRenderer?.(s)??(a=>new An(a))}}),i=pn(t);return i.pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,links$:i}};function O(n){return n!=null}class ee{constructor(e){this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.width=e.width,this.height=e.height,this.x=e.x,this.y=e.y}}class F{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class te{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class Ke extends ee{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class ne extends ee{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class Qe extends ee{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class Ie{constructor(e){this.x=e.x,this.y=e.y}}class M extends Ie{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new M(e)}}class U extends Ie{constructor(){super(...arguments),this.__symbol="UnboundSpinePosition"}static from(e){return new U(e)}}const Dn=(n,e)=>{const t=e.getBoundingClientRect(),{x:i,y:s}=n,{left:r,top:a}=t,c=t.width/e.offsetWidth,u=t.height/e.offsetHeight,l=i-r,d=s-a;return{x:l/c,y:d/u}},On=(n,e)=>new U(Dn(n,e)),Nn=n=>({getSpinePositionFromClientPosition:e=>n.spine.element?On(e,n.spine.element):void 0}),Vn=n=>{let e;const t=n.context.watch("rootElement").pipe(I.switchMap(u=>u?new o.Observable(()=>(e=u.ownerDocument.createElement("div"),e.style.cssText=`
199
199
  position: absolute;
200
200
  left: 0;
201
201
  top: 0;
202
202
  width: 100%;
203
203
  height: 100%;
204
204
  visibility: hidden;
205
- `,u.appendChild(e),()=>{e?.remove(),e=void 0})):o.NEVER)),i=u=>o.scheduled(u,o.animationFrameScheduler).pipe(I.tap(()=>{e?.style.setProperty("visibility","hidden")})),s=n.context.bridgeEvent.viewportBusy$.pipe(I.tap(()=>{e?.style.setProperty("visibility","visible")})),r=i(n.viewportFree$).pipe(I.take(1)),c=n.settings.values$.pipe(I.map(()=>n.settings.values.computedPageTurnMode),I.distinctUntilChanged()).pipe(I.switchMap(u=>u==="controlled"?s.pipe(I.switchMap(()=>r)):i(o.of(void 0))),I.takeUntil(n.$.destroy$));return o.merge(t,c)},Vn=n=>{n.hookManager.register("item.onDocumentLoad",({itemId:e})=>{n.spineItemsManager.get(e)?.renderer.getDocumentFrame()?.setAttribute("scrolling","no")})},Un=n=>{n.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:t,minimumWidth:i})=>{const s=n.spineItemsManager.get(e.id),r=s?.renderer.getDocumentFrame();if(s?.renditionLayout!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:a}=q(r),{width:c}=n.viewport.pageSize,u=s?.renderer.getDocumentFrame();if(a){const l=c<i;t==="none"&&l&&u instanceof HTMLIFrameElement&&u?.style.setProperty("left",n.context.isRTL()?"75%":"25%")}})},kn=n=>n.spineItemsManager.items$.pipe(o.switchMap(e=>o.merge(...e.map(t=>t.pipe(o.tap(i=>{t.containerElement.dataset.isDirty=i.iDirty.toString(),t.containerElement.dataset.isReady=i.isReady.toString()}))))));let zn=class extends _e{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:t,pageHorizontalMargin:i,pageVerticalMargin:s,layoutLayerTransition:r,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0}}};const Wn=n=>o.combineLatest([n.viewport.watch(["width","height"]),n.context.watch("manifest")]).pipe(o.tap(([{width:e,height:t},i])=>{const s=e>t;return!s&&i?.renditionSpread==="portrait"?n.settings.update({spreadMode:!0}):s&&(i?.renditionSpread===void 0||i?.renditionSpread==="auto"||i?.renditionSpread==="landscape"||i?.renditionSpread==="both")?n.settings.update({spreadMode:!0}):n.settings.update({spreadMode:!1})})),je=n=>e=>{const{pageHorizontalMargin:t,pageVerticalMargin:i,layoutAutoResize:s,layoutLayerTransition:r}=e,a=n(e),c=new zn({pageHorizontalMargin:t,pageVerticalMargin:i,layoutAutoResize:s,layoutLayerTransition:r},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let g=!1;a.spineItemsManager.items.forEach(f=>{const y=f.renderer.getDocumentFrame();!g&&y&&(y.getBoundingClientRect().left,g=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:g})=>{const f=a.spineItemsManager.get(g.id),S=!!(g.mediaType??$.detectMimeTypeFromName(g.href))?.startsWith("image/"),{pageHorizontalMargin:w=0,pageVerticalMargin:v=0}=c.values,T=a.viewport.pageSize;if(f?.renditionLayout==="reflowable"&&!S){let P=T.width-w*2;const E=T.height-v*2;let D=T.width-w*2,A=w*2;f.isUsingVerticalWriting()&&(D=T.width-w*2,P=E,A=v*2);const _=f?.renderer.getDocumentFrame();_&&N(_,"prose-layout-enhancer-css",`
205
+ `,u.appendChild(e),()=>{e?.remove(),e=void 0})):o.NEVER)),i=u=>o.scheduled(u,o.animationFrameScheduler).pipe(I.tap(()=>{e?.style.setProperty("visibility","hidden")})),s=n.context.bridgeEvent.viewportBusy$.pipe(I.tap(()=>{e?.style.setProperty("visibility","visible")})),r=i(n.viewportFree$).pipe(I.take(1)),c=n.settings.values$.pipe(I.map(()=>n.settings.values.computedPageTurnMode),I.distinctUntilChanged()).pipe(I.switchMap(u=>u==="controlled"?s.pipe(I.switchMap(()=>r)):i(o.of(void 0))),I.takeUntil(n.$.destroy$));return o.merge(t,c)},Un=n=>{n.hookManager.register("item.onDocumentLoad",({itemId:e})=>{n.spineItemsManager.get(e)?.renderer.getDocumentFrame()?.setAttribute("scrolling","no")})},kn=n=>{n.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:t,minimumWidth:i})=>{const s=n.spineItemsManager.get(e.id),r=s?.renderer.getDocumentFrame();if(s?.renditionLayout!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:a}=Z(r),{width:c}=n.viewport.pageSize,u=s?.renderer.getDocumentFrame();if(a){const l=c<i;t==="none"&&l&&u instanceof HTMLIFrameElement&&u?.style.setProperty("left",n.context.isRTL()?"75%":"25%")}})},zn=n=>n.spineItemsManager.items$.pipe(o.switchMap(e=>o.merge(...e.map(t=>t.pipe(o.tap(i=>{t.containerElement.dataset.isDirty=i.iDirty.toString(),t.containerElement.dataset.isReady=i.isReady.toString()}))))));let Wn=class extends _e{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:t,pageHorizontalMargin:i,pageVerticalMargin:s,layoutLayerTransition:r,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0}}};const _n=n=>o.combineLatest([n.viewport.watch(["width","height"]),n.context.watch("manifest")]).pipe(o.tap(([{width:e,height:t},i])=>{const s=e>t;return!s&&i?.renditionSpread==="portrait"?n.settings.update({spreadMode:!0}):s&&(i?.renditionSpread===void 0||i?.renditionSpread==="auto"||i?.renditionSpread==="landscape"||i?.renditionSpread==="both")?n.settings.update({spreadMode:!0}):n.settings.update({spreadMode:!1})})),je=n=>e=>{const{pageHorizontalMargin:t,pageVerticalMargin:i,layoutAutoResize:s,layoutLayerTransition:r}=e,a=n(e),c=new Wn({pageHorizontalMargin:t,pageVerticalMargin:i,layoutAutoResize:s,layoutLayerTransition:r},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let g=!1;a.spineItemsManager.items.forEach(f=>{const y=f.renderer.getDocumentFrame();!g&&y&&(y.getBoundingClientRect().left,g=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:g})=>{const f=a.spineItemsManager.get(g.id),S=!!(g.mediaType??$.detectMimeTypeFromName(g.href))?.startsWith("image/"),{pageHorizontalMargin:w=0,pageVerticalMargin:v=0}=c.values,T=a.viewport.pageSize;if(f?.renditionLayout==="reflowable"&&!S){let P=T.width-w*2;const C=T.height-v*2;let D=T.width-w*2,A=w*2;f.isUsingVerticalWriting()&&(D=T.width-w*2,P=C,A=v*2);const _=f?.renderer.getDocumentFrame();_&&N(_,"prose-layout-enhancer-css",`
206
206
  body {
207
207
  width: ${D}px !important;
208
208
  margin: ${v}px ${w}px !important;
209
209
  column-gap: ${A}px !important;
210
210
  column-width: ${P}px !important;
211
- height: ${E}px !important;
211
+ height: ${C}px !important;
212
212
  }
213
213
  img, video, audio, object, svg {
214
214
  -max-width: ${P}px !important;
215
- -max-height: ${E}px !important;
215
+ -max-height: ${C}px !important;
216
216
  }
217
217
  table {
218
218
  max-width: ${P}px !important;
@@ -220,7 +220,7 @@
220
220
  td {
221
221
  max-width: ${P}px;
222
222
  }
223
- `)}}),Un(a),Vn(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:g})=>{g.style.opacity="0",c.values.layoutLayerTransition&&(g.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:g})=>{const y=a.spineItemsManager.get(g.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&y?.setAttribute("tab-index","0")});const u=a.spineItemsObserver.itemIsReady$.pipe(I.filter(({isReady:g})=>g),I.tap(({item:g})=>{const f=g.renderer.documentContainer;f&&(f.style.opacity="1")})),l=c.values$.pipe(I.filter(({layoutAutoResize:g})=>g==="container"),I.switchMap(()=>a.context.watch("rootElement")),I.filter(O),I.switchMap(g=>Z(g)),I.debounceTime(100),I.filter(O),I.tap(()=>{a?.layout()})),d=Nn(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(I.skip(1),I.tap(()=>{a.layout()}),I.takeUntil(a.$.destroy$)).subscribe();const p=a.spine.pages.pipe(I.shareReplay({refCount:!0,bufferSize:1})),h=kn(a),m=Wn(a);return o.merge(u,d,l,p,h,m).pipe(I.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:a.spine.layout$,layoutInfo$:p,coordinates:On(a)}},et=`${`${C}-enhancer-loading`}-container`,_n=(n,e)=>{const t=n.ownerDocument.createElement("div");return t.classList.add(et),t.style.cssText=`
223
+ `)}}),kn(a),Un(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:g})=>{g.style.opacity="0",c.values.layoutLayerTransition&&(g.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:g})=>{const y=a.spineItemsManager.get(g.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&y?.setAttribute("tab-index","0")});const u=a.spineItemsObserver.itemIsReady$.pipe(I.filter(({isReady:g})=>g),I.tap(({item:g})=>{const f=g.renderer.documentContainer;f&&(f.style.opacity="1")})),l=c.values$.pipe(I.filter(({layoutAutoResize:g})=>g==="container"),I.switchMap(()=>a.context.watch("rootElement")),I.filter(O),I.switchMap(g=>K(g)),I.debounceTime(100),I.filter(O),I.tap(()=>{a?.layout()})),d=Vn(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(I.skip(1),I.tap(()=>{a.layout()}),I.takeUntil(a.$.destroy$)).subscribe();const p=a.spine.pages.pipe(I.shareReplay({refCount:!0,bufferSize:1})),h=zn(a),m=_n(a);return o.merge(u,d,l,p,h,m).pipe(I.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:a.spine.layout$,layoutInfo$:p,coordinates:Nn(a)}},et=`${`${E}-enhancer-loading`}-container`,Hn=(n,e)=>{const t=n.ownerDocument.createElement("div");return t.classList.add(et),t.style.cssText=`
224
224
  height: 100%;
225
225
  width: 100%;
226
226
  max-width: ${e.absoluteViewport.width}px;
@@ -235,7 +235,7 @@
235
235
  color: rgb(202, 202, 202);
236
236
  background-color: white;
237
237
  z-index: 1;
238
- `,t},Hn=({container:n,item:e})=>{const t=n.ownerDocument.createElement("div");t.innerText="prose",t.style.cssText=`
238
+ `,t},Bn=({container:n,item:e})=>{const t=n.ownerDocument.createElement("div");t.innerText="prose",t.style.cssText=`
239
239
  font-size: 4em;
240
240
  `;const i=n.ownerDocument.createElement("div");return i.innerText=`loading ${e.id}`,i.style.cssText=`
241
241
  font-size: 1.2em;
@@ -244,7 +244,7 @@
244
244
  overflow: hidden;
245
245
  max-width: 300px;
246
246
  width: 80%;
247
- `,n.appendChild(t),n.appendChild(i),n},Bn=n=>e=>{const{loadingElementCreate:t=Hn}=e,i=n(e),s=u=>o.of(u.reduce((l,{item:d,element:p})=>{p.style.zIndex="0";const h=p.querySelector(`.${et}`);if(h instanceof HTMLElement)return l[d.id]=h,l;const m=t({container:_n(p,i.viewport),item:d});return p.appendChild(m),l[d.id]=m,l},{})),r=u=>o.combineLatest([i.spine.layout$,i.theme.$.theme$]).pipe(I.map(([,l])=>({width:i.viewport.absoluteViewport.width,theme:l})),I.distinctUntilChanged($.isShallowEqual),I.tap(({width:l,theme:d})=>{Object.values(u).forEach(p=>{p.style.setProperty("max-width",`${l}px`),p.style.setProperty("color",d==="sepia"?"#939393":"rgb(202, 202, 202)")})})),a=u=>i.spineItemsObserver.itemIsReady$.pipe(I.tap(({item:l,isReady:d})=>{u[l.item.id]?.style.setProperty("visibility",d?"hidden":"visible"),u[l.item.id]?.style.setProperty("z-index",d?"0":"1")})),c=i.spineItemsManager.items$.pipe(I.switchMap(u=>s(u)),I.shareReplay(1),I.takeUntil(i.context.destroy$));return c.pipe(I.switchMap(u=>o.merge(r(u),a(u))),I.takeUntil(i.$.destroy$)).subscribe(),{...i,loading:{$:{items$:c}}}};class xn extends x{getImageElement(){const e=this.documentContainer;if(e instanceof HTMLImageElement)return e}onCreateDocument(){const e=this.containerElement.ownerDocument.createElement("img");return o.from(this.resourcesHandler.getResource()).pipe(o.switchMap(t=>{if(this.setDocumentContainer(e),e.style.objectFit="contain",e.style.userSelect="none",t instanceof URL)return o.of(t.href);if(t instanceof Response)return o.from(t.blob()).pipe(o.map(i=>URL.createObjectURL(i)));throw new Error("Invalid resource")}),o.map(t=>{const i=this.getImageElement();return i&&(i.src=t),e}))}onLoadDocument(){const e=this.getImageElement();if(!e)throw new Error("invalid element");return this.attach(),o.fromEvent(e,"load")}onUnload(){const e=this.getImageElement();return e&&URL.revokeObjectURL(e.src),this.detach(),o.EMPTY}onLayout({spreadPosition:e}){const t=this.getImageElement(),{height:i,width:s}=this.viewport.value.pageSize;let r=i;const a=s;if(!t)return o.of(void 0);const c=t.naturalWidth||1,u=t.naturalHeight||1,l=c/u;return this.settings.values.computedPageTurnDirection==="vertical"&&this.settings.values.computedPageTurnMode==="scrollable"&&!this.settings.values.computedSpreadMode&&(r=Math.ceil(s/l)),t.style.height=`${r}px`,t.style.width=`${a}px`,t.style.objectPosition=e==="left"?"right":e==="right"?"left":"center",o.of({width:a,height:r})}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}const Yn=n=>e=>{const t=n({...e,getRenderer(a){const c=e.getRenderer?.(a),l=!!(a.mediaType??$.detectMimeTypeFromName(a.href))?.startsWith("image/");return!c&&l?d=>new xn(d):c}}),i=new IntersectionObserver(a=>{a.forEach(c=>{const u=c.target,l=Array.from(u.contentDocument?.body.getElementsByTagName("audio")||[]);c.isIntersecting?l.forEach(d=>{d.hasAttribute("autoplay")&&d.paused&&d.readyState>=2&&d.play().catch(console.error)}):l.forEach(d=>{d.pause(),d.currentTime=0})})},{threshold:.01}),s=new IntersectionObserver(a=>{a.forEach(c=>{if(c.target.tagName==="video"){const u=c.target;c.isIntersecting?u.hasAttribute("autoplay")&&u.paused&&u.readyState>=2&&u.play().catch(console.error):(u.pause(),u.currentTime=0)}})},{threshold:.5});return t.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{const u=t.spineItemsManager.get(c)?.renderer.getDocumentFrame();if(!u)return;i.observe(u);const l=u.contentDocument?.body.getElementsByTagName("video"),d=Array.from(l||[]).map(p=>(s.observe(p),()=>s.unobserve(p)));a(()=>{i.unobserve(u),d.forEach(p=>{p()})})}),{...t,destroy:()=>{i.disconnect(),s.disconnect(),t.destroy()}}},Xn=(n,e)=>n.links$.pipe(o.tap(t=>{if(!Ve(t.target,"a")||t.type!=="click")return;const i=new URL(t.target.href),s=`${i.origin}${i.pathname}`;n.context.manifest?.spineItems.some(a=>a.href===s)&&e.goToUrl(i)})),W=L.namespace("navigation"),qn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:s})=>{let r=new F({x:n.x-i,y:n.y});return e.isUsingVerticalWriting()&&(r=new F({x:n.x,y:n.y+t})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},tt=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:s,viewport:r})=>{const a=t,c=s.getSpineItemFromPosition(n)||i.get(0),u=n;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(n,c),d=qn({position:l,spineItem:c,pageHeight:r.pageSize.height,pageWidth:r.pageSize.width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new M({x:n.x-r.pageSize.width,y:0}):new M({y:n.y-r.pageSize.height,x:0}))},Gn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a,viewport:c,settings:u})=>{const l=tt({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&n.x===l.x)return i.getAdjustedPositionForSpread(l);if(u.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==l.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...l,x:l.x+c.pageSize.width}:{...l,x:l.x-c.pageSize.width}));if(a==="vertical"&&n.y!==l.y)return i.getAdjustedPositionForSpread(l);const d=tt({position:l,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return i.getAdjustedPositionForSpread(d)}return i.getAdjustedPositionForSpread(l)},Zn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:s})=>{let r=new F({x:n.x+i,y:n.y});return e.isUsingVerticalWriting()&&(r=new F({x:n.x,y:n.y-t})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},nt=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:s,viewport:r})=>{const a=t,c=s.getSpineItemFromPosition(n)||i.get(0),u=n;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(n,c),d=Zn({position:l,spineItem:c,pageHeight:r.pageSize.height,pageWidth:r.pageSize.width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new V({x:n.x+r.pageSize.width,y:0}):new V({y:n.y+r.pageSize.height,x:0}))},Jn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a,viewport:c,settings:u})=>{const l=nt({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&n.x===l.x)return i.getAdjustedPositionForSpread(l);if(u.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==l.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...l,x:l.x-c.pageSize.width}:{...l,x:l.x+c.pageSize.width}));if(a==="vertical"&&n.y!==l.y)return i.getAdjustedPositionForSpread(l);const d=nt({position:l,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return i.getAdjustedPositionForSpread(d)}return i.getAdjustedPositionForSpread(l)};class Kn{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new M({x:0,y:0}),this.unlock=void 0}turnRight(){return this.turnRightOrBottom()}turnLeft(){return this.turnLeftOrTop()}turnTop(){return this.turnLeftOrTop()}turnBottom(){return this.turnRightOrBottom()}turnRightOrBottom(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=Jn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=Gn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const i=this.reader.spineItemsManager.get(e);if(i===void 0){W.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:i.index,...t})}goToNextSpineItem(){const{endIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})||{};this.goToSpineItem({indexOrId:e+1})}goToPreviousSpineItem(){const{beginIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})??{};this.goToSpineItem({indexOrId:e-1})}goToUrl(e){this.reader.navigation.navigate({url:e,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){W.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToPreviousSpineItem():this.goToNextSpineItem()}goToRightOrBottomSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToBottomSpineItem():this.goToRightSpineItem()}goToLeftOrTopSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToTopSpineItem():this.goToLeftSpineItem()}goToLeftSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){W.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToNextSpineItem():this.goToPreviousSpineItem()}goToTopSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){W.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){W.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:t,...i}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});W.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...i,position:s}),this.reader.navigation.navigate({position:s,...i})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const i=this.reader.spine.pages.fromAbsolutePageIndex(e);if(W.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:i}),i){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:i.pageIndex,spineItemId:i.itemIndex});return this.reader.navigation.navigate({position:s,...t})}}}class Qn{constructor(e){this.reader=e,this.lastDelta={x:0,y:0},this.lastPosition=new M({x:0,y:0}),this.lastStartPosition=new M({x:0,y:0}),this.unlock=void 0}moveTo(e,{final:t,start:i}={}){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){W.warn("pan control is not available on free page turn mode");return}const s=this.reader.settings.values.computedPageTurnDirection;i&&(this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.lastDelta={x:0,y:0},this.lastStartPosition=this.reader.navigation.controlledNavigationController.viewportPosition,this.lastPosition=this.lastStartPosition);let r=this.reader.navigation.getNavigation().position;if(e){const a=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,c=Math.floor(e.x)-(this.lastDelta?.x||0),u=Math.floor(e.y)-(this.lastDelta?.y||0),l=Math.floor(s==="horizontal"?this.lastPosition.x-c/a:0),d=Math.floor(s==="horizontal"?0:this.lastPosition.y-u/a);r=new M({x:l,y:d}),this.lastDelta=e}else r=this.lastPosition;if(this.lastPosition=r,t){this.lastDelta={x:0,y:0},this.reader.navigation.navigate({position:r,animation:!1}),this.unlock?.();return}this.reader.navigation.navigate({position:r,animation:!1})}}const jn=500;class ei extends R{constructor(e,t){super(),this.scrollNavigationController=e,this.locker=t,this.navigationSubject=new o.Subject,this.navigation$=this.navigationSubject.asObservable();const i=this.scrollNavigationController.userScroll$.pipe(o.exhaustMap(s=>{const r=this.locker.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(s)).pipe(o.debounceTime(jn,o.animationFrameScheduler),o.first(),o.tap(()=>{const a=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:"scroll",position:a})}),o.finalize(()=>{r()}))}));o.merge(i).pipe(o.takeUntil(this.destroy$)).subscribe()}}const ti=n=>n.pagination.state$.pipe(o.withLatestFrom(n.context.manifest$,n.settings.values$),o.map(([e,{spineItems:t,readingDirection:i},{computedPageTurnDirection:s}])=>{const r=t.length??0,a=e.beginSpineItemIndex===0,c=e.endSpineItemIndex===Math.max(r-1,0),u=e.endSpineItemIndex===Math.max(r-1,0),l=e.beginSpineItemIndex===0,d=e.beginPageIndexInSpineItem===0,p=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:s==="vertical"?!1:!d,canTurnRight:s==="vertical"?!1:!p,canGoTopSpineItem:s==="vertical"&&!a,canGoBottomSpineItem:s==="vertical"&&!c,canGoLeftSpineItem:s!=="vertical"&&(i==="ltr"&&!a||i==="rtl"&&!u),canGoRightSpineItem:s!=="vertical"&&(i==="ltr"&&!c||i==="rtl"&&!l)}}),o.distinctUntilChanged($.isShallowEqual)),ni=({reader:n,duration:e})=>t=>{let i;const s=()=>{i?.(),i=void 0};return t.pipe(o.tap(()=>{i||(i=n?.navigation.lock())}),o.throttleTime(e,o.animationFrameScheduler,{trailing:!0,leading:!0}),o.tap(s),o.finalize(s))},ii=n=>e=>{const t=n(e),i=ti(t),s=new Kn(t),r=new Qn(t),a=new ei(t.navigation.scrollNavigationController,t.navigation.locker),c=Xn(t,s),u=a.navigation$.pipe(o.tap(p=>{t.navigation.navigate(p)}));return o.merge(c,u).pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,load:p=>{const{cfi:h,...m}=p;t.load(m),h&&s.goToCfi(h,{animate:!1})},destroy:()=>{a.destroy(),t.destroy()},navigation:{...t.navigation,state$:i,throttleLock:({duration:p,trigger:h})=>h.pipe(ni({duration:p,reader:t})),moveTo:r.moveTo.bind(r),turnBottom:s.turnBottom.bind(s),turnTop:s.turnTop.bind(s),turnLeftOrTop:s.turnLeftOrTop.bind(s),turnRightOrBottom:s.turnRightOrBottom.bind(s),turnLeft:s.turnLeft.bind(s),turnRight:s.turnRight.bind(s),goToCfi:s.goToCfi.bind(s),goToUrl:s.goToUrl.bind(s),goToSpineItem:s.goToSpineItem.bind(s),goToNextSpineItem:s.goToNextSpineItem.bind(s),goToPreviousSpineItem:s.goToPreviousSpineItem.bind(s),goToLeftOrTopSpineItem:s.goToLeftOrTopSpineItem.bind(s),goToRightOrBottomSpineItem:s.goToRightOrBottomSpineItem.bind(s),goToTopSpineItem:s.goToTopSpineItem.bind(s),goToBottomSpineItem:s.goToBottomSpineItem.bind(s),goToLeftSpineItem:s.goToLeftSpineItem.bind(s),goToRightSpineItem:s.goToRightSpineItem.bind(s),goToPageOfSpineItem:s.goToPageOfSpineItem.bind(s),goToAbsolutePageIndex:s.goToAbsolutePageIndex.bind(s)}}},it=(n,e,t)=>{const i=t.spineItems.findIndex(s=>s.href===n);return e.reduce((s,r)=>{const a=r.href.indexOf("#"),c=a>0?r.href.substr(0,a):r.href,u=c.substring(0,c.lastIndexOf("/")),l=n.substring(0,n.lastIndexOf("/")),d=n.endsWith(c),p=l!==""&&l.endsWith(u);if(d||p){const m=t.spineItems.findIndex(S=>S.href===r.href);if(i<m)return s;const f={title:r.title,path:r.path},y=it(n,r.contents,t);return y?{...f,subChapter:y}:f}return s},void 0)},oi=(n,e)=>{const{href:t}=e;return it(t,n.nav?.toc??[],n)},si=n=>{const e=n.context.manifest,t=n.spineItemsManager.items;return e?t.reduce((i,{item:s})=>(i[s.id]=oi(e,s),i),{}):{}},ri=n=>n.spineItemsManager.items$.pipe(o.startWith([]),o.map(()=>si(n))),ai=(n,e,t)=>n+e*t,ci=(n,e,t)=>{const{height:i,width:s}=t.layout.layoutInfo,{top:r,left:a}=n.spine.getSpineItemSpineLayoutInfo(t);return n.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-r+n.viewport.absoluteViewport.height)/i)):Math.max(0,Math.min(1,(e.x-a+n.viewport.absoluteViewport.width)/s))},ui=(n,e,t,i,s)=>s.isReady$.pipe(o.first(),o.withLatestFrom(n.layoutInfo$),o.map(([r,a])=>{const c=n.context,u=c.manifest?.renditionLayout==="pre-paginated",l=c.manifest?.spineItems.length||0,d=c.manifest?.spineItems.slice(0,e).reduce((S,w)=>S+(w.progressionWeight??0),0)||0,p=n.spineItemsManager.getSpineItemIndex(s)??0,h=n.context.manifest?.spineItems.length??0,m=a.pages.filter(S=>S.itemIndex===p).length??0,g=c.manifest?.spineItems[e]?.progressionWeight??(p+1)/h;let f=(t+1)*(g/m);!u&&s.renditionLayout==="reflowable"&&!r&&(f=0);let y=d+f;return c.manifest?.renditionFlow==="scrolled-continuous"&&(r?f=ci(n,i,s):f=0,y=ai(d,g,f)),e===l-1&&t===m-1&&y>.99?1:y})),li=n=>n.spine.layout$.pipe(o.debounceTime(10,o.animationFrameScheduler),o.withLatestFrom(n.pagination.state$),o.map(()=>({numberOfPagesPerItems:n.spineItemsManager.items.reduce((t,i)=>[...t,i.numberOfPages],[]),numberOfTotalPages:n.spine.pages.value.pages.length})),o.distinctUntilChanged($.isShallowEqual),o.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),di=(n,e,t,i)=>{const s=e.beginSpineItemIndex!==void 0?n.spineItemsManager.get(e.beginSpineItemIndex):void 0,r=e.endSpineItemIndex!==void 0?n.spineItemsManager.get(e.endSpineItemIndex):void 0;return o.of({...e,beginChapterInfo:s?t[s.item.id]:void 0,beginSpineItemReadingDirection:s?.readingDirection,endChapterInfo:r?t[r.item.id]:void 0,endSpineItemReadingDirection:r?.readingDirection,percentageEstimateOfBook:i,isUsingSpread:n.settings.values.computedSpreadMode??!1})},pi=n=>o.combineLatest([n.pagination.state$,n.layout$]).pipe(o.switchMap(([e])=>{const t=e.endSpineItemIndex!==void 0?n.spineItemsManager.get(e.endSpineItemIndex):void 0;return t?ui(n,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,n.navigation.getNavigation().position,t):o.of(0)})),gi=n=>{const e=ri(n),t=li(n),i=new o.BehaviorSubject({...n.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),s=o.combineLatest([n.pagination.state$,e,pi(n)]).pipe(o.switchMap(([a,c,u])=>di(n,a,c,u).pipe(o.map(l=>({...a,...l})))),o.distinctUntilChanged($.isShallowEqual));return{paginationInfo$:o.combineLatest([s,t]).pipe(o.map(([a,c])=>({...a,...c,beginAbsolutePageIndex:c.numberOfPagesPerItems.slice(0,a.beginSpineItemIndex).reduce((u,l)=>u+l,a.beginPageIndexInSpineItem??0),endAbsolutePageIndex:c.numberOfPagesPerItems.slice(0,a.endSpineItemIndex).reduce((u,l)=>u+l,a.endPageIndexInSpineItem??0)})),o.tap(a=>{i.next(a)}),o.shareReplay(1)),getPaginationInfo:()=>i.value}},H=n=>z.generate({spineIndex:n.index,spineId:n.id}),ot=({nodeOrRange:n,offset:e,item:t})=>{const i="ownerDocument"in n?n.ownerDocument:n.startContainer.ownerDocument;return!i||!i?.documentElement||n===i?H(t):Qt(n)?z.generate({start:{node:n.startContainer,offset:n.startOffset,spineIndex:t.index,spineId:t.id},end:{node:n.endContainer,offset:n.endOffset,spineIndex:t.index,spineId:t.id}}):z.generate({node:n,offset:e,spineIndex:t.index,spineId:t.id})},te=({pageIndex:n,spineItem:e,spine:t})=>{const s=t.pages.value.pages.find(a=>a.itemIndex===e.index&&a.pageIndex===n)?.firstVisibleNode,r=e.renderer.getDocumentFrame();return s&&r instanceof HTMLIFrameElement&&r.contentWindow?.document?ot({nodeOrRange:s.node,offset:s.offset,item:e.item}).trim():H(e.item)},st=(n,e)=>ot({nodeOrRange:n,item:e}),hi=n=>n.index.toString(),rt=n=>n[0]?.index===6&&n.length>1,ne=n=>{const e=z.parse(n);return z.isIndirectionOnly(e)},mi=n=>Array.isArray(n)?n[0]&&rt(n[0])?n[0]:void 0:n.parent[0]&&rt(n.parent[0])?n.parent[0]:void 0,ie=n=>{const e=z.parse(n),r=((mi(e)??[])[1]?.index??2)/2-1,a=z.isParsedCfiRange(e),c=a?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:a,cleanedCfi:n,itemIndex:r,offset:c??0}},we=({cfi:n,spineItemsManager:e})=>{const{itemIndex:t,...i}=ie(n),s=e.get(t);if(!s)return{...i,itemIndex:t,node:null};const r=s.renderer.getDocumentFrame();if(r instanceof HTMLIFrameElement){const a=r.contentWindow?.document;if(a)try{const c=z.resolve(n,a,{throwOnError:!0});return{...i,itemIndex:t,node:c.isRange?c.node?.startContainer??null:c.node??null,isCfiRange:c.isRange,range:c.isRange?c.node:void 0,offset:Array.isArray(c.offset)?c.offset.at(-1):c.offset,spineItem:s}}catch(c){return L.warn(`Error resolving cfi: ${n}.`),L.warn(c),{...i,spineItem:s,itemIndex:t,node:null}}}return{...i,itemIndex:t,spineItem:s,node:null}},fi=(n,e)=>{if("cfi"in e){const{itemIndex:r,...a}=n.cfi.parseCfi(e.cfi);return{...e,...a,itemIndex:r,node:null}}const t=n.spineItemsManager.get(e);if(!t)throw new Error("Spine item not found");const i=H(t.item);return{...n.cfi.parseCfi(i),cfi:H(t.item),itemIndex:t.index,node:null}},at=(n,e)=>{let t=n?.itemPageIndex;const{itemIndex:i,...s}=e.cfi.parseCfi(n.cfi),r=e.spineItemsManager.get(i);return r?fe().pipe(o.withLatestFrom(r.isReady$),o.map(([,a])=>{const{node:c=null,offset:u,range:l}=a?e.cfi.resolveCfi({cfi:n.cfi}):{};r.renditionLayout!=="pre-paginated"&&c&&(t=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,u??0,r)??t);let p=n?.absolutePageIndex;return t===void 0&&(t=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:t,spineItemOrId:r})??n?.absolutePageIndex,{...n,...s,range:l,itemIndex:i,node:c,startOffset:u,absolutePageIndex:p,itemPageIndex:t}})):o.of({...n,itemIndex:i,...s})};class ct{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const i=this.locatorsByKey.get(t);i&&(i.observerCount--,i.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,i)=>{const s={resource:t,meta:fi(this.reader,t)};return Se(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),a=r?.renditionLayout==="reflowable",c=i.mode==="shallow"||!a||!r?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([r.index]),u="cfi"in t?t.cfi:void 0,l=u?this.locatorsByKey.get(u):void 0,d=h=>h.pipe(o.finalize(()=>{u&&this.deregisterMemoizedStream(u),setTimeout(()=>{c()},1e3)}));if(u&&l)return l.observerCount++,d(l.consolidate$.pipe(o.map(({resource:h,meta:m})=>({resource:h,meta:m}))));const p=this.reader.spine.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(h=>at(h.meta,this.reader).pipe(o.map(m=>({...h,meta:m}))),s),o.shareReplay({refCount:!0,bufferSize:1}));return u&&this.locatorsByKey.set(u,{observerCount:1,consolidate$:p}),d(p)})}}locateResource(e,t){return Array.isArray(e)?Se(()=>o.combineLatest(e.map(i=>this.locate(i,t??{}))).pipe(o.defaultIfEmpty([]))):this.locate(e,t??{})}}const ut=n=>e=>{const t=n(e),{paginationInfo$:i,getPaginationInfo:s}=gi(t);i.pipe(o.takeUntil(t.$.destroy$)).subscribe();const r=new ct(t);return{...t,locateResource:r.locateResource.bind(r),pagination:{...t.pagination,get state(){return s()},get state$(){return i}}}},Si=n=>({put:(r,a)=>new Promise((c,u)=>{const l=n.transaction(["store"],"readwrite");l.onerror=h=>{u(h)},l.oncomplete=()=>{c()};const p=l.objectStore("store").put(a,r);p.onsuccess=()=>{c()},p.onerror=h=>{u(h)}}),keys:()=>new Promise((r,a)=>{const c=n.transaction(["store"],"readonly");c.onerror=p=>{a(p)};const l=c.objectStore("store").openKeyCursor(),d=[];l.onsuccess=()=>{const p=l.result;if(!p){r(d);return}d.push(p.key),p.continue()},l.onerror=()=>{a(l.error)}}),get:r=>new Promise((a,c)=>{const u=n.transaction(["store"],"readwrite"),d=u.objectStore("store").get(r);d.onsuccess=()=>{let p=d.result;p===void 0&&(p=null),a(p)},u.onerror=()=>{c(d.error)}}),remove:r=>new Promise((a,c)=>{const u=n.transaction(["store"],"readwrite"),d=u.objectStore("store").delete(r);u.onerror=()=>{c(d.error)},u.oncomplete=()=>{a()},u.onabort=()=>{const p=d.error?d.error:d.transaction?.error;c(p)}})}),ve=async n=>new Promise((e,t)=>{const i=window.indexedDB.open(n);i.onerror=s=>{t(s)},i.onsuccess=()=>{e(Si(i.result))},i.onupgradeneeded=()=>{i.result.createObjectStore("store")}}),yi=n=>{let e=Date.now().toString();const t=new o.Subject,i=u=>{if(typeof u=="string"||typeof u=="object"){const l=typeof u=="object"?u.id:u;return n.manifest?.spineItems.find(d=>d.id===l)}return n.manifest?.spineItems[u]},s=async(u,l)=>{const d=i(u);if(!d)return new Response("Item not found",{status:404});const h=await(await ve("prose-reader")).get(`${e}_${d.id}`);if(h)return new Response(h,{status:200});const m=l&&await l(d)||await fetch(d.href);return r(d,m.clone()),m},r=(u,l)=>{t.next({id:u,data:l})};t.asObservable().pipe(I.mergeMap(({id:u,data:l})=>{const d=i(u);return d?o.from(o.forkJoin([ve("prose-reader"),o.from(l.blob())])).pipe(I.switchMap(([p,h])=>o.from(p.put(`${e}_${d.id}`,h))),I.catchError(p=>(L.error(p),o.EMPTY))):o.EMPTY}),I.takeUntil(n.destroy$)).subscribe();const a=n.manifest$.pipe(I.tap(()=>{e=Date.now().toString()}));return o.merge(a).pipe(I.switchMap(()=>(L.debug("Cleanup up old cache..."),o.from(ve("prose-reader")).pipe(I.switchMap(u=>o.from(u.keys()).pipe(I.map(l=>l.filter(d=>!d.toString().startsWith(e))),I.switchMap(l=>{const d=l.map(p=>u.remove(p));return o.from(Promise.all(d))}))),I.catchError(u=>(L.error(u),o.EMPTY))))),I.takeUntil(n.destroy$)).subscribe(),{get:s,destroy:()=>{t.complete()}}},bi=n=>e=>{const t=n(e),i=yi(t.context);return{...t,destroy:()=>{i.destroy(),t.destroy()}}},Ii=(n,e)=>{const t=n.node.ownerDocument?.createRange(),i=n.node.compareDocumentPosition(e.node);if(t){try{if(i&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(n.node,n.offset||0);else if(i&Node.DOCUMENT_POSITION_FOLLOWING)t.setStart(n.node,n.offset||0),t.setEnd(e.node,e.offset||0);else{const s=Math.min(n.offset||0,e.offset||0),r=Math.max(n.offset||0,e.offset||0);t.setStart(n.node,s),t.setEnd(n.node,r)}}catch(s){L.warn("Failed to create range from selection",s,{anchor:n,focus:e})}return t}},wi=({selection:n,spineItem:e})=>{const{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n;if(!(!t||!s))try{return Ii({node:t,offset:i},{node:s,offset:r})}catch(a){L.warn("Failed to create range from selection",a,{selection:n,spineItem:e});return}};class vi extends R{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=o.NEVER,this.selectionOver$=o.NEVER;else{const i=ye(t.body,{childList:!0,subtree:!0}).pipe(o.filter(r=>!!r.find(a=>a.type==="childList"&&a.removedNodes.length))),s=e.parentElement?ye(e.parentElement,{childList:!0}).pipe(o.filter(r=>!!r.find(a=>Array.from(a.removedNodes).includes(e)))):o.of(null);this.selectionChange$=o.merge(o.fromEvent(t,"selectionchange"),i).pipe(o.map(()=>t.getSelection()),o.takeUntil(o.merge(s,this.destroy$)),o.endWith(null)),this.selectionOver$=o.fromEvent(t,"pointerdown").pipe(o.switchMap(()=>o.merge(o.fromEvent(t,"pointerup"),o.fromEvent(t,"pointercancel"),o.fromEvent(t,"contextmenu")).pipe(o.first(),o.delay(0),o.map(r=>{const a=t.getSelection();return a&&!a.isCollapsed?[r,a]:void 0}),o.filter(O))),o.takeUntil(o.merge(s,this.destroy$)))}}}const Pi=n=>n.watch("isLoaded").pipe(o.switchMap(()=>{const e=n.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return o.NEVER;const i=new vi(e);return o.merge(i.selectionChange$.pipe(o.map(s=>{if(s?.toString())return{type:"change",selection:s}})),i.selectionOver$.pipe(o.map(([s,r])=>({type:"over",event:s,selection:r})))).pipe(o.takeUntil(n.unloaded$),o.endWith(void 0),o.finalize(()=>{i.destroy()}))}),o.distinctUntilChanged()),$i=n=>e=>{const t=n(e);let i;const s=t.spineItemsManager.items$.pipe(o.switchMap(d=>{const p=d.map(h=>{const m=t.spineItemsManager.getSpineItemIndex(h)??0;return Pi(h).pipe(o.map(g=>{if(g)return{...g,itemIndex:m}}))});return o.merge(...p)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{i=d}),o.shareReplay({refCount:!0,bufferSize:1})),r=s,a=s.pipe(o.map(d=>!!d),o.distinctUntilChanged(),o.filter(d=>d),o.share()),c=a.pipe(o.switchMap(()=>r),o.distinctUntilChanged(),o.filter(d=>!d),o.share()),u=s.pipe(o.filter(d=>d?.type==="over"),o.share()),l=t.context.watch("rootElement").pipe(o.filter(O),o.switchMap(d=>o.fromEvent(d,"pointerdown")),o.withLatestFrom(r),o.map(([,d])=>d),o.startWith(void 0),o.shareReplay({refCount:!0,bufferSize:1}));return o.merge(r,l).pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:r,selectionStart$:a,selectionEnd$:c,selectionOver$:u,lastSelectionOnPointerdown$:l,getSelection:()=>i,createOrderedRangeFromSelection:wi}}},lt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],Ti=n=>e=>{const t=n(e),i=new o.BehaviorSubject(e.theme??"bright"),s=()=>{const c=lt.find(u=>u.name===i.value);return`
247
+ `,n.appendChild(t),n.appendChild(i),n},xn=n=>e=>{const{loadingElementCreate:t=Bn}=e,i=n(e),s=u=>o.of(u.reduce((l,{item:d,element:p})=>{p.style.zIndex="0";const h=p.querySelector(`.${et}`);if(h instanceof HTMLElement)return l[d.id]=h,l;const m=t({container:Hn(p,i.viewport),item:d});return p.appendChild(m),l[d.id]=m,l},{})),r=u=>o.combineLatest([i.spine.layout$,i.theme.$.theme$]).pipe(I.map(([,l])=>({width:i.viewport.absoluteViewport.width,theme:l})),I.distinctUntilChanged($.isShallowEqual),I.tap(({width:l,theme:d})=>{Object.values(u).forEach(p=>{p.style.setProperty("max-width",`${l}px`),p.style.setProperty("color",d==="sepia"?"#939393":"rgb(202, 202, 202)")})})),a=u=>i.spineItemsObserver.itemIsReady$.pipe(I.tap(({item:l,isReady:d})=>{u[l.item.id]?.style.setProperty("visibility",d?"hidden":"visible"),u[l.item.id]?.style.setProperty("z-index",d?"0":"1")})),c=i.spineItemsManager.items$.pipe(I.switchMap(u=>s(u)),I.shareReplay(1),I.takeUntil(i.context.destroy$));return c.pipe(I.switchMap(u=>o.merge(r(u),a(u))),I.takeUntil(i.$.destroy$)).subscribe(),{...i,loading:{$:{items$:c}}}};class Yn extends x{getImageElement(){const e=this.documentContainer;if(e instanceof HTMLImageElement)return e}onCreateDocument(){const e=this.containerElement.ownerDocument.createElement("img");return o.from(this.resourcesHandler.getResource()).pipe(o.switchMap(t=>{if(this.setDocumentContainer(e),e.style.objectFit="contain",e.style.userSelect="none",t instanceof URL)return o.of(t.href);if(t instanceof Response)return o.from(t.blob()).pipe(o.map(i=>URL.createObjectURL(i)));throw new Error("Invalid resource")}),o.map(t=>{const i=this.getImageElement();return i&&(i.src=t),e}))}onLoadDocument(){const e=this.getImageElement();if(!e)throw new Error("invalid element");return this.attach(),o.fromEvent(e,"load")}onUnload(){const e=this.getImageElement();return e&&URL.revokeObjectURL(e.src),this.detach(),o.EMPTY}onLayout({spreadPosition:e}){const t=this.getImageElement(),{height:i,width:s}=this.viewport.value.pageSize;let r=i;const a=s;if(!t)return o.of(void 0);const c=t.naturalWidth||1,u=t.naturalHeight||1,l=c/u;return this.settings.values.computedPageTurnDirection==="vertical"&&this.settings.values.computedPageTurnMode==="scrollable"&&!this.settings.values.computedSpreadMode&&(r=Math.ceil(s/l)),t.style.height=`${r}px`,t.style.width=`${a}px`,t.style.objectPosition=e==="left"?"right":e==="right"?"left":"center",o.of({width:a,height:r})}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}const Xn=n=>e=>{const t=n({...e,getRenderer(a){const c=e.getRenderer?.(a),l=!!(a.mediaType??$.detectMimeTypeFromName(a.href))?.startsWith("image/");return!c&&l?d=>new Yn(d):c}}),i=new IntersectionObserver(a=>{a.forEach(c=>{const u=c.target,l=Array.from(u.contentDocument?.body.getElementsByTagName("audio")||[]);c.isIntersecting?l.forEach(d=>{d.hasAttribute("autoplay")&&d.paused&&d.readyState>=2&&d.play().catch(console.error)}):l.forEach(d=>{d.pause(),d.currentTime=0})})},{threshold:.01}),s=new IntersectionObserver(a=>{a.forEach(c=>{if(c.target.tagName==="video"){const u=c.target;c.isIntersecting?u.hasAttribute("autoplay")&&u.paused&&u.readyState>=2&&u.play().catch(console.error):(u.pause(),u.currentTime=0)}})},{threshold:.5});return t.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{const u=t.spineItemsManager.get(c)?.renderer.getDocumentFrame();if(!u)return;i.observe(u);const l=u.contentDocument?.body.getElementsByTagName("video"),d=Array.from(l||[]).map(p=>(s.observe(p),()=>s.unobserve(p)));a(()=>{i.unobserve(u),d.forEach(p=>{p()})})}),{...t,destroy:()=>{i.disconnect(),s.disconnect(),t.destroy()}}},qn=(n,e)=>n.links$.pipe(o.tap(t=>{if(!Ve(t.target,"a")||t.type!=="click")return;const i=new URL(t.target.href),s=`${i.origin}${i.pathname}`;n.context.manifest?.spineItems.some(a=>a.href===s)&&e.goToUrl(i)})),k=L.namespace("navigation"),Gn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:s})=>{let r=new F({x:n.x-i,y:n.y});return e.isUsingVerticalWriting()&&(r=new F({x:n.x,y:n.y+t})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},tt=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:s,viewport:r})=>{const a=t,c=s.getSpineItemFromPosition(n)||i.get(0),u=n;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(n,c),d=Gn({position:l,spineItem:c,pageHeight:r.pageSize.height,pageWidth:r.pageSize.width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new M({x:n.x-r.pageSize.width,y:0}):new M({y:n.y-r.pageSize.height,x:0}))},Zn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a,viewport:c,settings:u})=>{const l=tt({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&n.x===l.x)return i.getAdjustedPositionForSpread(l);if(u.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==l.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...l,x:l.x+c.pageSize.width}:{...l,x:l.x-c.pageSize.width}));if(a==="vertical"&&n.y!==l.y)return i.getAdjustedPositionForSpread(l);const d=tt({position:l,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return i.getAdjustedPositionForSpread(d)}return i.getAdjustedPositionForSpread(l)},Jn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:s})=>{let r=new F({x:n.x+i,y:n.y});return e.isUsingVerticalWriting()&&(r=new F({x:n.x,y:n.y-t})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},nt=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:s,viewport:r})=>{const a=t,c=s.getSpineItemFromPosition(n)||i.get(0),u=n;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(n,c),d=Jn({position:l,spineItem:c,pageHeight:r.pageSize.height,pageWidth:r.pageSize.width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new U({x:n.x+r.pageSize.width,y:0}):new U({y:n.y+r.pageSize.height,x:0}))},Kn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a,viewport:c,settings:u})=>{const l=nt({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&n.x===l.x)return i.getAdjustedPositionForSpread(l);if(u.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==l.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...l,x:l.x-c.pageSize.width}:{...l,x:l.x+c.pageSize.width}));if(a==="vertical"&&n.y!==l.y)return i.getAdjustedPositionForSpread(l);const d=nt({position:l,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return i.getAdjustedPositionForSpread(d)}return i.getAdjustedPositionForSpread(l)};class Qn{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new M({x:0,y:0}),this.unlock=void 0}turnRight(){return this.turnRightOrBottom()}turnLeft(){return this.turnLeftOrTop()}turnTop(){return this.turnLeftOrTop()}turnBottom(){return this.turnRightOrBottom()}turnRightOrBottom(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=Kn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=Zn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const i=this.reader.spineItemsManager.get(e);if(i===void 0){k.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:i.index,...t})}goToNextSpineItem(){const{endIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})||{};this.goToSpineItem({indexOrId:e+1})}goToPreviousSpineItem(){const{beginIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})??{};this.goToSpineItem({indexOrId:e-1})}goToUrl(e){this.reader.navigation.navigate({url:e,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){k.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToPreviousSpineItem():this.goToNextSpineItem()}goToRightOrBottomSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToBottomSpineItem():this.goToRightSpineItem()}goToLeftOrTopSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToTopSpineItem():this.goToLeftSpineItem()}goToLeftSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){k.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToNextSpineItem():this.goToPreviousSpineItem()}goToTopSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){k.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){k.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:t,...i}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});k.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...i,position:s}),this.reader.navigation.navigate({position:s,...i})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const i=this.reader.spine.pages.fromAbsolutePageIndex(e);if(k.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:i}),i){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:i.pageIndex,spineItemId:i.itemIndex});return this.reader.navigation.navigate({position:s,...t})}}}class V extends o.Observable{constructor(e){super(t=>this.stateSubject.pipe(o.takeUntil(this._destroy$)).subscribe(t)),this._destroy$=new o.Subject,this.destroy$=this._destroy$.asObservable(),this.stateSubject=new o.BehaviorSubject(e)}next(e){this.stateSubject.next(e)}mergeCompare(e){const t={...this.value,...e};$.isShallowEqual(this.value,t)||this.stateSubject.next(t)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(J(e)):this.stateSubject.pipe(o.map(t=>t[e]),o.distinctUntilChanged($.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this._destroy$.complete()}}class jn extends V{constructor(e){super({lastDelta:{x:0,y:0},lastPosition:new M({x:0,y:0}),lastStartPosition:new M({x:0,y:0}),isStarted:!1}),this.reader=e,this.unlock=void 0}start(e){this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.mergeCompare({isStarted:!0,lastDelta:e,lastStartPosition:this.reader.navigation.controlledNavigationController.viewportPosition,lastPosition:this.reader.navigation.controlledNavigationController.viewportPosition})}stop(e){this.panMoveTo(e),this.mergeCompare({isStarted:!1}),this.unlock?.()}panMoveTo(e){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){k.warn("pan control is not available on free page turn mode");return}if(!this.value.isStarted){k.error("Pan navigator is not started");return}const t=this.reader.settings.values.computedPageTurnDirection;let i=this.reader.navigation.getNavigation().position;if(e){const s=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,r=Math.floor(e.x)-(this.value.lastDelta?.x||0),a=Math.floor(e.y)-(this.value.lastDelta?.y||0),c=Math.floor(t==="horizontal"?this.value.lastPosition.x-r/s:0),u=Math.floor(t==="horizontal"?0:this.value.lastPosition.y-a/s);i=new M({x:c,y:u}),this.mergeCompare({lastDelta:e})}else i=this.value.lastPosition;this.mergeCompare({lastPosition:i}),this.reader.navigation.navigate({position:i,animation:!1})}}const ei=500;class ti extends R{constructor(e,t){super(),this.scrollNavigationController=e,this.locker=t,this.navigationSubject=new o.Subject,this.navigation$=this.navigationSubject.asObservable();const i=this.scrollNavigationController.userScroll$.pipe(o.exhaustMap(s=>{const r=this.locker.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(s)).pipe(o.debounceTime(ei,o.animationFrameScheduler),o.first(),o.tap(()=>{const a=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:"scroll",position:a})}),o.finalize(()=>{r()}))}));o.merge(i).pipe(o.takeUntil(this.destroy$)).subscribe()}}const ni=n=>n.pagination.state$.pipe(o.withLatestFrom(n.context.manifest$,n.settings.values$),o.map(([e,{spineItems:t,readingDirection:i},{computedPageTurnDirection:s}])=>{const r=t.length??0,a=e.beginSpineItemIndex===0,c=e.endSpineItemIndex===Math.max(r-1,0),u=e.endSpineItemIndex===Math.max(r-1,0),l=e.beginSpineItemIndex===0,d=e.beginPageIndexInSpineItem===0,p=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:s==="vertical"?!1:!d,canTurnRight:s==="vertical"?!1:!p,canGoTopSpineItem:s==="vertical"&&!a,canGoBottomSpineItem:s==="vertical"&&!c,canGoLeftSpineItem:s!=="vertical"&&(i==="ltr"&&!a||i==="rtl"&&!u),canGoRightSpineItem:s!=="vertical"&&(i==="ltr"&&!c||i==="rtl"&&!l)}}),o.distinctUntilChanged($.isShallowEqual)),ii=({reader:n,duration:e})=>t=>{let i;const s=()=>{i?.(),i=void 0};return t.pipe(o.tap(()=>{i||(i=n?.navigation.lock())}),o.throttleTime(e,o.animationFrameScheduler,{trailing:!0,leading:!0}),o.tap(s),o.finalize(s))},oi=n=>e=>{const t=n(e),i=ni(t),s=new Qn(t),r=new jn(t),a=new ti(t.navigation.scrollNavigationController,t.navigation.locker),c=qn(t,s),u=a.navigation$.pipe(o.tap(p=>{t.navigation.navigate(p)}));return o.merge(c,u).pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,load:p=>{const{cfi:h,...m}=p;t.load(m),h&&s.goToCfi(h,{animate:!1})},destroy:()=>{a.destroy(),t.destroy()},navigation:{...t.navigation,state$:i,throttleLock:({duration:p,trigger:h})=>h.pipe(ii({duration:p,reader:t})),panNavigator:r,turnBottom:s.turnBottom.bind(s),turnTop:s.turnTop.bind(s),turnLeftOrTop:s.turnLeftOrTop.bind(s),turnRightOrBottom:s.turnRightOrBottom.bind(s),turnLeft:s.turnLeft.bind(s),turnRight:s.turnRight.bind(s),goToCfi:s.goToCfi.bind(s),goToUrl:s.goToUrl.bind(s),goToSpineItem:s.goToSpineItem.bind(s),goToNextSpineItem:s.goToNextSpineItem.bind(s),goToPreviousSpineItem:s.goToPreviousSpineItem.bind(s),goToLeftOrTopSpineItem:s.goToLeftOrTopSpineItem.bind(s),goToRightOrBottomSpineItem:s.goToRightOrBottomSpineItem.bind(s),goToTopSpineItem:s.goToTopSpineItem.bind(s),goToBottomSpineItem:s.goToBottomSpineItem.bind(s),goToLeftSpineItem:s.goToLeftSpineItem.bind(s),goToRightSpineItem:s.goToRightSpineItem.bind(s),goToPageOfSpineItem:s.goToPageOfSpineItem.bind(s),goToAbsolutePageIndex:s.goToAbsolutePageIndex.bind(s)}}},it=(n,e,t)=>{const i=t.spineItems.findIndex(s=>s.href===n);return e.reduce((s,r)=>{const a=r.href.indexOf("#"),c=a>0?r.href.substr(0,a):r.href,u=c.substring(0,c.lastIndexOf("/")),l=n.substring(0,n.lastIndexOf("/")),d=n.endsWith(c),p=l!==""&&l.endsWith(u);if(d||p){const m=t.spineItems.findIndex(S=>S.href===r.href);if(i<m)return s;const f={title:r.title,path:r.path},y=it(n,r.contents,t);return y?{...f,subChapter:y}:f}return s},void 0)},si=(n,e)=>{const{href:t}=e;return it(t,n.nav?.toc??[],n)},ri=n=>{const e=n.context.manifest,t=n.spineItemsManager.items;return e?t.reduce((i,{item:s})=>(i[s.id]=si(e,s),i),{}):{}},ai=n=>n.spineItemsManager.items$.pipe(o.startWith([]),o.map(()=>ri(n))),ci=(n,e,t)=>n+e*t,ui=(n,e,t)=>{const{height:i,width:s}=t.layout.layoutInfo,{top:r,left:a}=n.spine.getSpineItemSpineLayoutInfo(t);return n.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-r+n.viewport.absoluteViewport.height)/i)):Math.max(0,Math.min(1,(e.x-a+n.viewport.absoluteViewport.width)/s))},li=(n,e,t,i,s)=>s.isReady$.pipe(o.first(),o.withLatestFrom(n.layoutInfo$),o.map(([r,a])=>{const c=n.context,u=c.manifest?.renditionLayout==="pre-paginated",l=c.manifest?.spineItems.length||0,d=c.manifest?.spineItems.slice(0,e).reduce((S,w)=>S+(w.progressionWeight??0),0)||0,p=n.spineItemsManager.getSpineItemIndex(s)??0,h=n.context.manifest?.spineItems.length??0,m=a.pages.filter(S=>S.itemIndex===p).length??0,g=c.manifest?.spineItems[e]?.progressionWeight??(p+1)/h;let f=(t+1)*(g/m);!u&&s.renditionLayout==="reflowable"&&!r&&(f=0);let y=d+f;return c.manifest?.renditionFlow==="scrolled-continuous"&&(r?f=ui(n,i,s):f=0,y=ci(d,g,f)),e===l-1&&t===m-1&&y>.99?1:y})),di=n=>n.spine.layout$.pipe(o.debounceTime(10,o.animationFrameScheduler),o.withLatestFrom(n.pagination.state$),o.map(()=>({numberOfPagesPerItems:n.spineItemsManager.items.reduce((t,i)=>[...t,i.numberOfPages],[]),numberOfTotalPages:n.spine.pages.value.pages.length})),o.distinctUntilChanged($.isShallowEqual),o.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),pi=(n,e,t,i)=>{const s=e.beginSpineItemIndex!==void 0?n.spineItemsManager.get(e.beginSpineItemIndex):void 0,r=e.endSpineItemIndex!==void 0?n.spineItemsManager.get(e.endSpineItemIndex):void 0;return o.of({...e,beginChapterInfo:s?t[s.item.id]:void 0,beginSpineItemReadingDirection:s?.readingDirection,endChapterInfo:r?t[r.item.id]:void 0,endSpineItemReadingDirection:r?.readingDirection,percentageEstimateOfBook:i,isUsingSpread:n.settings.values.computedSpreadMode??!1})},gi=n=>o.combineLatest([n.pagination.state$,n.layout$]).pipe(o.switchMap(([e])=>{const t=e.endSpineItemIndex!==void 0?n.spineItemsManager.get(e.endSpineItemIndex):void 0;return t?li(n,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,n.navigation.getNavigation().position,t):o.of(0)})),hi=n=>{const e=ai(n),t=di(n),i=new o.BehaviorSubject({...n.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),s=o.combineLatest([n.pagination.state$,e,gi(n)]).pipe(o.switchMap(([a,c,u])=>pi(n,a,c,u).pipe(o.map(l=>({...a,...l})))),o.distinctUntilChanged($.isShallowEqual));return{paginationInfo$:o.combineLatest([s,t]).pipe(o.map(([a,c])=>({...a,...c,beginAbsolutePageIndex:c.numberOfPagesPerItems.slice(0,a.beginSpineItemIndex).reduce((u,l)=>u+l,a.beginPageIndexInSpineItem??0),endAbsolutePageIndex:c.numberOfPagesPerItems.slice(0,a.endSpineItemIndex).reduce((u,l)=>u+l,a.endPageIndexInSpineItem??0)})),o.tap(a=>{i.next(a)}),o.shareReplay(1)),getPaginationInfo:()=>i.value}},H=n=>W.generate({spineIndex:n.index,spineId:n.id}),ot=({nodeOrRange:n,offset:e,item:t})=>{const i="ownerDocument"in n?n.ownerDocument:n.startContainer.ownerDocument;return!i||!i?.documentElement||n===i?H(t):jt(n)?W.generate({start:{node:n.startContainer,offset:n.startOffset,spineIndex:t.index,spineId:t.id},end:{node:n.endContainer,offset:n.endOffset,spineIndex:t.index,spineId:t.id}}):W.generate({node:n,offset:e,spineIndex:t.index,spineId:t.id})},ie=({pageIndex:n,spineItem:e,spine:t})=>{const s=t.pages.value.pages.find(a=>a.itemIndex===e.index&&a.pageIndex===n)?.firstVisibleNode,r=e.renderer.getDocumentFrame();return s&&r instanceof HTMLIFrameElement&&r.contentWindow?.document?ot({nodeOrRange:s.node,offset:s.offset,item:e.item}).trim():H(e.item)},st=(n,e)=>ot({nodeOrRange:n,item:e}),mi=n=>n.index.toString(),rt=n=>n[0]?.index===6&&n.length>1,oe=n=>{const e=W.parse(n);return W.isIndirectionOnly(e)},fi=n=>Array.isArray(n)?n[0]&&rt(n[0])?n[0]:void 0:n.parent[0]&&rt(n.parent[0])?n.parent[0]:void 0,se=n=>{const e=W.parse(n),r=((fi(e)??[])[1]?.index??2)/2-1,a=W.isParsedCfiRange(e),c=a?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:a,cleanedCfi:n,itemIndex:r,offset:c??0}},we=({cfi:n,spineItemsManager:e})=>{const{itemIndex:t,...i}=se(n),s=e.get(t);if(!s)return{...i,itemIndex:t,node:null};const r=s.renderer.getDocumentFrame();if(r instanceof HTMLIFrameElement){const a=r.contentWindow?.document;if(a)try{const c=W.resolve(n,a,{throwOnError:!0});return{...i,itemIndex:t,node:c.isRange?c.node?.startContainer??null:c.node??null,isCfiRange:c.isRange,range:c.isRange?c.node:void 0,offset:Array.isArray(c.offset)?c.offset.at(-1):c.offset,spineItem:s}}catch(c){return L.warn(`Error resolving cfi: ${n}.`),L.warn(c),{...i,spineItem:s,itemIndex:t,node:null}}}return{...i,itemIndex:t,spineItem:s,node:null}},Si=(n,e)=>{if("cfi"in e){const{itemIndex:r,...a}=n.cfi.parseCfi(e.cfi);return{...e,...a,itemIndex:r,node:null}}const t=n.spineItemsManager.get(e);if(!t)throw new Error("Spine item not found");const i=H(t.item);return{...n.cfi.parseCfi(i),cfi:H(t.item),itemIndex:t.index,node:null}},at=(n,e)=>{let t=n?.itemPageIndex;const{itemIndex:i,...s}=e.cfi.parseCfi(n.cfi),r=e.spineItemsManager.get(i);return r?fe().pipe(o.withLatestFrom(r.isReady$),o.map(([,a])=>{const{node:c=null,offset:u,range:l}=a?e.cfi.resolveCfi({cfi:n.cfi}):{};r.renditionLayout!=="pre-paginated"&&c&&(t=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,u??0,r)??t);let p=n?.absolutePageIndex;return t===void 0&&(t=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:t,spineItemOrId:r})??n?.absolutePageIndex,{...n,...s,range:l,itemIndex:i,node:c,startOffset:u,absolutePageIndex:p,itemPageIndex:t}})):o.of({...n,itemIndex:i,...s})};class ct{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const i=this.locatorsByKey.get(t);i&&(i.observerCount--,i.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,i)=>{const s={resource:t,meta:Si(this.reader,t)};return Se(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),a=r?.renditionLayout==="reflowable",c=i.mode==="shallow"||!a||!r?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([r.index]),u="cfi"in t?t.cfi:void 0,l=u?this.locatorsByKey.get(u):void 0,d=h=>h.pipe(o.finalize(()=>{u&&this.deregisterMemoizedStream(u),setTimeout(()=>{c()},1e3)}));if(u&&l)return l.observerCount++,d(l.consolidate$.pipe(o.map(({resource:h,meta:m})=>({resource:h,meta:m}))));const p=this.reader.spine.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(h=>at(h.meta,this.reader).pipe(o.map(m=>({...h,meta:m}))),s),o.shareReplay({refCount:!0,bufferSize:1}));return u&&this.locatorsByKey.set(u,{observerCount:1,consolidate$:p}),d(p)})}}locateResource(e,t){return Array.isArray(e)?Se(()=>o.combineLatest(e.map(i=>this.locate(i,t??{}))).pipe(o.defaultIfEmpty([]))):this.locate(e,t??{})}}const ut=n=>e=>{const t=n(e),{paginationInfo$:i,getPaginationInfo:s}=hi(t);i.pipe(o.takeUntil(t.$.destroy$)).subscribe();const r=new ct(t);return{...t,locateResource:r.locateResource.bind(r),pagination:{...t.pagination,get state(){return s()},get state$(){return i}}}},yi=n=>({put:(r,a)=>new Promise((c,u)=>{const l=n.transaction(["store"],"readwrite");l.onerror=h=>{u(h)},l.oncomplete=()=>{c()};const p=l.objectStore("store").put(a,r);p.onsuccess=()=>{c()},p.onerror=h=>{u(h)}}),keys:()=>new Promise((r,a)=>{const c=n.transaction(["store"],"readonly");c.onerror=p=>{a(p)};const l=c.objectStore("store").openKeyCursor(),d=[];l.onsuccess=()=>{const p=l.result;if(!p){r(d);return}d.push(p.key),p.continue()},l.onerror=()=>{a(l.error)}}),get:r=>new Promise((a,c)=>{const u=n.transaction(["store"],"readwrite"),d=u.objectStore("store").get(r);d.onsuccess=()=>{let p=d.result;p===void 0&&(p=null),a(p)},u.onerror=()=>{c(d.error)}}),remove:r=>new Promise((a,c)=>{const u=n.transaction(["store"],"readwrite"),d=u.objectStore("store").delete(r);u.onerror=()=>{c(d.error)},u.oncomplete=()=>{a()},u.onabort=()=>{const p=d.error?d.error:d.transaction?.error;c(p)}})}),ve=async n=>new Promise((e,t)=>{const i=window.indexedDB.open(n);i.onerror=s=>{t(s)},i.onsuccess=()=>{e(yi(i.result))},i.onupgradeneeded=()=>{i.result.createObjectStore("store")}}),bi=n=>{let e=Date.now().toString();const t=new o.Subject,i=u=>{if(typeof u=="string"||typeof u=="object"){const l=typeof u=="object"?u.id:u;return n.manifest?.spineItems.find(d=>d.id===l)}return n.manifest?.spineItems[u]},s=async(u,l)=>{const d=i(u);if(!d)return new Response("Item not found",{status:404});const h=await(await ve("prose-reader")).get(`${e}_${d.id}`);if(h)return new Response(h,{status:200});const m=l&&await l(d)||await fetch(d.href);return r(d,m.clone()),m},r=(u,l)=>{t.next({id:u,data:l})};t.asObservable().pipe(I.mergeMap(({id:u,data:l})=>{const d=i(u);return d?o.from(o.forkJoin([ve("prose-reader"),o.from(l.blob())])).pipe(I.switchMap(([p,h])=>o.from(p.put(`${e}_${d.id}`,h))),I.catchError(p=>(L.error(p),o.EMPTY))):o.EMPTY}),I.takeUntil(n.destroy$)).subscribe();const a=n.manifest$.pipe(I.tap(()=>{e=Date.now().toString()}));return o.merge(a).pipe(I.switchMap(()=>(L.debug("Cleanup up old cache..."),o.from(ve("prose-reader")).pipe(I.switchMap(u=>o.from(u.keys()).pipe(I.map(l=>l.filter(d=>!d.toString().startsWith(e))),I.switchMap(l=>{const d=l.map(p=>u.remove(p));return o.from(Promise.all(d))}))),I.catchError(u=>(L.error(u),o.EMPTY))))),I.takeUntil(n.destroy$)).subscribe(),{get:s,destroy:()=>{t.complete()}}},Ii=n=>e=>{const t=n(e),i=bi(t.context);return{...t,destroy:()=>{i.destroy(),t.destroy()}}},wi=(n,e)=>{const t=n.node.ownerDocument?.createRange(),i=n.node.compareDocumentPosition(e.node);if(t){try{if(i&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(n.node,n.offset||0);else if(i&Node.DOCUMENT_POSITION_FOLLOWING)t.setStart(n.node,n.offset||0),t.setEnd(e.node,e.offset||0);else{const s=Math.min(n.offset||0,e.offset||0),r=Math.max(n.offset||0,e.offset||0);t.setStart(n.node,s),t.setEnd(n.node,r)}}catch(s){L.warn("Failed to create range from selection",s,{anchor:n,focus:e})}return t}},vi=({selection:n,spineItem:e})=>{const{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n;if(!(!t||!s))try{return wi({node:t,offset:i},{node:s,offset:r})}catch(a){L.warn("Failed to create range from selection",a,{selection:n,spineItem:e});return}};class Pi extends R{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=o.NEVER,this.selectionOver$=o.NEVER;else{const i=ye(t.body,{childList:!0,subtree:!0}).pipe(o.filter(r=>!!r.find(a=>a.type==="childList"&&a.removedNodes.length))),s=e.parentElement?ye(e.parentElement,{childList:!0}).pipe(o.filter(r=>!!r.find(a=>Array.from(a.removedNodes).includes(e)))):o.of(null);this.selectionChange$=o.merge(o.fromEvent(t,"selectionchange"),i).pipe(o.map(()=>t.getSelection()),o.takeUntil(o.merge(s,this.destroy$)),o.endWith(null)),this.selectionOver$=o.fromEvent(t,"pointerdown").pipe(o.switchMap(()=>o.merge(o.fromEvent(t,"pointerup"),o.fromEvent(t,"pointercancel"),o.fromEvent(t,"contextmenu")).pipe(o.first(),o.delay(0),o.map(r=>{const a=t.getSelection();return a&&!a.isCollapsed?[r,a]:void 0}),o.filter(O))),o.takeUntil(o.merge(s,this.destroy$)))}}}const $i=n=>n.watch("isLoaded").pipe(o.switchMap(()=>{const e=n.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return o.NEVER;const i=new Pi(e);return o.merge(i.selectionChange$.pipe(o.map(s=>{if(s?.toString())return{type:"change",selection:s}})),i.selectionOver$.pipe(o.map(([s,r])=>({type:"over",event:s,selection:r})))).pipe(o.takeUntil(n.unloaded$),o.endWith(void 0),o.finalize(()=>{i.destroy()}))}),o.distinctUntilChanged()),Ti=n=>e=>{const t=n(e);let i;const s=t.spineItemsManager.items$.pipe(o.switchMap(d=>{const p=d.map(h=>{const m=t.spineItemsManager.getSpineItemIndex(h)??0;return $i(h).pipe(o.map(g=>{if(g)return{...g,itemIndex:m}}))});return o.merge(...p)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{i=d}),o.shareReplay({refCount:!0,bufferSize:1})),r=s,a=s.pipe(o.map(d=>!!d),o.distinctUntilChanged(),o.filter(d=>d),o.share()),c=a.pipe(o.switchMap(()=>r),o.distinctUntilChanged(),o.filter(d=>!d),o.share()),u=s.pipe(o.filter(d=>d?.type==="over"),o.share()),l=t.context.watch("rootElement").pipe(o.filter(O),o.switchMap(d=>o.fromEvent(d,"pointerdown")),o.withLatestFrom(r),o.map(([,d])=>d),o.startWith(void 0),o.shareReplay({refCount:!0,bufferSize:1}));return o.merge(r,l).pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:r,selectionStart$:a,selectionEnd$:c,selectionOver$:u,lastSelectionOnPointerdown$:l,getSelection:()=>i,createOrderedRangeFromSelection:vi}}},lt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],Mi=n=>e=>{const t=n(e),i=new o.BehaviorSubject(e.theme??"bright"),s=()=>{const c=lt.find(u=>u.name===i.value);return`
248
248
  body {
249
249
  ${c!==void 0?`background-color: ${c.backgroundColor} !important;`:""}
250
250
  }
@@ -254,19 +254,19 @@
254
254
  color: ${c.foregroundColor};
255
255
  }
256
256
  `:""}
257
- `},r=({container:c})=>{const u=lt.find(l=>l.name===i.value);return u&&c.style.setProperty("background-color",u.backgroundColor),()=>{}},a=()=>{t.spineItemsManager.items.forEach(c=>{const u=c.renderer.getDocumentFrame();u&&N(u,"prose-reader-theme",s()),r({container:c.element})})};return t.hookManager.register("item.onDocumentLoad",({itemId:c})=>{const u=t.spineItemsManager.get(c);if(u?.renditionLayout!=="pre-paginated"){const l=u?.renderer.getDocumentFrame();l&&N(l,"prose-reader-theme",s())}}),t.spineItemsManager.items$.pipe(I.tap(c=>c.map(({element:u})=>r({container:u}))),I.takeUntil(t.$.destroy$)).subscribe(),i.pipe(I.tap(()=>{a()}),I.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:c=>{c!==i.value&&i.next(c)},get:()=>i.value,$:{theme$:i.asObservable()}}}},Mi=n=>e=>({...n(e),utils:{isOrIsWithinValidLink:s=>!!(le(s)&&(s.nodeName==="a"?s:s.closest("a"))?.getAttribute("href"))}});navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const Fi=n=>e=>n(e),Li="[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true]{overflow:scroll}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true][data-prose-reader-zooming-direction=down]{overflow-x:auto}";class U extends o.Observable{constructor(e){super(t=>this.stateSubject.pipe(o.takeUntil(this._destroy$)).subscribe(t)),this._destroy$=new o.Subject,this.destroy$=this._destroy$.asObservable(),this.stateSubject=new o.BehaviorSubject(e)}next(e){this.stateSubject.next(e)}mergeCompare(e){const t={...this.value,...e};$.isShallowEqual(this.value,t)||this.stateSubject.next(t)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(G(e)):this.stateSubject.pipe(o.map(t=>t[e]),o.distinctUntilChanged($.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this._destroy$.complete()}}const Ei=(n,e,t)=>{t.style.transformOrigin="0 0";const i=`translate3d(${e.x}px, ${e.y}px, 0px)`,s=`scale(${n})`;t.style.transform=`${i} ${s}`},Ci=(n,e,t,i)=>{const s=e/n,r=t.clientWidth,a=t.clientHeight,c=r/2-i.x,u=a/2-i.y;return{x:i.x+c*(1-s),y:i.y+u*(1-s)}};class dt{constructor(e){this.x=e.x,this.y=e.y}}class Pe extends dt{}class pt extends dt{constructor(){super(...arguments),this.__symbol=Symbol("UnboundScrollPosition")}}class gt extends U{constructor(e,t,i,s,r){super({element:void 0}),this.viewport=e,this.settings=t,this.hookManager=i,this.spine=s,this.context=r,this.navigateSubject=new o.Subject,this.scrollingSubject=new o.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:p})=>{const h=this.value.element;this.scrollingSubject.next(!0);const m=this.fromSpinePosition(p);h?.scrollTo({left:m.x,top:m.y,behavior:"instant"}),o.timer(1).pipe(o.tap(()=>{this.scrollingSubject.next(!1)}),o.takeUntil(o.merge(this.scrollingSubject.pipe(o.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const a=this.context.pipe(G(["rootElement"]),o.tap(({rootElement:p})=>{if(!p)return;const h=document.createElement("div");h.setAttribute(`data-${Xe}`,""),h.appendChild(this.viewport.value.element),p.appendChild(h),this.update({element:h})})),c=o.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:p},h])=>{h&&(p==="scrollable"?h.style.display="block":h.style.display="contents")})),u=this.navigateSubject.pipe(o.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(o.startWith(!1),o.switchMap(()=>o.merge(o.of(!0),o.of(!1))),o.shareReplay(1));const l=o.merge(s.element$.pipe(o.filter(O),o.switchMap(p=>Z(p))),s.element$.pipe(o.filter(O),o.switchMap(p=>o.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(o.switchMap(()=>o.timer(10).pipe(o.map(()=>!1),o.startWith(!0))),o.distinctUntilChanged(),o.startWith(!1)),d=o.combineLatest([l,this.isScrolling$]).pipe(o.map(([p,h])=>p||h),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(O),o.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:h})=>h==="controlled"?o.NEVER:o.fromEvent(p,"scroll").pipe(o.withLatestFrom(d),o.filter(([,m])=>!m),o.map(([m])=>m))))),o.share()),o.merge(a,c,u).pipe(o.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){const t=this.viewport.scaleFactor;return new V({x:e.x/t,y:e.y/t})}fromSpinePosition(e){const t=this.viewport.scaleFactor;return new Pe({x:e.x*t,y:e.y*t})}get scrollPosition(){const e=this.value.element;return new Pe({x:e?.scrollLeft??0,y:e?.scrollTop??0})}}const Ri=(n,e,t,i,s)=>{const r=n.clientWidth,a=n.clientHeight,c=n.scrollLeft,u=n.scrollTop,l=c+r/2-i,d=u+a/2-s,p=t/e,h=l*p,m=d*p,g=h-r/2+i,f=m-a/2+s;return new pt({x:g,y:f})},Ai=(n,e)=>{const t=e.viewport,i=e.navigation.scrollNavigationController,s=t.value.element,r=i.value.element,a=i.value.element,c=Math.round(t.scaleFactor*100)/100,u=s.offsetLeft,l=s.offsetTop,d=Ri(r??Jt(),c,n,u,l),p=n<1?"down":"up";return a?.setAttribute(`data-${C}-zooming-direction`,p),n<1?s.style.transformOrigin="top":n>1&&(s.style.transformOrigin=`${u}px ${l}px`),s.style.transform=`scale(${n})`,i.fromScrollPosition(d)},oe=200;class Di extends U{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new o.Subject,this.exitSubject=new o.Subject;const t=this.enterSubject.pipe(o.switchMap(s=>{const{scale:r=1,animate:a=!1}=s??{},c=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${C}-zooming`,"true"),this.scrollNavigationController.value.element?.setAttribute(`data-${C}-zooming`,this.isControlled?"false":"true"),a&&this.isControlled&&(c.style.transition=`transform ${oe}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(r),r!==1&&this.isControlled?o.timer(s?.animate?oe:0).pipe(o.tap(()=>{this.reader.layout()})):o.EMPTY})),i=this.exitSubject.pipe(o.switchMap(s=>{const r=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${C}-zooming`,"false"),this.scrollNavigationController.value.element?.removeAttribute(`data-${C}-zooming-direction`),this.scrollNavigationController.value.element?.setAttribute(`data-${C}-zooming`,"false"),s?.animate&&this.isControlled&&(r.style.transition=`transform ${oe}ms`),this.updateZoom(1,{x:0,y:0}),r.style.transform="",o.timer(s?.animate?oe:0).pipe(o.tap(()=>{const a=this.reader.viewport.value.element;a.style.transformOrigin="",a.style.transition="",this.isControlled&&this.reader.layout(),this.mergeCompare({isZooming:!1})}),o.takeUntil(this.enterSubject))}));o.merge(t,i).pipe(o.takeUntil(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e){this.isControlled&&(this.viewport.element.style.transition="",this.updateZoom(this.value.currentScale,e))}scaleAt(e){this.viewport.element.style.transition="";const i=Math.ceil(e*100)/100;this.updateZoom(i)}updateZoom(e,t){if(this.isControlled){const i=t||Ci(this.value.currentScale,e,this.viewport.element,this.value.currentPosition);return this.applyZoom(e,i),this.mergeCompare({currentScale:e,currentPosition:i})}this.applyZoom(e,t??this.value.currentPosition),this.mergeCompare({currentScale:e})}applyZoom(e,t){if(this.isControlled)Ei(e,t,this.viewport.element);else{const i=Ai(e,this.reader);this.reader.navigation.navigate({position:i})}}get isControlled(){return this.reader.settings.values.computedPageTurnMode==="controlled"}get scrollNavigationController(){return this.reader.navigation.scrollNavigationController}get viewport(){return this.reader.viewport.value}}const ht=`${be}-enhancer-zoom`,Oi=n=>e=>{const t=n(e),i=new Di(t);de(document,ht,Li);const s=()=>{pe(document,ht),i.destroy(),t.destroy()},r=i;return{...t,destroy:s,zoom:{enter:i.enter.bind(i),scaleAt:i.scaleAt.bind(i),move:i.move.bind(i),exit:i.exit.bind(i),state$:r,get state(){return i.value}}}},mt=n=>n?.renditionLayout==="pre-paginated"||n?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class Ni{constructor(){this.navigationSubject=new o.ReplaySubject(1),this.viewportStateSubject=new o.BehaviorSubject("free"),this.paginationSubject=new o.ReplaySubject,this.navigationIsLockedSubject=new o.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(o.distinctUntilChanged(),o.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(o.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(o.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}class ft extends U{constructor(){super({assumedRenditionLayout:"reflowable"}),this.bridgeEvent=new Ni,this.manifest$=this.pipe(I.map(e=>e.manifest),I.filter(O),I.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,i=e.manifest??t.manifest,s={...t,...e,...e.manifest&&{isFullyPrePaginated:mt(i),assumedRenditionLayout:i?.renditionLayout??"reflowable"}};this.mergeCompare(s)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}}class St extends U{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),o.combineLatest([e.watch(["manifest","hasVerticalWriting"]),t.watch(["computedPageTurnMode"])]).pipe(o.map(([{manifest:i,hasVerticalWriting:s},{computedPageTurnMode:r}])=>({hasVerticalWriting:s,renditionFlow:i?.renditionFlow,renditionLayout:i?.renditionLayout,computedPageTurnMode:r})),o.distinctUntilChanged($.isShallowEqual),o.map(({hasVerticalWriting:i,renditionFlow:s,renditionLayout:r,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||a==="scrollable"?["none"]:i?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class yt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(t=>t!==e),this.destroy(e.name,void 0,e)}register(e,t){const i={name:e,runFn:t};return this._hooks.push(i),()=>{this.deregister(i)}}execute(e,t,i){return this._hooks.filter(a=>e===a.name).map(a=>{let c=()=>o.of(void 0);const u=new o.Subject,l=h=>{c=h},d=()=>(u.next(),u.complete(),c()??o.of(void 0)),p=a.runFn({...i,destroy$:u.asObservable(),destroy:l});return this._hookExecutions.push({name:e,id:t,destroyFn:d,ref:a}),p})}destroy(e,t,i){const s=this._hookExecutions.filter(a=>i&&a.ref===i||e===a.name&&(!t||t&&t===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!s.includes(a));const r=s.map(({destroyFn:a})=>a());return o.combineLatest(r)}}const Vi="[data-prose-reader-scroll-navigator]{height:100%;width:100%;position:relative;overflow-y:scroll;overflow-x:hidden}[data-prose-reader-viewport]{background-color:#fff;position:relative;height:100%;width:100%}",Ui=n=>({x:-n.x,y:-n.y}),ki=n=>n instanceof DOMMatrix?new M({x:-n.e,y:-n.f}):new M({x:-n.x,y:-n.y}),bt=L.namespace("navigation/ViewportNavigator");class It extends R{constructor(e,t,i,s,r){super(),this.settings=e,this.hookManager=t,this.context=i,this.spine=s,this.viewport=r,this.navigateSubject=new o.Subject,this.element$=new o.BehaviorSubject(document.createElement("div"));const a=this.spine.element$.pipe(o.filter(O),o.withLatestFrom(this.element$),o.tap(([d,p])=>{p.style.cssText=`
257
+ `},r=({container:c})=>{const u=lt.find(l=>l.name===i.value);return u&&c.style.setProperty("background-color",u.backgroundColor),()=>{}},a=()=>{t.spineItemsManager.items.forEach(c=>{const u=c.renderer.getDocumentFrame();u&&N(u,"prose-reader-theme",s()),r({container:c.element})})};return t.hookManager.register("item.onDocumentLoad",({itemId:c})=>{const u=t.spineItemsManager.get(c);if(u?.renditionLayout!=="pre-paginated"){const l=u?.renderer.getDocumentFrame();l&&N(l,"prose-reader-theme",s())}}),t.spineItemsManager.items$.pipe(I.tap(c=>c.map(({element:u})=>r({container:u}))),I.takeUntil(t.$.destroy$)).subscribe(),i.pipe(I.tap(()=>{a()}),I.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:c=>{c!==i.value&&i.next(c)},get:()=>i.value,$:{theme$:i.asObservable()}}}},Fi=n=>e=>{const t=n(e);return{...t,utils:{isOrIsWithinValidLink:r=>!!(pe(r)&&(r.nodeName==="a"?r:r.closest("a"))?.getAttribute("href")),injectScopedCSS:(r,a,c)=>{const u=c.replace("${id}",t.id);return q(r,`${a}-${t.id}`,u)}}}};navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const Li=n=>e=>n(e),Ci="[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true]{overflow:scroll}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true][data-prose-reader-zooming-direction=down]{overflow-x:auto}",dt=(n,e,t)=>{const{clientWidth:i,clientHeight:s}=t.value.element,r={maxX:0,minX:i*(1-e),maxY:0,minY:s*(1-e)};return{x:Math.min(Math.max(n.x,r.minX),r.maxX),y:Math.min(Math.max(n.y,r.minY),r.maxY)}},Ei=(n,e,t)=>{t.style.transformOrigin="0 0";const i=`translate3d(${e.x}px, ${e.y}px, 0px)`,s=`scale(${n})`;t.style.transform=`${i} ${s}`},Ri=(n,e,t,i)=>{const s=e/n,r=t.clientWidth,a=t.clientHeight,c=r/2-i.x,u=a/2-i.y;return{x:i.x+c*(1-s),y:i.y+u*(1-s)}};class pt{constructor(e){this.x=e.x,this.y=e.y}}class Pe extends pt{}class gt extends pt{constructor(){super(...arguments),this.__symbol=Symbol("UnboundScrollPosition")}}class ht extends V{constructor(e,t,i,s,r){super({element:void 0}),this.viewport=e,this.settings=t,this.hookManager=i,this.spine=s,this.context=r,this.navigateSubject=new o.Subject,this.scrollingSubject=new o.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:p})=>{const h=this.value.element;this.scrollingSubject.next(!0);const m=this.fromSpinePosition(p);h?.scrollTo({left:m.x,top:m.y,behavior:"instant"}),o.timer(1).pipe(o.tap(()=>{this.scrollingSubject.next(!1)}),o.takeUntil(o.merge(this.scrollingSubject.pipe(o.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const a=this.context.pipe(J(["rootElement"]),o.tap(({rootElement:p})=>{if(!p)return;const h=document.createElement("div");h.setAttribute(`data-${Xe}`,""),h.appendChild(this.viewport.value.element),p.appendChild(h),this.update({element:h})})),c=o.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:p},h])=>{h&&(p==="scrollable"?h.style.display="block":h.style.display="contents")})),u=this.navigateSubject.pipe(o.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(o.startWith(!1),o.switchMap(()=>o.merge(o.of(!0),o.of(!1))),o.shareReplay(1));const l=o.merge(s.element$.pipe(o.filter(O),o.switchMap(p=>K(p))),s.element$.pipe(o.filter(O),o.switchMap(p=>o.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(o.switchMap(()=>o.timer(10).pipe(o.map(()=>!1),o.startWith(!0))),o.distinctUntilChanged(),o.startWith(!1)),d=o.combineLatest([l,this.isScrolling$]).pipe(o.map(([p,h])=>p||h),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(O),o.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:h})=>h==="controlled"?o.NEVER:o.fromEvent(p,"scroll").pipe(o.withLatestFrom(d),o.filter(([,m])=>!m),o.map(([m])=>m))))),o.share()),o.merge(a,c,u).pipe(o.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){const t=this.viewport.scaleFactor;return new U({x:e.x/t,y:e.y/t})}fromSpinePosition(e){const t=this.viewport.scaleFactor;return new Pe({x:e.x*t,y:e.y*t})}get scrollPosition(){const e=this.value.element;return new Pe({x:e?.scrollLeft??0,y:e?.scrollTop??0})}}const Ai=(n,e,t,i,s)=>{const r=n.clientWidth,a=n.clientHeight,c=n.scrollLeft,u=n.scrollTop,l=c+r/2-i,d=u+a/2-s,p=t/e,h=l*p,m=d*p,g=h-r/2+i,f=m-a/2+s;return new gt({x:g,y:f})},Di=(n,e)=>{const t=e.viewport,i=e.navigation.scrollNavigationController,s=t.value.element,r=i.value.element,a=i.value.element,c=Math.round(t.scaleFactor*100)/100,u=s.offsetLeft,l=s.offsetTop,d=Ai(r??Kt(),c,n,u,l),p=n<1?"down":"up";a?.setAttribute(`data-${E}-zooming-direction`,p),n<1?s.style.transformOrigin="top":n>1&&(s.style.transformOrigin=`${u}px ${l}px`),s.style.transform=`scale(${n})`;const h=i.fromScrollPosition(d);e.navigation.navigate({position:h})},re=200;class Oi extends V{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new o.Subject,this.exitSubject=new o.Subject;const t=this.enterSubject.pipe(o.switchMap(s=>{const{scale:r=1,animate:a=!1}=s??{},c=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${E}-zooming`,"true"),this.scrollNavigationController.value.element?.setAttribute(`data-${E}-zooming`,this.isControlled?"false":"true"),a&&this.isControlled&&(c.style.transition=`transform ${re}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(r),r!==1&&this.isControlled?o.timer(s?.animate?re:0).pipe(o.tap(()=>{this.reader.layout()})):o.EMPTY})),i=this.exitSubject.pipe(o.switchMap(s=>{const r=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${E}-zooming`,"false"),this.scrollNavigationController.value.element?.removeAttribute(`data-${E}-zooming-direction`),this.scrollNavigationController.value.element?.setAttribute(`data-${E}-zooming`,"false"),s?.animate&&this.isControlled&&(r.style.transition=`transform ${re}ms`),this.updateZoom(1,{x:0,y:0}),r.style.transform="",this.mergeCompare({isZooming:!1}),o.timer(s?.animate?re:0).pipe(o.tap(()=>{const a=this.reader.viewport.value.element;a.style.transformOrigin="",a.style.transition="",this.isControlled&&this.reader.layout()}),o.takeUntil(this.enterSubject))}));o.merge(t,i).pipe(o.takeUntil(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,t){this.isControlled&&(this.viewport.element.style.transition="",this.updateZoom(this.value.currentScale,e,{constraints:t?.constrain==="within-viewport"?(...i)=>dt(...i,this.reader.viewport):void 0}))}scaleAt(e,t){this.viewport.element.style.transition="";const s=Math.ceil(e*100)/100;this.updateZoom(s,void 0,{constraints:t?.constrain==="within-viewport"?(...r)=>dt(...r,this.reader.viewport):void 0})}updateZoom(e,t,i){if(this.isControlled){const s=t||Ri(this.value.currentScale,e,this.viewport.element,this.value.currentPosition),r=i?.constraints?.(s,e)??s;return this.applyZoom(e,r),this.mergeCompare({currentScale:e,currentPosition:r})}this.applyZoom(e,t??this.value.currentPosition),this.mergeCompare({currentScale:e})}applyZoom(e,t){this.isControlled?Ei(e,t,this.viewport.element):Di(e,this.reader)}get isControlled(){return this.reader.settings.values.computedPageTurnMode==="controlled"}get scrollNavigationController(){return this.reader.navigation.scrollNavigationController}get viewport(){return this.reader.viewport.value}}const mt=`${be}-enhancer-zoom`,Ni=n=>e=>{const t=n(e),i=new Oi(t);q(document,mt,Ci);const s=()=>{G(document,mt),i.destroy(),t.destroy()},r=i;return{...t,destroy:s,zoom:{enter:i.enter.bind(i),scaleAt:i.scaleAt.bind(i),move:i.move.bind(i),exit:i.exit.bind(i),state$:r,get state(){return i.value}}}},ft=n=>n?.renditionLayout==="pre-paginated"||n?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class Vi{constructor(){this.navigationSubject=new o.ReplaySubject(1),this.viewportStateSubject=new o.BehaviorSubject("free"),this.paginationSubject=new o.ReplaySubject,this.navigationIsLockedSubject=new o.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(o.distinctUntilChanged(),o.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(o.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(o.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}class St extends V{constructor(){super({assumedRenditionLayout:"reflowable"}),this.bridgeEvent=new Vi,this.manifest$=this.pipe(I.map(e=>e.manifest),I.filter(O),I.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,i=e.manifest??t.manifest,s={...t,...e,...e.manifest&&{isFullyPrePaginated:ft(i),assumedRenditionLayout:i?.renditionLayout??"reflowable"}};this.mergeCompare(s)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}}class yt extends V{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),o.combineLatest([e.watch(["manifest","hasVerticalWriting"]),t.watch(["computedPageTurnMode"])]).pipe(o.map(([{manifest:i,hasVerticalWriting:s},{computedPageTurnMode:r}])=>({hasVerticalWriting:s,renditionFlow:i?.renditionFlow,renditionLayout:i?.renditionLayout,computedPageTurnMode:r})),o.distinctUntilChanged($.isShallowEqual),o.map(({hasVerticalWriting:i,renditionFlow:s,renditionLayout:r,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||a==="scrollable"?["none"]:i?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class bt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(t=>t!==e),this.destroy(e.name,void 0,e)}register(e,t){const i={name:e,runFn:t};return this._hooks.push(i),()=>{this.deregister(i)}}execute(e,t,i){return this._hooks.filter(a=>e===a.name).map(a=>{let c=()=>o.of(void 0);const u=new o.Subject,l=h=>{c=h},d=()=>(u.next(),u.complete(),c()??o.of(void 0)),p=a.runFn({...i,destroy$:u.asObservable(),destroy:l});return this._hookExecutions.push({name:e,id:t,destroyFn:d,ref:a}),p})}destroy(e,t,i){const s=this._hookExecutions.filter(a=>i&&a.ref===i||e===a.name&&(!t||t&&t===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!s.includes(a));const r=s.map(({destroyFn:a})=>a());return o.combineLatest(r)}}const Ui="[data-prose-reader-scroll-navigator]{height:100%;width:100%;position:relative;overflow-y:scroll;overflow-x:hidden}[data-prose-reader-viewport]{background-color:#fff;position:relative;height:100%;width:100%}",ki=n=>({x:-n.x,y:-n.y}),zi=n=>n instanceof DOMMatrix?new M({x:-n.e,y:-n.f}):new M({x:-n.x,y:-n.y}),It=L.namespace("navigation/ViewportNavigator");class wt extends R{constructor(e,t,i,s,r){super(),this.settings=e,this.hookManager=t,this.context=i,this.spine=s,this.viewport=r,this.navigateSubject=new o.Subject,this.element$=new o.BehaviorSubject(document.createElement("div"));const a=this.spine.element$.pipe(o.filter(O),o.withLatestFrom(this.element$),o.tap(([d,p])=>{p.style.cssText=`
258
258
  height: 100%;
259
259
  width: 100%;
260
260
  position: relative;
261
- `,p.className=`${C}-controlled-navigator`,p.innerHTML="",p.appendChild(d),this.viewport.value.element.appendChild(p),this.element$.next(p)})),c=e.watch(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),u=o.combineLatest([c,this.element$]).pipe(o.tap(([,d])=>{e.values.computedPageTurnMode==="scrollable"?d.style.display="contents":d.style.display="block"}));this.layout$=u.pipe(o.tap(()=>{bt.info("layout",e.values)}),o.share());const l=this.navigateSubject.pipe(o.tap(d=>{bt.info("Navigation requested",d)}));this.isNavigating$=l.pipe(o.map(({animation:d,position:p})=>({type:"manualAdjust",shouldAnimate:!(!d||d==="turn"&&e.values.computedPageTurnAnimation==="none"),animation:d,position:p})),o.switchMap(d=>{const p=this.element$.getValue();return p.style.setProperty("transition","none"),p.style.setProperty("opacity","1"),o.merge(o.of(!0),o.of(null).pipe(o.mergeMap(()=>{if(d?.type!=="manualAdjust")return o.of(!1);const h=d.animation==="snap"?e.values.snapAnimationDuration:e.values.computedPageTurnAnimationDuration,m=d.animation==="snap"?"slide":e.values.computedPageTurnAnimation;return o.of(d).pipe(d.shouldAnimate?o.delay(1,o.animationFrameScheduler):o.identity,o.tap(g=>{const f=this.element$.getValue();g.shouldAnimate?m==="fade"?(f.style.setProperty("transition",`opacity ${h/2}ms`),f.style.setProperty("opacity","0")):(d.animation==="snap"||m==="slide")&&(f.style.setProperty("transition",`transform ${h}ms`),f.style.setProperty("opacity","1")):(f.style.setProperty("transition","none"),f.style.setProperty("opacity","1"))}),o.tap(g=>{m!=="fade"&&this.setViewportPosition(g.position)}),d.shouldAnimate?o.delay(h/2,o.animationFrameScheduler):o.identity,o.tap(g=>{const f=this.element$.getValue();m==="fade"&&(this.setViewportPosition(g.position),f.style.setProperty("opacity","1"))}),d.shouldAnimate?o.delay(h/2,o.animationFrameScheduler):o.identity,o.tap(g=>{m==="fade"&&this.setViewportPosition(g.position)}))}),o.map(()=>!1)))}),o.startWith(!1),o.shareReplay(1)),o.merge(a,this.isNavigating$,this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}setViewportPosition(e){const t=this.element$.getValue(),i=Ui(e);t.style.transform=`translate(${i.x}px, ${i.y}px)`,this.hookManager.execute("onViewportOffsetAdjust",void 0,{})}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.element$.getValue(),t=window.getComputedStyle(e),i=t.transform||t.webkitTransform;if(!i||i==="none")return new M({x:0,y:0});const s=new DOMMatrix(i);return ki(s)}}const zi=()=>n=>n.pipe(o.map(({navigation:e,pagination:t,...i})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...i}))),Wi=(n,e,t)=>n.bridgeEvent.pagination$.pipe(o.withLatestFrom(e),o.filter(([i,s])=>i.navigationId===s.id),o.switchMap(([i,s])=>(t.spineItemsManager.get(s.spineItem)?.isReady$.pipe(o.first())??o.of(!1)).pipe(o.filter(a=>a),o.map(()=>({pagination:i,navigation:s})))),zi(),o.distinctUntilChanged((i,s)=>i.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:i})=>({...i,meta:{triggeredBy:"pagination"}}))),_i=({navigationResolver:n})=>e=>e.pipe(o.map(([t,i])=>{const s={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t,position:t.position?n.fromOutOfBoundsSpinePosition(t.position):void 0};return{previousNavigation:i,navigation:s}})),Hi=({navigationResolver:n})=>e=>e.pipe(o.map(t=>{if(t.navigation.cfi){const i=n.getNavigationForCfi(t.navigation.cfi);if(i)return{...t,navigation:{...t.navigation,position:i}}}return t})),Bi=({navigation:n,previousNavigation:e,settings:t})=>n.directionFromLastNavigation?n.directionFromLastNavigation:n.url!==void 0||n.cfi!==void 0?"anchor":e.spineItem===void 0||n.spineItem||!n.position?"forward":t.values.computedPageTurnDirection==="vertical"?n.position.y>e.position.y||n.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(n.position.x)>Math.abs(e.position.x)||n.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",xi=({context:n,settings:e})=>t=>t.pipe(o.map(({navigation:i,previousNavigation:s})=>{const r=Bi({navigation:i,previousNavigation:s,settings:e}),a={...i,directionFromLastNavigation:r};return{previousNavigation:s,navigation:a,direction:r}})),Yi=({spineItemsManager:n,navigationResolver:e,settings:t})=>i=>i.pipe(o.map(({navigation:s,...r})=>{const a=n.get(s.spineItem);if(s.position)return t.values.computedPageTurnMode==="scrollable"?{navigation:{...s,position:s.position},...r}:{navigation:{...s,position:e.fromUnboundSpinePosition(s.position)},...r};if(!a)return{navigation:{...s,position:r.previousNavigation.position},...r};const c=e.getNavigationForSpineIndexOrId(a),u=t.values.computedPageTurnMode==="scrollable"?new V({x:c.x+r.previousNavigation.position.x,y:c.y}):e.fromUnboundSpinePosition(c);return{navigation:{...s,position:u},...r}})),wt=({settings:n,spineItemsManager:e,navigationResolver:t,spineLocator:i})=>s=>{const r=a=>{const{position:c,spineItem:u,cfi:l,directionFromLastNavigation:d}=a,{navigationSnapThreshold:p,computedPageTurnMode:h}=n.values;if(u!==void 0){const m=e.get(u);if(m)return m}if(typeof u=="number")return u>e.items.length-1?e.get(e.items.length-1):e.get(0);if(l){const m=e.getSpineItemFromCfi(l);if(m)return m}if(c&&h==="controlled"){const{beginIndex:m,endIndex:g}=i.getVisibleSpineItemsFromPosition({position:c,threshold:p,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?g:m)??m,y=e.get(f);if(!y)return;const{endPageIndex:S,beginPageIndex:w}=i.getVisiblePagesFromViewportPosition({position:c,spineItem:y,threshold:p,restrictToScreen:!1})??{},v=(d==="forward"||d==="anchor"?S:w)??0,T=t.getNavigationForSpineItemPage({pageIndex:v,spineItemId:y}),P=i.getVisibleSpineItemsFromPosition({position:T,threshold:p,restrictToScreen:!1}),E=d==="forward"||d==="anchor"?P?.beginIndex:P?.endIndex;return e.get(E)}return c&&h==="scrollable"?i.getSpineItemFromPosition(c):e.get(0)};return s.pipe(o.map(({navigation:a,...c})=>{const u=r(a);return{navigation:{...a,spineItem:e.getSpineItemIndex(u)},...c}}))},vt=({spine:n})=>e=>e.pipe(o.switchMap(({navigation:t,...i})=>{const s=n.getSpineItemSpineLayoutInfo(t.spineItem),r=n.spineItemsManager.get(t.spineItem);return(r?.isReady$??o.of(!1)).pipe(o.first(),o.map(a=>({navigation:{...t,spineItemHeight:s?.height,spineItemWidth:s?.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r?.isUsingVerticalWriting(),spineItemIsReady:a},...i})))})),$e=({settings:n,spineItemsManager:e,spineLocator:t,navigationResolver:i})=>s=>{const r=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:u}=n.values,l=e.get(a.spineItem);if(!(!l||!a.position)){if(u==="controlled"){const{endPageIndex:d,beginPageIndex:p}=t.getVisiblePagesFromViewportPosition({position:a.position,spineItem:l,threshold:c,restrictToScreen:!1})??{},h=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?d:p)??0,m=i.getNavigationForSpineItemPage({pageIndex:h,spineItemId:l}),g=t.getVisiblePagesFromViewportPosition({position:m,spineItem:l,threshold:{type:"percentage",value:0},restrictToScreen:!0}),f=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?g?.beginPageIndex:g?.endPageIndex)??0;return t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:l})}return t.getSpineItemPositionFromSpinePosition(a.position,l)}};return s.pipe(o.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:r(a)},...c})))},Xi=({navigationResolver:n})=>e=>e.pipe(o.map(t=>{if(t.navigation.url){const i=n.getNavigationForUrl(t.navigation.url);if(i)return{...t,navigation:{...t.navigation,position:i.position,spineItem:i.spineItemId}}}return t}));class Te{constructor(){this.isLockedSubject=new o.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(o.map(e=>!!e),o.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const qi=({spineLocator:n,navigation:e,navigationResolver:t,spineItemsManager:i,spine:s})=>{const r=i.get(e.spineItem);return r?r.isReady$.pipe(o.first(),o.map(a=>{const c=s.getSpineItemSpineLayoutInfo(r),u=n.isPositionWithinSpineItem(e.position,r),l=c.width-(e.spineItemWidth??0),d=c.height-(e.spineItemHeight??0),p=l!==0||d!==0;if(e.url!==void 0&&(l||d||a&&!e.spineItemIsReady)){const m=t.getNavigationForUrl(e.url);if(m)return m.position}const h=e.cfi??e.paginationBeginCfi;if(h!==void 0&&!ne(h)&&(l||d||a&&!e.spineItemIsReady)){const m=t.getNavigationForCfi(h);if(m)return m}if(u&&p&&e.directionFromLastNavigation==="backward"){const m=new F({x:(e.positionInSpineItem?.x??0)+l,y:(e.positionInSpineItem?.y??0)+d});return t.getNavigationFromSpineItemPosition({spineItem:r,spineItemPosition:m})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const m=n.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return t.getNavigationForSpineItemPage({pageIndex:m,spineItemId:r})}return u?t.getNavigationForPosition(e.position):t.getNavigationForSpineIndexOrId(r)})):o.of(new M({x:0,y:0}))},Gi=({navigation:n,spineLocator:e,spineItemsManager:t,settings:i,navigationResolver:s,spine:r})=>{const{spineItem:a}=n,c=t.get(a);if(!c)return new M({x:0,y:0});const{height:u,top:l}=r.getSpineItemSpineLayoutInfo(c),d=e.isPositionWithinSpineItem(n.position,c),p=n.positionInSpineItem??new F({y:0,x:0});if(i.values.computedPageTurnDirection==="vertical"){if(l===n.spineItemTop&&u===n.spineItemHeight&&d)return n.position;if(l===n.spineItemTop&&u===n.spineItemHeight&&!d)return s.getNavigationForSpineIndexOrId(c);if(l!==n.spineItemTop){const h=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(n.positionInSpineItem??new F({x:0,y:0}),c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:h,spineItem:c})}if(l===n.spineItemTop&&u!==n.spineItemHeight){const h=(n.spineItemHeight??p.y)-p.y,m=new F({y:n.directionFromLastNavigation==="backward"?u-h:p.y,x:n.position.x});if(d){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(m,c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:c})}if(!d){if(!(n.position.y<l)){const f=new F({y:u-h,x:n.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return s.getNavigationForSpineIndexOrId(c)}}}return n.position},Zi=({navigation:n,spineItemsManager:e,settings:t,spineLocator:i,navigationResolver:s,spine:r})=>t.values.computedPageTurnMode==="scrollable"?o.of(Gi({navigation:n,spineLocator:i,navigationResolver:s,settings:t,spineItemsManager:e,spine:r})):qi({navigation:n,spineLocator:i,navigationResolver:s,spineItemsManager:e,spine:r}),Pt=({settings:n,navigationResolver:e,context:t,spine:i})=>s=>s.pipe(o.switchMap(r=>Zi({spineLocator:i.locator,navigation:r.navigation,navigationResolver:e,settings:n,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,spine:i}).pipe(o.map(a=>({...r,navigation:{...r.navigation,position:a}}))))),Ji=L.namespace("navigation/InternalNavigator");class $t extends R{constructor(e,t,i,s,r,a,c,u){super(),this.settings=e,this.context=t,this.userNavigation$=i,this.controlledNavigationController=s,this.scrollNavigationController=r,this.navigationResolver=a,this.spine=c,this.isUserLocked$=u,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new M({x:0,y:0}),meta:{triggeredBy:"user"},spineItemIsReady:!1,type:"api",id:Symbol()}),this.navigated$=this.navigationSubject.pipe(o.skip(1)),this.navigation$=this.navigationSubject.pipe(o.map(({position:S,id:w})=>({position:S,id:w})),o.distinctUntilChanged(({position:S,...w},{position:v,...T})=>$.isShallowEqual(w,T)&&$.isShallowEqual(S,v)),o.shareReplay(1)),this.locker=new Te;const l=i.pipe(o.withLatestFrom(this.navigationSubject),_i({navigationResolver:a}),Xi({navigationResolver:a}),Hi({navigationResolver:a}),xi({context:t,settings:e}),wt({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),$e({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),vt({spine:c})).pipe(Yi({navigationResolver:a,spineItemsManager:c.spineItemsManager,settings:e}),o.withLatestFrom(u),o.switchMap(([S,w])=>{const v=S.navigation.cfi||S.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return o.of(S).pipe(v?o.identity:Pt({navigationResolver:a,settings:e,spine:c,context:t}))}),$e({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),o.map(S=>S.navigation),o.share()),d=l.pipe(o.withLatestFrom(u),o.filter(([,S])=>S),o.switchMap(([S])=>{const w=this.locker.lock();return u.pipe(o.filter(v=>!v),o.first(),o.map(()=>({...S,animation:"snap"})),o.finalize(()=>{w()}),o.takeUntil(l))}),o.share()),p=o.merge(s.layout$,c.layout$).pipe(o.switchMap(()=>o.of(null).pipe(o.switchMap(()=>u.pipe(o.filter(S=>!S),o.first())),o.map(()=>({...this.navigationSubject.getValue(),animation:!1})),o.takeUntil(o.merge(d,l))))),h=o.merge(p,d).pipe(o.map(S=>({navigation:S})),Pt({navigationResolver:a,settings:e,context:t,spine:c}),o.map(S=>{const w={...S.navigation,meta:{triggeredBy:"restoration"}};return{...S,navigation:w}}),wt({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),vt({spine:c}),$e({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),o.map(({navigation:S})=>S),o.share()),m=Wi(t,this.navigationSubject,c),g=o.merge(h,l,m),f=S=>S.pipe(o.tap(([w,v])=>{Ji.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),y=S=>S.pipe(o.tap(([w,v])=>{const T=w.type==="scroll",P=w.meta.triggeredBy==="pagination",E=w.meta.triggeredBy==="restoration",D=$.isShallowEqual(v.position,w.position);if(T&&!E||P||D)return;const A={position:w.position,animation:w.animation};e.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(A):this.controlledNavigationController.navigate({...A,position:M.from(A.position)})}));g.pipe(o.withLatestFrom(this.navigationSubject),y,f,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const se=(n,e,t)=>{const i=t-n,s=t*(e*n)/(t||1);return Math.max(0,Math.min(i,s))},Me=(n,e)=>(e||0)===0||(n||0)===0?1:Math.floor(Math.max(1,n/e)),Fe=(n,e,t)=>{const i=Me(t,e),s=[...Array(i)].map((r,a)=>a*e);return n>=i*e?s[s.length-1]||0:s.find(r=>n<r+e)||0},Tt=(n,e,t)=>{const i=[...Array(t)].map((s,r)=>r*e);return n<=0||t===0?0:n>=t*e?t-1:i.findIndex(s=>n<s+e)??0},Ki=({itemWidth:n,itemHeight:e,spineItemPosition:t})=>new F({x:Math.min(n,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),Mt=({itemHeight:n,itemWidth:e,isUsingVerticalWriting:t,pageWidth:i,pageHeight:s,pageTurnDirection:r,pageTurnMode:a})=>r==="vertical"&&a==="scrollable"?1:t||r==="vertical"?Me(n,s):Me(e,i),Ft=({itemWidth:n,itemHeight:e,position:t,isUsingVerticalWriting:i,pageWidth:s,pageHeight:r,pageTurnDirection:a,pageTurnMode:c,isRTL:u})=>{const d=Ki({spineItemPosition:t,itemHeight:e,itemWidth:n}).x,p=Mt({isUsingVerticalWriting:i,itemHeight:e,itemWidth:n,pageWidth:s,pageHeight:r,pageTurnDirection:a,pageTurnMode:c});if(i)return Tt(t.y,r,p);const h=Tt(d,s,p);return u?p-1-h:h},Qi=({pageIndex:n,itemLayout:e,context:t,isUsingVerticalWriting:i,viewport:s})=>{if(i){const a=se(s.pageSize.height,n,e.height);return new F({x:0,y:a})}const r=se(s.pageSize.width,n,e.width);return t.isRTL()?new F({x:e.width-r-s.pageSize.width,y:0}):new F({x:r,y:0})},Lt=({context:n,settings:e,viewport:t})=>{const i=(c,u,l)=>{let d;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?d=c.getBoundingClientRect().x:c&&(d=(c?qt(c,u):void 0)?.getBoundingClientRect().x||d);const p=l.layout.layoutInfo?.width||0,h=t.pageSize.width;if(d!==void 0){const m=Fe(d,h,p);return new F({x:m,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:u})=>Qi({context:n,isUsingVerticalWriting:!!u.isUsingVerticalWriting(),itemLayout:u.layout.layoutInfo,pageIndex:c,viewport:t}),getSpineItemPageIndexFromPosition:c=>Ft({...c,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,u,l)=>{const d=i(c,u,l),{height:p,width:h}=l.layout.layoutInfo;return d?Ft({isUsingVerticalWriting:!!l.isUsingVerticalWriting(),position:d,itemHeight:p,itemWidth:h,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,u)=>{const{width:l,height:d}=u.layout.layoutInfo;return new F({x:Fe(c.x,t.pageSize.width,l),y:Fe(c.y,t.pageSize.height,d)})},getSpineItemPagePositionFromSpineItemPosition:(c,u,l)=>{const{width:d,height:p}=l.layout.layoutInfo,h=t.pageSize.width,m=t.pageSize.height;if(!!l.isUsingVerticalWriting()){const y=se(m,u,p);return new j({x:c.x,y:c.y-y})}const f=se(h,u,d);if(n.isRTL()){const y=d-(u+1)*h;return new j({x:c.x-Math.max(0,y),y:c.y})}return new j({x:c.x-f,y:c.y})}}},ji=({context:n,settings:e,viewport:t})=>{const i=Lt({context:n,settings:e,viewport:t});return{getNavigationForLastPage:c=>{const u=c.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:u-1,spineItem:c})},getNavigationForPosition:(c,u)=>i.getSpineItemClosestPositionFromUnsafePosition(u,c),getNavigationFromNode:(c,u,l)=>i.getSpineItemPositionFromNode(u,l,c)||new F({x:0,y:0})}};function Et({position:n,isRTL:e,spineItemsManager:t,spine:i,viewportWidth:s}){const r=t.get(t.items.length-1),a=i.getSpineItemSpineLayoutInfo(r||0),c=a.bottom-1,u=Math.max(0,n.y),l=Math.min(u,c);if(e){const m=Math.min(s,n.x),g=Math.max(m,a.left);return new M({x:g,y:l})}const d=a.right-1,p=Math.max(0,n.x),h=Math.min(p,d);return new M({x:h,y:l})}const Ct=({position:n,isRTL:e,pageSizeHeight:t,spineItemsManager:i,visibleAreaRectWidth:s,spine:r})=>{const a=Et({position:n,isRTL:e,spineItemsManager:i,spine:r,viewportWidth:s}),c=i.get(i.items.length-1),u=r.getSpineItemSpineLayoutInfo(c),l=u.bottom-t,d=Math.min(a.y,l);if(e){const h=Math.min(0,a.x);return new M({x:h,y:d})}const p=u.right-s;return new M({x:Math.min(a.x,p),y:d})},k=({position:{x:n,y:e},pageSizeWidth:t,visibleAreaRectWidth:i})=>{const r=n%i!==0?n-t:n;return new M({x:r,y:e})},Le=({viewportPosition:n,spineLocator:e,spineItemNavigationResolver:t,viewport:i})=>{const s=e.getSpineItemFromPosition(n);if(s){const r=e.getSpineItemPositionFromSpinePosition(n,s),a=t.getNavigationForPosition(s,r),c=e.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:s});return k({position:c,pageSizeWidth:i.pageSize.width,visibleAreaRectWidth:i.absoluteViewport.width})}return new M({x:0,y:0})},eo=({pageIndex:n,spineItemsManager:e,spineItemId:t,spineLocator:i,spineItemNavigationResolver:s,viewport:r})=>{const a=e.get(t);if(!a){const l=n*r.pageSize.width;return Le({viewportPosition:new M({x:l,y:0}),spineItemNavigationResolver:s,spineLocator:i,viewport:r})}const c=i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:n,spineItem:a}),u=i.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return k({position:u,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},to=(n,e)=>{if(e&&e instanceof HTMLIFrameElement)return n.startsWith("#")?e.contentDocument?.getElementById(n.replace("#","")):e.contentDocument?.querySelector(n)},no=({anchor:n,spineItem:e,spine:t})=>{const i=to(n,e.renderer.getDocumentFrame());return i?t.spineItemLocator.getSpineItemPositionFromNode(i,0,e)?.x??0:0},io=({anchor:n,spineItem:e,spineLocator:t,spine:i})=>{const s=no({anchor:n,spineItem:e,spine:i});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:new F({x:s,y:0}),spineItem:e})},oo=({anchor:n,spineItem:e,spineLocator:t,spine:i,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const a=io({anchor:n,spineItem:e,spineLocator:t,spine:i});return k({position:a,pageSizeWidth:s,visibleAreaRectWidth:r})},so=({spine:n,spineItemsManager:e,spineLocator:t,url:i,context:s,pageSizeWidth:r,visibleAreaRectWidth:a})=>{try{const c=i instanceof URL?i:new URL(i),u=`${c.origin}${c.pathname}`,l=s.manifest?.spineItems.find(d=>d.href===u);if(l){const d=e.get(l.id);if(d){const p=oo({anchor:c.hash,spineItem:d,spine:n,spineLocator:t,pageSizeWidth:r,visibleAreaRectWidth:a});return{position:k({position:p,pageSizeWidth:r,visibleAreaRectWidth:a}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},ro=({spineItem:n,spineItemPosition:e,spineLocator:t,spineItemLocator:i,viewport:s})=>{const r=i.getSpineItemClosestPositionFromUnsafePosition(e,n),a=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:n});return k({position:a,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},ao="spineNavigator",co=({context:n,spineItemsManager:e,locator:t,settings:i,spine:s,viewport:r})=>{const a=ji({context:n,settings:i,viewport:r});return{getNavigationForUrl:m=>so({context:n,spineItemsManager:e,spineLocator:t,url:m,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width,spine:s}),getNavigationForSpineItemPage:m=>eo({...m,spineItemsManager:e,spineItemNavigationResolver:a,spineLocator:t,viewport:r}),getNavigationFromSpineItemPosition:m=>ro({...m,spineItemLocator:t.spineItemLocator,spineLocator:t,viewport:r}),getNavigationForCfi:m=>{const g=e.getSpineItemFromCfi(m),{node:f,offset:y=0}=we({cfi:m,spineItemsManager:e});if(!g){L.warn(ao,`unable to detect item id from cfi ${m}`);return}const S=f?a.getNavigationFromNode(g,f,y):new F({x:0,y:0}),w=t.getSpinePositionFromSpineItemPosition({spineItemPosition:S,spineItem:g});return k({position:w,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},getNavigationForLastPage:m=>{const g=a.getNavigationForLastPage(m),f=t.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:m});return k({position:f,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},getNavigationForSpineIndexOrId:m=>{const g=e.get(m);if(g){const f=t.getSpinePositionFromSpineItem(g);return k({position:f,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})}return new M({x:0,y:0})},getNavigationForPosition:m=>Le({viewportPosition:m,spineItemNavigationResolver:a,spineLocator:t,viewport:r}),getMostPredominantNavigationForPosition:m=>{const g=i.values.computedPageTurnDirection,f=.5,y=g==="horizontal"?m.x+r.absoluteViewport.width*f:0,S=g==="horizontal"?0:m.y+r.absoluteViewport.height*f,w=Ct({position:new M({x:y,y:S}),isRTL:n.isRTL(),pageSizeHeight:r.pageSize.height,visibleAreaRectWidth:r.absoluteViewport.width,spineItemsManager:e,spine:s});return Le({spineItemNavigationResolver:a,spineLocator:t,viewportPosition:w,viewport:r})},fromUnboundSpinePosition:m=>Ct({position:m,isRTL:n.isRTL(),pageSizeHeight:r.pageSize.height,visibleAreaRectWidth:r.absoluteViewport.width,spineItemsManager:e,spine:s}),fromOutOfBoundsSpinePosition:m=>Et({position:m,isRTL:n.isRTL(),spineItemsManager:e,spine:s,viewportWidth:r.absoluteViewport.width}),isNavigationGoingForwardFrom:(m,g)=>i.values.computedPageTurnDirection==="vertical"?m.y>g.y:m.x>g.x,arePositionsDifferent:(m,g)=>m.x!==g.x||m.y!==g.y,getAdjustedPositionForSpread:m=>k({position:m,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width}),spineItemNavigator:a}},uo=({spineItemsManager:n,context:e,hookManager:t,spine:i,settings:s,viewport:r})=>{const a=new o.Subject,c=a.asObservable(),u=new Te,l=co({context:e,settings:s,spineItemsManager:n,locator:i.locator,spine:i,viewport:r}),d=new It(s,t,e,i,r),p=new gt(r,s,t,i,e),h=new $t(s,e,c,d,p,l,i,u.isLocked$),m=o.combineLatest([d.isNavigating$,p.isNavigating$,u.isLocked$,h.locker.isLocked$]).pipe(I.map(y=>y.some(S=>S)?"busy":"free"),I.distinctUntilChanged(),I.shareReplay(1));return{destroy:()=>{d.destroy(),h.destroy()},getNavigation:()=>h.navigation,internalNavigator:h,scrollNavigationController:p,controlledNavigationController:d,locker:u,viewportState$:m,navigate:y=>{a.next(y)},lock(){return u.lock()},navigationResolver:l,navigation$:h.navigation$}};class Rt extends U{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class At extends R{constructor(e,t,i,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=i,this.spine=s,this.spineItemLocator=r;const a=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const u=({spineItem:l,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:l,position:d,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,l])=>{const{position:d}=l,p=this.pagination.value,{beginIndex:h,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:.5}})??{},g=this.spineItemsManager.get(h),f=this.spineItemsManager.get(m);if(!g||!f)return;const y=p.beginCfi,S=p.endCfi,{beginPageIndex:w=0}=u({spineItem:g,position:d})??{},{endPageIndex:v=0}=u({spineItem:f,position:d})??{},T=y===void 0||ne(y)||p.beginSpineItemIndex!==h,P=p.endSpineItemIndex!==m||S===void 0||ne(S),E=T?H(g.item):y,D=P?H(f.item):S,A=g.numberOfPages,_=f.numberOfPages;this.pagination.update({beginCfi:E,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:h,endCfi:D,endNumberOfPagesInSpineItem:_,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:l.id})}))})),c=a.pipe(Y(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:u,endSpineItemIndex:l,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:p}=this.pagination.value;if(d===void 0||p===void 0||u===void 0||l===void 0)return;const h=this.spineItemsManager.get(u),m=this.spineItemsManager.get(l);h===void 0||m===void 0||this.pagination.update({beginCfi:te({pageIndex:d,spineItem:h,spine:this.spine}),endCfi:te({pageIndex:p,spineItem:m,spine:this.spine})})}));o.merge(a,c).pipe(o.takeUntil(this.destroy$)).subscribe()}}const lo=({manifest:n,spreadMode:e})=>n?.renditionFlow==="scrolled-continuous"?!1:e;class Dt extends R{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=$.shallowMergeIfDefined(this.inputSettings,e),i=this.getOutputSettings(t),s=!$.isShallowEqual(this.outputSettings,i);return{hasChanged:s,state:i,commit:()=>(this.inputSettings=t,this.outputSettings=i,s&&this.outputSettingsUpdateSubject.next(i),i)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(me(e),o.distinctUntilChanged($.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class po extends Dt{constructor(e,t){super(e),this.context=t,t.watch(["manifest","hasVerticalWriting"]).pipe(o.tap(()=>this.update(this.values)),o.takeUntil(this.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,i=this.context.value.hasVerticalWriting??!1,s={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0,computedSpreadMode:lo({spreadMode:e.spreadMode,manifest:t})};return t?.renditionFlow==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),i&&s.computedPageTurnAnimation==="slide"&&(L.warn(`pageTurnAnimation ${s.computedPageTurnAnimation} incompatible with current book, switching back to default`),s.computedPageTurnAnimation="none"),s.computedPageTurnMode==="scrollable"?(s.computedPageTurnAnimationDuration=0,s.computedPageTurnAnimation="none"):s.computedPageTurnAnimationDuration=e.pageTurnAnimationDuration!==void 0?e.pageTurnAnimationDuration:300,s}getOutputSettings(e){const t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{spreadMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class go extends x{onUnload(){return o.EMPTY}onCreateDocument(){return o.of(document.createElement("div"))}onLoadDocument(){return o.EMPTY}onLayout(){return o.of(void 0)}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}class ho extends R{constructor(e,t,i,s,r,a,c){super(),this.item=e,this.containerElement=t,this.context=i,this.hookManager=s,this.renderer=r,this.settings=a,this.viewport=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:u,minimumWidth:l})=>d=>d.pipe(o.map(p=>{const h=$.isShallowEqual(this.lastLayout?.pageSize,this.viewport.pageSize)?this.lastLayout:void 0,{width:m,height:g}=h??{},{width:f=m,height:y=g}=p??{},{width:S,height:w}=this.viewport.pageSize,v=this.validateDimension(f??S,S,l),T=this.settings.values.computedPageTurnMode==="scrollable"?y??w:this.validateDimension(y??w,w,w);return this.lastLayout={width:v,height:T,pageSize:this.viewport.pageSize},this.containerElement.style.width=`${v}px`,this.containerElement.style.height=`${T}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:u,item:this.item,minimumWidth:l}),{width:v,height:T}})),this.layout=u=>{const l=We(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(u),l()},this.adjustPositionOfElement=({right:u,left:l,top:d})=>{u!==void 0?this.containerElement.style.right=`${u}px`:this.containerElement.style.removeProperty("right"),l!==void 0?this.containerElement.style.left=`${l}px`:this.containerElement.style.removeProperty("left"),d!==void 0?this.containerElement.style.top=`${d}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(u=>{const{blankPagePosition:l,minimumWidth:d,spreadPosition:p}=u;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:l,item:this.item,minimumWidth:d});const h=this.renderer.layout({blankPagePosition:l,minPageSpread:d/this.viewport.pageSize.width,minimumWidth:d,spreadPosition:p});return o.merge(o.of({type:"start"}),h.pipe(this.applyDimsAfterLayout(u),o.map(m=>({type:"end",data:m}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(u=>u.type==="end"),o.map(u=>u.data),o.share())}validateDimension(e,t,i){if(e<=0)return i;const s=Math.max(e,i),a=Math.ceil(s/t)*t;return Math.max(a,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,i=e.height?parseFloat(e.height):0;return{width:t,height:i}}}class Ee extends U{constructor(e,t,i,s,r,a,c){super({isLoaded:!1,isReady:!1,iDirty:!1}),this.item=e,this.parentElement=t,this.context=i,this.settings=s,this.hookManager=r,this.index=a,this.viewport=c,this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.markDirty=()=>{this.mergeCompare({iDirty:!0})},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=mo(t,e,r),t.appendChild(this.containerElement);const u=this.settings.values.getRenderer?.(e);this.resourcesHandler=new J(e,this.settings);const l={context:i,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler,viewport:this.viewport};this.renderer=u?u(l):new go(l),this.layout=new ho(e,this.containerElement,i,r,this.renderer,this.settings,this.viewport);const d=this.renderer.state$.pipe(I.tap(h=>{this.mergeCompare({isLoaded:h==="loaded"})})),p=this.layout.layout$.pipe(I.tap(()=>{this.mergeCompare({iDirty:!1,isReady:this.renderer.state$.value==="loaded"})}));this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(d,p,this.layout.layout$).pipe(I.takeUntil(this.destroy$)).subscribe()}get isReady$(){return this.watch("isReady")}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.loaded$}get unloaded$(){return this.renderer.state$.pipe(I.distinctUntilChanged(),I.filter(e=>e!=="idle"),I.switchMap(()=>this.renderer.state$.pipe(I.filter(e=>e==="idle"),I.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return Mt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.viewport.pageSize.width,pageHeight:this.viewport.pageSize.height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const mo=(n,e,t)=>{const i=n.ownerDocument.createElement("div");return i.classList.add("spineItem"),i.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),i.style.cssText=`
261
+ `,p.className=`${E}-controlled-navigator`,p.innerHTML="",p.appendChild(d),this.viewport.value.element.appendChild(p),this.element$.next(p)})),c=e.watch(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),u=o.combineLatest([c,this.element$]).pipe(o.tap(([,d])=>{e.values.computedPageTurnMode==="scrollable"?d.style.display="contents":d.style.display="block"}));this.layout$=u.pipe(o.tap(()=>{It.info("layout",e.values)}),o.share());const l=this.navigateSubject.pipe(o.tap(d=>{It.info("Navigation requested",d)}));this.isNavigating$=l.pipe(o.map(({animation:d,position:p})=>({type:"manualAdjust",shouldAnimate:!(!d||d==="turn"&&e.values.computedPageTurnAnimation==="none"),animation:d,position:p})),o.switchMap(d=>{const p=this.element$.getValue();return p.style.setProperty("transition","none"),p.style.setProperty("opacity","1"),o.merge(o.of(!0),o.of(null).pipe(o.mergeMap(()=>{if(d?.type!=="manualAdjust")return o.of(!1);const h=d.animation==="snap"?e.values.snapAnimationDuration:e.values.computedPageTurnAnimationDuration,m=d.animation==="snap"?"slide":e.values.computedPageTurnAnimation;return o.of(d).pipe(d.shouldAnimate?o.delay(1,o.animationFrameScheduler):o.identity,o.tap(g=>{const f=this.element$.getValue();g.shouldAnimate?m==="fade"?(f.style.setProperty("transition",`opacity ${h/2}ms`),f.style.setProperty("opacity","0")):(d.animation==="snap"||m==="slide")&&(f.style.setProperty("transition",`transform ${h}ms`),f.style.setProperty("opacity","1")):(f.style.setProperty("transition","none"),f.style.setProperty("opacity","1"))}),o.tap(g=>{m!=="fade"&&this.setViewportPosition(g.position)}),d.shouldAnimate?o.delay(h/2,o.animationFrameScheduler):o.identity,o.tap(g=>{const f=this.element$.getValue();m==="fade"&&(this.setViewportPosition(g.position),f.style.setProperty("opacity","1"))}),d.shouldAnimate?o.delay(h/2,o.animationFrameScheduler):o.identity,o.tap(g=>{m==="fade"&&this.setViewportPosition(g.position)}))}),o.map(()=>!1)))}),o.startWith(!1),o.shareReplay(1)),o.merge(a,this.isNavigating$,this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}setViewportPosition(e){const t=this.element$.getValue(),i=ki(e);t.style.transform=`translate(${i.x}px, ${i.y}px)`,this.hookManager.execute("onViewportOffsetAdjust",void 0,{})}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.element$.getValue(),t=window.getComputedStyle(e),i=t.transform||t.webkitTransform;if(!i||i==="none")return new M({x:0,y:0});const s=new DOMMatrix(i);return zi(s)}}const Wi=()=>n=>n.pipe(o.map(({navigation:e,pagination:t,...i})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...i}))),_i=(n,e,t)=>n.bridgeEvent.pagination$.pipe(o.withLatestFrom(e),o.filter(([i,s])=>i.navigationId===s.id),o.switchMap(([i,s])=>(t.spineItemsManager.get(s.spineItem)?.isReady$.pipe(o.first())??o.of(!1)).pipe(o.filter(a=>a),o.map(()=>({pagination:i,navigation:s})))),Wi(),o.distinctUntilChanged((i,s)=>i.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:i})=>({...i,meta:{triggeredBy:"pagination"}}))),Hi=({navigationResolver:n})=>e=>e.pipe(o.map(([t,i])=>{const s={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t,position:t.position?n.fromOutOfBoundsSpinePosition(t.position):void 0};return{previousNavigation:i,navigation:s}})),Bi=({navigationResolver:n})=>e=>e.pipe(o.map(t=>{if(t.navigation.cfi){const i=n.getNavigationForCfi(t.navigation.cfi);if(i)return{...t,navigation:{...t.navigation,position:i}}}return t})),xi=({navigation:n,previousNavigation:e,settings:t})=>n.directionFromLastNavigation?n.directionFromLastNavigation:n.url!==void 0||n.cfi!==void 0?"anchor":e.spineItem===void 0||n.spineItem||!n.position?"forward":t.values.computedPageTurnDirection==="vertical"?n.position.y>e.position.y||n.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(n.position.x)>Math.abs(e.position.x)||n.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",Yi=({context:n,settings:e})=>t=>t.pipe(o.map(({navigation:i,previousNavigation:s})=>{const r=xi({navigation:i,previousNavigation:s,settings:e}),a={...i,directionFromLastNavigation:r};return{previousNavigation:s,navigation:a,direction:r}})),Xi=({spineItemsManager:n,navigationResolver:e,settings:t})=>i=>i.pipe(o.map(({navigation:s,...r})=>{const a=n.get(s.spineItem);if(s.position)return t.values.computedPageTurnMode==="scrollable"?{navigation:{...s,position:s.position},...r}:{navigation:{...s,position:e.fromUnboundSpinePosition(s.position)},...r};if(!a)return{navigation:{...s,position:r.previousNavigation.position},...r};const c=e.getNavigationForSpineIndexOrId(a),u=t.values.computedPageTurnMode==="scrollable"?new U({x:c.x+r.previousNavigation.position.x,y:c.y}):e.fromUnboundSpinePosition(c);return{navigation:{...s,position:u},...r}})),vt=({settings:n,spineItemsManager:e,navigationResolver:t,spineLocator:i})=>s=>{const r=a=>{const{position:c,spineItem:u,cfi:l,directionFromLastNavigation:d}=a,{navigationSnapThreshold:p,computedPageTurnMode:h}=n.values;if(u!==void 0){const m=e.get(u);if(m)return m}if(typeof u=="number")return u>e.items.length-1?e.get(e.items.length-1):e.get(0);if(l){const m=e.getSpineItemFromCfi(l);if(m)return m}if(c&&h==="controlled"){const{beginIndex:m,endIndex:g}=i.getVisibleSpineItemsFromPosition({position:c,threshold:p,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?g:m)??m,y=e.get(f);if(!y)return;const{endPageIndex:S,beginPageIndex:w}=i.getVisiblePagesFromViewportPosition({position:c,spineItem:y,threshold:p,restrictToScreen:!1})??{},v=(d==="forward"||d==="anchor"?S:w)??0,T=t.getNavigationForSpineItemPage({pageIndex:v,spineItemId:y}),P=i.getVisibleSpineItemsFromPosition({position:T,threshold:p,restrictToScreen:!1}),C=d==="forward"||d==="anchor"?P?.beginIndex:P?.endIndex;return e.get(C)}return c&&h==="scrollable"?i.getSpineItemFromPosition(c):e.get(0)};return s.pipe(o.map(({navigation:a,...c})=>{const u=r(a);return{navigation:{...a,spineItem:e.getSpineItemIndex(u)},...c}}))},Pt=({spine:n})=>e=>e.pipe(o.switchMap(({navigation:t,...i})=>{const s=n.getSpineItemSpineLayoutInfo(t.spineItem),r=n.spineItemsManager.get(t.spineItem);return(r?.isReady$??o.of(!1)).pipe(o.first(),o.map(a=>({navigation:{...t,spineItemHeight:s?.height,spineItemWidth:s?.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r?.isUsingVerticalWriting(),spineItemIsReady:a},...i})))})),$e=({settings:n,spineItemsManager:e,spineLocator:t,navigationResolver:i})=>s=>{const r=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:u}=n.values,l=e.get(a.spineItem);if(!(!l||!a.position)){if(u==="controlled"){const{endPageIndex:d,beginPageIndex:p}=t.getVisiblePagesFromViewportPosition({position:a.position,spineItem:l,threshold:c,restrictToScreen:!1})??{},h=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?d:p)??0,m=i.getNavigationForSpineItemPage({pageIndex:h,spineItemId:l}),g=t.getVisiblePagesFromViewportPosition({position:m,spineItem:l,threshold:{type:"percentage",value:0},restrictToScreen:!0}),f=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?g?.beginPageIndex:g?.endPageIndex)??0;return t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:l})}return t.getSpineItemPositionFromSpinePosition(a.position,l)}};return s.pipe(o.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:r(a)},...c})))},qi=({navigationResolver:n})=>e=>e.pipe(o.map(t=>{if(t.navigation.url){const i=n.getNavigationForUrl(t.navigation.url);if(i)return{...t,navigation:{...t.navigation,position:i.position,spineItem:i.spineItemId}}}return t}));class Te{constructor(){this.isLockedSubject=new o.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(o.map(e=>!!e),o.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Gi=({spineLocator:n,navigation:e,navigationResolver:t,spineItemsManager:i,spine:s})=>{const r=i.get(e.spineItem);return r?r.isReady$.pipe(o.first(),o.map(a=>{const c=s.getSpineItemSpineLayoutInfo(r),u=n.isPositionWithinSpineItem(e.position,r),l=c.width-(e.spineItemWidth??0),d=c.height-(e.spineItemHeight??0),p=l!==0||d!==0;if(e.url!==void 0&&(l||d||a&&!e.spineItemIsReady)){const m=t.getNavigationForUrl(e.url);if(m)return m.position}const h=e.cfi??e.paginationBeginCfi;if(h!==void 0&&!oe(h)&&(l||d||a&&!e.spineItemIsReady)){const m=t.getNavigationForCfi(h);if(m)return m}if(u&&p&&e.directionFromLastNavigation==="backward"){const m=new F({x:(e.positionInSpineItem?.x??0)+l,y:(e.positionInSpineItem?.y??0)+d});return t.getNavigationFromSpineItemPosition({spineItem:r,spineItemPosition:m})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const m=n.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return t.getNavigationForSpineItemPage({pageIndex:m,spineItemId:r})}return u?t.getNavigationForPosition(e.position):t.getNavigationForSpineIndexOrId(r)})):o.of(new M({x:0,y:0}))},Zi=({navigation:n,spineLocator:e,spineItemsManager:t,settings:i,navigationResolver:s,spine:r})=>{const{spineItem:a}=n,c=t.get(a);if(!c)return new M({x:0,y:0});const{height:u,top:l}=r.getSpineItemSpineLayoutInfo(c),d=e.isPositionWithinSpineItem(n.position,c),p=n.positionInSpineItem??new F({y:0,x:0});if(i.values.computedPageTurnDirection==="vertical"){if(l===n.spineItemTop&&u===n.spineItemHeight&&d)return n.position;if(l===n.spineItemTop&&u===n.spineItemHeight&&!d)return s.getNavigationForSpineIndexOrId(c);if(l!==n.spineItemTop){const h=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(n.positionInSpineItem??new F({x:0,y:0}),c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:h,spineItem:c})}if(l===n.spineItemTop&&u!==n.spineItemHeight){const h=(n.spineItemHeight??p.y)-p.y,m=new F({y:n.directionFromLastNavigation==="backward"?u-h:p.y,x:n.position.x});if(d){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(m,c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:c})}if(!d){if(!(n.position.y<l)){const f=new F({y:u-h,x:n.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return s.getNavigationForSpineIndexOrId(c)}}}return n.position},Ji=({navigation:n,spineItemsManager:e,settings:t,spineLocator:i,navigationResolver:s,spine:r})=>t.values.computedPageTurnMode==="scrollable"?o.of(Zi({navigation:n,spineLocator:i,navigationResolver:s,settings:t,spineItemsManager:e,spine:r})):Gi({navigation:n,spineLocator:i,navigationResolver:s,spineItemsManager:e,spine:r}),$t=({settings:n,navigationResolver:e,context:t,spine:i})=>s=>s.pipe(o.switchMap(r=>Ji({spineLocator:i.locator,navigation:r.navigation,navigationResolver:e,settings:n,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,spine:i}).pipe(o.map(a=>({...r,navigation:{...r.navigation,position:a}}))))),Ki=L.namespace("navigation/InternalNavigator");class Tt extends R{constructor(e,t,i,s,r,a,c,u){super(),this.settings=e,this.context=t,this.userNavigation$=i,this.controlledNavigationController=s,this.scrollNavigationController=r,this.navigationResolver=a,this.spine=c,this.isRestorationLocked$=u,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new M({x:0,y:0}),meta:{triggeredBy:"user"},spineItemIsReady:!1,type:"api",id:Symbol()}),this.navigated$=this.navigationSubject.pipe(o.skip(1)),this.navigation$=this.navigationSubject.pipe(o.map(({position:S,id:w})=>({position:S,id:w})),o.distinctUntilChanged(({position:S,...w},{position:v,...T})=>$.isShallowEqual(w,T)&&$.isShallowEqual(S,v)),o.shareReplay(1)),this.locker=new Te;const l=i.pipe(o.withLatestFrom(this.navigationSubject),Hi({navigationResolver:a}),qi({navigationResolver:a}),Bi({navigationResolver:a}),Yi({context:t,settings:e}),vt({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),$e({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Pt({spine:c})).pipe(Xi({navigationResolver:a,spineItemsManager:c.spineItemsManager,settings:e}),o.withLatestFrom(u),o.switchMap(([S,w])=>{const v=S.navigation.cfi||S.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return o.of(S).pipe(v?o.identity:$t({navigationResolver:a,settings:e,spine:c,context:t}))}),$e({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),o.map(S=>S.navigation),o.share()),d=l.pipe(o.withLatestFrom(u),o.filter(([,S])=>S),o.switchMap(([S])=>{const w=this.locker.lock();return u.pipe(o.filter(v=>!v),o.first(),o.map(()=>({...S,animation:"snap"})),o.finalize(()=>{w()}),o.takeUntil(l))}),o.share()),p=o.merge(s.layout$,c.layout$).pipe(o.switchMap(()=>o.of(null).pipe(o.switchMap(()=>u.pipe(o.filter(S=>!S),o.first())),o.map(()=>({...this.navigationSubject.getValue(),animation:!1})),o.takeUntil(o.merge(d,l))))),h=o.merge(p,d).pipe(o.map(S=>({navigation:S})),$t({navigationResolver:a,settings:e,context:t,spine:c}),o.map(S=>{const w={...S.navigation,meta:{triggeredBy:"restoration"}};return{...S,navigation:w}}),vt({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Pt({spine:c}),$e({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),o.map(({navigation:S})=>S),o.share()),m=_i(t,this.navigationSubject,c),g=o.merge(h,l,m),f=S=>S.pipe(o.tap(([w,v])=>{Ki.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),y=S=>S.pipe(o.tap(([w,v])=>{const T=w.type==="scroll",P=w.meta.triggeredBy==="pagination",C=w.meta.triggeredBy==="restoration",D=$.isShallowEqual(v.position,w.position);if(T&&!C||P||D)return;const A={position:w.position,animation:w.animation};e.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(A):this.controlledNavigationController.navigate({...A,position:M.from(A.position)})}));g.pipe(o.withLatestFrom(this.navigationSubject),y,f,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const ae=(n,e,t)=>{const i=t-n,s=t*(e*n)/(t||1);return Math.max(0,Math.min(i,s))},Me=(n,e)=>(e||0)===0||(n||0)===0?1:Math.floor(Math.max(1,n/e)),Fe=(n,e,t)=>{const i=Me(t,e),s=[...Array(i)].map((r,a)=>a*e);return n>=i*e?s[s.length-1]||0:s.find(r=>n<r+e)||0},Mt=(n,e,t)=>{const i=[...Array(t)].map((s,r)=>r*e);return n<=0||t===0?0:n>=t*e?t-1:i.findIndex(s=>n<s+e)??0},Qi=({itemWidth:n,itemHeight:e,spineItemPosition:t})=>new F({x:Math.min(n,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),Ft=({itemHeight:n,itemWidth:e,isUsingVerticalWriting:t,pageWidth:i,pageHeight:s,pageTurnDirection:r,pageTurnMode:a})=>r==="vertical"&&a==="scrollable"?1:t||r==="vertical"?Me(n,s):Me(e,i),Lt=({itemWidth:n,itemHeight:e,position:t,isUsingVerticalWriting:i,pageWidth:s,pageHeight:r,pageTurnDirection:a,pageTurnMode:c,isRTL:u})=>{const d=Qi({spineItemPosition:t,itemHeight:e,itemWidth:n}).x,p=Ft({isUsingVerticalWriting:i,itemHeight:e,itemWidth:n,pageWidth:s,pageHeight:r,pageTurnDirection:a,pageTurnMode:c});if(i)return Mt(t.y,r,p);const h=Mt(d,s,p);return u?p-1-h:h},ji=({pageIndex:n,itemLayout:e,context:t,isUsingVerticalWriting:i,viewport:s})=>{if(i){const a=ae(s.pageSize.height,n,e.height);return new F({x:0,y:a})}const r=ae(s.pageSize.width,n,e.width);return t.isRTL()?new F({x:e.width-r-s.pageSize.width,y:0}):new F({x:r,y:0})},Ct=({context:n,settings:e,viewport:t})=>{const i=(c,u,l)=>{let d;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?d=c.getBoundingClientRect().x:c&&(d=(c?Gt(c,u):void 0)?.getBoundingClientRect().x||d);const p=l.layout.layoutInfo?.width||0,h=t.pageSize.width;if(d!==void 0){const m=Fe(d,h,p);return new F({x:m,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:u})=>ji({context:n,isUsingVerticalWriting:!!u.isUsingVerticalWriting(),itemLayout:u.layout.layoutInfo,pageIndex:c,viewport:t}),getSpineItemPageIndexFromPosition:c=>Lt({...c,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,u,l)=>{const d=i(c,u,l),{height:p,width:h}=l.layout.layoutInfo;return d?Lt({isUsingVerticalWriting:!!l.isUsingVerticalWriting(),position:d,itemHeight:p,itemWidth:h,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,u)=>{const{width:l,height:d}=u.layout.layoutInfo;return new F({x:Fe(c.x,t.pageSize.width,l),y:Fe(c.y,t.pageSize.height,d)})},getSpineItemPagePositionFromSpineItemPosition:(c,u,l)=>{const{width:d,height:p}=l.layout.layoutInfo,h=t.pageSize.width,m=t.pageSize.height;if(!!l.isUsingVerticalWriting()){const y=ae(m,u,p);return new te({x:c.x,y:c.y-y})}const f=ae(h,u,d);if(n.isRTL()){const y=d-(u+1)*h;return new te({x:c.x-Math.max(0,y),y:c.y})}return new te({x:c.x-f,y:c.y})}}},eo=({context:n,settings:e,viewport:t})=>{const i=Ct({context:n,settings:e,viewport:t});return{getNavigationForLastPage:c=>{const u=c.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:u-1,spineItem:c})},getNavigationForPosition:(c,u)=>i.getSpineItemClosestPositionFromUnsafePosition(u,c),getNavigationFromNode:(c,u,l)=>i.getSpineItemPositionFromNode(u,l,c)||new F({x:0,y:0})}};function Et({position:n,isRTL:e,spineItemsManager:t,spine:i,viewportWidth:s}){const r=t.get(t.items.length-1),a=i.getSpineItemSpineLayoutInfo(r||0),c=a.bottom-1,u=Math.max(0,n.y),l=Math.min(u,c);if(e){const m=Math.min(s,n.x),g=Math.max(m,a.left);return new M({x:g,y:l})}const d=a.right-1,p=Math.max(0,n.x),h=Math.min(p,d);return new M({x:h,y:l})}const Rt=({position:n,isRTL:e,pageSizeHeight:t,spineItemsManager:i,visibleAreaRectWidth:s,spine:r})=>{const a=Et({position:n,isRTL:e,spineItemsManager:i,spine:r,viewportWidth:s}),c=i.get(i.items.length-1),u=r.getSpineItemSpineLayoutInfo(c),l=u.bottom-t,d=Math.min(a.y,l);if(e){const h=Math.min(0,a.x);return new M({x:h,y:d})}const p=u.right-s;return new M({x:Math.min(a.x,p),y:d})},z=({position:{x:n,y:e},pageSizeWidth:t,visibleAreaRectWidth:i})=>{const r=n%i!==0?n-t:n;return new M({x:r,y:e})},Le=({viewportPosition:n,spineLocator:e,spineItemNavigationResolver:t,viewport:i})=>{const s=e.getSpineItemFromPosition(n);if(s){const r=e.getSpineItemPositionFromSpinePosition(n,s),a=t.getNavigationForPosition(s,r),c=e.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:s});return z({position:c,pageSizeWidth:i.pageSize.width,visibleAreaRectWidth:i.absoluteViewport.width})}return new M({x:0,y:0})},to=({pageIndex:n,spineItemsManager:e,spineItemId:t,spineLocator:i,spineItemNavigationResolver:s,viewport:r})=>{const a=e.get(t);if(!a){const l=n*r.pageSize.width;return Le({viewportPosition:new M({x:l,y:0}),spineItemNavigationResolver:s,spineLocator:i,viewport:r})}const c=i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:n,spineItem:a}),u=i.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return z({position:u,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},no=(n,e)=>{if(e&&e instanceof HTMLIFrameElement)return n.startsWith("#")?e.contentDocument?.getElementById(n.replace("#","")):e.contentDocument?.querySelector(n)},io=({anchor:n,spineItem:e,spine:t})=>{const i=no(n,e.renderer.getDocumentFrame());return i?t.spineItemLocator.getSpineItemPositionFromNode(i,0,e)?.x??0:0},oo=({anchor:n,spineItem:e,spineLocator:t,spine:i})=>{const s=io({anchor:n,spineItem:e,spine:i});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:new F({x:s,y:0}),spineItem:e})},so=({anchor:n,spineItem:e,spineLocator:t,spine:i,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const a=oo({anchor:n,spineItem:e,spineLocator:t,spine:i});return z({position:a,pageSizeWidth:s,visibleAreaRectWidth:r})},ro=({spine:n,spineItemsManager:e,spineLocator:t,url:i,context:s,pageSizeWidth:r,visibleAreaRectWidth:a})=>{try{const c=i instanceof URL?i:new URL(i),u=`${c.origin}${c.pathname}`,l=s.manifest?.spineItems.find(d=>d.href===u);if(l){const d=e.get(l.id);if(d){const p=so({anchor:c.hash,spineItem:d,spine:n,spineLocator:t,pageSizeWidth:r,visibleAreaRectWidth:a});return{position:z({position:p,pageSizeWidth:r,visibleAreaRectWidth:a}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},ao=({spineItem:n,spineItemPosition:e,spineLocator:t,spineItemLocator:i,viewport:s})=>{const r=i.getSpineItemClosestPositionFromUnsafePosition(e,n),a=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:n});return z({position:a,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},co="spineNavigator",uo=({context:n,spineItemsManager:e,locator:t,settings:i,spine:s,viewport:r})=>{const a=eo({context:n,settings:i,viewport:r});return{getNavigationForUrl:m=>ro({context:n,spineItemsManager:e,spineLocator:t,url:m,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width,spine:s}),getNavigationForSpineItemPage:m=>to({...m,spineItemsManager:e,spineItemNavigationResolver:a,spineLocator:t,viewport:r}),getNavigationFromSpineItemPosition:m=>ao({...m,spineItemLocator:t.spineItemLocator,spineLocator:t,viewport:r}),getNavigationForCfi:m=>{const g=e.getSpineItemFromCfi(m),{node:f,offset:y=0}=we({cfi:m,spineItemsManager:e});if(!g){L.warn(co,`unable to detect item id from cfi ${m}`);return}const S=f?a.getNavigationFromNode(g,f,y):new F({x:0,y:0}),w=t.getSpinePositionFromSpineItemPosition({spineItemPosition:S,spineItem:g});return z({position:w,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},getNavigationForLastPage:m=>{const g=a.getNavigationForLastPage(m),f=t.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:m});return z({position:f,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},getNavigationForSpineIndexOrId:m=>{const g=e.get(m);if(g){const f=t.getSpinePositionFromSpineItem(g);return z({position:f,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})}return new M({x:0,y:0})},getNavigationForPosition:m=>Le({viewportPosition:m,spineItemNavigationResolver:a,spineLocator:t,viewport:r}),getMostPredominantNavigationForPosition:m=>{const g=i.values.computedPageTurnDirection,f=.5,y=g==="horizontal"?m.x+r.absoluteViewport.width*f:0,S=g==="horizontal"?0:m.y+r.absoluteViewport.height*f,w=Rt({position:new M({x:y,y:S}),isRTL:n.isRTL(),pageSizeHeight:r.pageSize.height,visibleAreaRectWidth:r.absoluteViewport.width,spineItemsManager:e,spine:s});return Le({spineItemNavigationResolver:a,spineLocator:t,viewportPosition:w,viewport:r})},fromUnboundSpinePosition:m=>Rt({position:m,isRTL:n.isRTL(),pageSizeHeight:r.pageSize.height,visibleAreaRectWidth:r.absoluteViewport.width,spineItemsManager:e,spine:s}),fromOutOfBoundsSpinePosition:m=>Et({position:m,isRTL:n.isRTL(),spineItemsManager:e,spine:s,viewportWidth:r.absoluteViewport.width}),isNavigationGoingForwardFrom:(m,g)=>i.values.computedPageTurnDirection==="vertical"?m.y>g.y:m.x>g.x,arePositionsDifferent:(m,g)=>m.x!==g.x||m.y!==g.y,getAdjustedPositionForSpread:m=>z({position:m,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width}),spineItemNavigator:a}},lo=({spineItemsManager:n,context:e,hookManager:t,spine:i,settings:s,viewport:r})=>{const a=new o.Subject,c=a.asObservable(),u=new Te,l=uo({context:e,settings:s,spineItemsManager:n,locator:i.locator,spine:i,viewport:r}),d=new wt(s,t,e,i,r),p=new ht(r,s,t,i,e),h=new Tt(s,e,c,d,p,l,i,u.isLocked$),m=o.combineLatest([d.isNavigating$,p.isNavigating$,u.isLocked$,h.locker.isLocked$]).pipe(I.map(y=>y.some(S=>S)?"busy":"free"),I.distinctUntilChanged(),I.shareReplay(1));return{destroy:()=>{d.destroy(),h.destroy()},getNavigation:()=>h.navigation,internalNavigator:h,scrollNavigationController:p,controlledNavigationController:d,locker:u,navigationState$:m,navigate:y=>{a.next(y)},lock(){return u.lock()},navigationResolver:l,navigation$:h.navigation$}};class At extends V{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class Dt extends R{constructor(e,t,i,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=i,this.spine=s,this.spineItemLocator=r;const a=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const u=({spineItem:l,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:l,position:d,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,l])=>{const{position:d}=l,p=this.pagination.value,{beginIndex:h,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:.5}})??{},g=this.spineItemsManager.get(h),f=this.spineItemsManager.get(m);if(!g||!f)return;const y=p.beginCfi,S=p.endCfi,{beginPageIndex:w=0}=u({spineItem:g,position:d})??{},{endPageIndex:v=0}=u({spineItem:f,position:d})??{},T=y===void 0||oe(y)||p.beginSpineItemIndex!==h,P=p.endSpineItemIndex!==m||S===void 0||oe(S),C=T?H(g.item):y,D=P?H(f.item):S,A=g.numberOfPages,_=f.numberOfPages;this.pagination.update({beginCfi:C,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:h,endCfi:D,endNumberOfPagesInSpineItem:_,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:l.id})}))})),c=a.pipe(Y(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:u,endSpineItemIndex:l,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:p}=this.pagination.value;if(d===void 0||p===void 0||u===void 0||l===void 0)return;const h=this.spineItemsManager.get(u),m=this.spineItemsManager.get(l);h===void 0||m===void 0||this.pagination.update({beginCfi:ie({pageIndex:d,spineItem:h,spine:this.spine}),endCfi:ie({pageIndex:p,spineItem:m,spine:this.spine})})}));o.merge(a,c).pipe(o.takeUntil(this.destroy$)).subscribe()}}const po=({manifest:n,spreadMode:e})=>n?.renditionFlow==="scrolled-continuous"?!1:e;class Ot extends R{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=$.shallowMergeIfDefined(this.inputSettings,e),i=this.getOutputSettings(t),s=!$.isShallowEqual(this.outputSettings,i);return{hasChanged:s,state:i,commit:()=>(this.inputSettings=t,this.outputSettings=i,s&&this.outputSettingsUpdateSubject.next(i),i)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(me(e),o.distinctUntilChanged($.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class go extends Ot{constructor(e,t){super(e),this.context=t,t.watch(["manifest","hasVerticalWriting"]).pipe(o.tap(()=>this.update(this.values)),o.takeUntil(this.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,i=this.context.value.hasVerticalWriting??!1,s={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0,computedSpreadMode:po({spreadMode:e.spreadMode,manifest:t})};return t?.renditionFlow==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),i&&s.computedPageTurnAnimation==="slide"&&(L.warn(`pageTurnAnimation ${s.computedPageTurnAnimation} incompatible with current book, switching back to default`),s.computedPageTurnAnimation="none"),s.computedPageTurnMode==="scrollable"?(s.computedPageTurnAnimationDuration=0,s.computedPageTurnAnimation="none"):s.computedPageTurnAnimationDuration=e.pageTurnAnimationDuration!==void 0?e.pageTurnAnimationDuration:300,s}getOutputSettings(e){const t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{spreadMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class ho extends x{onUnload(){return o.EMPTY}onCreateDocument(){return o.of(document.createElement("div"))}onLoadDocument(){return o.EMPTY}onLayout(){return o.of(void 0)}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}class mo extends R{constructor(e,t,i,s,r,a,c){super(),this.item=e,this.containerElement=t,this.context=i,this.hookManager=s,this.renderer=r,this.settings=a,this.viewport=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:u,minimumWidth:l})=>d=>d.pipe(o.map(p=>{const h=$.isShallowEqual(this.lastLayout?.pageSize,this.viewport.pageSize)?this.lastLayout:void 0,{width:m,height:g}=h??{},{width:f=m,height:y=g}=p??{},{width:S,height:w}=this.viewport.pageSize,v=this.validateDimension(f??S,S,l),T=this.settings.values.computedPageTurnMode==="scrollable"?y??w:this.validateDimension(y??w,w,w);return this.lastLayout={width:v,height:T,pageSize:this.viewport.pageSize},this.containerElement.style.width=`${v}px`,this.containerElement.style.height=`${T}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:u,item:this.item,minimumWidth:l}),{width:v,height:T}})),this.layout=u=>{const l=We(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(u),l()},this.adjustPositionOfElement=({right:u,left:l,top:d})=>{u!==void 0?this.containerElement.style.right=`${u}px`:this.containerElement.style.removeProperty("right"),l!==void 0?this.containerElement.style.left=`${l}px`:this.containerElement.style.removeProperty("left"),d!==void 0?this.containerElement.style.top=`${d}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(u=>{const{blankPagePosition:l,minimumWidth:d,spreadPosition:p}=u;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:l,item:this.item,minimumWidth:d});const h=this.renderer.layout({blankPagePosition:l,minPageSpread:d/this.viewport.pageSize.width,minimumWidth:d,spreadPosition:p});return o.merge(o.of({type:"start"}),h.pipe(this.applyDimsAfterLayout(u),o.map(m=>({type:"end",data:m}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(u=>u.type==="end"),o.map(u=>u.data),o.share())}validateDimension(e,t,i){if(e<=0)return i;const s=Math.max(e,i),a=Math.ceil(s/t)*t;return Math.max(a,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,i=e.height?parseFloat(e.height):0;return{width:t,height:i}}}class Ce extends V{constructor(e,t,i,s,r,a,c){super({isLoaded:!1,isReady:!1,iDirty:!1}),this.item=e,this.parentElement=t,this.context=i,this.settings=s,this.hookManager=r,this.index=a,this.viewport=c,this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.markDirty=()=>{this.mergeCompare({iDirty:!0})},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=fo(t,e,r),t.appendChild(this.containerElement);const u=this.settings.values.getRenderer?.(e);this.resourcesHandler=new Q(e,this.settings);const l={context:i,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler,viewport:this.viewport};this.renderer=u?u(l):new ho(l),this.layout=new mo(e,this.containerElement,i,r,this.renderer,this.settings,this.viewport);const d=this.renderer.state$.pipe(I.tap(h=>{this.mergeCompare({isLoaded:h==="loaded"})})),p=this.layout.layout$.pipe(I.tap(()=>{this.mergeCompare({iDirty:!1,isReady:this.renderer.state$.value==="loaded"})}));this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(d,p,this.layout.layout$).pipe(I.takeUntil(this.destroy$)).subscribe()}get isReady$(){return this.watch("isReady")}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.loaded$}get unloaded$(){return this.renderer.state$.pipe(I.distinctUntilChanged(),I.filter(e=>e!=="idle"),I.switchMap(()=>this.renderer.state$.pipe(I.filter(e=>e==="idle"),I.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return Ft({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.viewport.pageSize.width,pageHeight:this.viewport.pageSize.height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const fo=(n,e,t)=>{const i=n.ownerDocument.createElement("div");return i.classList.add("spineItem"),i.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),i.style.cssText=`
262
262
  position: absolute;
263
263
  overflow: hidden;
264
- `,i.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:i}),i};class fo extends R{constructor(e,t,i,s,r){super(),this.context=e,this.spineItemsManager=t,this.spineLocator=i,this.settings=s,this.spineLayout=r,this.forcedOpenSubject=new o.BehaviorSubject([]);const a=this.forcedOpenSubject.pipe(o.map(l=>[...new Set(l.flat())].sort()),o.distinctUntilChanged($.arrayEqual),o.shareReplay({bufferSize:1,refCount:!0}));o.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,a,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(o.debounceTime(100,o.animationFrameScheduler),Y(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,a),o.map(([,l,d])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=s.values,{beginIndex:h=0,endIndex:m=0}=i.getVisibleSpineItemsFromPosition({position:l.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},g=p===1/0?0:h-p,f=p===1/0?t.items.length-1:m+p,y=Array.from({length:f-g+1},(w,v)=>g+v),S=[...d,...y];t.items.forEach((w,v)=>{S.includes(v)?w.load():w.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(i=>typeof i=="number"?i:i.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,t]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(i=>i!==t))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Ot=(n,e,t)=>{const i=(t.width-e.width)/2,s=(t.height-e.height)/2;return new V({x:n.x-i,y:n.y-s})};class X extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const s=e;return new X(s.x,s.y,t.width,t.height)}const i=e;return new X(i.x,i.y,i.width,i.height)}}class So{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class yo{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const bo=({pageIndex:n,spineItemOrId:e,spineItemsManager:t})=>{const i=t.items,s=t.get(e);if(!s)return;const{currentAbsolutePage:r}=i.reduce((a,c)=>{if(a.found)return a;const u=c.numberOfPages;return s===c&&n<=u-1?{currentAbsolutePage:a.currentAbsolutePage+n,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+u}},{currentAbsolutePage:0,found:!1});return r},Io=({itemHeight:n,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:i,threshold:s})=>{const r=t/e,a=i/n;return s.type==="percentage"?r>=s.value&&a>=s.value:t>=s.value&&i>=s.value},wo=({visibleWidthOfItem:n,visibleHeightOfItem:e,threshold:t,viewportPosition:i})=>{const s=n/i.width,r=e/i.height;return t.type==="percentage"?r>=t.value&&s>=t.value:e>=t.value&&n>=t.value},Nt=({itemPosition:{bottom:n,left:e,right:t,top:i,width:s,height:r},threshold:a,viewportPosition:c,restrictToScreen:u})=>{const l=c.x,d=c.x+(c.width-1),p=c.y,h=Math.max(c.y+(c.height-1),0),m=Math.max(0,Math.min(t,d)-Math.max(e,l)),g=Math.max(0,Math.min(n,h)-Math.max(i,p));if(m<=0||g<=0)return{visible:!1};const y=wo({threshold:a,visibleHeightOfItem:g,visibleWidthOfItem:m,viewportPosition:c});return u?{visible:y}:{visible:Io({itemHeight:r,itemWidth:s,threshold:a,visibleHeightOfItem:g,visibleWidthOfItem:m})||y}},Ce=({position:n,spineItemsManager:e,spineLayout:t})=>{const i=e.items.find(s=>{const{left:r,right:a,bottom:c,top:u}=t.getSpineItemSpineLayoutInfo(s),l=n.x>=r&&n.x<a,d=n.y>=u&&n.y<c;return l&&d});return n.x===0&&!i?e.items[0]:i},Re=({spineItemPosition:n,itemLayout:{left:e,top:t}})=>new M({x:e+n.x,y:t+n.y}),vo=({position:n,threshold:e,restrictToScreen:t,spineItemsManager:i,spineLayout:s,useAbsoluteViewport:r=!0,viewport:a})=>{const c=Ce({position:n,spineItemsManager:i,spineLayout:s})||i.get(0),u=i.items.reduce((m,g)=>{const f=s.getSpineItemSpineLayoutInfo(g),y=r?a.absoluteViewport:a.relativeViewport,S=Ot(n,a.absoluteViewport,y),w=X.from(S,y),{visible:v}=Nt({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:t});return v?[...m,g]:m},[]),l=u[0]??c,d=u[u.length-1]??l;if(!l||!d)return;const p=i.getSpineItemIndex(l),h=i.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:h??0}},Po=({spineItemsManager:n,context:e,spineItemLocator:t,settings:i,spineLayout:s,viewport:r})=>{const a=(g,f)=>{const{left:y,top:S}=s.getSpineItemSpineLayoutInfo(f);return new F({x:Math.max(g.x-y,0),y:Math.max(g.y-S,0)})},c=g=>Re({spineItemPosition:new F({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(g)}),u=g=>n.items.find(f=>f.renderer.getDocumentFrame()===g),l=(g,f,y)=>{if(typeof y=="number"){const S=n.get(y);return S?t.getSpineItemPageIndexFromNode(g,f||0,S):void 0}return t.getSpineItemPageIndexFromNode(g,f||0,y)},d=({position:g,threshold:f,spineItem:y,restrictToScreen:S,useAbsoluteViewport:w=!0,viewport:v})=>{const T=y.numberOfPages,E=Array.from(Array(T)).map((_,ae)=>{const Ae=t.getSpineItemPositionFromPageIndex({pageIndex:ae,spineItem:y}),B=Re({spineItemPosition:Ae,itemLayout:s.getSpineItemSpineLayoutInfo(y)});return{index:ae,absolutePosition:{width:v.pageSize.width,height:v.pageSize.height,left:B.x,top:B.y,bottom:B.y+v.pageSize.height,right:B.x+v.pageSize.width}}}).reduce((_,{absolutePosition:ae,index:Ae})=>{const B=w?v.absoluteViewport:v.relativeViewport,Ro=Ot(g,v.absoluteViewport,B),Ao=X.from(Ro,B),{visible:Do}=Nt({viewportPosition:Ao,restrictToScreen:S,threshold:f,itemPosition:ae});return Do?[..._,Ae]:_},[]),D=E[0],A=E[E.length-1]??D;if(!(D===void 0||A===void 0))return{beginPageIndex:D,endPageIndex:A}};return{getSpinePositionFromSpineItemPosition:({spineItem:g,spineItemPosition:f})=>{const y=s.getSpineItemSpineLayoutInfo(g);return Re({itemLayout:y,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:g=>bo({...g,spineItemsManager:n}),getSpineItemPagePositionFromSpinePosition:g=>{const f=Ce({position:g,spineItemsManager:n,spineLayout:s});if(!f)return;const y=a(g,f),S=t.getSpineItemPageIndexFromPosition({itemWidth:f.layout.layoutInfo.width,itemHeight:f.layout.layoutInfo.height,position:y,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(y,S,f);return{spineItem:f,spineItemPageIndex:S,spineItemPagePosition:w,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:g=>Ce({position:g,spineItemsManager:n,spineLayout:s}),getSpineItemFromIframe:u,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:g=>vo({spineItemsManager:n,spineLayout:s,viewport:r,...g}),getVisiblePagesFromViewportPosition:g=>d({...g,viewport:r}),isPositionWithinSpineItem:(g,f)=>{const{bottom:y,left:S,right:w,top:v}=s.getSpineItemSpineLayoutInfo(f);return g.x>=S&&g.x<=w&&g.y<=y&&g.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(g,f)=>{const{height:y,width:S}=s.getSpineItemSpineLayoutInfo(f);return new F({x:Math.min(Math.max(0,g.x),S),y:Math.min(Math.max(0,g.y),y)})}}},$o=L.namespace("spine"),Vt=({position:n,pageSize:e})=>new Qe({...n,left:n.x,top:n.y,width:e.width,height:e.height,bottom:n.y+e.height,right:n.x+e.width});class Ut extends U{constructor(e,t,i,s,r,a){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=i,this.context=s,this.locator=r,this.viewport=a,this.fromSpineItemPageIndex=(c,u)=>this.value.pages.find(l=>l.itemIndex===c.index&&l.pageIndex===u),this.fromAbsolutePageIndex=c=>this.value.pages.reduce((u,l)=>u||(l.absolutePageIndex===c?l:u),void 0),this.observeFromAbsolutePageIndex=c=>this.pipe(o.map(()=>this.fromAbsolutePageIndex(c))),this.layout$=e.layout$.pipe(o.withLatestFrom(a),o.switchMap(([,{pageSize:c}])=>{const u=t.items.reduce((d,p,h)=>{const g=new Array(p.numberOfPages).fill(void 0).map((f,y)=>{const S=i.getSpineItemPositionFromPageIndex({spineItem:p,pageIndex:y}),w=r.getSpinePositionFromSpineItemPosition({spineItem:p,spineItemPosition:S});return{absoluteLayout:Vt({pageSize:c,position:w}),layout:new Ke({left:S.x,right:S.x+c.width,top:S.y,bottom:S.y+c.height,width:c.width,height:c.height,x:S.x,y:S.y}),itemIndex:h,absolutePageIndex:d.length+y,spineItem:p,pageIndex:y}});return[...d,...g]},[]);return o.combineLatest(u.map(d=>{const{spineItem:p,...h}=d;return new o.Observable(m=>{const g=d.spineItem.renderer?.getDocumentFrame();let f;g&&g?.contentWindow?.document&&g.contentWindow.document.body!==null&&(f=Yt(g.contentWindow.document,d.layout)),m.next({...h,firstVisibleNode:f})})}))}),o.map(c=>($o.info("Pages layout",c),{pages:c})),o.share()),this.layout$.pipe(o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class kt extends R{constructor(e,t){super(),this.spineItemsManager=e,this.spineLocator=t,this.itemIsReady$=this.spineItemsManager.items$.pipe(o.switchMap(i=>{const s=i.map(r=>r.isReady$.pipe(o.map(a=>({item:r,isReady:a}))));return o.merge(...s)}),o.share()),this.itemResize$=this.spineItemsManager.items$.pipe(o.switchMap(i=>{const s=i.map(r=>Z(r.element).pipe(o.map(a=>({entries:a,item:r}))));return o.merge(...s)}),o.share())}}const To=({horizontalOffset:n,verticalOffset:e,context:t,spineItemsManager:i,isGloballyPrePaginated:s,settings:r,index:a,item:c,viewport:u})=>{let l=u.value.pageSize.width,d="none";const p=n%u.absoluteViewport.width===0,h=a===i.items.length-1;if(r.values.computedSpreadMode){!s&&c.renditionLayout==="reflowable"&&!h&&(l=u.value.pageSize.width*2),!s&&c.renditionLayout==="reflowable"&&h&&p&&(l=u.value.pageSize.width*2);const g=p&&h&&s;c.item.pageSpreadRight&&p&&!t.isRTL()||c.item.pageSpreadLeft&&p&&t.isRTL()?(d="before",l=u.value.pageSize.width*2):g&&(t.isRTL()?d="before":d="after",l=u.value.pageSize.width*2)}return c.layout.layout({minimumWidth:l,blankPagePosition:d,spreadPosition:r.values.computedSpreadMode?p?t.isRTL()?"right":"left":t.isRTL()?"left":"right":"none"}).pipe(o.map(({width:g,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const w=p?e:e-u.absoluteViewport.height,v=p?0:n;t.isRTL()?c.layout.adjustPositionOfElement({top:w,left:v}):c.layout.adjustPositionOfElement({top:w,left:v});const T=g+v,P=f+w,E=new ee({left:v,right:T,top:w,bottom:P,height:f,width:g,x:v,y:w});return{horizontalOffset:T,verticalOffset:P,layoutPosition:E}}c.layout.adjustPositionOfElement(t.isRTL()?{right:n,top:0}:{left:n,top:0});const y=t.isRTL()?u.absoluteViewport.width-n-g:n,S=new ee({right:t.isRTL()?u.absoluteViewport.width-n:n+g,left:y,x:y,top:e,bottom:f,height:f,width:g,y:e});return{horizontalOffset:n+g,verticalOffset:0,layoutPosition:S}}))};class Mo extends R{constructor(e,t,i,s){super(),this.spineItemsManager=e,this.context=t,this.settings=i,this.viewport=s,this.layoutSubject=new o.Subject,this.spineItemsRelativeLayouts=[],e.items$.pipe(o.tap(()=>{this.spineItemsRelativeLayouts=[]}),o.switchMap(a=>{const c=a.map(l=>l.needsLayout$.pipe(o.tap(()=>{this.layout()}))),u=a.map(l=>l.loaded$.pipe(o.tap(()=>{l.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return o.merge(...c,...u)})).pipe(o.takeUntil(this.destroy$)).subscribe();const r=new o.BehaviorSubject(!1);this.layout$=this.layoutSubject.pipe(o.tap(()=>{this.spineItemsManager.items.forEach(a=>{a.markDirty()})}),o.debounceTime(50),o.exhaustMap(()=>r.pipe(o.filter(a=>!a),o.first())),o.exhaustMap(()=>{r.next(!0);const a=this.context.manifest,c=mt(a)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((l,d,p)=>l.pipe(o.concatMap(({horizontalOffset:h,verticalOffset:m})=>To({context:this.context,horizontalOffset:h,index:p,isGloballyPrePaginated:c,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(o.map(({horizontalOffset:g,verticalOffset:f,layoutPosition:y})=>(this.spineItemsRelativeLayouts[p]=y,{horizontalOffset:g,verticalOffset:f}))))),o.of({horizontalOffset:0,verticalOffset:0})),o.concatMap(l=>l),o.finalize(()=>{r.next(!1)}))}),o.share()),o.merge(this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(e){const t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new ee({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,t)=>e+t.numberOfPages,0)}destroy(){super.destroy(),this.layoutSubject.complete()}}class zt extends R{constructor(e,t,i,s,r,a,c){super(),this.context=e,this.pagination=t,this.spineItemsManager=i,this.spineItemLocator=s,this.settings=r,this.hookManager=a,this.viewport=c,this.elementSubject=new o.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new Mo(i,e,r,c),this.locator=Po({context:e,spineItemsManager:i,spineItemLocator:s,settings:r,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new fo(this.context,i,this.locator,r,this.spineLayout),this.spineItemsObserver=new kt(i,this.locator),this.pages=new Ut(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const u=e.watch("rootElement").pipe(I.filter(O),I.tap(d=>{const p=d.ownerDocument.createElement("div");p.style.cssText=`
264
+ `,i.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:i}),i};class So extends R{constructor(e,t,i,s,r){super(),this.context=e,this.spineItemsManager=t,this.spineLocator=i,this.settings=s,this.spineLayout=r,this.forcedOpenSubject=new o.BehaviorSubject([]);const a=this.forcedOpenSubject.pipe(o.map(l=>[...new Set(l.flat())].sort()),o.distinctUntilChanged($.arrayEqual),o.shareReplay({bufferSize:1,refCount:!0}));o.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,a,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(o.debounceTime(100,o.animationFrameScheduler),Y(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,a),o.map(([,l,d])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=s.values,{beginIndex:h=0,endIndex:m=0}=i.getVisibleSpineItemsFromPosition({position:l.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},g=p===1/0?0:h-p,f=p===1/0?t.items.length-1:m+p,y=Array.from({length:f-g+1},(w,v)=>g+v),S=[...d,...y];t.items.forEach((w,v)=>{S.includes(v)?w.load():w.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(i=>typeof i=="number"?i:i.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,t]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(i=>i!==t))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Nt=(n,e,t)=>{const i=(t.width-e.width)/2,s=(t.height-e.height)/2;return new U({x:n.x-i,y:n.y-s})};class X extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const s=e;return new X(s.x,s.y,t.width,t.height)}const i=e;return new X(i.x,i.y,i.width,i.height)}}class yo{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class bo{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const Io=({pageIndex:n,spineItemOrId:e,spineItemsManager:t})=>{const i=t.items,s=t.get(e);if(!s)return;const{currentAbsolutePage:r}=i.reduce((a,c)=>{if(a.found)return a;const u=c.numberOfPages;return s===c&&n<=u-1?{currentAbsolutePage:a.currentAbsolutePage+n,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+u}},{currentAbsolutePage:0,found:!1});return r},wo=({itemHeight:n,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:i,threshold:s})=>{const r=t/e,a=i/n;return s.type==="percentage"?r>=s.value&&a>=s.value:t>=s.value&&i>=s.value},vo=({visibleWidthOfItem:n,visibleHeightOfItem:e,threshold:t,viewportPosition:i})=>{const s=n/i.width,r=e/i.height;return t.type==="percentage"?r>=t.value&&s>=t.value:e>=t.value&&n>=t.value},Vt=({itemPosition:{bottom:n,left:e,right:t,top:i,width:s,height:r},threshold:a,viewportPosition:c,restrictToScreen:u})=>{const l=c.x,d=c.x+(c.width-1),p=c.y,h=Math.max(c.y+(c.height-1),0),m=Math.max(0,Math.min(t,d)-Math.max(e,l)),g=Math.max(0,Math.min(n,h)-Math.max(i,p));if(m<=0||g<=0)return{visible:!1};const y=vo({threshold:a,visibleHeightOfItem:g,visibleWidthOfItem:m,viewportPosition:c});return u?{visible:y}:{visible:wo({itemHeight:r,itemWidth:s,threshold:a,visibleHeightOfItem:g,visibleWidthOfItem:m})||y}},Ee=({position:n,spineItemsManager:e,spineLayout:t})=>{const i=e.items.find(s=>{const{left:r,right:a,bottom:c,top:u}=t.getSpineItemSpineLayoutInfo(s),l=n.x>=r&&n.x<a,d=n.y>=u&&n.y<c;return l&&d});return n.x===0&&!i?e.items[0]:i},Re=({spineItemPosition:n,itemLayout:{left:e,top:t}})=>new M({x:e+n.x,y:t+n.y}),Po=({position:n,threshold:e,restrictToScreen:t,spineItemsManager:i,spineLayout:s,useAbsoluteViewport:r=!0,viewport:a})=>{const c=Ee({position:n,spineItemsManager:i,spineLayout:s})||i.get(0),u=i.items.reduce((m,g)=>{const f=s.getSpineItemSpineLayoutInfo(g),y=r?a.absoluteViewport:a.relativeViewport,S=Nt(n,a.absoluteViewport,y),w=X.from(S,y),{visible:v}=Vt({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:t});return v?[...m,g]:m},[]),l=u[0]??c,d=u[u.length-1]??l;if(!l||!d)return;const p=i.getSpineItemIndex(l),h=i.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:h??0}},$o=({spineItemsManager:n,context:e,spineItemLocator:t,settings:i,spineLayout:s,viewport:r})=>{const a=(g,f)=>{const{left:y,top:S}=s.getSpineItemSpineLayoutInfo(f);return new F({x:Math.max(g.x-y,0),y:Math.max(g.y-S,0)})},c=g=>Re({spineItemPosition:new F({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(g)}),u=g=>n.items.find(f=>f.renderer.getDocumentFrame()===g),l=(g,f,y)=>{if(typeof y=="number"){const S=n.get(y);return S?t.getSpineItemPageIndexFromNode(g,f||0,S):void 0}return t.getSpineItemPageIndexFromNode(g,f||0,y)},d=({position:g,threshold:f,spineItem:y,restrictToScreen:S,useAbsoluteViewport:w=!0,viewport:v})=>{const T=y.numberOfPages,C=Array.from(Array(T)).map((_,ue)=>{const Ae=t.getSpineItemPositionFromPageIndex({pageIndex:ue,spineItem:y}),B=Re({spineItemPosition:Ae,itemLayout:s.getSpineItemSpineLayoutInfo(y)});return{index:ue,absolutePosition:{width:v.pageSize.width,height:v.pageSize.height,left:B.x,top:B.y,bottom:B.y+v.pageSize.height,right:B.x+v.pageSize.width}}}).reduce((_,{absolutePosition:ue,index:Ae})=>{const B=w?v.absoluteViewport:v.relativeViewport,Ao=Nt(g,v.absoluteViewport,B),Do=X.from(Ao,B),{visible:Oo}=Vt({viewportPosition:Do,restrictToScreen:S,threshold:f,itemPosition:ue});return Oo?[..._,Ae]:_},[]),D=C[0],A=C[C.length-1]??D;if(!(D===void 0||A===void 0))return{beginPageIndex:D,endPageIndex:A}};return{getSpinePositionFromSpineItemPosition:({spineItem:g,spineItemPosition:f})=>{const y=s.getSpineItemSpineLayoutInfo(g);return Re({itemLayout:y,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:g=>Io({...g,spineItemsManager:n}),getSpineItemPagePositionFromSpinePosition:g=>{const f=Ee({position:g,spineItemsManager:n,spineLayout:s});if(!f)return;const y=a(g,f),S=t.getSpineItemPageIndexFromPosition({itemWidth:f.layout.layoutInfo.width,itemHeight:f.layout.layoutInfo.height,position:y,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(y,S,f);return{spineItem:f,spineItemPageIndex:S,spineItemPagePosition:w,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:g=>Ee({position:g,spineItemsManager:n,spineLayout:s}),getSpineItemFromIframe:u,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:g=>Po({spineItemsManager:n,spineLayout:s,viewport:r,...g}),getVisiblePagesFromViewportPosition:g=>d({...g,viewport:r}),isPositionWithinSpineItem:(g,f)=>{const{bottom:y,left:S,right:w,top:v}=s.getSpineItemSpineLayoutInfo(f);return g.x>=S&&g.x<=w&&g.y<=y&&g.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(g,f)=>{const{height:y,width:S}=s.getSpineItemSpineLayoutInfo(f);return new F({x:Math.min(Math.max(0,g.x),S),y:Math.min(Math.max(0,g.y),y)})}}},To=L.namespace("spine"),Ut=({position:n,pageSize:e})=>new Qe({...n,left:n.x,top:n.y,width:e.width,height:e.height,bottom:n.y+e.height,right:n.x+e.width});class kt extends V{constructor(e,t,i,s,r,a){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=i,this.context=s,this.locator=r,this.viewport=a,this.fromSpineItemPageIndex=(c,u)=>this.value.pages.find(l=>l.itemIndex===c.index&&l.pageIndex===u),this.fromAbsolutePageIndex=c=>this.value.pages.reduce((u,l)=>u||(l.absolutePageIndex===c?l:u),void 0),this.observeFromAbsolutePageIndex=c=>this.pipe(o.map(()=>this.fromAbsolutePageIndex(c))),this.layout$=e.layout$.pipe(o.withLatestFrom(a),o.switchMap(([,{pageSize:c}])=>{const u=t.items.reduce((d,p,h)=>{const g=new Array(p.numberOfPages).fill(void 0).map((f,y)=>{const S=i.getSpineItemPositionFromPageIndex({spineItem:p,pageIndex:y}),w=r.getSpinePositionFromSpineItemPosition({spineItem:p,spineItemPosition:S});return{absoluteLayout:Ut({pageSize:c,position:w}),layout:new Ke({left:S.x,right:S.x+c.width,top:S.y,bottom:S.y+c.height,width:c.width,height:c.height,x:S.x,y:S.y}),itemIndex:h,absolutePageIndex:d.length+y,spineItem:p,pageIndex:y}});return[...d,...g]},[]);return o.combineLatest(u.map(d=>{const{spineItem:p,...h}=d;return new o.Observable(m=>{const g=d.spineItem.renderer?.getDocumentFrame();let f;g&&g?.contentWindow?.document&&g.contentWindow.document.body!==null&&(f=Xt(g.contentWindow.document,d.layout)),m.next({...h,firstVisibleNode:f})})}))}),o.map(c=>(To.info("Pages layout",c),{pages:c})),o.share()),this.layout$.pipe(o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class zt extends R{constructor(e,t){super(),this.spineItemsManager=e,this.spineLocator=t,this.itemIsReady$=this.spineItemsManager.items$.pipe(o.switchMap(i=>{const s=i.map(r=>r.isReady$.pipe(o.map(a=>({item:r,isReady:a}))));return o.merge(...s)}),o.share()),this.itemResize$=this.spineItemsManager.items$.pipe(o.switchMap(i=>{const s=i.map(r=>K(r.element).pipe(o.map(a=>({entries:a,item:r}))));return o.merge(...s)}),o.share())}}const Mo=({horizontalOffset:n,verticalOffset:e,context:t,spineItemsManager:i,isGloballyPrePaginated:s,settings:r,index:a,item:c,viewport:u})=>{let l=u.value.pageSize.width,d="none";const p=n%u.absoluteViewport.width===0,h=a===i.items.length-1;if(r.values.computedSpreadMode){!s&&c.renditionLayout==="reflowable"&&!h&&(l=u.value.pageSize.width*2),!s&&c.renditionLayout==="reflowable"&&h&&p&&(l=u.value.pageSize.width*2);const g=p&&h&&s;c.item.pageSpreadRight&&p&&!t.isRTL()||c.item.pageSpreadLeft&&p&&t.isRTL()?(d="before",l=u.value.pageSize.width*2):g&&(t.isRTL()?d="before":d="after",l=u.value.pageSize.width*2)}return c.layout.layout({minimumWidth:l,blankPagePosition:d,spreadPosition:r.values.computedSpreadMode?p?t.isRTL()?"right":"left":t.isRTL()?"left":"right":"none"}).pipe(o.map(({width:g,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const w=p?e:e-u.absoluteViewport.height,v=p?0:n;t.isRTL()?c.layout.adjustPositionOfElement({top:w,left:v}):c.layout.adjustPositionOfElement({top:w,left:v});const T=g+v,P=f+w,C=new ne({left:v,right:T,top:w,bottom:P,height:f,width:g,x:v,y:w});return{horizontalOffset:T,verticalOffset:P,layoutPosition:C}}c.layout.adjustPositionOfElement(t.isRTL()?{right:n,top:0}:{left:n,top:0});const y=t.isRTL()?u.absoluteViewport.width-n-g:n,S=new ne({right:t.isRTL()?u.absoluteViewport.width-n:n+g,left:y,x:y,top:e,bottom:f,height:f,width:g,y:e});return{horizontalOffset:n+g,verticalOffset:0,layoutPosition:S}}))};class Fo extends R{constructor(e,t,i,s){super(),this.spineItemsManager=e,this.context=t,this.settings=i,this.viewport=s,this.layoutSubject=new o.Subject,this.spineItemsRelativeLayouts=[],e.items$.pipe(o.tap(()=>{this.spineItemsRelativeLayouts=[]}),o.switchMap(a=>{const c=a.map(l=>l.needsLayout$.pipe(o.tap(()=>{this.layout()}))),u=a.map(l=>l.loaded$.pipe(o.tap(()=>{l.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return o.merge(...c,...u)})).pipe(o.takeUntil(this.destroy$)).subscribe();const r=new o.BehaviorSubject(!1);this.layout$=this.layoutSubject.pipe(o.tap(()=>{this.spineItemsManager.items.forEach(a=>{a.markDirty()})}),o.debounceTime(50),o.exhaustMap(()=>r.pipe(o.filter(a=>!a),o.first())),o.exhaustMap(()=>{r.next(!0);const a=this.context.manifest,c=ft(a)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((l,d,p)=>l.pipe(o.concatMap(({horizontalOffset:h,verticalOffset:m})=>Mo({context:this.context,horizontalOffset:h,index:p,isGloballyPrePaginated:c,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(o.map(({horizontalOffset:g,verticalOffset:f,layoutPosition:y})=>(this.spineItemsRelativeLayouts[p]=y,{horizontalOffset:g,verticalOffset:f}))))),o.of({horizontalOffset:0,verticalOffset:0})),o.concatMap(l=>l),o.finalize(()=>{r.next(!1)}))}),o.share()),o.merge(this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(e){const t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new ne({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,t)=>e+t.numberOfPages,0)}destroy(){super.destroy(),this.layoutSubject.complete()}}class Wt extends R{constructor(e,t,i,s,r,a,c){super(),this.context=e,this.pagination=t,this.spineItemsManager=i,this.spineItemLocator=s,this.settings=r,this.hookManager=a,this.viewport=c,this.elementSubject=new o.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new Fo(i,e,r,c),this.locator=$o({context:e,spineItemsManager:i,spineItemLocator:s,settings:r,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new So(this.context,i,this.locator,r,this.spineLayout),this.spineItemsObserver=new zt(i,this.locator),this.pages=new kt(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const u=e.watch("rootElement").pipe(I.filter(O),I.tap(d=>{const p=d.ownerDocument.createElement("div");p.style.cssText=`
265
265
  height: 100%;
266
266
  position: relative;
267
- `,p.className=`${C}-spine`,this.elementSubject.next(p)})),l=o.combineLatest([this.context.manifest$,this.element$]).pipe(I.tap(([d,p])=>{if(!p)return;this.spineItemsManager.destroyItems();const h=d.spineItems.map((m,g)=>new Ee(m,p,this.context,this.settings,this.hookManager,g,this.viewport));this.spineItemsManager.addMany(h)}));o.merge(l,u).pipe(I.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}getSpineItemSpineLayoutInfo(e){return this.spineLayout.getSpineItemSpineLayoutInfo(e)}get layout$(){return this.pages.layout$}destroy(){super.destroy(),this.pages.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue()?.remove(),this.elementSubject.complete()}}class Wt extends R{constructor(e,t){super(),this.context=e,this.settings=t,this.orderedSpineItemsSubject=new o.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(e){return typeof e=="number"?this.orderedSpineItemsSubject.value[e]:typeof e=="string"?this.orderedSpineItemsSubject.value.find(({item:t})=>t.id===e):e}comparePositionOf(e,t){const i=this.getSpineItemIndex(e)??0,s=this.getSpineItemIndex(t)??0;return i>s?"after":i===s?"same":"before"}getSpineItemIndex(e){const t=e instanceof Ee?e:this.get(e);if(!t)return;const i=this.orderedSpineItemsSubject.value.indexOf(t);return i<0?void 0:i}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:t}=ie(e);if(t!==void 0)return this.get(t)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>{e.destroy()})}}class _t extends U{constructor(e,t){const i=document.createElement("div");i.setAttribute(`data-${Ye}`,""),super({element:i,pageSize:{width:1,height:1},width:1,height:1}),this.context=e,this.settingsManager=t;const s=this.settingsManager.watch(["computedSpreadMode"]).pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize(this.value)})})),r=this.context.watch("rootElement").pipe(o.tap(()=>{this.layout()}));o.merge(s,r).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(e){const{computedSpreadMode:t}=this.settingsManager.values;return{width:t?e.width/2:e.width,height:e.height}}layout(){const e={width:this.value.element.clientWidth,height:this.value.element.clientHeight};this.mergeCompare({pageSize:this.calculatePageSize(e),...e})}get absoluteViewport(){return new So({width:this.value.width,height:this.value.height})}get pageSize(){return this.value.pageSize}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,t=this.scaleFactor;return new yo({width:e.width/t,height:e.height/t})}}const Ht=`${be}-core`,Fo=n=>{const e=crypto.randomUUID(),t=new o.Subject,i=new o.Subject,s=new yt,r=new ft,a=new po(n,r),c=new St(r,a),u=new Wt(r,a),l=new _t(r,a),d=Lt({context:r,settings:a,viewport:l}),p=new Rt(r,u),h=new zt(r,p,u,d,a,s,l),m=uo({context:r,spineItemsManager:u,hookManager:s,spine:h,settings:a,viewport:l}),g=new At(r,p,u,h,d);m.viewportState$.subscribe(r.bridgeEvent.viewportStateSubject),m.navigation$.subscribe(r.bridgeEvent.navigationSubject),m.locker.isLocked$.subscribe(r.bridgeEvent.navigationIsLockedSubject),p.subscribe(r.bridgeEvent.paginationSubject);const f=()=>{t.next()},y=P=>{const{containerElement:E,manifest:D}=P;if(r.manifest){L.warn("loading a new book is not supported yet");return}L.log("load",{options:P});const A=Lo(E,e);r.update({manifest:D,rootElement:A}),f()},S=a.watch(["computedSpreadMode"]).pipe(I.skip(1),I.tap(f)),w=t.pipe(I.tap(()=>{const P=r.value.rootElement;P&&(P.style.setProperty("overflow","hidden"),l.layout(),h.layout())}),I.takeUntil(i)),v=o.merge(w,S).subscribe();de(document,Ht,Vi);const T=()=>{pe(document,Ht),v.unsubscribe(),u.destroy(),g.destroy(),a.destroy(),p.destroy(),r.destroy(),m.destroy(),h.destroy(),c.destroy(),i.next(),i.complete(),l.destroy()};return{id:e,context:r,spine:h,hookManager:s,cfi:{generateCfiFromRange:st,parseCfi:ie,generateCfiForSpineItemPage:P=>te({...P,spine:h}),resolveCfi:P=>we({...P,spineItemsManager:u})},navigation:m,spineItemsObserver:h.spineItemsObserver,spineItemsManager:u,layout:f,load:y,destroy:T,pagination:{get state(){return p.value},get state$(){return p}},settings:a,renderHeadless:P=>u.get(P)?.renderer.renderHeadless()??o.of(void 0),viewport:l,viewportState$:r.bridgeEvent.viewportState$,viewportFree$:r.bridgeEvent.viewportFree$,state$:r.manifest$.pipe(I.map(P=>P?"ready":"idle")),features:c,$:{destroy$:i}}},Lo=(n,e)=>(n.style.cssText=`
267
+ `,p.className=`${E}-spine`,this.elementSubject.next(p)})),l=o.combineLatest([this.context.manifest$,this.element$]).pipe(I.tap(([d,p])=>{if(!p)return;this.spineItemsManager.destroyItems();const h=d.spineItems.map((m,g)=>new Ce(m,p,this.context,this.settings,this.hookManager,g,this.viewport));this.spineItemsManager.addMany(h)}));o.merge(l,u).pipe(I.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}getSpineItemSpineLayoutInfo(e){return this.spineLayout.getSpineItemSpineLayoutInfo(e)}get layout$(){return this.pages.layout$}destroy(){super.destroy(),this.pages.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue()?.remove(),this.elementSubject.complete()}}class _t extends R{constructor(e,t){super(),this.context=e,this.settings=t,this.orderedSpineItemsSubject=new o.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(e){return typeof e=="number"?this.orderedSpineItemsSubject.value[e]:typeof e=="string"?this.orderedSpineItemsSubject.value.find(({item:t})=>t.id===e):e}comparePositionOf(e,t){const i=this.getSpineItemIndex(e)??0,s=this.getSpineItemIndex(t)??0;return i>s?"after":i===s?"same":"before"}getSpineItemIndex(e){const t=e instanceof Ce?e:this.get(e);if(!t)return;const i=this.orderedSpineItemsSubject.value.indexOf(t);return i<0?void 0:i}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:t}=se(e);if(t!==void 0)return this.get(t)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>{e.destroy()})}}class Ht extends V{constructor(e,t){const i=document.createElement("div");i.setAttribute(`data-${Ye}`,""),super({element:i,pageSize:{width:1,height:1},width:1,height:1}),this.context=e,this.settingsManager=t;const s=this.settingsManager.watch(["computedSpreadMode"]).pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize(this.value)})})),r=this.context.watch("rootElement").pipe(o.tap(()=>{this.layout()}));o.merge(s,r).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(e){const{computedSpreadMode:t}=this.settingsManager.values;return{width:t?e.width/2:e.width,height:e.height}}layout(){const e={width:this.value.element.clientWidth,height:this.value.element.clientHeight};this.mergeCompare({pageSize:this.calculatePageSize(e),...e})}get absoluteViewport(){return new yo({width:this.value.width,height:this.value.height})}get pageSize(){return this.value.pageSize}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,t=this.scaleFactor;return new bo({width:e.width/t,height:e.height/t})}}const Bt=`${be}-core`,Lo=n=>{const e=crypto.randomUUID(),t=new o.Subject,i=new o.Subject,s=new bt,r=new St,a=new go(n,r),c=new yt(r,a),u=new _t(r,a),l=new Ht(r,a),d=Ct({context:r,settings:a,viewport:l}),p=new At(r,u),h=new Wt(r,p,u,d,a,s,l),m=lo({context:r,spineItemsManager:u,hookManager:s,spine:h,settings:a,viewport:l}),g=new Dt(r,p,u,h,d);m.navigationState$.subscribe(r.bridgeEvent.viewportStateSubject),m.navigation$.subscribe(r.bridgeEvent.navigationSubject),m.locker.isLocked$.subscribe(r.bridgeEvent.navigationIsLockedSubject),p.subscribe(r.bridgeEvent.paginationSubject);const f=()=>{t.next()},y=P=>{const{containerElement:C,manifest:D}=P;if(r.manifest){L.warn("loading a new book is not supported yet");return}L.log("load",{options:P});const A=Co(C,e);r.update({manifest:D,rootElement:A}),f()},S=a.watch(["computedSpreadMode"]).pipe(I.skip(1),I.tap(f)),w=t.pipe(I.tap(()=>{const P=r.value.rootElement;P&&(P.style.setProperty("overflow","hidden"),l.layout(),h.layout())}),I.takeUntil(i)),v=o.merge(w,S).subscribe();q(document,Bt,Ui);const T=()=>{G(document,Bt),v.unsubscribe(),u.destroy(),g.destroy(),a.destroy(),p.destroy(),r.destroy(),m.destroy(),h.destroy(),c.destroy(),i.next(),i.complete(),l.destroy()};return{id:e,context:r,spine:h,hookManager:s,cfi:{generateCfiFromRange:st,parseCfi:se,generateCfiForSpineItemPage:P=>ie({...P,spine:h}),resolveCfi:P=>we({...P,spineItemsManager:u})},navigation:m,spineItemsObserver:h.spineItemsObserver,spineItemsManager:u,layout:f,load:y,destroy:T,pagination:{get state(){return p.value},get state$(){return p}},settings:a,renderHeadless:P=>u.get(P)?.renderer.renderHeadless()??o.of(void 0),viewport:l,viewportState$:r.bridgeEvent.viewportState$,viewportFree$:r.bridgeEvent.viewportFree$,state$:r.manifest$.pipe(I.map(P=>P?"ready":"idle")),features:c,$:{destroy$:i}}},Co=(n,e)=>(n.style.cssText=`
268
268
  ${n.style.cssText}
269
269
  background-color: white;
270
270
  position: relative;
271
- `,n.classList.add(`${C}-reader`),n.setAttribute(xe,e),n),Eo=$i(ln(Bn(Fi(un(en(bi(Mi(Oi(ii(Je(Yn(tn(Ti(ut(je(sn(Fo))))))))))))))))),Co=n=>e=>n(e);Object.defineProperty(b,"isShallowEqual",{enumerable:!0,get:()=>$.isShallowEqual}),b.AbstractSpinePosition=Ie,b.Context=ft,b.ControlledNavigationController=It,b.DestroyableClass=R,b.DocumentRenderer=x,b.Features=St,b.HTML_ATTRIBUTE_DATA_READER_ID=xe,b.HTML_PREFIX=C,b.HTML_PREFIX_SCROLL_NAVIGATOR=Xe,b.HTML_PREFIX_VIEWPORT=Ye,b.HTML_STYLE_PREFIX=be,b.HookManager=yt,b.ITEM_EXTENSION_VALID_FOR_FRAME_SRC=Be,b.InternalNavigator=$t,b.LayoutEntry=Q,b.Locker=Te,b.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=bn,b.PROSE_READER_NAMESPACE=Sn,b.Pages=Ut,b.Pagination=Rt,b.PaginationController=At,b.ReactiveEntity=U,b.ResourceHandler=J,b.ResourcesLocator=ct,b.ScrollNavigationController=gt,b.ScrollPosition=Pe,b.SettingsManager=Dt,b.Spine=zt,b.SpineItem=Ee,b.SpineItemPageLayout=Ke,b.SpineItemPageSpineLayout=Qe,b.SpineItemPosition=F,b.SpineItemSpineLayout=ee,b.SpineItemsManager=Wt,b.SpineItemsObserver=kt,b.SpinePosition=M,b.UnboundScrollPosition=pt,b.UnboundSpineItemPagePosition=j,b.UnboundSpinePosition=V,b.VIEWPORT_ADJUSTMENT_THROTTLE=yn,b.Viewport=_t,b.consolidate=at,b.createReader=Eo,b.deferIdle=Se,b.deferNextResult=We,b.generateCfiForSpineItemPage=te,b.generateCfiFromRange=st,b.generateRootCfi=H,b.getAttributeValueFromString=ge,b.getBase64FromBlob=an,b.getFrameViewportInfo=q,b.getItemAnchor=hi,b.htmlEnhancer=Je,b.idle=fe,b.injectCSS=Ue,b.isDefined=O,b.isHtmlElement=le,b.isHtmlTagElement=Ve,b.isRootCfi=ne,b.layoutEnhancer=je,b.mapKeysTo=me,b.observeIntersection=rn,b.observeMutation=ye,b.observeResize=Z,b.paginationEnhancer=ut,b.parseCfi=ie,b.removeCSS=jt,b.resolveCfi=we,b.rootEnhancer=Co,b.spinePositionToSpineItemSpineLayout=Vt,b.upsertCSSToFrame=N,b.waitForFrameLoad=ke,b.waitForFrameReady=ze,b.waitForSwitch=Y,b.watchKeys=G,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})}));
271
+ `,n.classList.add(`${E}-reader`),n.setAttribute(xe,e),n.setAttribute("data-prose-reader-container",e),n),Eo=Ti(dn(xn(Li(ln(tn(Ii(Fi(Ni(oi(Je(Xn(nn(Mi(ut(je(rn(Lo))))))))))))))))),Ro=n=>e=>n(e);Object.defineProperty(b,"isShallowEqual",{enumerable:!0,get:()=>$.isShallowEqual}),b.AbstractSpinePosition=Ie,b.Context=St,b.ControlledNavigationController=wt,b.DestroyableClass=R,b.DocumentRenderer=x,b.Features=yt,b.HTML_ATTRIBUTE_DATA_READER_ID=xe,b.HTML_PREFIX=E,b.HTML_PREFIX_SCROLL_NAVIGATOR=Xe,b.HTML_PREFIX_VIEWPORT=Ye,b.HTML_STYLE_PREFIX=be,b.HookManager=bt,b.ITEM_EXTENSION_VALID_FOR_FRAME_SRC=Be,b.InternalNavigator=Tt,b.LayoutEntry=ee,b.Locker=Te,b.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=In,b.PROSE_READER_NAMESPACE=yn,b.Pages=kt,b.Pagination=At,b.PaginationController=Dt,b.ReactiveEntity=V,b.ResourceHandler=Q,b.ResourcesLocator=ct,b.ScrollNavigationController=ht,b.ScrollPosition=Pe,b.SettingsManager=Ot,b.Spine=Wt,b.SpineItem=Ce,b.SpineItemPageLayout=Ke,b.SpineItemPageSpineLayout=Qe,b.SpineItemPosition=F,b.SpineItemSpineLayout=ne,b.SpineItemsManager=_t,b.SpineItemsObserver=zt,b.SpinePosition=M,b.UnboundScrollPosition=gt,b.UnboundSpineItemPagePosition=te,b.UnboundSpinePosition=U,b.VIEWPORT_ADJUSTMENT_THROTTLE=bn,b.Viewport=Ht,b.consolidate=at,b.createReader=Eo,b.deferIdle=Se,b.deferNextResult=We,b.generateCfiForSpineItemPage=ie,b.generateCfiFromRange=st,b.generateRootCfi=H,b.getAttributeValueFromString=ge,b.getBase64FromBlob=cn,b.getFrameViewportInfo=Z,b.getItemAnchor=mi,b.htmlEnhancer=Je,b.idle=fe,b.injectCSSToFrame=Ue,b.isDefined=O,b.isHtmlElement=pe,b.isHtmlTagElement=Ve,b.isRootCfi=oe,b.layoutEnhancer=je,b.mapKeysTo=me,b.observeIntersection=an,b.observeMutation=ye,b.observeResize=K,b.paginationEnhancer=ut,b.parseCfi=se,b.removeCSS=en,b.resolveCfi=we,b.rootEnhancer=Ro,b.spinePositionToSpineItemSpineLayout=Ut,b.upsertCSSToFrame=N,b.waitForFrameLoad=ke,b.waitForFrameReady=ze,b.waitForSwitch=Y,b.watchKeys=J,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})}));
272
272
  //# sourceMappingURL=index.umd.cjs.map