@prose-reader/core 1.234.0 → 1.235.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,20 +1,20 @@
1
- (function(w,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi"),require("reactjrx")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi","reactjrx"],o):(w=typeof globalThis<"u"?globalThis:w||self,o(w.prose={},w.rxjs,w.shared,w.operators,w.cfi,w.reactjrx))})(this,function(w,o,$,y,U,ct){"use strict";const ut=(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},Ct=(e,t,i,n)=>{var r;if(!((r=e==null?void 0:e.contentDocument)!=null&&r.head))return;const s=e.contentDocument.createElement("style");s.id=t,s.innerHTML=i,n?e.contentDocument.head.prepend(s):e.contentDocument.head.appendChild(s)},Ne=(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)=>{var r;if(!e)return;const s=(r=e==null?void 0:e.contentDocument)==null?void 0:r.getElementById(t);if(s){s.innerHTML=i;return}Ct(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=ut(n,"width"),r=ut(n,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},Rt=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))})),At=e=>e.pipe(o.switchMap(t=>{var n;const i=(n=t==null?void 0:t.contentDocument)==null?void 0:n.fonts.ready;return i?o.from(i).pipe(o.map(()=>t)):o.of(void 0)})),Oe=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 c=i.spineItemsManager.get(s);if(!c)return;const a=c.renderer.getDocumentFrame();if(!a)return;N(a,"prose-reader-accessibility",`
1
+ (function(I,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi"),require("reactjrx")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi","reactjrx"],o):(I=typeof globalThis<"u"?globalThis:I||self,o(I.prose={},I.rxjs,I.shared,I.operators,I.cfi,I.reactjrx))})(this,function(I,o,P,y,O,ce){"use strict";const le=(i,e)=>{const t=new RegExp(`${e}\\s*=\\s*([0-9.]+)`,"i"),n=i.match(t)||[],s=n[1]||"0";return n&&Number.parseFloat(s)||0},Ce=(i,e,t,n)=>{if(!i?.contentDocument?.head)return;const s=i.contentDocument.createElement("style");s.id=e,s.innerHTML=t,n?i.contentDocument.head.prepend(s):i.contentDocument.head.appendChild(s)},Dt=(i,e)=>{if(i?.contentDocument?.head){const t=i.contentDocument.getElementById(e);t&&t.remove()}},A=(i,e,t,n)=>{if(!i)return;const s=i?.contentDocument?.getElementById(e);if(s){s.innerHTML=t;return}Ce(i,e,t,n)},Z=i=>{if(i?.contentDocument){const t=i.contentDocument.querySelector("meta[name='viewport']");if(t){const n=t.getAttribute("content");if(n){const s=le(n,"width"),r=le(n,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},Ee=i=>i.pipe(o.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?o.of(e):o.fromEvent(e,"load").pipe(o.take(1),o.map(()=>e)))),Re=i=>i.pipe(o.switchMap(e=>{const t=e?.contentDocument?.fonts.ready;return t?o.from(t).pipe(o.map(()=>e)):o.of(void 0)})),Nt=i=>e=>{const t=i(e),n=new IntersectionObserver(s=>{s.forEach(r=>{r.isIntersecting?r.target.removeAttribute("tab-index"):r.target.setAttribute("tab-index","-1")})},{});return t.hookManager.register("item.onDocumentLoad",({itemId:s,destroy:r})=>{const c=t.spineItemsManager.get(s);if(!c)return;const a=c.renderer.getDocumentFrame();if(!a)return;A(a,"prose-reader-accessibility",`
2
2
  :focus-visible {
3
3
 
4
4
  outline: -webkit-focus-ring-color auto 1px;
5
5
  }
6
- `);const u=(l=a.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}},Ve=e=>t=>{const i=e(t);return i.context.state$.pipe(o.takeUntil(i.$.destroy$)).subscribe(({rootElement: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 c;const s=i.spineItemsManager.get(n),r=s==null?void 0:s.renderer.getDocumentFrame();r&&((c=r.contentDocument)==null||c.body.setAttribute("tabindex","-1"))}),i},C=$.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),Ue=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function ke(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 We=(e,t)=>{const i="body"in e?lt(e.body,t):lt(e,t),n="createRange"in e?e:e.ownerDocument;if(i){let s,r=0;const c=n.createRange();return Array.from(i.childNodes).some(a=>{c.selectNodeContents(a);const u=c.getClientRects(),l=Ee(u,t);if(l){s=c.cloneRange();const d=ke(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}}},lt=(e,t)=>{let i;const n=Dt(e.getBoundingClientRect(),t);return n!=="before"&&n!=="after"&&(i=e),Array.from(e.children).some(s=>{const r=lt(s,t);return r?(i=r,!0):!1}),i};function Dt(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 Ee(e,t){return Array.from(e).find(i=>{const n=Dt(i,t);return n!=="before"&&n!=="after"})}const ze=(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){C.error(s)}return n}},dt=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 c=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(c.PointerEvent&&e instanceof c.PointerEvent)return!0}if((r=e==null?void 0:e.view)!=null&&r.window){const c=e==null?void 0:e.view;if(c.PointerEvent&&e instanceof c.PointerEvent)return!0}return!!Ue.includes(e.type)},He=e=>{var t,i,n,s,r;if(dt(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 c=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(c.MouseEvent)return e instanceof c.MouseEvent}if((r=e==null?void 0:e.view)!=null&&r.window){const c=e==null?void 0:e.view;if(c.MouseEvent)return e instanceof c.MouseEvent}return!1},Be=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 c=(s=(n=e==null?void 0:e.target)==null?void 0:n.ownerDocument)==null?void 0:s.defaultView;if(c.TouchEvent)return e instanceof c.TouchEvent}if((r=e==null?void 0:e.view)!=null&&r.window){const c=e==null?void 0:e.view;if(c.TouchEvent)return e instanceof c.TouchEvent}return!1},_e=()=>document.createElement("div"),Nt=e=>{const t=["img","video","audio","source","link","script"].join(",");return Array.from((e==null?void 0:e.querySelectorAll(t))||[])},qe=e=>{if(Nt(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 a=r.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);a&&a.forEach(u=>{var l;(l=e==null?void 0:e.defaultView)==null||l.URL.revokeObjectURL(u)})}}}};function Ot(e,t,i=[]){if(typeof e!="object"||e===null)return!1;for(const n of t)if(!(n in e))return!1;for(const n of i)if(n in e&&typeof e[n]!="function")return!1;return!0}function gt(e){return Ot(e,["nodeType"],[])&&e.nodeType===Node.ELEMENT_NODE}function Vt(e,t){return gt(e)&&e.tagName.toLowerCase()===t.toLowerCase()}function Ye(e){return Ot(e,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const pt=({position:e,frameElement:t})=>{const i=t.getBoundingClientRect(),n=i.width/t.offsetWidth,s=i.height/t.offsetHeight,{left:r=0,top:c=0}=i,a=e.clientX*n+r,u=e.clientY*s+c;return{clientX:a,clientY:u}},xe=(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),c=s,{height:a,width:u}=n.getPageSize();if(!r||!(c instanceof HTMLIFrameElement))return e;if(dt(e)){const{clientX:d,clientY:g}=pt({position:e,frameElement:c}),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}=pt({position:e,frameElement:c}),p=new MouseEvent(e.type,{...e,clientX:d,clientY:g});return Object.defineProperty(p,"target",{value:t.target,enumerable:!0}),p}if(Be(e)){const d=Array.from(e.touches).map(p=>{const{clientX:m,clientY:h}=pt({position:p,frameElement:c});return new Touch({identifier:p.identifier,target:p.target,clientX:m,clientY:h})}),g=new TouchEvent(e.type,{touches:d,changedTouches:d,targetTouches:d});return Object.defineProperty(g,"target",{value:t.target,enumerable:!0}),g}return e},Xe=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],Ze=e=>t=>{const i=e(t);return i.hookManager.register("item.onDocumentLoad",({destroy:n,itemId:s})=>{const r=i.spineItemsManager.get(s),c=r==null?void 0:r.renderer.getDocumentFrame();if(!c||!r)return;const a=Xe.map(u=>{var d;const l=g=>{var m;let p=g;if(dt(g)&&(p=new PointerEvent(g.type,g)),p!==g){const h=xe(p,g,i.spine.locator,i.context);(m=i.context.state.rootElement)==null||m.dispatchEvent(h)}};return(d=c.contentDocument)==null||d.addEventListener(u,l),()=>{var g;(g=c.contentDocument)==null||g.removeEventListener(u,l)}});n(()=>{a.forEach(u=>u())})}),i},ht=e=>y.map(t=>Object.entries(t).reduce((i,[n,s])=>e.includes(n)?{...i,[n]:s}:i,{})),G=e=>t=>t.pipe(ht(e),y.distinctUntilChanged($.isShallowEqual));function K(e){return new o.Observable(t=>{const i=new ResizeObserver(n=>{t.next(n)});return i.observe(e),()=>{i.disconnect()}})}const x=e=>t=>t.pipe(y.switchMap(i=>e.pipe(y.first(),y.map(()=>i)))),Ut=e=>{let t;const i=e.subscribe(n=>{t={result:n}});return()=>(i.unsubscribe(),t?o.of(t.result):e)};function mt(){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 ft(e){return o.defer(()=>mt().pipe(y.switchMap(e)))}const St=(e,t)=>new o.Observable(i=>{const n=new MutationObserver(s=>{i.next(s)});return n.observe(e,t),()=>n.disconnect()});function Ge(e,t){return new o.Observable(i=>{const n=new IntersectionObserver(s=>{i.next(s)},t);return n.observe(e),()=>{n.disconnect()}})}class kt{constructor(t,i){this.settingsManager=i;const n=$.shallowMergeIfDefined(this.getDefaultSettings(),t);this.outputSettings=this.computeOutputSettings(n),this.inputSettings=$.shallowMergeIfDefined(this.getDefaultSettings(),t),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(y.startWith(this.outputSettings))]).pipe(y.map(([s,r])=>({...s,...r})),y.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(t){const i=this.getCleanedParentInputSettings(t),n=this.settingsManager._prepareUpdate(i),s=$.shallowMergeIfDefined(this.inputSettings,t),r=this.computeOutputSettings(s),c=this.hasSettingsChanged(r);return{hasChanged:c||n.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!n.hasChanged&&c&&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(y.map(i=>i[t]),y.distinctUntilChanged($.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let Ke=class extends kt{computeOutputSettings(t){return t}hasSettingsChanged(t){return!$.isShallowEqual(this.outputSettings,t)}getCleanedParentInputSettings(t){const{fontJustification:i,fontScale:n,fontWeight:s,lineHeight:r,...c}=t;return c}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const Je=e=>t=>{const{fontScale:i,lineHeight:n,fontWeight:s,fontJustification:r}=t,c=new o.Subject,a=e(t),u=new Ke({fontScale:i,lineHeight:n,fontWeight:s,fontJustification:r},a.settings),l=()=>`
6
+ `);const l=a.contentDocument?.body.querySelectorAll("a");l?.forEach(u=>{n.observe(u)}),r(()=>{l?.forEach(u=>{n.unobserve(u)})})}),{...t}},Ot=i=>e=>{const t=i(e);return t.context.state$.pipe(o.takeUntil(t.$.destroy$)).subscribe(({rootElement:n})=>{if(!n)return;const s=()=>{t.settings.values.computedPageTurnMode==="controlled"&&n.scrollTo(0,0)};n.addEventListener("scroll",s)}),t.hookManager.register("item.onDocumentLoad",({itemId:n})=>{const r=t.spineItemsManager.get(n)?.renderer.getDocumentFrame();r&&r.contentDocument?.body.setAttribute("tabindex","-1")}),t},L=P.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),kt=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function Vt(i,e,t){if("caretPositionFromPoint"in i)return i.caretPositionFromPoint(e,t);if("caretRangeFromPoint"in i&&typeof i.caretRangeFromPoint<"u")return i.caretRangeFromPoint(e,t)}const Ut=(i,e)=>{const t="body"in i?ue(i.body,e):ue(i,e),n="createRange"in i?i:i.ownerDocument;if(t){let s,r=0;const c=n.createRange();return Array.from(t.childNodes).some(a=>{c.selectNodeContents(a);const l=c.getClientRects(),u=Wt(l,e);if(u){s=c.cloneRange();const d=Vt(n,Math.ceil(u.left),Math.ceil(u.top));return d&&"startContainer"in d&&d.startContainer===s.startContainer&&(r=d.startOffset),d&&"offsetNode"in d&&d.offsetNode===s.startContainer&&(r=d.offset),!0}return!1}),s?{node:s.startContainer,offset:r}:{node:t,offset:0}}},ue=(i,e)=>{let t;const n=Ae(i.getBoundingClientRect(),e);return n!=="before"&&n!=="after"&&(t=i),Array.from(i.children).some(s=>{const r=ue(s,e);return r?(t=r,!0):!1}),t};function Ae(i,{left:e,right:t}){return i.left<=e&&i.right<=e?"before":i.left<=e&&i.right>e&&i.right<=t?"partially-before":i.left<=t&&i.right>t?"partially-after":i.left>t?"after":"within"}function Wt(i,e){return Array.from(i).find(t=>{const n=Ae(t,e);return n!=="before"&&n!=="after"})}const zt=(i,e)=>{if(i.nodeType!==Node.CDATA_SECTION_NODE&&i.nodeType!==Node.DOCUMENT_TYPE_NODE){const t=i.ownerDocument?.createRange();t?.selectNodeContents(i);try{e<=(t?.endOffset||0)&&t?.setStart(i,e||0)}catch(n){L.error(n)}return t}},de=i=>{if(i?.target&&i?.target?.ownerDocument?.defaultView){const e=i?.target?.ownerDocument?.defaultView;if(e.PointerEvent&&i instanceof e.PointerEvent)return!0}if(i?.view?.window){const e=i?.view;if(e.PointerEvent&&i instanceof e.PointerEvent)return!0}return!!kt.includes(i.type)},Ht=i=>{if(de(i))return!1;if(i?.target&&i?.target?.ownerDocument?.defaultView){const e=i?.target?.ownerDocument?.defaultView;if(e.MouseEvent)return i instanceof e.MouseEvent}if(i?.view?.window){const e=i?.view;if(e.MouseEvent)return i instanceof e.MouseEvent}return!1},Bt=i=>{if(i?.target&&i?.target?.ownerDocument?.defaultView){const e=i?.target?.ownerDocument?.defaultView;if(e.TouchEvent)return i instanceof e.TouchEvent}if(i?.view?.window){const e=i?.view;if(e.TouchEvent)return i instanceof e.TouchEvent}return!1},_t=()=>document.createElement("div"),De=i=>{const e=["img","video","audio","source","link","script"].join(",");return Array.from(i?.querySelectorAll(e)||[])},qt=i=>{if(De(i).forEach(t=>{const n=t.getAttribute("src")||t.getAttribute("href");n?.startsWith("blob:")&&i?.defaultView?.URL.revokeObjectURL(n)}),i){const t=Array.from(i.styleSheets||[]);for(const n of t){const s=Array.from(n.cssRules||[]);for(const r of s)if(i.defaultView&&r instanceof i.defaultView.CSSFontFaceRule){const a=r.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);a&&a.forEach(l=>{i?.defaultView?.URL.revokeObjectURL(l)})}}}};function Ne(i,e,t=[]){if(typeof i!="object"||i===null)return!1;for(const n of e)if(!(n in i))return!1;for(const n of t)if(n in i&&typeof i[n]!="function")return!1;return!0}function pe(i){return Ne(i,["nodeType"],[])&&i.nodeType===Node.ELEMENT_NODE}function Oe(i,e){return pe(i)&&i.tagName.toLowerCase()===e.toLowerCase()}function Yt(i){return Ne(i,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const ge=({position:i,frameElement:e})=>{const t=e.getBoundingClientRect(),n=t.width/e.offsetWidth,s=t.height/e.offsetHeight,{left:r=0,top:c=0}=t,a=i.clientX*n+r,l=i.clientY*s+c;return{clientX:a,clientY:l}},xt=(i,e,t,n)=>{const s=e?.view?.frameElement;if(!e||!s)return i;const r=t.getSpineItemFromIframe(s),c=s,{height:a,width:l}=n.getPageSize();if(!r||!(c instanceof HTMLIFrameElement))return i;if(de(i)){const{clientX:u,clientY:d}=ge({position:i,frameElement:c}),p=new PointerEvent(i.type,{...i,pointerId:i.pointerId,clientX:u,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(Ht(i)){const{clientX:u,clientY:d}=ge({position:i,frameElement:c}),p=new MouseEvent(i.type,{...i,clientX:u,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(Bt(i)){const u=Array.from(i.touches).map(p=>{const{clientX:g,clientY:m}=ge({position:p,frameElement:c});return new Touch({identifier:p.identifier,target:p.target,clientX:g,clientY:m})}),d=new TouchEvent(i.type,{touches:u,changedTouches:u,targetTouches:u});return Object.defineProperty(d,"target",{value:e.target,enumerable:!0}),d}return i},Xt=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],Zt=i=>e=>{const t=i(e);return t.hookManager.register("item.onDocumentLoad",({destroy:n,itemId:s})=>{const r=t.spineItemsManager.get(s),c=r?.renderer.getDocumentFrame();if(!c||!r)return;const a=Xt.map(l=>{const u=d=>{let p=d;if(de(d)&&(p=new PointerEvent(d.type,d)),p!==d){const g=xt(p,d,t.spine.locator,t.context);t.context.state.rootElement?.dispatchEvent(g)}};return c.contentDocument?.addEventListener(l,u),()=>{c.contentDocument?.removeEventListener(l,u)}});n(()=>{a.forEach(l=>l())})}),t},he=i=>y.map(e=>Object.entries(e).reduce((t,[n,s])=>i.includes(n)?{...t,[n]:s}:t,{})),G=i=>e=>e.pipe(he(i),y.distinctUntilChanged(P.isShallowEqual));function K(i){return new o.Observable(e=>{const t=new ResizeObserver(n=>{e.next(n)});return t.observe(i),()=>{t.disconnect()}})}const x=i=>e=>e.pipe(y.switchMap(t=>i.pipe(y.first(),y.map(()=>t)))),ke=i=>{let e;const t=i.subscribe(n=>{e={result:n}});return()=>(t.unsubscribe(),e?o.of(e.result):i)};function me(){return new o.Observable(i=>{if(window.requestIdleCallback){const t=window.requestIdleCallback(()=>{i.next(),i.complete()});return()=>cancelIdleCallback(t)}const e=setTimeout(()=>{i.next(),i.complete()},1);return()=>clearTimeout(e)})}function fe(i){return o.defer(()=>me().pipe(y.switchMap(i)))}const Se=(i,e)=>new o.Observable(t=>{const n=new MutationObserver(s=>{t.next(s)});return n.observe(i,e),()=>n.disconnect()});function Gt(i,e){return new o.Observable(t=>{const n=new IntersectionObserver(s=>{t.next(s)},e);return n.observe(i),()=>{n.disconnect()}})}class Ve{constructor(e,t){this.settingsManager=t;const n=P.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(n),this.inputSettings=P.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(y.startWith(this.outputSettings))]).pipe(y.map(([s,r])=>({...s,...r})),y.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const t=this.getCleanedParentInputSettings(e),n=this.settingsManager._prepareUpdate(t),s=P.shallowMergeIfDefined(this.inputSettings,e),r=this.computeOutputSettings(s),c=this.hasSettingsChanged(r);return{hasChanged:c||n.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!n.hasChanged&&c&&this.outputSettingsUpdateSubject.next(r),{...n.commit(),...r})}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(e){return Array.isArray(e)?this.values$.pipe(G(e)):this.values$.pipe(y.map(t=>t[e]),y.distinctUntilChanged(P.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let Kt=class extends Ve{computeOutputSettings(e){return e}hasSettingsChanged(e){return!P.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:t,fontScale:n,fontWeight:s,lineHeight:r,...c}=e;return c}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const Jt=i=>e=>{const{fontScale:t,lineHeight:n,fontWeight:s,fontJustification:r}=e,c=new o.Subject,a=i(e),l=new Kt({fontScale:t,lineHeight:n,fontWeight:s,fontJustification:r},a.settings),u=()=>`
7
7
 
8
8
  body {
9
- ${u.values.fontScale!==1?`font-size: ${u.values.fontScale}em !important;`:""}
10
- ${u.values.lineHeight!=="publisher"?`line-height: ${u.values.lineHeight} !important;`:""}
11
- ${u.values.fontWeight!=="publisher"?`font-weight: ${u.values.fontWeight} !important;`:""}
12
- ${u.values.fontJustification!=="publisher"?`text-align: ${u.values.fontJustification} !important;`:""}
9
+ ${l.values.fontScale!==1?`font-size: ${l.values.fontScale}em !important;`:""}
10
+ ${l.values.lineHeight!=="publisher"?`line-height: ${l.values.lineHeight} !important;`:""}
11
+ ${l.values.fontWeight!=="publisher"?`font-weight: ${l.values.fontWeight} !important;`:""}
12
+ ${l.values.fontJustification!=="publisher"?`text-align: ${l.values.fontJustification} !important;`:""}
13
13
  }
14
- `,d=p=>{a.spineItemsManager.items.forEach(m=>{if(m.renditionLayout!=="pre-paginated"){const h=m.renderer.getDocumentFrame();h&&N(h,"prose-reader-fonts",l())}}),p&&a.layout()};a.hookManager.register("item.onDocumentLoad",({itemId:p})=>{const m=a.spineItemsManager.get(p);if((m==null?void 0:m.renditionLayout)!=="pre-paginated"){const h=m==null?void 0:m.renderer.getDocumentFrame();h&&N(h,"prose-reader-fonts",l())}});const g=p=>p.pipe(y.pairwise(),o.map(([m,h])=>h.fontScale!==m.fontScale||h.lineHeight!==m.lineHeight));return u.values$.pipe(g,y.tap(d),o.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.complete(),u.destroy(),a.destroy()},settings:u}},Qe=e=>t=>{const i=e(t),n=s=>o.fromEvent(s,"keyup").pipe(o.withLatestFrom(i.settings.values$),o.map(([r,{pageTurnDirection:c}])=>{if(c==="horizontal"){if(r.key==="ArrowRight")return i.navigation.turnRight();if(r.key==="ArrowLeft")return i.navigation.turnLeft()}if(c==="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 c=r.renderer.getDocumentFrame();return c instanceof HTMLIFrameElement&&(c!=null&&c.contentDocument)?n(c.contentDocument):o.EMPTY}))))),o.takeUntil(i.$.destroy$)).subscribe(),i},je=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(c=>o.fromEvent(c,"click"));return o.merge(...r)}))))),o.tap(t=>{t.preventDefault()}),o.share());class A{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 at=class at extends A{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(x(this.context.bridgeEvent.viewportFree$),o.switchMap(()=>{const a=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),...a]).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(at.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=>(C.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"}};at.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let B=at;const ti=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))??ti(this.item)}async fetchResource(){const t=await this.getResource();return t instanceof Response?t:t instanceof URL?fetch(t):t}}const Wt=(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},ei=async(e,t,i,n,s)=>{if(!e||!e.defaultView)return;const r=t.sheet;if(r)try{const c=Array.from(r.cssRules||[]);for(let a=0;a<c.length;a++){const u=c[a];if(e.defaultView&&u instanceof e.defaultView.CSSFontFaceRule){const l=u.style.getPropertyValue("src");if(l.match(/url\(['"]?([^'"]+)['"]?\)/g)){const g=l.split(",").map(h=>h.trim()),p=await Promise.all(g.map(async h=>{var I,P;if(h.startsWith("local("))return h;const f=h.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return h;const b=f[1]??"",S=(I=n.manifest)==null?void 0:I.items.find(({href:v})=>`${Wt(i,b).toLowerCase()}`.endsWith(`${v.toLowerCase()}`));if(S){const v=new J(S,s);try{const M=await v.getResource();if(M instanceof Response){const F=await M.blob(),R=(P=e.defaultView)==null?void 0:P.URL.createObjectURL(F);return h.replace(f[0],`url("${R}")`)}}catch(M){console.error("Error loading font:",M)}}return h})),m=u.cssText.replace(/src:\s*[^;]+;/,`src: ${p.join(", ")};`);r.deleteRule(a),r.insertRule(m,a)}}}}catch(c){console.error("Could not access stylesheet rules:",c)}},ii=(e,t,i,n,s)=>{var u;const r=t.getAttribute("src")||t.getAttribute("href");if(!r)return o.of(null);const c=(u=n.manifest)==null?void 0:u.items.find(({href:l})=>`${Wt(i,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!c)return o.of(null);const a=new J(c,s);return o.from(a.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 ei(e,t,i,n,s),p.next(),p.complete()}catch(m){p.error(m)}},t.onerror=p.error});return o.of(null)}))},ni=({settings:e,item:t,context:i})=>n=>n.pipe(o.switchMap(s=>{const r=Nt(s.contentDocument),c=$.getParentPath(t.href),a=r.map(u=>ii(s.contentDocument,u,c,i,e));return o.combineLatest(a).pipe(o.map(()=>s))})),oi=e=>{qe(e==null?void 0:e.contentDocument)},si=[".xhtml",".html",".htm"],_="prose-reader",ri=async(e,t)=>{if(typeof e=="string")return e;const i=$.parseContentType(e.headers.get("Content-Type")||"")||$.detectMimeTypeFromName(t.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(s=>s===i)){const s=await e.blob(),r=URL.createObjectURL(s),c=await createImageBitmap(s),{width:a,height:u}={width:c.width,height:c.height};return c.close(),`
14
+ `,d=g=>{a.spineItemsManager.items.forEach(m=>{if(m.renditionLayout!=="pre-paginated"){const h=m.renderer.getDocumentFrame();h&&A(h,"prose-reader-fonts",u())}}),g&&a.layout()};a.hookManager.register("item.onDocumentLoad",({itemId:g})=>{const m=a.spineItemsManager.get(g);if(m?.renditionLayout!=="pre-paginated"){const h=m?.renderer.getDocumentFrame();h&&A(h,"prose-reader-fonts",u())}});const p=g=>g.pipe(y.pairwise(),o.map(([m,h])=>h.fontScale!==m.fontScale||h.lineHeight!==m.lineHeight));return l.values$.pipe(p,y.tap(d),o.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.complete(),l.destroy(),a.destroy()},settings:l}},Qt=i=>e=>{const t=i(e),n=s=>o.fromEvent(s,"keyup").pipe(o.withLatestFrom(t.settings.values$),o.map(([r,{pageTurnDirection:c}])=>{if(c==="horizontal"){if(r.key==="ArrowRight")return t.navigation.turnRight();if(r.key==="ArrowLeft")return t.navigation.turnLeft()}if(c==="vertical"){if(r.key==="ArrowDown")return t.navigation.turnRight();if(r.key==="ArrowUp")return t.navigation.turnLeft()}return r}));return n(document).pipe(o.takeUntil(t.$.destroy$)).subscribe(),t.spineItemsManager.items$.pipe(o.switchMap(s=>o.merge(...s.map(r=>r.loaded$.pipe(o.switchMap(()=>{const c=r.renderer.getDocumentFrame();return c instanceof HTMLIFrameElement&&c?.contentDocument?n(c.contentDocument):o.EMPTY}))))),o.takeUntil(t.$.destroy$)).subscribe(),t},jt=i=>i.spine.spineItemsManager.items$.pipe(o.switchMap(e=>o.merge(...e.map(t=>t.loaded$.pipe(o.switchMap(()=>{const n=t.renderer.getDocumentFrame();if(!n||!n?.contentDocument)return o.NEVER;const r=Array.from(n.contentDocument.querySelectorAll("a")).map(c=>o.fromEvent(c,"click"));return o.merge(...r)}))))),o.tap(e=>{e.preventDefault()}),o.share());class E{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 ae=class ae extends E{constructor(e){super(),this.triggerSubject=new o.Subject,this.stateSubject=new o.BehaviorSubject("idle"),this.unload$=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share()),this.load$=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="load"&&r!=="loaded"&&r!=="loading"),o.map(()=>{}),o.share()),this.context=e.context,this.settings=e.settings,this.hookManager=e.hookManager,this.item=e.item,this.containerElement=e.containerElement,this.resourcesHandler=e.resourcesHandler;const t=this.triggerSubject.pipe(o.withLatestFrom(this.stateSubject),o.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),o.map(()=>{}),o.share());this.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(x(this.context.bridgeEvent.viewportFree$),o.switchMap(()=>{const a=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:r}).filter(l=>l instanceof o.Observable);return o.combineLatest([o.of(null),...a]).pipe(o.first())})))),o.tap(()=>{this.stateSubject.next("loaded")}),o.takeUntil(o.merge(this.destroy$,t)))))).subscribe();const n=t.pipe(o.switchMap(()=>(this.stateSubject.next("unloading"),this.context.bridgeEvent.viewportFree$.pipe(o.first(),o.tap(()=>{this.hookManager.destroy("item.onDocumentLoad",this.item.id)}),o.switchMap(()=>this.onUnload().pipe(o.endWith(null),o.first())),o.tap(()=>{this.stateSubject.next("idle")}),o.takeUntil(this.load$)))));o.merge(n).pipe(o.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){this._documentContainer=e,this._documentContainer.classList.add(ae.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this._documentContainer?.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(o.map(e=>e==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new o.Subject;return o.defer(()=>this.onRenderHeadless({release:e})).pipe(o.endWith(void 0),o.first(),o.map(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),o.finalize(()=>{e.complete()}),o.catchError(t=>(L.error(t),o.of(void 0))))}layout(e){return o.defer(()=>this.onLayout(e))}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this._documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){const e=this.item.renditionLayout;if(e)return e;const t=this.getDocumentFrame();if(t){const{hasViewport:n}=Z(t);if(n)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};ae.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let B=ae;const ei=i=>new URL(i.href);class J{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await o.lastValueFrom(this.settings.values.getResource?.(this.item)??o.of(void 0))??ei(this.item)}async fetchResource(){const e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}}const Ue=(i,e)=>{const t=i.startsWith("file://"),n=t?i.replace("file://","http://"):i,s=new URL(e,n).toString();return t?s.replace("http://","file://"):s},ti=async(i,e,t,n,s)=>{if(!i||!i.defaultView)return;const r=e.sheet;if(r)try{const c=Array.from(r.cssRules||[]);for(let a=0;a<c.length;a++){const l=c[a];if(i.defaultView&&l instanceof i.defaultView.CSSFontFaceRule){const u=l.style.getPropertyValue("src");if(u.match(/url\(['"]?([^'"]+)['"]?\)/g)){const p=u.split(",").map(h=>h.trim()),g=await Promise.all(p.map(async h=>{if(h.startsWith("local("))return h;const f=h.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return h;const b=f[1]??"",S=n.manifest?.items.find(({href:w})=>`${Ue(t,b).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(S){const w=new J(S,s);try{const v=await w.getResource();if(v instanceof Response){const T=await v.blob(),C=i.defaultView?.URL.createObjectURL(T);return h.replace(f[0],`url("${C}")`)}}catch(v){console.error("Error loading font:",v)}}return h})),m=l.cssText.replace(/src:\s*[^;]+;/,`src: ${g.join(", ")};`);r.deleteRule(a),r.insertRule(m,a)}}}}catch(c){console.error("Could not access stylesheet rules:",c)}},ii=(i,e,t,n,s)=>{const r=e.getAttribute("src")||e.getAttribute("href");if(!r)return o.of(null);const c=n.manifest?.items.find(({href:l})=>`${Ue(t,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!c)return o.of(null);const a=new J(c,s);return o.from(a.getResource()).pipe(o.mergeMap(l=>l instanceof Response?o.from(l.blob()):o.of(void 0)),o.mergeMap(l=>{if(!l)return o.of(null);const u=i?.defaultView?.URL.createObjectURL(l)??"";if(e.hasAttribute("src"))e.setAttribute("src",u);else if(e.hasAttribute("href")&&(e.setAttribute("href",u),i?.defaultView&&e instanceof i.defaultView.HTMLLinkElement))return new o.Observable(d=>{e.onload=async()=>{try{e.sheet&&await ti(i,e,t,n,s),d.next(),d.complete()}catch(p){d.error(p)}},e.onerror=d.error});return o.of(null)}))},ni=({settings:i,item:e,context:t})=>n=>n.pipe(o.switchMap(s=>{const r=De(s.contentDocument),c=P.getParentPath(e.href),a=r.map(l=>ii(s.contentDocument,l,c,t,i));return o.combineLatest(a).pipe(o.map(()=>s))})),oi=i=>{qt(i?.contentDocument)},si=[".xhtml",".html",".htm"],_="prose-reader",ri=async(i,e)=>{if(typeof i=="string")return i;const t=P.parseContentType(i.headers.get("Content-Type")||"")||P.detectMimeTypeFromName(e.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(s=>s===t)){const s=await i.blob(),r=URL.createObjectURL(s),c=await createImageBitmap(s),{width:a,height:l}={width:c.width,height:c.height};return c.close(),`
15
15
  <html>
16
16
  <head>
17
- ${t.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${a}, height=${u}">`:""}
17
+ ${e.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${a}, height=${l}">`:""}
18
18
  </head>
19
19
  <body style="margin: 0px;" tab-index="-1;">
20
20
  <img
@@ -23,7 +23,7 @@
23
23
  >
24
24
  </body>
25
25
  </html>
26
- `}return["text/plain"].some(s=>s===i)?`
26
+ `}return["text/plain"].some(s=>s===t)?`
27
27
  <!DOCTYPE html>
28
28
  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
29
29
  <head>
@@ -36,29 +36,29 @@
36
36
  </style>
37
37
  </head>
38
38
  <body>
39
- <pre>${await e.text()}</pre>
39
+ <pre>${await i.text()}</pre>
40
40
  </body>
41
41
  </html>
42
- `:await e.text()},ai=({item:e,resourcesHandler:t})=>{const i=n=>ri(n,e);return n=>n.pipe(o.switchMap(s=>o.from(t.getResource()).pipe(o.switchMap(r=>r instanceof URL&&e.href.startsWith(window.location.origin)&&(e.mediaType&&["application/xhtml+xml","application/xml","text/html","text/xml"].includes(e.mediaType)||!e.mediaType&&si.some(a=>e.href.endsWith(a)))?(s==null||s.setAttribute("src",e.href),o.of(s)):(r instanceof URL?o.from(t.fetchResource()):o.of(r)).pipe(o.switchMap(a=>{if(!(a instanceof Response))throw new Error("Invalid resource");return o.from(i(a))}),o.tap(a=>{if(a){const u=new Blob([a],{type:"text/html"}),l=URL.createObjectURL(u);s==null||s.setAttribute("src",l)}}),o.map(()=>s),o.catchError(a=>(C.error(`Error while trying to fetch or load resource for item ${e.id}`,r),C.error(a),o.of(s))))))))},ci=()=>{const e=document.createElement("iframe");return e.frameBorder="no",e.tabIndex=0,e.setAttribute("sandbox",`
42
+ `:await i.text()},ai=({item:i,resourcesHandler:e})=>{const t=n=>ri(n,i);return n=>n.pipe(o.switchMap(s=>o.from(e.getResource()).pipe(o.switchMap(r=>r instanceof URL&&i.href.startsWith(window.location.origin)&&(i.mediaType&&["application/xhtml+xml","application/xml","text/html","text/xml"].includes(i.mediaType)||!i.mediaType&&si.some(a=>i.href.endsWith(a)))?(s?.setAttribute("src",i.href),o.of(s)):(r instanceof URL?o.from(e.fetchResource()):o.of(r)).pipe(o.switchMap(a=>{if(!(a instanceof Response))throw new Error("Invalid resource");return o.from(t(a))}),o.tap(a=>{if(a){const l=new Blob([a],{type:"text/html"}),u=URL.createObjectURL(l);s?.setAttribute("src",u)}}),o.map(()=>s),o.catchError(a=>(L.error(`Error while trying to fetch or load resource for item ${i.id}`,r),L.error(a),o.of(s))))))))},ci=()=>{const i=document.createElement("iframe");return i.frameBorder="no",i.tabIndex=0,i.setAttribute("sandbox",`
43
43
  allow-same-origin
44
44
  allow-scripts
45
45
  allow-top-navigation-to-custom-protocols
46
- `),e.style.cssText=`
46
+ `),i.style.cssText=`
47
47
  overflow: hidden;
48
48
  background-color: transparent;
49
49
  border: 0px none transparent;
50
50
  padding: 0px;
51
- `,e.setAttribute("role","main"),e},Et=()=>`
51
+ `,i.setAttribute("role","main"),i},We=()=>`
52
52
  body {
53
53
  margin: 0;
54
54
  }
55
55
  }
56
- `,zt=({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}}},ui=({columnWidth:e,enableTouch:t,spreadPosition:i},n)=>`
57
- ${Et()}
56
+ `,ze=({pageHeight:i,pageWidth:e,frameElement:t})=>{const n=Z(t);if(t?.contentDocument&&t.contentWindow&&n){const s=e/(n.width??1);return{computedScale:Math.min(s,i/(n.height??1)),computedWidthScale:s,viewportDimensions:n}}},li=({columnWidth:i,enableTouch:e,spreadPosition:t},n)=>`
57
+ ${We()}
58
58
  body {
59
59
  ${n?"":`
60
60
  display: flex;
61
- justify-content: ${i==="left"?"flex-end":i==="right"?"flex-start":"center"};
61
+ justify-content: ${t==="left"?"flex-end":t==="right"?"flex-start":"center"};
62
62
  `}
63
63
  }
64
64
 
@@ -68,11 +68,11 @@
68
68
  }
69
69
 
70
70
  html, body {
71
- -max-width: ${e}px !important;
71
+ -max-width: ${i}px !important;
72
72
  }
73
73
 
74
74
  html, body {
75
- ${t?`
75
+ ${e?`
76
76
  touch-action: none
77
77
  `:""}
78
78
  }
@@ -94,8 +94,8 @@
94
94
  object-fit:contain;
95
95
  `}
96
96
  }
97
- `,li=({pageHeight:e,pageWidth:t})=>({columnHeight:e,columnWidth:t}),Ht=(e,t)=>{e.style.width=`${t.width}px`,e.style.height=`${t.height}px`},di=({minPageSpread:e,blankPagePosition:t,spreadPosition:i,pageHeight:n,pageWidth:s,frameElement:r,isRTL:c,enableTouch:a})=>{const u=e*s;if(r!=null&&r.contentDocument&&(r!=null&&r.contentWindow)){const{viewportDimensions:l,computedScale:d=1}=zt({frameElement:r,pageHeight:n,pageWidth:s})??{},g=s,p=n,m=ui({...li({pageHeight:n,pageWidth:s}),enableTouch:a,spreadPosition:i},l);if(N(r,"prose-reader-css",m),l?Ht(r,{width:l.width??1,height:l.height??1}):Ht(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"&&c?(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"?c?"25%":"75%":t==="after"?c?"75%":"25%":"50%"),r==null||r.style.removeProperty("right"));const h=i!=="none"?"0":"-50%",f=i==="right"&&t!=="before"?"left":i==="left"||t==="before"&&c?"right":"center";r==null||r.style.setProperty("transform",`translate(${h}, -50%) scale(${d})`),r==null||r.style.setProperty("transform-origin",`${f} center`)}else t==="before"?c?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}},gi=()=>`
98
- ${Et()}
97
+ `,ui=({pageHeight:i,pageWidth:e})=>({columnHeight:i,columnWidth:e}),He=(i,e)=>{i.style.width=`${e.width}px`,i.style.height=`${e.height}px`},di=({minPageSpread:i,blankPagePosition:e,spreadPosition:t,pageHeight:n,pageWidth:s,frameElement:r,isRTL:c,enableTouch:a})=>{const l=i*s;if(r?.contentDocument&&r?.contentWindow){const{viewportDimensions:u,computedScale:d=1}=ze({frameElement:r,pageHeight:n,pageWidth:s})??{},p=s,g=n,m=li({...ui({pageHeight:n,pageWidth:s}),enableTouch:a,spreadPosition:t},u);if(A(r,"prose-reader-css",m),u?He(r,{width:u.width??1,height:u.height??1}):He(r,{width:p,height:g}),u){r?.style.setProperty("position","absolute"),r?.style.setProperty("top","50%"),t==="left"?(r?.style.setProperty("right","0"),r?.style.removeProperty("left")):e==="before"&&c?(r?.style.setProperty("right","50%"),r?.style.removeProperty("left")):t==="right"?(r?.style.setProperty("left","0"),r?.style.removeProperty("right")):(r?.style.setProperty("left",e==="before"?c?"25%":"75%":e==="after"?c?"75%":"25%":"50%"),r?.style.removeProperty("right"));const h=t!=="none"?"0":"-50%",f=t==="right"&&e!=="before"?"left":t==="left"||e==="before"&&c?"right":"center";r?.style.setProperty("transform",`translate(${h}, -50%) scale(${d})`),r?.style.setProperty("transform-origin",`${f} center`)}else e==="before"?c?r?.style.setProperty("margin-right",`${s}px`):r?.style.setProperty("margin-left",`${s}px`):(r?.style.removeProperty("margin-left"),r?.style.removeProperty("margin-right"));return{width:l,height:g}}return{width:l,height:n}},pi=()=>`
98
+ ${We()}
99
99
  html {
100
100
  width: 100%;
101
101
  height: 100%;
@@ -109,17 +109,17 @@
109
109
  html, body {
110
110
  touch-action: none;
111
111
  }
112
- `,pi=({isScrollable:e,enableTouch:t})=>`
112
+ `,gi=({isScrollable:i,enableTouch:e})=>`
113
113
 
114
114
  html, body {
115
115
  width: 100%;
116
116
  margin: 0;
117
117
  padding: 0;
118
- ${t?`
118
+ ${e?`
119
119
  touch-action: none
120
120
  `:""}
121
121
  }
122
- ${e?`
122
+ ${i?`
123
123
  img {
124
124
  height: auto !important;
125
125
  margin: 0;
@@ -131,7 +131,7 @@
131
131
  display: block;
132
132
  }
133
133
  `:""}
134
- `,hi=({width:e,columnHeight:t,columnWidth:i})=>`
134
+ `,hi=({width:i,columnHeight:e,columnWidth:t})=>`
135
135
  parsererror {
136
136
  display: none !important;
137
137
  }
@@ -139,16 +139,16 @@
139
139
  html, body {
140
140
  margin: 0;
141
141
  padding: 0 !important;
142
- -max-width: ${i}px !important;
142
+ -max-width: ${t}px !important;
143
143
  }
144
144
 
145
145
  body {
146
146
  padding: 0 !important;
147
- width: ${e}px !important;
148
- height: ${t}px !important;
147
+ width: ${i}px !important;
148
+ height: ${e}px !important;
149
149
  overflow-y: hidden;
150
150
  column-gap: 0px !important;
151
- column-width: ${i}px !important;
151
+ column-width: ${t}px !important;
152
152
  column-fill: auto !important;
153
153
  word-wrap: break-word;
154
154
  box-sizing: border-box;
@@ -166,47 +166,47 @@
166
166
  }
167
167
 
168
168
  * {
169
- -max-width: ${i}px !important;
169
+ -max-width: ${t}px !important;
170
170
  }
171
171
 
172
172
  img, video, audio, object, svg {
173
173
  max-width: 100%;
174
- -max-width: ${i}px !important;
175
- -max-height: ${t}px !important;
174
+ -max-width: ${t}px !important;
175
+ -max-height: ${e}px !important;
176
176
  -pointer-events: none;
177
177
  -webkit-column-break-inside: avoid;
178
178
  page-break-inside: avoid;
179
179
  break-inside: avoid;
180
180
  }
181
181
  figure {
182
- d-max-width: ${i}px !important;
182
+ d-max-width: ${t}px !important;
183
183
  }
184
184
  img {
185
185
  object-fit: contain;
186
186
  break-inside: avoid;
187
187
  box-sizing: border-box;
188
- d-max-width: ${i}px !important;
188
+ d-max-width: ${t}px !important;
189
189
  }
190
190
 
191
191
  table {
192
- max-width: ${i}px !important;
192
+ max-width: ${t}px !important;
193
193
  table-layout: fixed;
194
194
  }
195
195
  td {
196
- max-width: ${i}px;
196
+ max-width: ${t}px;
197
197
  }
198
- `,mi=({isUsingVerticalWriting:e,minimumWidth:t,pageHeight:i,pageWidth:n})=>{let c=n-0;const a=i-0*2;let u=n-0*2;return e&&(u=t-0*2,c=a),{columnHeight:a,columnWidth:c,width:u}},Q=(e,t)=>{e.style.width=`${t.width}px`,e.style.height=`${t.height}px`},fi=({pageHeight:e,pageWidth:t,frameElement:i,manifest:n,latestContentHeightWhenLoaded:s,minPageSpread:r,isRTL:c,blankPagePosition:a,isImageType:u,enableTouch:l,isUsingVerticalWriting:d})=>{const g=r*t;let p=s;const m=(n==null?void 0:n.renditionLayout)==="reflowable"&&(n==null?void 0:n.renditionFlow)==="scrolled-continuous",h=m?Math.min(400,e):e;i==null||i.style.setProperty("width",`${t}px`),m||i==null||i.style.setProperty("height",`${h}px`);const{viewportDimensions:f,computedScale:b=1}=zt({frameElement:i,pageHeight:h,pageWidth:t})??{},S=(n==null?void 0:n.renditionLayout)==="pre-paginated";if(i!=null&&i.contentDocument&&(i!=null&&i.contentWindow)){let P=t,v=h;if(f!=null&&f.hasViewport)N(i,"prose-reader-html-renderer-framce-css",gi()),Q(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",a==="before"?c?"25%":"75%":a==="after"?c?"75%":"25%":"50%"),i==null||i.style.setProperty("transform",`translate(-50%, -50%) scale(${b})`),i==null||i.style.setProperty("transform-origin","center center");else{const F=u?pi({isScrollable:(n==null?void 0:n.renditionFlow)==="scrolled-continuous",enableTouch:l}):hi(mi({isUsingVerticalWriting:d,minimumWidth:g,pageHeight:h,pageWidth:t}));if(N(i,"prose-reader-css",F,!0),d)v=Math.ceil(i.contentDocument.documentElement.scrollHeight/h)*h,Q(i,{width:g,height:v});else if((n==null?void 0:n.renditionFlow)==="scrolled-continuous")v=i.contentDocument.body.scrollHeight,p=v,Q(i,{width:g,height:v});else{const R=Math.ceil(i.contentDocument.documentElement.scrollWidth/t);S?P=t:P=R*t,Q(i,{width:P,height:v})}}return P%g===0?i==null||i.style.setProperty("margin-left","0px"):(P=P+t,c&&!d&&(i==null||i.style.setProperty("margin-left",`${t}px`))),{width:P,height:v}}return{width:g,height:p||h,latestContentHeightWhenLoaded:p}};class Si extends B{constructor(){super(...arguments),this.isImageType=()=>{const t=this.item.mediaType??$.detectMimeTypeFromName(this.item.href);return!!(t!=null&&t.startsWith("image/"))}}onCreateDocument(){const t=ci();return this.setDocumentContainer(t),o.of(t)}onLoadDocument(){const t=this.getFrameElement();if(!t)throw new Error("invalid frame");return o.of(t).pipe(ai({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),x(this.context.bridgeEvent.viewportFree$),o.tap(()=>{this.attach()}),Rt,ni({context:this.context,item:this.item,settings:this.settings}),At)}onUnload(){return oi(this.getFrameElement()),this.detach(),o.EMPTY}onLayout({minPageSpread:t,blankPagePosition:i,spreadPosition:n}){var d,g;const{width:s,height:r}=this.context.getPageSize(),c=this.getFrameElement();if(!c)return o.of(void 0);const a=!!((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=di({blankPagePosition:i,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:c,isRTL:this.context.isRTL(),minPageSpread:t,pageHeight:r,pageWidth:s,spreadPosition:n});return o.of(p)}const{latestContentHeightWhenLoaded:u,...l}=fi({pageHeight:r,pageWidth:s,frameElement:c,manifest:this.context.manifest,blankPagePosition:i,isUsingVerticalWriting:a,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 Bt=e=>t=>{const i=e({...t,getRenderer(s){var c;return((c=t.getRenderer)==null?void 0:c.call(t,s))??(a=>new Si(a))}}),n=je(i);return n.pipe(o.takeUntil(i.$.destroy$)).subscribe(),{...i,links$:n}};function k(e){return e!=null}let yi=class extends kt{computeOutputSettings(t){return t}hasSettingsChanged(t){return!$.isShallowEqual(this.outputSettings,t)}getCleanedParentInputSettings(t){const{layoutAutoResize:i,pageHorizontalMargin:n,pageVerticalMargin:s,layoutLayerTransition:r,viewportMode:c,...a}=t;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0,viewportMode:"normal"}}};class j{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 L{constructor(t){this.__symbol=Symbol("SpineItemPosition"),this.x=t.x,this.y=t.y}}class tt{constructor(t){this.__symbol=Symbol("SpineItemPagePosition"),this.x=t.x,this.y=t.y}}class _t extends j{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class et extends j{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class qt extends j{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class yt{constructor(t){this.x=t.x,this.y=t.y}}class T extends yt{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(t){return new T(t)}}class q extends yt{constructor(){super(...arguments),this.__symbol="UnsafeSpinePosition"}static from(t){return new q(t)}}const bi=(e,t)=>{const i=t.getBoundingClientRect(),{x:n,y:s}=e,{left:r,top:c}=i,a=i.width/t.offsetWidth,u=i.height/t.offsetHeight,l=n-r,d=s-c;return{x:l/a,y:d/u}},wi=(e,t)=>new q(bi(e,t)),Ii=e=>({getSpinePositionFromClientPosition:t=>e.spine.element?wi(t,e.spine.element):void 0}),Pi=e=>{let t;const i=e.context.state$.pipe(y.switchMap(({rootElement:u})=>u?new o.Observable(()=>(t=u.ownerDocument.createElement("div"),t.style.cssText=`
198
+ `,mi=({isUsingVerticalWriting:i,minimumWidth:e,pageHeight:t,pageWidth:n})=>{let c=n-0;const a=t-0*2;let l=n-0*2;return i&&(l=e-0*2,c=a),{columnHeight:a,columnWidth:c,width:l}},Q=(i,e)=>{i.style.width=`${e.width}px`,i.style.height=`${e.height}px`},fi=({pageHeight:i,pageWidth:e,frameElement:t,manifest:n,latestContentHeightWhenLoaded:s,minPageSpread:r,isRTL:c,blankPagePosition:a,isImageType:l,enableTouch:u,isUsingVerticalWriting:d})=>{const p=r*e;let g=s;const m=n?.renditionLayout==="reflowable"&&n?.renditionFlow==="scrolled-continuous",h=m?Math.min(400,i):i;t?.style.setProperty("width",`${e}px`),m||t?.style.setProperty("height",`${h}px`);const{viewportDimensions:f,computedScale:b=1}=ze({frameElement:t,pageHeight:h,pageWidth:e})??{},S=n?.renditionLayout==="pre-paginated";if(t?.contentDocument&&t?.contentWindow){let v=e,T=h;if(f?.hasViewport)A(t,"prose-reader-html-renderer-framce-css",pi()),Q(t,{width:f.width??1,height:f.height??1}),t?.style.setProperty("position","absolute"),t?.style.setProperty("top","50%"),t?.style.setProperty("left",a==="before"?c?"25%":"75%":a==="after"?c?"75%":"25%":"50%"),t?.style.setProperty("transform",`translate(-50%, -50%) scale(${b})`),t?.style.setProperty("transform-origin","center center");else{const F=l?gi({isScrollable:n?.renditionFlow==="scrolled-continuous",enableTouch:u}):hi(mi({isUsingVerticalWriting:d,minimumWidth:p,pageHeight:h,pageWidth:e}));if(A(t,"prose-reader-css",F,!0),d)T=Math.ceil(t.contentDocument.documentElement.scrollHeight/h)*h,Q(t,{width:p,height:T});else if(n?.renditionFlow==="scrolled-continuous")T=t.contentDocument.body.scrollHeight,g=T,Q(t,{width:p,height:T});else{const R=Math.ceil(t.contentDocument.documentElement.scrollWidth/e);S?v=e:v=R*e,Q(t,{width:v,height:T})}}return v%p===0?t?.style.setProperty("margin-left","0px"):(v=v+e,c&&!d&&t?.style.setProperty("margin-left",`${e}px`)),{width:v,height:T}}return{width:p,height:g||h,latestContentHeightWhenLoaded:g}};class Si extends B{constructor(){super(...arguments),this.isImageType=()=>!!(this.item.mediaType??P.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=ci();return this.setDocumentContainer(e),o.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return o.of(e).pipe(ai({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),x(this.context.bridgeEvent.viewportFree$),o.tap(()=>{this.attach()}),Ee,ni({context:this.context,item:this.item,settings:this.settings}),Re)}onUnload(){return oi(this.getFrameElement()),this.detach(),o.EMPTY}onLayout({minPageSpread:e,blankPagePosition:t,spreadPosition:n}){const{width:s,height:r}=this.context.getPageSize(),c=this.getFrameElement();if(!c)return o.of(void 0);const a=!!this.writingMode?.startsWith("vertical");if(this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&this.context.manifest?.renditionLayout==="pre-paginated"){const d=di({blankPagePosition:t,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:c,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:r,pageWidth:s,spreadPosition:n});return o.of(d)}const{latestContentHeightWhenLoaded:l,...u}=fi({pageHeight:r,pageWidth:s,frameElement:c,manifest:this.context.manifest,blankPagePosition:t,isUsingVerticalWriting:a,isRTL:this.context.isRTL(),latestContentHeightWhenLoaded:this.latestContentHeightWhenLoaded,minPageSpread:e,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode!=="scrollable"});return this.latestContentHeightWhenLoaded=l,o.of(u)}onRenderHeadless(){return o.from(this.resourcesHandler.fetchResource()).pipe(o.switchMap(e=>{if(e instanceof Response){const t=e.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(t))return o.from(e.text()).pipe(o.map(s=>new DOMParser().parseFromString(s,t)))}return o.of(void 0)}))}getFrameElement(){const e=this.documentContainer;if(e instanceof HTMLIFrameElement)return e}getComputedStyleAfterLoad(){const e=this.getFrameElement(),t=e?.contentDocument?.body;if(t)return e?.contentWindow?.getComputedStyle(t)}get writingMode(){return this.getComputedStyleAfterLoad()?.writingMode}get readingDirection(){if(this.writingMode==="vertical-rl")return"rtl";switch(this.getComputedStyleAfterLoad()?.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const Be=i=>e=>{const t=i({...e,getRenderer(s){return e.getRenderer?.(s)??(c=>new Si(c))}}),n=jt(t);return n.pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,links$:n}};function k(i){return i!=null}let yi=class extends Ve{computeOutputSettings(e){return e}hasSettingsChanged(e){return!P.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:t,pageHorizontalMargin:n,pageVerticalMargin:s,layoutLayerTransition:r,viewportMode:c,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0,viewportMode:"normal"}}};class j{constructor(e){this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.width=e.width,this.height=e.height,this.x=e.x,this.y=e.y}}class M{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class ee{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class _e extends j{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class te extends j{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class qe extends j{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class ye{constructor(e){this.x=e.x,this.y=e.y}}class $ extends ye{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new $(e)}}class q extends ye{constructor(){super(...arguments),this.__symbol="UnsafeSpinePosition"}static from(e){return new q(e)}}const bi=(i,e)=>{const t=e.getBoundingClientRect(),{x:n,y:s}=i,{left:r,top:c}=t,a=t.width/e.offsetWidth,l=t.height/e.offsetHeight,u=n-r,d=s-c;return{x:u/a,y:d/l}},Ii=(i,e)=>new q(bi(i,e)),wi=i=>({getSpinePositionFromClientPosition:e=>i.spine.element?Ii(e,i.spine.element):void 0}),vi=i=>{let e;const t=i.context.state$.pipe(y.switchMap(({rootElement:l})=>l?new o.Observable(()=>(e=l.ownerDocument.createElement("div"),e.style.cssText=`
199
199
  position: absolute;
200
200
  left: 0;
201
201
  top: 0;
202
202
  width: 100%;
203
203
  height: 100%;
204
204
  visibility: hidden;
205
- `,u.appendChild(t),()=>{t==null||t.remove(),t=void 0})):o.NEVER)),n=u=>o.scheduled(u,o.animationFrameScheduler).pipe(y.tap(()=>{t==null||t.style.setProperty("visibility","hidden")})),s=e.context.bridgeEvent.viewportBusy$.pipe(y.tap(()=>{t==null||t.style.setProperty("visibility","visible")})),r=n(e.viewportFree$).pipe(y.take(1)),a=e.settings.values$.pipe(y.map(()=>e.settings.values.computedPageTurnMode),y.distinctUntilChanged()).pipe(y.switchMap(u=>u==="controlled"?s.pipe(y.switchMap(()=>r)):n(o.of(void 0))),y.takeUntil(e.$.destroy$));return o.merge(i,a)},vi=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:c}=Z(r),{width:a}=e.context.getPageSize(),u=s==null?void 0:s.renderer.getDocumentFrame();if(c){const l=a<n;i==="none"&&l&&u instanceof HTMLIFrameElement&&(u==null||u.style.setProperty("left",e.context.isRTL()?"75%":"25%"))}})},Yt=200,$i=(e,t,i)=>{const n=e.clientWidth,s=e.clientHeight,r=e.scrollLeft,c=e.scrollTop,a=r+n/2,u=c+s/2,l=i/t,d=a*l,g=u*l,p=d-n/2,m=g-s/2;return{newScrollLeft:p,newScrollTop:m}},Ti=(e,t)=>t.pipe(o.switchMap(i=>{var g;const n=e.navigation.scrollNavigationController.value.element,s=e.viewport.value.element,r=e.settings.values.computedPageTurnMode==="scrollable";s.style.transition=`transform ${Yt}ms`,r?s.style.transformOrigin="top":s.style.transformOrigin="center";const c=s.style.transform,a=c.includes("scale")?parseFloat(((g=c.match(/scale\(([^)]+)\)/))==null?void 0:g[1])||"1"):1,u=i==="thumbnails"?.5:1,{newScrollLeft:l,newScrollTop:d}=$i(n??_e(),a,u);return e.viewport.value.element.style.transform=`scale(${u})`,n==null||n.scrollTo({left:Math.max(0,l),top:Math.max(0,d),behavior:"instant"}),o.timer(r?0:Yt).pipe(o.tap(()=>{e.layout()}))})),xt=e=>t=>{const{pageHorizontalMargin:i,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c}=t,a=e(t),u=new yi({pageHorizontalMargin:i,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let f=!1;a.spineItemsManager.items.forEach(b=>{const S=b.renderer.getDocumentFrame();!f&&S&&(S.getBoundingClientRect().left,f=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const b=a.spineItemsManager.get(f.id),S=f.mediaType??$.detectMimeTypeFromName(f.href),I=!!(S!=null&&S.startsWith("image/")),{pageHorizontalMargin:P=0,pageVerticalMargin:v=0}=u.values,M=a.context.getPageSize();if((b==null?void 0:b.renditionLayout)==="reflowable"&&!I){let F=M.width-P*2;const R=M.height-v*2;let D=M.width-P*2,O=P*2;b.isUsingVerticalWriting()&&(D=M.width-P*2,F=R,O=v*2);const z=b==null?void 0:b.renderer.getDocumentFrame();z&&N(z,"prose-layout-enhancer-css",`
205
+ `,l.appendChild(e),()=>{e?.remove(),e=void 0})):o.NEVER)),n=l=>o.scheduled(l,o.animationFrameScheduler).pipe(y.tap(()=>{e?.style.setProperty("visibility","hidden")})),s=i.context.bridgeEvent.viewportBusy$.pipe(y.tap(()=>{e?.style.setProperty("visibility","visible")})),r=n(i.viewportFree$).pipe(y.take(1)),a=i.settings.values$.pipe(y.map(()=>i.settings.values.computedPageTurnMode),y.distinctUntilChanged()).pipe(y.switchMap(l=>l==="controlled"?s.pipe(y.switchMap(()=>r)):n(o.of(void 0))),y.takeUntil(i.$.destroy$));return o.merge(t,a)},Pi=i=>{i.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:t,minimumWidth:n})=>{const s=i.spineItemsManager.get(e.id),r=s?.renderer.getDocumentFrame();if(s?.renditionLayout!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:c}=Z(r),{width:a}=i.context.getPageSize(),l=s?.renderer.getDocumentFrame();if(c){const u=a<n;t==="none"&&u&&l instanceof HTMLIFrameElement&&l?.style.setProperty("left",i.context.isRTL()?"75%":"25%")}})},Ye=200,$i=(i,e,t)=>{const n=i.clientWidth,s=i.clientHeight,r=i.scrollLeft,c=i.scrollTop,a=r+n/2,l=c+s/2,u=t/e,d=a*u,p=l*u,g=d-n/2,m=p-s/2;return{newScrollLeft:g,newScrollTop:m}},Ti=(i,e)=>e.pipe(o.switchMap(t=>{const n=i.navigation.scrollNavigationController.value.element,s=i.viewport.value.element,r=i.settings.values.computedPageTurnMode==="scrollable";s.style.transition=`transform ${Ye}ms`,r?s.style.transformOrigin="top":s.style.transformOrigin="center";const c=s.style.transform,a=c.includes("scale")?parseFloat(c.match(/scale\(([^)]+)\)/)?.[1]||"1"):1,l=t==="thumbnails"?.5:1,{newScrollLeft:u,newScrollTop:d}=$i(n??_t(),a,l);return i.viewport.value.element.style.transform=`scale(${l})`,n?.scrollTo({left:Math.max(0,u),top:Math.max(0,d),behavior:"instant"}),o.timer(r?0:Ye).pipe(o.tap(()=>{i.layout()}))})),xe=i=>e=>{const{pageHorizontalMargin:t,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c}=e,a=i(e),l=new yi({pageHorizontalMargin:t,pageVerticalMargin:n,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let f=!1;a.spineItemsManager.items.forEach(b=>{const S=b.renderer.getDocumentFrame();!f&&S&&(S.getBoundingClientRect().left,f=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const b=a.spineItemsManager.get(f.id),w=!!(f.mediaType??P.detectMimeTypeFromName(f.href))?.startsWith("image/"),{pageHorizontalMargin:v=0,pageVerticalMargin:T=0}=l.values,C=a.context.getPageSize();if(b?.renditionLayout==="reflowable"&&!w){let F=C.width-v*2;const R=C.height-T*2;let D=C.width-v*2,U=v*2;b.isUsingVerticalWriting()&&(D=C.width-v*2,F=R,U=T*2);const z=b?.renderer.getDocumentFrame();z&&A(z,"prose-layout-enhancer-css",`
206
206
  body {
207
207
  width: ${D}px !important;
208
- margin: ${v}px ${P}px !important;
209
- column-gap: ${O}px !important;
208
+ margin: ${T}px ${v}px !important;
209
+ column-gap: ${U}px !important;
210
210
  column-width: ${F}px !important;
211
211
  height: ${R}px !important;
212
212
  }
@@ -220,10 +220,10 @@
220
220
  td {
221
221
  max-width: ${F}px;
222
222
  }
223
- `)}}),vi(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:f})=>{f.style.opacity="0",u.values.layoutLayerTransition&&(f.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const b=a.spineItemsManager.get(f.id),S=b==null?void 0:b.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&(S==null||S.setAttribute("tab-index","0"))});const l=a.spineItemsObserver.itemIsReady$.pipe(y.filter(({isReady:f})=>f),y.tap(({item:f})=>{const b=f.renderer.documentContainer;b&&(b.style.opacity="1")})),d=u.values$.pipe(y.filter(({layoutAutoResize:f})=>f==="container"),y.switchMap(()=>a.context.watch("rootElement")),y.filter(k),y.switchMap(f=>K(f)),y.debounceTime(100),y.filter(k),y.tap(()=>{a==null||a.layout()})),g=Pi(a);u.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(y.skip(1),y.tap(()=>{a.layout()}),y.takeUntil(a.$.destroy$)).subscribe();const p=a.spineItemsObserver.itemIsReady$.pipe(y.tap(({item:f,isReady:b})=>{const S="prose-spineItem-ready";b?f.containerElement.classList.add(S):f.containerElement.classList.remove(S)})),m=Ti(a,u.watch("viewportMode")),h=a.spine.pages.pipe(y.shareReplay({refCount:!0,bufferSize:1}));return o.merge(p,l,g,d,m,h).pipe(y.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{u.destroy(),a.destroy()},settings:u,layout$:a.spine.layout$,layoutInfo$:h,coordinates:Ii(a)}},Xt=`${`${_}-enhancer-loading`}-container`,Mi=(e,t)=>{const i=e.ownerDocument.createElement("div");return i.classList.add(Xt),i.style.cssText=`
223
+ `)}}),Pi(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:f})=>{f.style.opacity="0",l.values.layoutLayerTransition&&(f.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const S=a.spineItemsManager.get(f.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&S?.setAttribute("tab-index","0")});const u=a.spineItemsObserver.itemIsReady$.pipe(y.filter(({isReady:f})=>f),y.tap(({item:f})=>{const b=f.renderer.documentContainer;b&&(b.style.opacity="1")})),d=l.values$.pipe(y.filter(({layoutAutoResize:f})=>f==="container"),y.switchMap(()=>a.context.watch("rootElement")),y.filter(k),y.switchMap(f=>K(f)),y.debounceTime(100),y.filter(k),y.tap(()=>{a?.layout()})),p=vi(a);l.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(y.skip(1),y.tap(()=>{a.layout()}),y.takeUntil(a.$.destroy$)).subscribe();const g=a.spineItemsObserver.itemIsReady$.pipe(y.tap(({item:f,isReady:b})=>{const S="prose-spineItem-ready";b?f.containerElement.classList.add(S):f.containerElement.classList.remove(S)})),m=Ti(a,l.watch("viewportMode")),h=a.spine.pages.pipe(y.shareReplay({refCount:!0,bufferSize:1}));return o.merge(g,u,p,d,m,h).pipe(y.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{l.destroy(),a.destroy()},settings:l,layout$:a.spine.layout$,layoutInfo$:h,coordinates:wi(a)}},Xe=`${`${_}-enhancer-loading`}-container`,Mi=(i,e)=>{const t=i.ownerDocument.createElement("div");return t.classList.add(Xe),t.style.cssText=`
224
224
  height: 100%;
225
225
  width: 100%;
226
- max-width: ${t.state.visibleAreaRect.width}px;
226
+ max-width: ${e.state.visibleAreaRect.width}px;
227
227
  text-align: center;
228
228
  display: flex;
229
229
  justify-content: center;
@@ -235,26 +235,26 @@
235
235
  color: rgb(202, 202, 202);
236
236
  background-color: white;
237
237
  z-index: 1;
238
- `,i},Fi=({container:e,item:t})=>{const i=e.ownerDocument.createElement("div");i.innerText="prose",i.style.cssText=`
238
+ `,t},Fi=({container:i,item:e})=>{const t=i.ownerDocument.createElement("div");t.innerText="prose",t.style.cssText=`
239
239
  font-size: 4em;
240
- `;const n=e.ownerDocument.createElement("div");return n.innerText=`loading ${t.id}`,n.style.cssText=`
240
+ `;const n=i.ownerDocument.createElement("div");return n.innerText=`loading ${e.id}`,n.style.cssText=`
241
241
  font-size: 1.2em;
242
242
  text-overflow: ellipsis;
243
243
  white-space: nowrap;
244
244
  overflow: hidden;
245
245
  max-width: 300px;
246
246
  width: 80%;
247
- `,e.appendChild(i),e.appendChild(n),e},Li=e=>t=>{const{loadingElementCreate:i=Fi}=t,n=e(t),s=u=>o.of(u.reduce((l,{item:d,element:g})=>{g.style.zIndex="0";const p=g.querySelector(`.${Xt}`);if(p instanceof HTMLElement)return l[d.id]=p,l;const m=i({container:Mi(g,n.context),item:d});return g.appendChild(m),l[d.id]=m,l},{})),r=u=>o.combineLatest([n.spine.layout$,n.theme.$.theme$]).pipe(y.map(([,l])=>({width:n.context.state.visibleAreaRect.width,theme:l})),y.distinctUntilChanged($.isShallowEqual),y.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)")})})),c=u=>n.spineItemsObserver.itemIsReady$.pipe(y.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")})),a=n.spineItemsManager.items$.pipe(y.switchMap(u=>s(u)),y.shareReplay(1),y.takeUntil(n.context.destroy$));return a.pipe(y.switchMap(u=>o.merge(r(u),c(u))),y.takeUntil(n.$.destroy$)).subscribe(),{...n,loading:{$:{items$:a}}}};class Ci extends B{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 c=s;if(!i)return o.of(void 0);const a=i.naturalWidth||1,u=i.naturalHeight||1,l=a/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=`${c}px`,i.style.objectPosition=t==="left"?"right":t==="right"?"left":"center",o.of({width:c,height:r})}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}const Ri=e=>t=>{const i=e({...t,getRenderer(c){var d;const a=(d=t.getRenderer)==null?void 0:d.call(t,c),u=c.mediaType??$.detectMimeTypeFromName(c.href),l=!!(u!=null&&u.startsWith("image/"));return!a&&l?g=>new Ci(g):a}}),n=new IntersectionObserver(c=>{c.forEach(a=>{var d;const u=a.target,l=Array.from(((d=u.contentDocument)==null?void 0:d.body.getElementsByTagName("audio"))||[]);a.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(c=>{c.forEach(a=>{if(a.target.tagName==="video"){const u=a.target;a.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:c,itemId:a})=>{var g,p;const u=(g=i.spineItemsManager.get(a))==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(m=>(s.observe(m),()=>s.unobserve(m)));c(()=>{n.unobserve(u),d.forEach(m=>m())})}),{...i,destroy:()=>{n.disconnect(),s.disconnect(),i.destroy()}}},Ai=(e,t)=>e.links$.pipe(o.tap(i=>{var c;if(!Vt(i.target,"a")||i.type!=="click")return;const n=new URL(i.target.href),s=`${n.origin}${n.pathname}`;((c=e.context.manifest)==null?void 0:c.spineItems.some(a=>a.href===s))&&t.goToUrl(n)})),W=C.namespace("navigation"),Di=({position:e,spineItem:t,pageHeight:i,pageWidth:n,spineItemLocator:s})=>{let r=new L({x:e.x-n,y:e.y});return t.isUsingVerticalWriting()&&(r=new L({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 c=i,a=s.getSpineItemFromPosition(e)||n.get(0),u=e;if(!a)return u;const l=s.getSpineItemPositionFromSpinePosition(e,a),d=Di({position:l,spineItem:a,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return t.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:a}):t.getAdjustedPositionWithSafeEdge(c==="horizontal"?new T({x:e.x-r.getPageSize().width,y:0}):new T({y:e.y-r.getPageSize().height,x:0}))},Ni=({position:e,spineItem:t,context:i,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Zt({position:e,context:i,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(t!=null&&t.isUsingVerticalWriting()&&e.x===a.x)return n.getAdjustedPositionForSpread(a);if(i.state.isUsingSpreadMode){if(t!=null&&t.isUsingVerticalWriting()&&e.x!==a.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(i.isRTL()?{...a,x:a.x+i.getPageSize().width}:{...a,x:a.x-i.getPageSize().width}));if(c==="vertical"&&e.y!==a.y)return n.getAdjustedPositionForSpread(a);const u=Zt({position:a,context:i,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(u)}return n.getAdjustedPositionForSpread(a)},Oi=({position:e,spineItem:t,pageHeight:i,pageWidth:n,spineItemLocator:s})=>{let r=new L({x:e.x+n,y:e.y});return t.isUsingVerticalWriting()&&(r=new L({x:e.x,y:e.y-i})),s.getSpineItemClosestPositionFromUnsafePosition(r,t)},Gt=({position:e,navigationResolver:t,computedPageTurnDirection:i,spineItemsManager:n,spineLocator:s,context:r})=>{const c=i,a=s.getSpineItemFromPosition(e)||n.get(0),u=e;if(!a)return u;const l=s.getSpineItemPositionFromSpinePosition(e,a),d=Oi({position:l,spineItem:a,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return t.arePositionsDifferent(d,l)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:a}):t.getAdjustedPositionWithSafeEdge(c==="horizontal"?new T({x:e.x+r.getPageSize().width,y:0}):new T({y:e.y+r.getPageSize().height,x:0}))},Vi=({position:e,spineItem:t,context:i,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Gt({position:e,context:i,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(t!=null&&t.isUsingVerticalWriting()&&e.x===a.x)return n.getAdjustedPositionForSpread(a);if(i.state.isUsingSpreadMode){if(t!=null&&t.isUsingVerticalWriting()&&e.x!==a.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(i.isRTL()?{...a,x:a.x-i.getPageSize().width}:{...a,x:a.x+i.getPageSize().width}));if(c==="vertical"&&e.y!==a.y)return n.getAdjustedPositionForSpread(a);const u=Gt({position:a,context:i,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(u)}return n.getAdjustedPositionForSpread(a)};class Ui{constructor(t){this.reader=t,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new T({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=Vi({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=Ni({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){W.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:{type:"percentage",value:.5}})||{};this.goToSpineItem({indexOrId:t+1})}goToPreviousSpineItem(){const{beginIndex:t=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})??{};this.goToSpineItem({indexOrId:t-1})}goToUrl(t){this.reader.navigation.navigate({url:t,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){W.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToPreviousSpineItem():this.goToNextSpineItem()}goToRightOrBottomSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToBottomSpineItem():this.goToRightSpineItem()}goToLeftOrTopSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToTopSpineItem():this.goToLeftSpineItem()}goToLeftSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){W.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToNextSpineItem():this.goToPreviousSpineItem()}goToTopSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){W.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){W.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:t,spineItemId:i,...n}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:t,spineItemId:i});W.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.pages.fromAbsolutePageIndex(t);if(W.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 ki{constructor(t){this.reader=t,this.lastDelta={x:0,y:0},this.lastPosition=new T({x:0,y:0}),this.lastStartPosition=new T({x:0,y:0}),this.unlock=void 0}moveTo(t,{final:i,start:n}={}){var c,a,u,l;if(this.reader.settings.values.computedPageTurnMode==="scrollable"){W.warn("pan control is not available on free page turn mode");return}const s=this.reader.settings.values.computedPageTurnDirection;n&&((c=this.unlock)==null||c.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)-(((a=this.lastDelta)==null?void 0:a.x)||0),p=Math.floor(t.y)-(((u=this.lastDelta)==null?void 0:u.y)||0),m=Math.floor(s==="horizontal"?this.lastPosition.x-g/d:0),h=Math.floor(s==="horizontal"?0:this.lastPosition.y-p/d);r=new T({x:m,y:h}),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 Wi=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,c=t.beginSpineItemIndex===0,a=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"&&!c,canGoBottomSpineItem:s==="vertical"&&!a,canGoLeftSpineItem:s!=="vertical"&&(n==="ltr"&&!c||n==="rtl"&&!u),canGoRightSpineItem:s!=="vertical"&&(n==="ltr"&&!a||n==="rtl"&&!l)}}),o.distinctUntilChanged($.isShallowEqual)),Ei=({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))},zi=e=>t=>{const i=e(t),n=Wi(i),s=new Ui(i),r=new ki(i),c=u=>{const{cfi:l,...d}=u;i.load(d),l&&s.goToCfi(l,{animate:!1})};return Ai(i,s).pipe(o.takeUntil(i.$.destroy$)).subscribe(),{...i,load:c,navigation:{...i.navigation,state$:n,throttleLock:({duration:u,trigger:l})=>l.pipe(Ei({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)}}},E=e=>U.generate({spineIndex:e.index,spineId:e.id}),Kt=({nodeOrRange:e,offset:t,item:i})=>{const n="ownerDocument"in e?e.ownerDocument:e.startContainer.ownerDocument;return!n||!(n!=null&&n.documentElement)||e===n?E(i):Ye(e)?U.generate({start:{node:e.startContainer,offset:e.startOffset,spineIndex:i.index,spineId:i.id},end:{node:e.endContainer,offset:e.endOffset,spineIndex:i.index,spineId:i.id}}):U.generate({node:e,offset:t,spineIndex:i.index,spineId:i.id})},it=({pageIndex:e,spineItem:t,spine:i})=>{var c;const n=i.pages.value.pages.find(a=>a.itemIndex===t.index&&a.pageIndex===e),s=n==null?void 0:n.firstVisibleNode,r=t.renderer.getDocumentFrame();return s&&r instanceof HTMLIFrameElement&&((c=r.contentWindow)!=null&&c.document)?Kt({nodeOrRange:s.node,offset:s.offset,item:t.item}).trim():E(t.item)},Jt=(e,t)=>Kt({nodeOrRange:e,item:t}),Hi=e=>e.index.toString(),Qt=e=>{var t;return((t=e[0])==null?void 0:t.index)===6&&e.length>1},nt=e=>{const t=U.parse(e);return U.isIndirectionOnly(t)},Bi=e=>Array.isArray(e)?e[0]&&Qt(e[0])?e[0]:void 0:e.parent[0]&&Qt(e.parent[0])?e.parent[0]:void 0,ot=e=>{var u,l,d,g;const t=U.parse(e),n=(Bi(t)??[])[1],r=((n==null?void 0:n.index)??2)/2-1,c=U.isParsedCfiRange(t),a=c?(l=(u=t.end.at(-1))==null?void 0:u.at(-1))==null?void 0:l.offset:(g=(d=t.at(-1))==null?void 0:d.at(-1))==null?void 0:g.offset;return{isCfiRange:c,cleanedCfi:e,itemIndex:r,offset:a??0}},bt=({cfi:e,spineItemsManager:t})=>{var c,a;const{itemIndex:i,...n}=ot(e),s=t.get(i);if(!s)return{...n,itemIndex:i,node:null};const r=s.renderer.getDocumentFrame();if(r instanceof HTMLIFrameElement){const u=(c=r.contentWindow)==null?void 0:c.document;if(u)try{const l=U.resolve(e,u,{throwOnError:!0});return{...n,itemIndex:i,node:l.isRange?((a=l.node)==null?void 0:a.startContainer)??null:l.node??null,isCfiRange:l.isRange,range:l.isRange?l.node:void 0,offset:Array.isArray(l.offset)?l.offset.at(-1):l.offset,spineItem:s}}catch(l){return C.warn(`Error resolving cfi: ${e}.`),C.warn(l),{...n,spineItem:s,itemIndex:i,node:null}}}return{...n,itemIndex:i,spineItem:s,node:null}},_i=(e,t)=>{if("cfi"in t){const{itemIndex:r,...c}=e.cfi.parseCfi(t.cfi);return{...t,...c,itemIndex:r,node:null}}const i=e.spineItemsManager.get(t);if(!i)throw new Error("Spine item not found");const n=E(i.item);return{...e.cfi.parseCfi(n),cfi:E(i.item),itemIndex:i.index,node:null}},jt=(e,t)=>{let i=e==null?void 0:e.itemPageIndex;const{itemIndex:n,...s}=t.cfi.parseCfi(e.cfi),r=t.spineItemsManager.get(n);return r?mt().pipe(o.withLatestFrom(r.isReady$),o.map(([,c])=>{const{node:a=null,offset:u,range:l}=c?t.cfi.resolveCfi({cfi:e.cfi}):{};r.renditionLayout!=="pre-paginated"&&a&&(i=t.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(a,u??0,r)??i);let g=e==null?void 0:e.absolutePageIndex;return i===void 0&&(i=0),g=t.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:i,spineItemOrId:r})??(e==null?void 0:e.absolutePageIndex),{...e,...s,range:l,itemIndex:n,node:a,startOffset:u,absolutePageIndex:g,itemPageIndex:i}})):o.of({...e,itemIndex:n,...s})};class te{constructor(t){this.reader=t,this.locatorsByKey=new Map,this.deregisterMemoizedStream=i=>{const n=this.locatorsByKey.get(i);n&&(n.observerCount--,n.observerCount===0&&this.locatorsByKey.delete(i))},this.locate=(i,n)=>{const s={resource:i,meta:_i(this.reader,i)};return ft(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),c=(r==null?void 0:r.renditionLayout)==="reflowable",a=n.mode==="shallow"||!c||!r?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([r.index]),u="cfi"in i?i.cfi:void 0,l=u?this.locatorsByKey.get(u):void 0,d=p=>p.pipe(o.finalize(()=>{u&&this.deregisterMemoizedStream(u),setTimeout(()=>{a()},1e3)}));if(u&&l)return l.observerCount++,d(l.consolidate$.pipe(o.map(({resource:p,meta:m})=>({resource:p,meta:m}))));const g=this.reader.spine.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(p=>jt(p.meta,this.reader).pipe(o.map(m=>({...p,meta:m}))),s),o.shareReplay({refCount:!0,bufferSize:1}));return u&&this.locatorsByKey.set(u,{observerCount:1,consolidate$:g}),d(g)})}}locateResource(t,i){return Array.isArray(t)?ft(()=>o.combineLatest(t.map(n=>this.locate(n,i??{}))).pipe(o.defaultIfEmpty([]))):this.locate(t,i??{})}}const ee=(e,t,i)=>{const n=i.spineItems.findIndex(s=>s.href===e);return t.reduce((s,r)=>{const c=r.href.indexOf("#"),a=c>0?r.href.substr(0,c):r.href,u=a.substring(0,a.lastIndexOf("/")),l=e.substring(0,e.lastIndexOf("/")),d=e.endsWith(a),g=l!==""&&l.endsWith(u);if(d||g){const m=i.spineItems.findIndex(S=>S.href===r.href);if(n<m)return s;const f={title:r.title,path:r.path},b=ee(e,r.contents,i);return b?{...f,subChapter:b}:f}return s},void 0)},qi=(e,t)=>{var n;const{href:i}=t;return ee(i,((n=e.nav)==null?void 0:n.toc)??[],e)},Yi=e=>{const t=e.context.manifest,i=e.spineItemsManager.items;return t?i.reduce((n,{item:s})=>(n[s.id]=qi(t,s),n),{}):{}},xi=e=>e.spineItemsManager.items$.pipe(o.startWith([]),o.map(()=>Yi(e))),Xi=(e,t,i)=>e+t*i,Zi=(e,t,i)=>{const n=e.context,{height:s,width:r}=i.layout.layoutInfo,{top:c,left:a}=e.spine.getSpineItemSpineLayoutInfo(i);return e.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(t.y-c+n.state.visibleAreaRect.height)/s)):Math.max(0,Math.min(1,(t.x-a+n.state.visibleAreaRect.width)/r))},Gi=(e,t,i,n,s)=>s.isReady$.pipe(o.first(),o.withLatestFrom(e.layoutInfo$),o.map(([r,c])=>{var S,I,P,v,M,F,R;const a=e.context,u=((S=a.manifest)==null?void 0:S.renditionLayout)==="pre-paginated",l=((I=a.manifest)==null?void 0:I.spineItems.length)||0,d=((P=a.manifest)==null?void 0:P.spineItems.slice(0,t).reduce((D,O)=>D+(O.progressionWeight??0),0))||0,g=e.spineItemsManager.getSpineItemIndex(s)??0,p=((v=e.context.manifest)==null?void 0:v.spineItems.length)??0,m=c.pages.filter(D=>D.itemIndex===g).length??0,h=((F=(M=a.manifest)==null?void 0:M.spineItems[t])==null?void 0:F.progressionWeight)??(g+1)/p;let f=(i+1)*(h/m);!u&&s.renditionLayout==="reflowable"&&!r&&(f=0);let b=d+f;return((R=a.manifest)==null?void 0:R.renditionFlow)==="scrolled-continuous"&&(r?f=Zi(e,n,s):f=0,b=Xi(d,h,f)),t===l-1&&i===m-1&&b>.99?1:b})),Ki=e=>e.spine.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.pages.value.pages.length})),o.distinctUntilChanged($.isShallowEqual),o.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),Ji=(e,t,i,n)=>{const s=e.context,r=t.beginSpineItemIndex!==void 0?e.spineItemsManager.get(t.beginSpineItemIndex):void 0,c=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:c?i[c.item.id]:void 0,endSpineItemReadingDirection:c==null?void 0:c.readingDirection,percentageEstimateOfBook:n,isUsingSpread:s.state.isUsingSpreadMode??!1})},Qi=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?Gi(e,t.endSpineItemIndex??0,t.endPageIndexInSpineItem||0,e.navigation.getNavigation().position,i):o.of(0)})),ji=e=>{const t=xi(e),i=Ki(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,Qi(e)]).pipe(o.switchMap(([c,a,u])=>Ji(e,c,a,u).pipe(o.map(l=>({...c,...l})))),o.distinctUntilChanged($.isShallowEqual));return{paginationInfo$:o.combineLatest([s,i]).pipe(o.map(([c,a])=>({...c,...a,beginAbsolutePageIndex:a.numberOfPagesPerItems.slice(0,c.beginSpineItemIndex).reduce((u,l)=>u+l,c.beginPageIndexInSpineItem??0),endAbsolutePageIndex:a.numberOfPagesPerItems.slice(0,c.endSpineItemIndex).reduce((u,l)=>u+l,c.endPageIndexInSpineItem??0)})),o.tap(c=>{n.next(c)}),o.shareReplay(1)),getPaginationInfo:()=>n.value}},ie=e=>t=>{const i=e(t),{paginationInfo$:n,getPaginationInfo:s}=ji(i);n.pipe(o.takeUntil(i.$.destroy$)).subscribe();const r=new te(i);return{...i,locateResource:r.locateResource.bind(r),pagination:{...i.pagination,get state(){return s()},get state$(){return n}}}},tn=e=>({put:(r,c)=>new Promise((a,u)=>{const l=e.transaction(["store"],"readwrite");l.onerror=p=>{u(p)},l.oncomplete=()=>{a()};const g=l.objectStore("store").put(c,r);g.onsuccess=()=>{a()},g.onerror=p=>{u(p)}}),keys:()=>new Promise((r,c)=>{const a=e.transaction(["store"],"readonly");a.onerror=g=>{c(g)};const l=a.objectStore("store").openKeyCursor(),d=[];l.onsuccess=()=>{const g=l.result;if(!g){r(d);return}d.push(g.key),g.continue()},l.onerror=()=>{c(l.error)}}),get:r=>new Promise((c,a)=>{const u=e.transaction(["store"],"readwrite"),d=u.objectStore("store").get(r);d.onsuccess=()=>{let g=d.result;g===void 0&&(g=null),c(g)},u.onerror=()=>{a(d.error)}}),remove:r=>new Promise((c,a)=>{const u=e.transaction(["store"],"readwrite"),d=u.objectStore("store").delete(r);u.onerror=()=>{a(d.error)},u.oncomplete=()=>{c()},u.onabort=()=>{var p;const g=d.error?d.error:(p=d.transaction)==null?void 0:p.error;a(g)}})}),wt=async e=>new Promise((t,i)=>{const n=window.indexedDB.open(e);n.onerror=s=>{i(s)},n.onsuccess=()=>{t(tn(n.result))},n.onupgradeneeded=()=>{n.result.createObjectStore("store")}}),en=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 wt("prose-reader")).get(`${t}_${d.id}`);if(p)return new Response(p,{status:200});const m=l&&await l(d)||await fetch(d.href);return r(d,m.clone()),m},r=(u,l)=>{i.next({id:u,data:l})};i.asObservable().pipe(y.mergeMap(({id:u,data:l})=>{const d=n(u);return d?o.from(o.forkJoin([wt("prose-reader"),o.from(l.blob())])).pipe(y.switchMap(([g,p])=>o.from(g.put(`${t}_${d.id}`,p))),y.catchError(g=>(C.error(g),o.EMPTY))):o.EMPTY}),y.takeUntil(e.destroy$)).subscribe();const c=e.manifest$.pipe(y.tap(()=>{t=Date.now().toString()}));return o.merge(c).pipe(y.switchMap(()=>(C.debug("Cleanup up old cache..."),o.from(wt("prose-reader")).pipe(y.switchMap(u=>o.from(u.keys()).pipe(y.map(l=>l.filter(d=>!d.toString().startsWith(t))),y.switchMap(l=>{const d=l.map(g=>u.remove(g));return o.from(Promise.all(d))}))),y.catchError(u=>(C.error(u),o.EMPTY))))),y.takeUntil(e.destroy$)).subscribe(),{get:s,destroy:()=>{i.complete()}}},nn=e=>t=>{const i=e(t),n=en(i.context);return{...i,destroy:()=>{n.destroy(),i.destroy()}}},on=(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),c=Math.max(e.offset||0,t.offset||0);i.setStart(e.node,r),i.setEnd(e.node,c)}}catch(r){C.warn("Failed to create range from selection",r,{anchor:e,focus:t})}return i}},sn=({selection:e,spineItem:t})=>{const{anchorNode:i,anchorOffset:n,focusNode:s,focusOffset:r}=e;if(!(!i||!s))try{return on({node:i,offset:n},{node:s,offset:r})}catch(c){C.warn("Failed to create range from selection",c,{selection:e,spineItem:t});return}};class rn extends A{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=St(i.body,{childList:!0,subtree:!0}).pipe(o.filter(c=>!!c.find(a=>a.type==="childList"&&a.removedNodes.length))),r=t.parentElement?St(t.parentElement,{childList:!0}).pipe(o.filter(c=>!!c.find(a=>Array.from(a.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(c=>{const a=i.getSelection();return a&&!a.isCollapsed?[c,a]:void 0}),o.filter(k))),o.takeUntil(o.merge(r,this.destroy$)))}}}const an=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 rn(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,c])=>({type:"over",event:r,selection:c})))).pipe(o.takeUntil(e.unloaded$),o.endWith(void 0),o.finalize(()=>{n.destroy()}))}),o.distinctUntilChanged()),cn=e=>t=>{const i=e(t);let n;const s=i.spineItemsManager.items$.pipe(o.switchMap(d=>{const g=d.map(p=>{const m=i.spineItemsManager.getSpineItemIndex(p)??0;return an(p).pipe(o.map(h=>{if(h)return{...h,itemIndex:m}}))});return o.merge(...g)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{n=d}),o.shareReplay({refCount:!0,bufferSize:1})),r=s,c=s.pipe(o.map(d=>!!d),o.distinctUntilChanged(),o.filter(d=>d),o.share()),a=c.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.watch("rootElement").pipe(o.filter(ct.isDefined),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$:c,selectionEnd$:a,selectionOver$:u,lastSelectionOnPointerdown$:l,getSelection:()=>n,createOrderedRangeFromSelection:sn}}},ne=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],un=e=>t=>{const i=e(t),n=new o.BehaviorSubject(t.theme??"bright"),s=()=>{const a=ne.find(u=>u.name===n.value);return`
247
+ `,i.appendChild(t),i.appendChild(n),i},Li=i=>e=>{const{loadingElementCreate:t=Fi}=e,n=i(e),s=l=>o.of(l.reduce((u,{item:d,element:p})=>{p.style.zIndex="0";const g=p.querySelector(`.${Xe}`);if(g instanceof HTMLElement)return u[d.id]=g,u;const m=t({container:Mi(p,n.context),item:d});return p.appendChild(m),u[d.id]=m,u},{})),r=l=>o.combineLatest([n.spine.layout$,n.theme.$.theme$]).pipe(y.map(([,u])=>({width:n.context.state.visibleAreaRect.width,theme:u})),y.distinctUntilChanged(P.isShallowEqual),y.tap(({width:u,theme:d})=>{Object.values(l).forEach(p=>{p.style.setProperty("max-width",`${u}px`),p.style.setProperty("color",d==="sepia"?"#939393":"rgb(202, 202, 202)")})})),c=l=>n.spineItemsObserver.itemIsReady$.pipe(y.tap(({item:u,isReady:d})=>{l[u.item.id]?.style.setProperty("visibility",d?"hidden":"visible"),l[u.item.id]?.style.setProperty("z-index",d?"0":"1")})),a=n.spineItemsManager.items$.pipe(y.switchMap(l=>s(l)),y.shareReplay(1),y.takeUntil(n.context.destroy$));return a.pipe(y.switchMap(l=>o.merge(r(l),c(l))),y.takeUntil(n.$.destroy$)).subscribe(),{...n,loading:{$:{items$:a}}}};class Ci extends B{getImageElement(){const e=this.documentContainer;if(e instanceof HTMLImageElement)return e}onCreateDocument(){const e=this.containerElement.ownerDocument.createElement("img");return o.from(this.resourcesHandler.getResource()).pipe(o.switchMap(t=>{if(this.setDocumentContainer(e),e.style.objectFit="contain",e.style.userSelect="none",t instanceof URL)return o.of(t.href);if(t instanceof Response)return o.from(t.blob()).pipe(o.map(n=>URL.createObjectURL(n)));throw new Error("Invalid resource")}),o.map(t=>{const n=this.getImageElement();return n&&(n.src=t),e}))}onLoadDocument(){const e=this.getImageElement();if(!e)throw new Error("invalid element");return this.attach(),o.fromEvent(e,"load")}onUnload(){const e=this.getImageElement();return e&&URL.revokeObjectURL(e.src),this.detach(),o.EMPTY}onLayout({spreadPosition:e}){const t=this.getImageElement(),{height:n,width:s}=this.context.getPageSize();let r=n;const c=s;if(!t)return o.of(void 0);const a=t.naturalWidth||1,l=t.naturalHeight||1,u=a/l;return this.settings.values.computedPageTurnDirection==="vertical"&&this.settings.values.computedPageTurnMode==="scrollable"&&!this.context.state.isUsingSpreadMode&&(r=Math.ceil(s/u)),t.style.height=`${r}px`,t.style.width=`${c}px`,t.style.objectPosition=e==="left"?"right":e==="right"?"left":"center",o.of({width:c,height:r})}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}const Ei=i=>e=>{const t=i({...e,getRenderer(c){const a=e.getRenderer?.(c),u=!!(c.mediaType??P.detectMimeTypeFromName(c.href))?.startsWith("image/");return!a&&u?d=>new Ci(d):a}}),n=new IntersectionObserver(c=>{c.forEach(a=>{const l=a.target,u=Array.from(l.contentDocument?.body.getElementsByTagName("audio")||[]);a.isIntersecting?u.forEach(d=>{d.hasAttribute("autoplay")&&d.paused&&d.readyState>=2&&d.play().catch(console.error)}):u.forEach(d=>{d.pause(),d.currentTime=0})})},{threshold:.01}),s=new IntersectionObserver(c=>{c.forEach(a=>{if(a.target.tagName==="video"){const l=a.target;a.isIntersecting?l.hasAttribute("autoplay")&&l.paused&&l.readyState>=2&&l.play().catch(console.error):(l.pause(),l.currentTime=0)}})},{threshold:.5});return t.hookManager.register("item.onDocumentLoad",({destroy:c,itemId:a})=>{const l=t.spineItemsManager.get(a)?.renderer.getDocumentFrame();if(!l)return;n.observe(l);const u=l.contentDocument?.body.getElementsByTagName("video"),d=Array.from(u||[]).map(p=>(s.observe(p),()=>s.unobserve(p)));c(()=>{n.unobserve(l),d.forEach(p=>p())})}),{...t,destroy:()=>{n.disconnect(),s.disconnect(),t.destroy()}}},Ri=(i,e)=>i.links$.pipe(o.tap(t=>{if(!Oe(t.target,"a")||t.type!=="click")return;const n=new URL(t.target.href),s=`${n.origin}${n.pathname}`;i.context.manifest?.spineItems.some(c=>c.href===s)&&e.goToUrl(n)})),V=L.namespace("navigation"),Ai=({position:i,spineItem:e,pageHeight:t,pageWidth:n,spineItemLocator:s})=>{let r=new M({x:i.x-n,y:i.y});return e.isUsingVerticalWriting()&&(r=new M({x:i.x,y:i.y+t})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},Ze=({position:i,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:n,spineLocator:s,context:r})=>{const c=t,a=s.getSpineItemFromPosition(i)||n.get(0),l=i;if(!a)return l;const u=s.getSpineItemPositionFromSpinePosition(i,a),d=Ai({position:u,spineItem:a,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,u)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:a}):e.getAdjustedPositionWithSafeEdge(c==="horizontal"?new $({x:i.x-r.getPageSize().width,y:0}):new $({y:i.y-r.getPageSize().height,x:0}))},Di=({position:i,spineItem:e,context:t,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Ze({position:i,context:t,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&i.x===a.x)return n.getAdjustedPositionForSpread(a);if(t.state.isUsingSpreadMode){if(e?.isUsingVerticalWriting()&&i.x!==a.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(t.isRTL()?{...a,x:a.x+t.getPageSize().width}:{...a,x:a.x-t.getPageSize().width}));if(c==="vertical"&&i.y!==a.y)return n.getAdjustedPositionForSpread(a);const l=Ze({position:a,context:t,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(l)}return n.getAdjustedPositionForSpread(a)},Ni=({position:i,spineItem:e,pageHeight:t,pageWidth:n,spineItemLocator:s})=>{let r=new M({x:i.x+n,y:i.y});return e.isUsingVerticalWriting()&&(r=new M({x:i.x,y:i.y-t})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},Ge=({position:i,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:n,spineLocator:s,context:r})=>{const c=t,a=s.getSpineItemFromPosition(i)||n.get(0),l=i;if(!a)return l;const u=s.getSpineItemPositionFromSpinePosition(i,a),d=Ni({position:u,spineItem:a,pageHeight:r.getPageSize().height,pageWidth:r.getPageSize().width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,u)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:a}):e.getAdjustedPositionWithSafeEdge(c==="horizontal"?new $({x:i.x+r.getPageSize().width,y:0}):new $({y:i.y+r.getPageSize().height,x:0}))},Oi=({position:i,spineItem:e,context:t,navigationResolver:n,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Ge({position:i,context:t,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&i.x===a.x)return n.getAdjustedPositionForSpread(a);if(t.state.isUsingSpreadMode){if(e?.isUsingVerticalWriting()&&i.x!==a.x)return n.getAdjustedPositionForSpread(n.getAdjustedPositionWithSafeEdge(t.isRTL()?{...a,x:a.x-t.getPageSize().width}:{...a,x:a.x+t.getPageSize().width}));if(c==="vertical"&&i.y!==a.y)return n.getAdjustedPositionForSpread(a);const l=Ge({position:a,context:t,navigationResolver:n,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return n.getAdjustedPositionForSpread(l)}return n.getAdjustedPositionForSpread(a)};class ki{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new $({x:0,y:0}),this.unlock=void 0}turnRight(){return this.turnRightOrBottom()}turnLeft(){return this.turnLeftOrTop()}turnTop(){return this.turnLeftOrTop()}turnBottom(){return this.turnRightOrBottom()}turnRightOrBottom(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const n=Oi({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator});return this.reader.navigation.navigate({position:n})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const n=Di({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator});return this.reader.navigation.navigate({position:n})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const n=this.reader.spineItemsManager.get(e);if(n===void 0){V.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:n.index,...t})}goToNextSpineItem(){const{endIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})||{};this.goToSpineItem({indexOrId:e+1})}goToPreviousSpineItem(){const{beginIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})??{};this.goToSpineItem({indexOrId:e-1})}goToUrl(e){this.reader.navigation.navigate({url:e,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){V.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"){V.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"){V.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){V.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:t,...n}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});V.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...n,position:s}),this.reader.navigation.navigate({position:s,...n})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const n=this.reader.spine.pages.fromAbsolutePageIndex(e);if(V.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:n}),n){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:n.pageIndex,spineItemId:n.itemIndex});return this.reader.navigation.navigate({position:s,...t})}}}class Vi{constructor(e){this.reader=e,this.lastDelta={x:0,y:0},this.lastPosition=new $({x:0,y:0}),this.lastStartPosition=new $({x:0,y:0}),this.unlock=void 0}moveTo(e,{final:t,start:n}={}){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){V.warn("pan control is not available on free page turn mode");return}const s=this.reader.settings.values.computedPageTurnDirection;n&&(this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.lastDelta={x:0,y:0},this.lastStartPosition=this.reader.navigation.controlledNavigationController.viewportPosition,this.lastPosition=this.lastStartPosition);let r=this.reader.navigation.getNavigation().position;if(e){const c=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,a=Math.floor(e.x)-(this.lastDelta?.x||0),l=Math.floor(e.y)-(this.lastDelta?.y||0),u=Math.floor(s==="horizontal"?this.lastPosition.x-a/c:0),d=Math.floor(s==="horizontal"?0:this.lastPosition.y-l/c);r=new $({x:u,y:d}),this.lastDelta=e}else r=this.lastPosition;if(this.lastPosition=r,t){this.lastDelta={x:0,y:0},this.reader.navigation.navigate({position:r,animation:!1}),this.unlock?.();return}this.reader.navigation.navigate({position:r,animation:!1})}}const Ui=i=>i.pagination.state$.pipe(o.withLatestFrom(i.context.manifest$,i.settings.values$),o.map(([e,{spineItems:t,readingDirection:n},{computedPageTurnDirection:s}])=>{const r=t.length??0,c=e.beginSpineItemIndex===0,a=e.endSpineItemIndex===Math.max(r-1,0),l=e.endSpineItemIndex===Math.max(r-1,0),u=e.beginSpineItemIndex===0,d=e.beginPageIndexInSpineItem===0,p=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:s==="vertical"?!1:!d,canTurnRight:s==="vertical"?!1:!p,canGoTopSpineItem:s==="vertical"&&!c,canGoBottomSpineItem:s==="vertical"&&!a,canGoLeftSpineItem:s!=="vertical"&&(n==="ltr"&&!c||n==="rtl"&&!l),canGoRightSpineItem:s!=="vertical"&&(n==="ltr"&&!a||n==="rtl"&&!u)}}),o.distinctUntilChanged(P.isShallowEqual)),Wi=({reader:i,duration:e})=>t=>{let n;const s=()=>{n?.(),n=void 0};return t.pipe(o.tap(()=>{n||(n=i?.navigation.lock())}),o.throttleTime(e,o.animationFrameScheduler,{trailing:!0,leading:!0}),o.tap(s),o.finalize(s))},zi=i=>e=>{const t=i(e),n=Ui(t),s=new ki(t),r=new Vi(t),c=l=>{const{cfi:u,...d}=l;t.load(d),u&&s.goToCfi(u,{animate:!1})};return Ri(t,s).pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,load:c,navigation:{...t.navigation,state$:n,throttleLock:({duration:l,trigger:u})=>u.pipe(Wi({duration:l,reader:t})),moveTo:r.moveTo.bind(r),turnBottom:s.turnBottom.bind(s),turnTop:s.turnTop.bind(s),turnLeftOrTop:s.turnLeftOrTop.bind(s),turnRightOrBottom:s.turnRightOrBottom.bind(s),turnLeft:s.turnLeft.bind(s),turnRight:s.turnRight.bind(s),goToCfi:s.goToCfi.bind(s),goToUrl:s.goToUrl.bind(s),goToSpineItem:s.goToSpineItem.bind(s),goToNextSpineItem:s.goToNextSpineItem.bind(s),goToPreviousSpineItem:s.goToPreviousSpineItem.bind(s),goToLeftOrTopSpineItem:s.goToLeftOrTopSpineItem.bind(s),goToRightOrBottomSpineItem:s.goToRightOrBottomSpineItem.bind(s),goToTopSpineItem:s.goToTopSpineItem.bind(s),goToBottomSpineItem:s.goToBottomSpineItem.bind(s),goToLeftSpineItem:s.goToLeftSpineItem.bind(s),goToRightSpineItem:s.goToRightSpineItem.bind(s),goToPageOfSpineItem:s.goToPageOfSpineItem.bind(s),goToAbsolutePageIndex:s.goToAbsolutePageIndex.bind(s)}}},Ke=(i,e,t)=>{const n=t.spineItems.findIndex(s=>s.href===i);return e.reduce((s,r)=>{const c=r.href.indexOf("#"),a=c>0?r.href.substr(0,c):r.href,l=a.substring(0,a.lastIndexOf("/")),u=i.substring(0,i.lastIndexOf("/")),d=i.endsWith(a),p=u!==""&&u.endsWith(l);if(d||p){const m=t.spineItems.findIndex(S=>S.href===r.href);if(n<m)return s;const f={title:r.title,path:r.path},b=Ke(i,r.contents,t);return b?{...f,subChapter:b}:f}return s},void 0)},Hi=(i,e)=>{const{href:t}=e;return Ke(t,i.nav?.toc??[],i)},Bi=i=>{const e=i.context.manifest,t=i.spineItemsManager.items;return e?t.reduce((n,{item:s})=>(n[s.id]=Hi(e,s),n),{}):{}},_i=i=>i.spineItemsManager.items$.pipe(o.startWith([]),o.map(()=>Bi(i))),qi=(i,e,t)=>i+e*t,Yi=(i,e,t)=>{const n=i.context,{height:s,width:r}=t.layout.layoutInfo,{top:c,left:a}=i.spine.getSpineItemSpineLayoutInfo(t);return i.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-c+n.state.visibleAreaRect.height)/s)):Math.max(0,Math.min(1,(e.x-a+n.state.visibleAreaRect.width)/r))},xi=(i,e,t,n,s)=>s.isReady$.pipe(o.first(),o.withLatestFrom(i.layoutInfo$),o.map(([r,c])=>{const a=i.context,l=a.manifest?.renditionLayout==="pre-paginated",u=a.manifest?.spineItems.length||0,d=a.manifest?.spineItems.slice(0,e).reduce((S,w)=>S+(w.progressionWeight??0),0)||0,p=i.spineItemsManager.getSpineItemIndex(s)??0,g=i.context.manifest?.spineItems.length??0,m=c.pages.filter(S=>S.itemIndex===p).length??0,h=a.manifest?.spineItems[e]?.progressionWeight??(p+1)/g;let f=(t+1)*(h/m);!l&&s.renditionLayout==="reflowable"&&!r&&(f=0);let b=d+f;return a.manifest?.renditionFlow==="scrolled-continuous"&&(r?f=Yi(i,n,s):f=0,b=qi(d,h,f)),e===u-1&&t===m-1&&b>.99?1:b})),Xi=i=>i.spine.layout$.pipe(o.debounceTime(10,o.animationFrameScheduler),o.withLatestFrom(i.pagination.state$),o.map(()=>({numberOfPagesPerItems:i.spineItemsManager.items.reduce((t,n)=>[...t,n.numberOfPages],[]),numberOfTotalPages:i.spine.pages.value.pages.length})),o.distinctUntilChanged(P.isShallowEqual),o.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),Zi=(i,e,t,n)=>{const s=i.context,r=e.beginSpineItemIndex!==void 0?i.spineItemsManager.get(e.beginSpineItemIndex):void 0,c=e.endSpineItemIndex!==void 0?i.spineItemsManager.get(e.endSpineItemIndex):void 0;return o.of({...e,beginChapterInfo:r?t[r.item.id]:void 0,beginSpineItemReadingDirection:r?.readingDirection,endChapterInfo:c?t[c.item.id]:void 0,endSpineItemReadingDirection:c?.readingDirection,percentageEstimateOfBook:n,isUsingSpread:s.state.isUsingSpreadMode??!1})},Gi=i=>o.combineLatest([i.pagination.state$,i.layout$]).pipe(o.switchMap(([e])=>{const t=e.endSpineItemIndex!==void 0?i.spineItemsManager.get(e.endSpineItemIndex):void 0;return t?xi(i,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,i.navigation.getNavigation().position,t):o.of(0)})),Ki=i=>{const e=_i(i),t=Xi(i),n=new o.BehaviorSubject({...i.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([i.pagination.state$,e,Gi(i)]).pipe(o.switchMap(([c,a,l])=>Zi(i,c,a,l).pipe(o.map(u=>({...c,...u})))),o.distinctUntilChanged(P.isShallowEqual));return{paginationInfo$:o.combineLatest([s,t]).pipe(o.map(([c,a])=>({...c,...a,beginAbsolutePageIndex:a.numberOfPagesPerItems.slice(0,c.beginSpineItemIndex).reduce((l,u)=>l+u,c.beginPageIndexInSpineItem??0),endAbsolutePageIndex:a.numberOfPagesPerItems.slice(0,c.endSpineItemIndex).reduce((l,u)=>l+u,c.endPageIndexInSpineItem??0)})),o.tap(c=>{n.next(c)}),o.shareReplay(1)),getPaginationInfo:()=>n.value}},W=i=>O.generate({spineIndex:i.index,spineId:i.id}),Je=({nodeOrRange:i,offset:e,item:t})=>{const n="ownerDocument"in i?i.ownerDocument:i.startContainer.ownerDocument;return!n||!n?.documentElement||i===n?W(t):Yt(i)?O.generate({start:{node:i.startContainer,offset:i.startOffset,spineIndex:t.index,spineId:t.id},end:{node:i.endContainer,offset:i.endOffset,spineIndex:t.index,spineId:t.id}}):O.generate({node:i,offset:e,spineIndex:t.index,spineId:t.id})},ie=({pageIndex:i,spineItem:e,spine:t})=>{const s=t.pages.value.pages.find(c=>c.itemIndex===e.index&&c.pageIndex===i)?.firstVisibleNode,r=e.renderer.getDocumentFrame();return s&&r instanceof HTMLIFrameElement&&r.contentWindow?.document?Je({nodeOrRange:s.node,offset:s.offset,item:e.item}).trim():W(e.item)},Qe=(i,e)=>Je({nodeOrRange:i,item:e}),Ji=i=>i.index.toString(),je=i=>i[0]?.index===6&&i.length>1,ne=i=>{const e=O.parse(i);return O.isIndirectionOnly(e)},Qi=i=>Array.isArray(i)?i[0]&&je(i[0])?i[0]:void 0:i.parent[0]&&je(i.parent[0])?i.parent[0]:void 0,oe=i=>{const e=O.parse(i),r=((Qi(e)??[])[1]?.index??2)/2-1,c=O.isParsedCfiRange(e),a=c?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:c,cleanedCfi:i,itemIndex:r,offset:a??0}},be=({cfi:i,spineItemsManager:e})=>{const{itemIndex:t,...n}=oe(i),s=e.get(t);if(!s)return{...n,itemIndex:t,node:null};const r=s.renderer.getDocumentFrame();if(r instanceof HTMLIFrameElement){const c=r.contentWindow?.document;if(c)try{const a=O.resolve(i,c,{throwOnError:!0});return{...n,itemIndex:t,node:a.isRange?a.node?.startContainer??null:a.node??null,isCfiRange:a.isRange,range:a.isRange?a.node:void 0,offset:Array.isArray(a.offset)?a.offset.at(-1):a.offset,spineItem:s}}catch(a){return L.warn(`Error resolving cfi: ${i}.`),L.warn(a),{...n,spineItem:s,itemIndex:t,node:null}}}return{...n,itemIndex:t,spineItem:s,node:null}},ji=(i,e)=>{if("cfi"in e){const{itemIndex:r,...c}=i.cfi.parseCfi(e.cfi);return{...e,...c,itemIndex:r,node:null}}const t=i.spineItemsManager.get(e);if(!t)throw new Error("Spine item not found");const n=W(t.item);return{...i.cfi.parseCfi(n),cfi:W(t.item),itemIndex:t.index,node:null}},et=(i,e)=>{let t=i?.itemPageIndex;const{itemIndex:n,...s}=e.cfi.parseCfi(i.cfi),r=e.spineItemsManager.get(n);return r?me().pipe(o.withLatestFrom(r.isReady$),o.map(([,c])=>{const{node:a=null,offset:l,range:u}=c?e.cfi.resolveCfi({cfi:i.cfi}):{};r.renditionLayout!=="pre-paginated"&&a&&(t=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(a,l??0,r)??t);let p=i?.absolutePageIndex;return t===void 0&&(t=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:t,spineItemOrId:r})??i?.absolutePageIndex,{...i,...s,range:u,itemIndex:n,node:a,startOffset:l,absolutePageIndex:p,itemPageIndex:t}})):o.of({...i,itemIndex:n,...s})};class tt{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const n=this.locatorsByKey.get(t);n&&(n.observerCount--,n.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,n)=>{const s={resource:t,meta:ji(this.reader,t)};return fe(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),c=r?.renditionLayout==="reflowable",a=n.mode==="shallow"||!c||!r?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([r.index]),l="cfi"in t?t.cfi:void 0,u=l?this.locatorsByKey.get(l):void 0,d=g=>g.pipe(o.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{a()},1e3)}));if(l&&u)return u.observerCount++,d(u.consolidate$.pipe(o.map(({resource:g,meta:m})=>({resource:g,meta:m}))));const p=this.reader.spine.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(g=>et(g.meta,this.reader).pipe(o.map(m=>({...g,meta:m}))),s),o.shareReplay({refCount:!0,bufferSize:1}));return l&&this.locatorsByKey.set(l,{observerCount:1,consolidate$:p}),d(p)})}}locateResource(e,t){return Array.isArray(e)?fe(()=>o.combineLatest(e.map(n=>this.locate(n,t??{}))).pipe(o.defaultIfEmpty([]))):this.locate(e,t??{})}}const it=i=>e=>{const t=i(e),{paginationInfo$:n,getPaginationInfo:s}=Ki(t);n.pipe(o.takeUntil(t.$.destroy$)).subscribe();const r=new tt(t);return{...t,locateResource:r.locateResource.bind(r),pagination:{...t.pagination,get state(){return s()},get state$(){return n}}}},en=i=>({put:(r,c)=>new Promise((a,l)=>{const u=i.transaction(["store"],"readwrite");u.onerror=g=>{l(g)},u.oncomplete=()=>{a()};const p=u.objectStore("store").put(c,r);p.onsuccess=()=>{a()},p.onerror=g=>{l(g)}}),keys:()=>new Promise((r,c)=>{const a=i.transaction(["store"],"readonly");a.onerror=p=>{c(p)};const u=a.objectStore("store").openKeyCursor(),d=[];u.onsuccess=()=>{const p=u.result;if(!p){r(d);return}d.push(p.key),p.continue()},u.onerror=()=>{c(u.error)}}),get:r=>new Promise((c,a)=>{const l=i.transaction(["store"],"readwrite"),d=l.objectStore("store").get(r);d.onsuccess=()=>{let p=d.result;p===void 0&&(p=null),c(p)},l.onerror=()=>{a(d.error)}}),remove:r=>new Promise((c,a)=>{const l=i.transaction(["store"],"readwrite"),d=l.objectStore("store").delete(r);l.onerror=()=>{a(d.error)},l.oncomplete=()=>{c()},l.onabort=()=>{const p=d.error?d.error:d.transaction?.error;a(p)}})}),Ie=async i=>new Promise((e,t)=>{const n=window.indexedDB.open(i);n.onerror=s=>{t(s)},n.onsuccess=()=>{e(en(n.result))},n.onupgradeneeded=()=>{n.result.createObjectStore("store")}}),tn=i=>{let e=Date.now().toString();const t=new o.Subject,n=l=>{if(typeof l=="string"||typeof l=="object"){const u=typeof l=="object"?l.id:l;return i.manifest?.spineItems.find(d=>d.id===u)}return i.manifest?.spineItems[l]},s=async(l,u)=>{const d=n(l);if(!d)return new Response("Item not found",{status:404});const g=await(await Ie("prose-reader")).get(`${e}_${d.id}`);if(g)return new Response(g,{status:200});const m=u&&await u(d)||await fetch(d.href);return r(d,m.clone()),m},r=(l,u)=>{t.next({id:l,data:u})};t.asObservable().pipe(y.mergeMap(({id:l,data:u})=>{const d=n(l);return d?o.from(o.forkJoin([Ie("prose-reader"),o.from(u.blob())])).pipe(y.switchMap(([p,g])=>o.from(p.put(`${e}_${d.id}`,g))),y.catchError(p=>(L.error(p),o.EMPTY))):o.EMPTY}),y.takeUntil(i.destroy$)).subscribe();const c=i.manifest$.pipe(y.tap(()=>{e=Date.now().toString()}));return o.merge(c).pipe(y.switchMap(()=>(L.debug("Cleanup up old cache..."),o.from(Ie("prose-reader")).pipe(y.switchMap(l=>o.from(l.keys()).pipe(y.map(u=>u.filter(d=>!d.toString().startsWith(e))),y.switchMap(u=>{const d=u.map(p=>l.remove(p));return o.from(Promise.all(d))}))),y.catchError(l=>(L.error(l),o.EMPTY))))),y.takeUntil(i.destroy$)).subscribe(),{get:s,destroy:()=>{t.complete()}}},nn=i=>e=>{const t=i(e),n=tn(t.context);return{...t,destroy:()=>{n.destroy(),t.destroy()}}},on=(i,e)=>{const t=i.node.ownerDocument?.createRange(),n=i.node.compareDocumentPosition(e.node);if(t){try{if(n&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(i.node,i.offset||0);else if(n&Node.DOCUMENT_POSITION_FOLLOWING)t.setStart(i.node,i.offset||0),t.setEnd(e.node,e.offset||0);else{const s=Math.min(i.offset||0,e.offset||0),r=Math.max(i.offset||0,e.offset||0);t.setStart(i.node,s),t.setEnd(i.node,r)}}catch(s){L.warn("Failed to create range from selection",s,{anchor:i,focus:e})}return t}},sn=({selection:i,spineItem:e})=>{const{anchorNode:t,anchorOffset:n,focusNode:s,focusOffset:r}=i;if(!(!t||!s))try{return on({node:t,offset:n},{node:s,offset:r})}catch(c){L.warn("Failed to create range from selection",c,{selection:i,spineItem:e});return}};class rn extends E{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=o.NEVER,this.selectionOver$=o.NEVER;else{const n=Se(t.body,{childList:!0,subtree:!0}).pipe(o.filter(r=>!!r.find(c=>c.type==="childList"&&c.removedNodes.length))),s=e.parentElement?Se(e.parentElement,{childList:!0}).pipe(o.filter(r=>!!r.find(c=>Array.from(c.removedNodes).includes(e)))):o.of(null);this.selectionChange$=o.merge(o.fromEvent(t,"selectionchange"),n).pipe(o.map(()=>t.getSelection()),o.takeUntil(o.merge(s,this.destroy$)),o.endWith(null)),this.selectionOver$=o.fromEvent(t,"pointerdown").pipe(o.switchMap(()=>o.merge(o.fromEvent(t,"pointerup"),o.fromEvent(t,"pointercancel"),o.fromEvent(t,"contextmenu")).pipe(o.first(),o.delay(0),o.map(r=>{const c=t.getSelection();return c&&!c.isCollapsed?[r,c]:void 0}),o.filter(k))),o.takeUntil(o.merge(s,this.destroy$)))}}}const an=i=>i.loaded$.pipe(o.switchMap(()=>{const e=i.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return o.NEVER;const n=new rn(e);return o.merge(n.selectionChange$.pipe(o.map(s=>{if(s?.toString())return{type:"change",selection:s}})),n.selectionOver$.pipe(o.map(([s,r])=>({type:"over",event:s,selection:r})))).pipe(o.takeUntil(i.unloaded$),o.endWith(void 0),o.finalize(()=>{n.destroy()}))}),o.distinctUntilChanged()),cn=i=>e=>{const t=i(e);let n;const s=t.spineItemsManager.items$.pipe(o.switchMap(d=>{const p=d.map(g=>{const m=t.spineItemsManager.getSpineItemIndex(g)??0;return an(g).pipe(o.map(h=>{if(h)return{...h,itemIndex:m}}))});return o.merge(...p)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{n=d}),o.shareReplay({refCount:!0,bufferSize:1})),r=s,c=s.pipe(o.map(d=>!!d),o.distinctUntilChanged(),o.filter(d=>d),o.share()),a=c.pipe(o.switchMap(()=>r),o.distinctUntilChanged(),o.filter(d=>!d),o.share()),l=s.pipe(o.filter(d=>d?.type==="over"),o.share()),u=t.context.watch("rootElement").pipe(o.filter(ce.isDefined),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,u).pipe(o.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:r,selectionStart$:c,selectionEnd$:a,selectionOver$:l,lastSelectionOnPointerdown$:u,getSelection:()=>n,createOrderedRangeFromSelection:sn}}},nt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],ln=i=>e=>{const t=i(e),n=new o.BehaviorSubject(e.theme??"bright"),s=()=>{const a=nt.find(l=>l.name===n.value);return`
248
248
  body {
249
249
  ${a!==void 0?`background-color: ${a.backgroundColor} !important;`:""}
250
250
  }
251
- ${a!=null&&a.foregroundColor?`
251
+ ${a?.foregroundColor?`
252
252
  body * {
253
253
 
254
254
  color: ${a.foregroundColor};
255
255
  }
256
256
  `:""}
257
- `},r=({container:a})=>{const u=ne.find(l=>l.name===n.value);return u&&a.style.setProperty("background-color",u.backgroundColor),()=>{}},c=()=>{i.spineItemsManager.items.forEach(a=>{const u=a.renderer.getDocumentFrame();u&&N(u,"prose-reader-theme",s()),r({container:a.element})})};return i.hookManager.register("item.onDocumentLoad",({itemId:a})=>{const u=i.spineItemsManager.get(a);if((u==null?void 0:u.renditionLayout)!=="pre-paginated"){const l=u==null?void 0:u.renderer.getDocumentFrame();l&&N(l,"prose-reader-theme",s())}}),i.spineItemsManager.items$.pipe(y.tap(a=>a.map(({element:u})=>r({container:u}))),y.takeUntil(i.$.destroy$)).subscribe(),n.pipe(y.tap(()=>{c()}),y.takeUntil(i.$.destroy$)).subscribe(),{...i,theme:{set:a=>{a!==n.value&&n.next(a)},get:()=>n.value,$:{theme$:n.asObservable()}}}},ln=e=>t=>({...e(t),utils:{isOrIsWithinValidLink:s=>{if(gt(s)){const r=s.nodeName==="a"?s:s.closest("a");if(r!=null&&r.getAttribute("href"))return!0}return!1}}});navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const dn=e=>t=>e(t);class oe{constructor(t){this.reader=t}}class gn extends oe{constructor(){super(...arguments),this.isZooming$=new o.BehaviorSubject(!1),this.currentScale=1,this.currentPosition={x:0,y:0}}enter(t){if(!t){console.warn("You need an image to enter zoom");return}this.currentPosition={x:0,y:0},this.currentScale=1;const i=this.reader.context.value.rootElement;if(i){this.element=i.ownerDocument.createElement("div"),this.element.style.cssText=`
257
+ `},r=({container:a})=>{const l=nt.find(u=>u.name===n.value);return l&&a.style.setProperty("background-color",l.backgroundColor),()=>{}},c=()=>{t.spineItemsManager.items.forEach(a=>{const l=a.renderer.getDocumentFrame();l&&A(l,"prose-reader-theme",s()),r({container:a.element})})};return t.hookManager.register("item.onDocumentLoad",({itemId:a})=>{const l=t.spineItemsManager.get(a);if(l?.renditionLayout!=="pre-paginated"){const u=l?.renderer.getDocumentFrame();u&&A(u,"prose-reader-theme",s())}}),t.spineItemsManager.items$.pipe(y.tap(a=>a.map(({element:l})=>r({container:l}))),y.takeUntil(t.$.destroy$)).subscribe(),n.pipe(y.tap(()=>{c()}),y.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:a=>{a!==n.value&&n.next(a)},get:()=>n.value,$:{theme$:n.asObservable()}}}},un=i=>e=>({...i(e),utils:{isOrIsWithinValidLink:s=>!!(pe(s)&&(s.nodeName==="a"?s:s.closest("a"))?.getAttribute("href"))}});navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const dn=i=>e=>i(e);class ot{constructor(e){this.reader=e}}class pn extends ot{constructor(){super(...arguments),this.isZooming$=new o.BehaviorSubject(!1),this.currentScale=1,this.currentPosition={x:0,y:0}}enter(e){if(!e){console.warn("You need an image to enter zoom");return}this.currentPosition={x:0,y:0},this.currentScale=1;const t=this.reader.context.value.rootElement;if(t){this.element=t.ownerDocument.createElement("div"),this.element.style.cssText=`
258
258
  top: 0;
259
259
  left: 0;
260
260
  display: block;
@@ -264,31 +264,31 @@
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 se=({newScale:e,oldScale:t,screenSize:i,scrollOffset:n})=>{const s=i*e/2-i+i/2,r=i*t/2-i+i/2,c=e/t,a=n-r;return Math.max(s+a*c,0)};class pn extends oe{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),c=i.getBoundingClientRect().width/i.offsetWidth,a=n.scrollTop;i.style.transform=`scale(${r})`,n.scrollLeft=se({newScale:r,oldScale:c,pageSize:n.clientWidth,screenSize:i.offsetWidth,scrollOffset:n.scrollLeft}),n.scrollTop=se({newScale:r,oldScale:c,pageSize:n.clientHeight,screenSize:i.offsetHeight,scrollOffset:a}),this.currentScale=s}}const hn=e=>t=>{const i=e(t),n=new gn(i),s=new pn(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()}}}},re=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};$.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($.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this.destroy$.complete()}}class mn{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 fn=({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 ae extends Y{constructor(){super({marginBottom:0,marginTop:0,calculatedInnerMargin:0,assumedRenditionLayout:"reflowable",visibleAreaRect:{width:0,height:0,x:0,y:0}}),this.bridgeEvent=new mn,this.destroy$=new o.Subject,this.state$=this.pipe(y.distinctUntilChanged($.isShallowEqual)),this.manifest$=this.pipe(y.map(t=>t.manifest),y.filter(k),y.distinctUntilChanged()),this.hasVerticalWriting$=this.pipe(y.map(t=>t.hasVerticalWriting),y.filter(k),y.distinctUntilChanged()),this.isUsingSpreadMode$=this.pipe(y.map(t=>t.isUsingSpreadMode),y.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,c=t.marginTop??i.marginTop,a=t.marginBottom??i.marginBottom,u={...i,...t,...t.visibleAreaRect&&{...t.visibleAreaRect,height:t.visibleAreaRect.height-c-a},...t.manifest&&{isFullyPrePaginated:re(n),assumedRenditionLayout:(n==null?void 0:n.renditionLayout)??"reflowable"},isUsingSpreadMode:fn({manifest:n,visibleAreaRect:r,forceSinglePageMode:s})};$.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 ce 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($.isShallowEqual),o.map(({hasVerticalWriting:n,renditionFlow:s,renditionLayout:r,computedPageTurnMode:c})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||c==="scrollable"?["none"]:n?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:c==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class ue{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(c=>t===c.name).map(c=>{let a=()=>o.of(void 0);const u=new o.Subject,l=p=>{a=p},d=()=>(u.next(),u.complete(),a()??o.of(void 0)),g=c.runFn({...n,destroy$:u.asObservable(),destroy:l});return this._hookExecutions.push({name:t,id:i,destroyFn:d,ref:c}),g})}destroy(t,i,n){const s=this._hookExecutions.filter(c=>n&&c.ref===n||t===c.name&&(!i||i&&i===c.id));this._hookExecutions=this._hookExecutions.filter(c=>!s.includes(c));const r=s.map(({destroyFn:c})=>c());return o.combineLatest(r)}}class It{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 Sn=()=>e=>e.pipe(o.map(({navigation:t,pagination:i,...n})=>({navigation:{...t,paginationBeginCfi:i.beginCfi},...n}))),yn=(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(c=>c),o.map(()=>({pagination:n,navigation:s})))}),Sn(),o.distinctUntilChanged((n,s)=>n.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:n})=>({...n,meta:{triggeredBy:"pagination"}}))),bn=e=>e.pipe(o.map(([t,i])=>{const n={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t,position:t.position?T.from(t.position):void 0};return{previousNavigation:i,navigation:n}})),wn=({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})),In=({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",Pn=({context:e,settings:t})=>i=>i.pipe(o.map(({navigation:n,previousNavigation:s})=>{const r=In({navigation:n,previousNavigation:s,settings:t}),c={...n,directionFromLastNavigation:r};return{previousNavigation:s,navigation:c,direction:r}})),vn=({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 T({x:0,y:0})},...s}})),le=({settings:e,spineItemsManager:t,navigationResolver:i,spineLocator:n})=>s=>{const r=c=>{const{position:a,spineItem:u,cfi:l,directionFromLastNavigation:d}=c,{navigationSnapThreshold:g,computedPageTurnMode:p}=e.values;if(u!==void 0){const m=t.get(u);if(m)return m}if(typeof u=="number")return u>t.items.length-1?t.get(t.items.length-1):t.get(0);if(l){const m=t.getSpineItemFromCfi(l);if(m)return m}if(a&&p==="controlled"){const{beginIndex:m,endIndex:h}=n.getVisibleSpineItemsFromPosition({position:a,threshold:g,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?h:m)??m,b=t.get(f);if(!b)return;const{endPageIndex:S,beginPageIndex:I}=n.getVisiblePagesFromViewportPosition({position:a,spineItem:b,threshold:g,restrictToScreen:!1})??{},P=(d==="forward"||d==="anchor"?S:I)??0,v=i.getNavigationForSpineItemPage({pageIndex:P,spineItemId:b}),M=n.getVisibleSpineItemsFromPosition({position:v,threshold:g,restrictToScreen:!1}),F=d==="forward"||d==="anchor"?M==null?void 0:M.beginIndex:M==null?void 0:M.endIndex;return t.get(F)}return a&&p==="scrollable"?n.getSpineItemFromPosition(a):t.get(0)};return s.pipe(o.map(({navigation:c,...a})=>{const u=r(c);return{navigation:{...c,spineItem:t.getSpineItemIndex(u)},...a}}))},de=({spine:e})=>t=>t.pipe(o.switchMap(({navigation:i,...n})=>{const s=e.getSpineItemSpineLayoutInfo(i.spineItem),r=e.spineItemsManager.get(i.spineItem);return((r==null?void 0:r.isReady$)??o.of(!1)).pipe(o.first(),o.map(c=>({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:c},...n})))})),Pt=({settings:e,spineItemsManager:t,spineLocator:i,navigationResolver:n})=>s=>{const r=c=>{const{navigationSnapThreshold:a,computedPageTurnMode:u}=e.values,l=t.get(c.spineItem);if(!(!l||!c.position)){if(u==="controlled"){const{endPageIndex:d,beginPageIndex:g}=i.getVisiblePagesFromViewportPosition({position:c.position,spineItem:l,threshold:a,restrictToScreen:!1})??{},p=(c.directionFromLastNavigation==="forward"||c.directionFromLastNavigation==="anchor"?d:g)??0,m=n.getNavigationForSpineItemPage({pageIndex:p,spineItemId:l}),h=i.getVisiblePagesFromViewportPosition({position:m,spineItem:l,threshold:{type:"percentage",value:0},restrictToScreen:!0}),f=(c.directionFromLastNavigation==="forward"||c.directionFromLastNavigation==="anchor"?h==null?void 0:h.beginPageIndex:h==null?void 0:h.endPageIndex)??0;return i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:l})}return i.getSpineItemPositionFromSpinePosition(c.position,l)}};return s.pipe(o.map(({navigation:c,...a})=>({navigation:{...c,positionInSpineItem:r(c)},...a})))},$n=({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})),Tn=({spineLocator:e,navigation:t,navigationResolver:i,spineItemsManager:n,spine:s})=>{const r=n.get(t.spineItem);return r?r.isReady$.pipe(o.first(),o.map(c=>{var m,h;const a=s.getSpineItemSpineLayoutInfo(r),u=e.isPositionWithinSpineItem(t.position,r),l=a.width-(t.spineItemWidth??0),d=a.height-(t.spineItemHeight??0),g=l!==0||d!==0;if(t.url!==void 0&&(l||d||c&&!t.spineItemIsReady)){const f=i.getNavigationForUrl(t.url);if(f)return f.position}const p=t.cfi??t.paginationBeginCfi;if(p!==void 0&&!nt(p)&&(l||d||c&&!t.spineItemIsReady)){const f=i.getNavigationForCfi(p);if(f)return f}if(u&&g&&t.directionFromLastNavigation==="backward"){const f=new L({x:(((m=t.positionInSpineItem)==null?void 0:m.x)??0)+l,y:(((h=t.positionInSpineItem)==null?void 0:h.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 T({x:0,y:0}))},Mn=({navigation:e,spineLocator:t,spineItemsManager:i,settings:n,navigationResolver:s,spine:r})=>{const{spineItem:c}=e,a=i.get(c);if(!a)return new T({x:0,y:0});const{height:u,top:l}=r.getSpineItemSpineLayoutInfo(a),d=t.isPositionWithinSpineItem(e.position,a),g=e.positionInSpineItem??new L({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(a);if(l!==e.spineItemTop){const p=t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(e.positionInSpineItem??new L({x:0,y:0}),a);return t.getSpinePositionFromSpineItemPosition({spineItemPosition:p,spineItem:a})}if(l===e.spineItemTop&&u!==e.spineItemHeight){const p=(e.spineItemHeight??g.y)-g.y,m=new L({y:e.directionFromLastNavigation==="backward"?u-p:g.y,x:e.position.x});if(d){const h=t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(m,a);return t.getSpinePositionFromSpineItemPosition({spineItemPosition:h,spineItem:a})}if(!d){if(!(e.position.y<l)){const f=new L({y:u-p,x:e.position.x});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,a),spineItem:a})}return s.getNavigationForSpineIndexOrId(a)}}}return e.position},Fn=({navigation:e,spineItemsManager:t,settings:i,spineLocator:n,navigationResolver:s,spine:r})=>i.values.computedPageTurnMode==="scrollable"?o.of(Mn({navigation:e,spineLocator:n,navigationResolver:s,settings:i,spineItemsManager:t,spine:r})):Tn({navigation:e,spineLocator:n,navigationResolver:s,spineItemsManager:t,spine:r}),ge=({settings:e,navigationResolver:t,context:i,spine:n})=>s=>s.pipe(o.switchMap(r=>Fn({spineLocator:n.locator,navigation:r.navigation,navigationResolver:t,settings:e,spineItemsManager:n.spineItemsManager,spineItemLocator:n.locator.spineItemLocator,spine:n}).pipe(o.map(c=>({...r,navigation:{...r.navigation,position:c}}))))),Ln=C.namespace("navigation/InternalNavigator");class pe extends A{constructor(t,i,n,s,r,c,a,u){super(),this.settings=t,this.context=i,this.userNavigation$=n,this.viewportController=s,this.scrollNavigationController=r,this.navigationResolver=c,this.spine=a,this.isUserLocked$=u,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new T({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:I})=>({position:S,id:I})),o.distinctUntilChanged(({position:S,...I},{position:P,...v})=>$.isShallowEqual(I,v)&&$.isShallowEqual(S,P)),o.shareReplay(1)),this.locker=new It;const l=n.pipe(o.withLatestFrom(this.navigationSubject),bn,$n({navigationResolver:c}),wn({navigationResolver:c}),Pn({context:i,settings:t}),le({navigationResolver:c,settings:t,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),Pt({navigationResolver:c,settings:t,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),de({spine:a})).pipe(vn({navigationResolver:c,spineItemsManager:a.spineItemsManager}),o.withLatestFrom(u),o.switchMap(([S,I])=>{const P=S.navigation.cfi||S.navigation.url||t.values.computedPageTurnMode==="scrollable"||I;return o.of(S).pipe(P?o.identity:ge({navigationResolver:c,settings:t,spine:a,context:i}))}),Pt({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:t,navigationResolver:c}),o.map(S=>S.navigation),o.share()),d=l.pipe(o.withLatestFrom(u),o.filter(([,S])=>S),o.switchMap(([S])=>{const I=this.locker.lock();return u.pipe(o.filter(P=>!P),o.first(),o.map(()=>({...S,animation:"snap"})),o.finalize(()=>{I()}),o.takeUntil(l))}),o.share()),g=o.merge(s.layout$,a.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})),ge({navigationResolver:c,settings:t,context:i,spine:a}),o.map(S=>{const I={...S.navigation,meta:{triggeredBy:"restoration"}};return{...S,navigation:I}}),le({navigationResolver:c,settings:t,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),de({spine:a}),Pt({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:t,navigationResolver:c}),o.map(({navigation:S})=>S),o.share()),m=yn(i,this.navigationSubject,a),h=o.merge(p,l,m),f=S=>S.pipe(o.tap(([I,P])=>{Ln.info(`navigation updated from ${I.meta.triggeredBy} of type ${I.type}`,{previousNavigation:P,currentNavigation:I}),this.navigationSubject.next(I)})),b=S=>S.pipe(o.tap(([I,P])=>{const v=I.type==="scroll",M=I.meta.triggeredBy==="pagination",F=I.meta.triggeredBy==="restoration",R=$.isShallowEqual(P.position,I.position);if(v&&!F||M||R)return;const D={position:I.position,animation:I.animation};t.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(D):this.viewportController.navigate(D)}));h.pipe(o.withLatestFrom(this.navigationSubject),b,f,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const Cn=500;class Rn extends A{constructor(t,i,n,s,r,c){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(u=>{const l=this.locker.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(u)).pipe(o.debounceTime(Cn,o.animationFrameScheduler),o.first(),o.tap(()=>{const d=u.target,g=new q({x:d.scrollLeft/c.scaleFactor,y:d.scrollTop/c.scaleFactor});this.navigationSubject.next({animation:!1,type:"scroll",position:g})}),o.finalize(()=>{l()}))}));o.merge(a).pipe(o.takeUntil(this.destroy$)).subscribe()}}const An=e=>({x:-e.x,y:-e.y}),Dn=e=>e instanceof DOMMatrix?new T({x:-e.e,y:-e.f}):new T({x:-e.x,y:-e.y}),he=C.namespace("navigation/ViewportNavigator");class me extends A{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 c=this.spine.element$.pipe(o.filter(ct.isDefined),o.withLatestFrom(this.element$),o.tap(([d,g])=>{g.style.cssText=`
267
+ `;const n=e.cloneNode();n.src=e.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),t.appendChild(this.element),this.isZooming$.next(!0)}}exit(){this.element?.remove(),this.element=void 0,this.currentPosition={x:0,y:0},this.currentScale=1,this.isZooming$.next(!1)}moveAt(e){this.element?.querySelector("img")?.style.setProperty("transform",`translate3d(${e.x}px, ${e.y}px, 0px) scale3d(${this.currentScale}, ${this.currentScale}, 1)`),this.currentPosition=e}scaleAt(e){const t=Math.max(.01,e);this.element?.querySelector("img")?.style.setProperty("transform",`translate3d(${this.currentPosition.x}px, ${this.currentPosition.y}px, 0px) scale3d(${t}, ${t}, 1)`),this.currentScale=t}}const st=({newScale:i,oldScale:e,screenSize:t,scrollOffset:n})=>{const s=t*i/2-t+t/2,r=t*e/2-t+t/2,c=i/e,a=n-r;return Math.max(s+a*c,0)};class gn extends ot{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 e=this.reader.spine.element;e&&(e.style.transformOrigin="0 0"),this.isZooming$.next(!0)}exit(){this.scaleAt(1),this.isZooming$.next(!1)}moveAt(){}scaleAt(e){const t=this.reader.spine.element,n=this.reader.navigation.scrollNavigationController.value.element;if(!t||!n)return;const s=Math.ceil(e*100)/100,r=Math.max(s,1),c=t.getBoundingClientRect().width/t.offsetWidth,a=n.scrollTop;t.style.transform=`scale(${r})`,n.scrollLeft=st({newScale:r,oldScale:c,pageSize:n.clientWidth,screenSize:t.offsetWidth,scrollOffset:n.scrollLeft}),n.scrollTop=st({newScale:r,oldScale:c,pageSize:n.clientHeight,screenSize:t.offsetHeight,scrollOffset:a}),this.currentScale=s}}const hn=i=>e=>{const t=i(e),n=new pn(t),s=new gn(t),r=new o.BehaviorSubject(s);return{...t,destroy:()=>{n.exit(),s.exit(),r.complete(),t.destroy()},zoom:{enter:l=>{const u=t.settings.values.computedPageTurnMode==="scrollable"?s:n;r.next(u),u.enter(l)},scaleAt:l=>r.getValue().scaleAt(l),moveAt:l=>r.getValue().moveAt(l),exit:()=>r.getValue().exit(),get currentPosition(){return r.getValue().currentPosition},get currentScale(){return r.getValue().currentScale},isZooming$:r.pipe(o.switchMap(l=>l.isZooming$)),get zoomContainerElement(){return r.getValue().element},get isZooming(){return r.getValue().isZooming$.getValue()}}}},rt=i=>i?.renditionLayout==="pre-paginated"||i?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class Y extends o.Observable{constructor(e){super(t=>this.stateSubject.pipe(o.takeUntil(this.destroy$)).subscribe(t)),this.destroy$=new o.Subject,this.stateSubject=new o.BehaviorSubject(e)}next(e){this.stateSubject.next(e)}mergeCompare(e){const t={...this.value,...e};P.isShallowEqual(this.value,t)||this.stateSubject.next(t)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(G(e)):this.stateSubject.pipe(o.map(t=>t[e]),o.distinctUntilChanged(P.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this.destroy$.complete()}}class mn{constructor(){this.navigationSubject=new o.ReplaySubject(1),this.viewportStateSubject=new o.BehaviorSubject("free"),this.paginationSubject=new o.ReplaySubject,this.navigationIsLockedSubject=new o.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(o.distinctUntilChanged(),o.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(o.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(o.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}const fn=({manifest:i,visibleAreaRect:e,forceSinglePageMode:t})=>{const{height:n,width:s}=e,r=s>n;return t||i?.renditionFlow==="scrolled-continuous"?!1:!r&&i?.renditionSpread==="portrait"?!0:r&&(i?.renditionSpread===void 0||i?.renditionSpread==="auto"||i?.renditionSpread==="landscape"||i?.renditionSpread==="both")};class at extends Y{constructor(){super({marginBottom:0,marginTop:0,calculatedInnerMargin:0,assumedRenditionLayout:"reflowable",visibleAreaRect:{width:0,height:0,x:0,y:0}}),this.bridgeEvent=new mn,this.destroy$=new o.Subject,this.state$=this.pipe(y.distinctUntilChanged(P.isShallowEqual)),this.manifest$=this.pipe(y.map(e=>e.manifest),y.filter(k),y.distinctUntilChanged()),this.hasVerticalWriting$=this.pipe(y.map(e=>e.hasVerticalWriting),y.filter(k),y.distinctUntilChanged()),this.isUsingSpreadMode$=this.pipe(y.map(e=>e.isUsingSpreadMode),y.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,n=e.manifest??t.manifest,s=e.forceSinglePageMode??t.forceSinglePageMode,r=e.visibleAreaRect??t.visibleAreaRect,c=e.marginTop??t.marginTop,a=e.marginBottom??t.marginBottom,l={...t,...e,...e.visibleAreaRect&&{...e.visibleAreaRect,height:e.visibleAreaRect.height-c-a},...e.manifest&&{isFullyPrePaginated:rt(n),assumedRenditionLayout:n?.renditionLayout??"reflowable"},isUsingSpreadMode:fn({manifest:n,visibleAreaRect:r,forceSinglePageMode:s})};P.isShallowEqual(l,t)||this.next(l)}get state(){return this.value}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}getPageSize(){const{isUsingSpreadMode:e,visibleAreaRect:t}=this.value;return{width:e?t.width/2:t.width,height:t.height}}}class ct extends Y{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),o.merge(e.state$,t.values$).pipe(o.withLatestFrom(e.state$),o.map(([,{hasVerticalWriting:n}])=>{const s=e.manifest;return{hasVerticalWriting:n,renditionFlow:s?.renditionFlow,renditionLayout:s?.renditionLayout,computedPageTurnMode:t.values.computedPageTurnMode}}),o.distinctUntilChanged(P.isShallowEqual),o.map(({hasVerticalWriting:n,renditionFlow:s,renditionLayout:r,computedPageTurnMode:c})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||c==="scrollable"?["none"]:n?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:c==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class lt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(t=>t!==e),this.destroy(e.name,void 0,e)}register(e,t){const n={name:e,runFn:t};return this._hooks.push(n),()=>{this.deregister(n)}}execute(e,t,n){return this._hooks.filter(c=>e===c.name).map(c=>{let a=()=>o.of(void 0);const l=new o.Subject,u=g=>{a=g},d=()=>(l.next(),l.complete(),a()??o.of(void 0)),p=c.runFn({...n,destroy$:l.asObservable(),destroy:u});return this._hookExecutions.push({name:e,id:t,destroyFn:d,ref:c}),p})}destroy(e,t,n){const s=this._hookExecutions.filter(c=>n&&c.ref===n||e===c.name&&(!t||t&&t===c.id));this._hookExecutions=this._hookExecutions.filter(c=>!s.includes(c));const r=s.map(({destroyFn:c})=>c());return o.combineLatest(r)}}class we{constructor(){this.isLockedSubject=new o.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(o.map(e=>!!e),o.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Sn=()=>i=>i.pipe(o.map(({navigation:e,pagination:t,...n})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...n}))),yn=(i,e,t)=>i.bridgeEvent.pagination$.pipe(o.withLatestFrom(e),o.filter(([n,s])=>n.navigationId===s.id),o.switchMap(([n,s])=>(t.spineItemsManager.get(s.spineItem)?.isReady$.pipe(o.first())??o.of(!1)).pipe(o.filter(c=>c),o.map(()=>({pagination:n,navigation:s})))),Sn(),o.distinctUntilChanged((n,s)=>n.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:n})=>({...n,meta:{triggeredBy:"pagination"}}))),bn=i=>i.pipe(o.map(([e,t])=>{const n={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...e,position:e.position?$.from(e.position):void 0};return{previousNavigation:t,navigation:n}})),In=({navigationResolver:i})=>e=>e.pipe(o.map(t=>{if(t.navigation.cfi){const n=i.getNavigationForCfi(t.navigation.cfi);if(n)return{...t,navigation:{...t.navigation,position:n}}}return t})),wn=({navigation:i,previousNavigation:e,settings:t})=>i.directionFromLastNavigation?i.directionFromLastNavigation:i.url!==void 0||i.cfi!==void 0?"anchor":e.spineItem===void 0||i.spineItem||!i.position?"forward":t.values.computedPageTurnDirection==="vertical"?i.position.y>e.position.y||i.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(i.position.x)>Math.abs(e.position.x)||i.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",vn=({context:i,settings:e})=>t=>t.pipe(o.map(({navigation:n,previousNavigation:s})=>{const r=wn({navigation:n,previousNavigation:s,settings:e}),c={...n,directionFromLastNavigation:r};return{previousNavigation:s,navigation:c,direction:r}})),Pn=({spineItemsManager:i,navigationResolver:e})=>t=>t.pipe(o.map(({navigation:n,...s})=>{const r=i.get(n.spineItem);return n.position?{navigation:{...n,position:e.getAdjustedPositionWithSafeEdge(n.position)},...s}:r?{navigation:{...n,position:e.getNavigationForSpineIndexOrId(r)},...s}:{navigation:{...n,position:new $({x:0,y:0})},...s}})),ut=({settings:i,spineItemsManager:e,navigationResolver:t,spineLocator:n})=>s=>{const r=c=>{const{position:a,spineItem:l,cfi:u,directionFromLastNavigation:d}=c,{navigationSnapThreshold:p,computedPageTurnMode:g}=i.values;if(l!==void 0){const m=e.get(l);if(m)return m}if(typeof l=="number")return l>e.items.length-1?e.get(e.items.length-1):e.get(0);if(u){const m=e.getSpineItemFromCfi(u);if(m)return m}if(a&&g==="controlled"){const{beginIndex:m,endIndex:h}=n.getVisibleSpineItemsFromPosition({position:a,threshold:p,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?h:m)??m,b=e.get(f);if(!b)return;const{endPageIndex:S,beginPageIndex:w}=n.getVisiblePagesFromViewportPosition({position:a,spineItem:b,threshold:p,restrictToScreen:!1})??{},v=(d==="forward"||d==="anchor"?S:w)??0,T=t.getNavigationForSpineItemPage({pageIndex:v,spineItemId:b}),C=n.getVisibleSpineItemsFromPosition({position:T,threshold:p,restrictToScreen:!1}),F=d==="forward"||d==="anchor"?C?.beginIndex:C?.endIndex;return e.get(F)}return a&&g==="scrollable"?n.getSpineItemFromPosition(a):e.get(0)};return s.pipe(o.map(({navigation:c,...a})=>{const l=r(c);return{navigation:{...c,spineItem:e.getSpineItemIndex(l)},...a}}))},dt=({spine:i})=>e=>e.pipe(o.switchMap(({navigation:t,...n})=>{const s=i.getSpineItemSpineLayoutInfo(t.spineItem),r=i.spineItemsManager.get(t.spineItem);return(r?.isReady$??o.of(!1)).pipe(o.first(),o.map(c=>({navigation:{...t,spineItemHeight:s?.height,spineItemWidth:s?.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r?.isUsingVerticalWriting(),spineItemIsReady:c},...n})))})),ve=({settings:i,spineItemsManager:e,spineLocator:t,navigationResolver:n})=>s=>{const r=c=>{const{navigationSnapThreshold:a,computedPageTurnMode:l}=i.values,u=e.get(c.spineItem);if(!(!u||!c.position)){if(l==="controlled"){const{endPageIndex:d,beginPageIndex:p}=t.getVisiblePagesFromViewportPosition({position:c.position,spineItem:u,threshold:a,restrictToScreen:!1})??{},g=(c.directionFromLastNavigation==="forward"||c.directionFromLastNavigation==="anchor"?d:p)??0,m=n.getNavigationForSpineItemPage({pageIndex:g,spineItemId:u}),h=t.getVisiblePagesFromViewportPosition({position:m,spineItem:u,threshold:{type:"percentage",value:0},restrictToScreen:!0}),f=(c.directionFromLastNavigation==="forward"||c.directionFromLastNavigation==="anchor"?h?.beginPageIndex:h?.endPageIndex)??0;return t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:u})}return t.getSpineItemPositionFromSpinePosition(c.position,u)}};return s.pipe(o.map(({navigation:c,...a})=>({navigation:{...c,positionInSpineItem:r(c)},...a})))},$n=({navigationResolver:i})=>e=>e.pipe(o.map(t=>{if(t.navigation.url){const n=i.getNavigationForUrl(t.navigation.url);if(n)return{...t,navigation:{...t.navigation,position:n.position,spineItem:n.spineItemId}}}return t})),Tn=({spineLocator:i,navigation:e,navigationResolver:t,spineItemsManager:n,spine:s})=>{const r=n.get(e.spineItem);return r?r.isReady$.pipe(o.first(),o.map(c=>{const a=s.getSpineItemSpineLayoutInfo(r),l=i.isPositionWithinSpineItem(e.position,r),u=a.width-(e.spineItemWidth??0),d=a.height-(e.spineItemHeight??0),p=u!==0||d!==0;if(e.url!==void 0&&(u||d||c&&!e.spineItemIsReady)){const m=t.getNavigationForUrl(e.url);if(m)return m.position}const g=e.cfi??e.paginationBeginCfi;if(g!==void 0&&!ne(g)&&(u||d||c&&!e.spineItemIsReady)){const m=t.getNavigationForCfi(g);if(m)return m}if(l&&p&&e.directionFromLastNavigation==="backward"){const m=new M({x:(e.positionInSpineItem?.x??0)+u,y:(e.positionInSpineItem?.y??0)+d});return t.getNavigationFromSpineItemPosition({spineItem:r,spineItemPosition:m})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const m=i.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return t.getNavigationForSpineItemPage({pageIndex:m,spineItemId:r})}return l?t.getNavigationForPosition(e.position):t.getNavigationForSpineIndexOrId(r)})):o.of(new $({x:0,y:0}))},Mn=({navigation:i,spineLocator:e,spineItemsManager:t,settings:n,navigationResolver:s,spine:r})=>{const{spineItem:c}=i,a=t.get(c);if(!a)return new $({x:0,y:0});const{height:l,top:u}=r.getSpineItemSpineLayoutInfo(a),d=e.isPositionWithinSpineItem(i.position,a),p=i.positionInSpineItem??new M({y:0,x:0});if(n.values.computedPageTurnDirection==="vertical"){if(u===i.spineItemTop&&l===i.spineItemHeight&&d)return i.position;if(u===i.spineItemTop&&l===i.spineItemHeight&&!d)return s.getNavigationForSpineIndexOrId(a);if(u!==i.spineItemTop){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(i.positionInSpineItem??new M({x:0,y:0}),a);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:a})}if(u===i.spineItemTop&&l!==i.spineItemHeight){const g=(i.spineItemHeight??p.y)-p.y,m=new M({y:i.directionFromLastNavigation==="backward"?l-g:p.y,x:i.position.x});if(d){const h=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(m,a);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:h,spineItem:a})}if(!d){if(!(i.position.y<u)){const f=new M({y:l-g,x:i.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,a),spineItem:a})}return s.getNavigationForSpineIndexOrId(a)}}}return i.position},Fn=({navigation:i,spineItemsManager:e,settings:t,spineLocator:n,navigationResolver:s,spine:r})=>t.values.computedPageTurnMode==="scrollable"?o.of(Mn({navigation:i,spineLocator:n,navigationResolver:s,settings:t,spineItemsManager:e,spine:r})):Tn({navigation:i,spineLocator:n,navigationResolver:s,spineItemsManager:e,spine:r}),pt=({settings:i,navigationResolver:e,context:t,spine:n})=>s=>s.pipe(o.switchMap(r=>Fn({spineLocator:n.locator,navigation:r.navigation,navigationResolver:e,settings:i,spineItemsManager:n.spineItemsManager,spineItemLocator:n.locator.spineItemLocator,spine:n}).pipe(o.map(c=>({...r,navigation:{...r.navigation,position:c}}))))),Ln=L.namespace("navigation/InternalNavigator");class gt extends E{constructor(e,t,n,s,r,c,a,l){super(),this.settings=e,this.context=t,this.userNavigation$=n,this.viewportController=s,this.scrollNavigationController=r,this.navigationResolver=c,this.spine=a,this.isUserLocked$=l,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new $({x:0,y:0}),meta:{triggeredBy:"user"},spineItemIsReady:!1,type:"api",id:Symbol()}),this.navigated$=this.navigationSubject.pipe(o.skip(1)),this.navigation$=this.navigationSubject.pipe(o.map(({position:S,id:w})=>({position:S,id:w})),o.distinctUntilChanged(({position:S,...w},{position:v,...T})=>P.isShallowEqual(w,T)&&P.isShallowEqual(S,v)),o.shareReplay(1)),this.locker=new we;const u=n.pipe(o.withLatestFrom(this.navigationSubject),bn,$n({navigationResolver:c}),In({navigationResolver:c}),vn({context:t,settings:e}),ut({navigationResolver:c,settings:e,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),ve({navigationResolver:c,settings:e,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),dt({spine:a})).pipe(Pn({navigationResolver:c,spineItemsManager:a.spineItemsManager}),o.withLatestFrom(l),o.switchMap(([S,w])=>{const v=S.navigation.cfi||S.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return o.of(S).pipe(v?o.identity:pt({navigationResolver:c,settings:e,spine:a,context:t}))}),ve({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:e,navigationResolver:c}),o.map(S=>S.navigation),o.share()),d=u.pipe(o.withLatestFrom(l),o.filter(([,S])=>S),o.switchMap(([S])=>{const w=this.locker.lock();return l.pipe(o.filter(v=>!v),o.first(),o.map(()=>({...S,animation:"snap"})),o.finalize(()=>{w()}),o.takeUntil(u))}),o.share()),p=o.merge(s.layout$,a.layout$).pipe(o.switchMap(()=>o.of(null).pipe(o.switchMap(()=>l.pipe(o.filter(S=>!S),o.first())),o.map(()=>({...this.navigationSubject.getValue(),animation:!1})),o.takeUntil(o.merge(d,u))))),g=o.merge(p,d).pipe(o.map(S=>({navigation:S})),pt({navigationResolver:c,settings:e,context:t,spine:a}),o.map(S=>{const w={...S.navigation,meta:{triggeredBy:"restoration"}};return{...S,navigation:w}}),ut({navigationResolver:c,settings:e,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),dt({spine:a}),ve({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:e,navigationResolver:c}),o.map(({navigation:S})=>S),o.share()),m=yn(t,this.navigationSubject,a),h=o.merge(g,u,m),f=S=>S.pipe(o.tap(([w,v])=>{Ln.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),b=S=>S.pipe(o.tap(([w,v])=>{const T=w.type==="scroll",C=w.meta.triggeredBy==="pagination",F=w.meta.triggeredBy==="restoration",R=P.isShallowEqual(v.position,w.position);if(T&&!F||C||R)return;const D={position:w.position,animation:w.animation};e.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(D):this.viewportController.navigate(D)}));h.pipe(o.withLatestFrom(this.navigationSubject),b,f,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const Cn=500;class En extends E{constructor(e,t,n,s,r,c){super(),this.settings=e,this.context=t,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(l=>{const u=this.locker.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(l)).pipe(o.debounceTime(Cn,o.animationFrameScheduler),o.first(),o.tap(()=>{const d=l.target,p=new q({x:d.scrollLeft/c.scaleFactor,y:d.scrollTop/c.scaleFactor});this.navigationSubject.next({animation:!1,type:"scroll",position:p})}),o.finalize(()=>{u()}))}));o.merge(a).pipe(o.takeUntil(this.destroy$)).subscribe()}}const Rn=i=>({x:-i.x,y:-i.y}),An=i=>i instanceof DOMMatrix?new $({x:-i.e,y:-i.f}):new $({x:-i.x,y:-i.y}),ht=L.namespace("navigation/ViewportNavigator");class mt extends E{constructor(e,t,n,s,r){super(),this.settings=e,this.hookManager=t,this.context=n,this.spine=s,this.viewport=r,this.navigateSubject=new o.Subject,this.element$=new o.BehaviorSubject(document.createElement("div"));const c=this.spine.element$.pipe(o.filter(ce.isDefined),o.withLatestFrom(this.element$),o.tap(([d,p])=>{p.style.cssText=`
268
268
  height: 100%;
269
269
  width: 100%;
270
270
  position: relative;
271
- `,g.className=`${_}-controlled-navigator`,g.innerHTML="",g.appendChild(d),this.viewport.value.element.appendChild(g),this.element$.next(g)})),a=t.watch(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),u=o.combineLatest([a,this.element$]).pipe(o.tap(([,d])=>{t.values.computedPageTurnMode==="scrollable"?d.style.display="contents":d.style.display="block"}));this.layout$=u.pipe(o.tap(()=>{he.info("layout",t.values)}),o.share());const l=this.navigateSubject.pipe(o.tap(d=>{he.info("Navigation requested",d)}));this.isNavigating$=l.pipe(o.map(({animation:d,position:g})=>({type:"manualAdjust",shouldAnimate:!(!d||d==="turn"&&t.values.computedPageTurnAnimation==="none"),animation:d,position:g})),o.switchMap(d=>{const g=this.element$.getValue();return g.style.setProperty("transition","none"),g.style.setProperty("opacity","1"),o.merge(o.of(!0),o.of(null).pipe(o.mergeMap(()=>{if((d==null?void 0:d.type)!=="manualAdjust")return o.of(!1);const p=d.animation==="snap"?t.values.snapAnimationDuration:t.values.computedPageTurnAnimationDuration,m=d.animation==="snap"?"slide":t.values.computedPageTurnAnimation;return o.of(d).pipe(d.shouldAnimate?o.delay(1,o.animationFrameScheduler):o.identity,o.tap(h=>{const f=this.element$.getValue();h.shouldAnimate?m==="fade"?(f.style.setProperty("transition",`opacity ${p/2}ms`),f.style.setProperty("opacity","0")):(d.animation==="snap"||m==="slide")&&(f.style.setProperty("transition",`transform ${p}ms`),f.style.setProperty("opacity","1")):(f.style.setProperty("transition","none"),f.style.setProperty("opacity","1"))}),o.tap(h=>{m!=="fade"&&this.setViewportPosition(h.position)}),d.shouldAnimate?o.delay(p/2,o.animationFrameScheduler):o.identity,o.tap(h=>{const f=this.element$.getValue();m==="fade"&&(this.setViewportPosition(h.position),f.style.setProperty("opacity","1"))}),d.shouldAnimate?o.delay(p/2,o.animationFrameScheduler):o.identity,o.tap(h=>{m==="fade"&&this.setViewportPosition(h.position)}))}),o.map(()=>!1)))}),o.startWith(!1),o.shareReplay(1)),o.merge(c,this.isNavigating$,this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}setViewportPosition(t){const i=this.element$.getValue(),n=An(t);i.style.transform=`translate(${n.x}px, ${n.y}px)`,this.hookManager.execute("onViewportOffsetAdjust",void 0,{})}navigate(t){this.navigateSubject.next(t)}get viewportPosition(){const t=this.element$.getValue(),i=window.getComputedStyle(t),n=i.transform||i.webkitTransform;if(!n||n==="none")return new T({x:0,y:0});const s=new DOMMatrix(n);return Dn(s)}}class fe extends Y{constructor(t,i,n,s,r){super({element:void 0}),this.viewport=t,this.settings=i,this.hookManager=n,this.spine=s,this.context=r,this.navigateSubject=new o.Subject,this.scrollingSubject=new o.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:g})=>{const p=this.value.element;this.scrollingSubject.next(!0);const m=this.viewport.scaleFactor,h=new T({x:g.x*m,y:g.y*m});p==null||p.scrollTo({left:h.x,top:h.y,behavior:"instant"}),o.timer(1).pipe(o.tap(()=>{this.scrollingSubject.next(!1)}),o.takeUntil(o.merge(this.scrollingSubject.pipe(o.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const c=this.context.pipe(G(["rootElement"]),o.tap(({rootElement:g})=>{if(!g)return;const p=document.createElement("div");p.style.cssText=`
271
+ `,p.className=`${_}-controlled-navigator`,p.innerHTML="",p.appendChild(d),this.viewport.value.element.appendChild(p),this.element$.next(p)})),a=e.watch(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),l=o.combineLatest([a,this.element$]).pipe(o.tap(([,d])=>{e.values.computedPageTurnMode==="scrollable"?d.style.display="contents":d.style.display="block"}));this.layout$=l.pipe(o.tap(()=>{ht.info("layout",e.values)}),o.share());const u=this.navigateSubject.pipe(o.tap(d=>{ht.info("Navigation requested",d)}));this.isNavigating$=u.pipe(o.map(({animation:d,position:p})=>({type:"manualAdjust",shouldAnimate:!(!d||d==="turn"&&e.values.computedPageTurnAnimation==="none"),animation:d,position:p})),o.switchMap(d=>{const p=this.element$.getValue();return p.style.setProperty("transition","none"),p.style.setProperty("opacity","1"),o.merge(o.of(!0),o.of(null).pipe(o.mergeMap(()=>{if(d?.type!=="manualAdjust")return o.of(!1);const g=d.animation==="snap"?e.values.snapAnimationDuration:e.values.computedPageTurnAnimationDuration,m=d.animation==="snap"?"slide":e.values.computedPageTurnAnimation;return o.of(d).pipe(d.shouldAnimate?o.delay(1,o.animationFrameScheduler):o.identity,o.tap(h=>{const f=this.element$.getValue();h.shouldAnimate?m==="fade"?(f.style.setProperty("transition",`opacity ${g/2}ms`),f.style.setProperty("opacity","0")):(d.animation==="snap"||m==="slide")&&(f.style.setProperty("transition",`transform ${g}ms`),f.style.setProperty("opacity","1")):(f.style.setProperty("transition","none"),f.style.setProperty("opacity","1"))}),o.tap(h=>{m!=="fade"&&this.setViewportPosition(h.position)}),d.shouldAnimate?o.delay(g/2,o.animationFrameScheduler):o.identity,o.tap(h=>{const f=this.element$.getValue();m==="fade"&&(this.setViewportPosition(h.position),f.style.setProperty("opacity","1"))}),d.shouldAnimate?o.delay(g/2,o.animationFrameScheduler):o.identity,o.tap(h=>{m==="fade"&&this.setViewportPosition(h.position)}))}),o.map(()=>!1)))}),o.startWith(!1),o.shareReplay(1)),o.merge(c,this.isNavigating$,this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}setViewportPosition(e){const t=this.element$.getValue(),n=Rn(e);t.style.transform=`translate(${n.x}px, ${n.y}px)`,this.hookManager.execute("onViewportOffsetAdjust",void 0,{})}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.element$.getValue(),t=window.getComputedStyle(e),n=t.transform||t.webkitTransform;if(!n||n==="none")return new $({x:0,y:0});const s=new DOMMatrix(n);return An(s)}}class ft extends Y{constructor(e,t,n,s,r){super({element:void 0}),this.viewport=e,this.settings=t,this.hookManager=n,this.spine=s,this.context=r,this.navigateSubject=new o.Subject,this.scrollingSubject=new o.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:p})=>{const g=this.value.element;this.scrollingSubject.next(!0);const m=this.viewport.scaleFactor,h=new $({x:p.x*m,y:p.y*m});g?.scrollTo({left:h.x,top:h.y,behavior:"instant"}),o.timer(1).pipe(o.tap(()=>{this.scrollingSubject.next(!1)}),o.takeUntil(o.merge(this.scrollingSubject.pipe(o.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const c=this.context.pipe(G(["rootElement"]),o.tap(({rootElement:p})=>{if(!p)return;const g=document.createElement("div");g.style.cssText=`
272
272
  height: 100%;
273
273
  width: 100%;
274
274
  position: relative;
275
275
  overflow-y: scroll;
276
276
  overflow-x: hidden;
277
- `,p.className=`${_}-scroll-navigator`,p.appendChild(this.viewport.value.element),g.appendChild(p),this.update({element:p})})),a=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.filter(k),o.switchMap(g=>K(g))),s.element$.pipe(o.filter(k),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(k),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(([,m])=>!m),o.map(([m])=>m))))),o.share()),o.merge(c,a,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;if(!t)return new T({x:0,y:0});const i=this.viewport.scaleFactor;return new T({x:t.scrollLeft/i,y:t.scrollTop/i})}}const st=(e,t,i)=>{const n=i-e,s=i*(t*e)/(i||1);return Math.max(0,Math.min(n,s))},vt=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),rt=(e,t,i)=>{const n=vt(i,t),s=[...Array(n)].map((r,c)=>c*t);return e>=n*t?s[s.length-1]||0:s.find(r=>e<r+t)||0},Se=(e,t,i)=>{const n=[...Array(i)].map((s,r)=>r*t);return e<=0||i===0?0:e>=i*t?i-1:n.findIndex(s=>e<s+t)??0},Nn=({itemWidth:e,itemHeight:t,spineItemPosition:i})=>new L({x:Math.min(e,Math.max(0,i.x)),y:Math.min(t,Math.max(0,i.y))}),ye=({itemHeight:e,itemWidth:t,isUsingVerticalWriting:i,pageWidth:n,pageHeight:s,pageTurnDirection:r,pageTurnMode:c})=>r==="vertical"&&c==="scrollable"?1:i||r==="vertical"?vt(e,s):vt(t,n),be=({itemWidth:e,itemHeight:t,position:i,isUsingVerticalWriting:n,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a,isRTL:u})=>{const d=Nn({spineItemPosition:i,itemHeight:t,itemWidth:e}).x,g=ye({isUsingVerticalWriting:n,itemHeight:t,itemWidth:e,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a});if(n)return Se(i.y,r,g);const p=Se(d,s,g);return u?g-1-p:p},On=({pageIndex:e,itemLayout:t,context:i,isUsingVerticalWriting:n})=>{if(n){const r=st(i.getPageSize().height,e,t.height);return new L({x:0,y:r})}const s=st(i.getPageSize().width,e,t.width);return i.isRTL()?new L({x:t.width-s-i.getPageSize().width,y:0}):new L({x:s,y:0})},we=({context:e,settings:t})=>{const i=(c,a,u)=>{var p;let l;if((c==null?void 0:c.nodeName)==="img"||(c==null?void 0:c.textContent)===""&&c.nodeType===Node.ELEMENT_NODE)l=c.getBoundingClientRect().x;else if(c){const m=c?ze(c,a):void 0;l=(m==null?void 0:m.getBoundingClientRect().x)||l}const d=((p=u.layout.layoutInfo)==null?void 0:p.width)||0,g=e.getPageSize().width;if(l!==void 0){const m=rt(l,g,d);return new L({x:m,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:a})=>On({context:e,isUsingVerticalWriting:!!a.isUsingVerticalWriting(),itemLayout:a.layout.layoutInfo,pageIndex:c}),getSpineItemPageIndexFromPosition:c=>be({...c,isRTL:e.isRTL(),pageWidth:e.getPageSize().width,pageHeight:e.getPageSize().height,pageTurnDirection:t.values.computedPageTurnDirection,pageTurnMode:t.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,a,u)=>{const l=i(c,a,u),{height:d,width:g}=u.layout.layoutInfo;return l?be({isUsingVerticalWriting:!!u.isUsingVerticalWriting(),position:l,itemHeight:d,itemWidth:g,isRTL:e.isRTL(),pageWidth:e.getPageSize().width,pageHeight:e.getPageSize().height,pageTurnDirection:t.values.computedPageTurnDirection,pageTurnMode:t.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,a)=>{const{width:u,height:l}=a.layout.layoutInfo;return new L({x:rt(c.x,e.getPageSize().width,u),y:rt(c.y,e.getPageSize().height,l)})},getSpineItemPagePositionFromSpineItemPosition:(c,a,u)=>{const{width:l,height:d}=u.layout.layoutInfo,g=e.getPageSize().width,p=e.getPageSize().height;if(!!u.isUsingVerticalWriting()){const f=st(p,a,d);return new tt({x:c.x,y:c.y-f})}const h=st(g,a,l);if(e.isRTL()){const f=l-(a+1)*g;return new tt({x:c.x-Math.max(0,f),y:c.y})}return new tt({x:c.x-h,y:c.y})}}},Vn=({context:e,settings:t})=>{const i=we({context:e,settings:t});return{getNavigationForLastPage:c=>{const a=c.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:a-1,spineItem:c})},getNavigationForPosition:(c,a)=>i.getSpineItemClosestPositionFromUnsafePosition(a,c),getNavigationFromNode:(c,a,u)=>i.getSpineItemPositionFromNode(a,u,c)||new L({x:0,y:0})}},V=({position:{x:e,y:t},pageSizeWidth:i,visibleAreaRectWidth:n})=>{const r=e%n!==0?e-i:e;return new T({x:r,y:t})},Ie=({position:e,isRTL:t,pageSizeHeight:i,spineItemsManager:n,visibleAreaRectWidth:s,spine:r})=>{const c=n.get(n.items.length-1),a=r.getSpineItemSpineLayoutInfo(c||0),u=a.bottom-i,l=Math.min(Math.max(0,e.y),u);if(t)return new T({x:Math.max(Math.min(0,e.x),a.left),y:l});const d=a.right-s;return new T({x:Math.min(Math.max(0,e.x),d),y:l})},$t=({viewportPosition:e,spineLocator:t,context:i,spineItemNavigationResolver:n})=>{const s=t.getSpineItemFromPosition(e);if(s){const r=t.getSpineItemPositionFromSpinePosition(e,s),c=n.getNavigationForPosition(s,r),a=t.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:s});return V({position:a,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})}return new T({x:0,y:0})},Un=({pageIndex:e,spineItemsManager:t,spineItemId:i,context:n,spineLocator:s,spineItemNavigationResolver:r})=>{const c=t.get(i);if(!c){const l=e*n.getPageSize().width;return $t({viewportPosition:new T({x:l,y:0}),context:n,spineItemNavigationResolver:r,spineLocator:s})}const a=s.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:e,spineItem:c}),u=s.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:c});return V({position:u,pageSizeWidth:n.getPageSize().width,visibleAreaRectWidth:n.state.visibleAreaRect.width})},kn=({anchor:e,spineItem:t,context:i})=>{var a;const n=((a=t.layout.layoutInfo)==null?void 0:a.width)||0,s=i.getPageSize().width,r=t.getBoundingRectOfElementFromSelector(e),c=(r==null?void 0:r.x)||0;return rt(c,s,n)},Wn=({anchor:e,context:t,spineItem:i,spineLocator:n})=>{const s=kn({anchor:e,spineItem:i,context:t});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new L({x:s,y:0}),spineItem:i})},En=({anchor:e,spineItem:t,spineLocator:i,context:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const c=Wn({anchor:e,context:n,spineItem:t,spineLocator:i});return V({position:c,pageSizeWidth:s,visibleAreaRectWidth:r})},zn=({context:e,spineItemsManager:t,spineLocator:i,url:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{var c;try{const a=n instanceof URL?n:new URL(n),u=`${a.origin}${a.pathname}`,l=(c=e.manifest)==null?void 0:c.spineItems.find(d=>d.href===u);if(l){const d=t.get(l.id);if(d){const g=En({anchor:a.hash,spineItem:d,context:e,spineLocator:i,pageSizeWidth:s,visibleAreaRectWidth:r});return{position:V({position:g,pageSizeWidth:s,visibleAreaRectWidth:r}),spineItemId:l.id}}}return}catch(a){console.error(a);return}},Hn=({spineItem:e,spineItemPosition:t,spineLocator:i,spineItemLocator:n,context:s})=>{const r=n.getSpineItemClosestPositionFromUnsafePosition(t,e),c=i.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:e});return V({position:c,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},Bn="spineNavigator",_n=({context:e,spineItemsManager:t,locator:i,settings:n,spine:s})=>{const r=Vn({context:e,settings:n});return{getNavigationForUrl:p=>zn({context:e,spineItemsManager:t,spineLocator:i,url:p,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width}),getNavigationForSpineItemPage:p=>Un({...p,context:e,spineItemsManager:t,spineItemNavigationResolver:r,spineLocator:i}),getNavigationFromSpineItemPosition:p=>Hn({...p,spineItemLocator:i.spineItemLocator,spineLocator:i,context:e}),getNavigationForCfi:p=>{const m=t.getSpineItemFromCfi(p),{node:h,offset:f=0}=bt({cfi:p,spineItemsManager:t});if(!m){C.warn(Bn,`unable to detect item id from cfi ${p}`);return}const b=h?r.getNavigationFromNode(m,h,f):new L({x:0,y:0}),S=i.getSpinePositionFromSpineItemPosition({spineItemPosition:b,spineItem:m});return V({position:S,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})},getNavigationForLastPage:p=>{const m=r.getNavigationForLastPage(p),h=i.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:p});return V({position:h,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})},getNavigationForSpineIndexOrId:p=>{const m=t.get(p);if(m){const h=i.getSpinePositionFromSpineItem(m);return V({position:h,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width})}return new T({x:0,y:0})},getNavigationForPosition:p=>$t({viewportPosition:p,context:e,spineItemNavigationResolver:r,spineLocator:i}),getMostPredominantNavigationForPosition:p=>{const m=n.values.computedPageTurnDirection,h=.5,f=m==="horizontal"?p.x+e.state.visibleAreaRect.width*h:0,b=m==="horizontal"?0:p.y+e.state.visibleAreaRect.height*h,S=Ie({position:new T({x:f,y:b}),isRTL:e.isRTL(),pageSizeHeight:e.getPageSize().height,visibleAreaRectWidth:e.state.visibleAreaRect.width,spineItemsManager:t,spine:s});return $t({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,spine:s}),isNavigationGoingForwardFrom:(p,m)=>n.values.computedPageTurnDirection==="vertical"?p.y>m.y:p.x>m.x,arePositionsDifferent:(p,m)=>p.x!==m.x||p.y!==m.y,getAdjustedPositionForSpread:p=>V({position:p,pageSizeWidth:e.getPageSize().width,visibleAreaRectWidth:e.state.visibleAreaRect.width}),spineItemNavigator:r}},qn=({spineItemsManager:e,context:t,hookManager:i,spine:n,settings:s,viewport:r})=>{const c=new o.Subject,a=new It,u=_n({context:t,settings:s,spineItemsManager:e,locator:n.locator,spine:n}),l=new me(s,i,t,n,r),d=new fe(r,s,i,n,t),g=new Rn(s,t,n,d,a,r),p=o.merge(c,g.navigation$),m=new pe(s,t,p,l,d,u,n,a.isLocked$),h=o.combineLatest([l.isNavigating$,d.isNavigating$,a.isLocked$,m.locker.isLocked$]).pipe(y.map(S=>S.some(I=>I)?"busy":"free"),y.distinctUntilChanged(),y.shareReplay(1));return{destroy:()=>{g.destroy(),l.destroy(),m.destroy()},getNavigation:()=>m.navigation,internalNavigator:m,scrollNavigationController:d,controlledNavigationController:l,locker:a,viewportState$:h,navigate:S=>{c.next(S)},lock(){return a.lock()},navigationResolver:u,navigation$:m.navigation$}};class Pe 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 ve extends A{constructor(t,i,n,s,r){super(),this.context=t,this.pagination=i,this.spineItemsManager=n,this.spine=s,this.spineItemLocator=r;const c=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const u=({spineItem:l,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:l,position:d,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,l])=>{const{position:d}=l,g=this.pagination.value,{beginIndex:p,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:.5}})??{},h=this.spineItemsManager.get(p),f=this.spineItemsManager.get(m);if(!h||!f)return;const b=g.beginCfi,S=g.endCfi,{beginPageIndex:I=0}=u({spineItem:h,position:d})??{},{endPageIndex:P=0}=u({spineItem:f,position:d})??{},v=b===void 0||nt(b)||g.beginSpineItemIndex!==p,M=g.endSpineItemIndex!==m||S===void 0||nt(S),F=v?E(h.item):b,R=M?E(f.item):S,D=h.numberOfPages,O=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:D,beginPageIndexInSpineItem:I,beginSpineItemIndex:p,endCfi:R,endNumberOfPagesInSpineItem:O,endPageIndexInSpineItem:P,endSpineItemIndex:m,navigationId:l.id})}))})),a=c.pipe(x(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),m=this.spineItemsManager.get(l);p===void 0||m===void 0||this.pagination.update({beginCfi:it({pageIndex:d,spineItem:p,spine:this.spine}),endCfi:it({pageIndex:g,spineItem:m,spine:this.spine})})}));o.merge(c,a).pipe(o.takeUntil(this.destroy$)).subscribe()}}class $e extends A{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=$.shallowMergeIfDefined(this.inputSettings,t),n=this.getOutputSettings(i),s=!$.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(ht(t),o.distinctUntilChanged($.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Yn extends $e{constructor(t,i){super(t),this.context=i;const n=o.combineLatest([i.hasVerticalWriting$,i.manifest$]).pipe(y.tap(()=>{this.update(this.values)})),s=this.values$.pipe(y.tap(({forceSinglePageMode:r})=>{i.update({forceSinglePageMode:r})}));o.merge(n,s).pipe(y.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"&&(C.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:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class xn extends A{constructor(t,i,n,s,r,c){super(),this.item=t,this.containerElement=i,this.context=n,this.hookManager=s,this.renderer=r,this.settings=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:a,minimumWidth:u})=>l=>l.pipe(o.map(d=>{var v;const g=$.isShallowEqual((v=this.lastLayout)==null?void 0:v.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:p,height:m}=g??{},{width:h=p,height:f=m}=d??{},{width:b,height:S}=this.context.getPageSize(),I=this.validateDimension(h??b,b,u),P=this.settings.values.computedPageTurnMode==="scrollable"?f??S:this.validateDimension(f??S,S,S);return this.lastLayout={width:I,height:P,pageSize:this.context.getPageSize()},this.containerElement.style.width=`${I}px`,this.containerElement.style.height=`${P}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:a,item:this.item,minimumWidth:u}),{width:I,height:P}})),this.layout=a=>{const u=Ut(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(a),u()},this.adjustPositionOfElement=({right:a,left:u,top:l})=>{a!==void 0?this.containerElement.style.right=`${a}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(a=>{const{blankPagePosition:u,minimumWidth:l,spreadPosition:d}=a;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(a),o.map(p=>({type:"end",data:p}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(a=>a.type==="end"),o.map(a=>a.data),o.share())}validateDimension(t,i,n){if(t<=0)return n;const s=Math.max(t,n),c=Math.ceil(s/i)*i;return Math.max(c,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 Xn extends B{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 Tt extends A{constructor(t,i,n,s,r,c){var l,d;super(),this.item=t,this.parentElement=i,this.context=n,this.settings=s,this.hookManager=r,this.index=c,this.getBoundingRectOfElementFromSelector=g=>{var m,h,f,b;const p=this.renderer.getDocumentFrame();if(p&&p instanceof HTMLIFrameElement&&g)return g.startsWith("#")?(h=(m=p.contentDocument)==null?void 0:m.getElementById(g.replace("#","")))==null?void 0:h.getBoundingClientRect():(b=(f=p.contentDocument)==null?void 0:f.querySelector(g))==null?void 0:b.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=Zn(i,t,r),i.appendChild(this.containerElement);const a=(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=a?a(u):new Xn(u),this.layout=new xn(t,this.containerElement,n,r,this.renderer,this.settings),this.isReady$=this.layout.layoutProcess$.pipe(y.withLatestFrom(this.renderer.isLoaded$),y.map(([g,p])=>!!(g.type==="end"&&p)),y.startWith(!1),y.distinctUntilChanged(),y.tap(g=>{this.containerElement.dataset.isReady=g.toString()}),y.shareReplay({refCount:!0,bufferSize:1})),this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(this.isReady$,this.layout.layout$).pipe(y.takeUntil(this.destroy$)).subscribe()}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(t=>t==="loaded"))}get unloaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(t=>t!=="idle"),y.switchMap(()=>this.renderer.state$.pipe(y.filter(t=>t==="idle"),y.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return ye({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.context.getPageSize().width,pageHeight:this.context.getPageSize().height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Zn=(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
+ `,g.className=`${_}-scroll-navigator`,g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),a=o.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=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 u=o.merge(s.element$.pipe(o.filter(k),o.switchMap(p=>K(p))),s.element$.pipe(o.filter(k),o.switchMap(p=>o.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(o.switchMap(()=>o.timer(10).pipe(o.map(()=>!1),o.startWith(!0))),o.distinctUntilChanged(),o.startWith(!1)),d=o.combineLatest([u,this.isScrolling$]).pipe(o.map(([p,g])=>p||g),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(k),o.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:g})=>g==="controlled"?o.NEVER:o.fromEvent(p,"scroll").pipe(o.withLatestFrom(d),o.filter(([,m])=>!m),o.map(([m])=>m))))),o.share()),o.merge(c,a,l).pipe(o.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.value.element;if(!e)return new $({x:0,y:0});const t=this.viewport.scaleFactor;return new $({x:e.scrollLeft/t,y:e.scrollTop/t})}}const se=(i,e,t)=>{const n=t-i,s=t*(e*i)/(t||1);return Math.max(0,Math.min(n,s))},Pe=(i,e)=>(e||0)===0||(i||0)===0?1:Math.floor(Math.max(1,i/e)),re=(i,e,t)=>{const n=Pe(t,e),s=[...Array(n)].map((r,c)=>c*e);return i>=n*e?s[s.length-1]||0:s.find(r=>i<r+e)||0},St=(i,e,t)=>{const n=[...Array(t)].map((s,r)=>r*e);return i<=0||t===0?0:i>=t*e?t-1:n.findIndex(s=>i<s+e)??0},Dn=({itemWidth:i,itemHeight:e,spineItemPosition:t})=>new M({x:Math.min(i,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),yt=({itemHeight:i,itemWidth:e,isUsingVerticalWriting:t,pageWidth:n,pageHeight:s,pageTurnDirection:r,pageTurnMode:c})=>r==="vertical"&&c==="scrollable"?1:t||r==="vertical"?Pe(i,s):Pe(e,n),bt=({itemWidth:i,itemHeight:e,position:t,isUsingVerticalWriting:n,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a,isRTL:l})=>{const d=Dn({spineItemPosition:t,itemHeight:e,itemWidth:i}).x,p=yt({isUsingVerticalWriting:n,itemHeight:e,itemWidth:i,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a});if(n)return St(t.y,r,p);const g=St(d,s,p);return l?p-1-g:g},Nn=({pageIndex:i,itemLayout:e,context:t,isUsingVerticalWriting:n})=>{if(n){const r=se(t.getPageSize().height,i,e.height);return new M({x:0,y:r})}const s=se(t.getPageSize().width,i,e.width);return t.isRTL()?new M({x:e.width-s-t.getPageSize().width,y:0}):new M({x:s,y:0})},It=({context:i,settings:e})=>{const t=(c,a,l)=>{let u;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?u=c.getBoundingClientRect().x:c&&(u=(c?zt(c,a):void 0)?.getBoundingClientRect().x||u);const d=l.layout.layoutInfo?.width||0,p=i.getPageSize().width;if(u!==void 0){const g=re(u,p,d);return new M({x:g,y:0})}};return{getSpineItemPositionFromNode:t,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:a})=>Nn({context:i,isUsingVerticalWriting:!!a.isUsingVerticalWriting(),itemLayout:a.layout.layoutInfo,pageIndex:c}),getSpineItemPageIndexFromPosition:c=>bt({...c,isRTL:i.isRTL(),pageWidth:i.getPageSize().width,pageHeight:i.getPageSize().height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,a,l)=>{const u=t(c,a,l),{height:d,width:p}=l.layout.layoutInfo;return u?bt({isUsingVerticalWriting:!!l.isUsingVerticalWriting(),position:u,itemHeight:d,itemWidth:p,isRTL:i.isRTL(),pageWidth:i.getPageSize().width,pageHeight:i.getPageSize().height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,a)=>{const{width:l,height:u}=a.layout.layoutInfo;return new M({x:re(c.x,i.getPageSize().width,l),y:re(c.y,i.getPageSize().height,u)})},getSpineItemPagePositionFromSpineItemPosition:(c,a,l)=>{const{width:u,height:d}=l.layout.layoutInfo,p=i.getPageSize().width,g=i.getPageSize().height;if(!!l.isUsingVerticalWriting()){const f=se(g,a,d);return new ee({x:c.x,y:c.y-f})}const h=se(p,a,u);if(i.isRTL()){const f=u-(a+1)*p;return new ee({x:c.x-Math.max(0,f),y:c.y})}return new ee({x:c.x-h,y:c.y})}}},On=({context:i,settings:e})=>{const t=It({context:i,settings:e});return{getNavigationForLastPage:c=>{const a=c.numberOfPages;return t.getSpineItemPositionFromPageIndex({pageIndex:a-1,spineItem:c})},getNavigationForPosition:(c,a)=>t.getSpineItemClosestPositionFromUnsafePosition(a,c),getNavigationFromNode:(c,a,l)=>t.getSpineItemPositionFromNode(a,l,c)||new M({x:0,y:0})}},N=({position:{x:i,y:e},pageSizeWidth:t,visibleAreaRectWidth:n})=>{const r=i%n!==0?i-t:i;return new $({x:r,y:e})},wt=({position:i,isRTL:e,pageSizeHeight:t,spineItemsManager:n,visibleAreaRectWidth:s,spine:r})=>{const c=n.get(n.items.length-1),a=r.getSpineItemSpineLayoutInfo(c||0),l=a.bottom-t,u=Math.min(Math.max(0,i.y),l);if(e)return new $({x:Math.max(Math.min(0,i.x),a.left),y:u});const d=a.right-s;return new $({x:Math.min(Math.max(0,i.x),d),y:u})},$e=({viewportPosition:i,spineLocator:e,context:t,spineItemNavigationResolver:n})=>{const s=e.getSpineItemFromPosition(i);if(s){const r=e.getSpineItemPositionFromSpinePosition(i,s),c=n.getNavigationForPosition(s,r),a=e.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:s});return N({position:a,pageSizeWidth:t.getPageSize().width,visibleAreaRectWidth:t.state.visibleAreaRect.width})}return new $({x:0,y:0})},kn=({pageIndex:i,spineItemsManager:e,spineItemId:t,context:n,spineLocator:s,spineItemNavigationResolver:r})=>{const c=e.get(t);if(!c){const u=i*n.getPageSize().width;return $e({viewportPosition:new $({x:u,y:0}),context:n,spineItemNavigationResolver:r,spineLocator:s})}const a=s.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:i,spineItem:c}),l=s.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:c});return N({position:l,pageSizeWidth:n.getPageSize().width,visibleAreaRectWidth:n.state.visibleAreaRect.width})},Vn=({anchor:i,spineItem:e,context:t})=>{const n=e.layout.layoutInfo?.width||0,s=t.getPageSize().width,c=e.getBoundingRectOfElementFromSelector(i)?.x||0;return re(c,s,n)},Un=({anchor:i,context:e,spineItem:t,spineLocator:n})=>{const s=Vn({anchor:i,spineItem:t,context:e});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new M({x:s,y:0}),spineItem:t})},Wn=({anchor:i,spineItem:e,spineLocator:t,context:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const c=Un({anchor:i,context:n,spineItem:e,spineLocator:t});return N({position:c,pageSizeWidth:s,visibleAreaRectWidth:r})},zn=({context:i,spineItemsManager:e,spineLocator:t,url:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{try{const c=n instanceof URL?n:new URL(n),a=`${c.origin}${c.pathname}`,l=i.manifest?.spineItems.find(u=>u.href===a);if(l){const u=e.get(l.id);if(u){const d=Wn({anchor:c.hash,spineItem:u,context:i,spineLocator:t,pageSizeWidth:s,visibleAreaRectWidth:r});return{position:N({position:d,pageSizeWidth:s,visibleAreaRectWidth:r}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},Hn=({spineItem:i,spineItemPosition:e,spineLocator:t,spineItemLocator:n,context:s})=>{const r=n.getSpineItemClosestPositionFromUnsafePosition(e,i),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:i});return N({position:c,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},Bn="spineNavigator",_n=({context:i,spineItemsManager:e,locator:t,settings:n,spine:s})=>{const r=On({context:i,settings:n});return{getNavigationForUrl:g=>zn({context:i,spineItemsManager:e,spineLocator:t,url:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),getNavigationForSpineItemPage:g=>kn({...g,context:i,spineItemsManager:e,spineItemNavigationResolver:r,spineLocator:t}),getNavigationFromSpineItemPosition:g=>Hn({...g,spineItemLocator:t.spineItemLocator,spineLocator:t,context:i}),getNavigationForCfi:g=>{const m=e.getSpineItemFromCfi(g),{node:h,offset:f=0}=be({cfi:g,spineItemsManager:e});if(!m){L.warn(Bn,`unable to detect item id from cfi ${g}`);return}const b=h?r.getNavigationFromNode(m,h,f):new M({x:0,y:0}),S=t.getSpinePositionFromSpineItemPosition({spineItemPosition:b,spineItem:m});return N({position:S,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})},getNavigationForLastPage:g=>{const m=r.getNavigationForLastPage(g),h=t.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:g});return N({position:h,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})},getNavigationForSpineIndexOrId:g=>{const m=e.get(g);if(m){const h=t.getSpinePositionFromSpineItem(m);return N({position:h,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})}return new $({x:0,y:0})},getNavigationForPosition:g=>$e({viewportPosition:g,context:i,spineItemNavigationResolver:r,spineLocator:t}),getMostPredominantNavigationForPosition:g=>{const m=n.values.computedPageTurnDirection,h=.5,f=m==="horizontal"?g.x+i.state.visibleAreaRect.width*h:0,b=m==="horizontal"?0:g.y+i.state.visibleAreaRect.height*h,S=wt({position:new $({x:f,y:b}),isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s});return $e({context:i,spineItemNavigationResolver:r,spineLocator:t,viewportPosition:S})},getAdjustedPositionWithSafeEdge:g=>wt({position:g,isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s}),isNavigationGoingForwardFrom:(g,m)=>n.values.computedPageTurnDirection==="vertical"?g.y>m.y:g.x>m.x,arePositionsDifferent:(g,m)=>g.x!==m.x||g.y!==m.y,getAdjustedPositionForSpread:g=>N({position:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),spineItemNavigator:r}},qn=({spineItemsManager:i,context:e,hookManager:t,spine:n,settings:s,viewport:r})=>{const c=new o.Subject,a=new we,l=_n({context:e,settings:s,spineItemsManager:i,locator:n.locator,spine:n}),u=new mt(s,t,e,n,r),d=new ft(r,s,t,n,e),p=new En(s,e,n,d,a,r),g=o.merge(c,p.navigation$),m=new gt(s,e,g,u,d,l,n,a.isLocked$),h=o.combineLatest([u.isNavigating$,d.isNavigating$,a.isLocked$,m.locker.isLocked$]).pipe(y.map(S=>S.some(w=>w)?"busy":"free"),y.distinctUntilChanged(),y.shareReplay(1));return{destroy:()=>{p.destroy(),u.destroy(),m.destroy()},getNavigation:()=>m.navigation,internalNavigator:m,scrollNavigationController:d,controlledNavigationController:u,locker:a,viewportState$:h,navigate:S=>{c.next(S)},lock(){return a.lock()},navigationResolver:l,navigation$:m.navigation$}};class vt extends Y{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class Pt extends E{constructor(e,t,n,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=n,this.spine=s,this.spineItemLocator=r;const c=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const l=({spineItem:u,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:u,position:d,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,u])=>{const{position:d}=u,p=this.pagination.value,{beginIndex:g,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:.5}})??{},h=this.spineItemsManager.get(g),f=this.spineItemsManager.get(m);if(!h||!f)return;const b=p.beginCfi,S=p.endCfi,{beginPageIndex:w=0}=l({spineItem:h,position:d})??{},{endPageIndex:v=0}=l({spineItem:f,position:d})??{},T=b===void 0||ne(b)||p.beginSpineItemIndex!==g,C=p.endSpineItemIndex!==m||S===void 0||ne(S),F=T?W(h.item):b,R=C?W(f.item):S,D=h.numberOfPages,U=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:D,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:R,endNumberOfPagesInSpineItem:U,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:u.id})}))})),a=c.pipe(x(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:l,endSpineItemIndex:u,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:p}=this.pagination.value;if(d===void 0||p===void 0||l===void 0||u===void 0)return;const g=this.spineItemsManager.get(l),m=this.spineItemsManager.get(u);g===void 0||m===void 0||this.pagination.update({beginCfi:ie({pageIndex:d,spineItem:g,spine:this.spine}),endCfi:ie({pageIndex:p,spineItem:m,spine:this.spine})})}));o.merge(c,a).pipe(o.takeUntil(this.destroy$)).subscribe()}}class $t extends E{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=P.shallowMergeIfDefined(this.inputSettings,e),n=this.getOutputSettings(t),s=!P.isShallowEqual(this.outputSettings,n);return{hasChanged:s,state:n,commit:()=>(this.inputSettings=t,this.outputSettings=n,s&&this.outputSettingsUpdateSubject.next(n),n)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(he(e),o.distinctUntilChanged(P.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Yn extends $t{constructor(e,t){super(e),this.context=t;const n=o.combineLatest([t.hasVerticalWriting$,t.manifest$]).pipe(y.tap(()=>{this.update(this.values)})),s=this.values$.pipe(y.tap(({forceSinglePageMode:r})=>{t.update({forceSinglePageMode:r})}));o.merge(n,s).pipe(y.takeUntil(t.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,n=this.context.state.hasVerticalWriting??!1,s={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0};return t?.renditionFlow==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),n&&s.computedPageTurnAnimation==="slide"&&(L.warn(`pageTurnAnimation ${s.computedPageTurnAnimation} incompatible with current book, switching back to default`),s.computedPageTurnAnimation="none"),s.computedPageTurnMode==="scrollable"?(s.computedPageTurnAnimationDuration=0,s.computedPageTurnAnimation="none"):s.computedPageTurnAnimationDuration=e.pageTurnAnimationDuration!==void 0?e.pageTurnAnimationDuration:300,s}getOutputSettings(e){const t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{forceSinglePageMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class xn extends E{constructor(e,t,n,s,r,c){super(),this.item=e,this.containerElement=t,this.context=n,this.hookManager=s,this.renderer=r,this.settings=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:a,minimumWidth:l})=>u=>u.pipe(o.map(d=>{const p=P.isShallowEqual(this.lastLayout?.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:g,height:m}=p??{},{width:h=g,height:f=m}=d??{},{width:b,height:S}=this.context.getPageSize(),w=this.validateDimension(h??b,b,l),v=this.settings.values.computedPageTurnMode==="scrollable"?f??S:this.validateDimension(f??S,S,S);return this.lastLayout={width:w,height:v,pageSize:this.context.getPageSize()},this.containerElement.style.width=`${w}px`,this.containerElement.style.height=`${v}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:a,item:this.item,minimumWidth:l}),{width:w,height:v}})),this.layout=a=>{const l=ke(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(a),l()},this.adjustPositionOfElement=({right:a,left:l,top:u})=>{a!==void 0?this.containerElement.style.right=`${a}px`:this.containerElement.style.removeProperty("right"),l!==void 0?this.containerElement.style.left=`${l}px`:this.containerElement.style.removeProperty("left"),u!==void 0?this.containerElement.style.top=`${u}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(a=>{const{blankPagePosition:l,minimumWidth:u,spreadPosition:d}=a;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:l,item:this.item,minimumWidth:u});const p=this.renderer.layout({blankPagePosition:l,minPageSpread:u/this.context.getPageSize().width,minimumWidth:u,spreadPosition:d});return o.merge(o.of({type:"start"}),p.pipe(this.applyDimsAfterLayout(a),o.map(g=>({type:"end",data:g}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(a=>a.type==="end"),o.map(a=>a.data),o.share())}validateDimension(e,t,n){if(e<=0)return n;const s=Math.max(e,n),c=Math.ceil(s/t)*t;return Math.max(c,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,n=e.height?parseFloat(e.height):0;return{width:t,height:n}}}class Xn extends B{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 Te extends E{constructor(e,t,n,s,r,c){super(),this.item=e,this.parentElement=t,this.context=n,this.settings=s,this.hookManager=r,this.index=c,this.getBoundingRectOfElementFromSelector=u=>{const d=this.renderer.getDocumentFrame();if(d&&d instanceof HTMLIFrameElement&&u)return u.startsWith("#")?d.contentDocument?.getElementById(u.replace("#",""))?.getBoundingClientRect():d.contentDocument?.querySelector(u)?.getBoundingClientRect()},this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=Zn(t,e,r),t.appendChild(this.containerElement);const a=this.settings.values.getRenderer?.(e);this.resourcesHandler=new J(e,this.settings);const l={context:n,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=a?a(l):new Xn(l),this.layout=new xn(e,this.containerElement,n,r,this.renderer,this.settings),this.isReady$=this.layout.layoutProcess$.pipe(y.withLatestFrom(this.renderer.isLoaded$),y.map(([u,d])=>!!(u.type==="end"&&d)),y.startWith(!1),y.distinctUntilChanged(),y.tap(u=>{this.containerElement.dataset.isReady=u.toString()}),y.shareReplay({refCount:!0,bufferSize:1})),this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(this.isReady$,this.layout.layout$).pipe(y.takeUntil(this.destroy$)).subscribe()}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(e=>e==="loaded"))}get unloaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(e=>e!=="idle"),y.switchMap(()=>this.renderer.state$.pipe(y.filter(e=>e==="idle"),y.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return yt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.context.getPageSize().width,pageHeight:this.context.getPageSize().height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Zn=(i,e,t)=>{const n=i.ownerDocument.createElement("div");return n.classList.add("spineItem"),n.classList.add(`spineItem-${e.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},Gn=C.namespace("spine"),Te=({position:e,pageSize:t})=>new qt({...e,left:e.x,top:e.y,width:t.width,height:t.height,bottom:e.y+t.height,right:e.x+t.width});class Me extends Y{constructor(t,i,n,s,r,c){super({pages:[]}),this.spineLayout=t,this.spineItemsManager=i,this.spineItemLocator=n,this.context=s,this.locator=r,this.viewport=c,this.fromSpineItemPageIndex=(a,u)=>this.value.pages.find(l=>l.itemIndex===a.index&&l.pageIndex===u),this.fromAbsolutePageIndex=a=>this.value.pages.reduce((u,l)=>u||(l.absolutePageIndex===a?l:u),void 0),this.observeFromAbsolutePageIndex=a=>this.pipe(o.map(()=>this.fromAbsolutePageIndex(a))),this.layout$=t.layout$.pipe(o.withLatestFrom(c),o.switchMap(([,{pageSize:a}])=>{const u=i.items.reduce((d,g,p)=>{const h=new Array(g.numberOfPages).fill(void 0).map((f,b)=>{const S=n.getSpineItemPositionFromPageIndex({spineItem:g,pageIndex:b}),I=r.getSpinePositionFromSpineItemPosition({spineItem:g,spineItemPosition:S});return{absoluteLayout:Te({pageSize:a,position:I}),layout:new _t({left:S.x,right:S.x+a.width,top:S.y,bottom:S.y+a.height,width:a.width,height:a.height,x:S.x,y:S.y}),itemIndex:p,absolutePageIndex:d.length+b,spineItem:g,pageIndex:b}});return[...d,...h]},[]);return o.combineLatest(u.map(d=>{const{spineItem:g,...p}=d;return new o.Observable(m=>{var b,S;const h=(b=d.spineItem.renderer)==null?void 0:b.getDocumentFrame();let f;h&&((S=h==null?void 0:h.contentWindow)!=null&&S.document)&&h.contentWindow.document.body!==null&&(f=We(h.contentWindow.document,d.layout)),m.next({...p,firstVisibleNode:f})})}))}),o.map(a=>(Gn.info("Pages layout",a),{pages:a})),o.share()),this.layout$.pipe(o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Fe extends A{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(c=>({item:r,isReady:c}))));return o.merge(...s)}),o.share()),this.itemResize$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>K(r.element).pipe(o.map(c=>({entries:c,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 Kn=({horizontalOffset:e,verticalOffset:t,context:i,spineItemsManager:n,isGloballyPrePaginated:s,settings:r,index:c,item:a,viewport:u})=>{let l=i.getPageSize().width,d="none";const g=e%u.absoluteViewport.width===0,p=c===n.items.length-1;if(i.state.isUsingSpreadMode){!s&&a.renditionLayout==="reflowable"&&!p&&(l=i.getPageSize().width*2),!s&&a.renditionLayout==="reflowable"&&p&&g&&(l=i.getPageSize().width*2);const h=g&&p&&s;a.item.pageSpreadRight&&g&&!i.isRTL()||a.item.pageSpreadLeft&&g&&i.isRTL()?(d="before",l=i.getPageSize().width*2):h&&(i.isRTL()?d="before":d="after",l=i.getPageSize().width*2)}return a.layout.layout({minimumWidth:l,blankPagePosition:d,spreadPosition:i.state.isUsingSpreadMode?g?i.isRTL()?"right":"left":i.isRTL()?"left":"right":"none"}).pipe(o.map(({width:h,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const I=g?t:t-i.state.visibleAreaRect.height,P=g?0:e;i.isRTL()?a.layout.adjustPositionOfElement({top:I,left:P}):a.layout.adjustPositionOfElement({top:I,left:P});const v=h+P,M=f+I,F=new et({left:P,right:v,top:I,bottom:M,height:f,width:h,x:P,y:I});return{horizontalOffset:v,verticalOffset:M,layoutPosition:F}}a.layout.adjustPositionOfElement(i.isRTL()?{right:e,top:0}:{left:e,top:0});const b=i.isRTL()?u.absoluteViewport.width-e-h:e,S=new et({right:i.isRTL()?u.absoluteViewport.width-e:e+h,left:b,x:b,top:t,bottom:f,height:f,width:h,y:t});return{horizontalOffset:e+h,verticalOffset:0,layoutPosition:S}}))};class Jn extends A{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(c=>{const a=c.map(l=>l.needsLayout$.pipe(o.tap(()=>{this.layout()}))),u=c.map(l=>l.loaded$.pipe(o.tap(()=>{l.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return o.merge(...a,...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(c=>!c),o.first())),o.exhaustMap(()=>{r.next(!0);const c=this.context.manifest,a=re(c)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((l,d,g)=>l.pipe(o.concatMap(({horizontalOffset:p,verticalOffset:m})=>Kn({context:this.context,horizontalOffset:p,index:g,isGloballyPrePaginated:a,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(o.map(({horizontalOffset:h,verticalOffset:f,layoutPosition:b})=>(this.spineItemsRelativeLayouts[g]=b,{horizontalOffset:h,verticalOffset:f}))))),o.of({horizontalOffset:0,verticalOffset:0})),o.concatMap(l=>l),o.finalize(()=>{r.next(!1)}))}),o.share()),o.merge(this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(t){const i=this.spineItemsManager.getSpineItemIndex(t)??0;return this.spineItemsRelativeLayouts[i]||new et({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 Qn extends A{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 c=this.forcedOpenSubject.pipe(o.map(l=>[...new Set(l.flat())].sort()),o.distinctUntilChanged($.arrayEqual),o.shareReplay({bufferSize:1,refCount:!0}));o.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,c,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(o.debounceTime(100,o.animationFrameScheduler),x(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,c),o.map(([,l,d])=>{const{numberOfAdjacentSpineItemToPreLoad:g}=s.values,{beginIndex:p=0,endIndex:m=0}=n.getVisibleSpineItemsFromPosition({position:l.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},h=g===1/0?0:p-g,f=g===1/0?i.items.length-1:m+g,b=Array.from({length:f-h+1},(I,P)=>h+P),S=[...d,...b];i.items.forEach((I,P)=>{S.includes(P)?I.load():I.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 Le=(e,t,i)=>{const n=(i.width-t.width)/2,s=(i.height-t.height)/2;return new q({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 jn{constructor({width:t,height:i}){this.__symbol=Symbol("AbsoluteViewport"),this.width=t,this.height=i}}class to{constructor({width:t,height:i}){this.__symbol=Symbol("RelativeViewport"),this.width=t,this.height=i}}const eo=({pageIndex:e,spineItemOrId:t,spineItemsManager:i})=>{const n=i.items,s=i.get(t);if(!s)return;const{currentAbsolutePage:r}=n.reduce((c,a)=>{if(c.found)return c;const u=a.numberOfPages;return s===a&&e<=u-1?{currentAbsolutePage:c.currentAbsolutePage+e,found:!0}:{...c,currentAbsolutePage:c.currentAbsolutePage+u}},{currentAbsolutePage:0,found:!1});return r},io=({itemHeight:e,itemWidth:t,visibleWidthOfItem:i,visibleHeightOfItem:n,threshold:s})=>{const r=i/t,c=n/e;return s.type==="percentage"?r>=s.value&&c>=s.value:i>=s.value&&n>=s.value},no=({visibleWidthOfItem:e,visibleHeightOfItem:t,threshold:i,viewportPosition:n})=>{const s=e/n.width,r=t/n.height;return i.type==="percentage"?r>=i.value&&s>=i.value:t>=i.value&&e>=i.value},Ce=({itemPosition:{bottom:e,left:t,right:i,top:n,width:s,height:r},threshold:c,viewportPosition:a,restrictToScreen:u})=>{const l=a.x,d=a.x+(a.width-1),g=a.y,p=Math.max(a.y+(a.height-1),0),m=Math.max(0,Math.min(i,d)-Math.max(t,l)),h=Math.max(0,Math.min(e,p)-Math.max(n,g));if(m<=0||h<=0)return{visible:!1};const b=no({threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m,viewportPosition:a});return u?{visible:b}:{visible:io({itemHeight:r,itemWidth:s,threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m})||b}},Mt=({position:e,spineItemsManager:t,spineLayout:i})=>{const n=t.items.find(s=>{const{left:r,right:c,bottom:a,top:u}=i.getSpineItemSpineLayoutInfo(s),l=e.x>=r&&e.x<c,d=e.y>=u&&e.y<a;return l&&d});return e.x===0&&!n?t.items[0]:n},Ft=({spineItemPosition:e,itemLayout:{left:t,top:i}})=>new T({x:t+e.x,y:i+e.y}),oo=({position:e,threshold:t,restrictToScreen:i,spineItemsManager:n,spineLayout:s,useAbsoluteViewport:r=!0,viewport:c})=>{const a=Mt({position:e,spineItemsManager:n,spineLayout:s})||n.get(0),u=n.items.reduce((m,h)=>{const f=s.getSpineItemSpineLayoutInfo(h),b=r?c.absoluteViewport:c.relativeViewport,S=Le(e,c.absoluteViewport,b),I=X.from(S,b),{visible:P}=Ce({itemPosition:f,threshold:t,viewportPosition:I,restrictToScreen:i});return P?[...m,h]:m},[]),l=u[0]??a,d=u[u.length-1]??l;if(!l||!d)return;const g=n.getSpineItemIndex(l),p=n.getSpineItemIndex(d);return{beginIndex:g??0,endIndex:p??0}},so=({spineItemsManager:e,context:t,spineItemLocator:i,settings:n,spineLayout:s,viewport:r})=>{const c=(h,f)=>{const{left:b,top:S}=s.getSpineItemSpineLayoutInfo(f);return new L({x:Math.max(h.x-b,0),y:Math.max(h.y-S,0)})},a=h=>Ft({spineItemPosition:new L({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),u=h=>e.items.find(f=>f.renderer.getDocumentFrame()===h),l=(h,f,b)=>{if(typeof b=="number"){const S=e.get(b);return S?i.getSpineItemPageIndexFromNode(h,f||0,S):void 0}return i.getSpineItemPageIndexFromNode(h,f||0,b)},d=({position:h,threshold:f,spineItem:b,restrictToScreen:S,useAbsoluteViewport:I=!0,viewport:P})=>{const v=b.numberOfPages,F=Array.from(Array(v)).map((O,z)=>{const Lt=i.getSpineItemPositionFromPageIndex({pageIndex:z,spineItem:b}),H=Ft({spineItemPosition:Lt,itemLayout:s.getSpineItemSpineLayoutInfo(b)});return{index:z,absolutePosition:{width:t.getPageSize().width,height:t.getPageSize().height,left:H.x,top:H.y,bottom:H.y+t.getPageSize().height,right:H.x+t.getPageSize().width}}}).reduce((O,{absolutePosition:z,index:Lt})=>{const H=I?P.absoluteViewport:P.relativeViewport,lo=Le(h,P.absoluteViewport,H),go=X.from(lo,H),{visible:po}=Ce({viewportPosition:go,restrictToScreen:S,threshold:f,itemPosition:z});return po?[...O,Lt]:O},[]),R=F[0],D=F[F.length-1]??R;if(!(R===void 0||D===void 0))return{beginPageIndex:R,endPageIndex:D}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:f})=>{const b=s.getSpineItemSpineLayoutInfo(h);return Ft({itemLayout:b,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:h=>eo({...h,spineItemsManager:e}),getSpineItemPagePositionFromSpinePosition:h=>{const f=Mt({position:h,spineItemsManager:e,spineLayout:s});if(!f)return;const b=c(h,f),S=i.getSpineItemPageIndexFromPosition({itemWidth:f.layout.layoutInfo.width,itemHeight:f.layout.layoutInfo.height,position:b,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),I=i.getSpineItemPagePositionFromSpineItemPosition(b,S,f);return{spineItem:f,spineItemPageIndex:S,spineItemPagePosition:I,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:a,getSpineItemPositionFromSpinePosition:c,getSpineItemFromPosition:h=>Mt({position:h,spineItemsManager:e,spineLayout:s}),getSpineItemFromIframe:u,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:h=>oo({spineItemsManager:e,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,f)=>{const{bottom:b,left:S,right:I,top:P}=s.getSpineItemSpineLayoutInfo(f);return h.x>=S&&h.x<=I&&h.y<=b&&h.y>=P},spineItemLocator:i,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,f)=>{const{height:b,width:S}=s.getSpineItemSpineLayoutInfo(f);return new L({x:Math.min(Math.max(0,h.x),S),y:Math.min(Math.max(0,h.y),b)})}}};class Re extends A{constructor(t,i,n,s,r,c,a,u){super(),this.parentElement$=t,this.context=i,this.pagination=n,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=c,this.hookManager=a,this.viewport=u,this.elementSubject=new o.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new Jn(s,i,c,u),this.locator=so({context:i,spineItemsManager:s,spineItemLocator:r,settings:c,spineLayout:this.spineLayout,viewport:u}),this.spineItemsLoader=new Qn(this.context,s,this.locator,c,this.spineLayout),this.spineItemsObserver=new Fe(s,this.locator),this.pages=new Me(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const l=t.pipe(y.filter(ct.isDefined),y.tap(g=>{const p=g.ownerDocument.createElement("div");p.style.cssText=`
280
+ `,n.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:n}),n},Gn=L.namespace("spine"),Tt=({position:i,pageSize:e})=>new qe({...i,left:i.x,top:i.y,width:e.width,height:e.height,bottom:i.y+e.height,right:i.x+e.width});class Mt extends Y{constructor(e,t,n,s,r,c){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=n,this.context=s,this.locator=r,this.viewport=c,this.fromSpineItemPageIndex=(a,l)=>this.value.pages.find(u=>u.itemIndex===a.index&&u.pageIndex===l),this.fromAbsolutePageIndex=a=>this.value.pages.reduce((l,u)=>l||(u.absolutePageIndex===a?u:l),void 0),this.observeFromAbsolutePageIndex=a=>this.pipe(o.map(()=>this.fromAbsolutePageIndex(a))),this.layout$=e.layout$.pipe(o.withLatestFrom(c),o.switchMap(([,{pageSize:a}])=>{const l=t.items.reduce((d,p,g)=>{const h=new Array(p.numberOfPages).fill(void 0).map((f,b)=>{const S=n.getSpineItemPositionFromPageIndex({spineItem:p,pageIndex:b}),w=r.getSpinePositionFromSpineItemPosition({spineItem:p,spineItemPosition:S});return{absoluteLayout:Tt({pageSize:a,position:w}),layout:new _e({left:S.x,right:S.x+a.width,top:S.y,bottom:S.y+a.height,width:a.width,height:a.height,x:S.x,y:S.y}),itemIndex:g,absolutePageIndex:d.length+b,spineItem:p,pageIndex:b}});return[...d,...h]},[]);return o.combineLatest(l.map(d=>{const{spineItem:p,...g}=d;return new o.Observable(m=>{const h=d.spineItem.renderer?.getDocumentFrame();let f;h&&h?.contentWindow?.document&&h.contentWindow.document.body!==null&&(f=Ut(h.contentWindow.document,d.layout)),m.next({...g,firstVisibleNode:f})})}))}),o.map(a=>(Gn.info("Pages layout",a),{pages:a})),o.share()),this.layout$.pipe(o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Ft extends E{constructor(e,t){super(),this.spineItemsManager=e,this.spineLocator=t,this.itemIsReady$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>r.isReady$.pipe(o.map(c=>({item:r,isReady:c}))));return o.merge(...s)}),o.share()),this.itemResize$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>K(r.element).pipe(o.map(c=>({entries:c,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 Kn=({horizontalOffset:i,verticalOffset:e,context:t,spineItemsManager:n,isGloballyPrePaginated:s,settings:r,index:c,item:a,viewport:l})=>{let u=t.getPageSize().width,d="none";const p=i%l.absoluteViewport.width===0,g=c===n.items.length-1;if(t.state.isUsingSpreadMode){!s&&a.renditionLayout==="reflowable"&&!g&&(u=t.getPageSize().width*2),!s&&a.renditionLayout==="reflowable"&&g&&p&&(u=t.getPageSize().width*2);const h=p&&g&&s;a.item.pageSpreadRight&&p&&!t.isRTL()||a.item.pageSpreadLeft&&p&&t.isRTL()?(d="before",u=t.getPageSize().width*2):h&&(t.isRTL()?d="before":d="after",u=t.getPageSize().width*2)}return a.layout.layout({minimumWidth:u,blankPagePosition:d,spreadPosition:t.state.isUsingSpreadMode?p?t.isRTL()?"right":"left":t.isRTL()?"left":"right":"none"}).pipe(o.map(({width:h,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const w=p?e:e-t.state.visibleAreaRect.height,v=p?0:i;t.isRTL()?a.layout.adjustPositionOfElement({top:w,left:v}):a.layout.adjustPositionOfElement({top:w,left:v});const T=h+v,C=f+w,F=new te({left:v,right:T,top:w,bottom:C,height:f,width:h,x:v,y:w});return{horizontalOffset:T,verticalOffset:C,layoutPosition:F}}a.layout.adjustPositionOfElement(t.isRTL()?{right:i,top:0}:{left:i,top:0});const b=t.isRTL()?l.absoluteViewport.width-i-h:i,S=new te({right:t.isRTL()?l.absoluteViewport.width-i:i+h,left:b,x:b,top:e,bottom:f,height:f,width:h,y:e});return{horizontalOffset:i+h,verticalOffset:0,layoutPosition:S}}))};class Jn extends E{constructor(e,t,n,s){super(),this.spineItemsManager=e,this.context=t,this.settings=n,this.viewport=s,this.layoutSubject=new o.Subject,this.spineItemsRelativeLayouts=[],e.items$.pipe(o.tap(()=>{this.spineItemsRelativeLayouts=[]}),o.switchMap(c=>{const a=c.map(u=>u.needsLayout$.pipe(o.tap(()=>{this.layout()}))),l=c.map(u=>u.loaded$.pipe(o.tap(()=>{u.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return o.merge(...a,...l)})).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(c=>!c),o.first())),o.exhaustMap(()=>{r.next(!0);const c=this.context.manifest,a=rt(c)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((u,d,p)=>u.pipe(o.concatMap(({horizontalOffset:g,verticalOffset:m})=>Kn({context:this.context,horizontalOffset:g,index:p,isGloballyPrePaginated:a,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(o.map(({horizontalOffset:h,verticalOffset:f,layoutPosition:b})=>(this.spineItemsRelativeLayouts[p]=b,{horizontalOffset:h,verticalOffset:f}))))),o.of({horizontalOffset:0,verticalOffset:0})),o.concatMap(u=>u),o.finalize(()=>{r.next(!1)}))}),o.share()),o.merge(this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(e){const t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new te({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,t)=>e+t.numberOfPages,0)}destroy(){super.destroy(),this.layoutSubject.complete()}}class Qn extends E{constructor(e,t,n,s,r){super(),this.context=e,this.spineItemsManager=t,this.spineLocator=n,this.settings=s,this.spineLayout=r,this.forcedOpenSubject=new o.BehaviorSubject([]);const c=this.forcedOpenSubject.pipe(o.map(u=>[...new Set(u.flat())].sort()),o.distinctUntilChanged(P.arrayEqual),o.shareReplay({bufferSize:1,refCount:!0}));o.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,c,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(o.debounceTime(100,o.animationFrameScheduler),x(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,c),o.map(([,u,d])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=s.values,{beginIndex:g=0,endIndex:m=0}=n.getVisibleSpineItemsFromPosition({position:u.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},h=p===1/0?0:g-p,f=p===1/0?t.items.length-1:m+p,b=Array.from({length:f-h+1},(w,v)=>h+v),S=[...d,...b];t.items.forEach((w,v)=>{S.includes(v)?w.load():w.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(n=>typeof n=="number"?n:n.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,t]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(n=>n!==t))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Lt=(i,e,t)=>{const n=(t.width-e.width)/2,s=(t.height-e.height)/2;return new q({x:i.x-n,y:i.y-s})};class X extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const s=e;return new X(s.x,s.y,t.width,t.height)}const n=e;return new X(n.x,n.y,n.width,n.height)}}class jn{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class eo{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const to=({pageIndex:i,spineItemOrId:e,spineItemsManager:t})=>{const n=t.items,s=t.get(e);if(!s)return;const{currentAbsolutePage:r}=n.reduce((c,a)=>{if(c.found)return c;const l=a.numberOfPages;return s===a&&i<=l-1?{currentAbsolutePage:c.currentAbsolutePage+i,found:!0}:{...c,currentAbsolutePage:c.currentAbsolutePage+l}},{currentAbsolutePage:0,found:!1});return r},io=({itemHeight:i,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:n,threshold:s})=>{const r=t/e,c=n/i;return s.type==="percentage"?r>=s.value&&c>=s.value:t>=s.value&&n>=s.value},no=({visibleWidthOfItem:i,visibleHeightOfItem:e,threshold:t,viewportPosition:n})=>{const s=i/n.width,r=e/n.height;return t.type==="percentage"?r>=t.value&&s>=t.value:e>=t.value&&i>=t.value},Ct=({itemPosition:{bottom:i,left:e,right:t,top:n,width:s,height:r},threshold:c,viewportPosition:a,restrictToScreen:l})=>{const u=a.x,d=a.x+(a.width-1),p=a.y,g=Math.max(a.y+(a.height-1),0),m=Math.max(0,Math.min(t,d)-Math.max(e,u)),h=Math.max(0,Math.min(i,g)-Math.max(n,p));if(m<=0||h<=0)return{visible:!1};const b=no({threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m,viewportPosition:a});return l?{visible:b}:{visible:io({itemHeight:r,itemWidth:s,threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m})||b}},Me=({position:i,spineItemsManager:e,spineLayout:t})=>{const n=e.items.find(s=>{const{left:r,right:c,bottom:a,top:l}=t.getSpineItemSpineLayoutInfo(s),u=i.x>=r&&i.x<c,d=i.y>=l&&i.y<a;return u&&d});return i.x===0&&!n?e.items[0]:n},Fe=({spineItemPosition:i,itemLayout:{left:e,top:t}})=>new $({x:e+i.x,y:t+i.y}),oo=({position:i,threshold:e,restrictToScreen:t,spineItemsManager:n,spineLayout:s,useAbsoluteViewport:r=!0,viewport:c})=>{const a=Me({position:i,spineItemsManager:n,spineLayout:s})||n.get(0),l=n.items.reduce((m,h)=>{const f=s.getSpineItemSpineLayoutInfo(h),b=r?c.absoluteViewport:c.relativeViewport,S=Lt(i,c.absoluteViewport,b),w=X.from(S,b),{visible:v}=Ct({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:t});return v?[...m,h]:m},[]),u=l[0]??a,d=l[l.length-1]??u;if(!u||!d)return;const p=n.getSpineItemIndex(u),g=n.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:g??0}},so=({spineItemsManager:i,context:e,spineItemLocator:t,settings:n,spineLayout:s,viewport:r})=>{const c=(h,f)=>{const{left:b,top:S}=s.getSpineItemSpineLayoutInfo(f);return new M({x:Math.max(h.x-b,0),y:Math.max(h.y-S,0)})},a=h=>Fe({spineItemPosition:new M({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),l=h=>i.items.find(f=>f.renderer.getDocumentFrame()===h),u=(h,f,b)=>{if(typeof b=="number"){const S=i.get(b);return S?t.getSpineItemPageIndexFromNode(h,f||0,S):void 0}return t.getSpineItemPageIndexFromNode(h,f||0,b)},d=({position:h,threshold:f,spineItem:b,restrictToScreen:S,useAbsoluteViewport:w=!0,viewport:v})=>{const T=b.numberOfPages,F=Array.from(Array(T)).map((U,z)=>{const Le=t.getSpineItemPositionFromPageIndex({pageIndex:z,spineItem:b}),H=Fe({spineItemPosition:Le,itemLayout:s.getSpineItemSpineLayoutInfo(b)});return{index:z,absolutePosition:{width:e.getPageSize().width,height:e.getPageSize().height,left:H.x,top:H.y,bottom:H.y+e.getPageSize().height,right:H.x+e.getPageSize().width}}}).reduce((U,{absolutePosition:z,index:Le})=>{const H=w?v.absoluteViewport:v.relativeViewport,uo=Lt(h,v.absoluteViewport,H),po=X.from(uo,H),{visible:go}=Ct({viewportPosition:po,restrictToScreen:S,threshold:f,itemPosition:z});return go?[...U,Le]:U},[]),R=F[0],D=F[F.length-1]??R;if(!(R===void 0||D===void 0))return{beginPageIndex:R,endPageIndex:D}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:f})=>{const b=s.getSpineItemSpineLayoutInfo(h);return Fe({itemLayout:b,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:h=>to({...h,spineItemsManager:i}),getSpineItemPagePositionFromSpinePosition:h=>{const f=Me({position:h,spineItemsManager:i,spineLayout:s});if(!f)return;const b=c(h,f),S=t.getSpineItemPageIndexFromPosition({itemWidth:f.layout.layoutInfo.width,itemHeight:f.layout.layoutInfo.height,position:b,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(b,S,f);return{spineItem:f,spineItemPageIndex:S,spineItemPagePosition:w,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:a,getSpineItemPositionFromSpinePosition:c,getSpineItemFromPosition:h=>Me({position:h,spineItemsManager:i,spineLayout:s}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:u,getVisibleSpineItemsFromPosition:h=>oo({spineItemsManager:i,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,f)=>{const{bottom:b,left:S,right:w,top:v}=s.getSpineItemSpineLayoutInfo(f);return h.x>=S&&h.x<=w&&h.y<=b&&h.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,f)=>{const{height:b,width:S}=s.getSpineItemSpineLayoutInfo(f);return new M({x:Math.min(Math.max(0,h.x),S),y:Math.min(Math.max(0,h.y),b)})}}};class Et extends E{constructor(e,t,n,s,r,c,a,l){super(),this.parentElement$=e,this.context=t,this.pagination=n,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=c,this.hookManager=a,this.viewport=l,this.elementSubject=new o.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new Jn(s,t,c,l),this.locator=so({context:t,spineItemsManager:s,spineItemLocator:r,settings:c,spineLayout:this.spineLayout,viewport:l}),this.spineItemsLoader=new Qn(this.context,s,this.locator,c,this.spineLayout),this.spineItemsObserver=new Ft(s,this.locator),this.pages=new Mt(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const u=e.pipe(y.filter(ce.isDefined),y.tap(p=>{const g=p.ownerDocument.createElement("div");g.style.cssText=`
281
281
  height: 100%;
282
282
  position: relative;
283
- `,p.className=`${_}-spine`,this.elementSubject.next(p)})),d=o.combineLatest([this.context.manifest$,this.element$]).pipe(y.tap(([g,p])=>{if(!p)return;this.spineItemsManager.destroyItems();const m=g.spineItems.map((h,f)=>new Tt(h,p,this.context,this.settings,this.hookManager,f));this.spineItemsManager.addMany(m)}));o.merge(d,l).pipe(y.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}getSpineItemSpineLayoutInfo(t){return this.spineLayout.getSpineItemSpineLayoutInfo(t)}get layout$(){return this.pages.layout$}destroy(){var t;super.destroy(),this.pages.destroy(),this.spineItemsLoader.destroy(),(t=this.elementSubject.getValue())==null||t.remove(),this.elementSubject.complete()}}class Ae extends A{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 Tt?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}=ot(t);if(i!==void 0)return this.get(i)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(t=>t.destroy())}}class De extends Y{constructor(t){const i=document.createElement("div");i.style.cssText=`
283
+ `,g.className=`${_}-spine`,this.elementSubject.next(g)})),d=o.combineLatest([this.context.manifest$,this.element$]).pipe(y.tap(([p,g])=>{if(!g)return;this.spineItemsManager.destroyItems();const m=p.spineItems.map((h,f)=>new Te(h,g,this.context,this.settings,this.hookManager,f));this.spineItemsManager.addMany(m)}));o.merge(d,u).pipe(y.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}getSpineItemSpineLayoutInfo(e){return this.spineLayout.getSpineItemSpineLayoutInfo(e)}get layout$(){return this.pages.layout$}destroy(){super.destroy(),this.pages.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue()?.remove(),this.elementSubject.complete()}}class Rt extends E{constructor(e,t){super(),this.context=e,this.settings=t,this.orderedSpineItemsSubject=new o.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(e){return typeof e=="number"?this.orderedSpineItemsSubject.value[e]:typeof e=="string"?this.orderedSpineItemsSubject.value.find(({item:t})=>t.id===e):e}comparePositionOf(e,t){const n=this.getSpineItemIndex(e)??0,s=this.getSpineItemIndex(t)??0;return n>s?"after":n===s?"same":"before"}getSpineItemIndex(e){const t=e instanceof Te?e:this.get(e);if(!t)return;const n=this.orderedSpineItemsSubject.value.indexOf(t);return n<0?void 0:n}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:t}=oe(e);if(t!==void 0)return this.get(t)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>e.destroy())}}class At extends Y{constructor(e){const t=document.createElement("div");t.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=`${_}-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 jn({width:t.width,height:t.height})}get scaleFactor(){const t=this.absoluteViewport,i=this.value.element.getBoundingClientRect();return((i==null?void 0:i.width)??t.width)/t.width}get relativeViewport(){const t=this.absoluteViewport,i=this.scaleFactor;return new to({width:t.width/i,height:t.height/i})}}const ro=e=>{const t=new o.Subject,i=new ue,n=new ae,s=new Yn(e,n),r=new ce(n,s),c=new Ae(n,s),a=new De(n),u=n.watch("rootElement"),l=we({context:n,settings:s}),d=new Pe(n,c),g=new Re(u,n,d,c,l,s,i,a),p=qn({context:n,spineItemsManager:c,hookManager:i,spine:g,settings:s,viewport:a}),m=new ve(n,d,c,g,l);p.viewportState$.subscribe(n.bridgeEvent.viewportStateSubject),p.navigation$.subscribe(n.bridgeEvent.navigationSubject),p.locker.isLocked$.subscribe(n.bridgeEvent.navigationIsLockedSubject),d.subscribe(n.bridgeEvent.paginationSubject);const h=()=>{const S=n.value.rootElement;if(!S)return;const I={width:S==null?void 0:S.offsetWidth,height:S==null?void 0:S.offsetHeight};S.style.setProperty("overflow","hidden");const P=S.getBoundingClientRect();n.update({visibleAreaRect:{x:P.x,y:P.y,width:I.width,height:I.height}}),g.layout()},f=S=>{const{containerElement:I,manifest:P}=S;if(n.manifest){C.warn("loading a new book is not supported yet");return}C.log("load",{options:S});const v=ao(I);n.update({manifest:P,rootElement:v,forceSinglePageMode:s.values.forceSinglePageMode}),h()},b=()=>{c.destroy(),m.destroy(),s.destroy(),d.destroy(),n.destroy(),p.destroy(),g.destroy(),r.destroy(),t.next(),t.complete(),a.destroy()};return{context:n,spine:g,hookManager:i,cfi:{generateCfiFromRange:Jt,parseCfi:ot,generateCfiForSpineItemPage:S=>it({...S,spine:g}),resolveCfi:S=>bt({...S,spineItemsManager:c})},navigation:p,spineItemsObserver:g.spineItemsObserver,spineItemsManager:c,layout:h,load:f,destroy:b,pagination:{get state(){return d.value},get state$(){return d}},settings:s,viewport:a,element$:u,viewportState$:n.bridgeEvent.viewportState$,viewportFree$:n.bridgeEvent.viewportFree$,state$:n.manifest$.pipe(y.map(S=>S?"ready":"idle")),features:r,$:{destroy$:t}}},ao=e=>(e.style.cssText=`
290
- ${e.style.cssText}
289
+ `,t.className=`${_}-viewport`,super({element:t,pageSize:{width:1,height:1}}),this.context=e;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 e=this.absoluteViewport,{isUsingSpreadMode:t}=this.context.state;return{width:t?e.width/2:e.width,height:e.height}}get absoluteViewport(){const e=this.context.state.visibleAreaRect;return new jn({width:e.width,height:e.height})}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,t=this.scaleFactor;return new eo({width:e.width/t,height:e.height/t})}}const ro=i=>{const e=new o.Subject,t=new lt,n=new at,s=new Yn(i,n),r=new ct(n,s),c=new Rt(n,s),a=new At(n),l=n.watch("rootElement"),u=It({context:n,settings:s}),d=new vt(n,c),p=new Et(l,n,d,c,u,s,t,a),g=qn({context:n,spineItemsManager:c,hookManager:t,spine:p,settings:s,viewport:a}),m=new Pt(n,d,c,p,u);g.viewportState$.subscribe(n.bridgeEvent.viewportStateSubject),g.navigation$.subscribe(n.bridgeEvent.navigationSubject),g.locker.isLocked$.subscribe(n.bridgeEvent.navigationIsLockedSubject),d.subscribe(n.bridgeEvent.paginationSubject);const h=()=>{const S=n.value.rootElement;if(!S)return;const w={width:S?.offsetWidth,height:S?.offsetHeight};S.style.setProperty("overflow","hidden");const v=S.getBoundingClientRect();n.update({visibleAreaRect:{x:v.x,y:v.y,width:w.width,height:w.height}}),p.layout()},f=S=>{const{containerElement:w,manifest:v}=S;if(n.manifest){L.warn("loading a new book is not supported yet");return}L.log("load",{options:S});const T=ao(w);n.update({manifest:v,rootElement:T,forceSinglePageMode:s.values.forceSinglePageMode}),h()},b=()=>{c.destroy(),m.destroy(),s.destroy(),d.destroy(),n.destroy(),g.destroy(),p.destroy(),r.destroy(),e.next(),e.complete(),a.destroy()};return{context:n,spine:p,hookManager:t,cfi:{generateCfiFromRange:Qe,parseCfi:oe,generateCfiForSpineItemPage:S=>ie({...S,spine:p}),resolveCfi:S=>be({...S,spineItemsManager:c})},navigation:g,spineItemsObserver:p.spineItemsObserver,spineItemsManager:c,layout:h,load:f,destroy:b,pagination:{get state(){return d.value},get state$(){return d}},settings:s,viewport:a,element$:l,viewportState$:n.bridgeEvent.viewportState$,viewportFree$:n.bridgeEvent.viewportFree$,state$:n.manifest$.pipe(y.map(S=>S?"ready":"idle")),features:r,$:{destroy$:e}}},ao=i=>(i.style.cssText=`
290
+ ${i.style.cssText}
291
291
  background-color: white;
292
292
  position: relative;
293
- `,e.classList.add(`${_}-reader`),e),co=cn(Qe(Li(dn(Je(Oe(nn(ln(hn(zi(Bt(Ri(Ve(un(ie(xt(Ze(ro))))))))))))))))),uo=e=>t=>e(t);Object.defineProperty(w,"isShallowEqual",{enumerable:!0,get:()=>$.isShallowEqual}),w.AbstractSpinePosition=yt,w.Context=ae,w.ControlledNavigationController=me,w.DestroyableClass=A,w.DocumentRenderer=B,w.Features=ce,w.HookManager=ue,w.InternalNavigator=pe,w.LayoutEntry=j,w.Locker=It,w.Pages=Me,w.Pagination=Pe,w.PaginationController=ve,w.ResourceHandler=J,w.ResourcesLocator=te,w.ScrollNavigationController=fe,w.SettingsManager=$e,w.Spine=Re,w.SpineItem=Tt,w.SpineItemPageLayout=_t,w.SpineItemPageSpineLayout=qt,w.SpineItemPosition=L,w.SpineItemSpineLayout=et,w.SpineItemsManager=Ae,w.SpineItemsObserver=Fe,w.SpinePosition=T,w.UnsafeSpineItemPagePosition=tt,w.UnsafeSpinePosition=q,w.Viewport=De,w.consolidate=jt,w.createReader=co,w.deferIdle=ft,w.deferNextResult=Ut,w.generateCfiForSpineItemPage=it,w.generateCfiFromRange=Jt,w.generateRootCfi=E,w.getAttributeValueFromString=ut,w.getFrameViewportInfo=Z,w.getItemAnchor=Hi,w.htmlEnhancer=Bt,w.idle=mt,w.injectCSS=Ct,w.isHtmlElement=gt,w.isHtmlTagElement=Vt,w.isRootCfi=nt,w.layoutEnhancer=xt,w.mapKeysTo=ht,w.observeIntersection=Ge,w.observeMutation=St,w.observeResize=K,w.paginationEnhancer=ie,w.parseCfi=ot,w.removeCSS=Ne,w.resolveCfi=bt,w.rootEnhancer=uo,w.spinePositionToSpineItemSpineLayout=Te,w.upsertCSSToFrame=N,w.waitForFrameLoad=Rt,w.waitForFrameReady=At,w.waitForSwitch=x,w.watchKeys=G,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
293
+ `,i.classList.add(`${_}-reader`),i),co=cn(Qt(Li(dn(Jt(Nt(nn(un(hn(zi(Be(Ei(Ot(ln(it(xe(Zt(ro))))))))))))))))),lo=i=>e=>i(e);Object.defineProperty(I,"isShallowEqual",{enumerable:!0,get:()=>P.isShallowEqual}),I.AbstractSpinePosition=ye,I.Context=at,I.ControlledNavigationController=mt,I.DestroyableClass=E,I.DocumentRenderer=B,I.Features=ct,I.HookManager=lt,I.InternalNavigator=gt,I.LayoutEntry=j,I.Locker=we,I.Pages=Mt,I.Pagination=vt,I.PaginationController=Pt,I.ResourceHandler=J,I.ResourcesLocator=tt,I.ScrollNavigationController=ft,I.SettingsManager=$t,I.Spine=Et,I.SpineItem=Te,I.SpineItemPageLayout=_e,I.SpineItemPageSpineLayout=qe,I.SpineItemPosition=M,I.SpineItemSpineLayout=te,I.SpineItemsManager=Rt,I.SpineItemsObserver=Ft,I.SpinePosition=$,I.UnsafeSpineItemPagePosition=ee,I.UnsafeSpinePosition=q,I.Viewport=At,I.consolidate=et,I.createReader=co,I.deferIdle=fe,I.deferNextResult=ke,I.generateCfiForSpineItemPage=ie,I.generateCfiFromRange=Qe,I.generateRootCfi=W,I.getAttributeValueFromString=le,I.getFrameViewportInfo=Z,I.getItemAnchor=Ji,I.htmlEnhancer=Be,I.idle=me,I.injectCSS=Ce,I.isHtmlElement=pe,I.isHtmlTagElement=Oe,I.isRootCfi=ne,I.layoutEnhancer=xe,I.mapKeysTo=he,I.observeIntersection=Gt,I.observeMutation=Se,I.observeResize=K,I.paginationEnhancer=it,I.parseCfi=oe,I.removeCSS=Dt,I.resolveCfi=be,I.rootEnhancer=lo,I.spinePositionToSpineItemSpineLayout=Tt,I.upsertCSSToFrame=A,I.waitForFrameLoad=Ee,I.waitForFrameReady=Re,I.waitForSwitch=x,I.watchKeys=G,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})});
294
294
  //# sourceMappingURL=index.umd.cjs.map