@prose-reader/core 1.215.0 → 1.216.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($,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):($=typeof globalThis<"u"?globalThis:$||self,o($.prose={},$.rxjs,$.shared,$.operators,$.cfi))})(this,function($,o,M,b,W){"use strict";const et=(e,t)=>{const i=new RegExp(`${t}\\s*=\\s*([0-9.]+)`,"i"),n=e.match(i)||[],s=n[1]||"0";return n&&Number.parseFloat(s)||0},Mt=(e,t,i,n)=>{var s;if((s=e==null?void 0:e.contentDocument)!=null&&s.head){const r=e.contentDocument.createElement("style");r.id=t,r.innerHTML=i,n?e.contentDocument.head.prepend(r):e.contentDocument.head.appendChild(r)}},Tt=(e,t)=>{var i;if((i=e==null?void 0:e.contentDocument)!=null&&i.head){const n=e.contentDocument.getElementById(t);n&&n.remove()}},N=(e,t,i,n)=>{e&&(Tt(e,t),Mt(e,t,i,n))},Z=e=>{if(e!=null&&e.contentDocument){const i=e.contentDocument.querySelector("meta[name='viewport']");if(i){const n=i.getAttribute("content");if(n){const s=et(n,"width"),r=et(n,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},Ft=e=>e.pipe(o.switchMap(t=>{var i;return t.src==="about:blank"&&((i=t.contentDocument)==null?void 0:i.readyState)==="complete"&&t.contentDocument.body?o.of(t):o.fromEvent(t,"load").pipe(o.take(1),o.map(()=>t))})),Lt=e=>e.pipe(o.switchMap(t=>{var i;return o.from(((i=t==null?void 0:t.contentDocument)==null?void 0:i.fonts.ready)||o.of(void 0)).pipe(o.map(()=>t))})),ae=e=>t=>{const i=e(t),n=new IntersectionObserver(s=>{s.forEach(r=>{r.isIntersecting?r.target.removeAttribute("tab-index"):r.target.setAttribute("tab-index","-1")})},{});return i.hookManager.register("item.onDocumentLoad",({itemId:s,destroy:r})=>{var l;const a=i.spineItemsManager.get(s);if(!a)return;const c=a.renderer.getDocumentFrame();if(!c)return;N(c,"prose-reader-accessibility",`
1
+ (function($,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):($=typeof globalThis<"u"?globalThis:$||self,o($.prose={},$.rxjs,$.shared,$.operators,$.cfi))})(this,function($,o,M,b,E){"use strict";const et=(e,t)=>{const i=new RegExp(`${t}\\s*=\\s*([0-9.]+)`,"i"),n=e.match(i)||[],s=n[1]||"0";return n&&Number.parseFloat(s)||0},$t=(e,t,i,n)=>{var s;if((s=e==null?void 0:e.contentDocument)!=null&&s.head){const r=e.contentDocument.createElement("style");r.id=t,r.innerHTML=i,n?e.contentDocument.head.prepend(r):e.contentDocument.head.appendChild(r)}},Mt=(e,t)=>{var i;if((i=e==null?void 0:e.contentDocument)!=null&&i.head){const n=e.contentDocument.getElementById(t);n&&n.remove()}},N=(e,t,i,n)=>{e&&(Mt(e,t),$t(e,t,i,n))},Z=e=>{if(e!=null&&e.contentDocument){const i=e.contentDocument.querySelector("meta[name='viewport']");if(i){const n=i.getAttribute("content");if(n){const s=et(n,"width"),r=et(n,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},Tt=e=>e.pipe(o.switchMap(t=>{var i;return t.src==="about:blank"&&((i=t.contentDocument)==null?void 0:i.readyState)==="complete"&&t.contentDocument.body?o.of(t):o.fromEvent(t,"load").pipe(o.take(1),o.map(()=>t))})),Ft=e=>e.pipe(o.switchMap(t=>{var i;return o.from(((i=t==null?void 0:t.contentDocument)==null?void 0:i.fonts.ready)||o.of(void 0)).pipe(o.map(()=>t))})),ae=e=>t=>{const i=e(t),n=new IntersectionObserver(s=>{s.forEach(r=>{r.isIntersecting?r.target.removeAttribute("tab-index"):r.target.setAttribute("tab-index","-1")})},{});return i.hookManager.register("item.onDocumentLoad",({itemId:s,destroy:r})=>{var l;const a=i.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=(l=c.contentDocument)==null?void 0:l.body.querySelectorAll("a");u==null||u.forEach(d=>{n.observe(d)}),r(()=>{u==null||u.forEach(d=>{n.unobserve(d)})})}),{...i}},ce=e=>t=>{const i=e(t);return i.context.state$.pipe(o.takeUntil(i.$.destroy$)).subscribe(({containerElement:n})=>{if(!n)return;const s=()=>{i.settings.values.computedPageTurnMode==="controlled"&&n.scrollTo(0,0)};n.addEventListener("scroll",s)}),i.hookManager.register("item.onDocumentLoad",({itemId:n})=>{var a;const s=i.spineItemsManager.get(n),r=s==null?void 0:s.renderer.getDocumentFrame();r&&((a=r.contentDocument)==null||a.body.setAttribute("tabindex","-1"))}),i},A=M.Report.namespace("@prose-reader/core"),ue=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"],it=e=>typeof e=="object"&&!!e&&"nodeType"in e&&(e==null?void 0:e.nodeType)===Node.ELEMENT_NODE;function le(e,t,i){if("caretPositionFromPoint"in e)return e.caretPositionFromPoint(t,i);if("caretRangeFromPoint"in e&&typeof e.caretRangeFromPoint<"u")return e.caretRangeFromPoint(t,i)}const de=(e,t)=>{const i="body"in e?nt(e.body,t):nt(e,t),n="createRange"in e?e:e.ownerDocument;if(i){let s,r=0;const a=n.createRange();return Array.from(i.childNodes).some(c=>{a.selectNodeContents(c);const u=a.getClientRects(),l=ge(u,t);if(l){s=a.cloneRange();const d=le(n,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:i,offset:0}}},nt=(e,t)=>{let i;const n=Ct(e.getBoundingClientRect(),t);return n!=="before"&&n!=="after"&&(i=e),Array.from(e.children).some(s=>{const r=nt(s,t);return r?(i=r,!0):!1}),i};function Ct(e,{left:t,right:i}){return e.left<=t&&e.right<=t?"before":e.left<=t&&e.right>t&&e.right<=i?"partially-before":e.left<=i&&e.right>i?"partially-after":e.left>i?"after":"within"}function ge(e,t){return Array.from(e).find(i=>{const n=Ct(i,t);return n!=="before"&&n!=="after"})}const pe=(e,t)=>{var i;if(e.nodeType!==Node.CDATA_SECTION_NODE&&e.nodeType!==Node.DOCUMENT_TYPE_NODE){const n=(i=e.ownerDocument)==null?void 0:i.createRange();n==null||n.selectNodeContents(e);try{t<=((n==null?void 0:n.endOffset)||0)&&(n==null||n.setStart(e,t||0))}catch(s){A.error(s)}return n}},ot=e=>{var t,i,n,s,r;if(e!=null&&e.target&&((i=(t=e==null?void 0:e.target)==null?void 0:t.ownerDocument)!=null&&i.defaultView)){const a=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(a.PointerEvent&&e instanceof a.PointerEvent)return!0}if((r=e==null?void 0:e.view)!=null&&r.window){const a=e==null?void 0:e.view;if(a.PointerEvent&&e instanceof a.PointerEvent)return!0}return!!ue.includes(e.type)},he=e=>{var t,i,n,s,r;if(ot(e))return!1;if(e!=null&&e.target&&((i=(t=e==null?void 0:e.target)==null?void 0:t.ownerDocument)!=null&&i.defaultView)){const a=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(a.MouseEvent)return e instanceof a.MouseEvent}if((r=e==null?void 0:e.view)!=null&&r.window){const a=e==null?void 0:e.view;if(a.MouseEvent)return e instanceof a.MouseEvent}return!1},me=e=>{var t,i,n,s,r;if(e!=null&&e.target&&((i=(t=e==null?void 0:e.target)==null?void 0:t.ownerDocument)!=null&&i.defaultView)){const a=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(a.TouchEvent)return e instanceof a.TouchEvent}if((r=e==null?void 0:e.view)!=null&&r.window){const a=e==null?void 0:e.view;if(a.TouchEvent)return e instanceof a.TouchEvent}return!1},fe=()=>document.createElement("div"),Rt=e=>{const t=["img","video","audio","source","link","script"].join(",");return Array.from((e==null?void 0:e.querySelectorAll(t))||[])},Se=e=>{if(Rt(e).forEach(i=>{var s;const n=i.getAttribute("src")||i.getAttribute("href");n!=null&&n.startsWith("blob:")&&((s=e==null?void 0:e.defaultView)==null||s.URL.revokeObjectURL(n))}),e){const i=Array.from(e.styleSheets||[]);for(const n of i){const s=Array.from(n.cssRules||[]);for(const r of s)if(e.defaultView&&r instanceof e.defaultView.CSSFontFaceRule){const c=r.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);c&&c.forEach(u=>{var l;(l=e==null?void 0:e.defaultView)==null||l.URL.revokeObjectURL(u)})}}}};function At(e,t){return it(e)&&e.tagName.toLowerCase()===t.toLowerCase()}const st=({position:e,frameElement:t})=>{const i=t.getBoundingClientRect(),n=i.width/t.offsetWidth,s=i.height/t.offsetHeight,{left:r=0,top:a=0}=i,c=e.clientX*n+r,u=e.clientY*s+a;return{clientX:c,clientY:u}},be=(e,t,i,n)=>{var l;const s=(l=t==null?void 0:t.view)==null?void 0:l.frameElement;if(!t||!s)return e;const r=i.getSpineItemFromIframe(s),a=s,{height:c,width:u}=n.getPageSize();if(!r||!(a instanceof HTMLIFrameElement))return e;if(ot(e)){const{clientX:d,clientY:g}=st({position:e,frameElement:a}),p=new PointerEvent(e.type,{...e,pointerId:e.pointerId,clientX:d,clientY:g});return Object.defineProperty(p,"target",{value:t.target,enumerable:!0}),p}if(he(e)){const{clientX:d,clientY:g}=st({position:e,frameElement:a}),p=new MouseEvent(e.type,{...e,clientX:d,clientY:g});return Object.defineProperty(p,"target",{value:t.target,enumerable:!0}),p}if(me(e)){const d=Array.from(e.touches).map(p=>{const{clientX:h,clientY:m}=st({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:h,clientY:m})}),g=new TouchEvent(e.type,{touches:d,changedTouches:d,targetTouches:d});return Object.defineProperty(g,"target",{value:t.target,enumerable:!0}),g}return e},ye=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],we=e=>t=>{const i=e(t);return i.hookManager.register("item.onDocumentLoad",({destroy:n,itemId:s})=>{const r=i.spineItemsManager.get(s),a=r==null?void 0:r.renderer.getDocumentFrame();if(!a||!r)return;const c=ye.map(u=>{var d;const l=g=>{var h;let p=g;if(ot(g)&&(p=new PointerEvent(g.type,g)),p!==g){const m=be(p,g,i.spine.locator,i.context);(h=i.context.state.containerElement)==null||h.dispatchEvent(m)}};return(d=a.contentDocument)==null||d.addEventListener(u,l),()=>{var g;(g=a.contentDocument)==null||g.removeEventListener(u,l)}});n(()=>{c.forEach(u=>u())})}),i},rt=e=>b.map(t=>Object.entries(t).reduce((i,[n,s])=>e.includes(n)?{...i,[n]:s}:i,{})),G=e=>t=>t.pipe(rt(e),b.distinctUntilChanged(M.isShallowEqual));function at(e){return new o.Observable(t=>{const i=new ResizeObserver(n=>{t.next(n)});return i.observe(e),()=>{i.disconnect()}})}const _=e=>t=>t.pipe(b.switchMap(i=>e.pipe(b.first(),b.map(()=>i)))),Ot=e=>{let t;const i=e.subscribe(n=>{t={result:n}});return()=>(i.unsubscribe(),t?o.of(t.result):e)};function ct(){return new o.Observable(e=>{if(window.requestIdleCallback){const i=window.requestIdleCallback(()=>{e.next(),e.complete()});return()=>cancelIdleCallback(i)}const t=setTimeout(()=>{e.next(),e.complete()},1);return()=>clearTimeout(t)})}function ut(e){return o.defer(()=>ct().pipe(b.switchMap(e)))}const lt=(e,t)=>new o.Observable(i=>{const n=new MutationObserver(s=>{i.next(s)});return n.observe(e,t),()=>n.disconnect()});function Ie(e,t){return new o.Observable(i=>{const n=new IntersectionObserver(s=>{i.next(s)},t);return n.observe(e),()=>{n.disconnect()}})}class Dt{constructor(t,i){this.settingsManager=i;const n=M.shallowMergeIfDefined(this.getDefaultSettings(),t);this.outputSettings=this.computeOutputSettings(n),this.inputSettings=M.shallowMergeIfDefined(this.getDefaultSettings(),t),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(b.startWith(this.outputSettings))]).pipe(b.map(([s,r])=>({...s,...r})),b.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(t){const i=this.getCleanedParentInputSettings(t),n=this.settingsManager._prepareUpdate(i),s=M.shallowMergeIfDefined(this.inputSettings,t),r=this.computeOutputSettings(s),a=this.hasSettingsChanged(r);return{hasChanged:a||n.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!n.hasChanged&&a&&this.outputSettingsUpdateSubject.next(r),{...n.commit(),...r})}}update(t){const{commit:i}=this._prepareUpdate(t);i()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(t){return Array.isArray(t)?this.values$.pipe(G(t)):this.values$.pipe(b.map(i=>i[t]),b.distinctUntilChanged(M.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}const Pe=e=>{const t=new FileReader;return new Promise(i=>{t.addEventListener("load",()=>{i(t.result)},!1),t.readAsDataURL(e)})};let ve=class extends Dt{computeOutputSettings(t){return t}hasSettingsChanged(t){return!M.isShallowEqual(this.outputSettings,t)}getCleanedParentInputSettings(t){const{fontJustification:i,fontScale:n,fontWeight:s,lineHeight:r,...a}=t;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const $e=e=>t=>{const{fontScale:i,lineHeight:n,fontWeight:s,fontJustification:r}=t,a=new o.Subject,c=e(t),u=new ve({fontScale:i,lineHeight:n,fontWeight:s,fontJustification:r},c.settings),l=()=>`
6
+ `);const u=(l=c.contentDocument)==null?void 0:l.body.querySelectorAll("a");u==null||u.forEach(d=>{n.observe(d)}),r(()=>{u==null||u.forEach(d=>{n.unobserve(d)})})}),{...i}},ce=e=>t=>{const i=e(t);return i.context.state$.pipe(o.takeUntil(i.$.destroy$)).subscribe(({containerElement:n})=>{if(!n)return;const s=()=>{i.settings.values.computedPageTurnMode==="controlled"&&n.scrollTo(0,0)};n.addEventListener("scroll",s)}),i.hookManager.register("item.onDocumentLoad",({itemId:n})=>{var a;const s=i.spineItemsManager.get(n),r=s==null?void 0:s.renderer.getDocumentFrame();r&&((a=r.contentDocument)==null||a.body.setAttribute("tabindex","-1"))}),i},A=M.Report.namespace("@prose-reader/core"),ue=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"],it=e=>typeof e=="object"&&!!e&&"nodeType"in e&&(e==null?void 0:e.nodeType)===Node.ELEMENT_NODE;function le(e,t,i){if("caretPositionFromPoint"in e)return e.caretPositionFromPoint(t,i);if("caretRangeFromPoint"in e&&typeof e.caretRangeFromPoint<"u")return e.caretRangeFromPoint(t,i)}const de=(e,t)=>{const i="body"in e?nt(e.body,t):nt(e,t),n="createRange"in e?e:e.ownerDocument;if(i){let s,r=0;const a=n.createRange();return Array.from(i.childNodes).some(c=>{a.selectNodeContents(c);const u=a.getClientRects(),l=ge(u,t);if(l){s=a.cloneRange();const d=le(n,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:i,offset:0}}},nt=(e,t)=>{let i;const n=Lt(e.getBoundingClientRect(),t);return n!=="before"&&n!=="after"&&(i=e),Array.from(e.children).some(s=>{const r=nt(s,t);return r?(i=r,!0):!1}),i};function Lt(e,{left:t,right:i}){return e.left<=t&&e.right<=t?"before":e.left<=t&&e.right>t&&e.right<=i?"partially-before":e.left<=i&&e.right>i?"partially-after":e.left>i?"after":"within"}function ge(e,t){return Array.from(e).find(i=>{const n=Lt(i,t);return n!=="before"&&n!=="after"})}const pe=(e,t)=>{var i;if(e.nodeType!==Node.CDATA_SECTION_NODE&&e.nodeType!==Node.DOCUMENT_TYPE_NODE){const n=(i=e.ownerDocument)==null?void 0:i.createRange();n==null||n.selectNodeContents(e);try{t<=((n==null?void 0:n.endOffset)||0)&&(n==null||n.setStart(e,t||0))}catch(s){A.error(s)}return n}},ot=e=>{var t,i,n,s,r;if(e!=null&&e.target&&((i=(t=e==null?void 0:e.target)==null?void 0:t.ownerDocument)!=null&&i.defaultView)){const a=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(a.PointerEvent&&e instanceof a.PointerEvent)return!0}if((r=e==null?void 0:e.view)!=null&&r.window){const a=e==null?void 0:e.view;if(a.PointerEvent&&e instanceof a.PointerEvent)return!0}return!!ue.includes(e.type)},he=e=>{var t,i,n,s,r;if(ot(e))return!1;if(e!=null&&e.target&&((i=(t=e==null?void 0:e.target)==null?void 0:t.ownerDocument)!=null&&i.defaultView)){const a=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(a.MouseEvent)return e instanceof a.MouseEvent}if((r=e==null?void 0:e.view)!=null&&r.window){const a=e==null?void 0:e.view;if(a.MouseEvent)return e instanceof a.MouseEvent}return!1},me=e=>{var t,i,n,s,r;if(e!=null&&e.target&&((i=(t=e==null?void 0:e.target)==null?void 0:t.ownerDocument)!=null&&i.defaultView)){const a=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(a.TouchEvent)return e instanceof a.TouchEvent}if((r=e==null?void 0:e.view)!=null&&r.window){const a=e==null?void 0:e.view;if(a.TouchEvent)return e instanceof a.TouchEvent}return!1},fe=()=>document.createElement("div"),Ct=e=>{const t=["img","video","audio","source","link","script"].join(",");return Array.from((e==null?void 0:e.querySelectorAll(t))||[])},Se=e=>{if(Ct(e).forEach(i=>{var s;const n=i.getAttribute("src")||i.getAttribute("href");n!=null&&n.startsWith("blob:")&&((s=e==null?void 0:e.defaultView)==null||s.URL.revokeObjectURL(n))}),e){const i=Array.from(e.styleSheets||[]);for(const n of i){const s=Array.from(n.cssRules||[]);for(const r of s)if(e.defaultView&&r instanceof e.defaultView.CSSFontFaceRule){const c=r.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);c&&c.forEach(u=>{var l;(l=e==null?void 0:e.defaultView)==null||l.URL.revokeObjectURL(u)})}}}};function Rt(e,t){return it(e)&&e.tagName.toLowerCase()===t.toLowerCase()}const st=({position:e,frameElement:t})=>{const i=t.getBoundingClientRect(),n=i.width/t.offsetWidth,s=i.height/t.offsetHeight,{left:r=0,top:a=0}=i,c=e.clientX*n+r,u=e.clientY*s+a;return{clientX:c,clientY:u}},be=(e,t,i,n)=>{var l;const s=(l=t==null?void 0:t.view)==null?void 0:l.frameElement;if(!t||!s)return e;const r=i.getSpineItemFromIframe(s),a=s,{height:c,width:u}=n.getPageSize();if(!r||!(a instanceof HTMLIFrameElement))return e;if(ot(e)){const{clientX:d,clientY:g}=st({position:e,frameElement:a}),p=new PointerEvent(e.type,{...e,pointerId:e.pointerId,clientX:d,clientY:g});return Object.defineProperty(p,"target",{value:t.target,enumerable:!0}),p}if(he(e)){const{clientX:d,clientY:g}=st({position:e,frameElement:a}),p=new MouseEvent(e.type,{...e,clientX:d,clientY:g});return Object.defineProperty(p,"target",{value:t.target,enumerable:!0}),p}if(me(e)){const d=Array.from(e.touches).map(p=>{const{clientX:h,clientY:m}=st({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:h,clientY:m})}),g=new TouchEvent(e.type,{touches:d,changedTouches:d,targetTouches:d});return Object.defineProperty(g,"target",{value:t.target,enumerable:!0}),g}return e},ye=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],we=e=>t=>{const i=e(t);return i.hookManager.register("item.onDocumentLoad",({destroy:n,itemId:s})=>{const r=i.spineItemsManager.get(s),a=r==null?void 0:r.renderer.getDocumentFrame();if(!a||!r)return;const c=ye.map(u=>{var d;const l=g=>{var h;let p=g;if(ot(g)&&(p=new PointerEvent(g.type,g)),p!==g){const m=be(p,g,i.spine.locator,i.context);(h=i.context.state.containerElement)==null||h.dispatchEvent(m)}};return(d=a.contentDocument)==null||d.addEventListener(u,l),()=>{var g;(g=a.contentDocument)==null||g.removeEventListener(u,l)}});n(()=>{c.forEach(u=>u())})}),i},rt=e=>b.map(t=>Object.entries(t).reduce((i,[n,s])=>e.includes(n)?{...i,[n]:s}:i,{})),G=e=>t=>t.pipe(rt(e),b.distinctUntilChanged(M.isShallowEqual));function at(e){return new o.Observable(t=>{const i=new ResizeObserver(n=>{t.next(n)});return i.observe(e),()=>{i.disconnect()}})}const _=e=>t=>t.pipe(b.switchMap(i=>e.pipe(b.first(),b.map(()=>i)))),At=e=>{let t;const i=e.subscribe(n=>{t={result:n}});return()=>(i.unsubscribe(),t?o.of(t.result):e)};function ct(){return new o.Observable(e=>{if(window.requestIdleCallback){const i=window.requestIdleCallback(()=>{e.next(),e.complete()});return()=>cancelIdleCallback(i)}const t=setTimeout(()=>{e.next(),e.complete()},1);return()=>clearTimeout(t)})}function ut(e){return o.defer(()=>ct().pipe(b.switchMap(e)))}const lt=(e,t)=>new o.Observable(i=>{const n=new MutationObserver(s=>{i.next(s)});return n.observe(e,t),()=>n.disconnect()});function Ie(e,t){return new o.Observable(i=>{const n=new IntersectionObserver(s=>{i.next(s)},t);return n.observe(e),()=>{n.disconnect()}})}class Ot{constructor(t,i){this.settingsManager=i;const n=M.shallowMergeIfDefined(this.getDefaultSettings(),t);this.outputSettings=this.computeOutputSettings(n),this.inputSettings=M.shallowMergeIfDefined(this.getDefaultSettings(),t),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(b.startWith(this.outputSettings))]).pipe(b.map(([s,r])=>({...s,...r})),b.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(t){const i=this.getCleanedParentInputSettings(t),n=this.settingsManager._prepareUpdate(i),s=M.shallowMergeIfDefined(this.inputSettings,t),r=this.computeOutputSettings(s),a=this.hasSettingsChanged(r);return{hasChanged:a||n.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!n.hasChanged&&a&&this.outputSettingsUpdateSubject.next(r),{...n.commit(),...r})}}update(t){const{commit:i}=this._prepareUpdate(t);i()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(t){return Array.isArray(t)?this.values$.pipe(G(t)):this.values$.pipe(b.map(i=>i[t]),b.distinctUntilChanged(M.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}const Pe=e=>{const t=new FileReader;return new Promise(i=>{t.addEventListener("load",()=>{i(t.result)},!1),t.readAsDataURL(e)})};let ve=class extends Ot{computeOutputSettings(t){return t}hasSettingsChanged(t){return!M.isShallowEqual(this.outputSettings,t)}getCleanedParentInputSettings(t){const{fontJustification:i,fontScale:n,fontWeight:s,lineHeight:r,...a}=t;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const $e=e=>t=>{const{fontScale:i,lineHeight:n,fontWeight:s,fontJustification:r}=t,a=new o.Subject,c=e(t),u=new ve({fontScale:i,lineHeight:n,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=p=>{c.spineItemsManager.items.forEach(h=>{if(h.renditionLayout!=="pre-paginated"){const m=h.renderer.getDocumentFrame();m&&N(m,"prose-reader-fonts",l())}}),p&&c.layout()};c.hookManager.register("item.onDocumentLoad",({itemId:p})=>{const h=c.spineItemsManager.get(p);if((h==null?void 0:h.renditionLayout)!=="pre-paginated"){const m=h==null?void 0:h.renderer.getDocumentFrame();m&&N(m,"prose-reader-fonts",l())}});const g=p=>p.pipe(b.pairwise(),o.map(([h,m])=>m.fontScale!==h.fontScale||m.lineHeight!==h.lineHeight));return u.values$.pipe(g,b.tap(d),o.takeUntil(c.$.destroy$)).subscribe(),{...c,destroy:()=>{a.complete(),u.destroy(),c.destroy()},settings:u}},Me=e=>t=>{const i=e(t),n=s=>o.fromEvent(s,"keyup").pipe(o.withLatestFrom(i.settings.values$),o.map(([r,{pageTurnDirection:a}])=>{if(a==="horizontal"){if(r.key==="ArrowRight")return i.navigation.turnRight();if(r.key==="ArrowLeft")return i.navigation.turnLeft()}if(a==="vertical"){if(r.key==="ArrowDown")return i.navigation.turnRight();if(r.key==="ArrowUp")return i.navigation.turnLeft()}return r}));return n(document).pipe(o.takeUntil(i.$.destroy$)).subscribe(),i.spineItemsManager.items$.pipe(o.switchMap(s=>o.merge(...s.map(r=>r.loaded$.pipe(o.switchMap(()=>{const a=r.renderer.getDocumentFrame();return a instanceof HTMLIFrameElement&&(a!=null&&a.contentDocument)?n(a.contentDocument):o.EMPTY}))))),o.takeUntil(i.$.destroy$)).subscribe(),i},Te=e=>e.spine.spineItemsManager.items$.pipe(o.switchMap(t=>o.merge(...t.map(i=>i.loaded$.pipe(o.switchMap(()=>{const n=i.renderer.getDocumentFrame();if(!n||!(n!=null&&n.contentDocument))return o.NEVER;const r=Array.from(n.contentDocument.querySelectorAll("a")).map(a=>o.fromEvent(a,"click"));return o.merge(...r)}))))),o.tap(t=>{t.preventDefault()}),o.share());class O{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 tt=class tt extends O{constructor(t){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=t.context,this.settings=t.settings,this.hookManager=t.hookManager,this.item=t.item,this.containerElement=t.containerElement,this.resourcesHandler=t.resourcesHandler;const i=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share());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(_(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.tap(()=>{this.stateSubject.next("loaded")}),o.takeUntil(o.merge(this.destroy$,i)))))).subscribe();const n=i.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(n).pipe(o.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(t){this._documentContainer=t,this._documentContainer.classList.add(tt.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){var t;(t=this._documentContainer)==null||t.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(o.map(t=>t==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const t=new o.Subject;return o.defer(()=>this.onRenderHeadless({release:t})).pipe(o.endWith(void 0),o.first(),o.map(i=>{if(i)return{doc:i,release:()=>{t.next(void 0)}}}),o.finalize(()=>{t.complete()}),o.catchError(i=>(A.error(i),o.of(void 0))))}layout(t){return o.defer(()=>this.onLayout(t))}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this._documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){var n;const t=this.item.renditionLayout;if(t)return t;const i=this.getDocumentFrame();if(i){const{hasViewport:s}=Z(i);if(s)return"pre-paginated"}return((n=this.context.manifest)==null?void 0:n.renditionLayout)??"reflowable"}};tt.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let z=tt;const Fe=e=>new URL(e.href);class J{constructor(t,i){this.item=t,this.settings=i}async getResource(){var i,n;return await o.lastValueFrom(((n=(i=this.settings.values).getResource)==null?void 0:n.call(i,this.item))??o.of(void 0))??Fe(this.item)}async fetchResource(){const t=await this.getResource();return t instanceof Response?t:t instanceof URL?fetch(t):t}}const Nt=(e,t)=>{const i=e.startsWith("file://"),n=i?e.replace("file://","http://"):e,s=new URL(t,n).toString();return i?s.replace("http://","file://"):s},Le=async(e,t,i,n,s)=>{if(!e||!e.defaultView)return;const r=t.sheet;if(r)try{const a=Array.from(r.cssRules||[]);for(let c=0;c<a.length;c++){const u=a[c];if(e.defaultView&&u instanceof e.defaultView.CSSFontFaceRule){const l=u.style.getPropertyValue("src");if(l.match(/url\(['"]?([^'"]+)['"]?\)/g)){const g=l.split(",").map(m=>m.trim()),p=await Promise.all(g.map(async m=>{var y,I;if(m.startsWith("local("))return m;const f=m.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return m;const w=f[1]??"",S=(y=n.manifest)==null?void 0:y.items.find(({href:P})=>`${Nt(i,w).toLowerCase()}`.endsWith(`${P.toLowerCase()}`));if(S){const P=new J(S,s);try{const v=await P.getResource();if(v instanceof Response){const T=await v.blob(),L=(I=e.defaultView)==null?void 0:I.URL.createObjectURL(T);return m.replace(f[0],`url("${L}")`)}}catch(v){console.error("Error loading font:",v)}}return m})),h=u.cssText.replace(/src:\s*[^;]+;/,`src: ${p.join(", ")};`);r.deleteRule(c),r.insertRule(h,c)}}}}catch(a){console.error("Could not access stylesheet rules:",a)}},Ce=(e,t,i,n,s)=>{var u;const r=t.getAttribute("src")||t.getAttribute("href");if(!r)return o.of(null);const a=(u=n.manifest)==null?void 0:u.items.find(({href:l})=>`${Nt(i,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!a)return o.of(null);const c=new J(a,s);return o.from(c.getResource()).pipe(o.mergeMap(l=>l instanceof Response?o.from(l.blob()):o.of(void 0)),o.mergeMap(l=>{var g;if(!l)return o.of(null);const d=((g=e==null?void 0:e.defaultView)==null?void 0:g.URL.createObjectURL(l))??"";if(t.hasAttribute("src"))t.setAttribute("src",d);else if(t.hasAttribute("href")&&(t.setAttribute("href",d),e!=null&&e.defaultView&&t instanceof e.defaultView.HTMLLinkElement))return new o.Observable(p=>{t.onload=async()=>{try{t.sheet&&await Le(e,t,i,n,s),p.next(),p.complete()}catch(h){p.error(h)}},t.onerror=p.error});return o.of(null)}))},Re=({settings:e,item:t,context:i})=>n=>n.pipe(o.switchMap(s=>{const r=Rt(s.contentDocument),a=M.getParentPath(t.href),c=r.map(u=>Ce(s.contentDocument,u,a,i,e));return o.combineLatest(c).pipe(o.map(()=>s))})),Ae=e=>{Se(e==null?void 0:e.contentDocument)},Oe=[".xhtml",".html",".htm"],H="prose-reader",De=e=>new Promise((t,i)=>{const n=new Image;n.src=e,n.onload=()=>{t({height:n.naturalHeight,width:n.naturalWidth})},n.onerror=i}),Ne=async(e,t)=>{if(typeof e=="string")return e;const i=M.parseContentType(e.headers.get("Content-Type")||"")||M.detectMimeTypeFromName(t.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(s=>s===i)){const s=await Pe(await e.blob()),{height:r,width:a}=await De(s);return`
14
+ `,d=p=>{c.spineItemsManager.items.forEach(h=>{if(h.renditionLayout!=="pre-paginated"){const m=h.renderer.getDocumentFrame();m&&N(m,"prose-reader-fonts",l())}}),p&&c.layout()};c.hookManager.register("item.onDocumentLoad",({itemId:p})=>{const h=c.spineItemsManager.get(p);if((h==null?void 0:h.renditionLayout)!=="pre-paginated"){const m=h==null?void 0:h.renderer.getDocumentFrame();m&&N(m,"prose-reader-fonts",l())}});const g=p=>p.pipe(b.pairwise(),o.map(([h,m])=>m.fontScale!==h.fontScale||m.lineHeight!==h.lineHeight));return u.values$.pipe(g,b.tap(d),o.takeUntil(c.$.destroy$)).subscribe(),{...c,destroy:()=>{a.complete(),u.destroy(),c.destroy()},settings:u}},Me=e=>t=>{const i=e(t),n=s=>o.fromEvent(s,"keyup").pipe(o.withLatestFrom(i.settings.values$),o.map(([r,{pageTurnDirection:a}])=>{if(a==="horizontal"){if(r.key==="ArrowRight")return i.navigation.turnRight();if(r.key==="ArrowLeft")return i.navigation.turnLeft()}if(a==="vertical"){if(r.key==="ArrowDown")return i.navigation.turnRight();if(r.key==="ArrowUp")return i.navigation.turnLeft()}return r}));return n(document).pipe(o.takeUntil(i.$.destroy$)).subscribe(),i.spineItemsManager.items$.pipe(o.switchMap(s=>o.merge(...s.map(r=>r.loaded$.pipe(o.switchMap(()=>{const a=r.renderer.getDocumentFrame();return a instanceof HTMLIFrameElement&&(a!=null&&a.contentDocument)?n(a.contentDocument):o.EMPTY}))))),o.takeUntil(i.$.destroy$)).subscribe(),i},Te=e=>e.spine.spineItemsManager.items$.pipe(o.switchMap(t=>o.merge(...t.map(i=>i.loaded$.pipe(o.switchMap(()=>{const n=i.renderer.getDocumentFrame();if(!n||!(n!=null&&n.contentDocument))return o.NEVER;const r=Array.from(n.contentDocument.querySelectorAll("a")).map(a=>o.fromEvent(a,"click"));return o.merge(...r)}))))),o.tap(t=>{t.preventDefault()}),o.share());class O{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 tt=class tt extends O{constructor(t){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=t.context,this.settings=t.settings,this.hookManager=t.hookManager,this.item=t.item,this.containerElement=t.containerElement,this.resourcesHandler=t.resourcesHandler;const i=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share());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(_(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.tap(()=>{this.stateSubject.next("loaded")}),o.takeUntil(o.merge(this.destroy$,i)))))).subscribe();const n=i.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(n).pipe(o.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(t){this._documentContainer=t,this._documentContainer.classList.add(tt.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){var t;(t=this._documentContainer)==null||t.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(o.map(t=>t==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const t=new o.Subject;return o.defer(()=>this.onRenderHeadless({release:t})).pipe(o.endWith(void 0),o.first(),o.map(i=>{if(i)return{doc:i,release:()=>{t.next(void 0)}}}),o.finalize(()=>{t.complete()}),o.catchError(i=>(A.error(i),o.of(void 0))))}layout(t){return o.defer(()=>this.onLayout(t))}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this._documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){var n;const t=this.item.renditionLayout;if(t)return t;const i=this.getDocumentFrame();if(i){const{hasViewport:s}=Z(i);if(s)return"pre-paginated"}return((n=this.context.manifest)==null?void 0:n.renditionLayout)??"reflowable"}};tt.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let z=tt;const Fe=e=>new URL(e.href);class J{constructor(t,i){this.item=t,this.settings=i}async getResource(){var i,n;return await o.lastValueFrom(((n=(i=this.settings.values).getResource)==null?void 0:n.call(i,this.item))??o.of(void 0))??Fe(this.item)}async fetchResource(){const t=await this.getResource();return t instanceof Response?t:t instanceof URL?fetch(t):t}}const Dt=(e,t)=>{const i=e.startsWith("file://"),n=i?e.replace("file://","http://"):e,s=new URL(t,n).toString();return i?s.replace("http://","file://"):s},Le=async(e,t,i,n,s)=>{if(!e||!e.defaultView)return;const r=t.sheet;if(r)try{const a=Array.from(r.cssRules||[]);for(let c=0;c<a.length;c++){const u=a[c];if(e.defaultView&&u instanceof e.defaultView.CSSFontFaceRule){const l=u.style.getPropertyValue("src");if(l.match(/url\(['"]?([^'"]+)['"]?\)/g)){const g=l.split(",").map(m=>m.trim()),p=await Promise.all(g.map(async m=>{var y,I;if(m.startsWith("local("))return m;const f=m.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return m;const w=f[1]??"",S=(y=n.manifest)==null?void 0:y.items.find(({href:P})=>`${Dt(i,w).toLowerCase()}`.endsWith(`${P.toLowerCase()}`));if(S){const P=new J(S,s);try{const v=await P.getResource();if(v instanceof Response){const T=await v.blob(),L=(I=e.defaultView)==null?void 0:I.URL.createObjectURL(T);return m.replace(f[0],`url("${L}")`)}}catch(v){console.error("Error loading font:",v)}}return m})),h=u.cssText.replace(/src:\s*[^;]+;/,`src: ${p.join(", ")};`);r.deleteRule(c),r.insertRule(h,c)}}}}catch(a){console.error("Could not access stylesheet rules:",a)}},Ce=(e,t,i,n,s)=>{var u;const r=t.getAttribute("src")||t.getAttribute("href");if(!r)return o.of(null);const a=(u=n.manifest)==null?void 0:u.items.find(({href:l})=>`${Dt(i,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!a)return o.of(null);const c=new J(a,s);return o.from(c.getResource()).pipe(o.mergeMap(l=>l instanceof Response?o.from(l.blob()):o.of(void 0)),o.mergeMap(l=>{var g;if(!l)return o.of(null);const d=((g=e==null?void 0:e.defaultView)==null?void 0:g.URL.createObjectURL(l))??"";if(t.hasAttribute("src"))t.setAttribute("src",d);else if(t.hasAttribute("href")&&(t.setAttribute("href",d),e!=null&&e.defaultView&&t instanceof e.defaultView.HTMLLinkElement))return new o.Observable(p=>{t.onload=async()=>{try{t.sheet&&await Le(e,t,i,n,s),p.next(),p.complete()}catch(h){p.error(h)}},t.onerror=p.error});return o.of(null)}))},Re=({settings:e,item:t,context:i})=>n=>n.pipe(o.switchMap(s=>{const r=Ct(s.contentDocument),a=M.getParentPath(t.href),c=r.map(u=>Ce(s.contentDocument,u,a,i,e));return o.combineLatest(c).pipe(o.map(()=>s))})),Ae=e=>{Se(e==null?void 0:e.contentDocument)},Oe=[".xhtml",".html",".htm"],H="prose-reader",De=e=>new Promise((t,i)=>{const n=new Image;n.src=e,n.onload=()=>{t({height:n.naturalHeight,width:n.naturalWidth})},n.onerror=i}),Ne=async(e,t)=>{if(typeof e=="string")return e;const i=M.parseContentType(e.headers.get("Content-Type")||"")||M.detectMimeTypeFromName(t.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(s=>s===i)){const s=await Pe(await e.blob()),{height:r,width:a}=await De(s);return`
15
15
  <html>
16
16
  <head>
17
17
  ${t.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${a}, height=${r}">`:""}
@@ -48,13 +48,13 @@
48
48
  background-color: transparent;
49
49
  border: 0px none transparent;
50
50
  padding: 0px;
51
- `,e.setAttribute("role","main"),e},Vt=()=>`
51
+ `,e.setAttribute("role","main"),e},Nt=()=>`
52
52
  body {
53
53
  margin: 0;
54
54
  }
55
55
  }
56
- `,kt=({pageHeight:e,pageWidth:t,frameElement:i})=>{const n=Z(i);if(i!=null&&i.contentDocument&&i.contentWindow&&n){const s=t/(n.width??1);return{computedScale:Math.min(s,e/(n.height??1)),computedWidthScale:s,viewportDimensions:n}}},Ue=({columnWidth:e,enableTouch:t,spreadPosition:i},n)=>`
57
- ${Vt()}
56
+ `,Vt=({pageHeight:e,pageWidth:t,frameElement:i})=>{const n=Z(i);if(i!=null&&i.contentDocument&&i.contentWindow&&n){const s=t/(n.width??1);return{computedScale:Math.min(s,e/(n.height??1)),computedWidthScale:s,viewportDimensions:n}}},Ue=({columnWidth:e,enableTouch:t,spreadPosition:i},n)=>`
57
+ ${Nt()}
58
58
  body {
59
59
  ${n?"":`
60
60
  display: flex;
@@ -94,8 +94,8 @@
94
94
  object-fit:contain;
95
95
  `}
96
96
  }
97
- `,Ee=({pageHeight:e,pageWidth:t})=>({columnHeight:e,columnWidth:t}),Ut=(e,t)=>{e.style.width=`${t.width}px`,e.style.height=`${t.height}px`},We=({minPageSpread:e,blankPagePosition:t,spreadPosition:i,pageHeight:n,pageWidth:s,frameElement:r,isRTL:a,enableTouch:c})=>{const u=e*s;if(r!=null&&r.contentDocument&&(r!=null&&r.contentWindow)){const{viewportDimensions:l,computedScale:d=1}=kt({frameElement:r,pageHeight:n,pageWidth:s})??{},g=s,p=n,h=Ue({...Ee({pageHeight:n,pageWidth:s}),enableTouch:c,spreadPosition:i},l);if(N(r,"prose-reader-css",h),l?Ut(r,{width:l.width??1,height:l.height??1}):Ut(r,{width:g,height:p}),l){r==null||r.style.setProperty("position","absolute"),r==null||r.style.setProperty("top","50%"),i==="left"?(r==null||r.style.setProperty("right","0"),r==null||r.style.removeProperty("left")):t==="before"&&a?(r==null||r.style.setProperty("right","50%"),r==null||r.style.removeProperty("left")):i==="right"?(r==null||r.style.setProperty("left","0"),r==null||r.style.removeProperty("right")):(r==null||r.style.setProperty("left",t==="before"?a?"25%":"75%":t==="after"?a?"75%":"25%":"50%"),r==null||r.style.removeProperty("right"));const m=i!=="none"?"0":"-50%",f=i==="right"&&t!=="before"?"left":i==="left"||t==="before"&&a?"right":"center";r==null||r.style.setProperty("transform",`translate(${m}, -50%) scale(${d})`),r==null||r.style.setProperty("transform-origin",`${f} center`)}else t==="before"?a?r==null||r.style.setProperty("margin-right",`${s}px`):r==null||r.style.setProperty("margin-left",`${s}px`):(r==null||r.style.removeProperty("margin-left"),r==null||r.style.removeProperty("margin-right"));return{width:u,height:p}}return{width:u,height:n}},ze=()=>`
98
- ${Vt()}
97
+ `,Ee=({pageHeight:e,pageWidth:t})=>({columnHeight:e,columnWidth:t}),kt=(e,t)=>{e.style.width=`${t.width}px`,e.style.height=`${t.height}px`},We=({minPageSpread:e,blankPagePosition:t,spreadPosition:i,pageHeight:n,pageWidth:s,frameElement:r,isRTL:a,enableTouch:c})=>{const u=e*s;if(r!=null&&r.contentDocument&&(r!=null&&r.contentWindow)){const{viewportDimensions:l,computedScale:d=1}=Vt({frameElement:r,pageHeight:n,pageWidth:s})??{},g=s,p=n,h=Ue({...Ee({pageHeight:n,pageWidth:s}),enableTouch:c,spreadPosition:i},l);if(N(r,"prose-reader-css",h),l?kt(r,{width:l.width??1,height:l.height??1}):kt(r,{width:g,height:p}),l){r==null||r.style.setProperty("position","absolute"),r==null||r.style.setProperty("top","50%"),i==="left"?(r==null||r.style.setProperty("right","0"),r==null||r.style.removeProperty("left")):t==="before"&&a?(r==null||r.style.setProperty("right","50%"),r==null||r.style.removeProperty("left")):i==="right"?(r==null||r.style.setProperty("left","0"),r==null||r.style.removeProperty("right")):(r==null||r.style.setProperty("left",t==="before"?a?"25%":"75%":t==="after"?a?"75%":"25%":"50%"),r==null||r.style.removeProperty("right"));const m=i!=="none"?"0":"-50%",f=i==="right"&&t!=="before"?"left":i==="left"||t==="before"&&a?"right":"center";r==null||r.style.setProperty("transform",`translate(${m}, -50%) scale(${d})`),r==null||r.style.setProperty("transform-origin",`${f} center`)}else t==="before"?a?r==null||r.style.setProperty("margin-right",`${s}px`):r==null||r.style.setProperty("margin-left",`${s}px`):(r==null||r.style.removeProperty("margin-left"),r==null||r.style.removeProperty("margin-right"));return{width:u,height:p}}return{width:u,height:n}},ze=()=>`
98
+ ${Nt()}
99
99
  html {
100
100
  width: 100%;
101
101
  height: 100%;
@@ -195,14 +195,14 @@
195
195
  td {
196
196
  max-width: ${i}px;
197
197
  }
198
- `,_e=({isUsingVerticalWriting:e,minimumWidth:t,pageHeight:i,pageWidth:n})=>{let a=n-0;const c=i-0*2;let u=n-0*2;return e&&(u=t-0*2,a=c),{columnHeight:c,columnWidth:a,width:u}},K=(e,t)=>{e.style.width=`${t.width}px`,e.style.height=`${t.height}px`},qe=({pageHeight:e,pageWidth:t,frameElement:i,manifest:n,latestContentHeightWhenLoaded:s,minPageSpread:r,isRTL:a,blankPagePosition:c,isImageType:u,enableTouch:l,isUsingVerticalWriting:d})=>{const g=r*t;let p=s;const h=(n==null?void 0:n.renditionLayout)==="reflowable"&&(n==null?void 0:n.renditionFlow)==="scrolled-continuous",m=h?Math.min(400,e):e;i==null||i.style.setProperty("width",`${t}px`),h||i==null||i.style.setProperty("height",`${m}px`);const{viewportDimensions:f,computedScale:w=1}=kt({frameElement:i,pageHeight:m,pageWidth:t})??{},S=(n==null?void 0:n.renditionLayout)==="pre-paginated";if(i!=null&&i.contentDocument&&(i!=null&&i.contentWindow)){let I=t,P=m;if(f!=null&&f.hasViewport)N(i,"prose-reader-html-renderer-framce-css",ze()),K(i,{width:f.width??1,height:f.height??1}),i==null||i.style.setProperty("position","absolute"),i==null||i.style.setProperty("top","50%"),i==null||i.style.setProperty("left",c==="before"?a?"25%":"75%":c==="after"?a?"75%":"25%":"50%"),i==null||i.style.setProperty("transform",`translate(-50%, -50%) scale(${w})`),i==null||i.style.setProperty("transform-origin","center center");else{const T=u?He({isScrollable:(n==null?void 0:n.renditionFlow)==="scrolled-continuous",enableTouch:l}):Be(_e({isUsingVerticalWriting:d,minimumWidth:g,pageHeight:m,pageWidth:t}));if(N(i,"prose-reader-css",T,!0),d)P=Math.ceil(i.contentDocument.documentElement.scrollHeight/m)*m,K(i,{width:g,height:P});else if((n==null?void 0:n.renditionFlow)==="scrolled-continuous")P=i.contentDocument.body.scrollHeight,p=P,K(i,{width:g,height:P});else{const L=Math.ceil(i.contentDocument.documentElement.scrollWidth/t);S?I=t:I=L*t,K(i,{width:I,height:P})}}return I%g===0?i==null||i.style.setProperty("margin-left","0px"):(I=I+t,a&&!d&&(i==null||i.style.setProperty("margin-left",`${t}px`))),{width:I,height:P}}return{width:g,height:p||m,latestContentHeightWhenLoaded:p}};class xe extends z{constructor(){super(...arguments),this.isImageType=()=>{const t=this.item.mediaType??M.detectMimeTypeFromName(this.item.href);return!!(t!=null&&t.startsWith("image/"))}}onCreateDocument(){const t=ke();return this.setDocumentContainer(t),o.of(t)}onLoadDocument(){const t=this.getFrameElement();if(!t)throw new Error("invalid frame");return o.of(t).pipe(Ve({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),_(this.context.bridgeEvent.viewportFree$),o.tap(()=>{this.attach()}),Ft,Re({context:this.context,item:this.item,settings:this.settings}),Lt)}onUnload(){return Ae(this.getFrameElement()),this.detach(),o.EMPTY}onLayout({minPageSpread:t,blankPagePosition:i,spreadPosition:n}){var d,g;const{width:s,height:r}=this.context.getPageSize(),a=this.getFrameElement();if(!a)return o.of(void 0);const c=!!((d=this.writingMode)!=null&&d.startsWith("vertical"));if(this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&((g=this.context.manifest)==null?void 0:g.renditionLayout)==="pre-paginated"){const p=We({blankPagePosition:i,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:a,isRTL:this.context.isRTL(),minPageSpread:t,pageHeight:r,pageWidth:s,spreadPosition:n});return o.of(p)}const{latestContentHeightWhenLoaded:u,...l}=qe({pageHeight:r,pageWidth:s,frameElement:a,manifest:this.context.manifest,blankPagePosition:i,isUsingVerticalWriting:c,isRTL:this.context.isRTL(),latestContentHeightWhenLoaded:this.latestContentHeightWhenLoaded,minPageSpread:t,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode!=="scrollable"});return this.latestContentHeightWhenLoaded=u,o.of(l)}onRenderHeadless(){return o.from(this.resourcesHandler.fetchResource()).pipe(o.switchMap(t=>{if(t instanceof Response){const i=t.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(i))return o.from(t.text()).pipe(o.map(s=>new DOMParser().parseFromString(s,i)))}return o.of(void 0)}))}getFrameElement(){const t=this.documentContainer;if(t instanceof HTMLIFrameElement)return t}getComputedStyleAfterLoad(){var n,s;const t=this.getFrameElement(),i=(n=t==null?void 0:t.contentDocument)==null?void 0:n.body;if(i)return(s=t==null?void 0:t.contentWindow)==null?void 0:s.getComputedStyle(i)}get writingMode(){var t;return(t=this.getComputedStyleAfterLoad())==null?void 0:t.writingMode}get readingDirection(){var n;if(this.writingMode==="vertical-rl")return"rtl";switch((n=this.getComputedStyleAfterLoad())==null?void 0:n.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const Ye=e=>t=>{const i=e({...t,getRenderer(s){var a;return((a=t.getRenderer)==null?void 0:a.call(t,s))??(c=>new xe(c))}}),n=Te(i);return n.pipe(o.takeUntil(i.$.destroy$)).subscribe(),{...i,links$:n}};function E(e){return e!=null}let Xe=class extends Dt{computeOutputSettings(t){return t}hasSettingsChanged(t){return!M.isShallowEqual(this.outputSettings,t)}getCleanedParentInputSettings(t){const{layoutAutoResize:i,pageHorizontalMargin:n,pageVerticalMargin:s,layoutLayerTransition:r,viewportMode:a,...c}=t;return c}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0,viewportMode:"normal"}}};const Ze=e=>{let t;const i=e.context.state$.pipe(b.switchMap(({containerElement:u})=>u?new o.Observable(()=>(t=u.ownerDocument.createElement("div"),t.style.cssText=`
198
+ `,_e=({isUsingVerticalWriting:e,minimumWidth:t,pageHeight:i,pageWidth:n})=>{let a=n-0;const c=i-0*2;let u=n-0*2;return e&&(u=t-0*2,a=c),{columnHeight:c,columnWidth:a,width:u}},K=(e,t)=>{e.style.width=`${t.width}px`,e.style.height=`${t.height}px`},qe=({pageHeight:e,pageWidth:t,frameElement:i,manifest:n,latestContentHeightWhenLoaded:s,minPageSpread:r,isRTL:a,blankPagePosition:c,isImageType:u,enableTouch:l,isUsingVerticalWriting:d})=>{const g=r*t;let p=s;const h=(n==null?void 0:n.renditionLayout)==="reflowable"&&(n==null?void 0:n.renditionFlow)==="scrolled-continuous",m=h?Math.min(400,e):e;i==null||i.style.setProperty("width",`${t}px`),h||i==null||i.style.setProperty("height",`${m}px`);const{viewportDimensions:f,computedScale:w=1}=Vt({frameElement:i,pageHeight:m,pageWidth:t})??{},S=(n==null?void 0:n.renditionLayout)==="pre-paginated";if(i!=null&&i.contentDocument&&(i!=null&&i.contentWindow)){let I=t,P=m;if(f!=null&&f.hasViewport)N(i,"prose-reader-html-renderer-framce-css",ze()),K(i,{width:f.width??1,height:f.height??1}),i==null||i.style.setProperty("position","absolute"),i==null||i.style.setProperty("top","50%"),i==null||i.style.setProperty("left",c==="before"?a?"25%":"75%":c==="after"?a?"75%":"25%":"50%"),i==null||i.style.setProperty("transform",`translate(-50%, -50%) scale(${w})`),i==null||i.style.setProperty("transform-origin","center center");else{const T=u?He({isScrollable:(n==null?void 0:n.renditionFlow)==="scrolled-continuous",enableTouch:l}):Be(_e({isUsingVerticalWriting:d,minimumWidth:g,pageHeight:m,pageWidth:t}));if(N(i,"prose-reader-css",T,!0),d)P=Math.ceil(i.contentDocument.documentElement.scrollHeight/m)*m,K(i,{width:g,height:P});else if((n==null?void 0:n.renditionFlow)==="scrolled-continuous")P=i.contentDocument.body.scrollHeight,p=P,K(i,{width:g,height:P});else{const L=Math.ceil(i.contentDocument.documentElement.scrollWidth/t);S?I=t:I=L*t,K(i,{width:I,height:P})}}return I%g===0?i==null||i.style.setProperty("margin-left","0px"):(I=I+t,a&&!d&&(i==null||i.style.setProperty("margin-left",`${t}px`))),{width:I,height:P}}return{width:g,height:p||m,latestContentHeightWhenLoaded:p}};class xe extends z{constructor(){super(...arguments),this.isImageType=()=>{const t=this.item.mediaType??M.detectMimeTypeFromName(this.item.href);return!!(t!=null&&t.startsWith("image/"))}}onCreateDocument(){const t=ke();return this.setDocumentContainer(t),o.of(t)}onLoadDocument(){const t=this.getFrameElement();if(!t)throw new Error("invalid frame");return o.of(t).pipe(Ve({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),_(this.context.bridgeEvent.viewportFree$),o.tap(()=>{this.attach()}),Tt,Re({context:this.context,item:this.item,settings:this.settings}),Ft)}onUnload(){return Ae(this.getFrameElement()),this.detach(),o.EMPTY}onLayout({minPageSpread:t,blankPagePosition:i,spreadPosition:n}){var d,g;const{width:s,height:r}=this.context.getPageSize(),a=this.getFrameElement();if(!a)return o.of(void 0);const c=!!((d=this.writingMode)!=null&&d.startsWith("vertical"));if(this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&((g=this.context.manifest)==null?void 0:g.renditionLayout)==="pre-paginated"){const p=We({blankPagePosition:i,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:a,isRTL:this.context.isRTL(),minPageSpread:t,pageHeight:r,pageWidth:s,spreadPosition:n});return o.of(p)}const{latestContentHeightWhenLoaded:u,...l}=qe({pageHeight:r,pageWidth:s,frameElement:a,manifest:this.context.manifest,blankPagePosition:i,isUsingVerticalWriting:c,isRTL:this.context.isRTL(),latestContentHeightWhenLoaded:this.latestContentHeightWhenLoaded,minPageSpread:t,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode!=="scrollable"});return this.latestContentHeightWhenLoaded=u,o.of(l)}onRenderHeadless(){return o.from(this.resourcesHandler.fetchResource()).pipe(o.switchMap(t=>{if(t instanceof Response){const i=t.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(i))return o.from(t.text()).pipe(o.map(s=>new DOMParser().parseFromString(s,i)))}return o.of(void 0)}))}getFrameElement(){const t=this.documentContainer;if(t instanceof HTMLIFrameElement)return t}getComputedStyleAfterLoad(){var n,s;const t=this.getFrameElement(),i=(n=t==null?void 0:t.contentDocument)==null?void 0:n.body;if(i)return(s=t==null?void 0:t.contentWindow)==null?void 0:s.getComputedStyle(i)}get writingMode(){var t;return(t=this.getComputedStyleAfterLoad())==null?void 0:t.writingMode}get readingDirection(){var n;if(this.writingMode==="vertical-rl")return"rtl";switch((n=this.getComputedStyleAfterLoad())==null?void 0:n.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const Ye=e=>t=>{const i=e({...t,getRenderer(s){var a;return((a=t.getRenderer)==null?void 0:a.call(t,s))??(c=>new xe(c))}}),n=Te(i);return n.pipe(o.takeUntil(i.$.destroy$)).subscribe(),{...i,links$:n}};function W(e){return e!=null}let Xe=class extends Ot{computeOutputSettings(t){return t}hasSettingsChanged(t){return!M.isShallowEqual(this.outputSettings,t)}getCleanedParentInputSettings(t){const{layoutAutoResize:i,pageHorizontalMargin:n,pageVerticalMargin:s,layoutLayerTransition:r,viewportMode:a,...c}=t;return c}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0,viewportMode:"normal"}}};const Ze=e=>{let t;const i=e.context.state$.pipe(b.switchMap(({containerElement:u})=>u?new o.Observable(()=>(t=u.ownerDocument.createElement("div"),t.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(t),()=>{t==null||t.remove(),t=void 0})):o.NEVER)),n=u=>o.scheduled(u,o.animationFrameScheduler).pipe(b.tap(()=>{t==null||t.style.setProperty("visibility","hidden")})),s=e.context.bridgeEvent.viewportBusy$.pipe(b.tap(()=>{t==null||t.style.setProperty("visibility","visible")})),r=n(e.viewportFree$).pipe(b.take(1)),c=e.settings.values$.pipe(b.map(()=>e.settings.values.computedPageTurnMode),b.distinctUntilChanged()).pipe(b.switchMap(u=>u==="controlled"?s.pipe(b.switchMap(()=>r)):n(o.of(void 0))),b.takeUntil(e.$.destroy$));return o.merge(i,c)},Ge=e=>{e.hookManager.register("item.onAfterLayout",({item:t,blankPagePosition:i,minimumWidth:n})=>{const s=e.spineItemsManager.get(t.id),r=s==null?void 0:s.renderer.getDocumentFrame();if((s==null?void 0:s.renditionLayout)!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:a}=Z(r),{width:c}=e.context.getPageSize(),u=s==null?void 0:s.renderer.getDocumentFrame();if(a){const l=c<n;i==="none"&&l&&u instanceof HTMLIFrameElement&&(u==null||u.style.setProperty("left",e.context.isRTL()?"75%":"25%"))}})};class Et{constructor(t){this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.width=t.width,this.height=t.height,this.x=t.x,this.y=t.y}}class dt extends Et{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class Je extends Et{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class F{constructor(t){this.__symbol="SpinePosition",this.x=t.x,this.y=t.y}}class gt{constructor(t){this.__symbol="UnsafeSpinePosition",this.x=t.x,this.y=t.y}static from(t){return new gt(t)}}const Ke=({position:e,pageSize:t})=>new Je({x:e.x,y:e.y,left:e.x,top:e.y,width:t.width,height:t.height,bottom:e.y+t.height,right:e.x+t.width}),Qe=e=>{const t=e.spine.spineLayout.layout$.pipe(o.map(()=>({pages:e.spine.spineItemsManager.items.reduce((r,a,c)=>{const d=new Array(a.numberOfPages).fill(void 0).map((g,p)=>{const h=e.spine.spineItemLocator.getSpineItemPositionFromPageIndex({spineItem:a,pageIndex:p}),m=e.spine.locator.getSpinePositionFromSpineItemPosition({spineItem:a,spineItemPosition:h});return Ke({pageSize:e.context.getPageSize(),position:m})}).map((g,p)=>({itemIndex:c,absolutePageIndex:c+p,absolutePosition:g}));return[...r,...d]},[])})),o.tap(n=>{A.debug("layout:info",n)}),o.share()),i=t.pipe(o.shareReplay({refCount:!0,bufferSize:1}));return i.pipe(o.takeUntil(e.$.destroy$)).subscribe(),{layout$:t,info$:i}},je=(e,t)=>t.pipe(o.tap(i=>{e.viewport.value.element.style.transition="transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",e.settings.values.computedPageTurnMode==="scrollable"?e.viewport.value.element.style.transformOrigin="top":e.viewport.value.element.style.transformOrigin="center",i==="thumbnails"?e.viewport.value.element.style.transform="scale(0.5)":e.viewport.value.element.style.transform="scale(1)",e.layout()})),ti=e=>t=>{const{pageHorizontalMargin:i,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r}=t,a=e(t),c=new Xe({pageHorizontalMargin:i,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let w=!1;a.spineItemsManager.items.forEach(S=>{const y=S.renderer.getDocumentFrame();!w&&y&&(y.getBoundingClientRect().left,w=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:w})=>{const S=a.spineItemsManager.get(w.id),y=w.mediaType??M.detectMimeTypeFromName(w.href),I=!!(y!=null&&y.startsWith("image/")),{pageHorizontalMargin:P=0,pageVerticalMargin:v=0}=c.values,T=a.context.getPageSize();if((S==null?void 0:S.renditionLayout)==="reflowable"&&!I){let L=T.width-P*2;const R=T.height-v*2;let D=T.width-P*2,B=P*2;S.isUsingVerticalWriting()&&(D=T.width-P*2,L=R,B=v*2);const V=S==null?void 0:S.renderer.getDocumentFrame();V&&N(V,"prose-layout-enhancer-css",`
205
+ `,u.appendChild(t),()=>{t==null||t.remove(),t=void 0})):o.NEVER)),n=u=>o.scheduled(u,o.animationFrameScheduler).pipe(b.tap(()=>{t==null||t.style.setProperty("visibility","hidden")})),s=e.context.bridgeEvent.viewportBusy$.pipe(b.tap(()=>{t==null||t.style.setProperty("visibility","visible")})),r=n(e.viewportFree$).pipe(b.take(1)),c=e.settings.values$.pipe(b.map(()=>e.settings.values.computedPageTurnMode),b.distinctUntilChanged()).pipe(b.switchMap(u=>u==="controlled"?s.pipe(b.switchMap(()=>r)):n(o.of(void 0))),b.takeUntil(e.$.destroy$));return o.merge(i,c)},Ge=e=>{e.hookManager.register("item.onAfterLayout",({item:t,blankPagePosition:i,minimumWidth:n})=>{const s=e.spineItemsManager.get(t.id),r=s==null?void 0:s.renderer.getDocumentFrame();if((s==null?void 0:s.renditionLayout)!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:a}=Z(r),{width:c}=e.context.getPageSize(),u=s==null?void 0:s.renderer.getDocumentFrame();if(a){const l=c<n;i==="none"&&l&&u instanceof HTMLIFrameElement&&(u==null||u.style.setProperty("left",e.context.isRTL()?"75%":"25%"))}})};class Ut{constructor(t){this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.width=t.width,this.height=t.height,this.x=t.x,this.y=t.y}}class dt extends Ut{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class Je extends Ut{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class F{constructor(t){this.__symbol="SpinePosition",this.x=t.x,this.y=t.y}}class gt{constructor(t){this.__symbol="UnsafeSpinePosition",this.x=t.x,this.y=t.y}static from(t){return new gt(t)}}const Ke=({position:e,pageSize:t})=>new Je({x:e.x,y:e.y,left:e.x,top:e.y,width:t.width,height:t.height,bottom:e.y+t.height,right:e.x+t.width}),Qe=e=>{const t=e.spine.spineLayout.layout$.pipe(o.map(()=>({pages:e.spine.spineItemsManager.items.reduce((r,a,c)=>{const d=new Array(a.numberOfPages).fill(void 0).map((g,p)=>{const h=e.spine.spineItemLocator.getSpineItemPositionFromPageIndex({spineItem:a,pageIndex:p}),m=e.spine.locator.getSpinePositionFromSpineItemPosition({spineItem:a,spineItemPosition:h});return Ke({pageSize:e.context.getPageSize(),position:m})}).map((g,p)=>({itemIndex:c,absolutePageIndex:c+p,absolutePosition:g}));return[...r,...d]},[])})),o.tap(n=>{A.debug("layout:info",n)}),o.share()),i=t.pipe(o.shareReplay({refCount:!0,bufferSize:1}));return i.pipe(o.takeUntil(e.$.destroy$)).subscribe(),{layout$:t,info$:i}},je=(e,t)=>t.pipe(o.tap(i=>{e.viewport.value.element.style.transition="transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",e.settings.values.computedPageTurnMode==="scrollable"?e.viewport.value.element.style.transformOrigin="top":e.viewport.value.element.style.transformOrigin="center",i==="thumbnails"?e.viewport.value.element.style.transform="scale(0.5)":e.viewport.value.element.style.transform="scale(1)",e.layout()})),ti=e=>t=>{const{pageHorizontalMargin:i,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r}=t,a=e(t),c=new Xe({pageHorizontalMargin:i,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let w=!1;a.spineItemsManager.items.forEach(S=>{const y=S.renderer.getDocumentFrame();!w&&y&&(y.getBoundingClientRect().left,w=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:w})=>{const S=a.spineItemsManager.get(w.id),y=w.mediaType??M.detectMimeTypeFromName(w.href),I=!!(y!=null&&y.startsWith("image/")),{pageHorizontalMargin:P=0,pageVerticalMargin:v=0}=c.values,T=a.context.getPageSize();if((S==null?void 0:S.renditionLayout)==="reflowable"&&!I){let L=T.width-P*2;const R=T.height-v*2;let D=T.width-P*2,B=P*2;S.isUsingVerticalWriting()&&(D=T.width-P*2,L=R,B=v*2);const V=S==null?void 0:S.renderer.getDocumentFrame();V&&N(V,"prose-layout-enhancer-css",`
206
206
  body {
207
207
  width: ${D}px !important;
208
208
  margin: ${v}px ${P}px !important;
@@ -220,7 +220,7 @@
220
220
  td {
221
221
  max-width: ${L}px;
222
222
  }
223
- `)}}),Ge(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:w})=>{w.style.opacity="0",c.values.layoutLayerTransition&&(w.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:w})=>{const S=a.spineItemsManager.get(w.id),y=S==null?void 0:S.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&(y==null||y.setAttribute("tab-index","0"))});const u=a.spineItemsObserver.itemIsReady$.pipe(b.filter(({isReady:w})=>w),b.tap(({item:w})=>{const S=w.renderer.documentContainer;S&&(S.style.opacity="1")})),l=w=>new o.Observable(S=>{const y=new ResizeObserver(()=>{S.next()});return y.observe(w),()=>{y.disconnect()}}),d=c.values$.pipe(b.filter(({layoutAutoResize:w})=>w==="container"),b.switchMap(()=>a.context.containerElement$),b.filter(E),b.switchMap(w=>l(w)),b.debounceTime(100),b.tap(()=>{a==null||a.layout()})),g=Ze(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(b.skip(1),b.tap(()=>{a.layout()}),b.takeUntil(a.$.destroy$)).subscribe();const p=a.spineItemsObserver.itemIsReady$.pipe(b.tap(({item:w,isReady:S})=>{const y="prose-spineItem-ready";S?w.containerElement.classList.add(y):w.containerElement.classList.remove(y)})),{layout$:h,info$:m}=Qe(a),f=je(a,c.watch("viewportMode"));return o.merge(p,u,g,d,f).pipe(b.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:h,layoutInfo$:m}},Wt=`${`${H}-enhancer-loading`}-container`,ei=(e,t)=>{const i=e.ownerDocument.createElement("div");return i.classList.add(Wt),i.style.cssText=`
223
+ `)}}),Ge(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:w})=>{w.style.opacity="0",c.values.layoutLayerTransition&&(w.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:w})=>{const S=a.spineItemsManager.get(w.id),y=S==null?void 0:S.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&(y==null||y.setAttribute("tab-index","0"))});const u=a.spineItemsObserver.itemIsReady$.pipe(b.filter(({isReady:w})=>w),b.tap(({item:w})=>{const S=w.renderer.documentContainer;S&&(S.style.opacity="1")})),l=w=>new o.Observable(S=>{const y=new ResizeObserver(()=>{S.next()});return y.observe(w),()=>{y.disconnect()}}),d=c.values$.pipe(b.filter(({layoutAutoResize:w})=>w==="container"),b.switchMap(()=>a.context.containerElement$),b.filter(W),b.switchMap(w=>l(w)),b.debounceTime(100),b.tap(()=>{a==null||a.layout()})),g=Ze(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(b.skip(1),b.tap(()=>{a.layout()}),b.takeUntil(a.$.destroy$)).subscribe();const p=a.spineItemsObserver.itemIsReady$.pipe(b.tap(({item:w,isReady:S})=>{const y="prose-spineItem-ready";S?w.containerElement.classList.add(y):w.containerElement.classList.remove(y)})),{layout$:h,info$:m}=Qe(a),f=je(a,c.watch("viewportMode"));return o.merge(p,u,g,d,f).pipe(b.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:h,layoutInfo$:m}},Et=`${`${H}-enhancer-loading`}-container`,ei=(e,t)=>{const i=e.ownerDocument.createElement("div");return i.classList.add(Et),i.style.cssText=`
224
224
  height: 100%;
225
225
  width: 100%;
226
226
  max-width: ${t.state.visibleAreaRect.width}px;
@@ -244,7 +244,7 @@
244
244
  overflow: hidden;
245
245
  max-width: 300px;
246
246
  width: 80%;
247
- `,e.appendChild(i),e.appendChild(n),e},ni=e=>t=>{const{loadingElementCreate:i=ii}=t,n=e(t),s=u=>o.of(u.reduce((l,{item:d,element:g})=>{g.style.zIndex="0";const p=g.querySelector(`.${Wt}`);if(p instanceof HTMLElement)return l[d.id]=p,l;const h=i({container:ei(g,n.context),item:d});return g.appendChild(h),l[d.id]=h,l},{})),r=u=>o.combineLatest([n.spine.spineLayout.layout$,n.theme.$.theme$]).pipe(b.map(([,l])=>({width:n.context.state.visibleAreaRect.width,theme:l})),b.distinctUntilChanged(M.isShallowEqual),b.tap(({width:l,theme:d})=>{Object.values(u).forEach(g=>{g.style.setProperty("max-width",`${l}px`),g.style.setProperty("color",d==="sepia"?"#939393":"rgb(202, 202, 202)")})})),a=u=>n.spineItemsObserver.itemIsReady$.pipe(b.tap(({item:l,isReady:d})=>{var g,p;(g=u[l.item.id])==null||g.style.setProperty("visibility",d?"hidden":"visible"),(p=u[l.item.id])==null||p.style.setProperty("z-index",d?"0":"1")})),c=n.spineItemsManager.items$.pipe(b.switchMap(u=>s(u)),b.shareReplay(1),b.takeUntil(n.context.destroy$));return c.pipe(b.switchMap(u=>o.merge(r(u),a(u))),b.takeUntil(n.$.destroy$)).subscribe(),{...n,loading:{$:{items$:c}}}};class oi extends z{getImageElement(){const t=this.documentContainer;if(t instanceof HTMLImageElement)return t}onCreateDocument(){const t=this.containerElement.ownerDocument.createElement("img");return o.from(this.resourcesHandler.getResource()).pipe(o.switchMap(i=>{if(this.setDocumentContainer(t),t.style.objectFit="contain",t.style.userSelect="none",i instanceof URL)return o.of(i.href);if(i instanceof Response)return o.from(i.blob()).pipe(o.map(n=>URL.createObjectURL(n)));throw new Error("Invalid resource")}),o.map(i=>{const n=this.getImageElement();return n&&(n.src=i),t}))}onLoadDocument(){const t=this.getImageElement();if(!t)throw new Error("invalid element");return this.attach(),o.fromEvent(t,"load")}onUnload(){const t=this.getImageElement();return t&&URL.revokeObjectURL(t.src),this.detach(),o.EMPTY}onLayout({spreadPosition:t}){const i=this.getImageElement(),{height:n,width:s}=this.context.getPageSize();let r=n;const a=s;if(!i)return o.of(void 0);const c=i.naturalWidth||1,u=i.naturalHeight||1,l=c/u;return this.settings.values.computedPageTurnDirection==="vertical"&&this.settings.values.computedPageTurnMode==="scrollable"&&!this.context.state.isUsingSpreadMode&&(r=Math.ceil(s/l)),i.style.height=`${r}px`,i.style.width=`${a}px`,i.style.objectPosition=t==="left"?"right":t==="right"?"left":"center",o.of({width:a,height:r})}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}const si=e=>t=>{const i=e({...t,getRenderer(a){var d;const c=(d=t.getRenderer)==null?void 0:d.call(t,a),u=a.mediaType??M.detectMimeTypeFromName(a.href),l=!!(u!=null&&u.startsWith("image/"));return!c&&l?g=>new oi(g):c}}),n=new IntersectionObserver(a=>{a.forEach(c=>{var d;const u=c.target,l=Array.from(((d=u.contentDocument)==null?void 0:d.body.getElementsByTagName("audio"))||[]);c.isIntersecting?l.forEach(g=>{g.hasAttribute("autoplay")&&g.paused&&g.readyState>=2&&g.play().catch(console.error)}):l.forEach(g=>{g.pause(),g.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 i.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{var g,p;const u=(g=i.spineItemsManager.get(c))==null?void 0:g.renderer.getDocumentFrame();if(!u)return;n.observe(u);const l=(p=u.contentDocument)==null?void 0:p.body.getElementsByTagName("video"),d=Array.from(l||[]).map(h=>(s.observe(h),()=>s.unobserve(h)));a(()=>{n.unobserve(u),d.forEach(h=>h())})}),{...i,destroy:()=>{n.disconnect(),s.disconnect(),i.destroy()}}},ri=(e,t)=>e.links$.pipe(o.tap(i=>{var a;if(!At(i.target,"a")||i.type!=="click")return;const n=new URL(i.target.href),s=`${n.origin}${n.pathname}`;((a=e.context.manifest)==null?void 0:a.spineItems.some(c=>c.href===s))&&t.goToUrl(n)})),U=A.namespace("navigation");class C{constructor(t){this.__symbol=Symbol("SpineItemPosition"),this.x=t.x,this.y=t.y}}const ai=({position:e,spineItem:t,pageHeight:i,pageWidth:n,spineItemLocator:s})=>{let r=new C({x:e.x-n,y:e.y});return t.isUsingVerticalWriting()&&(r=new C({x:e.x,y:e.y+i})),s.getSpineItemClosestPositionFromUnsafePosition(r,t)},zt=({position:e,navigationResolver:t,computedPageTurnDirection:i,spineItemsManager:n,spineLocator:s,context:r})=>{const a=i,c=s.getSpineItemFromPosition(e)||n.get(0),u=e;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(e,c),d=ai({position:l,spineItem:c,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return t.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):t.getAdjustedPositionWithSafeEdge(a==="horizontal"?new F({x:e.x-r.getPageSize().width,y:0}):new F({y:e.y-r.getPageSize().height,x:0}))},ci=({position:e,spineItem:t,context:i,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a})=>{const c=zt({position:e,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(t!=null&&t.isUsingVerticalWriting()&&e.x===c.x)return n.getAdjustedPositionForSpread(c);if(i.state.isUsingSpreadMode){if(t!=null&&t.isUsingVerticalWriting()&&e.x!==c.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(i.isRTL()?{...c,x:c.x+i.getPageSize().width}:{...c,x:c.x-i.getPageSize().width}));if(a==="vertical"&&e.y!==c.y)return n.getAdjustedPositionForSpread(c);const u=zt({position:c,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(u)}return n.getAdjustedPositionForSpread(c)},ui=({position:e,spineItem:t,pageHeight:i,pageWidth:n,spineItemLocator:s})=>{let r=new C({x:e.x+n,y:e.y});return t.isUsingVerticalWriting()&&(r=new C({x:e.x,y:e.y-i})),s.getSpineItemClosestPositionFromUnsafePosition(r,t)},Ht=({position:e,navigationResolver:t,computedPageTurnDirection:i,spineItemsManager:n,spineLocator:s,context:r})=>{const a=i,c=s.getSpineItemFromPosition(e)||n.get(0),u=e;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(e,c),d=ui({position:l,spineItem:c,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return t.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):t.getAdjustedPositionWithSafeEdge(a==="horizontal"?new F({x:e.x+r.getPageSize().width,y:0}):new F({y:e.y+r.getPageSize().height,x:0}))},li=({position:e,spineItem:t,context:i,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a})=>{const c=Ht({position:e,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(t!=null&&t.isUsingVerticalWriting()&&e.x===c.x)return n.getAdjustedPositionForSpread(c);if(i.state.isUsingSpreadMode){if(t!=null&&t.isUsingVerticalWriting()&&e.x!==c.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(i.isRTL()?{...c,x:c.x-i.getPageSize().width}:{...c,x:c.x+i.getPageSize().width}));if(a==="vertical"&&e.y!==c.y)return n.getAdjustedPositionForSpread(c);const u=Ht({position:c,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(u)}return n.getAdjustedPositionForSpread(c)};class di{constructor(t){this.reader=t,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new F({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 t=this.reader.navigation.getNavigation(),i=this.reader.spineItemsManager.get(t.spineItem);if(!i)return;const n=li({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:t.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:i,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator});return this.reader.navigation.navigate({position:n})}turnLeftOrTop(){const t=this.reader.navigation.getNavigation(),i=this.reader.spineItemsManager.get(t.spineItem);if(!i)return;const n=ci({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:t.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:i,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator});return this.reader.navigation.navigate({position:n})}goToCfi(t,i={animate:!0}){return this.reader.navigation.navigate({animation:i.animate?"turn":!1,cfi:t})}goToSpineItem({indexOrId:t,...i}){const n=this.reader.spineItemsManager.get(t);if(n===void 0){U.warn("goToSpineItem",`Ignore navigation to ${t} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:n.index,...i})}goToNextSpineItem(){const{endIndex:t=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:.5})||{};this.goToSpineItem({indexOrId:t+1})}goToPreviousSpineItem(){const{beginIndex:t=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:.5})??{};this.goToSpineItem({indexOrId:t-1})}goToUrl(t){this.reader.navigation.navigate({url:t,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){U.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"){U.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"){U.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){U.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:t,spineItemId:i,...n}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:t,spineItemId:i});U.debug(".goToPageOfSpineItem()",{pageIndex:t,spineItemId:i,...n,position:s}),this.reader.navigation.navigate({position:s,...n})}goToAbsolutePageIndex({absolutePageIndex:t,...i}){const n=this.reader.spine.locator.getSpineInfoFromAbsolutePageIndex({absolutePageIndex:t});if(U.debug(".goToAbsolutePageIndex()",{absolutePageIndex:t,...i,foundInfo:n}),n){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:n.pageIndex,spineItemId:n.itemIndex});return this.reader.navigation.navigate({position:s,...i})}}}class gi{constructor(t){this.reader=t,this.lastDelta={x:0,y:0},this.lastPosition=new F({x:0,y:0}),this.lastStartPosition=new F({x:0,y:0}),this.unlock=void 0}moveTo(t,{final:i,start:n}={}){var a,c,u,l;if(this.reader.settings.values.computedPageTurnMode==="scrollable"){U.warn("pan control is not available on free page turn mode");return}const s=this.reader.settings.values.computedPageTurnDirection;n&&((a=this.unlock)==null||a.call(this),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(t){const d=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,g=Math.floor(t.x)-(((c=this.lastDelta)==null?void 0:c.x)||0),p=Math.floor(t.y)-(((u=this.lastDelta)==null?void 0:u.y)||0),h=Math.floor(s==="horizontal"?this.lastPosition.x-g/d:0),m=Math.floor(s==="horizontal"?0:this.lastPosition.y-p/d);r=new F({x:h,y:m}),this.lastDelta=t}else r=this.lastPosition;if(this.lastPosition=r,i){this.lastDelta={x:0,y:0},this.reader.navigation.navigate({position:r,animation:!1}),(l=this.unlock)==null||l.call(this);return}this.reader.navigation.navigate({position:r,animation:!1})}}const pi=e=>e.pagination.state$.pipe(o.withLatestFrom(e.context.manifest$,e.settings.values$),o.map(([t,{spineItems:i,readingDirection:n},{computedPageTurnDirection:s}])=>{const r=i.length??0,a=t.beginSpineItemIndex===0,c=t.endSpineItemIndex===Math.max(r-1,0),u=t.endSpineItemIndex===Math.max(r-1,0),l=t.beginSpineItemIndex===0,d=t.beginPageIndexInSpineItem===0,g=t.endPageIndexInSpineItem===t.endNumberOfPagesInSpineItem-1;return{canTurnLeft:s==="vertical"?!1:!d,canTurnRight:s==="vertical"?!1:!g,canGoTopSpineItem:s==="vertical"&&!a,canGoBottomSpineItem:s==="vertical"&&!c,canGoLeftSpineItem:s!=="vertical"&&(n==="ltr"&&!a||n==="rtl"&&!u),canGoRightSpineItem:s!=="vertical"&&(n==="ltr"&&!c||n==="rtl"&&!l)}}),o.distinctUntilChanged(M.isShallowEqual)),hi=({reader:e,duration:t})=>i=>{let n;const s=()=>{n==null||n(),n=void 0};return i.pipe(o.tap(()=>{n||(n=e==null?void 0:e.navigation.lock())}),o.throttleTime(t,o.animationFrameScheduler,{trailing:!0,leading:!0}),o.tap(s),o.finalize(s))},mi=e=>t=>{const i=e(t),n=pi(i),s=new di(i),r=new gi(i),a=u=>{const{cfi:l,...d}=u;i.load(d),l&&s.goToCfi(l,{animate:!1})};return ri(i,s).pipe(o.takeUntil(i.$.destroy$)).subscribe(),{...i,load:a,navigation:{...i.navigation,state$:n,throttleLock:({duration:u,trigger:l})=>l.pipe(hi({duration:u,reader:i})),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)}}},q=e=>W.generate({spineIndex:e.index,spineId:e.id}),x=(e,t,i)=>{var n;return!e.ownerDocument||!((n=e.ownerDocument)!=null&&n.documentElement)||e===e.ownerDocument?q(i):W.generate({node:e,offset:t,spineIndex:i.index,spineId:i.id})},pt=({pageIndex:e,spineItem:t,spineItemLocator:i})=>{var r;const n=i.getFirstNodeOrRangeAtPage(e,t),s=t.renderer.getDocumentFrame();return n&&s instanceof HTMLIFrameElement&&((r=s.contentWindow)!=null&&r.document)?x(n.node,n.offset,t.item).trim():q(t.item)},fi=(e,t)=>{const i=x(e.startContainer,e.startOffset,t),n=x(e.endContainer,e.endOffset,t);return{start:i,end:n}},Si=({item:e,selection:t})=>{const i=t.anchorNode?x(t.anchorNode,t.anchorOffset,e):void 0,n=t.focusNode?x(t.focusNode,t.focusOffset,e):void 0;return{anchorCfi:i,focusCfi:n}},ht=e=>{var t;return((t=e[0])==null?void 0:t.index)===6&&e.length>1},mt=e=>{const t=W.parse(e),i=n=>{if(n.length!==1)return!1;const s=n[0]??[];return ht(s)};return Array.isArray(t)?i(t):i(t.parent)},bi=e=>Array.isArray(e)?e[0]&&ht(e[0])?e[0]:void 0:e.parent[0]&&ht(e.parent[0])?e.parent[0]:void 0,ft=e=>{var c,u,l,d;const t=W.parse(e),n=(bi(t)??[])[1],r=((n==null?void 0:n.index)??2)/2-1,a=W.isParsedCfiRange(t)?(u=(c=t.end.at(-1))==null?void 0:c.at(-1))==null?void 0:u.offset:(d=(l=t.at(-1))==null?void 0:l.at(-1))==null?void 0:d.offset;return{cleanedCfi:e,itemIndex:r,offset:a??0}},Bt=({cfi:e,spineItemsManager:t})=>{var r,a;if(!e)return;const{itemIndex:i}=ft(e),n=t.get(i);if(!n)return;const s=n.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){const c=(r=s.contentWindow)==null?void 0:r.document;if(c)try{const u=W.resolve(e,c,{throwOnError:!0});return{node:u.isRange?(a=u.node)==null?void 0:a.startContainer:u.node,offset:Array.isArray(u.offset)?u.offset.at(-1):u.offset,spineItem:n}}catch(u){return A.error(u),{spineItem:n}}}return{spineItem:n}},yi=(e,t)=>{if("cfi"in t)return t;const i=e.spineItemsManager.get(t);if(!i)throw new Error("Spine item not found");return{cfi:q(i.item)}},wi=(e,t)=>{let i=e==null?void 0:e.itemPageIndex;const{itemIndex:n}=t.cfi.parseCfi(e.cfi),s=t.spineItemsManager.get(n);return s?ct().pipe(o.withLatestFrom(s.isReady$),o.map(([,r])=>{var g;let a;const{node:c,offset:u}=t.cfi.resolveCfi({cfi:e.cfi})??{};if(s.renditionLayout!=="pre-paginated"&&c&&(i=t.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,u??0,s)??i),c&&e.endCfi){const{node:p,offset:h}=t.cfi.resolveCfi({cfi:e.cfi})??{};p&&r&&(a=(g=c==null?void 0:c.ownerDocument)==null?void 0:g.createRange(),a==null||a.setStart(c,u??0),a==null||a.setEnd(p,h??0))}let d=e==null?void 0:e.absolutePageIndex;return i===void 0&&(i=0),d=t.spine.locator.getAbsolutePageIndexFromPageIndex({pageIndex:i,spineItemOrId:s})??(e==null?void 0:e.absolutePageIndex),{...e,range:a,itemIndex:n,startNode:c??void 0,startOffset:u,absolutePageIndex:d,itemPageIndex:i}})):o.of({...e,itemIndex:n})};class Ii{constructor(t){this.reader=t,this.locate=(i,n)=>{const s={resource:i,meta:yi(this.reader,i)};return ut(()=>{var d;const r=this.reader.spine.spineLayout.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(g=>wi(g.meta,this.reader).pipe(o.map(p=>({...g,meta:p}))),s)),a=(d=this.reader.cfi.parseCfi(s.meta.cfi))==null?void 0:d.itemIndex,c=this.reader.spineItemsManager.get(a),u=(c==null?void 0:c.renditionLayout)==="reflowable",l=n.mode==="shallow"||!u||!c?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([c.index]);return r.pipe(o.finalize(()=>{setTimeout(()=>{l()},1e3)}))})}}locateResource(t,i){return Array.isArray(t)?ut(()=>o.combineLatest(t.map(n=>this.locate(n,i??{})))):this.locate(t,i??{})}}const _t=(e,t,i)=>{const n=i.spineItems.findIndex(s=>s.href===e);return t.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=e.substring(0,e.lastIndexOf("/")),d=e.endsWith(c),g=l!==""&&l.endsWith(u);if(d||g){const h=i.spineItems.findIndex(S=>S.href===r.href);if(n<h)return s;const f={title:r.title,path:r.path},w=_t(e,r.contents,i);return w?{...f,subChapter:w}:f}return s},void 0)},Pi=(e,t)=>{var n;const{href:i}=t;return _t(i,((n=e.nav)==null?void 0:n.toc)??[],e)},vi=e=>{const t=e.context.manifest,i=e.spineItemsManager.items;return t?i.reduce((n,{item:s})=>(n[s.id]=Pi(t,s),n),{}):{}},$i=e=>e.spineItemsManager.items$.pipe(o.startWith([]),o.map(()=>vi(e))),Mi=(e,t,i)=>e+t*i,Ti=(e,t,i)=>{const n=e.context,{height:s,width:r}=i.layout.layoutInfo,{top:a,left:c}=e.spine.spineLayout.getSpineItemSpineLayoutInfo(i);return e.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(t.y-a+n.state.visibleAreaRect.height)/s)):Math.max(0,Math.min(1,(t.x-c+n.state.visibleAreaRect.width)/r))},Fi=(e,t,i,n,s)=>s.isReady$.pipe(o.first(),o.withLatestFrom(e.layoutInfo$),o.map(([r,a])=>{var S,y,I,P,v,T,L;const c=e.context,u=((S=c.manifest)==null?void 0:S.renditionLayout)==="pre-paginated",l=((y=c.manifest)==null?void 0:y.spineItems.length)||0,d=((I=c.manifest)==null?void 0:I.spineItems.slice(0,t).reduce((R,D)=>R+(D.progressionWeight??0),0))||0,g=e.spineItemsManager.getSpineItemIndex(s)??0,p=((P=e.context.manifest)==null?void 0:P.spineItems.length)??0,h=a.pages.filter(R=>R.itemIndex===g).length??0,m=((T=(v=c.manifest)==null?void 0:v.spineItems[t])==null?void 0:T.progressionWeight)??(g+1)/p;let f=(i+1)*(m/h);!u&&s.renditionLayout==="reflowable"&&!r&&(f=0);let w=d+f;return((L=c.manifest)==null?void 0:L.renditionFlow)==="scrolled-continuous"&&(r?f=Ti(e,n,s):f=0,w=Mi(d,m,f)),t===l-1&&i===h-1&&w>.99?1:w})),Li=e=>e.spine.spineLayout.layout$.pipe(o.debounceTime(10,o.animationFrameScheduler),o.withLatestFrom(e.pagination.state$),o.map(()=>({numberOfPagesPerItems:e.spineItemsManager.items.reduce((i,n)=>[...i,n.numberOfPages],[]),numberOfTotalPages:e.spine.spineLayout.numberOfPages})),o.distinctUntilChanged(M.isShallowEqual),o.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),Ci=(e,t,i,n)=>{const s=e.context,r=t.beginSpineItemIndex!==void 0?e.spineItemsManager.get(t.beginSpineItemIndex):void 0,a=t.endSpineItemIndex!==void 0?e.spineItemsManager.get(t.endSpineItemIndex):void 0;return o.of({...t,beginChapterInfo:r?i[r.item.id]:void 0,beginSpineItemReadingDirection:r==null?void 0:r.readingDirection,endChapterInfo:a?i[a.item.id]:void 0,endSpineItemReadingDirection:a==null?void 0:a.readingDirection,percentageEstimateOfBook:n,isUsingSpread:s.state.isUsingSpreadMode??!1})},Ri=e=>o.combineLatest([e.pagination.state$,e.layout$]).pipe(o.switchMap(([t])=>{const i=t.endSpineItemIndex!==void 0?e.spineItemsManager.get(t.endSpineItemIndex):void 0;return i?Fi(e,t.endSpineItemIndex??0,t.endPageIndexInSpineItem||0,e.navigation.getNavigation().position,i):o.of(0)})),Ai=e=>{const t=$i(e),i=Li(e),n=new o.BehaviorSubject({...e.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([e.pagination.state$,t,Ri(e)]).pipe(o.switchMap(([a,c,u])=>Ci(e,a,c,u).pipe(o.map(l=>({...a,...l})))),o.distinctUntilChanged(M.isShallowEqual));return{paginationInfo$:o.combineLatest([s,i]).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=>{n.next(a)}),o.shareReplay(1)),getPaginationInfo:()=>n.value}},Oi=e=>t=>{const i=e(t),{paginationInfo$:n,getPaginationInfo:s}=Ai(i);n.pipe(o.takeUntil(i.$.destroy$)).subscribe();const r=new Ii(i);return{...i,locateResource:r.locateResource.bind(r),pagination:{...i.pagination,get state(){return s()},get state$(){return n}}}},Di=e=>({put:(r,a)=>new Promise((c,u)=>{const l=e.transaction(["store"],"readwrite");l.onerror=p=>{u(p)},l.oncomplete=()=>{c()};const g=l.objectStore("store").put(a,r);g.onsuccess=()=>{c()},g.onerror=p=>{u(p)}}),keys:()=>new Promise((r,a)=>{const c=e.transaction(["store"],"readonly");c.onerror=g=>{a(g)};const l=c.objectStore("store").openKeyCursor(),d=[];l.onsuccess=()=>{const g=l.result;if(!g){r(d);return}d.push(g.key),g.continue()},l.onerror=()=>{a(l.error)}}),get:r=>new Promise((a,c)=>{const u=e.transaction(["store"],"readwrite"),d=u.objectStore("store").get(r);d.onsuccess=()=>{let g=d.result;g===void 0&&(g=null),a(g)},u.onerror=()=>{c(d.error)}}),remove:r=>new Promise((a,c)=>{const u=e.transaction(["store"],"readwrite"),d=u.objectStore("store").delete(r);u.onerror=()=>{c(d.error)},u.oncomplete=()=>{a()},u.onabort=()=>{var p;const g=d.error?d.error:(p=d.transaction)==null?void 0:p.error;c(g)}})}),St=async e=>new Promise((t,i)=>{const n=window.indexedDB.open(e);n.onerror=s=>{i(s)},n.onsuccess=()=>{t(Di(n.result))},n.onupgradeneeded=()=>{n.result.createObjectStore("store")}}),Ni=e=>{let t=Date.now().toString();const i=new o.Subject,n=u=>{var l,d;if(typeof u=="string"||typeof u=="object"){const g=typeof u=="object"?u.id:u;return(l=e.manifest)==null?void 0:l.spineItems.find(p=>p.id===g)}return(d=e.manifest)==null?void 0:d.spineItems[u]},s=async(u,l)=>{const d=n(u);if(!d)return new Response("Item not found",{status:404});const p=await(await St("prose-reader")).get(`${t}_${d.id}`);if(p)return new Response(p,{status:200});const h=l&&await l(d)||await fetch(d.href);return r(d,h.clone()),h},r=(u,l)=>{i.next({id:u,data:l})};i.asObservable().pipe(b.mergeMap(({id:u,data:l})=>{const d=n(u);return d?o.from(o.forkJoin([St("prose-reader"),o.from(l.blob())])).pipe(b.switchMap(([g,p])=>o.from(g.put(`${t}_${d.id}`,p))),b.catchError(g=>(A.error(g),o.EMPTY))):o.EMPTY}),b.takeUntil(e.destroy$)).subscribe();const a=e.manifest$.pipe(b.tap(()=>{t=Date.now().toString()}));return o.merge(a).pipe(b.switchMap(()=>(A.debug("Cleanup up old cache..."),o.from(St("prose-reader")).pipe(b.switchMap(u=>o.from(u.keys()).pipe(b.map(l=>l.filter(d=>!d.toString().startsWith(t))),b.switchMap(l=>{const d=l.map(g=>u.remove(g));return o.from(Promise.all(d))}))),b.catchError(u=>(A.error(u),o.EMPTY))))),b.takeUntil(e.destroy$)).subscribe(),{get:s,destroy:()=>{i.complete()}}},Vi=e=>t=>{const i=e(t),n=Ni(i.context);return{...i,destroy:()=>{n.destroy(),i.destroy()}}},ki=(e,t)=>{var s;const i=(s=e.node.ownerDocument)==null?void 0:s.createRange(),n=e.node.compareDocumentPosition(t.node);if(i){try{if(n&Node.DOCUMENT_POSITION_PRECEDING)i.setStart(t.node,t.offset||0),i.setEnd(e.node,e.offset||0);else if(n&Node.DOCUMENT_POSITION_FOLLOWING)i.setStart(e.node,e.offset||0),i.setEnd(t.node,t.offset||0);else{const r=Math.min(e.offset||0,t.offset||0),a=Math.max(e.offset||0,t.offset||0);i.setStart(e.node,r),i.setEnd(e.node,a)}}catch(r){A.warn("Failed to create range from selection",r,{anchor:e,focus:t})}return i}},Ui=({selection:e,spineItem:t})=>{const{anchorNode:i,anchorOffset:n,focusNode:s,focusOffset:r}=e;if(!(!i||!s))try{return ki({node:i,offset:n},{node:s,offset:r})}catch(a){A.warn("Failed to create range from selection",a,{selection:e,spineItem:t});return}};class Ei extends O{constructor(t){var n;super();const i=t.contentDocument||((n=t.contentWindow)==null?void 0:n.document);if(!i)this.selectionChange$=o.NEVER,this.selectionOver$=o.NEVER;else{const s=lt(i.body,{childList:!0,subtree:!0}).pipe(o.filter(a=>!!a.find(c=>c.type==="childList"&&c.removedNodes.length))),r=t.parentElement?lt(t.parentElement,{childList:!0}).pipe(o.filter(a=>!!a.find(c=>Array.from(c.removedNodes).includes(t)))):o.of(null);this.selectionChange$=o.merge(o.fromEvent(i,"selectionchange"),s).pipe(o.map(()=>i.getSelection()),o.takeUntil(o.merge(r,this.destroy$)),o.endWith(null)),this.selectionOver$=o.fromEvent(i,"pointerdown").pipe(o.switchMap(()=>o.merge(o.fromEvent(i,"pointerup"),o.fromEvent(i,"pointercancel"),o.fromEvent(i,"contextmenu")).pipe(o.first(),o.delay(0),o.map(a=>{const c=i.getSelection();return c&&!c.isCollapsed?[a,c]:void 0}),o.filter(E))),o.takeUntil(o.merge(r,this.destroy$)))}}}const Wi=e=>e.loaded$.pipe(o.switchMap(()=>{var s;const t=e.renderer.getDocumentFrame(),i=(t==null?void 0:t.contentDocument)||((s=t==null?void 0:t.contentWindow)==null?void 0:s.document);if(!t||!i)return o.NEVER;const n=new Ei(t);return o.merge(n.selectionChange$.pipe(o.map(r=>{if(r!=null&&r.toString())return{type:"change",selection:r}})),n.selectionOver$.pipe(o.map(([r,a])=>({type:"over",event:r,selection:a})))).pipe(o.takeUntil(e.unloaded$),o.endWith(void 0),o.finalize(()=>{n.destroy()}))}),o.distinctUntilChanged()),zi=e=>t=>{const i=e(t);let n;const s=i.spineItemsManager.items$.pipe(o.switchMap(d=>{const g=d.map(p=>{const h=i.spineItemsManager.getSpineItemIndex(p)??0;return Wi(p).pipe(o.map(m=>{if(m)return{...m,itemIndex:h}}))});return o.merge(...g)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{n=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==null?void 0:d.type)==="over"),o.share()),l=i.context.containerElement$.pipe(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(i.$.destroy$)).subscribe(),{...i,selection:{selection$:r,selectionStart$:a,selectionEnd$:c,selectionOver$:u,lastSelectionOnPointerdown$:l,getSelection:()=>n,createOrderedRangeFromSelection:Ui}}},qt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],Hi=e=>t=>{const i=e(t),n=new o.BehaviorSubject(t.theme??"bright"),s=()=>{const c=qt.find(u=>u.name===n.value);return`
247
+ `,e.appendChild(i),e.appendChild(n),e},ni=e=>t=>{const{loadingElementCreate:i=ii}=t,n=e(t),s=u=>o.of(u.reduce((l,{item:d,element:g})=>{g.style.zIndex="0";const p=g.querySelector(`.${Et}`);if(p instanceof HTMLElement)return l[d.id]=p,l;const h=i({container:ei(g,n.context),item:d});return g.appendChild(h),l[d.id]=h,l},{})),r=u=>o.combineLatest([n.spine.spineLayout.layout$,n.theme.$.theme$]).pipe(b.map(([,l])=>({width:n.context.state.visibleAreaRect.width,theme:l})),b.distinctUntilChanged(M.isShallowEqual),b.tap(({width:l,theme:d})=>{Object.values(u).forEach(g=>{g.style.setProperty("max-width",`${l}px`),g.style.setProperty("color",d==="sepia"?"#939393":"rgb(202, 202, 202)")})})),a=u=>n.spineItemsObserver.itemIsReady$.pipe(b.tap(({item:l,isReady:d})=>{var g,p;(g=u[l.item.id])==null||g.style.setProperty("visibility",d?"hidden":"visible"),(p=u[l.item.id])==null||p.style.setProperty("z-index",d?"0":"1")})),c=n.spineItemsManager.items$.pipe(b.switchMap(u=>s(u)),b.shareReplay(1),b.takeUntil(n.context.destroy$));return c.pipe(b.switchMap(u=>o.merge(r(u),a(u))),b.takeUntil(n.$.destroy$)).subscribe(),{...n,loading:{$:{items$:c}}}};class oi extends z{getImageElement(){const t=this.documentContainer;if(t instanceof HTMLImageElement)return t}onCreateDocument(){const t=this.containerElement.ownerDocument.createElement("img");return o.from(this.resourcesHandler.getResource()).pipe(o.switchMap(i=>{if(this.setDocumentContainer(t),t.style.objectFit="contain",t.style.userSelect="none",i instanceof URL)return o.of(i.href);if(i instanceof Response)return o.from(i.blob()).pipe(o.map(n=>URL.createObjectURL(n)));throw new Error("Invalid resource")}),o.map(i=>{const n=this.getImageElement();return n&&(n.src=i),t}))}onLoadDocument(){const t=this.getImageElement();if(!t)throw new Error("invalid element");return this.attach(),o.fromEvent(t,"load")}onUnload(){const t=this.getImageElement();return t&&URL.revokeObjectURL(t.src),this.detach(),o.EMPTY}onLayout({spreadPosition:t}){const i=this.getImageElement(),{height:n,width:s}=this.context.getPageSize();let r=n;const a=s;if(!i)return o.of(void 0);const c=i.naturalWidth||1,u=i.naturalHeight||1,l=c/u;return this.settings.values.computedPageTurnDirection==="vertical"&&this.settings.values.computedPageTurnMode==="scrollable"&&!this.context.state.isUsingSpreadMode&&(r=Math.ceil(s/l)),i.style.height=`${r}px`,i.style.width=`${a}px`,i.style.objectPosition=t==="left"?"right":t==="right"?"left":"center",o.of({width:a,height:r})}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}const si=e=>t=>{const i=e({...t,getRenderer(a){var d;const c=(d=t.getRenderer)==null?void 0:d.call(t,a),u=a.mediaType??M.detectMimeTypeFromName(a.href),l=!!(u!=null&&u.startsWith("image/"));return!c&&l?g=>new oi(g):c}}),n=new IntersectionObserver(a=>{a.forEach(c=>{var d;const u=c.target,l=Array.from(((d=u.contentDocument)==null?void 0:d.body.getElementsByTagName("audio"))||[]);c.isIntersecting?l.forEach(g=>{g.hasAttribute("autoplay")&&g.paused&&g.readyState>=2&&g.play().catch(console.error)}):l.forEach(g=>{g.pause(),g.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 i.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{var g,p;const u=(g=i.spineItemsManager.get(c))==null?void 0:g.renderer.getDocumentFrame();if(!u)return;n.observe(u);const l=(p=u.contentDocument)==null?void 0:p.body.getElementsByTagName("video"),d=Array.from(l||[]).map(h=>(s.observe(h),()=>s.unobserve(h)));a(()=>{n.unobserve(u),d.forEach(h=>h())})}),{...i,destroy:()=>{n.disconnect(),s.disconnect(),i.destroy()}}},ri=(e,t)=>e.links$.pipe(o.tap(i=>{var a;if(!Rt(i.target,"a")||i.type!=="click")return;const n=new URL(i.target.href),s=`${n.origin}${n.pathname}`;((a=e.context.manifest)==null?void 0:a.spineItems.some(c=>c.href===s))&&t.goToUrl(n)})),U=A.namespace("navigation");class C{constructor(t){this.__symbol=Symbol("SpineItemPosition"),this.x=t.x,this.y=t.y}}const ai=({position:e,spineItem:t,pageHeight:i,pageWidth:n,spineItemLocator:s})=>{let r=new C({x:e.x-n,y:e.y});return t.isUsingVerticalWriting()&&(r=new C({x:e.x,y:e.y+i})),s.getSpineItemClosestPositionFromUnsafePosition(r,t)},Wt=({position:e,navigationResolver:t,computedPageTurnDirection:i,spineItemsManager:n,spineLocator:s,context:r})=>{const a=i,c=s.getSpineItemFromPosition(e)||n.get(0),u=e;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(e,c),d=ai({position:l,spineItem:c,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return t.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):t.getAdjustedPositionWithSafeEdge(a==="horizontal"?new F({x:e.x-r.getPageSize().width,y:0}):new F({y:e.y-r.getPageSize().height,x:0}))},ci=({position:e,spineItem:t,context:i,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a})=>{const c=Wt({position:e,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(t!=null&&t.isUsingVerticalWriting()&&e.x===c.x)return n.getAdjustedPositionForSpread(c);if(i.state.isUsingSpreadMode){if(t!=null&&t.isUsingVerticalWriting()&&e.x!==c.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(i.isRTL()?{...c,x:c.x+i.getPageSize().width}:{...c,x:c.x-i.getPageSize().width}));if(a==="vertical"&&e.y!==c.y)return n.getAdjustedPositionForSpread(c);const u=Wt({position:c,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(u)}return n.getAdjustedPositionForSpread(c)},ui=({position:e,spineItem:t,pageHeight:i,pageWidth:n,spineItemLocator:s})=>{let r=new C({x:e.x+n,y:e.y});return t.isUsingVerticalWriting()&&(r=new C({x:e.x,y:e.y-i})),s.getSpineItemClosestPositionFromUnsafePosition(r,t)},zt=({position:e,navigationResolver:t,computedPageTurnDirection:i,spineItemsManager:n,spineLocator:s,context:r})=>{const a=i,c=s.getSpineItemFromPosition(e)||n.get(0),u=e;if(!c)return u;const l=s.getSpineItemPositionFromSpinePosition(e,c),d=ui({position:l,spineItem:c,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return t.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):t.getAdjustedPositionWithSafeEdge(a==="horizontal"?new F({x:e.x+r.getPageSize().width,y:0}):new F({y:e.y+r.getPageSize().height,x:0}))},li=({position:e,spineItem:t,context:i,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a})=>{const c=zt({position:e,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(t!=null&&t.isUsingVerticalWriting()&&e.x===c.x)return n.getAdjustedPositionForSpread(c);if(i.state.isUsingSpreadMode){if(t!=null&&t.isUsingVerticalWriting()&&e.x!==c.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(i.isRTL()?{...c,x:c.x-i.getPageSize().width}:{...c,x:c.x+i.getPageSize().width}));if(a==="vertical"&&e.y!==c.y)return n.getAdjustedPositionForSpread(c);const u=zt({position:c,context:i,navigationResolver:n,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(u)}return n.getAdjustedPositionForSpread(c)};class di{constructor(t){this.reader=t,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new F({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 t=this.reader.navigation.getNavigation(),i=this.reader.spineItemsManager.get(t.spineItem);if(!i)return;const n=li({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:t.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:i,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator});return this.reader.navigation.navigate({position:n})}turnLeftOrTop(){const t=this.reader.navigation.getNavigation(),i=this.reader.spineItemsManager.get(t.spineItem);if(!i)return;const n=ci({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:t.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:i,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator});return this.reader.navigation.navigate({position:n})}goToCfi(t,i={animate:!0}){return this.reader.navigation.navigate({animation:i.animate?"turn":!1,cfi:t})}goToSpineItem({indexOrId:t,...i}){const n=this.reader.spineItemsManager.get(t);if(n===void 0){U.warn("goToSpineItem",`Ignore navigation to ${t} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:n.index,...i})}goToNextSpineItem(){const{endIndex:t=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:.5})||{};this.goToSpineItem({indexOrId:t+1})}goToPreviousSpineItem(){const{beginIndex:t=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:.5})??{};this.goToSpineItem({indexOrId:t-1})}goToUrl(t){this.reader.navigation.navigate({url:t,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){U.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"){U.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"){U.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){U.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:t,spineItemId:i,...n}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:t,spineItemId:i});U.debug(".goToPageOfSpineItem()",{pageIndex:t,spineItemId:i,...n,position:s}),this.reader.navigation.navigate({position:s,...n})}goToAbsolutePageIndex({absolutePageIndex:t,...i}){const n=this.reader.spine.locator.getSpineInfoFromAbsolutePageIndex({absolutePageIndex:t});if(U.debug(".goToAbsolutePageIndex()",{absolutePageIndex:t,...i,foundInfo:n}),n){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:n.pageIndex,spineItemId:n.itemIndex});return this.reader.navigation.navigate({position:s,...i})}}}class gi{constructor(t){this.reader=t,this.lastDelta={x:0,y:0},this.lastPosition=new F({x:0,y:0}),this.lastStartPosition=new F({x:0,y:0}),this.unlock=void 0}moveTo(t,{final:i,start:n}={}){var a,c,u,l;if(this.reader.settings.values.computedPageTurnMode==="scrollable"){U.warn("pan control is not available on free page turn mode");return}const s=this.reader.settings.values.computedPageTurnDirection;n&&((a=this.unlock)==null||a.call(this),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(t){const d=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,g=Math.floor(t.x)-(((c=this.lastDelta)==null?void 0:c.x)||0),p=Math.floor(t.y)-(((u=this.lastDelta)==null?void 0:u.y)||0),h=Math.floor(s==="horizontal"?this.lastPosition.x-g/d:0),m=Math.floor(s==="horizontal"?0:this.lastPosition.y-p/d);r=new F({x:h,y:m}),this.lastDelta=t}else r=this.lastPosition;if(this.lastPosition=r,i){this.lastDelta={x:0,y:0},this.reader.navigation.navigate({position:r,animation:!1}),(l=this.unlock)==null||l.call(this);return}this.reader.navigation.navigate({position:r,animation:!1})}}const pi=e=>e.pagination.state$.pipe(o.withLatestFrom(e.context.manifest$,e.settings.values$),o.map(([t,{spineItems:i,readingDirection:n},{computedPageTurnDirection:s}])=>{const r=i.length??0,a=t.beginSpineItemIndex===0,c=t.endSpineItemIndex===Math.max(r-1,0),u=t.endSpineItemIndex===Math.max(r-1,0),l=t.beginSpineItemIndex===0,d=t.beginPageIndexInSpineItem===0,g=t.endPageIndexInSpineItem===t.endNumberOfPagesInSpineItem-1;return{canTurnLeft:s==="vertical"?!1:!d,canTurnRight:s==="vertical"?!1:!g,canGoTopSpineItem:s==="vertical"&&!a,canGoBottomSpineItem:s==="vertical"&&!c,canGoLeftSpineItem:s!=="vertical"&&(n==="ltr"&&!a||n==="rtl"&&!u),canGoRightSpineItem:s!=="vertical"&&(n==="ltr"&&!c||n==="rtl"&&!l)}}),o.distinctUntilChanged(M.isShallowEqual)),hi=({reader:e,duration:t})=>i=>{let n;const s=()=>{n==null||n(),n=void 0};return i.pipe(o.tap(()=>{n||(n=e==null?void 0:e.navigation.lock())}),o.throttleTime(t,o.animationFrameScheduler,{trailing:!0,leading:!0}),o.tap(s),o.finalize(s))},mi=e=>t=>{const i=e(t),n=pi(i),s=new di(i),r=new gi(i),a=u=>{const{cfi:l,...d}=u;i.load(d),l&&s.goToCfi(l,{animate:!1})};return ri(i,s).pipe(o.takeUntil(i.$.destroy$)).subscribe(),{...i,load:a,navigation:{...i.navigation,state$:n,throttleLock:({duration:u,trigger:l})=>l.pipe(hi({duration:u,reader:i})),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)}}},q=e=>E.generate({spineIndex:e.index,spineId:e.id}),x=(e,t,i)=>{var n;return!e.ownerDocument||!((n=e.ownerDocument)!=null&&n.documentElement)||e===e.ownerDocument?q(i):E.generate({node:e,offset:t,spineIndex:i.index,spineId:i.id})},pt=({pageIndex:e,spineItem:t,spineItemLocator:i})=>{var r;const n=i.getFirstNodeOrRangeAtPage(e,t),s=t.renderer.getDocumentFrame();return n&&s instanceof HTMLIFrameElement&&((r=s.contentWindow)!=null&&r.document)?x(n.node,n.offset,t.item).trim():q(t.item)},fi=(e,t)=>{const i=x(e.startContainer,e.startOffset,t),n=x(e.endContainer,e.endOffset,t);return{start:i,end:n}},Si=({item:e,selection:t})=>{const i=t.anchorNode?x(t.anchorNode,t.anchorOffset,e):void 0,n=t.focusNode?x(t.focusNode,t.focusOffset,e):void 0;return{anchorCfi:i,focusCfi:n}},Ht=e=>{var t;return((t=e[0])==null?void 0:t.index)===6&&e.length>1},ht=e=>{const t=E.parse(e);return E.isIndirectionOnly(t)},bi=e=>Array.isArray(e)?e[0]&&Ht(e[0])?e[0]:void 0:e.parent[0]&&Ht(e.parent[0])?e.parent[0]:void 0,mt=e=>{var c,u,l,d;const t=E.parse(e),n=(bi(t)??[])[1],r=((n==null?void 0:n.index)??2)/2-1,a=E.isParsedCfiRange(t)?(u=(c=t.end.at(-1))==null?void 0:c.at(-1))==null?void 0:u.offset:(d=(l=t.at(-1))==null?void 0:l.at(-1))==null?void 0:d.offset;return{cleanedCfi:e,itemIndex:r,offset:a??0}},Bt=({cfi:e,spineItemsManager:t})=>{var r,a;if(!e)return;const{itemIndex:i}=mt(e),n=t.get(i);if(!n)return;const s=n.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){console.log("FIII",e);const c=(r=s.contentWindow)==null?void 0:r.document;if(c)try{const u=E.resolve(e,c,{throwOnError:!0});return{node:u.isRange?(a=u.node)==null?void 0:a.startContainer:u.node,offset:Array.isArray(u.offset)?u.offset.at(-1):u.offset,spineItem:n}}catch(u){return A.error(u),{spineItem:n}}}return{spineItem:n}},yi=(e,t)=>{if("cfi"in t)return t;const i=e.spineItemsManager.get(t);if(!i)throw new Error("Spine item not found");return{cfi:q(i.item)}},wi=(e,t)=>{let i=e==null?void 0:e.itemPageIndex;const{itemIndex:n}=t.cfi.parseCfi(e.cfi),s=t.spineItemsManager.get(n);return s?ct().pipe(o.withLatestFrom(s.isReady$),o.map(([,r])=>{var g;let a;const{node:c,offset:u}=t.cfi.resolveCfi({cfi:e.cfi})??{};if(s.renditionLayout!=="pre-paginated"&&c&&(i=t.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,u??0,s)??i),c&&e.endCfi){const{node:p,offset:h}=t.cfi.resolveCfi({cfi:e.cfi})??{};p&&r&&(a=(g=c==null?void 0:c.ownerDocument)==null?void 0:g.createRange(),a==null||a.setStart(c,u??0),a==null||a.setEnd(p,h??0))}let d=e==null?void 0:e.absolutePageIndex;return i===void 0&&(i=0),d=t.spine.locator.getAbsolutePageIndexFromPageIndex({pageIndex:i,spineItemOrId:s})??(e==null?void 0:e.absolutePageIndex),{...e,range:a,itemIndex:n,startNode:c??void 0,startOffset:u,absolutePageIndex:d,itemPageIndex:i}})):o.of({...e,itemIndex:n})};class Ii{constructor(t){this.reader=t,this.locate=(i,n)=>{const s={resource:i,meta:yi(this.reader,i)};return ut(()=>{var d;const r=this.reader.spine.spineLayout.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(g=>wi(g.meta,this.reader).pipe(o.map(p=>({...g,meta:p}))),s)),a=(d=this.reader.cfi.parseCfi(s.meta.cfi))==null?void 0:d.itemIndex,c=this.reader.spineItemsManager.get(a),u=(c==null?void 0:c.renditionLayout)==="reflowable",l=n.mode==="shallow"||!u||!c?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([c.index]);return r.pipe(o.finalize(()=>{setTimeout(()=>{l()},1e3)}))})}}locateResource(t,i){return Array.isArray(t)?ut(()=>o.combineLatest(t.map(n=>this.locate(n,i??{})))):this.locate(t,i??{})}}const _t=(e,t,i)=>{const n=i.spineItems.findIndex(s=>s.href===e);return t.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=e.substring(0,e.lastIndexOf("/")),d=e.endsWith(c),g=l!==""&&l.endsWith(u);if(d||g){const h=i.spineItems.findIndex(S=>S.href===r.href);if(n<h)return s;const f={title:r.title,path:r.path},w=_t(e,r.contents,i);return w?{...f,subChapter:w}:f}return s},void 0)},Pi=(e,t)=>{var n;const{href:i}=t;return _t(i,((n=e.nav)==null?void 0:n.toc)??[],e)},vi=e=>{const t=e.context.manifest,i=e.spineItemsManager.items;return t?i.reduce((n,{item:s})=>(n[s.id]=Pi(t,s),n),{}):{}},$i=e=>e.spineItemsManager.items$.pipe(o.startWith([]),o.map(()=>vi(e))),Mi=(e,t,i)=>e+t*i,Ti=(e,t,i)=>{const n=e.context,{height:s,width:r}=i.layout.layoutInfo,{top:a,left:c}=e.spine.spineLayout.getSpineItemSpineLayoutInfo(i);return e.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(t.y-a+n.state.visibleAreaRect.height)/s)):Math.max(0,Math.min(1,(t.x-c+n.state.visibleAreaRect.width)/r))},Fi=(e,t,i,n,s)=>s.isReady$.pipe(o.first(),o.withLatestFrom(e.layoutInfo$),o.map(([r,a])=>{var S,y,I,P,v,T,L;const c=e.context,u=((S=c.manifest)==null?void 0:S.renditionLayout)==="pre-paginated",l=((y=c.manifest)==null?void 0:y.spineItems.length)||0,d=((I=c.manifest)==null?void 0:I.spineItems.slice(0,t).reduce((R,D)=>R+(D.progressionWeight??0),0))||0,g=e.spineItemsManager.getSpineItemIndex(s)??0,p=((P=e.context.manifest)==null?void 0:P.spineItems.length)??0,h=a.pages.filter(R=>R.itemIndex===g).length??0,m=((T=(v=c.manifest)==null?void 0:v.spineItems[t])==null?void 0:T.progressionWeight)??(g+1)/p;let f=(i+1)*(m/h);!u&&s.renditionLayout==="reflowable"&&!r&&(f=0);let w=d+f;return((L=c.manifest)==null?void 0:L.renditionFlow)==="scrolled-continuous"&&(r?f=Ti(e,n,s):f=0,w=Mi(d,m,f)),t===l-1&&i===h-1&&w>.99?1:w})),Li=e=>e.spine.spineLayout.layout$.pipe(o.debounceTime(10,o.animationFrameScheduler),o.withLatestFrom(e.pagination.state$),o.map(()=>({numberOfPagesPerItems:e.spineItemsManager.items.reduce((i,n)=>[...i,n.numberOfPages],[]),numberOfTotalPages:e.spine.spineLayout.numberOfPages})),o.distinctUntilChanged(M.isShallowEqual),o.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),Ci=(e,t,i,n)=>{const s=e.context,r=t.beginSpineItemIndex!==void 0?e.spineItemsManager.get(t.beginSpineItemIndex):void 0,a=t.endSpineItemIndex!==void 0?e.spineItemsManager.get(t.endSpineItemIndex):void 0;return o.of({...t,beginChapterInfo:r?i[r.item.id]:void 0,beginSpineItemReadingDirection:r==null?void 0:r.readingDirection,endChapterInfo:a?i[a.item.id]:void 0,endSpineItemReadingDirection:a==null?void 0:a.readingDirection,percentageEstimateOfBook:n,isUsingSpread:s.state.isUsingSpreadMode??!1})},Ri=e=>o.combineLatest([e.pagination.state$,e.layout$]).pipe(o.switchMap(([t])=>{const i=t.endSpineItemIndex!==void 0?e.spineItemsManager.get(t.endSpineItemIndex):void 0;return i?Fi(e,t.endSpineItemIndex??0,t.endPageIndexInSpineItem||0,e.navigation.getNavigation().position,i):o.of(0)})),Ai=e=>{const t=$i(e),i=Li(e),n=new o.BehaviorSubject({...e.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([e.pagination.state$,t,Ri(e)]).pipe(o.switchMap(([a,c,u])=>Ci(e,a,c,u).pipe(o.map(l=>({...a,...l})))),o.distinctUntilChanged(M.isShallowEqual));return{paginationInfo$:o.combineLatest([s,i]).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=>{n.next(a)}),o.shareReplay(1)),getPaginationInfo:()=>n.value}},Oi=e=>t=>{const i=e(t),{paginationInfo$:n,getPaginationInfo:s}=Ai(i);n.pipe(o.takeUntil(i.$.destroy$)).subscribe();const r=new Ii(i);return{...i,locateResource:r.locateResource.bind(r),pagination:{...i.pagination,get state(){return s()},get state$(){return n}}}},Di=e=>({put:(r,a)=>new Promise((c,u)=>{const l=e.transaction(["store"],"readwrite");l.onerror=p=>{u(p)},l.oncomplete=()=>{c()};const g=l.objectStore("store").put(a,r);g.onsuccess=()=>{c()},g.onerror=p=>{u(p)}}),keys:()=>new Promise((r,a)=>{const c=e.transaction(["store"],"readonly");c.onerror=g=>{a(g)};const l=c.objectStore("store").openKeyCursor(),d=[];l.onsuccess=()=>{const g=l.result;if(!g){r(d);return}d.push(g.key),g.continue()},l.onerror=()=>{a(l.error)}}),get:r=>new Promise((a,c)=>{const u=e.transaction(["store"],"readwrite"),d=u.objectStore("store").get(r);d.onsuccess=()=>{let g=d.result;g===void 0&&(g=null),a(g)},u.onerror=()=>{c(d.error)}}),remove:r=>new Promise((a,c)=>{const u=e.transaction(["store"],"readwrite"),d=u.objectStore("store").delete(r);u.onerror=()=>{c(d.error)},u.oncomplete=()=>{a()},u.onabort=()=>{var p;const g=d.error?d.error:(p=d.transaction)==null?void 0:p.error;c(g)}})}),ft=async e=>new Promise((t,i)=>{const n=window.indexedDB.open(e);n.onerror=s=>{i(s)},n.onsuccess=()=>{t(Di(n.result))},n.onupgradeneeded=()=>{n.result.createObjectStore("store")}}),Ni=e=>{let t=Date.now().toString();const i=new o.Subject,n=u=>{var l,d;if(typeof u=="string"||typeof u=="object"){const g=typeof u=="object"?u.id:u;return(l=e.manifest)==null?void 0:l.spineItems.find(p=>p.id===g)}return(d=e.manifest)==null?void 0:d.spineItems[u]},s=async(u,l)=>{const d=n(u);if(!d)return new Response("Item not found",{status:404});const p=await(await ft("prose-reader")).get(`${t}_${d.id}`);if(p)return new Response(p,{status:200});const h=l&&await l(d)||await fetch(d.href);return r(d,h.clone()),h},r=(u,l)=>{i.next({id:u,data:l})};i.asObservable().pipe(b.mergeMap(({id:u,data:l})=>{const d=n(u);return d?o.from(o.forkJoin([ft("prose-reader"),o.from(l.blob())])).pipe(b.switchMap(([g,p])=>o.from(g.put(`${t}_${d.id}`,p))),b.catchError(g=>(A.error(g),o.EMPTY))):o.EMPTY}),b.takeUntil(e.destroy$)).subscribe();const a=e.manifest$.pipe(b.tap(()=>{t=Date.now().toString()}));return o.merge(a).pipe(b.switchMap(()=>(A.debug("Cleanup up old cache..."),o.from(ft("prose-reader")).pipe(b.switchMap(u=>o.from(u.keys()).pipe(b.map(l=>l.filter(d=>!d.toString().startsWith(t))),b.switchMap(l=>{const d=l.map(g=>u.remove(g));return o.from(Promise.all(d))}))),b.catchError(u=>(A.error(u),o.EMPTY))))),b.takeUntil(e.destroy$)).subscribe(),{get:s,destroy:()=>{i.complete()}}},Vi=e=>t=>{const i=e(t),n=Ni(i.context);return{...i,destroy:()=>{n.destroy(),i.destroy()}}},ki=(e,t)=>{var s;const i=(s=e.node.ownerDocument)==null?void 0:s.createRange(),n=e.node.compareDocumentPosition(t.node);if(i){try{if(n&Node.DOCUMENT_POSITION_PRECEDING)i.setStart(t.node,t.offset||0),i.setEnd(e.node,e.offset||0);else if(n&Node.DOCUMENT_POSITION_FOLLOWING)i.setStart(e.node,e.offset||0),i.setEnd(t.node,t.offset||0);else{const r=Math.min(e.offset||0,t.offset||0),a=Math.max(e.offset||0,t.offset||0);i.setStart(e.node,r),i.setEnd(e.node,a)}}catch(r){A.warn("Failed to create range from selection",r,{anchor:e,focus:t})}return i}},Ui=({selection:e,spineItem:t})=>{const{anchorNode:i,anchorOffset:n,focusNode:s,focusOffset:r}=e;if(!(!i||!s))try{return ki({node:i,offset:n},{node:s,offset:r})}catch(a){A.warn("Failed to create range from selection",a,{selection:e,spineItem:t});return}};class Ei extends O{constructor(t){var n;super();const i=t.contentDocument||((n=t.contentWindow)==null?void 0:n.document);if(!i)this.selectionChange$=o.NEVER,this.selectionOver$=o.NEVER;else{const s=lt(i.body,{childList:!0,subtree:!0}).pipe(o.filter(a=>!!a.find(c=>c.type==="childList"&&c.removedNodes.length))),r=t.parentElement?lt(t.parentElement,{childList:!0}).pipe(o.filter(a=>!!a.find(c=>Array.from(c.removedNodes).includes(t)))):o.of(null);this.selectionChange$=o.merge(o.fromEvent(i,"selectionchange"),s).pipe(o.map(()=>i.getSelection()),o.takeUntil(o.merge(r,this.destroy$)),o.endWith(null)),this.selectionOver$=o.fromEvent(i,"pointerdown").pipe(o.switchMap(()=>o.merge(o.fromEvent(i,"pointerup"),o.fromEvent(i,"pointercancel"),o.fromEvent(i,"contextmenu")).pipe(o.first(),o.delay(0),o.map(a=>{const c=i.getSelection();return c&&!c.isCollapsed?[a,c]:void 0}),o.filter(W))),o.takeUntil(o.merge(r,this.destroy$)))}}}const Wi=e=>e.loaded$.pipe(o.switchMap(()=>{var s;const t=e.renderer.getDocumentFrame(),i=(t==null?void 0:t.contentDocument)||((s=t==null?void 0:t.contentWindow)==null?void 0:s.document);if(!t||!i)return o.NEVER;const n=new Ei(t);return o.merge(n.selectionChange$.pipe(o.map(r=>{if(r!=null&&r.toString())return{type:"change",selection:r}})),n.selectionOver$.pipe(o.map(([r,a])=>({type:"over",event:r,selection:a})))).pipe(o.takeUntil(e.unloaded$),o.endWith(void 0),o.finalize(()=>{n.destroy()}))}),o.distinctUntilChanged()),zi=e=>t=>{const i=e(t);let n;const s=i.spineItemsManager.items$.pipe(o.switchMap(d=>{const g=d.map(p=>{const h=i.spineItemsManager.getSpineItemIndex(p)??0;return Wi(p).pipe(o.map(m=>{if(m)return{...m,itemIndex:h}}))});return o.merge(...g)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{n=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==null?void 0:d.type)==="over"),o.share()),l=i.context.containerElement$.pipe(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(i.$.destroy$)).subscribe(),{...i,selection:{selection$:r,selectionStart$:a,selectionEnd$:c,selectionOver$:u,lastSelectionOnPointerdown$:l,getSelection:()=>n,createOrderedRangeFromSelection:Ui}}},qt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],Hi=e=>t=>{const i=e(t),n=new o.BehaviorSubject(t.theme??"bright"),s=()=>{const c=qt.find(u=>u.name===n.value);return`
248
248
  body {
249
249
  ${c!==void 0?`background-color: ${c.backgroundColor} !important;`:""}
250
250
  }
@@ -264,7 +264,7 @@
264
264
  width: 100%;
265
265
  height: 100%;
266
266
  user-select: none;
267
- `;const n=t.cloneNode();n.src=t.src,n.style.setProperty("height","100%"),n.style.setProperty("width","100%"),n.style.setProperty("object-fit","contain"),n.style.setProperty("pointer-events","none"),this.element.appendChild(n),i.appendChild(this.element),this.isZooming$.next(!0)}}exit(){var t;(t=this.element)==null||t.remove(),this.element=void 0,this.currentPosition={x:0,y:0},this.currentScale=1,this.isZooming$.next(!1)}moveAt(t){var n;const i=(n=this.element)==null?void 0:n.querySelector("img");i==null||i.style.setProperty("transform",`translate3d(${t.x}px, ${t.y}px, 0px) scale3d(${this.currentScale}, ${this.currentScale}, 1)`),this.currentPosition=t}scaleAt(t){var s;const i=Math.max(.01,t),n=(s=this.element)==null?void 0:s.querySelector("img");n==null||n.style.setProperty("transform",`translate3d(${this.currentPosition.x}px, ${this.currentPosition.y}px, 0px) scale3d(${i}, ${i}, 1)`),this.currentScale=i}}const Q=({newScale:e,oldScale:t,screenSize:i,scrollOffset:n})=>{const s=i*e/2-i+i/2,r=i*t/2-i+i/2,a=e/t,c=n-r;return Math.max(s+c*a,0)};class xi extends xt{constructor(){super(...arguments),this.isZooming$=new o.BehaviorSubject(!1),this.currentScale=1,this.currentPosition={x:0,y:0}}enter(){this.currentScale=1,this.currentPosition={x:0,y:0};const t=this.reader.spine.element;t&&(t.style.transformOrigin="0 0"),this.isZooming$.next(!0)}exit(){this.scaleAt(1),this.isZooming$.next(!1)}moveAt(){}scaleAt(t){const i=this.reader.spine.element,n=this.reader.navigation.scrollNavigationController.value.element;if(!i||!n)return;const s=Math.ceil(t*100)/100,r=Math.max(s,1),a=i.getBoundingClientRect().width/i.offsetWidth,c=n.scrollTop;i.style.transform=`scale(${r})`,n.scrollLeft=Q({newScale:r,oldScale:a,pageSize:n.clientWidth,screenSize:i.offsetWidth,scrollOffset:n.scrollLeft}),n.scrollTop=Q({newScale:r,oldScale:a,pageSize:n.clientHeight,screenSize:i.offsetHeight,scrollOffset:c}),this.currentScale=s}}const Yi=e=>t=>{const i=e(t),n=new qi(i),s=new xi(i),r=new o.BehaviorSubject(s);return{...i,destroy:()=>{n.exit(),s.exit(),r.complete(),i.destroy()},zoom:{enter:u=>{const l=i.settings.values.computedPageTurnMode==="scrollable"?s:n;r.next(l),l.enter(u)},scaleAt:u=>r.getValue().scaleAt(u),moveAt:u=>r.getValue().moveAt(u),exit:()=>r.getValue().exit(),get currentPosition(){return r.getValue().currentPosition},get currentScale(){return r.getValue().currentScale},isZooming$:r.pipe(o.switchMap(u=>u.isZooming$)),get zoomContainerElement(){return r.getValue().element},get isZooming(){return r.getValue().isZooming$.getValue()}}}},Yt=e=>(e==null?void 0:e.renditionLayout)==="pre-paginated"||(e==null?void 0:e.spineItems.every(t=>t.renditionLayout==="pre-paginated"));class Y extends o.Observable{constructor(t){super(i=>this.stateSubject.pipe(o.takeUntil(this.destroy$)).subscribe(i)),this.destroy$=new o.Subject,this.stateSubject=new o.BehaviorSubject(t)}next(t){this.stateSubject.next(t)}mergeCompare(t){const i={...this.value,...t};M.isShallowEqual(this.value,i)||this.stateSubject.next(i)}watch(t){return Array.isArray(t)?this.stateSubject.pipe(G(t)):this.stateSubject.pipe(o.map(i=>i[t]),o.distinctUntilChanged(M.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this.destroy$.complete()}}class Xi{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(t=>!t)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(o.filter(t=>t==="free")),this.viewportBusy$=this.viewportState$.pipe(o.filter(t=>t==="busy")),this.navigation$=this.navigationSubject.asObservable()}}const Zi=({manifest:e,visibleAreaRect:t,forceSinglePageMode:i})=>{const{height:n,width:s}=t,r=s>n;return i||(e==null?void 0:e.renditionFlow)==="scrolled-continuous"?!1:!r&&(e==null?void 0:e.renditionSpread)==="portrait"?!0:r&&((e==null?void 0:e.renditionSpread)===void 0||(e==null?void 0:e.renditionSpread)==="auto"||(e==null?void 0:e.renditionSpread)==="landscape"||(e==null?void 0:e.renditionSpread)==="both")};class Gi extends Y{constructor(){super({marginBottom:0,marginTop:0,calculatedInnerMargin:0,assumedRenditionLayout:"reflowable",visibleAreaRect:{width:0,height:0,x:0,y:0}}),this.bridgeEvent=new Xi,this.destroy$=new o.Subject,this.state$=this.pipe(b.distinctUntilChanged(M.isShallowEqual)),this.manifest$=this.pipe(b.map(t=>t.manifest),b.filter(E),b.distinctUntilChanged()),this.containerElement$=this.pipe(b.map(t=>t.containerElement),b.filter(E),b.distinctUntilChanged()),this.hasVerticalWriting$=this.pipe(b.map(t=>t.hasVerticalWriting),b.filter(E),b.distinctUntilChanged()),this.isUsingSpreadMode$=this.pipe(b.map(t=>t.isUsingSpreadMode),b.distinctUntilChanged()),this.isRTL=()=>{var t;return((t=this.value.manifest)==null?void 0:t.readingDirection)==="rtl"}}update(t){const i=this.value,n=t.manifest??i.manifest,s=t.forceSinglePageMode??i.forceSinglePageMode,r=t.visibleAreaRect??i.visibleAreaRect,a=t.marginTop??i.marginTop,c=t.marginBottom??i.marginBottom,u={...i,...t,...t.visibleAreaRect&&{...t.visibleAreaRect,height:t.visibleAreaRect.height-a-c},...t.manifest&&{isFullyPrePaginated:Yt(n),assumedRenditionLayout:(n==null?void 0:n.renditionLayout)??"reflowable"},isUsingSpreadMode:Zi({manifest:n,visibleAreaRect:r,forceSinglePageMode:s})};M.isShallowEqual(u,i)||this.next(u)}get state(){return this.value}get manifest(){return this.value.manifest}get readingDirection(){var t;return(t=this.manifest)==null?void 0:t.readingDirection}getPageSize(){const{isUsingSpreadMode:t,visibleAreaRect:i}=this.value;return{width:t?i.width/2:i.width,height:i.height}}}class Ji extends Y{constructor(t,i){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),o.merge(t.state$,i.values$).pipe(o.withLatestFrom(t.state$),o.map(([,{hasVerticalWriting:n}])=>{const s=t.manifest;return{hasVerticalWriting:n,renditionFlow:s==null?void 0:s.renditionFlow,renditionLayout:s==null?void 0:s.renditionLayout,computedPageTurnMode:i.values.computedPageTurnMode}}),o.distinctUntilChanged(M.isShallowEqual),o.map(({hasVerticalWriting:n,renditionFlow:s,renditionLayout:r,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||a==="scrollable"?["none"]:n?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Xt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(t){return this._hooks=this._hooks.filter(i=>i!==t),this.destroy(t.name,void 0,t)}register(t,i){const n={name:t,runFn:i};return this._hooks.push(n),()=>{this.deregister(n)}}execute(t,i,n){return this._hooks.filter(a=>t===a.name).map(a=>{let c=()=>o.of(void 0);const u=new o.Subject,l=p=>{c=p},d=()=>(u.next(),u.complete(),c()??o.of(void 0)),g=a.runFn({...n,destroy$:u.asObservable(),destroy:l});return this._hookExecutions.push({name:t,id:i,destroyFn:d,ref:a}),g})}destroy(t,i,n){const s=this._hookExecutions.filter(a=>n&&a.ref===n||t===a.name&&(!i||i&&i===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!s.includes(a));const r=s.map(({destroyFn:a})=>a());return o.combineLatest(r)}}class Zt{constructor(){this.isLockedSubject=new o.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(o.map(t=>!!t),o.distinctUntilChanged())}lock(){let t=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{t||(t=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Ki=()=>e=>e.pipe(o.map(({navigation:t,pagination:i,...n})=>({navigation:{...t,paginationBeginCfi:i.beginCfi},...n}))),Qi=(e,t,i)=>e.bridgeEvent.pagination$.pipe(o.withLatestFrom(t),o.filter(([n,s])=>n.navigationId===s.id),o.switchMap(([n,s])=>{const r=i.spineItemsManager.get(s.spineItem);return((r==null?void 0:r.isReady$.pipe(o.first()))??o.of(!1)).pipe(o.filter(a=>a),o.map(()=>({pagination:n,navigation:s})))}),Ki(),o.distinctUntilChanged((n,s)=>n.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:n})=>({...n,meta:{triggeredBy:"pagination"}}))),ji=e=>e.pipe(o.map(([t,i])=>{const n={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t};return{previousNavigation:i,navigation:n}})),tn=({navigationResolver:e})=>t=>t.pipe(o.map(i=>{if(i.navigation.cfi){const n=e.getNavigationForCfi(i.navigation.cfi);if(n)return{...i,navigation:{...i.navigation,position:n}}}return i})),en=({navigation:e,previousNavigation:t,settings:i})=>e.directionFromLastNavigation?e.directionFromLastNavigation:e.url!==void 0||e.cfi!==void 0?"anchor":t.spineItem===void 0||e.spineItem||!e.position?"forward":i.values.computedPageTurnDirection==="vertical"?e.position.y>t.position.y||e.position.y===t.position.y&&t.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(e.position.x)>Math.abs(t.position.x)||e.position.x===t.position.x&&t.directionFromLastNavigation!=="backward"?"forward":"backward",nn=({context:e,settings:t})=>i=>i.pipe(o.map(({navigation:n,previousNavigation:s})=>{const r=en({navigation:n,previousNavigation:s,settings:t}),a={...n,directionFromLastNavigation:r};return{previousNavigation:s,navigation:a,direction:r}})),on=({spineItemsManager:e,navigationResolver:t})=>i=>i.pipe(o.map(({navigation:n,...s})=>{const r=e.get(n.spineItem);return n.position?{navigation:{...n,position:t.getAdjustedPositionWithSafeEdge(n.position)},...s}:r?{navigation:{...n,position:t.getNavigationForSpineIndexOrId(r)},...s}:{navigation:{...n,position:new F({x:0,y:0})},...s}})),Gt=({settings:e,spineItemsManager:t,navigationResolver:i,spineLocator:n})=>s=>{const r=a=>{const{position:c,spineItem:u,cfi:l,directionFromLastNavigation:d}=a,{navigationSnapThreshold:g,computedPageTurnMode:p}=e.values;if(u!==void 0){const h=t.get(u);if(h)return h}if(typeof u=="number")return u>t.items.length-1?t.get(t.items.length-1):t.get(0);if(l){const h=t.getSpineItemFromCfi(l);if(h)return h}if(c&&p==="controlled"){const{beginIndex:h,endIndex:m}=n.getVisibleSpineItemsFromPosition({position:c,threshold:g,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?m:h)??h,w=t.get(f);if(!w)return;const{endPageIndex:S,beginPageIndex:y}=n.getVisiblePagesFromViewportPosition({position:c,spineItem:w,threshold:g,restrictToScreen:!1})??{},I=(d==="forward"||d==="anchor"?S:y)??0,P=i.getNavigationForSpineItemPage({pageIndex:I,spineItemId:w}),v=n.getVisibleSpineItemsFromPosition({position:P,threshold:g,restrictToScreen:!1}),T=d==="forward"||d==="anchor"?v==null?void 0:v.beginIndex:v==null?void 0:v.endIndex;return t.get(T)}return c&&p==="scrollable"?n.getSpineItemFromPosition(c):t.get(0)};return s.pipe(o.map(({navigation:a,...c})=>{const u=r(a);return{navigation:{...a,spineItem:t.getSpineItemIndex(u)},...c}}))},Jt=({spine:e})=>t=>t.pipe(o.switchMap(({navigation:i,...n})=>{const s=e.spineLayout.getSpineItemSpineLayoutInfo(i.spineItem),r=e.spineItemsManager.get(i.spineItem);return((r==null?void 0:r.isReady$)??o.of(!1)).pipe(o.first(),o.map(a=>({navigation:{...i,spineItemHeight:s==null?void 0:s.height,spineItemWidth:s==null?void 0:s.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r==null?void 0:r.isUsingVerticalWriting(),spineItemIsReady:a},...n})))})),bt=({settings:e,spineItemsManager:t,spineLocator:i,navigationResolver:n})=>s=>{const r=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:u}=e.values,l=t.get(a.spineItem);if(!(!l||!a.position)){if(u==="controlled"){const{endPageIndex:d,beginPageIndex:g}=i.getVisiblePagesFromViewportPosition({position:a.position,spineItem:l,threshold:c,restrictToScreen:!1})??{},p=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?d:g)??0,h=n.getNavigationForSpineItemPage({pageIndex:p,spineItemId:l}),m=i.getVisiblePagesFromViewportPosition({position:h,spineItem:l,threshold:0,restrictToScreen:!0}),f=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?m==null?void 0:m.beginPageIndex:m==null?void 0:m.endPageIndex)??0;return i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:l})}return i.getSpineItemPositionFromSpinePosition(a.position,l)}};return s.pipe(o.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:r(a)},...c})))},sn=({navigationResolver:e})=>t=>t.pipe(o.map(i=>{if(i.navigation.url){const n=e.getNavigationForUrl(i.navigation.url);if(n)return{...i,navigation:{...i.navigation,position:n.position,spineItem:n.spineItemId}}}return i})),rn=({spineLocator:e,navigation:t,navigationResolver:i,spineItemsManager:n,spineLayout:s})=>{const r=n.get(t.spineItem);return r?r.isReady$.pipe(o.first(),o.map(a=>{var h,m;const c=s.getSpineItemSpineLayoutInfo(r),u=e.isPositionWithinSpineItem(t.position,r),l=c.width-(t.spineItemWidth??0),d=c.height-(t.spineItemHeight??0),g=l!==0||d!==0;if(t.url!==void 0&&(l||d||a&&!t.spineItemIsReady)){const f=i.getNavigationForUrl(t.url);if(f)return f.position}const p=t.cfi??t.paginationBeginCfi;if(p!==void 0&&!mt(p)&&(l||d||a&&!t.spineItemIsReady)){const f=i.getNavigationForCfi(p);if(f)return f}if(u&&g&&t.directionFromLastNavigation==="backward"){const f=new C({x:(((h=t.positionInSpineItem)==null?void 0:h.x)??0)+l,y:(((m=t.positionInSpineItem)==null?void 0:m.y)??0)+d});return i.getNavigationFromSpineItemPosition({spineItem:r,spineItemPosition:f})}if(t.positionInSpineItem&&t.spineItemHeight&&t.spineItemWidth){const f=e.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:t.spineItemWidth,itemHeight:t.spineItemHeight,isUsingVerticalWriting:!!t.spineItemIsUsingVerticalWriting,position:t.positionInSpineItem});return i.getNavigationForSpineItemPage({pageIndex:f,spineItemId:r})}return u?i.getNavigationForPosition(t.position):i.getNavigationForSpineIndexOrId(r)})):o.of(new F({x:0,y:0}))},an=({navigation:e,spineLocator:t,spineItemsManager:i,settings:n,navigationResolver:s,spineLayout:r})=>{const{spineItem:a}=e,c=i.get(a);if(!c)return new F({x:0,y:0});const{height:u,top:l}=r.getSpineItemSpineLayoutInfo(c),d=t.isPositionWithinSpineItem(e.position,c),g=e.positionInSpineItem??new C({y:0,x:0});if(n.values.computedPageTurnDirection==="vertical"){if(l===e.spineItemTop&&u===e.spineItemHeight&&d)return e.position;if(l===e.spineItemTop&&u===e.spineItemHeight&&!d)return s.getNavigationForSpineIndexOrId(c);if(l!==e.spineItemTop){const p=t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(e.positionInSpineItem??new C({x:0,y:0}),c);return t.getSpinePositionFromSpineItemPosition({spineItemPosition:p,spineItem:c})}if(l===e.spineItemTop&&u!==e.spineItemHeight){const p=(e.spineItemHeight??g.y)-g.y,h=new C({y:e.directionFromLastNavigation==="backward"?u-p:g.y,x:e.position.x});if(d){const m=t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(h,c);return t.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:c})}if(!d){if(!(e.position.y<l)){const f=new C({y:u-p,x:e.position.x});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return s.getNavigationForSpineIndexOrId(c)}}}return e.position},cn=({navigation:e,spineItemsManager:t,settings:i,spineLocator:n,navigationResolver:s,spineLayout:r})=>i.values.computedPageTurnMode==="scrollable"?o.of(an({navigation:e,spineLocator:n,navigationResolver:s,settings:i,spineItemsManager:t,spineLayout:r})):rn({navigation:e,spineLocator:n,navigationResolver:s,spineItemsManager:t,spineLayout:r}),Kt=({settings:e,navigationResolver:t,context:i,spine:n})=>s=>s.pipe(o.switchMap(r=>cn({spineLocator:n.locator,navigation:r.navigation,navigationResolver:t,settings:e,spineItemsManager:n.spineItemsManager,spineItemLocator:n.locator.spineItemLocator,spineLayout:n.spineLayout}).pipe(o.map(a=>({...r,navigation:{...r.navigation,position:a}}))))),un=A.namespace("navigation/InternalNavigator");class ln extends O{constructor(t,i,n,s,r,a,c,u){super(),this.settings=t,this.context=i,this.userNavigation$=n,this.viewportController=s,this.scrollNavigationController=r,this.navigationResolver=a,this.spine=c,this.isUserLocked$=u,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new F({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:y})=>({position:S,id:y})),o.distinctUntilChanged(({position:S,...y},{position:I,...P})=>M.isShallowEqual(y,P)&&M.isShallowEqual(S,I)),o.shareReplay(1)),this.locker=new Zt;const l=n.pipe(o.withLatestFrom(this.navigationSubject),ji,sn({navigationResolver:a}),tn({navigationResolver:a}),nn({context:i,settings:t}),Gt({navigationResolver:a,settings:t,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),bt({navigationResolver:a,settings:t,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Jt({spine:c})).pipe(on({navigationResolver:a,spineItemsManager:c.spineItemsManager}),o.withLatestFrom(u),o.switchMap(([S,y])=>{const I=S.navigation.cfi||S.navigation.url||t.values.computedPageTurnMode==="scrollable"||y;return o.of(S).pipe(I?o.identity:Kt({navigationResolver:a,settings:t,spine:c,context:i}))}),bt({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:t,navigationResolver:a}),o.map(S=>S.navigation),o.share()),d=l.pipe(o.withLatestFrom(u),o.filter(([,S])=>S),o.switchMap(([S])=>{const y=this.locker.lock();return u.pipe(o.filter(I=>!I),o.first(),o.map(()=>({...S,animation:"snap"})),o.finalize(()=>{y()}),o.takeUntil(l))}),o.share()),g=o.merge(s.layout$,c.spineLayout.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))))),p=o.merge(g,d).pipe(o.map(S=>({navigation:S})),Kt({navigationResolver:a,settings:t,context:i,spine:c}),o.map(S=>{const y={...S.navigation,meta:{triggeredBy:"restoration"}};return{...S,navigation:y}}),Gt({navigationResolver:a,settings:t,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Jt({spine:c}),bt({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:t,navigationResolver:a}),o.map(({navigation:S})=>S),o.share()),h=Qi(i,this.navigationSubject,c),m=o.merge(p,l,h),f=S=>S.pipe(o.tap(([y,I])=>{un.info(`navigation updated from ${y.meta.triggeredBy} of type ${y.type}`,{previousNavigation:I,currentNavigation:y}),this.navigationSubject.next(y)})),w=S=>S.pipe(o.tap(([y,I])=>{const P=y.type==="scroll",v=y.meta.triggeredBy==="pagination",T=y.meta.triggeredBy==="restoration",L=M.isShallowEqual(I.position,y.position);if(P&&!T||v||L)return;const R={position:y.position,animation:y.animation};t.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(R):this.viewportController.navigate(R)}));m.pipe(o.withLatestFrom(this.navigationSubject),w,f,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const Qt=({position:{x:e,y:t},spineElement:i,element:n})=>{if(!i)throw new Error("Invalid spine element");const s=i.getBoundingClientRect().width/i.offsetWidth;return new F({x:Q({newScale:1,oldScale:s,screenSize:n.clientWidth??0,pageSize:i.scrollWidth,scrollOffset:e}),y:Q({newScale:1,oldScale:s,screenSize:n.clientHeight??0,pageSize:i.scrollHeight,scrollOffset:t})})},dn=500;class gn extends O{constructor(t,i,n,s,r){super(),this.settings=t,this.context=i,this.spine=n,this.scrollNavigationController=s,this.locker=r,this.navigationSubject=new o.Subject,this.navigation$=this.navigationSubject.asObservable();const a=this.scrollNavigationController.userScroll$.pipe(o.exhaustMap(c=>{const u=this.locker.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(c)).pipe(o.debounceTime(dn,o.animationFrameScheduler),o.first(),o.tap(()=>{const l=c.target,d=Qt({element:l,position:new F({x:l.scrollLeft??0,y:l.scrollTop??0}),spineElement:this.spine.element});this.navigationSubject.next({animation:!1,type:"scroll",position:d})}),o.finalize(()=>{u()}))}));o.merge(a).pipe(o.takeUntil(this.destroy$)).subscribe()}}const pn=e=>({x:-e.x,y:-e.y}),hn=e=>e instanceof DOMMatrix?new F({x:-e.e,y:-e.f}):new F({x:-e.x,y:-e.y}),jt=A.namespace("navigation/ViewportNavigator");class mn extends O{constructor(t,i,n,s,r){super(),this.settings=t,this.hookManager=i,this.context=n,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.withLatestFrom(this.element$),o.tap(([d,g])=>{g.style.cssText=`
267
+ `;const n=t.cloneNode();n.src=t.src,n.style.setProperty("height","100%"),n.style.setProperty("width","100%"),n.style.setProperty("object-fit","contain"),n.style.setProperty("pointer-events","none"),this.element.appendChild(n),i.appendChild(this.element),this.isZooming$.next(!0)}}exit(){var t;(t=this.element)==null||t.remove(),this.element=void 0,this.currentPosition={x:0,y:0},this.currentScale=1,this.isZooming$.next(!1)}moveAt(t){var n;const i=(n=this.element)==null?void 0:n.querySelector("img");i==null||i.style.setProperty("transform",`translate3d(${t.x}px, ${t.y}px, 0px) scale3d(${this.currentScale}, ${this.currentScale}, 1)`),this.currentPosition=t}scaleAt(t){var s;const i=Math.max(.01,t),n=(s=this.element)==null?void 0:s.querySelector("img");n==null||n.style.setProperty("transform",`translate3d(${this.currentPosition.x}px, ${this.currentPosition.y}px, 0px) scale3d(${i}, ${i}, 1)`),this.currentScale=i}}const Q=({newScale:e,oldScale:t,screenSize:i,scrollOffset:n})=>{const s=i*e/2-i+i/2,r=i*t/2-i+i/2,a=e/t,c=n-r;return Math.max(s+c*a,0)};class xi extends xt{constructor(){super(...arguments),this.isZooming$=new o.BehaviorSubject(!1),this.currentScale=1,this.currentPosition={x:0,y:0}}enter(){this.currentScale=1,this.currentPosition={x:0,y:0};const t=this.reader.spine.element;t&&(t.style.transformOrigin="0 0"),this.isZooming$.next(!0)}exit(){this.scaleAt(1),this.isZooming$.next(!1)}moveAt(){}scaleAt(t){const i=this.reader.spine.element,n=this.reader.navigation.scrollNavigationController.value.element;if(!i||!n)return;const s=Math.ceil(t*100)/100,r=Math.max(s,1),a=i.getBoundingClientRect().width/i.offsetWidth,c=n.scrollTop;i.style.transform=`scale(${r})`,n.scrollLeft=Q({newScale:r,oldScale:a,pageSize:n.clientWidth,screenSize:i.offsetWidth,scrollOffset:n.scrollLeft}),n.scrollTop=Q({newScale:r,oldScale:a,pageSize:n.clientHeight,screenSize:i.offsetHeight,scrollOffset:c}),this.currentScale=s}}const Yi=e=>t=>{const i=e(t),n=new qi(i),s=new xi(i),r=new o.BehaviorSubject(s);return{...i,destroy:()=>{n.exit(),s.exit(),r.complete(),i.destroy()},zoom:{enter:u=>{const l=i.settings.values.computedPageTurnMode==="scrollable"?s:n;r.next(l),l.enter(u)},scaleAt:u=>r.getValue().scaleAt(u),moveAt:u=>r.getValue().moveAt(u),exit:()=>r.getValue().exit(),get currentPosition(){return r.getValue().currentPosition},get currentScale(){return r.getValue().currentScale},isZooming$:r.pipe(o.switchMap(u=>u.isZooming$)),get zoomContainerElement(){return r.getValue().element},get isZooming(){return r.getValue().isZooming$.getValue()}}}},Yt=e=>(e==null?void 0:e.renditionLayout)==="pre-paginated"||(e==null?void 0:e.spineItems.every(t=>t.renditionLayout==="pre-paginated"));class Y extends o.Observable{constructor(t){super(i=>this.stateSubject.pipe(o.takeUntil(this.destroy$)).subscribe(i)),this.destroy$=new o.Subject,this.stateSubject=new o.BehaviorSubject(t)}next(t){this.stateSubject.next(t)}mergeCompare(t){const i={...this.value,...t};M.isShallowEqual(this.value,i)||this.stateSubject.next(i)}watch(t){return Array.isArray(t)?this.stateSubject.pipe(G(t)):this.stateSubject.pipe(o.map(i=>i[t]),o.distinctUntilChanged(M.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this.destroy$.complete()}}class Xi{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(t=>!t)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(o.filter(t=>t==="free")),this.viewportBusy$=this.viewportState$.pipe(o.filter(t=>t==="busy")),this.navigation$=this.navigationSubject.asObservable()}}const Zi=({manifest:e,visibleAreaRect:t,forceSinglePageMode:i})=>{const{height:n,width:s}=t,r=s>n;return i||(e==null?void 0:e.renditionFlow)==="scrolled-continuous"?!1:!r&&(e==null?void 0:e.renditionSpread)==="portrait"?!0:r&&((e==null?void 0:e.renditionSpread)===void 0||(e==null?void 0:e.renditionSpread)==="auto"||(e==null?void 0:e.renditionSpread)==="landscape"||(e==null?void 0:e.renditionSpread)==="both")};class Gi extends Y{constructor(){super({marginBottom:0,marginTop:0,calculatedInnerMargin:0,assumedRenditionLayout:"reflowable",visibleAreaRect:{width:0,height:0,x:0,y:0}}),this.bridgeEvent=new Xi,this.destroy$=new o.Subject,this.state$=this.pipe(b.distinctUntilChanged(M.isShallowEqual)),this.manifest$=this.pipe(b.map(t=>t.manifest),b.filter(W),b.distinctUntilChanged()),this.containerElement$=this.pipe(b.map(t=>t.containerElement),b.filter(W),b.distinctUntilChanged()),this.hasVerticalWriting$=this.pipe(b.map(t=>t.hasVerticalWriting),b.filter(W),b.distinctUntilChanged()),this.isUsingSpreadMode$=this.pipe(b.map(t=>t.isUsingSpreadMode),b.distinctUntilChanged()),this.isRTL=()=>{var t;return((t=this.value.manifest)==null?void 0:t.readingDirection)==="rtl"}}update(t){const i=this.value,n=t.manifest??i.manifest,s=t.forceSinglePageMode??i.forceSinglePageMode,r=t.visibleAreaRect??i.visibleAreaRect,a=t.marginTop??i.marginTop,c=t.marginBottom??i.marginBottom,u={...i,...t,...t.visibleAreaRect&&{...t.visibleAreaRect,height:t.visibleAreaRect.height-a-c},...t.manifest&&{isFullyPrePaginated:Yt(n),assumedRenditionLayout:(n==null?void 0:n.renditionLayout)??"reflowable"},isUsingSpreadMode:Zi({manifest:n,visibleAreaRect:r,forceSinglePageMode:s})};M.isShallowEqual(u,i)||this.next(u)}get state(){return this.value}get manifest(){return this.value.manifest}get readingDirection(){var t;return(t=this.manifest)==null?void 0:t.readingDirection}getPageSize(){const{isUsingSpreadMode:t,visibleAreaRect:i}=this.value;return{width:t?i.width/2:i.width,height:i.height}}}class Ji extends Y{constructor(t,i){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),o.merge(t.state$,i.values$).pipe(o.withLatestFrom(t.state$),o.map(([,{hasVerticalWriting:n}])=>{const s=t.manifest;return{hasVerticalWriting:n,renditionFlow:s==null?void 0:s.renditionFlow,renditionLayout:s==null?void 0:s.renditionLayout,computedPageTurnMode:i.values.computedPageTurnMode}}),o.distinctUntilChanged(M.isShallowEqual),o.map(({hasVerticalWriting:n,renditionFlow:s,renditionLayout:r,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||a==="scrollable"?["none"]:n?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Xt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(t){return this._hooks=this._hooks.filter(i=>i!==t),this.destroy(t.name,void 0,t)}register(t,i){const n={name:t,runFn:i};return this._hooks.push(n),()=>{this.deregister(n)}}execute(t,i,n){return this._hooks.filter(a=>t===a.name).map(a=>{let c=()=>o.of(void 0);const u=new o.Subject,l=p=>{c=p},d=()=>(u.next(),u.complete(),c()??o.of(void 0)),g=a.runFn({...n,destroy$:u.asObservable(),destroy:l});return this._hookExecutions.push({name:t,id:i,destroyFn:d,ref:a}),g})}destroy(t,i,n){const s=this._hookExecutions.filter(a=>n&&a.ref===n||t===a.name&&(!i||i&&i===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!s.includes(a));const r=s.map(({destroyFn:a})=>a());return o.combineLatest(r)}}class Zt{constructor(){this.isLockedSubject=new o.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(o.map(t=>!!t),o.distinctUntilChanged())}lock(){let t=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{t||(t=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Ki=()=>e=>e.pipe(o.map(({navigation:t,pagination:i,...n})=>({navigation:{...t,paginationBeginCfi:i.beginCfi},...n}))),Qi=(e,t,i)=>e.bridgeEvent.pagination$.pipe(o.withLatestFrom(t),o.filter(([n,s])=>n.navigationId===s.id),o.switchMap(([n,s])=>{const r=i.spineItemsManager.get(s.spineItem);return((r==null?void 0:r.isReady$.pipe(o.first()))??o.of(!1)).pipe(o.filter(a=>a),o.map(()=>({pagination:n,navigation:s})))}),Ki(),o.distinctUntilChanged((n,s)=>n.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:n})=>({...n,meta:{triggeredBy:"pagination"}}))),ji=e=>e.pipe(o.map(([t,i])=>{const n={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t};return{previousNavigation:i,navigation:n}})),tn=({navigationResolver:e})=>t=>t.pipe(o.map(i=>{if(i.navigation.cfi){const n=e.getNavigationForCfi(i.navigation.cfi);if(n)return{...i,navigation:{...i.navigation,position:n}}}return i})),en=({navigation:e,previousNavigation:t,settings:i})=>e.directionFromLastNavigation?e.directionFromLastNavigation:e.url!==void 0||e.cfi!==void 0?"anchor":t.spineItem===void 0||e.spineItem||!e.position?"forward":i.values.computedPageTurnDirection==="vertical"?e.position.y>t.position.y||e.position.y===t.position.y&&t.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(e.position.x)>Math.abs(t.position.x)||e.position.x===t.position.x&&t.directionFromLastNavigation!=="backward"?"forward":"backward",nn=({context:e,settings:t})=>i=>i.pipe(o.map(({navigation:n,previousNavigation:s})=>{const r=en({navigation:n,previousNavigation:s,settings:t}),a={...n,directionFromLastNavigation:r};return{previousNavigation:s,navigation:a,direction:r}})),on=({spineItemsManager:e,navigationResolver:t})=>i=>i.pipe(o.map(({navigation:n,...s})=>{const r=e.get(n.spineItem);return n.position?{navigation:{...n,position:t.getAdjustedPositionWithSafeEdge(n.position)},...s}:r?{navigation:{...n,position:t.getNavigationForSpineIndexOrId(r)},...s}:{navigation:{...n,position:new F({x:0,y:0})},...s}})),Gt=({settings:e,spineItemsManager:t,navigationResolver:i,spineLocator:n})=>s=>{const r=a=>{const{position:c,spineItem:u,cfi:l,directionFromLastNavigation:d}=a,{navigationSnapThreshold:g,computedPageTurnMode:p}=e.values;if(u!==void 0){const h=t.get(u);if(h)return h}if(typeof u=="number")return u>t.items.length-1?t.get(t.items.length-1):t.get(0);if(l){const h=t.getSpineItemFromCfi(l);if(h)return h}if(c&&p==="controlled"){const{beginIndex:h,endIndex:m}=n.getVisibleSpineItemsFromPosition({position:c,threshold:g,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?m:h)??h,w=t.get(f);if(!w)return;const{endPageIndex:S,beginPageIndex:y}=n.getVisiblePagesFromViewportPosition({position:c,spineItem:w,threshold:g,restrictToScreen:!1})??{},I=(d==="forward"||d==="anchor"?S:y)??0,P=i.getNavigationForSpineItemPage({pageIndex:I,spineItemId:w}),v=n.getVisibleSpineItemsFromPosition({position:P,threshold:g,restrictToScreen:!1}),T=d==="forward"||d==="anchor"?v==null?void 0:v.beginIndex:v==null?void 0:v.endIndex;return t.get(T)}return c&&p==="scrollable"?n.getSpineItemFromPosition(c):t.get(0)};return s.pipe(o.map(({navigation:a,...c})=>{const u=r(a);return{navigation:{...a,spineItem:t.getSpineItemIndex(u)},...c}}))},Jt=({spine:e})=>t=>t.pipe(o.switchMap(({navigation:i,...n})=>{const s=e.spineLayout.getSpineItemSpineLayoutInfo(i.spineItem),r=e.spineItemsManager.get(i.spineItem);return((r==null?void 0:r.isReady$)??o.of(!1)).pipe(o.first(),o.map(a=>({navigation:{...i,spineItemHeight:s==null?void 0:s.height,spineItemWidth:s==null?void 0:s.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r==null?void 0:r.isUsingVerticalWriting(),spineItemIsReady:a},...n})))})),St=({settings:e,spineItemsManager:t,spineLocator:i,navigationResolver:n})=>s=>{const r=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:u}=e.values,l=t.get(a.spineItem);if(!(!l||!a.position)){if(u==="controlled"){const{endPageIndex:d,beginPageIndex:g}=i.getVisiblePagesFromViewportPosition({position:a.position,spineItem:l,threshold:c,restrictToScreen:!1})??{},p=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?d:g)??0,h=n.getNavigationForSpineItemPage({pageIndex:p,spineItemId:l}),m=i.getVisiblePagesFromViewportPosition({position:h,spineItem:l,threshold:0,restrictToScreen:!0}),f=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?m==null?void 0:m.beginPageIndex:m==null?void 0:m.endPageIndex)??0;return i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:l})}return i.getSpineItemPositionFromSpinePosition(a.position,l)}};return s.pipe(o.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:r(a)},...c})))},sn=({navigationResolver:e})=>t=>t.pipe(o.map(i=>{if(i.navigation.url){const n=e.getNavigationForUrl(i.navigation.url);if(n)return{...i,navigation:{...i.navigation,position:n.position,spineItem:n.spineItemId}}}return i})),rn=({spineLocator:e,navigation:t,navigationResolver:i,spineItemsManager:n,spineLayout:s})=>{const r=n.get(t.spineItem);return r?r.isReady$.pipe(o.first(),o.map(a=>{var h,m;const c=s.getSpineItemSpineLayoutInfo(r),u=e.isPositionWithinSpineItem(t.position,r),l=c.width-(t.spineItemWidth??0),d=c.height-(t.spineItemHeight??0),g=l!==0||d!==0;if(t.url!==void 0&&(l||d||a&&!t.spineItemIsReady)){const f=i.getNavigationForUrl(t.url);if(f)return f.position}const p=t.cfi??t.paginationBeginCfi;if(p!==void 0&&!ht(p)&&(l||d||a&&!t.spineItemIsReady)){const f=i.getNavigationForCfi(p);if(f)return f}if(u&&g&&t.directionFromLastNavigation==="backward"){const f=new C({x:(((h=t.positionInSpineItem)==null?void 0:h.x)??0)+l,y:(((m=t.positionInSpineItem)==null?void 0:m.y)??0)+d});return i.getNavigationFromSpineItemPosition({spineItem:r,spineItemPosition:f})}if(t.positionInSpineItem&&t.spineItemHeight&&t.spineItemWidth){const f=e.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:t.spineItemWidth,itemHeight:t.spineItemHeight,isUsingVerticalWriting:!!t.spineItemIsUsingVerticalWriting,position:t.positionInSpineItem});return i.getNavigationForSpineItemPage({pageIndex:f,spineItemId:r})}return u?i.getNavigationForPosition(t.position):i.getNavigationForSpineIndexOrId(r)})):o.of(new F({x:0,y:0}))},an=({navigation:e,spineLocator:t,spineItemsManager:i,settings:n,navigationResolver:s,spineLayout:r})=>{const{spineItem:a}=e,c=i.get(a);if(!c)return new F({x:0,y:0});const{height:u,top:l}=r.getSpineItemSpineLayoutInfo(c),d=t.isPositionWithinSpineItem(e.position,c),g=e.positionInSpineItem??new C({y:0,x:0});if(n.values.computedPageTurnDirection==="vertical"){if(l===e.spineItemTop&&u===e.spineItemHeight&&d)return e.position;if(l===e.spineItemTop&&u===e.spineItemHeight&&!d)return s.getNavigationForSpineIndexOrId(c);if(l!==e.spineItemTop){const p=t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(e.positionInSpineItem??new C({x:0,y:0}),c);return t.getSpinePositionFromSpineItemPosition({spineItemPosition:p,spineItem:c})}if(l===e.spineItemTop&&u!==e.spineItemHeight){const p=(e.spineItemHeight??g.y)-g.y,h=new C({y:e.directionFromLastNavigation==="backward"?u-p:g.y,x:e.position.x});if(d){const m=t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(h,c);return t.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:c})}if(!d){if(!(e.position.y<l)){const f=new C({y:u-p,x:e.position.x});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return s.getNavigationForSpineIndexOrId(c)}}}return e.position},cn=({navigation:e,spineItemsManager:t,settings:i,spineLocator:n,navigationResolver:s,spineLayout:r})=>i.values.computedPageTurnMode==="scrollable"?o.of(an({navigation:e,spineLocator:n,navigationResolver:s,settings:i,spineItemsManager:t,spineLayout:r})):rn({navigation:e,spineLocator:n,navigationResolver:s,spineItemsManager:t,spineLayout:r}),Kt=({settings:e,navigationResolver:t,context:i,spine:n})=>s=>s.pipe(o.switchMap(r=>cn({spineLocator:n.locator,navigation:r.navigation,navigationResolver:t,settings:e,spineItemsManager:n.spineItemsManager,spineItemLocator:n.locator.spineItemLocator,spineLayout:n.spineLayout}).pipe(o.map(a=>({...r,navigation:{...r.navigation,position:a}}))))),un=A.namespace("navigation/InternalNavigator");class ln extends O{constructor(t,i,n,s,r,a,c,u){super(),this.settings=t,this.context=i,this.userNavigation$=n,this.viewportController=s,this.scrollNavigationController=r,this.navigationResolver=a,this.spine=c,this.isUserLocked$=u,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new F({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:y})=>({position:S,id:y})),o.distinctUntilChanged(({position:S,...y},{position:I,...P})=>M.isShallowEqual(y,P)&&M.isShallowEqual(S,I)),o.shareReplay(1)),this.locker=new Zt;const l=n.pipe(o.withLatestFrom(this.navigationSubject),ji,sn({navigationResolver:a}),tn({navigationResolver:a}),nn({context:i,settings:t}),Gt({navigationResolver:a,settings:t,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),St({navigationResolver:a,settings:t,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Jt({spine:c})).pipe(on({navigationResolver:a,spineItemsManager:c.spineItemsManager}),o.withLatestFrom(u),o.switchMap(([S,y])=>{const I=S.navigation.cfi||S.navigation.url||t.values.computedPageTurnMode==="scrollable"||y;return o.of(S).pipe(I?o.identity:Kt({navigationResolver:a,settings:t,spine:c,context:i}))}),St({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:t,navigationResolver:a}),o.map(S=>S.navigation),o.share()),d=l.pipe(o.withLatestFrom(u),o.filter(([,S])=>S),o.switchMap(([S])=>{const y=this.locker.lock();return u.pipe(o.filter(I=>!I),o.first(),o.map(()=>({...S,animation:"snap"})),o.finalize(()=>{y()}),o.takeUntil(l))}),o.share()),g=o.merge(s.layout$,c.spineLayout.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))))),p=o.merge(g,d).pipe(o.map(S=>({navigation:S})),Kt({navigationResolver:a,settings:t,context:i,spine:c}),o.map(S=>{const y={...S.navigation,meta:{triggeredBy:"restoration"}};return{...S,navigation:y}}),Gt({navigationResolver:a,settings:t,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Jt({spine:c}),St({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:t,navigationResolver:a}),o.map(({navigation:S})=>S),o.share()),h=Qi(i,this.navigationSubject,c),m=o.merge(p,l,h),f=S=>S.pipe(o.tap(([y,I])=>{un.info(`navigation updated from ${y.meta.triggeredBy} of type ${y.type}`,{previousNavigation:I,currentNavigation:y}),this.navigationSubject.next(y)})),w=S=>S.pipe(o.tap(([y,I])=>{const P=y.type==="scroll",v=y.meta.triggeredBy==="pagination",T=y.meta.triggeredBy==="restoration",L=M.isShallowEqual(I.position,y.position);if(P&&!T||v||L)return;const R={position:y.position,animation:y.animation};t.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(R):this.viewportController.navigate(R)}));m.pipe(o.withLatestFrom(this.navigationSubject),w,f,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const Qt=({position:{x:e,y:t},spineElement:i,element:n})=>{if(!i)throw new Error("Invalid spine element");const s=i.getBoundingClientRect().width/i.offsetWidth;return new F({x:Q({newScale:1,oldScale:s,screenSize:n.clientWidth??0,pageSize:i.scrollWidth,scrollOffset:e}),y:Q({newScale:1,oldScale:s,screenSize:n.clientHeight??0,pageSize:i.scrollHeight,scrollOffset:t})})},dn=500;class gn extends O{constructor(t,i,n,s,r){super(),this.settings=t,this.context=i,this.spine=n,this.scrollNavigationController=s,this.locker=r,this.navigationSubject=new o.Subject,this.navigation$=this.navigationSubject.asObservable();const a=this.scrollNavigationController.userScroll$.pipe(o.exhaustMap(c=>{const u=this.locker.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(c)).pipe(o.debounceTime(dn,o.animationFrameScheduler),o.first(),o.tap(()=>{const l=c.target,d=Qt({element:l,position:new F({x:l.scrollLeft??0,y:l.scrollTop??0}),spineElement:this.spine.element});this.navigationSubject.next({animation:!1,type:"scroll",position:d})}),o.finalize(()=>{u()}))}));o.merge(a).pipe(o.takeUntil(this.destroy$)).subscribe()}}const pn=e=>({x:-e.x,y:-e.y}),hn=e=>e instanceof DOMMatrix?new F({x:-e.e,y:-e.f}):new F({x:-e.x,y:-e.y}),jt=A.namespace("navigation/ViewportNavigator");class mn extends O{constructor(t,i,n,s,r){super(),this.settings=t,this.hookManager=i,this.context=n,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.withLatestFrom(this.element$),o.tap(([d,g])=>{g.style.cssText=`
268
268
  height: 100%;
269
269
  width: 100%;
270
270
  position: relative;
@@ -274,20 +274,20 @@
274
274
  position: relative;
275
275
  overflow-y: scroll;
276
276
  overflow-x: hidden;
277
- `,p.className=`${H}-scroll-navigator`,p.appendChild(this.viewport.value.element),g.appendChild(p),this.update({element:p})})),c=o.combineLatest([i.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:g},p])=>{p&&(g==="scrollable"?p.style.display="block":p.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.switchMap(g=>at(g))),s.element$.pipe(o.switchMap(g=>o.fromEvent(g,"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(([g,p])=>g||p),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(E),o.switchMap(g=>i.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:p})=>p==="controlled"?o.NEVER:o.fromEvent(g,"scroll").pipe(o.withLatestFrom(d),o.filter(([,h])=>!h),o.map(([h])=>h))))),o.share()),o.merge(a,c,u).pipe(o.takeUntil(this.destroy$)).subscribe()}update(t){this.mergeCompare(t)}navigate(t){this.navigateSubject.next(t)}get viewportPosition(){const t=this.value.element;return t?Qt({element:t,position:new F({x:(t==null?void 0:t.scrollLeft)??0,y:(t==null?void 0:t.scrollTop)??0}),spineElement:this.spine.element}):new F({x:0,y:0})}}const te=(e,t,i)=>{const n=i-e,s=i*(t*e)/(i||1);return Math.max(0,Math.min(n,s))},yt=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),j=(e,t,i)=>{const n=yt(i,t),s=[...Array(n)].map((r,a)=>a*t);return e>=n*t?s[s.length-1]||0:s.find(r=>e<r+t)||0},wt=({itemHeight:e,itemWidth:t,isUsingVerticalWriting:i,settings:n,context:s})=>{const{pageTurnDirection:r,pageTurnMode:a}=n.values;return r==="vertical"&&a==="scrollable"?1:i||r==="vertical"?yt(e,s.getPageSize().height):yt(t,s.getPageSize().width)},It=({pageIndex:e,itemLayout:t,context:i,isUsingVerticalWriting:n})=>{if(n){const r=te(i.getPageSize().height,e,t.height);return new C({x:0,y:r})}const s=te(i.getPageSize().width,e,t.width);return i.isRTL()?new C({x:t.width-s-i.getPageSize().width,y:0}):new C({x:s,y:0})},Sn=({context:e,isUsingVerticalWriting:t,settings:i,itemLayout:n})=>{const s=wt({context:e,isUsingVerticalWriting:t,itemHeight:n.height,itemWidth:n.width,settings:i});return new Array(s).fill(void 0).map((r,a)=>It({context:e,isUsingVerticalWriting:t,itemLayout:n,pageIndex:a}))},ee=({context:e,settings:t})=>{const i=({itemWidth:l,itemHeight:d,spineItemPosition:g})=>new C({x:Math.min(l,Math.max(0,g.x)),y:Math.min(d,Math.max(0,g.y))}),n=({itemWidth:l,itemHeight:d,position:g,isUsingVerticalWriting:p})=>{const h=e.getPageSize().width,m=e.getPageSize().height,f=i({spineItemPosition:g,itemHeight:d,itemWidth:l}),w=e.isRTL()?l-f.x-e.getPageSize().width:f.x,S=wt({isUsingVerticalWriting:p,itemHeight:d,itemWidth:l,context:e,settings:t});return p?u(g.y,m,S):u(w,h,S)},s=(l,d,g)=>{var f;let p;if((l==null?void 0:l.nodeName)==="img"||(l==null?void 0:l.textContent)===""&&l.nodeType===Node.ELEMENT_NODE)p=l.getBoundingClientRect().x;else if(l){const w=l?pe(l,d):void 0;p=(w==null?void 0:w.getBoundingClientRect().x)||p}const h=((f=g.layout.layoutInfo)==null?void 0:f.width)||0,m=e.getPageSize().width;if(p!==void 0){const w=j(p,m,h);return new C({x:w,y:0})}},r=(l,d)=>{var h,m;const g=e.getPageSize(),p=(h=d.renderer)==null?void 0:h.getDocumentFrame();if(p&&((m=p==null?void 0:p.contentWindow)!=null&&m.document)&&p.contentWindow.document.body!==null){const{x:f,y:w}=It({pageIndex:l,itemLayout:d.layout.layoutInfo,context:e,isUsingVerticalWriting:!!d.isUsingVerticalWriting()}),S={left:f,right:f+g.width,bottom:w+g.height};return de(p.contentWindow.document,S)}},a=(l,d)=>{const{width:g,height:p}=d.layout.layoutInfo;return new C({x:j(l.x,e.getPageSize().width,g),y:j(l.y,e.getPageSize().height,p)})},c=(l,d,g)=>{const p=s(l,d,g),{height:h,width:m}=g.layout.layoutInfo;return p?n({isUsingVerticalWriting:!!g.isUsingVerticalWriting(),position:p,itemHeight:h,itemWidth:m}):void 0},u=(l,d,g)=>{const p=[...Array(g)].map((h,m)=>m*d);return l<=0?0:l>=g*d?g-1:Math.max(0,p.findIndex(h=>l<h+d))};return{getSpineItemPositionFromNode:s,getSpineItemPositionFromPageIndex:({pageIndex:l,spineItem:d})=>It({context:e,isUsingVerticalWriting:!!d.isUsingVerticalWriting(),itemLayout:d.layout.layoutInfo,pageIndex:l}),getSpineItemPageIndexFromPosition:n,getSpineItemPageIndexFromNode:c,getSpineItemClosestPositionFromUnsafePosition:a,getFirstNodeOrRangeAtPage:r,getSpineItemPagesPosition:({item:l})=>Sn({context:e,isUsingVerticalWriting:!!l.isUsingVerticalWriting(),settings:t,itemLayout:l.layout.layoutInfo})}},bn=({context:e,settings:t})=>{const i=ee({context:e,settings:t});return{getNavigationForLastPage:a=>{const c=a.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:c-1,spineItem:a})},getNavigationForPosition:(a,c)=>i.getSpineItemClosestPositionFromUnsafePosition(c,a),getNavigationFromNode:(a,c,u)=>i.getSpineItemPositionFromNode(c,u,a)||new C({x:0,y:0})}},k=({position:{x:e,y:t},pageSizeWidth:i,visibleAreaRectWidth:n})=>{const r=e%n!==0?e-i:e;return new F({x:r,y:t})},ie=({position:e,isRTL:t,pageSizeHeight:i,spineItemsManager:n,visibleAreaRectWidth:s,spineLayout:r})=>{const a=n.get(n.items.length-1),c=r.getSpineItemSpineLayoutInfo(a||0),u=c.bottom-i,l=Math.min(Math.max(0,e.y),u);if(t)return new F({x:Math.max(Math.min(0,e.x),c.left),y:l});const d=c.right-s;return new F({x:Math.min(Math.max(0,e.x),d),y:l})},Pt=({viewportPosition:e,spineLocator:t,context:i,spineItemNavigationResolver:n})=>{const s=t.getSpineItemFromPosition(e);if(s){const r=t.getSpineItemPositionFromSpinePosition(e,s),a=n.getNavigationForPosition(s,r),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:s});return k({position:c,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})}return new F({x:0,y:0})},yn=({pageIndex:e,spineItemsManager:t,spineItemId:i,context:n,spineLocator:s,spineItemNavigationResolver:r})=>{const a=t.get(i);if(!a){const l=e*n.getPageSize().width;return Pt({viewportPosition:new F({x:l,y:0}),context:n,spineItemNavigationResolver:r,spineLocator:s})}const c=s.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:e,spineItem:a}),u=s.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return k({position:u,pageSizeWidth:n.getPageSize().width,visibleAreaRectWidth:n.state.visibleAreaRect.width})},wn=({anchor:e,spineItem:t,context:i})=>{var c;const n=((c=t.layout.layoutInfo)==null?void 0:c.width)||0,s=i.getPageSize().width,r=t.getBoundingRectOfElementFromSelector(e),a=(r==null?void 0:r.x)||0;return j(a,s,n)},In=({anchor:e,context:t,spineItem:i,spineLocator:n})=>{const s=wn({anchor:e,spineItem:i,context:t});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new C({x:s,y:0}),spineItem:i})},Pn=({anchor:e,spineItem:t,spineLocator:i,context:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const a=In({anchor:e,context:n,spineItem:t,spineLocator:i});return k({position:a,pageSizeWidth:s,visibleAreaRectWidth:r})},vn=({context:e,spineItemsManager:t,spineLocator:i,url:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{var a;try{const c=n instanceof URL?n:new URL(n),u=`${c.origin}${c.pathname}`,l=(a=e.manifest)==null?void 0:a.spineItems.find(d=>d.href===u);if(l){const d=t.get(l.id);if(d){const g=Pn({anchor:c.hash,spineItem:d,context:e,spineLocator:i,pageSizeWidth:s,visibleAreaRectWidth:r});return{position:k({position:g,pageSizeWidth:s,visibleAreaRectWidth:r}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},$n=({spineItem:e,spineItemPosition:t,spineLocator:i,spineItemLocator:n,context:s})=>{const r=n.getSpineItemClosestPositionFromUnsafePosition(t,e),a=i.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:e});return k({position:a,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},Mn="spineNavigator",Tn=({context:e,spineItemsManager:t,locator:i,settings:n,spineLayout:s})=>{const r=bn({context:e,settings:n});return{getNavigationForUrl:p=>vn({context:e,spineItemsManager:t,spineLocator:i,url:p,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width}),getNavigationForSpineItemPage:p=>yn({...p,context:e,spineItemsManager:t,spineItemNavigationResolver:r,spineLocator:i}),getNavigationFromSpineItemPosition:p=>$n({...p,spineItemLocator:i.spineItemLocator,spineLocator:i,context:e}),getNavigationForCfi:p=>{const h=t.getSpineItemFromCfi(p),{node:m,offset:f=0}=Bt({cfi:p,spineItemsManager:t})||{};if(!h){A.warn(Mn,`unable to detect item id from cfi ${p}`);return}const w=m?r.getNavigationFromNode(h,m,f):new C({x:0,y:0}),S=i.getSpinePositionFromSpineItemPosition({spineItemPosition:w,spineItem:h});return k({position:S,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})},getNavigationForLastPage:p=>{const h=r.getNavigationForLastPage(p),m=i.getSpinePositionFromSpineItemPosition({spineItemPosition:h,spineItem:p});return k({position:m,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})},getNavigationForSpineIndexOrId:p=>{const h=t.get(p);if(h){const m=i.getSpinePositionFromSpineItem(h);return k({position:m,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})}return new F({x:0,y:0})},getNavigationForPosition:p=>Pt({viewportPosition:p,context:e,spineItemNavigationResolver:r,spineLocator:i}),getMostPredominantNavigationForPosition:p=>{const h=n.values.computedPageTurnDirection,m=.5,f=h==="horizontal"?p.x+e.state.visibleAreaRect.width*m:0,w=h==="horizontal"?0:p.y+e.state.visibleAreaRect.height*m,S=ie({position:new F({x:f,y:w}),isRTL:e.isRTL(),pageSizeHeight:e.getPageSize().height,visibleAreaRectWidth:e.state.visibleAreaRect.width,spineItemsManager:t,spineLayout:s});return Pt({context:e,spineItemNavigationResolver:r,spineLocator:i,viewportPosition:S})},getAdjustedPositionWithSafeEdge:p=>ie({position:p,isRTL:e.isRTL(),pageSizeHeight:e.getPageSize().height,visibleAreaRectWidth:e.state.visibleAreaRect.width,spineItemsManager:t,spineLayout:s}),isNavigationGoingForwardFrom:(p,h)=>n.values.computedPageTurnDirection==="vertical"?p.y>h.y:p.x>h.x,arePositionsDifferent:(p,h)=>p.x!==h.x||p.y!==h.y,getAdjustedPositionForSpread:p=>k({position:p,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width}),spineItemNavigator:r}},Fn=({spineItemsManager:e,context:t,hookManager:i,spine:n,settings:s,viewport:r})=>{const a=new o.Subject,c=new Zt,u=Tn({context:t,settings:s,spineItemsManager:e,locator:n.locator,spineLayout:n.spineLayout}),l=new mn(s,i,t,n,r),d=new fn(r,s,i,n,t),g=new gn(s,t,n,d,c),p=o.merge(a,g.navigation$),h=new ln(s,t,p,l,d,u,n,c.isLocked$),m=o.combineLatest([l.isNavigating$,d.isNavigating$,c.isLocked$,h.locker.isLocked$]).pipe(b.map(S=>S.some(y=>y)?"busy":"free"),b.distinctUntilChanged(),b.shareReplay(1));return{destroy:()=>{g.destroy(),l.destroy(),h.destroy()},getNavigation:()=>h.navigation,internalNavigator:h,scrollNavigationController:d,controlledNavigationController:l,locker:c,viewportState$:m,navigate:S=>{a.next(S)},lock(){return c.lock()},navigationResolver:u,navigation$:h.navigation$}};class Ln extends Y{constructor(t,i){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=t,this.spineItemsManager=i}update(t){this.mergeCompare(t)}}class Cn extends O{constructor(t,i,n,s,r){super(),this.context=t,this.pagination=i,this.spineItemsManager=n,this.spine=s,this.spineItemLocator=r;const a=o.merge(this.context.bridgeEvent.navigation$,s.spineLayout.layout$).pipe(o.switchMap(()=>{const u=({spineItem:l,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:l,position:d,threshold:.5});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,l])=>{const{position:d}=l,g=this.pagination.value,{beginIndex:p,endIndex:h}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:.5})??{},m=this.spineItemsManager.get(p),f=this.spineItemsManager.get(h);if(!m||!f)return;const w=g.beginCfi,S=g.endCfi,{beginPageIndex:y=0}=u({spineItem:m,position:d})??{},{endPageIndex:I=0}=u({spineItem:f,position:d})??{},P=w===void 0||mt(w)||g.beginSpineItemIndex!==p,v=g.endSpineItemIndex!==h||S===void 0||mt(S),T=P?q(m.item):w,L=v?q(f.item):S,R=m.numberOfPages,D=f.numberOfPages;this.pagination.update({beginCfi:T,beginNumberOfPagesInSpineItem:R,beginPageIndexInSpineItem:y,beginSpineItemIndex:p,endCfi:L,endNumberOfPagesInSpineItem:D,endPageIndexInSpineItem:I,endSpineItemIndex:h,navigationId:l.id})}))})),c=a.pipe(_(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:u,endSpineItemIndex:l,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:g}=this.pagination.value;if(d===void 0||g===void 0||u===void 0||l===void 0)return;const p=this.spineItemsManager.get(u),h=this.spineItemsManager.get(l);p===void 0||h===void 0||this.pagination.update({beginCfi:pt({pageIndex:d,spineItem:p,spineItemLocator:r}),endCfi:pt({pageIndex:g,spineItem:h,spineItemLocator:r})})}));o.merge(a,c).pipe(o.takeUntil(this.destroy$)).subscribe()}}class ne extends O{constructor(t){super();const i={...this.getDefaultSettings(),...t};this.inputSettings=i,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(t){const i=M.shallowMergeIfDefined(this.inputSettings,t),n=this.getOutputSettings(i),s=!M.isShallowEqual(this.outputSettings,n);return{hasChanged:s,state:n,commit:()=>(this.inputSettings=i,this.outputSettings=n,s&&this.outputSettingsUpdateSubject.next(n),n)}}update(t){const{commit:i}=this._prepareUpdate(t);i()}get values(){if(!this.outputSettings){const{commit:t}=this._prepareUpdate(this.inputSettings);return t()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:t}=this._prepareUpdate(this.inputSettings);t()}return this._settings$}watch(t){return this.values$.pipe(rt(t),o.distinctUntilChanged(M.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Rn extends ne{constructor(t,i){super(t),this.context=i;const n=o.combineLatest([i.hasVerticalWriting$,i.manifest$]).pipe(b.tap(()=>{this.update(this.values)})),s=this.values$.pipe(b.tap(({forceSinglePageMode:r})=>{i.update({forceSinglePageMode:r})}));o.merge(n,s).pipe(b.takeUntil(i.destroy$)).subscribe()}getComputedSettings(t){const i=this.context.manifest,n=this.context.state.hasVerticalWriting??!1,s={computedPageTurnDirection:t.pageTurnDirection,computedPageTurnAnimation:t.pageTurnAnimation,computedPageTurnMode:t.pageTurnMode,computedPageTurnAnimationDuration:0};return(i==null?void 0:i.renditionFlow)==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),n&&s.computedPageTurnAnimation==="slide"&&(A.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=t.pageTurnAnimationDuration!==void 0?t.pageTurnAnimationDuration:300,s}getOutputSettings(t){const i=this.getComputedSettings(t);return{...this.outputSettings,...t,...i}}getDefaultSettings(){return{forceSinglePageMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:.3,numberOfAdjacentSpineItemToPreLoad:3}}}class An extends O{constructor(t,i,n,s,r,a){super(),this.item=t,this.containerElement=i,this.context=n,this.hookManager=s,this.renderer=r,this.settings=a,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:c,minimumWidth:u})=>l=>l.pipe(o.map(d=>{var P;const g=M.isShallowEqual((P=this.lastLayout)==null?void 0:P.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:p,height:h}=g??{},{width:m=p,height:f=h}=d??{},{width:w,height:S}=this.context.getPageSize(),y=this.validateDimension(m??w,w,u),I=this.settings.values.computedPageTurnMode==="scrollable"?f??S:this.validateDimension(f??S,S,S);return this.lastLayout={width:y,height:I,pageSize:this.context.getPageSize()},this.containerElement.style.width=`${y}px`,this.containerElement.style.height=`${I}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:c,item:this.item,minimumWidth:u}),{width:y,height:I}})),this.layout=c=>{const u=Ot(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(c),u()},this.adjustPositionOfElement=({right:c,left:u,top:l})=>{c!==void 0?this.containerElement.style.right=`${c}px`:this.containerElement.style.removeProperty("right"),u!==void 0?this.containerElement.style.left=`${u}px`:this.containerElement.style.removeProperty("left"),l!==void 0?this.containerElement.style.top=`${l}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(c=>{const{blankPagePosition:u,minimumWidth:l,spreadPosition:d}=c;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:u,item:this.item,minimumWidth:l});const g=this.renderer.layout({blankPagePosition:u,minPageSpread:l/this.context.getPageSize().width,minimumWidth:l,spreadPosition:d});return o.merge(o.of({type:"start"}),g.pipe(this.applyDimsAfterLayout(c),o.map(p=>({type:"end",data:p}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(c=>c.type==="end"),o.map(c=>c.data),o.share())}validateDimension(t,i,n){if(t<=0)return n;const s=Math.max(t,n),a=Math.ceil(s/i)*i;return Math.max(a,i)}get layoutInfo(){const t=this.containerElement.style,i=t.width?parseFloat(t.width):0,n=t.height?parseFloat(t.height):0;return{width:i,height:n}}}class On extends z{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 vt extends O{constructor(t,i,n,s,r,a){var l,d;super(),this.item=t,this.parentElement=i,this.context=n,this.settings=s,this.hookManager=r,this.index=a,this.getBoundingRectOfElementFromSelector=g=>{var h,m,f,w;const p=this.renderer.getDocumentFrame();if(p&&p instanceof HTMLIFrameElement&&g)return g.startsWith("#")?(m=(h=p.contentDocument)==null?void 0:h.getElementById(g.replace("#","")))==null?void 0:m.getBoundingClientRect():(w=(f=p.contentDocument)==null?void 0:f.querySelector(g))==null?void 0:w.getBoundingClientRect()},this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>{var g;return!!((g=this.renderer.writingMode)!=null&&g.startsWith("vertical"))},this.containerElement=Dn(i,t,r),i.appendChild(this.containerElement);const c=(d=(l=this.settings.values).getRenderer)==null?void 0:d.call(l,t);this.resourcesHandler=new J(t,this.settings);const u={context:n,settings:s,hookManager:r,item:t,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=c?c(u):new On(u),this.layout=new An(t,this.containerElement,n,r,this.renderer,this.settings),this.isReady$=this.layout.layoutProcess$.pipe(b.withLatestFrom(this.renderer.isLoaded$),b.map(([g,p])=>!!(g.type==="end"&&p)),b.startWith(!1),b.distinctUntilChanged(),b.tap(g=>{this.containerElement.dataset.isReady=g.toString()}),b.shareReplay({refCount:!0,bufferSize:1})),this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(this.isReady$,this.layout.layout$).pipe(b.takeUntil(this.destroy$)).subscribe()}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.state$.pipe(b.distinctUntilChanged(),b.filter(t=>t==="loaded"))}get unloaded$(){return this.renderer.state$.pipe(b.distinctUntilChanged(),b.filter(t=>t!=="idle"),b.switchMap(()=>this.renderer.state$.pipe(b.filter(t=>t==="idle"),b.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return wt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,context:this.context,settings:this.settings})}}const Dn=(e,t,i)=>{const n=e.ownerDocument.createElement("div");return n.classList.add("spineItem"),n.classList.add(`spineItem-${t.renditionLayout??"reflowable"}`),n.style.cssText=`
277
+ `,p.className=`${H}-scroll-navigator`,p.appendChild(this.viewport.value.element),g.appendChild(p),this.update({element:p})})),c=o.combineLatest([i.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:g},p])=>{p&&(g==="scrollable"?p.style.display="block":p.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.switchMap(g=>at(g))),s.element$.pipe(o.switchMap(g=>o.fromEvent(g,"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(([g,p])=>g||p),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(W),o.switchMap(g=>i.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:p})=>p==="controlled"?o.NEVER:o.fromEvent(g,"scroll").pipe(o.withLatestFrom(d),o.filter(([,h])=>!h),o.map(([h])=>h))))),o.share()),o.merge(a,c,u).pipe(o.takeUntil(this.destroy$)).subscribe()}update(t){this.mergeCompare(t)}navigate(t){this.navigateSubject.next(t)}get viewportPosition(){const t=this.value.element;return t?Qt({element:t,position:new F({x:(t==null?void 0:t.scrollLeft)??0,y:(t==null?void 0:t.scrollTop)??0}),spineElement:this.spine.element}):new F({x:0,y:0})}}const te=(e,t,i)=>{const n=i-e,s=i*(t*e)/(i||1);return Math.max(0,Math.min(n,s))},bt=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),j=(e,t,i)=>{const n=bt(i,t),s=[...Array(n)].map((r,a)=>a*t);return e>=n*t?s[s.length-1]||0:s.find(r=>e<r+t)||0},yt=({itemHeight:e,itemWidth:t,isUsingVerticalWriting:i,settings:n,context:s})=>{const{pageTurnDirection:r,pageTurnMode:a}=n.values;return r==="vertical"&&a==="scrollable"?1:i||r==="vertical"?bt(e,s.getPageSize().height):bt(t,s.getPageSize().width)},wt=({pageIndex:e,itemLayout:t,context:i,isUsingVerticalWriting:n})=>{if(n){const r=te(i.getPageSize().height,e,t.height);return new C({x:0,y:r})}const s=te(i.getPageSize().width,e,t.width);return i.isRTL()?new C({x:t.width-s-i.getPageSize().width,y:0}):new C({x:s,y:0})},Sn=({context:e,isUsingVerticalWriting:t,settings:i,itemLayout:n})=>{const s=yt({context:e,isUsingVerticalWriting:t,itemHeight:n.height,itemWidth:n.width,settings:i});return new Array(s).fill(void 0).map((r,a)=>wt({context:e,isUsingVerticalWriting:t,itemLayout:n,pageIndex:a}))},ee=({context:e,settings:t})=>{const i=({itemWidth:l,itemHeight:d,spineItemPosition:g})=>new C({x:Math.min(l,Math.max(0,g.x)),y:Math.min(d,Math.max(0,g.y))}),n=({itemWidth:l,itemHeight:d,position:g,isUsingVerticalWriting:p})=>{const h=e.getPageSize().width,m=e.getPageSize().height,f=i({spineItemPosition:g,itemHeight:d,itemWidth:l}),w=e.isRTL()?l-f.x-e.getPageSize().width:f.x,S=yt({isUsingVerticalWriting:p,itemHeight:d,itemWidth:l,context:e,settings:t});return p?u(g.y,m,S):u(w,h,S)},s=(l,d,g)=>{var f;let p;if((l==null?void 0:l.nodeName)==="img"||(l==null?void 0:l.textContent)===""&&l.nodeType===Node.ELEMENT_NODE)p=l.getBoundingClientRect().x;else if(l){const w=l?pe(l,d):void 0;p=(w==null?void 0:w.getBoundingClientRect().x)||p}const h=((f=g.layout.layoutInfo)==null?void 0:f.width)||0,m=e.getPageSize().width;if(p!==void 0){const w=j(p,m,h);return new C({x:w,y:0})}},r=(l,d)=>{var h,m;const g=e.getPageSize(),p=(h=d.renderer)==null?void 0:h.getDocumentFrame();if(p&&((m=p==null?void 0:p.contentWindow)!=null&&m.document)&&p.contentWindow.document.body!==null){const{x:f,y:w}=wt({pageIndex:l,itemLayout:d.layout.layoutInfo,context:e,isUsingVerticalWriting:!!d.isUsingVerticalWriting()}),S={left:f,right:f+g.width,bottom:w+g.height};return de(p.contentWindow.document,S)}},a=(l,d)=>{const{width:g,height:p}=d.layout.layoutInfo;return new C({x:j(l.x,e.getPageSize().width,g),y:j(l.y,e.getPageSize().height,p)})},c=(l,d,g)=>{const p=s(l,d,g),{height:h,width:m}=g.layout.layoutInfo;return p?n({isUsingVerticalWriting:!!g.isUsingVerticalWriting(),position:p,itemHeight:h,itemWidth:m}):void 0},u=(l,d,g)=>{const p=[...Array(g)].map((h,m)=>m*d);return l<=0?0:l>=g*d?g-1:Math.max(0,p.findIndex(h=>l<h+d))};return{getSpineItemPositionFromNode:s,getSpineItemPositionFromPageIndex:({pageIndex:l,spineItem:d})=>wt({context:e,isUsingVerticalWriting:!!d.isUsingVerticalWriting(),itemLayout:d.layout.layoutInfo,pageIndex:l}),getSpineItemPageIndexFromPosition:n,getSpineItemPageIndexFromNode:c,getSpineItemClosestPositionFromUnsafePosition:a,getFirstNodeOrRangeAtPage:r,getSpineItemPagesPosition:({item:l})=>Sn({context:e,isUsingVerticalWriting:!!l.isUsingVerticalWriting(),settings:t,itemLayout:l.layout.layoutInfo})}},bn=({context:e,settings:t})=>{const i=ee({context:e,settings:t});return{getNavigationForLastPage:a=>{const c=a.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:c-1,spineItem:a})},getNavigationForPosition:(a,c)=>i.getSpineItemClosestPositionFromUnsafePosition(c,a),getNavigationFromNode:(a,c,u)=>i.getSpineItemPositionFromNode(c,u,a)||new C({x:0,y:0})}},k=({position:{x:e,y:t},pageSizeWidth:i,visibleAreaRectWidth:n})=>{const r=e%n!==0?e-i:e;return new F({x:r,y:t})},ie=({position:e,isRTL:t,pageSizeHeight:i,spineItemsManager:n,visibleAreaRectWidth:s,spineLayout:r})=>{const a=n.get(n.items.length-1),c=r.getSpineItemSpineLayoutInfo(a||0),u=c.bottom-i,l=Math.min(Math.max(0,e.y),u);if(t)return new F({x:Math.max(Math.min(0,e.x),c.left),y:l});const d=c.right-s;return new F({x:Math.min(Math.max(0,e.x),d),y:l})},It=({viewportPosition:e,spineLocator:t,context:i,spineItemNavigationResolver:n})=>{const s=t.getSpineItemFromPosition(e);if(s){const r=t.getSpineItemPositionFromSpinePosition(e,s),a=n.getNavigationForPosition(s,r),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:s});return k({position:c,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})}return new F({x:0,y:0})},yn=({pageIndex:e,spineItemsManager:t,spineItemId:i,context:n,spineLocator:s,spineItemNavigationResolver:r})=>{const a=t.get(i);if(!a){const l=e*n.getPageSize().width;return It({viewportPosition:new F({x:l,y:0}),context:n,spineItemNavigationResolver:r,spineLocator:s})}const c=s.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:e,spineItem:a}),u=s.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return k({position:u,pageSizeWidth:n.getPageSize().width,visibleAreaRectWidth:n.state.visibleAreaRect.width})},wn=({anchor:e,spineItem:t,context:i})=>{var c;const n=((c=t.layout.layoutInfo)==null?void 0:c.width)||0,s=i.getPageSize().width,r=t.getBoundingRectOfElementFromSelector(e),a=(r==null?void 0:r.x)||0;return j(a,s,n)},In=({anchor:e,context:t,spineItem:i,spineLocator:n})=>{const s=wn({anchor:e,spineItem:i,context:t});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new C({x:s,y:0}),spineItem:i})},Pn=({anchor:e,spineItem:t,spineLocator:i,context:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const a=In({anchor:e,context:n,spineItem:t,spineLocator:i});return k({position:a,pageSizeWidth:s,visibleAreaRectWidth:r})},vn=({context:e,spineItemsManager:t,spineLocator:i,url:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{var a;try{const c=n instanceof URL?n:new URL(n),u=`${c.origin}${c.pathname}`,l=(a=e.manifest)==null?void 0:a.spineItems.find(d=>d.href===u);if(l){const d=t.get(l.id);if(d){const g=Pn({anchor:c.hash,spineItem:d,context:e,spineLocator:i,pageSizeWidth:s,visibleAreaRectWidth:r});return{position:k({position:g,pageSizeWidth:s,visibleAreaRectWidth:r}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},$n=({spineItem:e,spineItemPosition:t,spineLocator:i,spineItemLocator:n,context:s})=>{const r=n.getSpineItemClosestPositionFromUnsafePosition(t,e),a=i.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:e});return k({position:a,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},Mn="spineNavigator",Tn=({context:e,spineItemsManager:t,locator:i,settings:n,spineLayout:s})=>{const r=bn({context:e,settings:n});return{getNavigationForUrl:p=>vn({context:e,spineItemsManager:t,spineLocator:i,url:p,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width}),getNavigationForSpineItemPage:p=>yn({...p,context:e,spineItemsManager:t,spineItemNavigationResolver:r,spineLocator:i}),getNavigationFromSpineItemPosition:p=>$n({...p,spineItemLocator:i.spineItemLocator,spineLocator:i,context:e}),getNavigationForCfi:p=>{const h=t.getSpineItemFromCfi(p),{node:m,offset:f=0}=Bt({cfi:p,spineItemsManager:t})||{};if(!h){A.warn(Mn,`unable to detect item id from cfi ${p}`);return}const w=m?r.getNavigationFromNode(h,m,f):new C({x:0,y:0}),S=i.getSpinePositionFromSpineItemPosition({spineItemPosition:w,spineItem:h});return k({position:S,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})},getNavigationForLastPage:p=>{const h=r.getNavigationForLastPage(p),m=i.getSpinePositionFromSpineItemPosition({spineItemPosition:h,spineItem:p});return k({position:m,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})},getNavigationForSpineIndexOrId:p=>{const h=t.get(p);if(h){const m=i.getSpinePositionFromSpineItem(h);return k({position:m,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})}return new F({x:0,y:0})},getNavigationForPosition:p=>It({viewportPosition:p,context:e,spineItemNavigationResolver:r,spineLocator:i}),getMostPredominantNavigationForPosition:p=>{const h=n.values.computedPageTurnDirection,m=.5,f=h==="horizontal"?p.x+e.state.visibleAreaRect.width*m:0,w=h==="horizontal"?0:p.y+e.state.visibleAreaRect.height*m,S=ie({position:new F({x:f,y:w}),isRTL:e.isRTL(),pageSizeHeight:e.getPageSize().height,visibleAreaRectWidth:e.state.visibleAreaRect.width,spineItemsManager:t,spineLayout:s});return It({context:e,spineItemNavigationResolver:r,spineLocator:i,viewportPosition:S})},getAdjustedPositionWithSafeEdge:p=>ie({position:p,isRTL:e.isRTL(),pageSizeHeight:e.getPageSize().height,visibleAreaRectWidth:e.state.visibleAreaRect.width,spineItemsManager:t,spineLayout:s}),isNavigationGoingForwardFrom:(p,h)=>n.values.computedPageTurnDirection==="vertical"?p.y>h.y:p.x>h.x,arePositionsDifferent:(p,h)=>p.x!==h.x||p.y!==h.y,getAdjustedPositionForSpread:p=>k({position:p,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width}),spineItemNavigator:r}},Fn=({spineItemsManager:e,context:t,hookManager:i,spine:n,settings:s,viewport:r})=>{const a=new o.Subject,c=new Zt,u=Tn({context:t,settings:s,spineItemsManager:e,locator:n.locator,spineLayout:n.spineLayout}),l=new mn(s,i,t,n,r),d=new fn(r,s,i,n,t),g=new gn(s,t,n,d,c),p=o.merge(a,g.navigation$),h=new ln(s,t,p,l,d,u,n,c.isLocked$),m=o.combineLatest([l.isNavigating$,d.isNavigating$,c.isLocked$,h.locker.isLocked$]).pipe(b.map(S=>S.some(y=>y)?"busy":"free"),b.distinctUntilChanged(),b.shareReplay(1));return{destroy:()=>{g.destroy(),l.destroy(),h.destroy()},getNavigation:()=>h.navigation,internalNavigator:h,scrollNavigationController:d,controlledNavigationController:l,locker:c,viewportState$:m,navigate:S=>{a.next(S)},lock(){return c.lock()},navigationResolver:u,navigation$:h.navigation$}};class Ln extends Y{constructor(t,i){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=t,this.spineItemsManager=i}update(t){this.mergeCompare(t)}}class Cn extends O{constructor(t,i,n,s,r){super(),this.context=t,this.pagination=i,this.spineItemsManager=n,this.spine=s,this.spineItemLocator=r;const a=o.merge(this.context.bridgeEvent.navigation$,s.spineLayout.layout$).pipe(o.switchMap(()=>{const u=({spineItem:l,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:l,position:d,threshold:.5});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,l])=>{const{position:d}=l,g=this.pagination.value,{beginIndex:p,endIndex:h}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:.5})??{},m=this.spineItemsManager.get(p),f=this.spineItemsManager.get(h);if(!m||!f)return;const w=g.beginCfi,S=g.endCfi,{beginPageIndex:y=0}=u({spineItem:m,position:d})??{},{endPageIndex:I=0}=u({spineItem:f,position:d})??{},P=w===void 0||ht(w)||g.beginSpineItemIndex!==p,v=g.endSpineItemIndex!==h||S===void 0||ht(S),T=P?q(m.item):w,L=v?q(f.item):S,R=m.numberOfPages,D=f.numberOfPages;this.pagination.update({beginCfi:T,beginNumberOfPagesInSpineItem:R,beginPageIndexInSpineItem:y,beginSpineItemIndex:p,endCfi:L,endNumberOfPagesInSpineItem:D,endPageIndexInSpineItem:I,endSpineItemIndex:h,navigationId:l.id})}))})),c=a.pipe(_(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:u,endSpineItemIndex:l,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:g}=this.pagination.value;if(d===void 0||g===void 0||u===void 0||l===void 0)return;const p=this.spineItemsManager.get(u),h=this.spineItemsManager.get(l);p===void 0||h===void 0||this.pagination.update({beginCfi:pt({pageIndex:d,spineItem:p,spineItemLocator:r}),endCfi:pt({pageIndex:g,spineItem:h,spineItemLocator:r})})}));o.merge(a,c).pipe(o.takeUntil(this.destroy$)).subscribe()}}class ne extends O{constructor(t){super();const i={...this.getDefaultSettings(),...t};this.inputSettings=i,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(t){const i=M.shallowMergeIfDefined(this.inputSettings,t),n=this.getOutputSettings(i),s=!M.isShallowEqual(this.outputSettings,n);return{hasChanged:s,state:n,commit:()=>(this.inputSettings=i,this.outputSettings=n,s&&this.outputSettingsUpdateSubject.next(n),n)}}update(t){const{commit:i}=this._prepareUpdate(t);i()}get values(){if(!this.outputSettings){const{commit:t}=this._prepareUpdate(this.inputSettings);return t()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:t}=this._prepareUpdate(this.inputSettings);t()}return this._settings$}watch(t){return this.values$.pipe(rt(t),o.distinctUntilChanged(M.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Rn extends ne{constructor(t,i){super(t),this.context=i;const n=o.combineLatest([i.hasVerticalWriting$,i.manifest$]).pipe(b.tap(()=>{this.update(this.values)})),s=this.values$.pipe(b.tap(({forceSinglePageMode:r})=>{i.update({forceSinglePageMode:r})}));o.merge(n,s).pipe(b.takeUntil(i.destroy$)).subscribe()}getComputedSettings(t){const i=this.context.manifest,n=this.context.state.hasVerticalWriting??!1,s={computedPageTurnDirection:t.pageTurnDirection,computedPageTurnAnimation:t.pageTurnAnimation,computedPageTurnMode:t.pageTurnMode,computedPageTurnAnimationDuration:0};return(i==null?void 0:i.renditionFlow)==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),n&&s.computedPageTurnAnimation==="slide"&&(A.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=t.pageTurnAnimationDuration!==void 0?t.pageTurnAnimationDuration:300,s}getOutputSettings(t){const i=this.getComputedSettings(t);return{...this.outputSettings,...t,...i}}getDefaultSettings(){return{forceSinglePageMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:.3,numberOfAdjacentSpineItemToPreLoad:3}}}class An extends O{constructor(t,i,n,s,r,a){super(),this.item=t,this.containerElement=i,this.context=n,this.hookManager=s,this.renderer=r,this.settings=a,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:c,minimumWidth:u})=>l=>l.pipe(o.map(d=>{var P;const g=M.isShallowEqual((P=this.lastLayout)==null?void 0:P.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:p,height:h}=g??{},{width:m=p,height:f=h}=d??{},{width:w,height:S}=this.context.getPageSize(),y=this.validateDimension(m??w,w,u),I=this.settings.values.computedPageTurnMode==="scrollable"?f??S:this.validateDimension(f??S,S,S);return this.lastLayout={width:y,height:I,pageSize:this.context.getPageSize()},this.containerElement.style.width=`${y}px`,this.containerElement.style.height=`${I}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:c,item:this.item,minimumWidth:u}),{width:y,height:I}})),this.layout=c=>{const u=At(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(c),u()},this.adjustPositionOfElement=({right:c,left:u,top:l})=>{c!==void 0?this.containerElement.style.right=`${c}px`:this.containerElement.style.removeProperty("right"),u!==void 0?this.containerElement.style.left=`${u}px`:this.containerElement.style.removeProperty("left"),l!==void 0?this.containerElement.style.top=`${l}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(c=>{const{blankPagePosition:u,minimumWidth:l,spreadPosition:d}=c;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:u,item:this.item,minimumWidth:l});const g=this.renderer.layout({blankPagePosition:u,minPageSpread:l/this.context.getPageSize().width,minimumWidth:l,spreadPosition:d});return o.merge(o.of({type:"start"}),g.pipe(this.applyDimsAfterLayout(c),o.map(p=>({type:"end",data:p}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(c=>c.type==="end"),o.map(c=>c.data),o.share())}validateDimension(t,i,n){if(t<=0)return n;const s=Math.max(t,n),a=Math.ceil(s/i)*i;return Math.max(a,i)}get layoutInfo(){const t=this.containerElement.style,i=t.width?parseFloat(t.width):0,n=t.height?parseFloat(t.height):0;return{width:i,height:n}}}class On extends z{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 Pt extends O{constructor(t,i,n,s,r,a){var l,d;super(),this.item=t,this.parentElement=i,this.context=n,this.settings=s,this.hookManager=r,this.index=a,this.getBoundingRectOfElementFromSelector=g=>{var h,m,f,w;const p=this.renderer.getDocumentFrame();if(p&&p instanceof HTMLIFrameElement&&g)return g.startsWith("#")?(m=(h=p.contentDocument)==null?void 0:h.getElementById(g.replace("#","")))==null?void 0:m.getBoundingClientRect():(w=(f=p.contentDocument)==null?void 0:f.querySelector(g))==null?void 0:w.getBoundingClientRect()},this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>{var g;return!!((g=this.renderer.writingMode)!=null&&g.startsWith("vertical"))},this.containerElement=Dn(i,t,r),i.appendChild(this.containerElement);const c=(d=(l=this.settings.values).getRenderer)==null?void 0:d.call(l,t);this.resourcesHandler=new J(t,this.settings);const u={context:n,settings:s,hookManager:r,item:t,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=c?c(u):new On(u),this.layout=new An(t,this.containerElement,n,r,this.renderer,this.settings),this.isReady$=this.layout.layoutProcess$.pipe(b.withLatestFrom(this.renderer.isLoaded$),b.map(([g,p])=>!!(g.type==="end"&&p)),b.startWith(!1),b.distinctUntilChanged(),b.tap(g=>{this.containerElement.dataset.isReady=g.toString()}),b.shareReplay({refCount:!0,bufferSize:1})),this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(this.isReady$,this.layout.layout$).pipe(b.takeUntil(this.destroy$)).subscribe()}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.state$.pipe(b.distinctUntilChanged(),b.filter(t=>t==="loaded"))}get unloaded$(){return this.renderer.state$.pipe(b.distinctUntilChanged(),b.filter(t=>t!=="idle"),b.switchMap(()=>this.renderer.state$.pipe(b.filter(t=>t==="idle"),b.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return yt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,context:this.context,settings:this.settings})}}const Dn=(e,t,i)=>{const n=e.ownerDocument.createElement("div");return n.classList.add("spineItem"),n.classList.add(`spineItem-${t.renditionLayout??"reflowable"}`),n.style.cssText=`
278
278
  position: absolute;
279
279
  overflow: hidden;
280
- `,n.dataset.isReady="false",i.execute("item.onBeforeContainerCreated",void 0,{element:n}),n};class Nn extends O{constructor(t,i){super(),this.spineItemsManager=t,this.spineLocator=i,this.itemIsReady$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.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(n=>{const s=n.map(r=>at(r.element).pipe(o.map(a=>({entries:a,item:r}))));return o.merge(...s)}),o.share()),this.itemLoaded$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>r.loaded$.pipe(o.map(()=>r)));return o.merge(...s)}))}}const Vn=({horizontalOffset:e,verticalOffset:t,context:i,spineItemsManager:n,isGloballyPrePaginated:s,settings:r,index:a,item:c,viewport:u})=>{let l=i.getPageSize().width,d="none";const g=e%u.absoluteViewport.width===0,p=a===n.items.length-1;if(i.state.isUsingSpreadMode){!s&&c.renditionLayout==="reflowable"&&!p&&(l=i.getPageSize().width*2),!s&&c.renditionLayout==="reflowable"&&p&&g&&(l=i.getPageSize().width*2);const m=g&&p&&s;c.item.pageSpreadRight&&g&&!i.isRTL()||c.item.pageSpreadLeft&&g&&i.isRTL()?(d="before",l=i.getPageSize().width*2):m&&(i.isRTL()?d="before":d="after",l=i.getPageSize().width*2)}return c.layout.layout({minimumWidth:l,blankPagePosition:d,spreadPosition:i.state.isUsingSpreadMode?g?i.isRTL()?"right":"left":i.isRTL()?"left":"right":"none"}).pipe(o.map(({width:m,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const y=g?t:t-i.state.visibleAreaRect.height,I=g?0:e;i.isRTL()?c.layout.adjustPositionOfElement({top:y,left:I}):c.layout.adjustPositionOfElement({top:y,left:I});const P=m+I,v=f+y,T=new dt({left:I,right:P,top:y,bottom:v,height:f,width:m,x:I,y});return{horizontalOffset:P,verticalOffset:v,layoutPosition:T}}c.layout.adjustPositionOfElement(i.isRTL()?{right:e,top:0}:{left:e,top:0});const w=i.isRTL()?u.absoluteViewport.width-e-m:e,S=new dt({right:i.isRTL()?u.absoluteViewport.width-e:e+m,left:w,x:w,top:t,bottom:f,height:f,width:m,y:t});return{horizontalOffset:e+m,verticalOffset:0,layoutPosition:S}}))};class kn extends O{constructor(t,i,n,s){super(),this.spineItemsManager=t,this.context=i,this.settings=n,this.viewport=s,this.layoutSubject=new o.Subject,this.spineItemsRelativeLayouts=[],t.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.debounceTime(50),o.exhaustMap(()=>r.pipe(o.filter(a=>!a),o.first())),o.exhaustMap(()=>{r.next(!0);const a=this.context.manifest,c=Yt(a)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((l,d,g)=>l.pipe(o.concatMap(({horizontalOffset:p,verticalOffset:h,pages:m})=>Vn({context:this.context,horizontalOffset:p,index:g,isGloballyPrePaginated:c,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:h,viewport:s}).pipe(o.map(({horizontalOffset:f,verticalOffset:w,layoutPosition:S})=>(this.spineItemsRelativeLayouts[g]=S,{horizontalOffset:f,verticalOffset:w,pages:[...m,S]}))))),o.of({horizontalOffset:0,verticalOffset:0,pages:[]})),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(t){const i=this.spineItemsManager.getSpineItemIndex(t)??0;return this.spineItemsRelativeLayouts[i]||new dt({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((t,i)=>t+i.numberOfPages,0)}destroy(){super.destroy(),this.layoutSubject.complete()}}class Un extends O{constructor(t,i,n,s,r){super(),this.context=t,this.spineItemsManager=i,this.spineLocator=n,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(M.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),_(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,a),o.map(([,l,d])=>{const{numberOfAdjacentSpineItemToPreLoad:g}=s.values,{beginIndex:p=0,endIndex:h=0}=n.getVisibleSpineItemsFromPosition({position:l.position,threshold:0,useAbsoluteViewport:!1})||{},m=p-g,f=h+g,w=Array.from({length:f-m+1},(y,I)=>m+I),S=[...d,...w];i.items.forEach((y,I)=>{S.includes(I)?y.load():y.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(t){const i=t.map(n=>typeof n=="number"?n:n.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,i]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(n=>n!==i))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const oe=(e,t,i)=>{const n=(i.width-t.width)/2,s=(i.height-t.height)/2;return new gt({x:e.x-n,y:e.y-s})};class X extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(t,i){if(i){const s=t;return new X(s.x,s.y,i.width,i.height)}const n=t;return new X(n.x,n.y,n.width,n.height)}}class En{constructor({width:t,height:i}){this.__symbol=Symbol("AbsoluteViewport"),this.width=t,this.height=i}}class Wn{constructor({width:t,height:i}){this.__symbol=Symbol("RelativeViewport"),this.width=t,this.height=i}}const zn=({pageIndex:e,spineItemOrId:t,spineItemsManager:i})=>{const n=i.items,s=i.get(t);if(!s)return;const{currentAbsolutePage:r}=n.reduce((a,c)=>{if(a.found)return a;const u=c.numberOfPages;return s===c&&e<=u-1?{currentAbsolutePage:a.currentAbsolutePage+e,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+u}},{currentAbsolutePage:0,found:!1});return r},Hn=({itemHeight:e,itemWidth:t,visibleWidthOfItem:i,visibleHeightOfItem:n,threshold:s})=>{const r=i/t,a=n/e;return r>=s&&a>=s},Bn=({visibleWidthOfItem:e,visibleHeightOfItem:t,threshold:i,viewportPosition:n})=>{const s=e/n.width;return t/n.height>=i&&s>=i},se=({itemPosition:{bottom:e,left:t,right:i,top:n,width:s,height:r},threshold:a,viewportPosition:c,restrictToScreen:u})=>{const l=c.x,d=c.x+(c.width-1),g=c.y,p=Math.max(c.y+(c.height-1),0),h=Math.max(0,Math.min(i,d)-Math.max(t,l)),m=Math.max(0,Math.min(e,p)-Math.max(n,g));if(h<=0||m<=0)return{visible:!1};const w=Bn({threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h,viewportPosition:c});return u?{visible:w}:{visible:Hn({itemHeight:r,itemWidth:s,threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h})||w}},_n=({absolutePageIndex:e,spineItemsManager:t})=>{const i=t.items,{found:n,currentAbsolutePage:s}=i.reduce((r,a)=>{if(r.found)return r;const c=a.numberOfPages,u=e-r.currentAbsolutePage,l=r.currentAbsolutePage+c;return u<=c-1?{...r,currentAbsolutePage:l,found:{item:a,pageIndex:u}}:{...r,currentAbsolutePage:l}},{currentAbsolutePage:0});if(n)return{spineItem:n.item,pageIndex:n.pageIndex,itemIndex:t.getSpineItemIndex(n.item)??0,currentAbsolutePage:s}},re=({position:e,spineItemsManager:t,spineLayout:i,settings:n})=>{const s=t.items.find(r=>{const{left:a,right:c,bottom:u,top:l}=i.getSpineItemSpineLayoutInfo(r),d=e.x>=a&&e.x<c;return n.values.computedPageTurnDirection==="horizontal"?d:d&&e.y>=l&&e.y<u});return e.x===0&&!s?t.items[0]:s},$t=({spineItemPosition:e,itemLayout:{left:t,top:i}})=>new F({x:t+e.x,y:i+e.y}),qn=({position:e,threshold:t,restrictToScreen:i,spineItemsManager:n,settings:s,spineLayout:r,useAbsoluteViewport:a=!0,viewport:c})=>{const u=re({position:e,settings:s,spineItemsManager:n,spineLayout:r})||n.get(0),l=n.items.reduce((m,f)=>{const w=r.getSpineItemSpineLayoutInfo(f),S=a?c.absoluteViewport:c.relativeViewport,y=oe(e,c.absoluteViewport,S),I=X.from(y,S),{visible:P}=se({itemPosition:w,threshold:t,viewportPosition:I,restrictToScreen:i});return P?[...m,f]:m},[]),d=l[0]??u,g=l[l.length-1]??d;if(!d||!g)return;const p=n.getSpineItemIndex(d),h=n.getSpineItemIndex(g);return{beginIndex:p??0,endIndex:h??0}},xn=({spineItemsManager:e,context:t,spineItemLocator:i,settings:n,spineLayout:s,viewport:r})=>{const a=(h,m)=>{const{left:f,top:w}=s.getSpineItemSpineLayoutInfo(m);return new C({x:Math.max(h.x-f,0),y:Math.max(h.y-w,0)})},c=h=>$t({spineItemPosition:new C({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),u=h=>e.items.find(m=>m.renderer.getDocumentFrame()===h),l=(h,m,f)=>{if(typeof f=="number"){const w=e.get(f);return w?i.getSpineItemPageIndexFromNode(h,m||0,w):void 0}return i.getSpineItemPageIndexFromNode(h,m||0,f)},d=({position:h,threshold:m,spineItem:f,restrictToScreen:w,useAbsoluteViewport:S=!0,viewport:y})=>{const I=f.numberOfPages,v=Array.from(Array(I)).map((R,D)=>{const B=i.getSpineItemPositionFromPageIndex({pageIndex:D,spineItem:f}),V=$t({spineItemPosition:B,itemLayout:s.getSpineItemSpineLayoutInfo(f)});return{index:D,absolutePosition:{width:t.getPageSize().width,height:t.getPageSize().height,left:V.x,top:V.y,bottom:V.y+t.getPageSize().height,right:V.x+t.getPageSize().width}}}).reduce((R,{absolutePosition:D,index:B})=>{const V=S?y.absoluteViewport:y.relativeViewport,Qn=oe(h,y.absoluteViewport,V),jn=X.from(Qn,V),{visible:to}=se({viewportPosition:jn,restrictToScreen:w,threshold:m,itemPosition:D});return to?[...R,B]:R},[]),T=v[0],L=v[v.length-1]??T;if(!(T===void 0||L===void 0))return{beginPageIndex:T,endPageIndex:L}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:m})=>{const f=s.getSpineItemSpineLayoutInfo(h);return $t({itemLayout:f,spineItemPosition:m})},getAbsolutePageIndexFromPageIndex:h=>zn({...h,spineItemsManager:e}),getSpineInfoFromAbsolutePageIndex:h=>_n({...h,spineItemsManager:e}),getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:h=>re({position:h,settings:n,spineItemsManager:e,spineLayout:s}),getSpineItemFromIframe:u,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:h=>qn({settings:n,spineItemsManager:e,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,m)=>{const{bottom:f,left:w,right:S,top:y}=s.getSpineItemSpineLayoutInfo(m);return h.x>=w&&h.x<=S&&h.y<=f&&h.y>=y},spineItemLocator:i,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,m)=>{const{height:f,width:w}=s.getSpineItemSpineLayoutInfo(m);return new C({x:Math.min(Math.max(0,h.x),w),y:Math.min(Math.max(0,h.y),f)})}}};class Yn extends O{constructor(t,i,n,s,r,a,c,u){super(),this.parentElement$=t,this.context=i,this.pagination=n,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=a,this.hookManager=c,this.viewport=u,this.elementSubject=new o.BehaviorSubject(fe()),this.element$=this.elementSubject.asObservable(),this.spineLayout=new kn(s,i,a,u),this.locator=xn({context:i,spineItemsManager:s,spineItemLocator:r,settings:a,spineLayout:this.spineLayout,viewport:u}),this.spineItemsLoader=new Un(this.context,s,this.locator,a,this.spineLayout),this.spineItemsObserver=new Nn(s,this.locator);const l=i.manifest$.pipe(b.tap(g=>{this.spineItemsManager.destroyItems();const p=g.spineItems.map((h,m)=>new vt(h,this.elementSubject.getValue(),this.context,this.settings,this.hookManager,m));this.spineItemsManager.addMany(p)})),d=t.pipe(b.tap(g=>{const p=g.ownerDocument.createElement("div");p.style.cssText=`
280
+ `,n.dataset.isReady="false",i.execute("item.onBeforeContainerCreated",void 0,{element:n}),n};class Nn extends O{constructor(t,i){super(),this.spineItemsManager=t,this.spineLocator=i,this.itemIsReady$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.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(n=>{const s=n.map(r=>at(r.element).pipe(o.map(a=>({entries:a,item:r}))));return o.merge(...s)}),o.share()),this.itemLoaded$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>r.loaded$.pipe(o.map(()=>r)));return o.merge(...s)}))}}const Vn=({horizontalOffset:e,verticalOffset:t,context:i,spineItemsManager:n,isGloballyPrePaginated:s,settings:r,index:a,item:c,viewport:u})=>{let l=i.getPageSize().width,d="none";const g=e%u.absoluteViewport.width===0,p=a===n.items.length-1;if(i.state.isUsingSpreadMode){!s&&c.renditionLayout==="reflowable"&&!p&&(l=i.getPageSize().width*2),!s&&c.renditionLayout==="reflowable"&&p&&g&&(l=i.getPageSize().width*2);const m=g&&p&&s;c.item.pageSpreadRight&&g&&!i.isRTL()||c.item.pageSpreadLeft&&g&&i.isRTL()?(d="before",l=i.getPageSize().width*2):m&&(i.isRTL()?d="before":d="after",l=i.getPageSize().width*2)}return c.layout.layout({minimumWidth:l,blankPagePosition:d,spreadPosition:i.state.isUsingSpreadMode?g?i.isRTL()?"right":"left":i.isRTL()?"left":"right":"none"}).pipe(o.map(({width:m,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const y=g?t:t-i.state.visibleAreaRect.height,I=g?0:e;i.isRTL()?c.layout.adjustPositionOfElement({top:y,left:I}):c.layout.adjustPositionOfElement({top:y,left:I});const P=m+I,v=f+y,T=new dt({left:I,right:P,top:y,bottom:v,height:f,width:m,x:I,y});return{horizontalOffset:P,verticalOffset:v,layoutPosition:T}}c.layout.adjustPositionOfElement(i.isRTL()?{right:e,top:0}:{left:e,top:0});const w=i.isRTL()?u.absoluteViewport.width-e-m:e,S=new dt({right:i.isRTL()?u.absoluteViewport.width-e:e+m,left:w,x:w,top:t,bottom:f,height:f,width:m,y:t});return{horizontalOffset:e+m,verticalOffset:0,layoutPosition:S}}))};class kn extends O{constructor(t,i,n,s){super(),this.spineItemsManager=t,this.context=i,this.settings=n,this.viewport=s,this.layoutSubject=new o.Subject,this.spineItemsRelativeLayouts=[],t.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.debounceTime(50),o.exhaustMap(()=>r.pipe(o.filter(a=>!a),o.first())),o.exhaustMap(()=>{r.next(!0);const a=this.context.manifest,c=Yt(a)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((l,d,g)=>l.pipe(o.concatMap(({horizontalOffset:p,verticalOffset:h,pages:m})=>Vn({context:this.context,horizontalOffset:p,index:g,isGloballyPrePaginated:c,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:h,viewport:s}).pipe(o.map(({horizontalOffset:f,verticalOffset:w,layoutPosition:S})=>(this.spineItemsRelativeLayouts[g]=S,{horizontalOffset:f,verticalOffset:w,pages:[...m,S]}))))),o.of({horizontalOffset:0,verticalOffset:0,pages:[]})),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(t){const i=this.spineItemsManager.getSpineItemIndex(t)??0;return this.spineItemsRelativeLayouts[i]||new dt({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((t,i)=>t+i.numberOfPages,0)}destroy(){super.destroy(),this.layoutSubject.complete()}}class Un extends O{constructor(t,i,n,s,r){super(),this.context=t,this.spineItemsManager=i,this.spineLocator=n,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(M.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),_(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,a),o.map(([,l,d])=>{const{numberOfAdjacentSpineItemToPreLoad:g}=s.values,{beginIndex:p=0,endIndex:h=0}=n.getVisibleSpineItemsFromPosition({position:l.position,threshold:0,useAbsoluteViewport:!1})||{},m=p-g,f=h+g,w=Array.from({length:f-m+1},(y,I)=>m+I),S=[...d,...w];i.items.forEach((y,I)=>{S.includes(I)?y.load():y.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(t){const i=t.map(n=>typeof n=="number"?n:n.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,i]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(n=>n!==i))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const oe=(e,t,i)=>{const n=(i.width-t.width)/2,s=(i.height-t.height)/2;return new gt({x:e.x-n,y:e.y-s})};class X extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(t,i){if(i){const s=t;return new X(s.x,s.y,i.width,i.height)}const n=t;return new X(n.x,n.y,n.width,n.height)}}class En{constructor({width:t,height:i}){this.__symbol=Symbol("AbsoluteViewport"),this.width=t,this.height=i}}class Wn{constructor({width:t,height:i}){this.__symbol=Symbol("RelativeViewport"),this.width=t,this.height=i}}const zn=({pageIndex:e,spineItemOrId:t,spineItemsManager:i})=>{const n=i.items,s=i.get(t);if(!s)return;const{currentAbsolutePage:r}=n.reduce((a,c)=>{if(a.found)return a;const u=c.numberOfPages;return s===c&&e<=u-1?{currentAbsolutePage:a.currentAbsolutePage+e,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+u}},{currentAbsolutePage:0,found:!1});return r},Hn=({itemHeight:e,itemWidth:t,visibleWidthOfItem:i,visibleHeightOfItem:n,threshold:s})=>{const r=i/t,a=n/e;return r>=s&&a>=s},Bn=({visibleWidthOfItem:e,visibleHeightOfItem:t,threshold:i,viewportPosition:n})=>{const s=e/n.width;return t/n.height>=i&&s>=i},se=({itemPosition:{bottom:e,left:t,right:i,top:n,width:s,height:r},threshold:a,viewportPosition:c,restrictToScreen:u})=>{const l=c.x,d=c.x+(c.width-1),g=c.y,p=Math.max(c.y+(c.height-1),0),h=Math.max(0,Math.min(i,d)-Math.max(t,l)),m=Math.max(0,Math.min(e,p)-Math.max(n,g));if(h<=0||m<=0)return{visible:!1};const w=Bn({threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h,viewportPosition:c});return u?{visible:w}:{visible:Hn({itemHeight:r,itemWidth:s,threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h})||w}},_n=({absolutePageIndex:e,spineItemsManager:t})=>{const i=t.items,{found:n,currentAbsolutePage:s}=i.reduce((r,a)=>{if(r.found)return r;const c=a.numberOfPages,u=e-r.currentAbsolutePage,l=r.currentAbsolutePage+c;return u<=c-1?{...r,currentAbsolutePage:l,found:{item:a,pageIndex:u}}:{...r,currentAbsolutePage:l}},{currentAbsolutePage:0});if(n)return{spineItem:n.item,pageIndex:n.pageIndex,itemIndex:t.getSpineItemIndex(n.item)??0,currentAbsolutePage:s}},re=({position:e,spineItemsManager:t,spineLayout:i,settings:n})=>{const s=t.items.find(r=>{const{left:a,right:c,bottom:u,top:l}=i.getSpineItemSpineLayoutInfo(r),d=e.x>=a&&e.x<c;return n.values.computedPageTurnDirection==="horizontal"?d:d&&e.y>=l&&e.y<u});return e.x===0&&!s?t.items[0]:s},vt=({spineItemPosition:e,itemLayout:{left:t,top:i}})=>new F({x:t+e.x,y:i+e.y}),qn=({position:e,threshold:t,restrictToScreen:i,spineItemsManager:n,settings:s,spineLayout:r,useAbsoluteViewport:a=!0,viewport:c})=>{const u=re({position:e,settings:s,spineItemsManager:n,spineLayout:r})||n.get(0),l=n.items.reduce((m,f)=>{const w=r.getSpineItemSpineLayoutInfo(f),S=a?c.absoluteViewport:c.relativeViewport,y=oe(e,c.absoluteViewport,S),I=X.from(y,S),{visible:P}=se({itemPosition:w,threshold:t,viewportPosition:I,restrictToScreen:i});return P?[...m,f]:m},[]),d=l[0]??u,g=l[l.length-1]??d;if(!d||!g)return;const p=n.getSpineItemIndex(d),h=n.getSpineItemIndex(g);return{beginIndex:p??0,endIndex:h??0}},xn=({spineItemsManager:e,context:t,spineItemLocator:i,settings:n,spineLayout:s,viewport:r})=>{const a=(h,m)=>{const{left:f,top:w}=s.getSpineItemSpineLayoutInfo(m);return new C({x:Math.max(h.x-f,0),y:Math.max(h.y-w,0)})},c=h=>vt({spineItemPosition:new C({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),u=h=>e.items.find(m=>m.renderer.getDocumentFrame()===h),l=(h,m,f)=>{if(typeof f=="number"){const w=e.get(f);return w?i.getSpineItemPageIndexFromNode(h,m||0,w):void 0}return i.getSpineItemPageIndexFromNode(h,m||0,f)},d=({position:h,threshold:m,spineItem:f,restrictToScreen:w,useAbsoluteViewport:S=!0,viewport:y})=>{const I=f.numberOfPages,v=Array.from(Array(I)).map((R,D)=>{const B=i.getSpineItemPositionFromPageIndex({pageIndex:D,spineItem:f}),V=vt({spineItemPosition:B,itemLayout:s.getSpineItemSpineLayoutInfo(f)});return{index:D,absolutePosition:{width:t.getPageSize().width,height:t.getPageSize().height,left:V.x,top:V.y,bottom:V.y+t.getPageSize().height,right:V.x+t.getPageSize().width}}}).reduce((R,{absolutePosition:D,index:B})=>{const V=S?y.absoluteViewport:y.relativeViewport,Qn=oe(h,y.absoluteViewport,V),jn=X.from(Qn,V),{visible:to}=se({viewportPosition:jn,restrictToScreen:w,threshold:m,itemPosition:D});return to?[...R,B]:R},[]),T=v[0],L=v[v.length-1]??T;if(!(T===void 0||L===void 0))return{beginPageIndex:T,endPageIndex:L}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:m})=>{const f=s.getSpineItemSpineLayoutInfo(h);return vt({itemLayout:f,spineItemPosition:m})},getAbsolutePageIndexFromPageIndex:h=>zn({...h,spineItemsManager:e}),getSpineInfoFromAbsolutePageIndex:h=>_n({...h,spineItemsManager:e}),getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:h=>re({position:h,settings:n,spineItemsManager:e,spineLayout:s}),getSpineItemFromIframe:u,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:h=>qn({settings:n,spineItemsManager:e,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,m)=>{const{bottom:f,left:w,right:S,top:y}=s.getSpineItemSpineLayoutInfo(m);return h.x>=w&&h.x<=S&&h.y<=f&&h.y>=y},spineItemLocator:i,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,m)=>{const{height:f,width:w}=s.getSpineItemSpineLayoutInfo(m);return new C({x:Math.min(Math.max(0,h.x),w),y:Math.min(Math.max(0,h.y),f)})}}};class Yn extends O{constructor(t,i,n,s,r,a,c,u){super(),this.parentElement$=t,this.context=i,this.pagination=n,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=a,this.hookManager=c,this.viewport=u,this.elementSubject=new o.BehaviorSubject(fe()),this.element$=this.elementSubject.asObservable(),this.spineLayout=new kn(s,i,a,u),this.locator=xn({context:i,spineItemsManager:s,spineItemLocator:r,settings:a,spineLayout:this.spineLayout,viewport:u}),this.spineItemsLoader=new Un(this.context,s,this.locator,a,this.spineLayout),this.spineItemsObserver=new Nn(s,this.locator);const l=i.manifest$.pipe(b.tap(g=>{this.spineItemsManager.destroyItems();const p=g.spineItems.map((h,m)=>new Pt(h,this.elementSubject.getValue(),this.context,this.settings,this.hookManager,m));this.spineItemsManager.addMany(p)})),d=t.pipe(b.tap(g=>{const p=g.ownerDocument.createElement("div");p.style.cssText=`
281
281
  height: 100%;
282
282
  position: relative;
283
- `,p.className=`${H}-spine`,this.elementSubject.next(p)}));o.merge(l,d).pipe(b.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}destroy(){super.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue().remove(),this.elementSubject.complete()}}class Xn extends O{constructor(t,i){super(),this.context=t,this.settings=i,this.orderedSpineItemsSubject=new o.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(t){return typeof t=="number"?this.orderedSpineItemsSubject.value[t]:typeof t=="string"?this.orderedSpineItemsSubject.value.find(({item:i})=>i.id===t):t}comparePositionOf(t,i){const n=this.getSpineItemIndex(t)??0,s=this.getSpineItemIndex(i)??0;return n>s?"after":n===s?"same":"before"}getSpineItemIndex(t){const i=t instanceof vt?t:this.get(t);if(!i)return;const n=this.orderedSpineItemsSubject.value.indexOf(i);return n<0?void 0:n}addMany(t){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...t])}getSpineItemFromCfi(t){const{itemIndex:i}=ft(t);if(i!==void 0)return this.get(i)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(t=>t.destroy())}}class Zn extends Y{constructor(t){const i=document.createElement("div");i.style.cssText=`
283
+ `,p.className=`${H}-spine`,this.elementSubject.next(p)}));o.merge(l,d).pipe(b.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}destroy(){super.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue().remove(),this.elementSubject.complete()}}class Xn extends O{constructor(t,i){super(),this.context=t,this.settings=i,this.orderedSpineItemsSubject=new o.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(t){return typeof t=="number"?this.orderedSpineItemsSubject.value[t]:typeof t=="string"?this.orderedSpineItemsSubject.value.find(({item:i})=>i.id===t):t}comparePositionOf(t,i){const n=this.getSpineItemIndex(t)??0,s=this.getSpineItemIndex(i)??0;return n>s?"after":n===s?"same":"before"}getSpineItemIndex(t){const i=t instanceof Pt?t:this.get(t);if(!i)return;const n=this.orderedSpineItemsSubject.value.indexOf(i);return n<0?void 0:n}addMany(t){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...t])}getSpineItemFromCfi(t){const{itemIndex:i}=mt(t);if(i!==void 0)return this.get(i)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(t=>t.destroy())}}class Zn extends Y{constructor(t){const i=document.createElement("div");i.style.cssText=`
284
284
  background-color: white;
285
285
  position: relative;
286
286
  -transform: scale(0.2);
287
287
  height: 100%;
288
288
  width: 100%;
289
- `,i.className=`${H}-viewport`,super({element:i,pageSize:{width:1,height:1}}),this.context=t;const n=this.context.watch("visibleAreaRect").pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize()})}));o.merge(n).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(){const t=this.absoluteViewport,{isUsingSpreadMode:i}=this.context.state;return{width:i?t.width/2:t.width,height:t.height}}get absoluteViewport(){const t=this.context.state.visibleAreaRect;return new En({width:t.width,height:t.height})}get relativeViewport(){const t=this.absoluteViewport,i=this.value.element.getBoundingClientRect(),n=((i==null?void 0:i.width)??t.width)/t.width;return new Wn({width:t.width/n,height:t.height/n})}}const Gn=e=>{const t=new o.Subject,i=new Xt,n=new Gi,s=new Rn(e,n),r=new Ji(n,s),a=new Xn(n,s),c=new o.BehaviorSubject(void 0),u=new Zn(n),l=c.pipe(b.filter(E)),d=ee({context:n,settings:s}),g=new Ln(n,a),p=new Yn(l,n,g,a,d,s,i,u),h=Fn({context:n,spineItemsManager:a,hookManager:i,spine:p,settings:s,viewport:u}),m=new Cn(n,g,a,p,d);h.viewportState$.subscribe(n.bridgeEvent.viewportStateSubject),h.navigation$.subscribe(n.bridgeEvent.navigationSubject),h.locker.isLocked$.subscribe(n.bridgeEvent.navigationIsLockedSubject),g.subscribe(n.bridgeEvent.paginationSubject);const f=()=>{var D;const y=(D=c.getValue())==null?void 0:D.parentElement,I=c.getValue();if(!I||!y)return;const P={width:y==null?void 0:y.offsetWidth,height:y==null?void 0:y.offsetHeight},v=0,T=0,L=0;I.style.setProperty("overflow","hidden"),I.style.height=`${P.height-T-L}px`,I.style.width=`${P.width-2*v}px`;const R=I.getBoundingClientRect();n.update({visibleAreaRect:{x:R.x,y:R.y,width:P.width,height:P.height}}),p.layout()},w=y=>{var T;const{containerElement:I,manifest:P}=y;if(n.manifest){A.warn("loading a new book is not supported yet");return}A.log("load",{options:y});const v=Jn(I);I!==((T=c.getValue())==null?void 0:T.parentElement)&&(c.next(v),I.appendChild(v)),n.update({manifest:P,containerElement:I,rootElement:v,forceSinglePageMode:s.values.forceSinglePageMode}),f()},S=()=>{var y;a.destroy(),m.destroy(),s.destroy(),g.destroy(),n.destroy(),h.destroy(),p.destroy(),(y=c.getValue())==null||y.remove(),r.destroy(),t.next(),t.complete(),u.destroy()};return{context:n,spine:p,hookManager:i,cfi:{generateCfiFromRange:fi,generateCfiFromSelection:Si,parseCfi:ft,generateCfiForSpineItemPage:y=>pt({...y,spineItemLocator:d}),resolveCfi:y=>Bt({...y,spineItemsManager:a})},navigation:h,spineItemsObserver:p.spineItemsObserver,spineItemsManager:a,layout:f,load:w,destroy:S,pagination:{get state(){return g.value},get state$(){return g}},settings:s,viewport:u,element$:l,viewportState$:n.bridgeEvent.viewportState$,viewportFree$:n.bridgeEvent.viewportFree$,state$:n.manifest$.pipe(b.map(y=>y?"ready":"idle")),features:r,$:{destroy$:t}}},Jn=e=>{const t=e.ownerDocument.createElement("div");return t.style.cssText=`
289
+ `,i.className=`${H}-viewport`,super({element:i,pageSize:{width:1,height:1}}),this.context=t;const n=this.context.watch("visibleAreaRect").pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize()})}));o.merge(n).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(){const t=this.absoluteViewport,{isUsingSpreadMode:i}=this.context.state;return{width:i?t.width/2:t.width,height:t.height}}get absoluteViewport(){const t=this.context.state.visibleAreaRect;return new En({width:t.width,height:t.height})}get relativeViewport(){const t=this.absoluteViewport,i=this.value.element.getBoundingClientRect(),n=((i==null?void 0:i.width)??t.width)/t.width;return new Wn({width:t.width/n,height:t.height/n})}}const Gn=e=>{const t=new o.Subject,i=new Xt,n=new Gi,s=new Rn(e,n),r=new Ji(n,s),a=new Xn(n,s),c=new o.BehaviorSubject(void 0),u=new Zn(n),l=c.pipe(b.filter(W)),d=ee({context:n,settings:s}),g=new Ln(n,a),p=new Yn(l,n,g,a,d,s,i,u),h=Fn({context:n,spineItemsManager:a,hookManager:i,spine:p,settings:s,viewport:u}),m=new Cn(n,g,a,p,d);h.viewportState$.subscribe(n.bridgeEvent.viewportStateSubject),h.navigation$.subscribe(n.bridgeEvent.navigationSubject),h.locker.isLocked$.subscribe(n.bridgeEvent.navigationIsLockedSubject),g.subscribe(n.bridgeEvent.paginationSubject);const f=()=>{var D;const y=(D=c.getValue())==null?void 0:D.parentElement,I=c.getValue();if(!I||!y)return;const P={width:y==null?void 0:y.offsetWidth,height:y==null?void 0:y.offsetHeight},v=0,T=0,L=0;I.style.setProperty("overflow","hidden"),I.style.height=`${P.height-T-L}px`,I.style.width=`${P.width-2*v}px`;const R=I.getBoundingClientRect();n.update({visibleAreaRect:{x:R.x,y:R.y,width:P.width,height:P.height}}),p.layout()},w=y=>{var T;const{containerElement:I,manifest:P}=y;if(n.manifest){A.warn("loading a new book is not supported yet");return}A.log("load",{options:y});const v=Jn(I);I!==((T=c.getValue())==null?void 0:T.parentElement)&&(c.next(v),I.appendChild(v)),n.update({manifest:P,containerElement:I,rootElement:v,forceSinglePageMode:s.values.forceSinglePageMode}),f()},S=()=>{var y;a.destroy(),m.destroy(),s.destroy(),g.destroy(),n.destroy(),h.destroy(),p.destroy(),(y=c.getValue())==null||y.remove(),r.destroy(),t.next(),t.complete(),u.destroy()};return{context:n,spine:p,hookManager:i,cfi:{generateCfiFromRange:fi,generateCfiFromSelection:Si,parseCfi:mt,generateCfiForSpineItemPage:y=>pt({...y,spineItemLocator:d}),resolveCfi:y=>Bt({...y,spineItemsManager:a})},navigation:h,spineItemsObserver:p.spineItemsObserver,spineItemsManager:a,layout:f,load:w,destroy:S,pagination:{get state(){return g.value},get state$(){return g}},settings:s,viewport:u,element$:l,viewportState$:n.bridgeEvent.viewportState$,viewportFree$:n.bridgeEvent.viewportFree$,state$:n.manifest$.pipe(b.map(y=>y?"ready":"idle")),features:r,$:{destroy$:t}}},Jn=e=>{const t=e.ownerDocument.createElement("div");return t.style.cssText=`
290
290
  background-color: white;
291
291
  position: relative;
292
- `,t.className=`${H}-reader`,t},Kn=zi(Me(ni(_i($e(ae(Vi(Bi(Yi(mi(Ye(si(ce(Hi(Oi(ti(we(Gn)))))))))))))))));Object.defineProperty($,"isShallowEqual",{enumerable:!0,get:()=>M.isShallowEqual}),$.DestroyableClass=O,$.DocumentRenderer=z,$.HookManager=Xt,$.ResourceHandler=J,$.SettingsManager=ne,$.SpineItem=vt,$.createReader=Kn,$.deferIdle=ut,$.deferNextResult=Ot,$.getAttributeValueFromString=et,$.getFrameViewportInfo=Z,$.idle=ct,$.injectCSS=Mt,$.isHtmlElement=it,$.isHtmlTagElement=At,$.mapKeysTo=rt,$.observeIntersection=Ie,$.observeMutation=lt,$.observeResize=at,$.removeCSS=Tt,$.upsertCSSToFrame=N,$.waitForFrameLoad=Ft,$.waitForFrameReady=Lt,$.waitForSwitch=_,$.watchKeys=G,Object.defineProperty($,Symbol.toStringTag,{value:"Module"})});
292
+ `,t.className=`${H}-reader`,t},Kn=zi(Me(ni(_i($e(ae(Vi(Bi(Yi(mi(Ye(si(ce(Hi(Oi(ti(we(Gn)))))))))))))))));Object.defineProperty($,"isShallowEqual",{enumerable:!0,get:()=>M.isShallowEqual}),$.DestroyableClass=O,$.DocumentRenderer=z,$.HookManager=Xt,$.ResourceHandler=J,$.SettingsManager=ne,$.SpineItem=Pt,$.createReader=Kn,$.deferIdle=ut,$.deferNextResult=At,$.getAttributeValueFromString=et,$.getFrameViewportInfo=Z,$.idle=ct,$.injectCSS=$t,$.isHtmlElement=it,$.isHtmlTagElement=Rt,$.mapKeysTo=rt,$.observeIntersection=Ie,$.observeMutation=lt,$.observeResize=at,$.removeCSS=Mt,$.upsertCSSToFrame=N,$.waitForFrameLoad=Tt,$.waitForFrameReady=Ft,$.waitForSwitch=_,$.watchKeys=G,Object.defineProperty($,Symbol.toStringTag,{value:"Module"})});
293
293
  //# sourceMappingURL=index.umd.cjs.map