@prose-reader/core 1.238.0 → 1.239.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
- (function(I,n){typeof exports=="object"&&typeof module<"u"?n(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"],n):(I=typeof globalThis<"u"?globalThis:I||self,n(I.prose={},I.rxjs,I.shared,I.operators,I.cfi,I.reactjrx))})(this,function(I,n,$,b,O,le){"use strict";const ue=(i,e)=>{const t=new RegExp(`${e}\\s*=\\s*([0-9.]+)`,"i"),o=i.match(t)||[],s=o[1]||"0";return o&&Number.parseFloat(s)||0},Ce=(i,e,t,o)=>{if(!i?.contentDocument?.head)return;const s=i.contentDocument.createElement("style");s.id=e,s.innerHTML=t,o?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()}},D=(i,e,t,o)=>{if(!i)return;const s=i?.contentDocument?.getElementById(e);if(s){s.innerHTML=t;return}Ce(i,e,t,o)},G=i=>{if(i?.contentDocument){const t=i.contentDocument.querySelector("meta[name='viewport']");if(t){const o=t.getAttribute("content");if(o){const s=ue(o,"width"),r=ue(o,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},Ee=i=>i.pipe(n.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?n.of(e):n.fromEvent(e,"load").pipe(n.take(1),n.map(()=>e)))),Re=i=>i.pipe(n.switchMap(e=>{const t=e?.contentDocument?.fonts.ready;return t?n.from(t).pipe(n.map(()=>e)):n.of(void 0)})),Nt=i=>e=>{const t=i(e),o=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;D(a,"prose-reader-accessibility",`
1
+ (function(I,n){typeof exports=="object"&&typeof module<"u"?n(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"],n):(I=typeof globalThis<"u"?globalThis:I||self,n(I.prose={},I.rxjs,I.shared,I.operators,I.cfi,I.reactjrx))})(this,function(I,n,$,b,O,ce){"use strict";const le=(i,e)=>{const t=new RegExp(`${e}\\s*=\\s*([0-9.]+)`,"i"),o=i.match(t)||[],s=o[1]||"0";return o&&Number.parseFloat(s)||0},Ce=(i,e,t,o)=>{if(!i?.contentDocument?.head)return;const s=i.contentDocument.createElement("style");s.id=e,s.innerHTML=t,o?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()}},D=(i,e,t,o)=>{if(!i)return;const s=i?.contentDocument?.getElementById(e);if(s){s.innerHTML=t;return}Ce(i,e,t,o)},G=i=>{if(i?.contentDocument){const t=i.contentDocument.querySelector("meta[name='viewport']");if(t){const o=t.getAttribute("content");if(o){const s=le(o,"width"),r=le(o,"height");return s>0&&r>0?{hasViewport:!0,width:s,height:r}:{hasViewport:!0}}}}return{hasViewport:!1}},Ee=i=>i.pipe(n.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?n.of(e):n.fromEvent(e,"load").pipe(n.take(1),n.map(()=>e)))),Re=i=>i.pipe(n.switchMap(e=>{const t=e?.contentDocument?.fonts.ready;return t?n.from(t).pipe(n.map(()=>e)):n.of(void 0)})),Nt=i=>e=>{const t=i(e),o=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;D(a,"prose-reader-accessibility",`
2
2
  :focus-visible {
3
3
 
4
4
  outline: -webkit-focus-ring-color auto 1px;
5
5
  }
6
- `);const l=a.contentDocument?.body.querySelectorAll("a");l?.forEach(u=>{o.observe(u)}),r(()=>{l?.forEach(u=>{o.unobserve(u)})})}),{...t}},Ot=i=>e=>{const t=i(e);return t.context.state$.pipe(n.takeUntil(t.$.destroy$)).subscribe(({rootElement:o})=>{if(!o)return;const s=()=>{t.settings.values.computedPageTurnMode==="controlled"&&o.scrollTo(0,0)};o.addEventListener("scroll",s)}),t.hookManager.register("item.onDocumentLoad",({itemId:o})=>{const r=t.spineItemsManager.get(o)?.renderer.getDocumentFrame();r&&r.contentDocument?.body.setAttribute("tabindex","-1")}),t},C=$.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?de(i.body,e):de(i,e),o="createRange"in i?i:i.ownerDocument;if(t){let s,r=0;const c=o.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(o,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}}},de=(i,e)=>{let t;const o=Ae(i.getBoundingClientRect(),e);return o!=="before"&&o!=="after"&&(t=i),Array.from(i.children).some(s=>{const r=de(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 o=Ae(t,e);return o!=="before"&&o!=="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(o){C.error(o)}return t}},pe=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)},Bt=i=>{if(pe(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},Ht=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 o=t.getAttribute("src")||t.getAttribute("href");o?.startsWith("blob:")&&i?.defaultView?.URL.revokeObjectURL(o)}),i){const t=Array.from(i.styleSheets||[]);for(const o of t){const s=Array.from(o.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 o of e)if(!(o in i))return!1;for(const o of t)if(o in i&&typeof i[o]!="function")return!1;return!0}function ge(i){return Ne(i,["nodeType"],[])&&i.nodeType===Node.ELEMENT_NODE}function Oe(i,e){return ge(i)&&i.tagName.toLowerCase()===e.toLowerCase()}function Yt(i){return Ne(i,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const he=({position:i,frameElement:e})=>{const t=e.getBoundingClientRect(),o=t.width/e.offsetWidth,s=t.height/e.offsetHeight,{left:r=0,top:c=0}=t,a=i.clientX*o+r,l=i.clientY*s+c;return{clientX:a,clientY:l}},xt=(i,e,t,o)=>{const s=e?.view?.frameElement;if(!e||!s)return i;const r=t.getSpineItemFromIframe(s),c=s,{height:a,width:l}=o.getPageSize();if(!r||!(c instanceof HTMLIFrameElement))return i;if(pe(i)){const{clientX:u,clientY:d}=he({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(Bt(i)){const{clientX:u,clientY:d}=he({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(Ht(i)){const u=Array.from(i.touches).map(p=>{const{clientX:g,clientY:m}=he({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:o,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(pe(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)}});o(()=>{a.forEach(l=>l())})}),t},me=i=>b.map(e=>Object.entries(e).reduce((t,[o,s])=>i.includes(o)?{...t,[o]:s}:t,{})),K=i=>e=>e.pipe(me(i),b.distinctUntilChanged($.isShallowEqual));function J(i){return new n.Observable(e=>{const t=new ResizeObserver(o=>{e.next(o)});return t.observe(i),()=>{t.disconnect()}})}const X=i=>e=>e.pipe(b.switchMap(t=>i.pipe(b.first(),b.map(()=>t)))),ke=i=>{let e;const t=i.subscribe(o=>{e={result:o}});return()=>(t.unsubscribe(),e?n.of(e.result):i)};function fe(){return new n.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 Se(i){return n.defer(()=>fe().pipe(b.switchMap(i)))}const ye=(i,e)=>new n.Observable(t=>{const o=new MutationObserver(s=>{t.next(s)});return o.observe(i,e),()=>o.disconnect()});function Gt(i,e){return new n.Observable(t=>{const o=new IntersectionObserver(s=>{t.next(s)},e);return o.observe(i),()=>{o.disconnect()}})}class Ve{constructor(e,t){this.settingsManager=t;const o=$.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(o),this.inputSettings=$.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new n.Subject,this.values$=n.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(b.startWith(this.outputSettings))]).pipe(b.map(([s,r])=>({...s,...r})),b.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const t=this.getCleanedParentInputSettings(e),o=this.settingsManager._prepareUpdate(t),s=$.shallowMergeIfDefined(this.inputSettings,e),r=this.computeOutputSettings(s),c=this.hasSettingsChanged(r);return{hasChanged:c||o.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!o.hasChanged&&c&&this.outputSettingsUpdateSubject.next(r),{...o.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(K(e)):this.values$.pipe(b.map(t=>t[e]),b.distinctUntilChanged($.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let Kt=class extends Ve{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:t,fontScale:o,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:o,fontWeight:s,fontJustification:r}=e,c=new n.Subject,a=i(e),l=new Kt({fontScale:t,lineHeight:o,fontWeight:s,fontJustification:r},a.settings),u=()=>`
6
+ `);const l=a.contentDocument?.body.querySelectorAll("a");l?.forEach(u=>{o.observe(u)}),r(()=>{l?.forEach(u=>{o.unobserve(u)})})}),{...t}},Ot=i=>e=>{const t=i(e);return t.context.state$.pipe(n.takeUntil(t.$.destroy$)).subscribe(({rootElement:o})=>{if(!o)return;const s=()=>{t.settings.values.computedPageTurnMode==="controlled"&&o.scrollTo(0,0)};o.addEventListener("scroll",s)}),t.hookManager.register("item.onDocumentLoad",({itemId:o})=>{const r=t.spineItemsManager.get(o)?.renderer.getDocumentFrame();r&&r.contentDocument?.body.setAttribute("tabindex","-1")}),t},C=$.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),o="createRange"in i?i:i.ownerDocument;if(t){let s,r=0;const c=o.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(o,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 o=Ae(i.getBoundingClientRect(),e);return o!=="before"&&o!=="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 o=Ae(t,e);return o!=="before"&&o!=="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(o){C.error(o)}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 o=t.getAttribute("src")||t.getAttribute("href");o?.startsWith("blob:")&&i?.defaultView?.URL.revokeObjectURL(o)}),i){const t=Array.from(i.styleSheets||[]);for(const o of t){const s=Array.from(o.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 o of e)if(!(o in i))return!1;for(const o of t)if(o in i&&typeof i[o]!="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(),o=t.width/e.offsetWidth,s=t.height/e.offsetHeight,{left:r=0,top:c=0}=t,a=i.clientX*o+r,l=i.clientY*s+c;return{clientX:a,clientY:l}},xt=(i,e,t,o)=>{const s=e?.view?.frameElement;if(!e||!s)return i;const r=t.getSpineItemFromIframe(s),c=s,{height:a,width:l}=o.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:o,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)}});o(()=>{a.forEach(l=>l())})}),t},he=i=>b.map(e=>Object.entries(e).reduce((t,[o,s])=>i.includes(o)?{...t,[o]:s}:t,{})),K=i=>e=>e.pipe(he(i),b.distinctUntilChanged($.isShallowEqual));function J(i){return new n.Observable(e=>{const t=new ResizeObserver(o=>{e.next(o)});return t.observe(i),()=>{t.disconnect()}})}const X=i=>e=>e.pipe(b.switchMap(t=>i.pipe(b.first(),b.map(()=>t)))),ke=i=>{let e;const t=i.subscribe(o=>{e={result:o}});return()=>(t.unsubscribe(),e?n.of(e.result):i)};function me(){return new n.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 n.defer(()=>me().pipe(b.switchMap(i)))}const Se=(i,e)=>new n.Observable(t=>{const o=new MutationObserver(s=>{t.next(s)});return o.observe(i,e),()=>o.disconnect()});function Gt(i,e){return new n.Observable(t=>{const o=new IntersectionObserver(s=>{t.next(s)},e);return o.observe(i),()=>{o.disconnect()}})}class Ve{constructor(e,t){this.settingsManager=t;const o=$.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(o),this.inputSettings=$.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new n.Subject,this.values$=n.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(b.startWith(this.outputSettings))]).pipe(b.map(([s,r])=>({...s,...r})),b.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const t=this.getCleanedParentInputSettings(e),o=this.settingsManager._prepareUpdate(t),s=$.shallowMergeIfDefined(this.inputSettings,e),r=this.computeOutputSettings(s),c=this.hasSettingsChanged(r);return{hasChanged:c||o.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!o.hasChanged&&c&&this.outputSettingsUpdateSubject.next(r),{...o.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(K(e)):this.values$.pipe(b.map(t=>t[e]),b.distinctUntilChanged($.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let Kt=class extends Ve{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:t,fontScale:o,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:o,fontWeight:s,fontJustification:r}=e,c=new n.Subject,a=i(e),l=new Kt({fontScale:t,lineHeight:o,fontWeight:s,fontJustification:r},a.settings),u=()=>`
7
7
 
8
8
  body {
9
9
  ${l.values.fontScale!==1?`font-size: ${l.values.fontScale}em !important;`:""}
@@ -11,7 +11,7 @@
11
11
  ${l.values.fontWeight!=="publisher"?`font-weight: ${l.values.fontWeight} !important;`:""}
12
12
  ${l.values.fontJustification!=="publisher"?`text-align: ${l.values.fontJustification} !important;`:""}
13
13
  }
14
- `,d=g=>{a.spineItemsManager.items.forEach(m=>{if(m.renditionLayout!=="pre-paginated"){const h=m.renderer.getDocumentFrame();h&&D(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&&D(h,"prose-reader-fonts",u())}});const p=g=>g.pipe(b.pairwise(),n.map(([m,h])=>h.fontScale!==m.fontScale||h.lineHeight!==m.lineHeight));return l.values$.pipe(p,b.tap(d),n.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.complete(),l.destroy(),a.destroy()},settings:l}},Qt=i=>e=>{const t=i(e),o=s=>n.fromEvent(s,"keyup").pipe(n.withLatestFrom(t.settings.values$),n.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 o(document).pipe(n.takeUntil(t.$.destroy$)).subscribe(),t.spineItemsManager.items$.pipe(n.switchMap(s=>n.merge(...s.map(r=>r.loaded$.pipe(n.switchMap(()=>{const c=r.renderer.getDocumentFrame();return c instanceof HTMLIFrameElement&&c?.contentDocument?o(c.contentDocument):n.EMPTY}))))),n.takeUntil(t.$.destroy$)).subscribe(),t},jt=i=>i.spine.spineItemsManager.items$.pipe(n.switchMap(e=>n.merge(...e.map(t=>t.loaded$.pipe(n.switchMap(()=>{const o=t.renderer.getDocumentFrame();if(!o||!o?.contentDocument)return n.NEVER;const r=Array.from(o.contentDocument.querySelectorAll("a")).map(c=>n.fromEvent(c,"click"));return n.merge(...r)}))))),n.tap(e=>{e.preventDefault()}),n.share());class R{constructor(){this.isDestroyed=!1,this.destroySubject=new n.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const ce=class ce extends R{constructor(e){super(),this.triggerSubject=new n.Subject,this.stateSubject=new n.BehaviorSubject("idle"),this.unload$=this.triggerSubject.pipe(n.withLatestFrom(this.stateSubject),n.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),n.map(()=>{}),n.share()),this.load$=this.triggerSubject.pipe(n.withLatestFrom(this.stateSubject),n.filter(([s,r])=>s.type==="load"&&r!=="loaded"&&r!=="loading"),n.map(()=>{}),n.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(n.withLatestFrom(this.stateSubject),n.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),n.map(()=>{}),n.share());this.loaded$=this.load$.pipe(n.switchMap(()=>(this.stateSubject.next("loading"),this.onCreateDocument().pipe(n.first()).pipe(n.mergeMap(r=>(this.hookManager.execute("item.onDocumentCreated",this.item.id,{itemId:this.item.id,documentContainer:r}),this.onLoadDocument().pipe(n.endWith(null),n.first()).pipe(X(this.context.bridgeEvent.viewportFree$),n.switchMap(()=>{const a=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:r}).filter(l=>l instanceof n.Observable);return n.combineLatest([n.of(null),...a]).pipe(n.first())})))),n.map(()=>{this.stateSubject.next("loaded")}),n.takeUntil(t)))),n.share());const o=t.pipe(n.switchMap(()=>(this.stateSubject.next("unloading"),this.context.bridgeEvent.viewportFree$.pipe(n.first(),n.tap(()=>{this.hookManager.destroy("item.onDocumentLoad",this.item.id)}),n.switchMap(()=>this.onUnload().pipe(n.endWith(null),n.first())),n.tap(()=>{this.stateSubject.next("idle")}),n.takeUntil(this.load$)))));n.merge(this.unload$,o).pipe(n.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){this._documentContainer=e,this._documentContainer.classList.add(ce.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this._documentContainer?.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(n.map(e=>e==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new n.Subject;return n.defer(()=>this.onRenderHeadless({release:e})).pipe(n.endWith(void 0),n.first(),n.map(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),n.finalize(()=>{e.complete()}),n.catchError(t=>(C.error(t),n.of(void 0))))}layout(e){return n.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:o}=G(t);if(o)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};ce.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let _=ce;const ei=i=>new URL(i.href);class Q{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await n.lastValueFrom(this.settings.values.getResource?.(this.item)??n.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://"),o=t?i.replace("file://","http://"):i,s=new URL(e,o).toString();return t?s.replace("http://","file://"):s},ti=async(i,e,t,o,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 y=h.match(/url\(['"]?([^'"]+)['"]?\)/);if(!y)return h;const S=y[1]??"",f=o.manifest?.items.find(({href:w})=>`${Ue(t,S).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(f){const w=new Q(f,s);try{const v=await w.getResource();if(v instanceof Response){const P=await v.blob(),L=i.defaultView?.URL.createObjectURL(P);return h.replace(y[0],`url("${L}")`)}}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,o,s)=>{const r=e.getAttribute("src")||e.getAttribute("href");if(!r)return n.of(null);const c=o.manifest?.items.find(({href:l})=>`${Ue(t,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!c)return n.of(null);const a=new Q(c,s);return n.from(a.getResource()).pipe(n.mergeMap(l=>l instanceof Response?n.from(l.blob()):n.of(void 0)),n.mergeMap(l=>{if(!l)return n.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 n.Observable(d=>{e.onload=async()=>{try{e.sheet&&await ti(i,e,t,o,s),d.next(),d.complete()}catch(p){d.error(p)}},e.onerror=d.error});return n.of(null)}))},ni=({settings:i,item:e,context:t})=>o=>o.pipe(n.switchMap(s=>{const r=De(s.contentDocument),c=$.getParentPath(e.href),a=r.map(l=>ii(s.contentDocument,l,c,t,i));return n.combineLatest(a).pipe(n.map(()=>s))})),oi=i=>{qt(i?.contentDocument)},si=[".xhtml",".html",".htm"],q="prose-reader",ri=async(i,e)=>{if(typeof i=="string")return i;const t=$.parseContentType(i.headers.get("Content-Type")||"")||$.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(),`
14
+ `,d=g=>{a.spineItemsManager.items.forEach(m=>{if(m.renditionLayout!=="pre-paginated"){const h=m.renderer.getDocumentFrame();h&&D(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&&D(h,"prose-reader-fonts",u())}});const p=g=>g.pipe(b.pairwise(),n.map(([m,h])=>h.fontScale!==m.fontScale||h.lineHeight!==m.lineHeight));return l.values$.pipe(p,b.tap(d),n.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.complete(),l.destroy(),a.destroy()},settings:l}},Qt=i=>e=>{const t=i(e),o=s=>n.fromEvent(s,"keyup").pipe(n.withLatestFrom(t.settings.values$),n.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 o(document).pipe(n.takeUntil(t.$.destroy$)).subscribe(),t.spineItemsManager.items$.pipe(n.switchMap(s=>n.merge(...s.map(r=>r.loaded$.pipe(n.switchMap(()=>{const c=r.renderer.getDocumentFrame();return c instanceof HTMLIFrameElement&&c?.contentDocument?o(c.contentDocument):n.EMPTY}))))),n.takeUntil(t.$.destroy$)).subscribe(),t},jt=i=>i.spine.spineItemsManager.items$.pipe(n.switchMap(e=>n.merge(...e.map(t=>t.loaded$.pipe(n.switchMap(()=>{const o=t.renderer.getDocumentFrame();if(!o||!o?.contentDocument)return n.NEVER;const r=Array.from(o.contentDocument.querySelectorAll("a")).map(c=>n.fromEvent(c,"click"));return n.merge(...r)}))))),n.tap(e=>{e.preventDefault()}),n.share());class R{constructor(){this.isDestroyed=!1,this.destroySubject=new n.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const ae=class ae extends R{constructor(e){super(),this.triggerSubject=new n.Subject,this.stateSubject=new n.BehaviorSubject("idle"),this.unload$=this.triggerSubject.pipe(n.withLatestFrom(this.stateSubject),n.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),n.map(()=>{}),n.share()),this.load$=this.triggerSubject.pipe(n.withLatestFrom(this.stateSubject),n.filter(([s,r])=>s.type==="load"&&r!=="loaded"&&r!=="loading"),n.map(()=>{}),n.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(n.withLatestFrom(this.stateSubject),n.filter(([s,r])=>s.type==="unload"&&r!=="idle"&&r!=="unloading"),n.map(()=>{}),n.share());this.loaded$=this.load$.pipe(n.switchMap(()=>(this.stateSubject.next("loading"),this.onCreateDocument().pipe(n.first()).pipe(n.mergeMap(r=>(this.hookManager.execute("item.onDocumentCreated",this.item.id,{itemId:this.item.id,documentContainer:r}),this.onLoadDocument().pipe(n.endWith(null),n.first()).pipe(X(this.context.bridgeEvent.viewportFree$),n.switchMap(()=>{const a=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:r}).filter(l=>l instanceof n.Observable);return n.combineLatest([n.of(null),...a]).pipe(n.first())})))),n.map(()=>{this.stateSubject.next("loaded")}),n.takeUntil(t)))),n.share());const o=t.pipe(n.switchMap(()=>(this.stateSubject.next("unloading"),this.context.bridgeEvent.viewportFree$.pipe(n.first(),n.tap(()=>{this.hookManager.destroy("item.onDocumentLoad",this.item.id)}),n.switchMap(()=>this.onUnload().pipe(n.endWith(null),n.first())),n.tap(()=>{this.stateSubject.next("idle")}),n.takeUntil(this.load$)))));n.merge(this.unload$,o).pipe(n.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(n.map(e=>e==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new n.Subject;return n.defer(()=>this.onRenderHeadless({release:e})).pipe(n.endWith(void 0),n.first(),n.map(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),n.finalize(()=>{e.complete()}),n.catchError(t=>(C.error(t),n.of(void 0))))}layout(e){return n.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:o}=G(t);if(o)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};ae.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let _=ae;const ei=i=>new URL(i.href);class Q{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await n.lastValueFrom(this.settings.values.getResource?.(this.item)??n.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://"),o=t?i.replace("file://","http://"):i,s=new URL(e,o).toString();return t?s.replace("http://","file://"):s},ti=async(i,e,t,o,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 y=h.match(/url\(['"]?([^'"]+)['"]?\)/);if(!y)return h;const S=y[1]??"",f=o.manifest?.items.find(({href:w})=>`${Ue(t,S).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(f){const w=new Q(f,s);try{const v=await w.getResource();if(v instanceof Response){const P=await v.blob(),L=i.defaultView?.URL.createObjectURL(P);return h.replace(y[0],`url("${L}")`)}}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,o,s)=>{const r=e.getAttribute("src")||e.getAttribute("href");if(!r)return n.of(null);const c=o.manifest?.items.find(({href:l})=>`${Ue(t,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!c)return n.of(null);const a=new Q(c,s);return n.from(a.getResource()).pipe(n.mergeMap(l=>l instanceof Response?n.from(l.blob()):n.of(void 0)),n.mergeMap(l=>{if(!l)return n.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 n.Observable(d=>{e.onload=async()=>{try{e.sheet&&await ti(i,e,t,o,s),d.next(),d.complete()}catch(p){d.error(p)}},e.onerror=d.error});return n.of(null)}))},ni=({settings:i,item:e,context:t})=>o=>o.pipe(n.switchMap(s=>{const r=De(s.contentDocument),c=$.getParentPath(e.href),a=r.map(l=>ii(s.contentDocument,l,c,t,i));return n.combineLatest(a).pipe(n.map(()=>s))})),oi=i=>{qt(i?.contentDocument)},si=[".xhtml",".html",".htm"],q="prose-reader",ri=async(i,e)=>{if(typeof i=="string")return i;const t=$.parseContentType(i.headers.get("Content-Type")||"")||$.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
17
  ${e.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${a}, height=${l}">`:""}
@@ -94,7 +94,7 @@
94
94
  object-fit:contain;
95
95
  `}
96
96
  }
97
- `,ui=({pageHeight:i,pageWidth:e})=>({columnHeight:i,columnWidth:e}),Be=(i,e)=>{i.style.width=`${e.width}px`,i.style.height=`${e.height}px`},di=({minPageSpread:i,blankPagePosition:e,spreadPosition:t,pageHeight:o,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:o,pageWidth:s})??{},p=s,g=o,m=li({...ui({pageHeight:o,pageWidth:s}),enableTouch:a,spreadPosition:t},u);if(D(r,"prose-reader-css",m),u?Be(r,{width:u.width??1,height:u.height??1}):Be(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%",y=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",`${y} 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:o}},pi=()=>`
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:o,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:o,pageWidth:s})??{},p=s,g=o,m=li({...ui({pageHeight:o,pageWidth:s}),enableTouch:a,spreadPosition:t},u);if(D(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%",y=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",`${y} 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:o}},pi=()=>`
98
98
  ${We()}
99
99
  html {
100
100
  width: 100%;
@@ -195,18 +195,18 @@
195
195
  td {
196
196
  max-width: ${t}px;
197
197
  }
198
- `,mi=({isUsingVerticalWriting:i,minimumWidth:e,pageHeight:t,pageWidth:o})=>{let c=o-0;const a=t-0*2;let l=o-0*2;return i&&(l=e-0*2,c=a),{columnHeight:a,columnWidth:c,width:l}},j=(i,e)=>{i.style.width=`${e.width}px`,i.style.height=`${e.height}px`},fi=({pageHeight:i,pageWidth:e,frameElement:t,manifest:o,minPageSpread:s,isRTL:r,blankPagePosition:c,isImageType:a,enableTouch:l,isUsingVerticalWriting:u})=>{const d=s*e,p=o?.renditionLayout==="reflowable"&&o?.renditionFlow==="scrolled-continuous",g=p?Math.min(400,i):i;t?.style.setProperty("width",`${e}px`),p?t?.style.removeProperty("height"):t?.style.setProperty("height",`${g}px`);const{viewportDimensions:m,computedScale:h=1}=ze({frameElement:t,pageHeight:g,pageWidth:e})??{},y=o?.renditionLayout==="pre-paginated";if(t?.contentDocument&&t?.contentWindow){let S=e,f=g;if(m?.hasViewport)D(t,"prose-reader-html-renderer-framce-css",pi()),j(t,{width:m.width??1,height:m.height??1}),t?.style.setProperty("position","absolute"),t?.style.setProperty("top","50%"),t?.style.setProperty("left",c==="before"?r?"25%":"75%":c==="after"?r?"75%":"25%":"50%"),t?.style.setProperty("transform",`translate(-50%, -50%) scale(${h})`),t?.style.setProperty("transform-origin","center center");else{const v=a?gi({isScrollable:o?.renditionFlow==="scrolled-continuous",enableTouch:l}):hi(mi({isUsingVerticalWriting:u,minimumWidth:d,pageHeight:g,pageWidth:e}));if(D(t,"prose-reader-css",v,!0),u)f=Math.ceil(t.contentDocument.documentElement.scrollHeight/g)*g,j(t,{width:d,height:f});else if(o?.renditionFlow==="scrolled-continuous")f=t.contentDocument.body.scrollHeight,j(t,{width:d,height:f});else{const P=Math.ceil(t.contentDocument.documentElement.scrollWidth/e);y?S=e:S=P*e,j(t,{width:S,height:f})}}return S%d===0?t?.style.setProperty("margin-left","0px"):(S=S+e,r&&!u&&t?.style.setProperty("margin-left",`${e}px`)),{width:S,height:f}}};class Si extends _{constructor(){super(...arguments),this.isImageType=()=>!!(this.item.mediaType??$.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=ci();return this.setDocumentContainer(e),n.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return n.of(e).pipe(ai({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),X(this.context.bridgeEvent.viewportFree$),n.tap(()=>{this.attach()}),Ee,ni({context:this.context,item:this.item,settings:this.settings}),Re)}onUnload(){return oi(this.getFrameElement()),this.detach(),n.EMPTY}onLayout({minPageSpread:e,blankPagePosition:t,spreadPosition:o}){const{width:s,height:r}=this.context.getPageSize(),c=this.getFrameElement();if(!c)return n.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 u=di({blankPagePosition:t,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:c,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:r,pageWidth:s,spreadPosition:o});return n.of(u)}const l=fi({pageHeight:r,pageWidth:s,frameElement:c,manifest:this.context.manifest,blankPagePosition:t,isUsingVerticalWriting:a,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode!=="scrollable"});return n.of(l)}onRenderHeadless(){return n.from(this.resourcesHandler.fetchResource()).pipe(n.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 n.from(e.text()).pipe(n.map(s=>new DOMParser().parseFromString(s,t)))}return n.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 He=i=>e=>{const t=i({...e,getRenderer(s){return e.getRenderer?.(s)??(c=>new Si(c))}}),o=jt(t);return o.pipe(n.takeUntil(t.$.destroy$)).subscribe(),{...t,links$:o}};function k(i){return i!=null}class ee{constructor(e){this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.width=e.width,this.height=e.height,this.x=e.x,this.y=e.y}}class M{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class te{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class _e extends ee{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class ie extends ee{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class qe extends ee{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class be{constructor(e){this.x=e.x,this.y=e.y}}class T extends be{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new T(e)}}class Y extends be{constructor(){super(...arguments),this.__symbol="UnsafeSpinePosition"}static from(e){return new Y(e)}}const yi=(i,e)=>{const t=e.getBoundingClientRect(),{x:o,y:s}=i,{left:r,top:c}=t,a=t.width/e.offsetWidth,l=t.height/e.offsetHeight,u=o-r,d=s-c;return{x:u/a,y:d/l}},bi=(i,e)=>new Y(yi(i,e)),Ii=i=>({getSpinePositionFromClientPosition:e=>i.spine.element?bi(e,i.spine.element):void 0}),wi=i=>{let e;const t=i.context.state$.pipe(b.switchMap(({rootElement:l})=>l?new n.Observable(()=>(e=l.ownerDocument.createElement("div"),e.style.cssText=`
198
+ `,mi=({isUsingVerticalWriting:i,minimumWidth:e,pageHeight:t,pageWidth:o})=>{let c=o-0;const a=t-0*2;let l=o-0*2;return i&&(l=e-0*2,c=a),{columnHeight:a,columnWidth:c,width:l}},j=(i,e)=>{i.style.width=`${e.width}px`,i.style.height=`${e.height}px`},fi=({pageHeight:i,pageWidth:e,frameElement:t,manifest:o,minPageSpread:s,isRTL:r,blankPagePosition:c,isImageType:a,enableTouch:l,isUsingVerticalWriting:u})=>{const d=s*e,p=o?.renditionLayout==="reflowable"&&o?.renditionFlow==="scrolled-continuous",g=p?Math.min(400,i):i;t?.style.setProperty("width",`${e}px`),p?t?.style.removeProperty("height"):t?.style.setProperty("height",`${g}px`);const{viewportDimensions:m,computedScale:h=1}=ze({frameElement:t,pageHeight:g,pageWidth:e})??{},y=o?.renditionLayout==="pre-paginated";if(t?.contentDocument&&t?.contentWindow){let S=e,f=g;if(m?.hasViewport)D(t,"prose-reader-html-renderer-framce-css",pi()),j(t,{width:m.width??1,height:m.height??1}),t?.style.setProperty("position","absolute"),t?.style.setProperty("top","50%"),t?.style.setProperty("left",c==="before"?r?"25%":"75%":c==="after"?r?"75%":"25%":"50%"),t?.style.setProperty("transform",`translate(-50%, -50%) scale(${h})`),t?.style.setProperty("transform-origin","center center");else{const v=a?gi({isScrollable:o?.renditionFlow==="scrolled-continuous",enableTouch:l}):hi(mi({isUsingVerticalWriting:u,minimumWidth:d,pageHeight:g,pageWidth:e}));if(D(t,"prose-reader-css",v,!0),u)f=Math.ceil(t.contentDocument.documentElement.scrollHeight/g)*g,j(t,{width:d,height:f});else if(o?.renditionFlow==="scrolled-continuous")f=t.contentDocument.body.scrollHeight,j(t,{width:d,height:f});else{const P=Math.ceil(t.contentDocument.documentElement.scrollWidth/e);y?S=e:S=P*e,j(t,{width:S,height:f})}}return S%d===0?t?.style.setProperty("margin-left","0px"):(S=S+e,r&&!u&&t?.style.setProperty("margin-left",`${e}px`)),{width:S,height:f}}};class Si extends _{constructor(){super(...arguments),this.isImageType=()=>!!(this.item.mediaType??$.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=ci();return this.setDocumentContainer(e),n.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return n.of(e).pipe(ai({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),X(this.context.bridgeEvent.viewportFree$),n.tap(()=>{this.attach()}),Ee,ni({context:this.context,item:this.item,settings:this.settings}),Re)}onUnload(){return oi(this.getFrameElement()),this.detach(),n.EMPTY}onLayout({minPageSpread:e,blankPagePosition:t,spreadPosition:o}){const{width:s,height:r}=this.context.getPageSize(),c=this.getFrameElement();if(!c)return n.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 u=di({blankPagePosition:t,enableTouch:this.settings.values.computedPageTurnMode!=="scrollable",frameElement:c,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:r,pageWidth:s,spreadPosition:o});return n.of(u)}const l=fi({pageHeight:r,pageWidth:s,frameElement:c,manifest:this.context.manifest,blankPagePosition:t,isUsingVerticalWriting:a,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode!=="scrollable"});return n.of(l)}onRenderHeadless(){return n.from(this.resourcesHandler.fetchResource()).pipe(n.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 n.from(e.text()).pipe(n.map(s=>new DOMParser().parseFromString(s,t)))}return n.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))}}),o=jt(t);return o.pipe(n.takeUntil(t.$.destroy$)).subscribe(),{...t,links$:o}};function k(i){return i!=null}class ee{constructor(e){this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.width=e.width,this.height=e.height,this.x=e.x,this.y=e.y}}class M{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class te{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class _e extends ee{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class ie extends ee{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class qe extends ee{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class ye{constructor(e){this.x=e.x,this.y=e.y}}class T extends ye{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new T(e)}}class Y extends ye{constructor(){super(...arguments),this.__symbol="UnsafeSpinePosition"}static from(e){return new Y(e)}}const yi=(i,e)=>{const t=e.getBoundingClientRect(),{x:o,y:s}=i,{left:r,top:c}=t,a=t.width/e.offsetWidth,l=t.height/e.offsetHeight,u=o-r,d=s-c;return{x:u/a,y:d/l}},bi=(i,e)=>new Y(yi(i,e)),Ii=i=>({getSpinePositionFromClientPosition:e=>i.spine.element?bi(e,i.spine.element):void 0}),wi=i=>{let e;const t=i.context.state$.pipe(b.switchMap(({rootElement:l})=>l?new n.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
- `,l.appendChild(e),()=>{e?.remove(),e=void 0})):n.NEVER)),o=l=>n.scheduled(l,n.animationFrameScheduler).pipe(b.tap(()=>{e?.style.setProperty("visibility","hidden")})),s=i.context.bridgeEvent.viewportBusy$.pipe(b.tap(()=>{e?.style.setProperty("visibility","visible")})),r=o(i.viewportFree$).pipe(b.take(1)),a=i.settings.values$.pipe(b.map(()=>i.settings.values.computedPageTurnMode),b.distinctUntilChanged()).pipe(b.switchMap(l=>l==="controlled"?s.pipe(b.switchMap(()=>r)):o(n.of(void 0))),b.takeUntil(i.$.destroy$));return n.merge(t,a)},vi=i=>{i.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:t,minimumWidth:o})=>{const s=i.spineItemsManager.get(e.id),r=s?.renderer.getDocumentFrame();if(s?.renditionLayout!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:c}=G(r),{width:a}=i.context.getPageSize(),l=s?.renderer.getDocumentFrame();if(c){const u=a<o;t==="none"&&u&&l instanceof HTMLIFrameElement&&l?.style.setProperty("left",i.context.isRTL()?"75%":"25%")}})},Pi=i=>i.spineItemsManager.items$.pipe(n.switchMap(e=>n.merge(...e.map(t=>t.pipe(n.tap(o=>{t.containerElement.dataset.isDirty=o.iDirty.toString(),t.containerElement.dataset.isReady=o.isReady.toString()}))))));let $i=class extends Ve{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:t,pageHorizontalMargin:o,pageVerticalMargin:s,layoutLayerTransition:r,viewportMode:c,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0,viewportMode:"normal"}}};const Ye=200,Ti=(i,e,t)=>{const o=i.clientWidth,s=i.clientHeight,r=i.scrollLeft,c=i.scrollTop,a=r+o/2,l=c+s/2,u=t/e,d=a*u,p=l*u,g=d-o/2,m=p-s/2;return{newScrollLeft:g,newScrollTop:m}},Mi=(i,e)=>e.pipe(n.switchMap(t=>{const o=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}=Ti(o??_t(),a,l);return i.viewport.value.element.style.transform=`scale(${l})`,o?.scrollTo({left:Math.max(0,u),top:Math.max(0,d),behavior:"instant"}),n.timer(r?0:Ye).pipe(n.tap(()=>{i.layout()}))})),xe=i=>e=>{const{pageHorizontalMargin:t,pageVerticalMargin:o,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c}=e,a=i(e),l=new $i({pageHorizontalMargin:t,pageVerticalMargin:o,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let S=!1;a.spineItemsManager.items.forEach(f=>{const w=f.renderer.getDocumentFrame();!S&&w&&(w.getBoundingClientRect().left,S=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:S})=>{const f=a.spineItemsManager.get(S.id),v=!!(S.mediaType??$.detectMimeTypeFromName(S.href))?.startsWith("image/"),{pageHorizontalMargin:P=0,pageVerticalMargin:L=0}=l.values,F=a.context.getPageSize();if(f?.renditionLayout==="reflowable"&&!v){let E=F.width-P*2;const A=F.height-L*2;let U=F.width-P*2,B=P*2;f.isUsingVerticalWriting()&&(U=F.width-P*2,E=A,B=L*2);const x=f?.renderer.getDocumentFrame();x&&D(x,"prose-layout-enhancer-css",`
205
+ `,l.appendChild(e),()=>{e?.remove(),e=void 0})):n.NEVER)),o=l=>n.scheduled(l,n.animationFrameScheduler).pipe(b.tap(()=>{e?.style.setProperty("visibility","hidden")})),s=i.context.bridgeEvent.viewportBusy$.pipe(b.tap(()=>{e?.style.setProperty("visibility","visible")})),r=o(i.viewportFree$).pipe(b.take(1)),a=i.settings.values$.pipe(b.map(()=>i.settings.values.computedPageTurnMode),b.distinctUntilChanged()).pipe(b.switchMap(l=>l==="controlled"?s.pipe(b.switchMap(()=>r)):o(n.of(void 0))),b.takeUntil(i.$.destroy$));return n.merge(t,a)},vi=i=>{i.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:t,minimumWidth:o})=>{const s=i.spineItemsManager.get(e.id),r=s?.renderer.getDocumentFrame();if(s?.renditionLayout!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:c}=G(r),{width:a}=i.context.getPageSize(),l=s?.renderer.getDocumentFrame();if(c){const u=a<o;t==="none"&&u&&l instanceof HTMLIFrameElement&&l?.style.setProperty("left",i.context.isRTL()?"75%":"25%")}})},Pi=i=>i.spineItemsManager.items$.pipe(n.switchMap(e=>n.merge(...e.map(t=>t.pipe(n.tap(o=>{t.containerElement.dataset.isDirty=o.iDirty.toString(),t.containerElement.dataset.isReady=o.isReady.toString()}))))));let $i=class extends Ve{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:t,pageHorizontalMargin:o,pageVerticalMargin:s,layoutLayerTransition:r,viewportMode:c,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0,viewportMode:"normal"}}};const Ye=200,Ti=(i,e,t)=>{const o=i.clientWidth,s=i.clientHeight,r=i.scrollLeft,c=i.scrollTop,a=r+o/2,l=c+s/2,u=t/e,d=a*u,p=l*u,g=d-o/2,m=p-s/2;return{newScrollLeft:g,newScrollTop:m}},Mi=(i,e)=>e.pipe(n.switchMap(t=>{const o=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}=Ti(o??_t(),a,l);return i.viewport.value.element.style.transform=`scale(${l})`,o?.scrollTo({left:Math.max(0,u),top:Math.max(0,d),behavior:"instant"}),n.timer(r?0:Ye).pipe(n.tap(()=>{i.layout()}))})),xe=i=>e=>{const{pageHorizontalMargin:t,pageVerticalMargin:o,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c}=e,a=i(e),l=new $i({pageHorizontalMargin:t,pageVerticalMargin:o,layoutAutoResize:s,layoutLayerTransition:r,viewportMode:c},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let S=!1;a.spineItemsManager.items.forEach(f=>{const w=f.renderer.getDocumentFrame();!S&&w&&(w.getBoundingClientRect().left,S=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:S})=>{const f=a.spineItemsManager.get(S.id),v=!!(S.mediaType??$.detectMimeTypeFromName(S.href))?.startsWith("image/"),{pageHorizontalMargin:P=0,pageVerticalMargin:L=0}=l.values,F=a.context.getPageSize();if(f?.renditionLayout==="reflowable"&&!v){let E=F.width-P*2;const A=F.height-L*2;let U=F.width-P*2,H=P*2;f.isUsingVerticalWriting()&&(U=F.width-P*2,E=A,H=L*2);const x=f?.renderer.getDocumentFrame();x&&D(x,"prose-layout-enhancer-css",`
206
206
  body {
207
207
  width: ${U}px !important;
208
208
  margin: ${L}px ${P}px !important;
209
- column-gap: ${B}px !important;
209
+ column-gap: ${H}px !important;
210
210
  column-width: ${E}px !important;
211
211
  height: ${A}px !important;
212
212
  }
@@ -244,7 +244,7 @@
244
244
  overflow: hidden;
245
245
  max-width: 300px;
246
246
  width: 80%;
247
- `,i.appendChild(t),i.appendChild(o),i},Ci=i=>e=>{const{loadingElementCreate:t=Li}=e,o=i(e),s=l=>n.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:Fi(p,o.context),item:d});return p.appendChild(m),u[d.id]=m,u},{})),r=l=>n.combineLatest([o.spine.layout$,o.theme.$.theme$]).pipe(b.map(([,u])=>({width:o.context.state.visibleAreaRect.width,theme:u})),b.distinctUntilChanged($.isShallowEqual),b.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=>o.spineItemsObserver.itemIsReady$.pipe(b.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=o.spineItemsManager.items$.pipe(b.switchMap(l=>s(l)),b.shareReplay(1),b.takeUntil(o.context.destroy$));return a.pipe(b.switchMap(l=>n.merge(r(l),c(l))),b.takeUntil(o.$.destroy$)).subscribe(),{...o,loading:{$:{items$:a}}}};class Ei extends _{getImageElement(){const e=this.documentContainer;if(e instanceof HTMLImageElement)return e}onCreateDocument(){const e=this.containerElement.ownerDocument.createElement("img");return n.from(this.resourcesHandler.getResource()).pipe(n.switchMap(t=>{if(this.setDocumentContainer(e),e.style.objectFit="contain",e.style.userSelect="none",t instanceof URL)return n.of(t.href);if(t instanceof Response)return n.from(t.blob()).pipe(n.map(o=>URL.createObjectURL(o)));throw new Error("Invalid resource")}),n.map(t=>{const o=this.getImageElement();return o&&(o.src=t),e}))}onLoadDocument(){const e=this.getImageElement();if(!e)throw new Error("invalid element");return this.attach(),n.fromEvent(e,"load")}onUnload(){const e=this.getImageElement();return e&&URL.revokeObjectURL(e.src),this.detach(),n.EMPTY}onLayout({spreadPosition:e}){const t=this.getImageElement(),{height:o,width:s}=this.context.getPageSize();let r=o;const c=s;if(!t)return n.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",n.of({width:c,height:r})}onRenderHeadless(){return n.EMPTY}getDocumentFrame(){}}const Ri=i=>e=>{const t=i({...e,getRenderer(c){const a=e.getRenderer?.(c),u=!!(c.mediaType??$.detectMimeTypeFromName(c.href))?.startsWith("image/");return!a&&u?d=>new Ei(d):a}}),o=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;o.observe(l);const u=l.contentDocument?.body.getElementsByTagName("video"),d=Array.from(u||[]).map(p=>(s.observe(p),()=>s.unobserve(p)));c(()=>{o.unobserve(l),d.forEach(p=>p())})}),{...t,destroy:()=>{o.disconnect(),s.disconnect(),t.destroy()}}},Ai=(i,e)=>i.links$.pipe(n.tap(t=>{if(!Oe(t.target,"a")||t.type!=="click")return;const o=new URL(t.target.href),s=`${o.origin}${o.pathname}`;i.context.manifest?.spineItems.some(c=>c.href===s)&&e.goToUrl(o)})),V=C.namespace("navigation"),Di=({position:i,spineItem:e,pageHeight:t,pageWidth:o,spineItemLocator:s})=>{let r=new M({x:i.x-o,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:o,spineLocator:s,context:r})=>{const c=t,a=s.getSpineItemFromPosition(i)||o.get(0),l=i;if(!a)return l;const u=s.getSpineItemPositionFromSpinePosition(i,a),d=Di({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 T({x:i.x-r.getPageSize().width,y:0}):new T({y:i.y-r.getPageSize().height,x:0}))},Ni=({position:i,spineItem:e,context:t,navigationResolver:o,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Ze({position:i,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&i.x===a.x)return o.getAdjustedPositionForSpread(a);if(t.state.isUsingSpreadMode){if(e?.isUsingVerticalWriting()&&i.x!==a.x)return o.getAdjustedPositionForSpread(o.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 o.getAdjustedPositionForSpread(a);const l=Ze({position:a,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return o.getAdjustedPositionForSpread(l)}return o.getAdjustedPositionForSpread(a)},Oi=({position:i,spineItem:e,pageHeight:t,pageWidth:o,spineItemLocator:s})=>{let r=new M({x:i.x+o,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:o,spineLocator:s,context:r})=>{const c=t,a=s.getSpineItemFromPosition(i)||o.get(0),l=i;if(!a)return l;const u=s.getSpineItemPositionFromSpinePosition(i,a),d=Oi({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 T({x:i.x+r.getPageSize().width,y:0}):new T({y:i.y+r.getPageSize().height,x:0}))},ki=({position:i,spineItem:e,context:t,navigationResolver:o,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Ge({position:i,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&i.x===a.x)return o.getAdjustedPositionForSpread(a);if(t.state.isUsingSpreadMode){if(e?.isUsingVerticalWriting()&&i.x!==a.x)return o.getAdjustedPositionForSpread(o.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 o.getAdjustedPositionForSpread(a);const l=Ge({position:a,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return o.getAdjustedPositionForSpread(l)}return o.getAdjustedPositionForSpread(a)};class Vi{constructor(e){this.reader=e,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 e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const o=ki({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:o})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const o=Ni({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:o})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const o=this.reader.spineItemsManager.get(e);if(o===void 0){V.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:o.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,...o}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});V.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...o,position:s}),this.reader.navigation.navigate({position:s,...o})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const o=this.reader.spine.pages.fromAbsolutePageIndex(e);if(V.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:o}),o){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:o.pageIndex,spineItemId:o.itemIndex});return this.reader.navigation.navigate({position:s,...t})}}}class Ui{constructor(e){this.reader=e,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(e,{final:t,start:o}={}){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;o&&(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 T({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 Wi=i=>i.pagination.state$.pipe(n.withLatestFrom(i.context.manifest$,i.settings.values$),n.map(([e,{spineItems:t,readingDirection:o},{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"&&(o==="ltr"&&!c||o==="rtl"&&!l),canGoRightSpineItem:s!=="vertical"&&(o==="ltr"&&!a||o==="rtl"&&!u)}}),n.distinctUntilChanged($.isShallowEqual)),zi=({reader:i,duration:e})=>t=>{let o;const s=()=>{o?.(),o=void 0};return t.pipe(n.tap(()=>{o||(o=i?.navigation.lock())}),n.throttleTime(e,n.animationFrameScheduler,{trailing:!0,leading:!0}),n.tap(s),n.finalize(s))},Bi=i=>e=>{const t=i(e),o=Wi(t),s=new Vi(t),r=new Ui(t),c=l=>{const{cfi:u,...d}=l;t.load(d),u&&s.goToCfi(u,{animate:!1})};return Ai(t,s).pipe(n.takeUntil(t.$.destroy$)).subscribe(),{...t,load:c,navigation:{...t.navigation,state$:o,throttleLock:({duration:l,trigger:u})=>u.pipe(zi({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 o=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(f=>f.href===r.href);if(o<m)return s;const y={title:r.title,path:r.path},S=Ke(i,r.contents,t);return S?{...y,subChapter:S}:y}return s},void 0)},Hi=(i,e)=>{const{href:t}=e;return Ke(t,i.nav?.toc??[],i)},_i=i=>{const e=i.context.manifest,t=i.spineItemsManager.items;return e?t.reduce((o,{item:s})=>(o[s.id]=Hi(e,s),o),{}):{}},qi=i=>i.spineItemsManager.items$.pipe(n.startWith([]),n.map(()=>_i(i))),Yi=(i,e,t)=>i+e*t,xi=(i,e,t)=>{const o=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+o.state.visibleAreaRect.height)/s)):Math.max(0,Math.min(1,(e.x-a+o.state.visibleAreaRect.width)/r))},Xi=(i,e,t,o,s)=>s.isReady$.pipe(n.first(),n.withLatestFrom(i.layoutInfo$),n.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((f,w)=>f+(w.progressionWeight??0),0)||0,p=i.spineItemsManager.getSpineItemIndex(s)??0,g=i.context.manifest?.spineItems.length??0,m=c.pages.filter(f=>f.itemIndex===p).length??0,h=a.manifest?.spineItems[e]?.progressionWeight??(p+1)/g;let y=(t+1)*(h/m);!l&&s.renditionLayout==="reflowable"&&!r&&(y=0);let S=d+y;return a.manifest?.renditionFlow==="scrolled-continuous"&&(r?y=xi(i,o,s):y=0,S=Yi(d,h,y)),e===u-1&&t===m-1&&S>.99?1:S})),Zi=i=>i.spine.layout$.pipe(n.debounceTime(10,n.animationFrameScheduler),n.withLatestFrom(i.pagination.state$),n.map(()=>({numberOfPagesPerItems:i.spineItemsManager.items.reduce((t,o)=>[...t,o.numberOfPages],[]),numberOfTotalPages:i.spine.pages.value.pages.length})),n.distinctUntilChanged($.isShallowEqual),n.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),Gi=(i,e,t,o)=>{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 n.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:o,isUsingSpread:s.state.isUsingSpreadMode??!1})},Ki=i=>n.combineLatest([i.pagination.state$,i.layout$]).pipe(n.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):n.of(0)})),Ji=i=>{const e=qi(i),t=Zi(i),o=new n.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=n.combineLatest([i.pagination.state$,e,Ki(i)]).pipe(n.switchMap(([c,a,l])=>Gi(i,c,a,l).pipe(n.map(u=>({...c,...u})))),n.distinctUntilChanged($.isShallowEqual));return{paginationInfo$:n.combineLatest([s,t]).pipe(n.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)})),n.tap(c=>{o.next(c)}),n.shareReplay(1)),getPaginationInfo:()=>o.value}},W=i=>O.generate({spineIndex:i.index,spineId:i.id}),Je=({nodeOrRange:i,offset:e,item:t})=>{const o="ownerDocument"in i?i.ownerDocument:i.startContainer.ownerDocument;return!o||!o?.documentElement||i===o?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})},ne=({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}),Qi=i=>i.index.toString(),je=i=>i[0]?.index===6&&i.length>1,oe=i=>{const e=O.parse(i);return O.isIndirectionOnly(e)},ji=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,se=i=>{const e=O.parse(i),r=((ji(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}},Ie=({cfi:i,spineItemsManager:e})=>{const{itemIndex:t,...o}=se(i),s=e.get(t);if(!s)return{...o,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{...o,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 C.warn(`Error resolving cfi: ${i}.`),C.warn(a),{...o,spineItem:s,itemIndex:t,node:null}}}return{...o,itemIndex:t,spineItem:s,node:null}},en=(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 o=W(t.item);return{...i.cfi.parseCfi(o),cfi:W(t.item),itemIndex:t.index,node:null}},et=(i,e)=>{let t=i?.itemPageIndex;const{itemIndex:o,...s}=e.cfi.parseCfi(i.cfi),r=e.spineItemsManager.get(o);return r?fe().pipe(n.withLatestFrom(r.isReady$),n.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:o,node:a,startOffset:l,absolutePageIndex:p,itemPageIndex:t}})):n.of({...i,itemIndex:o,...s})};class tt{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const o=this.locatorsByKey.get(t);o&&(o.observerCount--,o.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,o)=>{const s={resource:t,meta:en(this.reader,t)};return Se(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),c=r?.renditionLayout==="reflowable",a=o.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(n.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{a()},1e3)}));if(l&&u)return u.observerCount++,d(u.consolidate$.pipe(n.map(({resource:g,meta:m})=>({resource:g,meta:m}))));const p=this.reader.spine.layout$.pipe(n.debounceTime(10),n.startWith(s),n.switchScan(g=>et(g.meta,this.reader).pipe(n.map(m=>({...g,meta:m}))),s),n.shareReplay({refCount:!0,bufferSize:1}));return l&&this.locatorsByKey.set(l,{observerCount:1,consolidate$:p}),d(p)})}}locateResource(e,t){return Array.isArray(e)?Se(()=>n.combineLatest(e.map(o=>this.locate(o,t??{}))).pipe(n.defaultIfEmpty([]))):this.locate(e,t??{})}}const it=i=>e=>{const t=i(e),{paginationInfo$:o,getPaginationInfo:s}=Ji(t);o.pipe(n.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 o}}}},tn=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)}})}),we=async i=>new Promise((e,t)=>{const o=window.indexedDB.open(i);o.onerror=s=>{t(s)},o.onsuccess=()=>{e(tn(o.result))},o.onupgradeneeded=()=>{o.result.createObjectStore("store")}}),nn=i=>{let e=Date.now().toString();const t=new n.Subject,o=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=o(l);if(!d)return new Response("Item not found",{status:404});const g=await(await we("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(b.mergeMap(({id:l,data:u})=>{const d=o(l);return d?n.from(n.forkJoin([we("prose-reader"),n.from(u.blob())])).pipe(b.switchMap(([p,g])=>n.from(p.put(`${e}_${d.id}`,g))),b.catchError(p=>(C.error(p),n.EMPTY))):n.EMPTY}),b.takeUntil(i.destroy$)).subscribe();const c=i.manifest$.pipe(b.tap(()=>{e=Date.now().toString()}));return n.merge(c).pipe(b.switchMap(()=>(C.debug("Cleanup up old cache..."),n.from(we("prose-reader")).pipe(b.switchMap(l=>n.from(l.keys()).pipe(b.map(u=>u.filter(d=>!d.toString().startsWith(e))),b.switchMap(u=>{const d=u.map(p=>l.remove(p));return n.from(Promise.all(d))}))),b.catchError(l=>(C.error(l),n.EMPTY))))),b.takeUntil(i.destroy$)).subscribe(),{get:s,destroy:()=>{t.complete()}}},on=i=>e=>{const t=i(e),o=nn(t.context);return{...t,destroy:()=>{o.destroy(),t.destroy()}}},sn=(i,e)=>{const t=i.node.ownerDocument?.createRange(),o=i.node.compareDocumentPosition(e.node);if(t){try{if(o&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(i.node,i.offset||0);else if(o&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){C.warn("Failed to create range from selection",s,{anchor:i,focus:e})}return t}},rn=({selection:i,spineItem:e})=>{const{anchorNode:t,anchorOffset:o,focusNode:s,focusOffset:r}=i;if(!(!t||!s))try{return sn({node:t,offset:o},{node:s,offset:r})}catch(c){C.warn("Failed to create range from selection",c,{selection:i,spineItem:e});return}};class an extends R{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=n.NEVER,this.selectionOver$=n.NEVER;else{const o=ye(t.body,{childList:!0,subtree:!0}).pipe(n.filter(r=>!!r.find(c=>c.type==="childList"&&c.removedNodes.length))),s=e.parentElement?ye(e.parentElement,{childList:!0}).pipe(n.filter(r=>!!r.find(c=>Array.from(c.removedNodes).includes(e)))):n.of(null);this.selectionChange$=n.merge(n.fromEvent(t,"selectionchange"),o).pipe(n.map(()=>t.getSelection()),n.takeUntil(n.merge(s,this.destroy$)),n.endWith(null)),this.selectionOver$=n.fromEvent(t,"pointerdown").pipe(n.switchMap(()=>n.merge(n.fromEvent(t,"pointerup"),n.fromEvent(t,"pointercancel"),n.fromEvent(t,"contextmenu")).pipe(n.first(),n.delay(0),n.map(r=>{const c=t.getSelection();return c&&!c.isCollapsed?[r,c]:void 0}),n.filter(k))),n.takeUntil(n.merge(s,this.destroy$)))}}}const cn=i=>i.loaded$.pipe(n.switchMap(()=>{const e=i.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return n.NEVER;const o=new an(e);return n.merge(o.selectionChange$.pipe(n.map(s=>{if(s?.toString())return{type:"change",selection:s}})),o.selectionOver$.pipe(n.map(([s,r])=>({type:"over",event:s,selection:r})))).pipe(n.takeUntil(i.unloaded$),n.endWith(void 0),n.finalize(()=>{o.destroy()}))}),n.distinctUntilChanged()),ln=i=>e=>{const t=i(e);let o;const s=t.spineItemsManager.items$.pipe(n.switchMap(d=>{const p=d.map(g=>{const m=t.spineItemsManager.getSpineItemIndex(g)??0;return cn(g).pipe(n.map(h=>{if(h)return{...h,itemIndex:m}}))});return n.merge(...p)}),n.startWith(void 0),n.distinctUntilChanged(),n.tap(d=>{o=d}),n.shareReplay({refCount:!0,bufferSize:1})),r=s,c=s.pipe(n.map(d=>!!d),n.distinctUntilChanged(),n.filter(d=>d),n.share()),a=c.pipe(n.switchMap(()=>r),n.distinctUntilChanged(),n.filter(d=>!d),n.share()),l=s.pipe(n.filter(d=>d?.type==="over"),n.share()),u=t.context.watch("rootElement").pipe(n.filter(le.isDefined),n.switchMap(d=>n.fromEvent(d,"pointerdown")),n.withLatestFrom(r),n.map(([,d])=>d),n.startWith(void 0),n.shareReplay({refCount:!0,bufferSize:1}));return n.merge(r,u).pipe(n.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:r,selectionStart$:c,selectionEnd$:a,selectionOver$:l,lastSelectionOnPointerdown$:u,getSelection:()=>o,createOrderedRangeFromSelection:rn}}},nt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],un=i=>e=>{const t=i(e),o=new n.BehaviorSubject(e.theme??"bright"),s=()=>{const a=nt.find(l=>l.name===o.value);return`
247
+ `,i.appendChild(t),i.appendChild(o),i},Ci=i=>e=>{const{loadingElementCreate:t=Li}=e,o=i(e),s=l=>n.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:Fi(p,o.context),item:d});return p.appendChild(m),u[d.id]=m,u},{})),r=l=>n.combineLatest([o.spine.layout$,o.theme.$.theme$]).pipe(b.map(([,u])=>({width:o.context.state.visibleAreaRect.width,theme:u})),b.distinctUntilChanged($.isShallowEqual),b.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=>o.spineItemsObserver.itemIsReady$.pipe(b.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=o.spineItemsManager.items$.pipe(b.switchMap(l=>s(l)),b.shareReplay(1),b.takeUntil(o.context.destroy$));return a.pipe(b.switchMap(l=>n.merge(r(l),c(l))),b.takeUntil(o.$.destroy$)).subscribe(),{...o,loading:{$:{items$:a}}}};class Ei extends _{getImageElement(){const e=this.documentContainer;if(e instanceof HTMLImageElement)return e}onCreateDocument(){const e=this.containerElement.ownerDocument.createElement("img");return n.from(this.resourcesHandler.getResource()).pipe(n.switchMap(t=>{if(this.setDocumentContainer(e),e.style.objectFit="contain",e.style.userSelect="none",t instanceof URL)return n.of(t.href);if(t instanceof Response)return n.from(t.blob()).pipe(n.map(o=>URL.createObjectURL(o)));throw new Error("Invalid resource")}),n.map(t=>{const o=this.getImageElement();return o&&(o.src=t),e}))}onLoadDocument(){const e=this.getImageElement();if(!e)throw new Error("invalid element");return this.attach(),n.fromEvent(e,"load")}onUnload(){const e=this.getImageElement();return e&&URL.revokeObjectURL(e.src),this.detach(),n.EMPTY}onLayout({spreadPosition:e}){const t=this.getImageElement(),{height:o,width:s}=this.context.getPageSize();let r=o;const c=s;if(!t)return n.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",n.of({width:c,height:r})}onRenderHeadless(){return n.EMPTY}getDocumentFrame(){}}const Ri=i=>e=>{const t=i({...e,getRenderer(c){const a=e.getRenderer?.(c),u=!!(c.mediaType??$.detectMimeTypeFromName(c.href))?.startsWith("image/");return!a&&u?d=>new Ei(d):a}}),o=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;o.observe(l);const u=l.contentDocument?.body.getElementsByTagName("video"),d=Array.from(u||[]).map(p=>(s.observe(p),()=>s.unobserve(p)));c(()=>{o.unobserve(l),d.forEach(p=>p())})}),{...t,destroy:()=>{o.disconnect(),s.disconnect(),t.destroy()}}},Ai=(i,e)=>i.links$.pipe(n.tap(t=>{if(!Oe(t.target,"a")||t.type!=="click")return;const o=new URL(t.target.href),s=`${o.origin}${o.pathname}`;i.context.manifest?.spineItems.some(c=>c.href===s)&&e.goToUrl(o)})),V=C.namespace("navigation"),Di=({position:i,spineItem:e,pageHeight:t,pageWidth:o,spineItemLocator:s})=>{let r=new M({x:i.x-o,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:o,spineLocator:s,context:r})=>{const c=t,a=s.getSpineItemFromPosition(i)||o.get(0),l=i;if(!a)return l;const u=s.getSpineItemPositionFromSpinePosition(i,a),d=Di({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 T({x:i.x-r.getPageSize().width,y:0}):new T({y:i.y-r.getPageSize().height,x:0}))},Ni=({position:i,spineItem:e,context:t,navigationResolver:o,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Ze({position:i,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&i.x===a.x)return o.getAdjustedPositionForSpread(a);if(t.state.isUsingSpreadMode){if(e?.isUsingVerticalWriting()&&i.x!==a.x)return o.getAdjustedPositionForSpread(o.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 o.getAdjustedPositionForSpread(a);const l=Ze({position:a,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return o.getAdjustedPositionForSpread(l)}return o.getAdjustedPositionForSpread(a)},Oi=({position:i,spineItem:e,pageHeight:t,pageWidth:o,spineItemLocator:s})=>{let r=new M({x:i.x+o,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:o,spineLocator:s,context:r})=>{const c=t,a=s.getSpineItemFromPosition(i)||o.get(0),l=i;if(!a)return l;const u=s.getSpineItemPositionFromSpinePosition(i,a),d=Oi({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 T({x:i.x+r.getPageSize().width,y:0}):new T({y:i.y+r.getPageSize().height,x:0}))},ki=({position:i,spineItem:e,context:t,navigationResolver:o,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:c})=>{const a=Ge({position:i,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&i.x===a.x)return o.getAdjustedPositionForSpread(a);if(t.state.isUsingSpreadMode){if(e?.isUsingVerticalWriting()&&i.x!==a.x)return o.getAdjustedPositionForSpread(o.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 o.getAdjustedPositionForSpread(a);const l=Ge({position:a,context:t,navigationResolver:o,computedPageTurnDirection:c,spineItemsManager:s,spineLocator:r});return o.getAdjustedPositionForSpread(l)}return o.getAdjustedPositionForSpread(a)};class Vi{constructor(e){this.reader=e,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 e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const o=ki({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:o})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const o=Ni({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:o})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const o=this.reader.spineItemsManager.get(e);if(o===void 0){V.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:o.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,...o}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});V.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...o,position:s}),this.reader.navigation.navigate({position:s,...o})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const o=this.reader.spine.pages.fromAbsolutePageIndex(e);if(V.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:o}),o){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:o.pageIndex,spineItemId:o.itemIndex});return this.reader.navigation.navigate({position:s,...t})}}}class Ui{constructor(e){this.reader=e,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(e,{final:t,start:o}={}){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;o&&(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 T({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 Wi=i=>i.pagination.state$.pipe(n.withLatestFrom(i.context.manifest$,i.settings.values$),n.map(([e,{spineItems:t,readingDirection:o},{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"&&(o==="ltr"&&!c||o==="rtl"&&!l),canGoRightSpineItem:s!=="vertical"&&(o==="ltr"&&!a||o==="rtl"&&!u)}}),n.distinctUntilChanged($.isShallowEqual)),zi=({reader:i,duration:e})=>t=>{let o;const s=()=>{o?.(),o=void 0};return t.pipe(n.tap(()=>{o||(o=i?.navigation.lock())}),n.throttleTime(e,n.animationFrameScheduler,{trailing:!0,leading:!0}),n.tap(s),n.finalize(s))},Hi=i=>e=>{const t=i(e),o=Wi(t),s=new Vi(t),r=new Ui(t),c=l=>{const{cfi:u,...d}=l;t.load(d),u&&s.goToCfi(u,{animate:!1})};return Ai(t,s).pipe(n.takeUntil(t.$.destroy$)).subscribe(),{...t,load:c,navigation:{...t.navigation,state$:o,throttleLock:({duration:l,trigger:u})=>u.pipe(zi({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 o=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(f=>f.href===r.href);if(o<m)return s;const y={title:r.title,path:r.path},S=Ke(i,r.contents,t);return S?{...y,subChapter:S}:y}return s},void 0)},Bi=(i,e)=>{const{href:t}=e;return Ke(t,i.nav?.toc??[],i)},_i=i=>{const e=i.context.manifest,t=i.spineItemsManager.items;return e?t.reduce((o,{item:s})=>(o[s.id]=Bi(e,s),o),{}):{}},qi=i=>i.spineItemsManager.items$.pipe(n.startWith([]),n.map(()=>_i(i))),Yi=(i,e,t)=>i+e*t,xi=(i,e,t)=>{const o=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+o.state.visibleAreaRect.height)/s)):Math.max(0,Math.min(1,(e.x-a+o.state.visibleAreaRect.width)/r))},Xi=(i,e,t,o,s)=>s.isReady$.pipe(n.first(),n.withLatestFrom(i.layoutInfo$),n.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((f,w)=>f+(w.progressionWeight??0),0)||0,p=i.spineItemsManager.getSpineItemIndex(s)??0,g=i.context.manifest?.spineItems.length??0,m=c.pages.filter(f=>f.itemIndex===p).length??0,h=a.manifest?.spineItems[e]?.progressionWeight??(p+1)/g;let y=(t+1)*(h/m);!l&&s.renditionLayout==="reflowable"&&!r&&(y=0);let S=d+y;return a.manifest?.renditionFlow==="scrolled-continuous"&&(r?y=xi(i,o,s):y=0,S=Yi(d,h,y)),e===u-1&&t===m-1&&S>.99?1:S})),Zi=i=>i.spine.layout$.pipe(n.debounceTime(10,n.animationFrameScheduler),n.withLatestFrom(i.pagination.state$),n.map(()=>({numberOfPagesPerItems:i.spineItemsManager.items.reduce((t,o)=>[...t,o.numberOfPages],[]),numberOfTotalPages:i.spine.pages.value.pages.length})),n.distinctUntilChanged($.isShallowEqual),n.startWith({numberOfPagesPerItems:[],numberOfTotalPages:0})),Gi=(i,e,t,o)=>{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 n.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:o,isUsingSpread:s.state.isUsingSpreadMode??!1})},Ki=i=>n.combineLatest([i.pagination.state$,i.layout$]).pipe(n.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):n.of(0)})),Ji=i=>{const e=qi(i),t=Zi(i),o=new n.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=n.combineLatest([i.pagination.state$,e,Ki(i)]).pipe(n.switchMap(([c,a,l])=>Gi(i,c,a,l).pipe(n.map(u=>({...c,...u})))),n.distinctUntilChanged($.isShallowEqual));return{paginationInfo$:n.combineLatest([s,t]).pipe(n.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)})),n.tap(c=>{o.next(c)}),n.shareReplay(1)),getPaginationInfo:()=>o.value}},W=i=>O.generate({spineIndex:i.index,spineId:i.id}),Je=({nodeOrRange:i,offset:e,item:t})=>{const o="ownerDocument"in i?i.ownerDocument:i.startContainer.ownerDocument;return!o||!o?.documentElement||i===o?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})},ne=({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}),Qi=i=>i.index.toString(),je=i=>i[0]?.index===6&&i.length>1,oe=i=>{const e=O.parse(i);return O.isIndirectionOnly(e)},ji=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,se=i=>{const e=O.parse(i),r=((ji(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,...o}=se(i),s=e.get(t);if(!s)return{...o,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{...o,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 C.warn(`Error resolving cfi: ${i}.`),C.warn(a),{...o,spineItem:s,itemIndex:t,node:null}}}return{...o,itemIndex:t,spineItem:s,node:null}},en=(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 o=W(t.item);return{...i.cfi.parseCfi(o),cfi:W(t.item),itemIndex:t.index,node:null}},et=(i,e)=>{let t=i?.itemPageIndex;const{itemIndex:o,...s}=e.cfi.parseCfi(i.cfi),r=e.spineItemsManager.get(o);return r?me().pipe(n.withLatestFrom(r.isReady$),n.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:o,node:a,startOffset:l,absolutePageIndex:p,itemPageIndex:t}})):n.of({...i,itemIndex:o,...s})};class tt{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const o=this.locatorsByKey.get(t);o&&(o.observerCount--,o.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,o)=>{const s={resource:t,meta:en(this.reader,t)};return fe(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),c=r?.renditionLayout==="reflowable",a=o.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(n.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{a()},1e3)}));if(l&&u)return u.observerCount++,d(u.consolidate$.pipe(n.map(({resource:g,meta:m})=>({resource:g,meta:m}))));const p=this.reader.spine.layout$.pipe(n.debounceTime(10),n.startWith(s),n.switchScan(g=>et(g.meta,this.reader).pipe(n.map(m=>({...g,meta:m}))),s),n.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(()=>n.combineLatest(e.map(o=>this.locate(o,t??{}))).pipe(n.defaultIfEmpty([]))):this.locate(e,t??{})}}const it=i=>e=>{const t=i(e),{paginationInfo$:o,getPaginationInfo:s}=Ji(t);o.pipe(n.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 o}}}},tn=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 o=window.indexedDB.open(i);o.onerror=s=>{t(s)},o.onsuccess=()=>{e(tn(o.result))},o.onupgradeneeded=()=>{o.result.createObjectStore("store")}}),nn=i=>{let e=Date.now().toString();const t=new n.Subject,o=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=o(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(b.mergeMap(({id:l,data:u})=>{const d=o(l);return d?n.from(n.forkJoin([Ie("prose-reader"),n.from(u.blob())])).pipe(b.switchMap(([p,g])=>n.from(p.put(`${e}_${d.id}`,g))),b.catchError(p=>(C.error(p),n.EMPTY))):n.EMPTY}),b.takeUntil(i.destroy$)).subscribe();const c=i.manifest$.pipe(b.tap(()=>{e=Date.now().toString()}));return n.merge(c).pipe(b.switchMap(()=>(C.debug("Cleanup up old cache..."),n.from(Ie("prose-reader")).pipe(b.switchMap(l=>n.from(l.keys()).pipe(b.map(u=>u.filter(d=>!d.toString().startsWith(e))),b.switchMap(u=>{const d=u.map(p=>l.remove(p));return n.from(Promise.all(d))}))),b.catchError(l=>(C.error(l),n.EMPTY))))),b.takeUntil(i.destroy$)).subscribe(),{get:s,destroy:()=>{t.complete()}}},on=i=>e=>{const t=i(e),o=nn(t.context);return{...t,destroy:()=>{o.destroy(),t.destroy()}}},sn=(i,e)=>{const t=i.node.ownerDocument?.createRange(),o=i.node.compareDocumentPosition(e.node);if(t){try{if(o&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(i.node,i.offset||0);else if(o&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){C.warn("Failed to create range from selection",s,{anchor:i,focus:e})}return t}},rn=({selection:i,spineItem:e})=>{const{anchorNode:t,anchorOffset:o,focusNode:s,focusOffset:r}=i;if(!(!t||!s))try{return sn({node:t,offset:o},{node:s,offset:r})}catch(c){C.warn("Failed to create range from selection",c,{selection:i,spineItem:e});return}};class an extends R{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=n.NEVER,this.selectionOver$=n.NEVER;else{const o=Se(t.body,{childList:!0,subtree:!0}).pipe(n.filter(r=>!!r.find(c=>c.type==="childList"&&c.removedNodes.length))),s=e.parentElement?Se(e.parentElement,{childList:!0}).pipe(n.filter(r=>!!r.find(c=>Array.from(c.removedNodes).includes(e)))):n.of(null);this.selectionChange$=n.merge(n.fromEvent(t,"selectionchange"),o).pipe(n.map(()=>t.getSelection()),n.takeUntil(n.merge(s,this.destroy$)),n.endWith(null)),this.selectionOver$=n.fromEvent(t,"pointerdown").pipe(n.switchMap(()=>n.merge(n.fromEvent(t,"pointerup"),n.fromEvent(t,"pointercancel"),n.fromEvent(t,"contextmenu")).pipe(n.first(),n.delay(0),n.map(r=>{const c=t.getSelection();return c&&!c.isCollapsed?[r,c]:void 0}),n.filter(k))),n.takeUntil(n.merge(s,this.destroy$)))}}}const cn=i=>i.loaded$.pipe(n.switchMap(()=>{const e=i.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return n.NEVER;const o=new an(e);return n.merge(o.selectionChange$.pipe(n.map(s=>{if(s?.toString())return{type:"change",selection:s}})),o.selectionOver$.pipe(n.map(([s,r])=>({type:"over",event:s,selection:r})))).pipe(n.takeUntil(i.unloaded$),n.endWith(void 0),n.finalize(()=>{o.destroy()}))}),n.distinctUntilChanged()),ln=i=>e=>{const t=i(e);let o;const s=t.spineItemsManager.items$.pipe(n.switchMap(d=>{const p=d.map(g=>{const m=t.spineItemsManager.getSpineItemIndex(g)??0;return cn(g).pipe(n.map(h=>{if(h)return{...h,itemIndex:m}}))});return n.merge(...p)}),n.startWith(void 0),n.distinctUntilChanged(),n.tap(d=>{o=d}),n.shareReplay({refCount:!0,bufferSize:1})),r=s,c=s.pipe(n.map(d=>!!d),n.distinctUntilChanged(),n.filter(d=>d),n.share()),a=c.pipe(n.switchMap(()=>r),n.distinctUntilChanged(),n.filter(d=>!d),n.share()),l=s.pipe(n.filter(d=>d?.type==="over"),n.share()),u=t.context.watch("rootElement").pipe(n.filter(ce.isDefined),n.switchMap(d=>n.fromEvent(d,"pointerdown")),n.withLatestFrom(r),n.map(([,d])=>d),n.startWith(void 0),n.shareReplay({refCount:!0,bufferSize:1}));return n.merge(r,u).pipe(n.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:r,selectionStart$:c,selectionEnd$:a,selectionOver$:l,lastSelectionOnPointerdown$:u,getSelection:()=>o,createOrderedRangeFromSelection:rn}}},nt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],un=i=>e=>{const t=i(e),o=new n.BehaviorSubject(e.theme??"bright"),s=()=>{const a=nt.find(l=>l.name===o.value);return`
248
248
  body {
249
249
  ${a!==void 0?`background-color: ${a.backgroundColor} !important;`:""}
250
250
  }
@@ -254,7 +254,7 @@
254
254
  color: ${a.foregroundColor};
255
255
  }
256
256
  `:""}
257
- `},r=({container:a})=>{const l=nt.find(u=>u.name===o.value);return l&&a.style.setProperty("background-color",l.backgroundColor),()=>{}},c=()=>{t.spineItemsManager.items.forEach(a=>{const l=a.renderer.getDocumentFrame();l&&D(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&&D(u,"prose-reader-theme",s())}}),t.spineItemsManager.items$.pipe(b.tap(a=>a.map(({element:l})=>r({container:l}))),b.takeUntil(t.$.destroy$)).subscribe(),o.pipe(b.tap(()=>{c()}),b.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:a=>{a!==o.value&&o.next(a)},get:()=>o.value,$:{theme$:o.asObservable()}}}},dn=i=>e=>({...i(e),utils:{isOrIsWithinValidLink:s=>!!(ge(s)&&(s.nodeName==="a"?s:s.closest("a"))?.getAttribute("href"))}});navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const pn=i=>e=>i(e);class ot{constructor(e){this.reader=e}}class gn extends ot{constructor(){super(...arguments),this.isZooming$=new n.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=`
257
+ `},r=({container:a})=>{const l=nt.find(u=>u.name===o.value);return l&&a.style.setProperty("background-color",l.backgroundColor),()=>{}},c=()=>{t.spineItemsManager.items.forEach(a=>{const l=a.renderer.getDocumentFrame();l&&D(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&&D(u,"prose-reader-theme",s())}}),t.spineItemsManager.items$.pipe(b.tap(a=>a.map(({element:l})=>r({container:l}))),b.takeUntil(t.$.destroy$)).subscribe(),o.pipe(b.tap(()=>{c()}),b.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:a=>{a!==o.value&&o.next(a)},get:()=>o.value,$:{theme$:o.asObservable()}}}},dn=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 pn=i=>e=>i(e);class ot{constructor(e){this.reader=e}}class gn extends ot{constructor(){super(...arguments),this.isZooming$=new n.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,7 +264,7 @@
264
264
  width: 100%;
265
265
  height: 100%;
266
266
  user-select: none;
267
- `;const o=e.cloneNode();o.src=e.src,o.style.setProperty("height","100%"),o.style.setProperty("width","100%"),o.style.setProperty("object-fit","contain"),o.style.setProperty("pointer-events","none"),this.element.appendChild(o),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:o})=>{const s=t*i/2-t+t/2,r=t*e/2-t+t/2,c=i/e,a=o-r;return Math.max(s+a*c,0)};class hn extends ot{constructor(){super(...arguments),this.isZooming$=new n.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,o=this.reader.navigation.scrollNavigationController.value.element;if(!t||!o)return;const s=Math.ceil(e*100)/100,r=Math.max(s,1),c=t.getBoundingClientRect().width/t.offsetWidth,a=o.scrollTop;t.style.transform=`scale(${r})`,o.scrollLeft=st({newScale:r,oldScale:c,pageSize:o.clientWidth,screenSize:t.offsetWidth,scrollOffset:o.scrollLeft}),o.scrollTop=st({newScale:r,oldScale:c,pageSize:o.clientHeight,screenSize:t.offsetHeight,scrollOffset:a}),this.currentScale=s}}const mn=i=>e=>{const t=i(e),o=new gn(t),s=new hn(t),r=new n.BehaviorSubject(s);return{...t,destroy:()=>{o.exit(),s.exit(),r.complete(),t.destroy()},zoom:{enter:l=>{const u=t.settings.values.computedPageTurnMode==="scrollable"?s:o;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(n.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 z extends n.Observable{constructor(e){super(t=>this.stateSubject.pipe(n.takeUntil(this.destroy$)).subscribe(t)),this.destroy$=new n.Subject,this.stateSubject=new n.BehaviorSubject(e)}next(e){this.stateSubject.next(e)}mergeCompare(e){const t={...this.value,...e};$.isShallowEqual(this.value,t)||this.stateSubject.next(t)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(K(e)):this.stateSubject.pipe(n.map(t=>t[e]),n.distinctUntilChanged($.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this.destroy$.complete()}}class fn{constructor(){this.navigationSubject=new n.ReplaySubject(1),this.viewportStateSubject=new n.BehaviorSubject("free"),this.paginationSubject=new n.ReplaySubject,this.navigationIsLockedSubject=new n.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(n.distinctUntilChanged(),n.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(n.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(n.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}const Sn=({manifest:i,visibleAreaRect:e,forceSinglePageMode:t})=>{const{height:o,width:s}=e,r=s>o;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 z{constructor(){super({marginBottom:0,marginTop:0,calculatedInnerMargin:0,assumedRenditionLayout:"reflowable",visibleAreaRect:{width:0,height:0,x:0,y:0}}),this.bridgeEvent=new fn,this.destroy$=new n.Subject,this.state$=this.pipe(b.distinctUntilChanged($.isShallowEqual)),this.manifest$=this.pipe(b.map(e=>e.manifest),b.filter(k),b.distinctUntilChanged()),this.hasVerticalWriting$=this.pipe(b.map(e=>e.hasVerticalWriting),b.filter(k),b.distinctUntilChanged()),this.isUsingSpreadMode$=this.pipe(b.map(e=>e.isUsingSpreadMode),b.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,o=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(o),assumedRenditionLayout:o?.renditionLayout??"reflowable"},isUsingSpreadMode:Sn({manifest:o,visibleAreaRect:r,forceSinglePageMode:s})};$.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 z{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),n.merge(e.state$,t.values$).pipe(n.withLatestFrom(e.state$),n.map(([,{hasVerticalWriting:o}])=>{const s=e.manifest;return{hasVerticalWriting:o,renditionFlow:s?.renditionFlow,renditionLayout:s?.renditionLayout,computedPageTurnMode:t.values.computedPageTurnMode}}),n.distinctUntilChanged($.isShallowEqual),n.map(({hasVerticalWriting:o,renditionFlow:s,renditionLayout:r,computedPageTurnMode:c})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||c==="scrollable"?["none"]:o?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:c==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),n.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 o={name:e,runFn:t};return this._hooks.push(o),()=>{this.deregister(o)}}execute(e,t,o){return this._hooks.filter(c=>e===c.name).map(c=>{let a=()=>n.of(void 0);const l=new n.Subject,u=g=>{a=g},d=()=>(l.next(),l.complete(),a()??n.of(void 0)),p=c.runFn({...o,destroy$:l.asObservable(),destroy:u});return this._hookExecutions.push({name:e,id:t,destroyFn:d,ref:c}),p})}destroy(e,t,o){const s=this._hookExecutions.filter(c=>o&&c.ref===o||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 n.combineLatest(r)}}const yn=()=>i=>i.pipe(n.map(({navigation:e,pagination:t,...o})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...o}))),bn=(i,e,t)=>i.bridgeEvent.pagination$.pipe(n.withLatestFrom(e),n.filter(([o,s])=>o.navigationId===s.id),n.switchMap(([o,s])=>(t.spineItemsManager.get(s.spineItem)?.isReady$.pipe(n.first())??n.of(!1)).pipe(n.filter(c=>c),n.map(()=>({pagination:o,navigation:s})))),yn(),n.distinctUntilChanged((o,s)=>o.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),n.map(({navigation:o})=>({...o,meta:{triggeredBy:"pagination"}}))),In=i=>i.pipe(n.map(([e,t])=>{const o={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...e,position:e.position?T.from(e.position):void 0};return{previousNavigation:t,navigation:o}})),wn=({navigationResolver:i})=>e=>e.pipe(n.map(t=>{if(t.navigation.cfi){const o=i.getNavigationForCfi(t.navigation.cfi);if(o)return{...t,navigation:{...t.navigation,position:o}}}return t})),vn=({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",Pn=({context:i,settings:e})=>t=>t.pipe(n.map(({navigation:o,previousNavigation:s})=>{const r=vn({navigation:o,previousNavigation:s,settings:e}),c={...o,directionFromLastNavigation:r};return{previousNavigation:s,navigation:c,direction:r}})),$n=({spineItemsManager:i,navigationResolver:e})=>t=>t.pipe(n.map(({navigation:o,...s})=>{const r=i.get(o.spineItem);return o.position?{navigation:{...o,position:e.getAdjustedPositionWithSafeEdge(o.position)},...s}:r?{navigation:{...o,position:e.getNavigationForSpineIndexOrId(r)},...s}:{navigation:{...o,position:new T({x:0,y:0})},...s}})),ut=({settings:i,spineItemsManager:e,navigationResolver:t,spineLocator:o})=>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}=o.getVisibleSpineItemsFromPosition({position:a,threshold:p,restrictToScreen:!1})??{},y=(d==="forward"||d==="anchor"?h:m)??m,S=e.get(y);if(!S)return;const{endPageIndex:f,beginPageIndex:w}=o.getVisiblePagesFromViewportPosition({position:a,spineItem:S,threshold:p,restrictToScreen:!1})??{},v=(d==="forward"||d==="anchor"?f:w)??0,P=t.getNavigationForSpineItemPage({pageIndex:v,spineItemId:S}),L=o.getVisibleSpineItemsFromPosition({position:P,threshold:p,restrictToScreen:!1}),F=d==="forward"||d==="anchor"?L?.beginIndex:L?.endIndex;return e.get(F)}return a&&g==="scrollable"?o.getSpineItemFromPosition(a):e.get(0)};return s.pipe(n.map(({navigation:c,...a})=>{const l=r(c);return{navigation:{...c,spineItem:e.getSpineItemIndex(l)},...a}}))},dt=({spine:i})=>e=>e.pipe(n.switchMap(({navigation:t,...o})=>{const s=i.getSpineItemSpineLayoutInfo(t.spineItem),r=i.spineItemsManager.get(t.spineItem);return(r?.isReady$??n.of(!1)).pipe(n.first(),n.map(c=>({navigation:{...t,spineItemHeight:s?.height,spineItemWidth:s?.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r?.isUsingVerticalWriting(),spineItemIsReady:c},...o})))})),ve=({settings:i,spineItemsManager:e,spineLocator:t,navigationResolver:o})=>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=o.getNavigationForSpineItemPage({pageIndex:g,spineItemId:u}),h=t.getVisiblePagesFromViewportPosition({position:m,spineItem:u,threshold:{type:"percentage",value:0},restrictToScreen:!0}),y=(c.directionFromLastNavigation==="forward"||c.directionFromLastNavigation==="anchor"?h?.beginPageIndex:h?.endPageIndex)??0;return t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:y,spineItem:u})}return t.getSpineItemPositionFromSpinePosition(c.position,u)}};return s.pipe(n.map(({navigation:c,...a})=>({navigation:{...c,positionInSpineItem:r(c)},...a})))},Tn=({navigationResolver:i})=>e=>e.pipe(n.map(t=>{if(t.navigation.url){const o=i.getNavigationForUrl(t.navigation.url);if(o)return{...t,navigation:{...t.navigation,position:o.position,spineItem:o.spineItemId}}}return t}));class Pe{constructor(){this.isLockedSubject=new n.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(n.map(e=>!!e),n.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Mn=({spineLocator:i,navigation:e,navigationResolver:t,spineItemsManager:o,spine:s})=>{const r=o.get(e.spineItem);return r?r.isReady$.pipe(n.first(),n.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&&!oe(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)})):n.of(new T({x:0,y:0}))},Fn=({navigation:i,spineLocator:e,spineItemsManager:t,settings:o,navigationResolver:s,spine:r})=>{const{spineItem:c}=i,a=t.get(c);if(!a)return new T({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(o.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 y=new M({y:l-g,x:i.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(y,a),spineItem:a})}return s.getNavigationForSpineIndexOrId(a)}}}return i.position},Ln=({navigation:i,spineItemsManager:e,settings:t,spineLocator:o,navigationResolver:s,spine:r})=>t.values.computedPageTurnMode==="scrollable"?n.of(Fn({navigation:i,spineLocator:o,navigationResolver:s,settings:t,spineItemsManager:e,spine:r})):Mn({navigation:i,spineLocator:o,navigationResolver:s,spineItemsManager:e,spine:r}),pt=({settings:i,navigationResolver:e,context:t,spine:o})=>s=>s.pipe(n.switchMap(r=>Ln({spineLocator:o.locator,navigation:r.navigation,navigationResolver:e,settings:i,spineItemsManager:o.spineItemsManager,spineItemLocator:o.locator.spineItemLocator,spine:o}).pipe(n.map(c=>({...r,navigation:{...r.navigation,position:c}}))))),Cn=C.namespace("navigation/InternalNavigator");class gt extends R{constructor(e,t,o,s,r,c,a,l){super(),this.settings=e,this.context=t,this.userNavigation$=o,this.viewportController=s,this.scrollNavigationController=r,this.navigationResolver=c,this.spine=a,this.isUserLocked$=l,this.navigationSubject=new n.BehaviorSubject({animation:!1,position:new T({x:0,y:0}),meta:{triggeredBy:"user"},spineItemIsReady:!1,type:"api",id:Symbol()}),this.navigated$=this.navigationSubject.pipe(n.skip(1)),this.navigation$=this.navigationSubject.pipe(n.map(({position:f,id:w})=>({position:f,id:w})),n.distinctUntilChanged(({position:f,...w},{position:v,...P})=>$.isShallowEqual(w,P)&&$.isShallowEqual(f,v)),n.shareReplay(1)),this.locker=new Pe;const u=o.pipe(n.withLatestFrom(this.navigationSubject),In,Tn({navigationResolver:c}),wn({navigationResolver:c}),Pn({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($n({navigationResolver:c,spineItemsManager:a.spineItemsManager}),n.withLatestFrom(l),n.switchMap(([f,w])=>{const v=f.navigation.cfi||f.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return n.of(f).pipe(v?n.identity:pt({navigationResolver:c,settings:e,spine:a,context:t}))}),ve({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:e,navigationResolver:c}),n.map(f=>f.navigation),n.share()),d=u.pipe(n.withLatestFrom(l),n.filter(([,f])=>f),n.switchMap(([f])=>{const w=this.locker.lock();return l.pipe(n.filter(v=>!v),n.first(),n.map(()=>({...f,animation:"snap"})),n.finalize(()=>{w()}),n.takeUntil(u))}),n.share()),p=n.merge(s.layout$,a.layout$).pipe(n.switchMap(()=>n.of(null).pipe(n.switchMap(()=>l.pipe(n.filter(f=>!f),n.first())),n.map(()=>({...this.navigationSubject.getValue(),animation:!1})),n.takeUntil(n.merge(d,u))))),g=n.merge(p,d).pipe(n.map(f=>({navigation:f})),pt({navigationResolver:c,settings:e,context:t,spine:a}),n.map(f=>{const w={...f.navigation,meta:{triggeredBy:"restoration"}};return{...f,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}),n.map(({navigation:f})=>f),n.share()),m=bn(t,this.navigationSubject,a),h=n.merge(g,u,m),y=f=>f.pipe(n.tap(([w,v])=>{Cn.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),S=f=>f.pipe(n.tap(([w,v])=>{const P=w.type==="scroll",L=w.meta.triggeredBy==="pagination",F=w.meta.triggeredBy==="restoration",E=$.isShallowEqual(v.position,w.position);if(P&&!F||L||E)return;const A={position:w.position,animation:w.animation};e.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(A):this.viewportController.navigate(A)}));h.pipe(n.withLatestFrom(this.navigationSubject),S,y,n.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const En=500;class Rn extends R{constructor(e,t,o,s,r,c){super(),this.settings=e,this.context=t,this.spine=o,this.scrollNavigationController=s,this.locker=r,this.navigationSubject=new n.Subject,this.navigation$=this.navigationSubject.asObservable();const a=this.scrollNavigationController.userScroll$.pipe(n.exhaustMap(l=>{const u=this.locker.lock();return n.merge(this.scrollNavigationController.userScroll$,n.of(l)).pipe(n.debounceTime(En,n.animationFrameScheduler),n.first(),n.tap(()=>{const d=l.target,p=new Y({x:d.scrollLeft/c.scaleFactor,y:d.scrollTop/c.scaleFactor});this.navigationSubject.next({animation:!1,type:"scroll",position:p})}),n.finalize(()=>{u()}))}));n.merge(a).pipe(n.takeUntil(this.destroy$)).subscribe()}}const An=i=>({x:-i.x,y:-i.y}),Dn=i=>i instanceof DOMMatrix?new T({x:-i.e,y:-i.f}):new T({x:-i.x,y:-i.y}),ht=C.namespace("navigation/ViewportNavigator");class mt extends R{constructor(e,t,o,s,r){super(),this.settings=e,this.hookManager=t,this.context=o,this.spine=s,this.viewport=r,this.navigateSubject=new n.Subject,this.element$=new n.BehaviorSubject(document.createElement("div"));const c=this.spine.element$.pipe(n.filter(le.isDefined),n.withLatestFrom(this.element$),n.tap(([d,p])=>{p.style.cssText=`
267
+ `;const o=e.cloneNode();o.src=e.src,o.style.setProperty("height","100%"),o.style.setProperty("width","100%"),o.style.setProperty("object-fit","contain"),o.style.setProperty("pointer-events","none"),this.element.appendChild(o),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:o})=>{const s=t*i/2-t+t/2,r=t*e/2-t+t/2,c=i/e,a=o-r;return Math.max(s+a*c,0)};class hn extends ot{constructor(){super(...arguments),this.isZooming$=new n.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,o=this.reader.navigation.scrollNavigationController.value.element;if(!t||!o)return;const s=Math.ceil(e*100)/100,r=Math.max(s,1),c=t.getBoundingClientRect().width/t.offsetWidth,a=o.scrollTop;t.style.transform=`scale(${r})`,o.scrollLeft=st({newScale:r,oldScale:c,pageSize:o.clientWidth,screenSize:t.offsetWidth,scrollOffset:o.scrollLeft}),o.scrollTop=st({newScale:r,oldScale:c,pageSize:o.clientHeight,screenSize:t.offsetHeight,scrollOffset:a}),this.currentScale=s}}const mn=i=>e=>{const t=i(e),o=new gn(t),s=new hn(t),r=new n.BehaviorSubject(s);return{...t,destroy:()=>{o.exit(),s.exit(),r.complete(),t.destroy()},zoom:{enter:l=>{const u=t.settings.values.computedPageTurnMode==="scrollable"?s:o;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(n.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 z extends n.Observable{constructor(e){super(t=>this.stateSubject.pipe(n.takeUntil(this.destroy$)).subscribe(t)),this.destroy$=new n.Subject,this.stateSubject=new n.BehaviorSubject(e)}next(e){this.stateSubject.next(e)}mergeCompare(e){const t={...this.value,...e};$.isShallowEqual(this.value,t)||this.stateSubject.next(t)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(K(e)):this.stateSubject.pipe(n.map(t=>t[e]),n.distinctUntilChanged($.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this.destroy$.complete()}}class fn{constructor(){this.navigationSubject=new n.ReplaySubject(1),this.viewportStateSubject=new n.BehaviorSubject("free"),this.paginationSubject=new n.ReplaySubject,this.navigationIsLockedSubject=new n.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(n.distinctUntilChanged(),n.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(n.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(n.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}const Sn=({manifest:i,visibleAreaRect:e,forceSinglePageMode:t})=>{const{height:o,width:s}=e,r=s>o;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 z{constructor(){super({marginBottom:0,marginTop:0,calculatedInnerMargin:0,assumedRenditionLayout:"reflowable",visibleAreaRect:{width:0,height:0,x:0,y:0}}),this.bridgeEvent=new fn,this.destroy$=new n.Subject,this.state$=this.pipe(b.distinctUntilChanged($.isShallowEqual)),this.manifest$=this.pipe(b.map(e=>e.manifest),b.filter(k),b.distinctUntilChanged()),this.hasVerticalWriting$=this.pipe(b.map(e=>e.hasVerticalWriting),b.filter(k),b.distinctUntilChanged()),this.isUsingSpreadMode$=this.pipe(b.map(e=>e.isUsingSpreadMode),b.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,o=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(o),assumedRenditionLayout:o?.renditionLayout??"reflowable"},isUsingSpreadMode:Sn({manifest:o,visibleAreaRect:r,forceSinglePageMode:s})};$.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 z{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),n.merge(e.state$,t.values$).pipe(n.withLatestFrom(e.state$),n.map(([,{hasVerticalWriting:o}])=>{const s=e.manifest;return{hasVerticalWriting:o,renditionFlow:s?.renditionFlow,renditionLayout:s?.renditionLayout,computedPageTurnMode:t.values.computedPageTurnMode}}),n.distinctUntilChanged($.isShallowEqual),n.map(({hasVerticalWriting:o,renditionFlow:s,renditionLayout:r,computedPageTurnMode:c})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||c==="scrollable"?["none"]:o?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:c==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),n.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 o={name:e,runFn:t};return this._hooks.push(o),()=>{this.deregister(o)}}execute(e,t,o){return this._hooks.filter(c=>e===c.name).map(c=>{let a=()=>n.of(void 0);const l=new n.Subject,u=g=>{a=g},d=()=>(l.next(),l.complete(),a()??n.of(void 0)),p=c.runFn({...o,destroy$:l.asObservable(),destroy:u});return this._hookExecutions.push({name:e,id:t,destroyFn:d,ref:c}),p})}destroy(e,t,o){const s=this._hookExecutions.filter(c=>o&&c.ref===o||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 n.combineLatest(r)}}const yn=()=>i=>i.pipe(n.map(({navigation:e,pagination:t,...o})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...o}))),bn=(i,e,t)=>i.bridgeEvent.pagination$.pipe(n.withLatestFrom(e),n.filter(([o,s])=>o.navigationId===s.id),n.switchMap(([o,s])=>(t.spineItemsManager.get(s.spineItem)?.isReady$.pipe(n.first())??n.of(!1)).pipe(n.filter(c=>c),n.map(()=>({pagination:o,navigation:s})))),yn(),n.distinctUntilChanged((o,s)=>o.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),n.map(({navigation:o})=>({...o,meta:{triggeredBy:"pagination"}}))),In=i=>i.pipe(n.map(([e,t])=>{const o={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...e,position:e.position?T.from(e.position):void 0};return{previousNavigation:t,navigation:o}})),wn=({navigationResolver:i})=>e=>e.pipe(n.map(t=>{if(t.navigation.cfi){const o=i.getNavigationForCfi(t.navigation.cfi);if(o)return{...t,navigation:{...t.navigation,position:o}}}return t})),vn=({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",Pn=({context:i,settings:e})=>t=>t.pipe(n.map(({navigation:o,previousNavigation:s})=>{const r=vn({navigation:o,previousNavigation:s,settings:e}),c={...o,directionFromLastNavigation:r};return{previousNavigation:s,navigation:c,direction:r}})),$n=({spineItemsManager:i,navigationResolver:e})=>t=>t.pipe(n.map(({navigation:o,...s})=>{const r=i.get(o.spineItem);return o.position?{navigation:{...o,position:e.getAdjustedPositionWithSafeEdge(o.position)},...s}:r?{navigation:{...o,position:e.getNavigationForSpineIndexOrId(r)},...s}:{navigation:{...o,position:new T({x:0,y:0})},...s}})),ut=({settings:i,spineItemsManager:e,navigationResolver:t,spineLocator:o})=>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}=o.getVisibleSpineItemsFromPosition({position:a,threshold:p,restrictToScreen:!1})??{},y=(d==="forward"||d==="anchor"?h:m)??m,S=e.get(y);if(!S)return;const{endPageIndex:f,beginPageIndex:w}=o.getVisiblePagesFromViewportPosition({position:a,spineItem:S,threshold:p,restrictToScreen:!1})??{},v=(d==="forward"||d==="anchor"?f:w)??0,P=t.getNavigationForSpineItemPage({pageIndex:v,spineItemId:S}),L=o.getVisibleSpineItemsFromPosition({position:P,threshold:p,restrictToScreen:!1}),F=d==="forward"||d==="anchor"?L?.beginIndex:L?.endIndex;return e.get(F)}return a&&g==="scrollable"?o.getSpineItemFromPosition(a):e.get(0)};return s.pipe(n.map(({navigation:c,...a})=>{const l=r(c);return{navigation:{...c,spineItem:e.getSpineItemIndex(l)},...a}}))},dt=({spine:i})=>e=>e.pipe(n.switchMap(({navigation:t,...o})=>{const s=i.getSpineItemSpineLayoutInfo(t.spineItem),r=i.spineItemsManager.get(t.spineItem);return(r?.isReady$??n.of(!1)).pipe(n.first(),n.map(c=>({navigation:{...t,spineItemHeight:s?.height,spineItemWidth:s?.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r?.isUsingVerticalWriting(),spineItemIsReady:c},...o})))})),we=({settings:i,spineItemsManager:e,spineLocator:t,navigationResolver:o})=>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=o.getNavigationForSpineItemPage({pageIndex:g,spineItemId:u}),h=t.getVisiblePagesFromViewportPosition({position:m,spineItem:u,threshold:{type:"percentage",value:0},restrictToScreen:!0}),y=(c.directionFromLastNavigation==="forward"||c.directionFromLastNavigation==="anchor"?h?.beginPageIndex:h?.endPageIndex)??0;return t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:y,spineItem:u})}return t.getSpineItemPositionFromSpinePosition(c.position,u)}};return s.pipe(n.map(({navigation:c,...a})=>({navigation:{...c,positionInSpineItem:r(c)},...a})))},Tn=({navigationResolver:i})=>e=>e.pipe(n.map(t=>{if(t.navigation.url){const o=i.getNavigationForUrl(t.navigation.url);if(o)return{...t,navigation:{...t.navigation,position:o.position,spineItem:o.spineItemId}}}return t}));class ve{constructor(){this.isLockedSubject=new n.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(n.map(e=>!!e),n.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Mn=({spineLocator:i,navigation:e,navigationResolver:t,spineItemsManager:o,spine:s})=>{const r=o.get(e.spineItem);return r?r.isReady$.pipe(n.first(),n.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&&!oe(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)})):n.of(new T({x:0,y:0}))},Fn=({navigation:i,spineLocator:e,spineItemsManager:t,settings:o,navigationResolver:s,spine:r})=>{const{spineItem:c}=i,a=t.get(c);if(!a)return new T({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(o.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 y=new M({y:l-g,x:i.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(y,a),spineItem:a})}return s.getNavigationForSpineIndexOrId(a)}}}return i.position},Ln=({navigation:i,spineItemsManager:e,settings:t,spineLocator:o,navigationResolver:s,spine:r})=>t.values.computedPageTurnMode==="scrollable"?n.of(Fn({navigation:i,spineLocator:o,navigationResolver:s,settings:t,spineItemsManager:e,spine:r})):Mn({navigation:i,spineLocator:o,navigationResolver:s,spineItemsManager:e,spine:r}),pt=({settings:i,navigationResolver:e,context:t,spine:o})=>s=>s.pipe(n.switchMap(r=>Ln({spineLocator:o.locator,navigation:r.navigation,navigationResolver:e,settings:i,spineItemsManager:o.spineItemsManager,spineItemLocator:o.locator.spineItemLocator,spine:o}).pipe(n.map(c=>({...r,navigation:{...r.navigation,position:c}}))))),Cn=C.namespace("navigation/InternalNavigator");class gt extends R{constructor(e,t,o,s,r,c,a,l){super(),this.settings=e,this.context=t,this.userNavigation$=o,this.viewportController=s,this.scrollNavigationController=r,this.navigationResolver=c,this.spine=a,this.isUserLocked$=l,this.navigationSubject=new n.BehaviorSubject({animation:!1,position:new T({x:0,y:0}),meta:{triggeredBy:"user"},spineItemIsReady:!1,type:"api",id:Symbol()}),this.navigated$=this.navigationSubject.pipe(n.skip(1)),this.navigation$=this.navigationSubject.pipe(n.map(({position:f,id:w})=>({position:f,id:w})),n.distinctUntilChanged(({position:f,...w},{position:v,...P})=>$.isShallowEqual(w,P)&&$.isShallowEqual(f,v)),n.shareReplay(1)),this.locker=new ve;const u=o.pipe(n.withLatestFrom(this.navigationSubject),In,Tn({navigationResolver:c}),wn({navigationResolver:c}),Pn({context:t,settings:e}),ut({navigationResolver:c,settings:e,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),we({navigationResolver:c,settings:e,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),dt({spine:a})).pipe($n({navigationResolver:c,spineItemsManager:a.spineItemsManager}),n.withLatestFrom(l),n.switchMap(([f,w])=>{const v=f.navigation.cfi||f.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return n.of(f).pipe(v?n.identity:pt({navigationResolver:c,settings:e,spine:a,context:t}))}),we({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:e,navigationResolver:c}),n.map(f=>f.navigation),n.share()),d=u.pipe(n.withLatestFrom(l),n.filter(([,f])=>f),n.switchMap(([f])=>{const w=this.locker.lock();return l.pipe(n.filter(v=>!v),n.first(),n.map(()=>({...f,animation:"snap"})),n.finalize(()=>{w()}),n.takeUntil(u))}),n.share()),p=n.merge(s.layout$,a.layout$).pipe(n.switchMap(()=>n.of(null).pipe(n.switchMap(()=>l.pipe(n.filter(f=>!f),n.first())),n.map(()=>({...this.navigationSubject.getValue(),animation:!1})),n.takeUntil(n.merge(d,u))))),g=n.merge(p,d).pipe(n.map(f=>({navigation:f})),pt({navigationResolver:c,settings:e,context:t,spine:a}),n.map(f=>{const w={...f.navigation,meta:{triggeredBy:"restoration"}};return{...f,navigation:w}}),ut({navigationResolver:c,settings:e,spineItemsManager:a.spineItemsManager,spineLocator:a.locator}),dt({spine:a}),we({spineItemsManager:a.spineItemsManager,spineLocator:a.locator,settings:e,navigationResolver:c}),n.map(({navigation:f})=>f),n.share()),m=bn(t,this.navigationSubject,a),h=n.merge(g,u,m),y=f=>f.pipe(n.tap(([w,v])=>{Cn.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),S=f=>f.pipe(n.tap(([w,v])=>{const P=w.type==="scroll",L=w.meta.triggeredBy==="pagination",F=w.meta.triggeredBy==="restoration",E=$.isShallowEqual(v.position,w.position);if(P&&!F||L||E)return;const A={position:w.position,animation:w.animation};e.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(A):this.viewportController.navigate(A)}));h.pipe(n.withLatestFrom(this.navigationSubject),S,y,n.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const En=500;class Rn extends R{constructor(e,t,o,s,r,c){super(),this.settings=e,this.context=t,this.spine=o,this.scrollNavigationController=s,this.locker=r,this.navigationSubject=new n.Subject,this.navigation$=this.navigationSubject.asObservable();const a=this.scrollNavigationController.userScroll$.pipe(n.exhaustMap(l=>{const u=this.locker.lock();return n.merge(this.scrollNavigationController.userScroll$,n.of(l)).pipe(n.debounceTime(En,n.animationFrameScheduler),n.first(),n.tap(()=>{const d=l.target,p=new Y({x:d.scrollLeft/c.scaleFactor,y:d.scrollTop/c.scaleFactor});this.navigationSubject.next({animation:!1,type:"scroll",position:p})}),n.finalize(()=>{u()}))}));n.merge(a).pipe(n.takeUntil(this.destroy$)).subscribe()}}const An=i=>({x:-i.x,y:-i.y}),Dn=i=>i instanceof DOMMatrix?new T({x:-i.e,y:-i.f}):new T({x:-i.x,y:-i.y}),ht=C.namespace("navigation/ViewportNavigator");class mt extends R{constructor(e,t,o,s,r){super(),this.settings=e,this.hookManager=t,this.context=o,this.spine=s,this.viewport=r,this.navigateSubject=new n.Subject,this.element$=new n.BehaviorSubject(document.createElement("div"));const c=this.spine.element$.pipe(n.filter(ce.isDefined),n.withLatestFrom(this.element$),n.tap(([d,p])=>{p.style.cssText=`
268
268
  height: 100%;
269
269
  width: 100%;
270
270
  position: relative;
@@ -274,10 +274,10 @@
274
274
  position: relative;
275
275
  overflow-y: scroll;
276
276
  overflow-x: hidden;
277
- `,g.className=`${q}-scroll-navigator`,g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),a=n.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(n.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(n.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(n.startWith(!1),n.switchMap(()=>n.merge(n.of(!0),n.of(!1))),n.shareReplay(1));const u=n.merge(s.element$.pipe(n.filter(k),n.switchMap(p=>J(p))),s.element$.pipe(n.filter(k),n.switchMap(p=>n.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(n.switchMap(()=>n.timer(10).pipe(n.map(()=>!1),n.startWith(!0))),n.distinctUntilChanged(),n.startWith(!1)),d=n.combineLatest([u,this.isScrolling$]).pipe(n.map(([p,g])=>p||g),n.shareReplay(1));this.userScroll$=this.watch("element").pipe(n.filter(k),n.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(n.switchMap(({computedPageTurnMode:g})=>g==="controlled"?n.NEVER:n.fromEvent(p,"scroll").pipe(n.withLatestFrom(d),n.filter(([,m])=>!m),n.map(([m])=>m))))),n.share()),n.merge(c,a,l).pipe(n.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 T({x:0,y:0});const t=this.viewport.scaleFactor;return new T({x:e.scrollLeft/t,y:e.scrollTop/t})}}const re=(i,e,t)=>{const o=t-i,s=t*(e*i)/(t||1);return Math.max(0,Math.min(o,s))},$e=(i,e)=>(e||0)===0||(i||0)===0?1:Math.floor(Math.max(1,i/e)),ae=(i,e,t)=>{const o=$e(t,e),s=[...Array(o)].map((r,c)=>c*e);return i>=o*e?s[s.length-1]||0:s.find(r=>i<r+e)||0},St=(i,e,t)=>{const o=[...Array(t)].map((s,r)=>r*e);return i<=0||t===0?0:i>=t*e?t-1:o.findIndex(s=>i<s+e)??0},Nn=({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:o,pageHeight:s,pageTurnDirection:r,pageTurnMode:c})=>r==="vertical"&&c==="scrollable"?1:t||r==="vertical"?$e(i,s):$e(e,o),bt=({itemWidth:i,itemHeight:e,position:t,isUsingVerticalWriting:o,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a,isRTL:l})=>{const d=Nn({spineItemPosition:t,itemHeight:e,itemWidth:i}).x,p=yt({isUsingVerticalWriting:o,itemHeight:e,itemWidth:i,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a});if(o)return St(t.y,r,p);const g=St(d,s,p);return l?p-1-g:g},On=({pageIndex:i,itemLayout:e,context:t,isUsingVerticalWriting:o})=>{if(o){const r=re(t.getPageSize().height,i,e.height);return new M({x:0,y:r})}const s=re(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=ae(u,p,d);return new M({x:g,y:0})}};return{getSpineItemPositionFromNode:t,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:a})=>On({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:ae(c.x,i.getPageSize().width,l),y:ae(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 y=re(g,a,d);return new te({x:c.x,y:c.y-y})}const h=re(p,a,u);if(i.isRTL()){const y=u-(a+1)*p;return new te({x:c.x-Math.max(0,y),y:c.y})}return new te({x:c.x-h,y:c.y})}}},kn=({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:o})=>{const r=i%o!==0?i-t:i;return new T({x:r,y:e})},wt=({position:i,isRTL:e,pageSizeHeight:t,spineItemsManager:o,visibleAreaRectWidth:s,spine:r})=>{const c=o.get(o.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 T({x:Math.max(Math.min(0,i.x),a.left),y:u});const d=a.right-s;return new T({x:Math.min(Math.max(0,i.x),d),y:u})},Te=({viewportPosition:i,spineLocator:e,context:t,spineItemNavigationResolver:o})=>{const s=e.getSpineItemFromPosition(i);if(s){const r=e.getSpineItemPositionFromSpinePosition(i,s),c=o.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 T({x:0,y:0})},Vn=({pageIndex:i,spineItemsManager:e,spineItemId:t,context:o,spineLocator:s,spineItemNavigationResolver:r})=>{const c=e.get(t);if(!c){const u=i*o.getPageSize().width;return Te({viewportPosition:new T({x:u,y:0}),context:o,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:o.getPageSize().width,visibleAreaRectWidth:o.state.visibleAreaRect.width})},Un=({anchor:i,spineItem:e,context:t})=>{const o=e.layout.layoutInfo?.width||0,s=t.getPageSize().width,c=e.getBoundingRectOfElementFromSelector(i)?.x||0;return ae(c,s,o)},Wn=({anchor:i,context:e,spineItem:t,spineLocator:o})=>{const s=Un({anchor:i,spineItem:t,context:e});return o.getSpinePositionFromSpineItemPosition({spineItemPosition:new M({x:s,y:0}),spineItem:t})},zn=({anchor:i,spineItem:e,spineLocator:t,context:o,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const c=Wn({anchor:i,context:o,spineItem:e,spineLocator:t});return N({position:c,pageSizeWidth:s,visibleAreaRectWidth:r})},Bn=({context:i,spineItemsManager:e,spineLocator:t,url:o,pageSizeWidth:s,visibleAreaRectWidth:r})=>{try{const c=o instanceof URL?o:new URL(o),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=zn({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:o,context:s})=>{const r=o.getSpineItemClosestPositionFromUnsafePosition(e,i),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:i});return N({position:c,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},_n="spineNavigator",qn=({context:i,spineItemsManager:e,locator:t,settings:o,spine:s})=>{const r=kn({context:i,settings:o});return{getNavigationForUrl:g=>Bn({context:i,spineItemsManager:e,spineLocator:t,url:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),getNavigationForSpineItemPage:g=>Vn({...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:y=0}=Ie({cfi:g,spineItemsManager:e});if(!m){C.warn(_n,`unable to detect item id from cfi ${g}`);return}const S=h?r.getNavigationFromNode(m,h,y):new M({x:0,y:0}),f=t.getSpinePositionFromSpineItemPosition({spineItemPosition:S,spineItem:m});return N({position:f,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 T({x:0,y:0})},getNavigationForPosition:g=>Te({viewportPosition:g,context:i,spineItemNavigationResolver:r,spineLocator:t}),getMostPredominantNavigationForPosition:g=>{const m=o.values.computedPageTurnDirection,h=.5,y=m==="horizontal"?g.x+i.state.visibleAreaRect.width*h:0,S=m==="horizontal"?0:g.y+i.state.visibleAreaRect.height*h,f=wt({position:new T({x:y,y:S}),isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s});return Te({context:i,spineItemNavigationResolver:r,spineLocator:t,viewportPosition:f})},getAdjustedPositionWithSafeEdge:g=>wt({position:g,isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s}),isNavigationGoingForwardFrom:(g,m)=>o.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}},Yn=({spineItemsManager:i,context:e,hookManager:t,spine:o,settings:s,viewport:r})=>{const c=new n.Subject,a=new Pe,l=qn({context:e,settings:s,spineItemsManager:i,locator:o.locator,spine:o}),u=new mt(s,t,e,o,r),d=new ft(r,s,t,o,e),p=new Rn(s,e,o,d,a,r),g=n.merge(c,p.navigation$),m=new gt(s,e,g,u,d,l,o,a.isLocked$),h=n.combineLatest([u.isNavigating$,d.isNavigating$,a.isLocked$,m.locker.isLocked$]).pipe(b.map(f=>f.some(w=>w)?"busy":"free"),b.distinctUntilChanged(),b.shareReplay(1));return{destroy:()=>{p.destroy(),u.destroy(),m.destroy()},getNavigation:()=>m.navigation,internalNavigator:m,scrollNavigationController:d,controlledNavigationController:u,locker:a,viewportState$:h,navigate:f=>{c.next(f)},lock(){return a.lock()},navigationResolver:l,navigation$:m.navigation$}};class vt extends z{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 R{constructor(e,t,o,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=o,this.spine=s,this.spineItemLocator=r;const c=n.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(n.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(n.take(1),n.withLatestFrom(this.context.bridgeEvent.navigation$),n.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),y=this.spineItemsManager.get(m);if(!h||!y)return;const S=p.beginCfi,f=p.endCfi,{beginPageIndex:w=0}=l({spineItem:h,position:d})??{},{endPageIndex:v=0}=l({spineItem:y,position:d})??{},P=S===void 0||oe(S)||p.beginSpineItemIndex!==g,L=p.endSpineItemIndex!==m||f===void 0||oe(f),F=P?W(h.item):S,E=L?W(y.item):f,A=h.numberOfPages,U=y.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:E,endNumberOfPagesInSpineItem:U,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:u.id})}))})),a=c.pipe(X(this.context.bridgeEvent.viewportFree$),n.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:ne({pageIndex:d,spineItem:g,spine:this.spine}),endCfi:ne({pageIndex:p,spineItem:m,spine:this.spine})})}));n.merge(c,a).pipe(n.takeUntil(this.destroy$)).subscribe()}}class $t extends R{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new n.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(n.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=$.shallowMergeIfDefined(this.inputSettings,e),o=this.getOutputSettings(t),s=!$.isShallowEqual(this.outputSettings,o);return{hasChanged:s,state:o,commit:()=>(this.inputSettings=t,this.outputSettings=o,s&&this.outputSettingsUpdateSubject.next(o),o)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(me(e),n.distinctUntilChanged($.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class xn extends $t{constructor(e,t){super(e),this.context=t;const o=n.combineLatest([t.hasVerticalWriting$,t.manifest$]).pipe(b.tap(()=>{this.update(this.values)})),s=this.values$.pipe(b.tap(({forceSinglePageMode:r})=>{t.update({forceSinglePageMode:r})}));n.merge(o,s).pipe(b.takeUntil(t.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,o=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"),o&&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=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 _{onUnload(){return n.EMPTY}onCreateDocument(){return n.of(document.createElement("div"))}onLoadDocument(){return n.EMPTY}onLayout(){return n.of(void 0)}onRenderHeadless(){return n.EMPTY}getDocumentFrame(){}}class Zn extends R{constructor(e,t,o,s,r,c){super(),this.item=e,this.containerElement=t,this.context=o,this.hookManager=s,this.renderer=r,this.settings=c,this.layoutTriggerSubject=new n.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:a,minimumWidth:l})=>u=>u.pipe(n.map(d=>{const p=$.isShallowEqual(this.lastLayout?.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:g,height:m}=p??{},{width:h=g,height:y=m}=d??{},{width:S,height:f}=this.context.getPageSize(),w=this.validateDimension(h??S,S,l),v=this.settings.values.computedPageTurnMode==="scrollable"?y??f:this.validateDimension(y??f,f,f);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(n.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(n.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 n.merge(n.of({type:"start"}),p.pipe(this.applyDimsAfterLayout(a),n.map(g=>({type:"end",data:g}))))}),n.share()),this.layout$=this.layoutProcess$.pipe(n.filter(a=>a.type==="end"),n.map(a=>a.data),n.share())}validateDimension(e,t,o){if(e<=0)return o;const s=Math.max(e,o),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,o=e.height?parseFloat(e.height):0;return{width:t,height:o}}}class Me extends z{constructor(e,t,o,s,r,c){super({isLoaded:!1,isReady:!1,iDirty:!1}),this.item=e,this.parentElement=t,this.context=o,this.settings=s,this.hookManager=r,this.index=c,this.getBoundingRectOfElementFromSelector=p=>{const g=this.renderer.getDocumentFrame();if(g&&g instanceof HTMLIFrameElement&&p)return p.startsWith("#")?g.contentDocument?.getElementById(p.replace("#",""))?.getBoundingClientRect():g.contentDocument?.querySelector(p)?.getBoundingClientRect()},this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.markDirty=()=>{this.mergeCompare({iDirty:!0})},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=Gn(t,e,r),t.appendChild(this.containerElement);const a=this.settings.values.getRenderer?.(e);this.resourcesHandler=new Q(e,this.settings);const l={context:o,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=a?a(l):new Xn(l),this.layout=new Zn(e,this.containerElement,o,r,this.renderer,this.settings);const u=this.renderer.state$.pipe(b.tap(p=>{this.mergeCompare({isLoaded:p==="loaded"})})),d=this.layout.layout$.pipe(b.tap(()=>{this.mergeCompare({iDirty:!1,isReady:this.renderer.state$.value==="loaded"})}));this.needsLayout$=n.merge(this.unloaded$,this.loaded$),n.merge(u,d,this.layout.layout$).pipe(b.takeUntil(this.destroy$)).subscribe()}get isReady$(){return this.watch("isReady")}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.loaded$}get unloaded$(){return this.renderer.state$.pipe(b.distinctUntilChanged(),b.filter(e=>e!=="idle"),b.switchMap(()=>this.renderer.state$.pipe(b.filter(e=>e==="idle"),b.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return yt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.context.getPageSize().width,pageHeight:this.context.getPageSize().height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Gn=(i,e,t)=>{const o=i.ownerDocument.createElement("div");return o.classList.add("spineItem"),o.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),o.style.cssText=`
277
+ `,g.className=`${q}-scroll-navigator`,g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),a=n.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(n.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(n.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(n.startWith(!1),n.switchMap(()=>n.merge(n.of(!0),n.of(!1))),n.shareReplay(1));const u=n.merge(s.element$.pipe(n.filter(k),n.switchMap(p=>J(p))),s.element$.pipe(n.filter(k),n.switchMap(p=>n.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(n.switchMap(()=>n.timer(10).pipe(n.map(()=>!1),n.startWith(!0))),n.distinctUntilChanged(),n.startWith(!1)),d=n.combineLatest([u,this.isScrolling$]).pipe(n.map(([p,g])=>p||g),n.shareReplay(1));this.userScroll$=this.watch("element").pipe(n.filter(k),n.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(n.switchMap(({computedPageTurnMode:g})=>g==="controlled"?n.NEVER:n.fromEvent(p,"scroll").pipe(n.withLatestFrom(d),n.filter(([,m])=>!m),n.map(([m])=>m))))),n.share()),n.merge(c,a,l).pipe(n.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 T({x:0,y:0});const t=this.viewport.scaleFactor;return new T({x:e.scrollLeft/t,y:e.scrollTop/t})}}const re=(i,e,t)=>{const o=t-i,s=t*(e*i)/(t||1);return Math.max(0,Math.min(o,s))},Pe=(i,e)=>(e||0)===0||(i||0)===0?1:Math.floor(Math.max(1,i/e)),$e=(i,e,t)=>{const o=Pe(t,e),s=[...Array(o)].map((r,c)=>c*e);return i>=o*e?s[s.length-1]||0:s.find(r=>i<r+e)||0},St=(i,e,t)=>{const o=[...Array(t)].map((s,r)=>r*e);return i<=0||t===0?0:i>=t*e?t-1:o.findIndex(s=>i<s+e)??0},Nn=({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:o,pageHeight:s,pageTurnDirection:r,pageTurnMode:c})=>r==="vertical"&&c==="scrollable"?1:t||r==="vertical"?Pe(i,s):Pe(e,o),bt=({itemWidth:i,itemHeight:e,position:t,isUsingVerticalWriting:o,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a,isRTL:l})=>{const d=Nn({spineItemPosition:t,itemHeight:e,itemWidth:i}).x,p=yt({isUsingVerticalWriting:o,itemHeight:e,itemWidth:i,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a});if(o)return St(t.y,r,p);const g=St(d,s,p);return l?p-1-g:g},On=({pageIndex:i,itemLayout:e,context:t,isUsingVerticalWriting:o})=>{if(o){const r=re(t.getPageSize().height,i,e.height);return new M({x:0,y:r})}const s=re(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=$e(u,p,d);return new M({x:g,y:0})}};return{getSpineItemPositionFromNode:t,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:a})=>On({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:$e(c.x,i.getPageSize().width,l),y:$e(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 y=re(g,a,d);return new te({x:c.x,y:c.y-y})}const h=re(p,a,u);if(i.isRTL()){const y=u-(a+1)*p;return new te({x:c.x-Math.max(0,y),y:c.y})}return new te({x:c.x-h,y:c.y})}}},kn=({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:o})=>{const r=i%o!==0?i-t:i;return new T({x:r,y:e})},wt=({position:i,isRTL:e,pageSizeHeight:t,spineItemsManager:o,visibleAreaRectWidth:s,spine:r})=>{const c=o.get(o.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 T({x:Math.max(Math.min(0,i.x),a.left),y:u});const d=a.right-s;return new T({x:Math.min(Math.max(0,i.x),d),y:u})},Te=({viewportPosition:i,spineLocator:e,context:t,spineItemNavigationResolver:o})=>{const s=e.getSpineItemFromPosition(i);if(s){const r=e.getSpineItemPositionFromSpinePosition(i,s),c=o.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 T({x:0,y:0})},Vn=({pageIndex:i,spineItemsManager:e,spineItemId:t,context:o,spineLocator:s,spineItemNavigationResolver:r})=>{const c=e.get(t);if(!c){const u=i*o.getPageSize().width;return Te({viewportPosition:new T({x:u,y:0}),context:o,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:o.getPageSize().width,visibleAreaRectWidth:o.state.visibleAreaRect.width})},Un=(i,e)=>{if(e&&e instanceof HTMLIFrameElement)return i.startsWith("#")?e.contentDocument?.getElementById(i.replace("#","")):e.contentDocument?.querySelector(i)},Wn=({anchor:i,spineItem:e,spine:t})=>{const o=Un(i,e.renderer.getDocumentFrame());return o?t.spineItemLocator.getSpineItemPositionFromNode(o,0,e)?.x??0:0},zn=({anchor:i,spineItem:e,spineLocator:t,spine:o})=>{const s=Wn({anchor:i,spineItem:e,spine:o});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:new M({x:s,y:0}),spineItem:e})},Hn=({anchor:i,spineItem:e,spineLocator:t,spine:o,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const c=zn({anchor:i,spineItem:e,spineLocator:t,spine:o});return N({position:c,pageSizeWidth:s,visibleAreaRectWidth:r})},Bn=({spine:i,spineItemsManager:e,spineLocator:t,url:o,context:s,pageSizeWidth:r,visibleAreaRectWidth:c})=>{try{const a=o instanceof URL?o:new URL(o),l=`${a.origin}${a.pathname}`,u=s.manifest?.spineItems.find(d=>d.href===l);if(u){const d=e.get(u.id);if(d){const p=Hn({anchor:a.hash,spineItem:d,spine:i,spineLocator:t,pageSizeWidth:r,visibleAreaRectWidth:c});return{position:N({position:p,pageSizeWidth:r,visibleAreaRectWidth:c}),spineItemId:u.id}}}return}catch(a){console.error(a);return}},_n=({spineItem:i,spineItemPosition:e,spineLocator:t,spineItemLocator:o,context:s})=>{const r=o.getSpineItemClosestPositionFromUnsafePosition(e,i),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:i});return N({position:c,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},qn="spineNavigator",Yn=({context:i,spineItemsManager:e,locator:t,settings:o,spine:s})=>{const r=kn({context:i,settings:o});return{getNavigationForUrl:g=>Bn({context:i,spineItemsManager:e,spineLocator:t,url:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width,spine:s}),getNavigationForSpineItemPage:g=>Vn({...g,context:i,spineItemsManager:e,spineItemNavigationResolver:r,spineLocator:t}),getNavigationFromSpineItemPosition:g=>_n({...g,spineItemLocator:t.spineItemLocator,spineLocator:t,context:i}),getNavigationForCfi:g=>{const m=e.getSpineItemFromCfi(g),{node:h,offset:y=0}=be({cfi:g,spineItemsManager:e});if(!m){C.warn(qn,`unable to detect item id from cfi ${g}`);return}const S=h?r.getNavigationFromNode(m,h,y):new M({x:0,y:0}),f=t.getSpinePositionFromSpineItemPosition({spineItemPosition:S,spineItem:m});return N({position:f,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 T({x:0,y:0})},getNavigationForPosition:g=>Te({viewportPosition:g,context:i,spineItemNavigationResolver:r,spineLocator:t}),getMostPredominantNavigationForPosition:g=>{const m=o.values.computedPageTurnDirection,h=.5,y=m==="horizontal"?g.x+i.state.visibleAreaRect.width*h:0,S=m==="horizontal"?0:g.y+i.state.visibleAreaRect.height*h,f=wt({position:new T({x:y,y:S}),isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s});return Te({context:i,spineItemNavigationResolver:r,spineLocator:t,viewportPosition:f})},getAdjustedPositionWithSafeEdge:g=>wt({position:g,isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s}),isNavigationGoingForwardFrom:(g,m)=>o.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}},xn=({spineItemsManager:i,context:e,hookManager:t,spine:o,settings:s,viewport:r})=>{const c=new n.Subject,a=new ve,l=Yn({context:e,settings:s,spineItemsManager:i,locator:o.locator,spine:o}),u=new mt(s,t,e,o,r),d=new ft(r,s,t,o,e),p=new Rn(s,e,o,d,a,r),g=n.merge(c,p.navigation$),m=new gt(s,e,g,u,d,l,o,a.isLocked$),h=n.combineLatest([u.isNavigating$,d.isNavigating$,a.isLocked$,m.locker.isLocked$]).pipe(b.map(f=>f.some(w=>w)?"busy":"free"),b.distinctUntilChanged(),b.shareReplay(1));return{destroy:()=>{p.destroy(),u.destroy(),m.destroy()},getNavigation:()=>m.navigation,internalNavigator:m,scrollNavigationController:d,controlledNavigationController:u,locker:a,viewportState$:h,navigate:f=>{c.next(f)},lock(){return a.lock()},navigationResolver:l,navigation$:m.navigation$}};class vt extends z{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 R{constructor(e,t,o,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=o,this.spine=s,this.spineItemLocator=r;const c=n.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(n.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(n.take(1),n.withLatestFrom(this.context.bridgeEvent.navigation$),n.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),y=this.spineItemsManager.get(m);if(!h||!y)return;const S=p.beginCfi,f=p.endCfi,{beginPageIndex:w=0}=l({spineItem:h,position:d})??{},{endPageIndex:v=0}=l({spineItem:y,position:d})??{},P=S===void 0||oe(S)||p.beginSpineItemIndex!==g,L=p.endSpineItemIndex!==m||f===void 0||oe(f),F=P?W(h.item):S,E=L?W(y.item):f,A=h.numberOfPages,U=y.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:E,endNumberOfPagesInSpineItem:U,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:u.id})}))})),a=c.pipe(X(this.context.bridgeEvent.viewportFree$),n.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:ne({pageIndex:d,spineItem:g,spine:this.spine}),endCfi:ne({pageIndex:p,spineItem:m,spine:this.spine})})}));n.merge(c,a).pipe(n.takeUntil(this.destroy$)).subscribe()}}class $t extends R{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new n.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(n.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=$.shallowMergeIfDefined(this.inputSettings,e),o=this.getOutputSettings(t),s=!$.isShallowEqual(this.outputSettings,o);return{hasChanged:s,state:o,commit:()=>(this.inputSettings=t,this.outputSettings=o,s&&this.outputSettingsUpdateSubject.next(o),o)}}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),n.distinctUntilChanged($.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Xn extends $t{constructor(e,t){super(e),this.context=t;const o=n.combineLatest([t.hasVerticalWriting$,t.manifest$]).pipe(b.tap(()=>{this.update(this.values)})),s=this.values$.pipe(b.tap(({forceSinglePageMode:r})=>{t.update({forceSinglePageMode:r})}));n.merge(o,s).pipe(b.takeUntil(t.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,o=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"),o&&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=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 Zn extends _{onUnload(){return n.EMPTY}onCreateDocument(){return n.of(document.createElement("div"))}onLoadDocument(){return n.EMPTY}onLayout(){return n.of(void 0)}onRenderHeadless(){return n.EMPTY}getDocumentFrame(){}}class Gn extends R{constructor(e,t,o,s,r,c){super(),this.item=e,this.containerElement=t,this.context=o,this.hookManager=s,this.renderer=r,this.settings=c,this.layoutTriggerSubject=new n.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:a,minimumWidth:l})=>u=>u.pipe(n.map(d=>{const p=$.isShallowEqual(this.lastLayout?.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:g,height:m}=p??{},{width:h=g,height:y=m}=d??{},{width:S,height:f}=this.context.getPageSize(),w=this.validateDimension(h??S,S,l),v=this.settings.values.computedPageTurnMode==="scrollable"?y??f:this.validateDimension(y??f,f,f);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(n.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(n.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 n.merge(n.of({type:"start"}),p.pipe(this.applyDimsAfterLayout(a),n.map(g=>({type:"end",data:g}))))}),n.share()),this.layout$=this.layoutProcess$.pipe(n.filter(a=>a.type==="end"),n.map(a=>a.data),n.share())}validateDimension(e,t,o){if(e<=0)return o;const s=Math.max(e,o),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,o=e.height?parseFloat(e.height):0;return{width:t,height:o}}}class Me extends z{constructor(e,t,o,s,r,c){super({isLoaded:!1,isReady:!1,iDirty:!1}),this.item=e,this.parentElement=t,this.context=o,this.settings=s,this.hookManager=r,this.index=c,this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.markDirty=()=>{this.mergeCompare({iDirty:!0})},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=Kn(t,e,r),t.appendChild(this.containerElement);const a=this.settings.values.getRenderer?.(e);this.resourcesHandler=new Q(e,this.settings);const l={context:o,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=a?a(l):new Zn(l),this.layout=new Gn(e,this.containerElement,o,r,this.renderer,this.settings);const u=this.renderer.state$.pipe(b.tap(p=>{this.mergeCompare({isLoaded:p==="loaded"})})),d=this.layout.layout$.pipe(b.tap(()=>{this.mergeCompare({iDirty:!1,isReady:this.renderer.state$.value==="loaded"})}));this.needsLayout$=n.merge(this.unloaded$,this.loaded$),n.merge(u,d,this.layout.layout$).pipe(b.takeUntil(this.destroy$)).subscribe()}get isReady$(){return this.watch("isReady")}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.loaded$}get unloaded$(){return this.renderer.state$.pipe(b.distinctUntilChanged(),b.filter(e=>e!=="idle"),b.switchMap(()=>this.renderer.state$.pipe(b.filter(e=>e==="idle"),b.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return yt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.context.getPageSize().width,pageHeight:this.context.getPageSize().height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Kn=(i,e,t)=>{const o=i.ownerDocument.createElement("div");return o.classList.add("spineItem"),o.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),o.style.cssText=`
278
278
  position: absolute;
279
279
  overflow: hidden;
280
- `,o.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:o}),o};class Kn extends R{constructor(e,t,o,s,r){super(),this.context=e,this.spineItemsManager=t,this.spineLocator=o,this.settings=s,this.spineLayout=r,this.forcedOpenSubject=new n.BehaviorSubject([]);const c=this.forcedOpenSubject.pipe(n.map(u=>[...new Set(u.flat())].sort()),n.distinctUntilChanged($.arrayEqual),n.shareReplay({bufferSize:1,refCount:!0}));n.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,c,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(n.debounceTime(100,n.animationFrameScheduler),X(this.context.bridgeEvent.viewportFree$),n.withLatestFrom(this.context.bridgeEvent.navigation$,c),n.map(([,u,d])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=s.values,{beginIndex:g=0,endIndex:m=0}=o.getVisibleSpineItemsFromPosition({position:u.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},h=p===1/0?0:g-p,y=p===1/0?t.items.length-1:m+p,S=Array.from({length:y-h+1},(w,v)=>h+v),f=[...d,...S];t.items.forEach((w,v)=>{f.includes(v)?w.load():w.unload()})})).pipe(n.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(o=>typeof o=="number"?o:o.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,t]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(o=>o!==t))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Tt=(i,e,t)=>{const o=(t.width-e.width)/2,s=(t.height-e.height)/2;return new Y({x:i.x-o,y:i.y-s})};class Z extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const s=e;return new Z(s.x,s.y,t.width,t.height)}const o=e;return new Z(o.x,o.y,o.width,o.height)}}class Jn{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class Qn{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const jn=({pageIndex:i,spineItemOrId:e,spineItemsManager:t})=>{const o=t.items,s=t.get(e);if(!s)return;const{currentAbsolutePage:r}=o.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},eo=({itemHeight:i,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:o,threshold:s})=>{const r=t/e,c=o/i;return s.type==="percentage"?r>=s.value&&c>=s.value:t>=s.value&&o>=s.value},to=({visibleWidthOfItem:i,visibleHeightOfItem:e,threshold:t,viewportPosition:o})=>{const s=i/o.width,r=e/o.height;return t.type==="percentage"?r>=t.value&&s>=t.value:e>=t.value&&i>=t.value},Mt=({itemPosition:{bottom:i,left:e,right:t,top:o,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(o,p));if(m<=0||h<=0)return{visible:!1};const S=to({threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m,viewportPosition:a});return l?{visible:S}:{visible:eo({itemHeight:r,itemWidth:s,threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m})||S}},Fe=({position:i,spineItemsManager:e,spineLayout:t})=>{const o=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&&!o?e.items[0]:o},Le=({spineItemPosition:i,itemLayout:{left:e,top:t}})=>new T({x:e+i.x,y:t+i.y}),io=({position:i,threshold:e,restrictToScreen:t,spineItemsManager:o,spineLayout:s,useAbsoluteViewport:r=!0,viewport:c})=>{const a=Fe({position:i,spineItemsManager:o,spineLayout:s})||o.get(0),l=o.items.reduce((m,h)=>{const y=s.getSpineItemSpineLayoutInfo(h),S=r?c.absoluteViewport:c.relativeViewport,f=Tt(i,c.absoluteViewport,S),w=Z.from(f,S),{visible:v}=Mt({itemPosition:y,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=o.getSpineItemIndex(u),g=o.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:g??0}},no=({spineItemsManager:i,context:e,spineItemLocator:t,settings:o,spineLayout:s,viewport:r})=>{const c=(h,y)=>{const{left:S,top:f}=s.getSpineItemSpineLayoutInfo(y);return new M({x:Math.max(h.x-S,0),y:Math.max(h.y-f,0)})},a=h=>Le({spineItemPosition:new M({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),l=h=>i.items.find(y=>y.renderer.getDocumentFrame()===h),u=(h,y,S)=>{if(typeof S=="number"){const f=i.get(S);return f?t.getSpineItemPageIndexFromNode(h,y||0,f):void 0}return t.getSpineItemPageIndexFromNode(h,y||0,S)},d=({position:h,threshold:y,spineItem:S,restrictToScreen:f,useAbsoluteViewport:w=!0,viewport:v})=>{const P=S.numberOfPages,F=Array.from(Array(P)).map((U,B)=>{const x=t.getSpineItemPositionFromPageIndex({pageIndex:B,spineItem:S}),H=Le({spineItemPosition:x,itemLayout:s.getSpineItemSpineLayoutInfo(S)});return{index:B,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:B,index:x})=>{const H=w?v.absoluteViewport:v.relativeViewport,po=Tt(h,v.absoluteViewport,H),go=Z.from(po,H),{visible:ho}=Mt({viewportPosition:go,restrictToScreen:f,threshold:y,itemPosition:B});return ho?[...U,x]:U},[]),E=F[0],A=F[F.length-1]??E;if(!(E===void 0||A===void 0))return{beginPageIndex:E,endPageIndex:A}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:y})=>{const S=s.getSpineItemSpineLayoutInfo(h);return Le({itemLayout:S,spineItemPosition:y})},_getAbsolutePageIndexFromPageIndex:h=>jn({...h,spineItemsManager:i}),getSpineItemPagePositionFromSpinePosition:h=>{const y=Fe({position:h,spineItemsManager:i,spineLayout:s});if(!y)return;const S=c(h,y),f=t.getSpineItemPageIndexFromPosition({itemWidth:y.layout.layoutInfo.width,itemHeight:y.layout.layoutInfo.height,position:S,isUsingVerticalWriting:!!y.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(S,f,y);return{spineItem:y,spineItemPageIndex:f,spineItemPagePosition:w,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:a,getSpineItemPositionFromSpinePosition:c,getSpineItemFromPosition:h=>Fe({position:h,spineItemsManager:i,spineLayout:s}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:u,getVisibleSpineItemsFromPosition:h=>io({spineItemsManager:i,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,y)=>{const{bottom:S,left:f,right:w,top:v}=s.getSpineItemSpineLayoutInfo(y);return h.x>=f&&h.x<=w&&h.y<=S&&h.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,y)=>{const{height:S,width:f}=s.getSpineItemSpineLayoutInfo(y);return new M({x:Math.min(Math.max(0,h.x),f),y:Math.min(Math.max(0,h.y),S)})}}},oo=C.namespace("spine"),Ft=({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 Lt extends z{constructor(e,t,o,s,r,c){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=o,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(n.map(()=>this.fromAbsolutePageIndex(a))),this.layout$=e.layout$.pipe(n.withLatestFrom(c),n.switchMap(([,{pageSize:a}])=>{const l=t.items.reduce((d,p,g)=>{const h=new Array(p.numberOfPages).fill(void 0).map((y,S)=>{const f=o.getSpineItemPositionFromPageIndex({spineItem:p,pageIndex:S}),w=r.getSpinePositionFromSpineItemPosition({spineItem:p,spineItemPosition:f});return{absoluteLayout:Ft({pageSize:a,position:w}),layout:new _e({left:f.x,right:f.x+a.width,top:f.y,bottom:f.y+a.height,width:a.width,height:a.height,x:f.x,y:f.y}),itemIndex:g,absolutePageIndex:d.length+S,spineItem:p,pageIndex:S}});return[...d,...h]},[]);return n.combineLatest(l.map(d=>{const{spineItem:p,...g}=d;return new n.Observable(m=>{const h=d.spineItem.renderer?.getDocumentFrame();let y;h&&h?.contentWindow?.document&&h.contentWindow.document.body!==null&&(y=Ut(h.contentWindow.document,d.layout)),m.next({...g,firstVisibleNode:y})})}))}),n.map(a=>(oo.info("Pages layout",a),{pages:a})),n.share()),this.layout$.pipe(n.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Ct extends R{constructor(e,t){super(),this.spineItemsManager=e,this.spineLocator=t,this.itemIsReady$=this.spineItemsManager.items$.pipe(n.switchMap(o=>{const s=o.map(r=>r.isReady$.pipe(n.map(c=>({item:r,isReady:c}))));return n.merge(...s)}),n.share()),this.itemResize$=this.spineItemsManager.items$.pipe(n.switchMap(o=>{const s=o.map(r=>J(r.element).pipe(n.map(c=>({entries:c,item:r}))));return n.merge(...s)}),n.share()),this.itemLoaded$=this.spineItemsManager.items$.pipe(n.switchMap(o=>{const s=o.map(r=>r.loaded$.pipe(n.map(()=>r)));return n.merge(...s)}))}}const so=({horizontalOffset:i,verticalOffset:e,context:t,spineItemsManager:o,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===o.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(n.map(({width:h,height:y})=>{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 P=h+v,L=y+w,F=new ie({left:v,right:P,top:w,bottom:L,height:y,width:h,x:v,y:w});return{horizontalOffset:P,verticalOffset:L,layoutPosition:F}}a.layout.adjustPositionOfElement(t.isRTL()?{right:i,top:0}:{left:i,top:0});const S=t.isRTL()?l.absoluteViewport.width-i-h:i,f=new ie({right:t.isRTL()?l.absoluteViewport.width-i:i+h,left:S,x:S,top:e,bottom:y,height:y,width:h,y:e});return{horizontalOffset:i+h,verticalOffset:0,layoutPosition:f}}))};class ro extends R{constructor(e,t,o,s){super(),this.spineItemsManager=e,this.context=t,this.settings=o,this.viewport=s,this.layoutSubject=new n.Subject,this.spineItemsRelativeLayouts=[],e.items$.pipe(n.tap(()=>{this.spineItemsRelativeLayouts=[]}),n.switchMap(c=>{const a=c.map(u=>u.needsLayout$.pipe(n.tap(()=>{this.layout()}))),l=c.map(u=>u.loaded$.pipe(n.tap(()=>{u.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return n.merge(...a,...l)})).pipe(n.takeUntil(this.destroy$)).subscribe();const r=new n.BehaviorSubject(!1);this.layout$=this.layoutSubject.pipe(n.tap(()=>{this.spineItemsManager.items.forEach(c=>{c.markDirty()})}),n.debounceTime(50),n.exhaustMap(()=>r.pipe(n.filter(c=>!c),n.first())),n.exhaustMap(()=>{r.next(!0);const c=this.context.manifest,a=rt(c)??!1;return n.from(this.spineItemsManager.items).pipe(n.reduce((u,d,p)=>u.pipe(n.concatMap(({horizontalOffset:g,verticalOffset:m})=>so({context:this.context,horizontalOffset:g,index:p,isGloballyPrePaginated:a,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(n.map(({horizontalOffset:h,verticalOffset:y,layoutPosition:S})=>(this.spineItemsRelativeLayouts[p]=S,{horizontalOffset:h,verticalOffset:y}))))),n.of({horizontalOffset:0,verticalOffset:0})),n.concatMap(u=>u),n.finalize(()=>{r.next(!1)}))}),n.share()),n.merge(this.layout$).pipe(n.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(e){const t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new ie({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 Et extends R{constructor(e,t,o,s,r,c,a,l){super(),this.parentElement$=e,this.context=t,this.pagination=o,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=c,this.hookManager=a,this.viewport=l,this.elementSubject=new n.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new ro(s,t,c,l),this.locator=no({context:t,spineItemsManager:s,spineItemLocator:r,settings:c,spineLayout:this.spineLayout,viewport:l}),this.spineItemsLoader=new Kn(this.context,s,this.locator,c,this.spineLayout),this.spineItemsObserver=new Ct(s,this.locator),this.pages=new Lt(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const u=e.pipe(b.filter(le.isDefined),b.tap(p=>{const g=p.ownerDocument.createElement("div");g.style.cssText=`
280
+ `,o.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:o}),o};class Jn extends R{constructor(e,t,o,s,r){super(),this.context=e,this.spineItemsManager=t,this.spineLocator=o,this.settings=s,this.spineLayout=r,this.forcedOpenSubject=new n.BehaviorSubject([]);const c=this.forcedOpenSubject.pipe(n.map(u=>[...new Set(u.flat())].sort()),n.distinctUntilChanged($.arrayEqual),n.shareReplay({bufferSize:1,refCount:!0}));n.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,c,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(n.debounceTime(100,n.animationFrameScheduler),X(this.context.bridgeEvent.viewportFree$),n.withLatestFrom(this.context.bridgeEvent.navigation$,c),n.map(([,u,d])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=s.values,{beginIndex:g=0,endIndex:m=0}=o.getVisibleSpineItemsFromPosition({position:u.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},h=p===1/0?0:g-p,y=p===1/0?t.items.length-1:m+p,S=Array.from({length:y-h+1},(w,v)=>h+v),f=[...d,...S];t.items.forEach((w,v)=>{f.includes(v)?w.load():w.unload()})})).pipe(n.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(o=>typeof o=="number"?o:o.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,t]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(o=>o!==t))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Tt=(i,e,t)=>{const o=(t.width-e.width)/2,s=(t.height-e.height)/2;return new Y({x:i.x-o,y:i.y-s})};class Z extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const s=e;return new Z(s.x,s.y,t.width,t.height)}const o=e;return new Z(o.x,o.y,o.width,o.height)}}class Qn{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class jn{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const eo=({pageIndex:i,spineItemOrId:e,spineItemsManager:t})=>{const o=t.items,s=t.get(e);if(!s)return;const{currentAbsolutePage:r}=o.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},to=({itemHeight:i,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:o,threshold:s})=>{const r=t/e,c=o/i;return s.type==="percentage"?r>=s.value&&c>=s.value:t>=s.value&&o>=s.value},io=({visibleWidthOfItem:i,visibleHeightOfItem:e,threshold:t,viewportPosition:o})=>{const s=i/o.width,r=e/o.height;return t.type==="percentage"?r>=t.value&&s>=t.value:e>=t.value&&i>=t.value},Mt=({itemPosition:{bottom:i,left:e,right:t,top:o,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(o,p));if(m<=0||h<=0)return{visible:!1};const S=io({threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m,viewportPosition:a});return l?{visible:S}:{visible:to({itemHeight:r,itemWidth:s,threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m})||S}},Fe=({position:i,spineItemsManager:e,spineLayout:t})=>{const o=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&&!o?e.items[0]:o},Le=({spineItemPosition:i,itemLayout:{left:e,top:t}})=>new T({x:e+i.x,y:t+i.y}),no=({position:i,threshold:e,restrictToScreen:t,spineItemsManager:o,spineLayout:s,useAbsoluteViewport:r=!0,viewport:c})=>{const a=Fe({position:i,spineItemsManager:o,spineLayout:s})||o.get(0),l=o.items.reduce((m,h)=>{const y=s.getSpineItemSpineLayoutInfo(h),S=r?c.absoluteViewport:c.relativeViewport,f=Tt(i,c.absoluteViewport,S),w=Z.from(f,S),{visible:v}=Mt({itemPosition:y,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=o.getSpineItemIndex(u),g=o.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:g??0}},oo=({spineItemsManager:i,context:e,spineItemLocator:t,settings:o,spineLayout:s,viewport:r})=>{const c=(h,y)=>{const{left:S,top:f}=s.getSpineItemSpineLayoutInfo(y);return new M({x:Math.max(h.x-S,0),y:Math.max(h.y-f,0)})},a=h=>Le({spineItemPosition:new M({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),l=h=>i.items.find(y=>y.renderer.getDocumentFrame()===h),u=(h,y,S)=>{if(typeof S=="number"){const f=i.get(S);return f?t.getSpineItemPageIndexFromNode(h,y||0,f):void 0}return t.getSpineItemPageIndexFromNode(h,y||0,S)},d=({position:h,threshold:y,spineItem:S,restrictToScreen:f,useAbsoluteViewport:w=!0,viewport:v})=>{const P=S.numberOfPages,F=Array.from(Array(P)).map((U,H)=>{const x=t.getSpineItemPositionFromPageIndex({pageIndex:H,spineItem:S}),B=Le({spineItemPosition:x,itemLayout:s.getSpineItemSpineLayoutInfo(S)});return{index:H,absolutePosition:{width:e.getPageSize().width,height:e.getPageSize().height,left:B.x,top:B.y,bottom:B.y+e.getPageSize().height,right:B.x+e.getPageSize().width}}}).reduce((U,{absolutePosition:H,index:x})=>{const B=w?v.absoluteViewport:v.relativeViewport,go=Tt(h,v.absoluteViewport,B),ho=Z.from(go,B),{visible:mo}=Mt({viewportPosition:ho,restrictToScreen:f,threshold:y,itemPosition:H});return mo?[...U,x]:U},[]),E=F[0],A=F[F.length-1]??E;if(!(E===void 0||A===void 0))return{beginPageIndex:E,endPageIndex:A}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:y})=>{const S=s.getSpineItemSpineLayoutInfo(h);return Le({itemLayout:S,spineItemPosition:y})},_getAbsolutePageIndexFromPageIndex:h=>eo({...h,spineItemsManager:i}),getSpineItemPagePositionFromSpinePosition:h=>{const y=Fe({position:h,spineItemsManager:i,spineLayout:s});if(!y)return;const S=c(h,y),f=t.getSpineItemPageIndexFromPosition({itemWidth:y.layout.layoutInfo.width,itemHeight:y.layout.layoutInfo.height,position:S,isUsingVerticalWriting:!!y.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(S,f,y);return{spineItem:y,spineItemPageIndex:f,spineItemPagePosition:w,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:a,getSpineItemPositionFromSpinePosition:c,getSpineItemFromPosition:h=>Fe({position:h,spineItemsManager:i,spineLayout:s}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:u,getVisibleSpineItemsFromPosition:h=>no({spineItemsManager:i,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,y)=>{const{bottom:S,left:f,right:w,top:v}=s.getSpineItemSpineLayoutInfo(y);return h.x>=f&&h.x<=w&&h.y<=S&&h.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,y)=>{const{height:S,width:f}=s.getSpineItemSpineLayoutInfo(y);return new M({x:Math.min(Math.max(0,h.x),f),y:Math.min(Math.max(0,h.y),S)})}}},so=C.namespace("spine"),Ft=({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 Lt extends z{constructor(e,t,o,s,r,c){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=o,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(n.map(()=>this.fromAbsolutePageIndex(a))),this.layout$=e.layout$.pipe(n.withLatestFrom(c),n.switchMap(([,{pageSize:a}])=>{const l=t.items.reduce((d,p,g)=>{const h=new Array(p.numberOfPages).fill(void 0).map((y,S)=>{const f=o.getSpineItemPositionFromPageIndex({spineItem:p,pageIndex:S}),w=r.getSpinePositionFromSpineItemPosition({spineItem:p,spineItemPosition:f});return{absoluteLayout:Ft({pageSize:a,position:w}),layout:new _e({left:f.x,right:f.x+a.width,top:f.y,bottom:f.y+a.height,width:a.width,height:a.height,x:f.x,y:f.y}),itemIndex:g,absolutePageIndex:d.length+S,spineItem:p,pageIndex:S}});return[...d,...h]},[]);return n.combineLatest(l.map(d=>{const{spineItem:p,...g}=d;return new n.Observable(m=>{const h=d.spineItem.renderer?.getDocumentFrame();let y;h&&h?.contentWindow?.document&&h.contentWindow.document.body!==null&&(y=Ut(h.contentWindow.document,d.layout)),m.next({...g,firstVisibleNode:y})})}))}),n.map(a=>(so.info("Pages layout",a),{pages:a})),n.share()),this.layout$.pipe(n.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Ct extends R{constructor(e,t){super(),this.spineItemsManager=e,this.spineLocator=t,this.itemIsReady$=this.spineItemsManager.items$.pipe(n.switchMap(o=>{const s=o.map(r=>r.isReady$.pipe(n.map(c=>({item:r,isReady:c}))));return n.merge(...s)}),n.share()),this.itemResize$=this.spineItemsManager.items$.pipe(n.switchMap(o=>{const s=o.map(r=>J(r.element).pipe(n.map(c=>({entries:c,item:r}))));return n.merge(...s)}),n.share()),this.itemLoaded$=this.spineItemsManager.items$.pipe(n.switchMap(o=>{const s=o.map(r=>r.loaded$.pipe(n.map(()=>r)));return n.merge(...s)}))}}const ro=({horizontalOffset:i,verticalOffset:e,context:t,spineItemsManager:o,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===o.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(n.map(({width:h,height:y})=>{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 P=h+v,L=y+w,F=new ie({left:v,right:P,top:w,bottom:L,height:y,width:h,x:v,y:w});return{horizontalOffset:P,verticalOffset:L,layoutPosition:F}}a.layout.adjustPositionOfElement(t.isRTL()?{right:i,top:0}:{left:i,top:0});const S=t.isRTL()?l.absoluteViewport.width-i-h:i,f=new ie({right:t.isRTL()?l.absoluteViewport.width-i:i+h,left:S,x:S,top:e,bottom:y,height:y,width:h,y:e});return{horizontalOffset:i+h,verticalOffset:0,layoutPosition:f}}))};class ao extends R{constructor(e,t,o,s){super(),this.spineItemsManager=e,this.context=t,this.settings=o,this.viewport=s,this.layoutSubject=new n.Subject,this.spineItemsRelativeLayouts=[],e.items$.pipe(n.tap(()=>{this.spineItemsRelativeLayouts=[]}),n.switchMap(c=>{const a=c.map(u=>u.needsLayout$.pipe(n.tap(()=>{this.layout()}))),l=c.map(u=>u.loaded$.pipe(n.tap(()=>{u.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return n.merge(...a,...l)})).pipe(n.takeUntil(this.destroy$)).subscribe();const r=new n.BehaviorSubject(!1);this.layout$=this.layoutSubject.pipe(n.tap(()=>{this.spineItemsManager.items.forEach(c=>{c.markDirty()})}),n.debounceTime(50),n.exhaustMap(()=>r.pipe(n.filter(c=>!c),n.first())),n.exhaustMap(()=>{r.next(!0);const c=this.context.manifest,a=rt(c)??!1;return n.from(this.spineItemsManager.items).pipe(n.reduce((u,d,p)=>u.pipe(n.concatMap(({horizontalOffset:g,verticalOffset:m})=>ro({context:this.context,horizontalOffset:g,index:p,isGloballyPrePaginated:a,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(n.map(({horizontalOffset:h,verticalOffset:y,layoutPosition:S})=>(this.spineItemsRelativeLayouts[p]=S,{horizontalOffset:h,verticalOffset:y}))))),n.of({horizontalOffset:0,verticalOffset:0})),n.concatMap(u=>u),n.finalize(()=>{r.next(!1)}))}),n.share()),n.merge(this.layout$).pipe(n.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(e){const t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new ie({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 Et extends R{constructor(e,t,o,s,r,c,a,l){super(),this.parentElement$=e,this.context=t,this.pagination=o,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=c,this.hookManager=a,this.viewport=l,this.elementSubject=new n.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new ao(s,t,c,l),this.locator=oo({context:t,spineItemsManager:s,spineItemLocator:r,settings:c,spineLayout:this.spineLayout,viewport:l}),this.spineItemsLoader=new Jn(this.context,s,this.locator,c,this.spineLayout),this.spineItemsObserver=new Ct(s,this.locator),this.pages=new Lt(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const u=e.pipe(b.filter(ce.isDefined),b.tap(p=>{const g=p.ownerDocument.createElement("div");g.style.cssText=`
281
281
  height: 100%;
282
282
  position: relative;
283
283
  `,g.className=`${q}-spine`,this.elementSubject.next(g)})),d=n.combineLatest([this.context.manifest$,this.element$]).pipe(b.tap(([p,g])=>{if(!g)return;this.spineItemsManager.destroyItems();const m=p.spineItems.map((h,y)=>new Me(h,g,this.context,this.settings,this.hookManager,y));this.spineItemsManager.addMany(m)}));n.merge(d,u).pipe(b.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 R{constructor(e,t){super(),this.context=e,this.settings=t,this.orderedSpineItemsSubject=new n.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 o=this.getSpineItemIndex(e)??0,s=this.getSpineItemIndex(t)??0;return o>s?"after":o===s?"same":"before"}getSpineItemIndex(e){const t=e instanceof Me?e:this.get(e);if(!t)return;const o=this.orderedSpineItemsSubject.value.indexOf(t);return o<0?void 0:o}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:t}=se(e);if(t!==void 0)return this.get(t)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>e.destroy())}}class At extends z{constructor(e){const t=document.createElement("div");t.style.cssText=`
@@ -286,9 +286,9 @@
286
286
  -transform: scale(0.2);
287
287
  height: 100%;
288
288
  width: 100%;
289
- `,t.className=`${q}-viewport`,super({element:t,pageSize:{width:1,height:1}}),this.context=e;const o=this.context.watch("visibleAreaRect").pipe(n.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize()})}));n.merge(o).pipe(n.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 Qn({width:e.width/t,height:e.height/t})}}const ao=i=>{const e=new n.Subject,t=new n.Subject,o=new lt,s=new at,r=new xn(i,s),c=new ct(s,r),a=new Rt(s,r),l=new At(s),u=s.watch("rootElement"),d=It({context:s,settings:r}),p=new vt(s,a),g=new Et(u,s,p,a,d,r,o,l),m=Yn({context:s,spineItemsManager:a,hookManager:o,spine:g,settings:r,viewport:l}),h=new Pt(s,p,a,g,d);m.viewportState$.subscribe(s.bridgeEvent.viewportStateSubject),m.navigation$.subscribe(s.bridgeEvent.navigationSubject),m.locker.isLocked$.subscribe(s.bridgeEvent.navigationIsLockedSubject),p.subscribe(s.bridgeEvent.paginationSubject);const y=()=>{e.next()},S=P=>{const{containerElement:L,manifest:F}=P;if(s.manifest){C.warn("loading a new book is not supported yet");return}C.log("load",{options:P});const E=co(L);s.update({manifest:F,rootElement:E,forceSinglePageMode:r.values.forceSinglePageMode}),y()},w=e.pipe(b.tap(()=>{const P=s.value.rootElement;if(!P)return;const L={width:P?.offsetWidth,height:P?.offsetHeight};P.style.setProperty("overflow","hidden");const F=P.getBoundingClientRect();s.update({visibleAreaRect:{x:F.x,y:F.y,width:L.width,height:L.height}}),g.layout()})).subscribe(),v=()=>{w.unsubscribe(),a.destroy(),h.destroy(),r.destroy(),p.destroy(),s.destroy(),m.destroy(),g.destroy(),c.destroy(),t.next(),t.complete(),l.destroy()};return{context:s,spine:g,hookManager:o,cfi:{generateCfiFromRange:Qe,parseCfi:se,generateCfiForSpineItemPage:P=>ne({...P,spine:g}),resolveCfi:P=>Ie({...P,spineItemsManager:a})},navigation:m,spineItemsObserver:g.spineItemsObserver,spineItemsManager:a,layout:y,load:S,destroy:v,pagination:{get state(){return p.value},get state$(){return p}},settings:r,renderHeadless:P=>a.get(P)?.renderer.renderHeadless()??n.of(void 0),viewport:l,element$:u,viewportState$:s.bridgeEvent.viewportState$,viewportFree$:s.bridgeEvent.viewportFree$,state$:s.manifest$.pipe(b.map(P=>P?"ready":"idle")),features:c,$:{destroy$:t}}},co=i=>(i.style.cssText=`
289
+ `,t.className=`${q}-viewport`,super({element:t,pageSize:{width:1,height:1}}),this.context=e;const o=this.context.watch("visibleAreaRect").pipe(n.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize()})}));n.merge(o).pipe(n.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 Qn({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 jn({width:e.width/t,height:e.height/t})}}const co=i=>{const e=new n.Subject,t=new n.Subject,o=new lt,s=new at,r=new Xn(i,s),c=new ct(s,r),a=new Rt(s,r),l=new At(s),u=s.watch("rootElement"),d=It({context:s,settings:r}),p=new vt(s,a),g=new Et(u,s,p,a,d,r,o,l),m=xn({context:s,spineItemsManager:a,hookManager:o,spine:g,settings:r,viewport:l}),h=new Pt(s,p,a,g,d);m.viewportState$.subscribe(s.bridgeEvent.viewportStateSubject),m.navigation$.subscribe(s.bridgeEvent.navigationSubject),m.locker.isLocked$.subscribe(s.bridgeEvent.navigationIsLockedSubject),p.subscribe(s.bridgeEvent.paginationSubject);const y=()=>{e.next()},S=P=>{const{containerElement:L,manifest:F}=P;if(s.manifest){C.warn("loading a new book is not supported yet");return}C.log("load",{options:P});const E=lo(L);s.update({manifest:F,rootElement:E,forceSinglePageMode:r.values.forceSinglePageMode}),y()},w=e.pipe(b.tap(()=>{const P=s.value.rootElement;if(!P)return;const L={width:P?.offsetWidth,height:P?.offsetHeight};P.style.setProperty("overflow","hidden");const F=P.getBoundingClientRect();s.update({visibleAreaRect:{x:F.x,y:F.y,width:L.width,height:L.height}}),g.layout()})).subscribe(),v=()=>{w.unsubscribe(),a.destroy(),h.destroy(),r.destroy(),p.destroy(),s.destroy(),m.destroy(),g.destroy(),c.destroy(),t.next(),t.complete(),l.destroy()};return{context:s,spine:g,hookManager:o,cfi:{generateCfiFromRange:Qe,parseCfi:se,generateCfiForSpineItemPage:P=>ne({...P,spine:g}),resolveCfi:P=>be({...P,spineItemsManager:a})},navigation:m,spineItemsObserver:g.spineItemsObserver,spineItemsManager:a,layout:y,load:S,destroy:v,pagination:{get state(){return p.value},get state$(){return p}},settings:r,renderHeadless:P=>a.get(P)?.renderer.renderHeadless()??n.of(void 0),viewport:l,element$:u,viewportState$:s.bridgeEvent.viewportState$,viewportFree$:s.bridgeEvent.viewportFree$,state$:s.manifest$.pipe(b.map(P=>P?"ready":"idle")),features:c,$:{destroy$:t}}},lo=i=>(i.style.cssText=`
290
290
  ${i.style.cssText}
291
291
  background-color: white;
292
292
  position: relative;
293
- `,i.classList.add(`${q}-reader`),i),lo=ln(Qt(Ci(pn(Jt(Nt(on(dn(mn(Bi(He(Ri(Ot(un(it(xe(Zt(ao))))))))))))))))),uo=i=>e=>i(e);Object.defineProperty(I,"isShallowEqual",{enumerable:!0,get:()=>$.isShallowEqual}),I.AbstractSpinePosition=be,I.Context=at,I.ControlledNavigationController=mt,I.DestroyableClass=R,I.DocumentRenderer=_,I.Features=ct,I.HookManager=lt,I.InternalNavigator=gt,I.LayoutEntry=ee,I.Locker=Pe,I.Pages=Lt,I.Pagination=vt,I.PaginationController=Pt,I.ResourceHandler=Q,I.ResourcesLocator=tt,I.ScrollNavigationController=ft,I.SettingsManager=$t,I.Spine=Et,I.SpineItem=Me,I.SpineItemPageLayout=_e,I.SpineItemPageSpineLayout=qe,I.SpineItemPosition=M,I.SpineItemSpineLayout=ie,I.SpineItemsManager=Rt,I.SpineItemsObserver=Ct,I.SpinePosition=T,I.UnsafeSpineItemPagePosition=te,I.UnsafeSpinePosition=Y,I.Viewport=At,I.consolidate=et,I.createReader=lo,I.deferIdle=Se,I.deferNextResult=ke,I.generateCfiForSpineItemPage=ne,I.generateCfiFromRange=Qe,I.generateRootCfi=W,I.getAttributeValueFromString=ue,I.getFrameViewportInfo=G,I.getItemAnchor=Qi,I.htmlEnhancer=He,I.idle=fe,I.injectCSS=Ce,I.isHtmlElement=ge,I.isHtmlTagElement=Oe,I.isRootCfi=oe,I.layoutEnhancer=xe,I.mapKeysTo=me,I.observeIntersection=Gt,I.observeMutation=ye,I.observeResize=J,I.paginationEnhancer=it,I.parseCfi=se,I.removeCSS=Dt,I.resolveCfi=Ie,I.rootEnhancer=uo,I.spinePositionToSpineItemSpineLayout=Ft,I.upsertCSSToFrame=D,I.waitForFrameLoad=Ee,I.waitForFrameReady=Re,I.waitForSwitch=X,I.watchKeys=K,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})});
293
+ `,i.classList.add(`${q}-reader`),i),uo=ln(Qt(Ci(pn(Jt(Nt(on(dn(mn(Hi(Be(Ri(Ot(un(it(xe(Zt(co))))))))))))))))),po=i=>e=>i(e);Object.defineProperty(I,"isShallowEqual",{enumerable:!0,get:()=>$.isShallowEqual}),I.AbstractSpinePosition=ye,I.Context=at,I.ControlledNavigationController=mt,I.DestroyableClass=R,I.DocumentRenderer=_,I.Features=ct,I.HookManager=lt,I.InternalNavigator=gt,I.LayoutEntry=ee,I.Locker=ve,I.Pages=Lt,I.Pagination=vt,I.PaginationController=Pt,I.ResourceHandler=Q,I.ResourcesLocator=tt,I.ScrollNavigationController=ft,I.SettingsManager=$t,I.Spine=Et,I.SpineItem=Me,I.SpineItemPageLayout=_e,I.SpineItemPageSpineLayout=qe,I.SpineItemPosition=M,I.SpineItemSpineLayout=ie,I.SpineItemsManager=Rt,I.SpineItemsObserver=Ct,I.SpinePosition=T,I.UnsafeSpineItemPagePosition=te,I.UnsafeSpinePosition=Y,I.Viewport=At,I.consolidate=et,I.createReader=uo,I.deferIdle=fe,I.deferNextResult=ke,I.generateCfiForSpineItemPage=ne,I.generateCfiFromRange=Qe,I.generateRootCfi=W,I.getAttributeValueFromString=le,I.getFrameViewportInfo=G,I.getItemAnchor=Qi,I.htmlEnhancer=Be,I.idle=me,I.injectCSS=Ce,I.isHtmlElement=pe,I.isHtmlTagElement=Oe,I.isRootCfi=oe,I.layoutEnhancer=xe,I.mapKeysTo=he,I.observeIntersection=Gt,I.observeMutation=Se,I.observeResize=J,I.paginationEnhancer=it,I.parseCfi=se,I.removeCSS=Dt,I.resolveCfi=be,I.rootEnhancer=po,I.spinePositionToSpineItemSpineLayout=Ft,I.upsertCSSToFrame=D,I.waitForFrameLoad=Ee,I.waitForFrameReady=Re,I.waitForSwitch=X,I.watchKeys=K,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})});
294
294
  //# sourceMappingURL=index.umd.cjs.map