@prose-reader/core 1.289.0 → 1.290.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.
Files changed (40) hide show
  1. package/dist/context/BridgeEvent.d.ts +3 -2
  2. package/dist/createReaderWithEnhancer.d.ts +9 -9
  3. package/dist/enhancers/navigation/bookBoundary.d.ts +8 -0
  4. package/dist/enhancers/navigation/bookBoundary.test.d.ts +1 -0
  5. package/dist/enhancers/navigation/boundary.d.ts +6 -0
  6. package/dist/enhancers/navigation/boundary.test.d.ts +1 -0
  7. package/dist/enhancers/navigation/navigators/UserScrollNavigation.d.ts +2 -3
  8. package/dist/enhancers/navigation/resolvers/getNavigationForRightOrBottomPage.d.ts +1 -1
  9. package/dist/enhancers/navigation/resolvers/getNavigationForRightOrBottomPage.test.d.ts +1 -0
  10. package/dist/enhancers/navigation/types.d.ts +2 -0
  11. package/dist/enhancers/zoom/ZoomController.test.d.ts +1 -0
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.js +2485 -2409
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.umd.cjs +28 -28
  16. package/dist/index.umd.cjs.map +1 -1
  17. package/dist/navigation/InternalNavigator.d.ts +9 -24
  18. package/dist/navigation/Navigator.d.ts +9 -10
  19. package/dist/navigation/consolidation/consolidateWithPagination.d.ts +3 -1
  20. package/dist/navigation/consolidation/mapUserNavigationToInternal.d.ts +3 -2
  21. package/dist/navigation/consolidation/withFallbackPosition.d.ts +3 -1
  22. package/dist/navigation/controllers/ControlledNavigationController.d.ts +9 -8
  23. package/dist/navigation/controllers/ControlledNavigationController.test.d.ts +1 -0
  24. package/dist/navigation/controllers/ScrollNavigationController.d.ts +9 -8
  25. package/dist/navigation/controllers/positions.d.ts +6 -1
  26. package/dist/navigation/operators.d.ts +11 -0
  27. package/dist/navigation/resolvers/NavigationResolver.d.ts +4 -3
  28. package/dist/navigation/resolvers/clampRectInSpine.d.ts +13 -0
  29. package/dist/navigation/resolvers/clampRectInSpine.test.d.ts +1 -0
  30. package/dist/navigation/resolvers/getAdjustedPositionForSpread.d.ts +5 -3
  31. package/dist/navigation/types.d.ts +25 -1
  32. package/dist/pagination/PaginationController.d.ts +3 -1
  33. package/dist/reader.d.ts +9 -9
  34. package/dist/spine/loader/SpineItemsLoader.d.ts +3 -1
  35. package/dist/spine/loader/SpineItemsLoader.test.d.ts +1 -0
  36. package/dist/utilities.d.ts +4 -0
  37. package/dist/viewport/Viewport.d.ts +4 -0
  38. package/package.json +4 -4
  39. package/dist/navigation/resolvers/fromOutOfBoundsSpinePosition.d.ts +0 -20
  40. package/dist/navigation/resolvers/fromUnboundSpinePosition.d.ts +0 -12
@@ -1,9 +1,9 @@
1
- (function(b,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi"],r):(b=typeof globalThis<"u"?globalThis:b||self,r(b.prose={},b.rxjs,b.shared,b.operators,b.cfi))})(this,(function(b,r,T,I,B){"use strict";const C=T.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),jt=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function en(t,e,n){if("caretPositionFromPoint"in t)return t.caretPositionFromPoint(e,n);if("caretRangeFromPoint"in t&&typeof t.caretRangeFromPoint<"u")return t.caretRangeFromPoint(e,n)}const tn=(t,e)=>{const n="createRange"in t?t:t.ownerDocument;if(!n)return;const i="body"in t?he(t.body,e):he(t,e);if(i){let o,s=0;const a=n.createRange();return Array.from(i.childNodes).some(c=>{a.selectNodeContents(c);const l=a.getClientRects(),d=nn(l,e);if(d){o=a.cloneRange();const u=en(n,Math.ceil(d.left),Math.ceil(d.top));return u&&"startContainer"in u&&u.startContainer===o.startContainer&&(s=u.startOffset),u&&"offsetNode"in u&&u.offsetNode===o.startContainer&&(s=u.offset),!0}return!1}),o?{node:o.startContainer,offset:s}:{node:i,offset:0}}},he=(t,e)=>{const n=t.getBoundingClientRect(),i=ze(n,e);let o;i!=="before"&&i!=="after"&&(o=t);for(const s of t.children){const a=he(s,e);if(a)return a}return o};function ze(t,{left:e,right:n}){return t.left<=e&&t.right<=e?"before":t.left<=e&&t.right>e&&t.right<=n?"partially-before":t.left<=n&&t.right>n?"partially-after":t.left>n?"after":"within"}function nn(t,e){return Array.from(t).find(n=>{const i=ze(n,e);return i!=="before"&&i!=="after"})}const on=(t,e)=>{if(t.nodeType!==Node.CDATA_SECTION_NODE&&t.nodeType!==Node.DOCUMENT_TYPE_NODE){const n=t.ownerDocument?.createRange();n?.selectNodeContents(t);try{e<=(n?.endOffset||0)&&n?.setStart(t,e||0)}catch(i){C.error(i)}return n}},ge=t=>{if(t?.target&&t?.target?.ownerDocument?.defaultView){const e=t?.target?.ownerDocument?.defaultView;if(e.PointerEvent&&t instanceof e.PointerEvent)return!0}if(t?.view?.window){const e=t?.view;if(e.PointerEvent&&t instanceof e.PointerEvent)return!0}return!!jt.includes(t.type)},rn=t=>{if(ge(t))return!1;if(t?.target&&t?.target?.ownerDocument?.defaultView){const e=t?.target?.ownerDocument?.defaultView;if(e.MouseEvent)return t instanceof e.MouseEvent}if(t?.view?.window){const e=t?.view;if(e.MouseEvent)return t instanceof e.MouseEvent}return!1},sn=t=>{if(t?.target&&t?.target?.ownerDocument?.defaultView){const e=t?.target?.ownerDocument?.defaultView;if(e.TouchEvent)return t instanceof e.TouchEvent}if(t?.view?.window){const e=t?.view;if(e.TouchEvent)return t instanceof e.TouchEvent}return!1},an=()=>document.createElement("div"),_e=t=>{const e=["img","video","audio","source","link","script"].join(",");return Array.from(t?.querySelectorAll(e)||[])},cn=t=>{if(_e(t).forEach(n=>{const i=n.getAttribute("src")||n.getAttribute("href");i?.startsWith("blob:")&&t?.defaultView?.URL.revokeObjectURL(i)}),t){const n=Array.from(t.styleSheets||[]);for(const i of n){const s=(()=>{try{return Array.from(i.cssRules||[])}catch(a){return C.warn(`Error getting rules for sheet: ${i.href}`,a),[]}})();for(const a of s)if(t.defaultView&&a instanceof t.defaultView.CSSFontFaceRule){const l=a.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);l&&l.forEach(d=>{t?.defaultView?.URL.revokeObjectURL(d)})}}}};function We(t,e,n=[]){if(typeof t!="object"||t===null)return!1;for(const i of e)if(!(i in t))return!1;for(const i of n)if(i in t&&typeof t[i]!="function")return!1;return!0}function me(t){return We(t,["nodeType"],[])&&t.nodeType===Node.ELEMENT_NODE}function Be(t,e){return me(t)&&t.tagName.toLowerCase()===e.toLowerCase()}function ln(t){return We(t,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const fe=(t,e,n,i)=>{const o=t.createElement("style");return o.id=e,o.innerHTML=n,i?t.head.prepend(o):t.head.appendChild(o),()=>{Se(t,e)}},Se=(t,e)=>{if(t?.head){const n=t.getElementById(e);n&&n.remove()}},be=(t,e)=>{const n=new RegExp(`${e}\\s*=\\s*([^,\\s]+)`,"i");return t.match(n)?.[1]?.trim().toLowerCase()},ye=(t,e)=>{const n=be(t,e);if(!n)return 0;const i=Number.parseFloat(n);return Number.isFinite(i)?i:0},He=(t,e,n,i)=>{t?.contentDocument?.head&&fe(t.contentDocument,e,n,i)},un=(t,e)=>{t?.contentDocument&&Se(t.contentDocument,e)},V=(t,e,n,i)=>{if(!t)return;const o=t?.contentDocument?.getElementById(e);if(o){o.innerHTML=n;return}He(t,e,n,i)},j=t=>{if(t?.contentDocument){const n=t.contentDocument.querySelector("meta[name='viewport']");if(n){const i=n.getAttribute("content");if(i){const o=be(i,"width"),s=be(i,"height"),a=ye(i,"width"),c=ye(i,"height");return a>0&&c>0?{hasViewport:!0,widthToken:o,heightToken:s,width:a,height:c}:{hasViewport:!0,widthToken:o,heightToken:s}}}}return{hasViewport:!1}},xe=t=>t.pipe(r.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?r.of(e):r.fromEvent(e,"load").pipe(r.take(1),r.map(()=>e)))),Ye=t=>t.pipe(r.switchMap(e=>{const n=e?.contentDocument?.fonts.ready;return n?r.from(n).pipe(r.map(()=>e)):r.of(e)})),dn=t=>e=>{const n=t(e),i=new IntersectionObserver(o=>{o.forEach(s=>{s.isIntersecting?s.target.removeAttribute("tab-index"):s.target.setAttribute("tab-index","-1")})},{});return n.hookManager.register("item.onDocumentLoad",({itemId:o,destroy:s})=>{const a=n.spineItemsManager.get(o);if(!a)return;const c=a.renderer.getDocumentFrame();if(!c)return;V(c,"prose-reader-accessibility",`
1
+ (function(y,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi"],o):(y=typeof globalThis<"u"?globalThis:y||self,o(y.prose={},y.rxjs,y.shared,y.operators,y.cfi))})(this,(function(y,o,$,b,H){"use strict";const F=$.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),sn=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function an(t,e,n){if("caretPositionFromPoint"in t)return t.caretPositionFromPoint(e,n);if("caretRangeFromPoint"in t&&typeof t.caretRangeFromPoint<"u")return t.caretRangeFromPoint(e,n)}const cn=(t,e)=>{const n="createRange"in t?t:t.ownerDocument;if(!n)return;const i="body"in t?he(t.body,e):he(t,e);if(i){let s,r=0;const a=n.createRange();return Array.from(i.childNodes).some(c=>{a.selectNodeContents(c);const l=a.getClientRects(),u=ln(l,e);if(u){s=a.cloneRange();const d=an(n,Math.ceil(u.left),Math.ceil(u.top));return d&&"startContainer"in d&&d.startContainer===s.startContainer&&(r=d.startOffset),d&&"offsetNode"in d&&d.offsetNode===s.startContainer&&(r=d.offset),!0}return!1}),s?{node:s.startContainer,offset:r}:{node:i,offset:0}}},he=(t,e)=>{const n=t.getBoundingClientRect(),i=We(n,e);let s;i!=="before"&&i!=="after"&&(s=t);for(const r of t.children){const a=he(r,e);if(a)return a}return s};function We(t,{left:e,right:n}){return t.left<=e&&t.right<=e?"before":t.left<=e&&t.right>e&&t.right<=n?"partially-before":t.left<=n&&t.right>n?"partially-after":t.left>n?"after":"within"}function ln(t,e){return Array.from(t).find(n=>{const i=We(n,e);return i!=="before"&&i!=="after"})}const un=(t,e)=>{if(t.nodeType!==Node.CDATA_SECTION_NODE&&t.nodeType!==Node.DOCUMENT_TYPE_NODE){const n=t.ownerDocument?.createRange();n?.selectNodeContents(t);try{e<=(n?.endOffset||0)&&n?.setStart(t,e||0)}catch(i){F.error(i)}return n}},ge=t=>{if(t?.target&&t?.target?.ownerDocument?.defaultView){const e=t?.target?.ownerDocument?.defaultView;if(e.PointerEvent&&t instanceof e.PointerEvent)return!0}if(t?.view?.window){const e=t?.view;if(e.PointerEvent&&t instanceof e.PointerEvent)return!0}return!!sn.includes(t.type)},dn=t=>{if(ge(t))return!1;if(t?.target&&t?.target?.ownerDocument?.defaultView){const e=t?.target?.ownerDocument?.defaultView;if(e.MouseEvent)return t instanceof e.MouseEvent}if(t?.view?.window){const e=t?.view;if(e.MouseEvent)return t instanceof e.MouseEvent}return!1},pn=t=>{if(t?.target&&t?.target?.ownerDocument?.defaultView){const e=t?.target?.ownerDocument?.defaultView;if(e.TouchEvent)return t instanceof e.TouchEvent}if(t?.view?.window){const e=t?.view;if(e.TouchEvent)return t instanceof e.TouchEvent}return!1},hn=()=>document.createElement("div"),Be=t=>{const e=["img","video","audio","source","link","script"].join(",");return Array.from(t?.querySelectorAll(e)||[])},gn=t=>{if(Be(t).forEach(n=>{const i=n.getAttribute("src")||n.getAttribute("href");i?.startsWith("blob:")&&t?.defaultView?.URL.revokeObjectURL(i)}),t){const n=Array.from(t.styleSheets||[]);for(const i of n){const r=(()=>{try{return Array.from(i.cssRules||[])}catch(a){return F.warn(`Error getting rules for sheet: ${i.href}`,a),[]}})();for(const a of r)if(t.defaultView&&a instanceof t.defaultView.CSSFontFaceRule){const l=a.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);l&&l.forEach(u=>{t?.defaultView?.URL.revokeObjectURL(u)})}}}};function He(t,e,n=[]){if(typeof t!="object"||t===null)return!1;for(const i of e)if(!(i in t))return!1;for(const i of n)if(i in t&&typeof t[i]!="function")return!1;return!0}function me(t){return He(t,["nodeType"],[])&&t.nodeType===Node.ELEMENT_NODE}function xe(t,e){return me(t)&&t.tagName.toLowerCase()===e.toLowerCase()}function mn(t){return He(t,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const fe=(t,e,n,i)=>{const s=t.createElement("style");return s.id=e,s.innerHTML=n,i?t.head.prepend(s):t.head.appendChild(s),()=>{Se(t,e)}},Se=(t,e)=>{if(t?.head){const n=t.getElementById(e);n&&n.remove()}},ye=(t,e)=>{const n=new RegExp(`${e}\\s*=\\s*([^,\\s]+)`,"i");return t.match(n)?.[1]?.trim().toLowerCase()},be=(t,e)=>{const n=ye(t,e);if(!n)return 0;const i=Number.parseFloat(n);return Number.isFinite(i)?i:0},qe=(t,e,n,i)=>{t?.contentDocument?.head&&fe(t.contentDocument,e,n,i)},fn=(t,e)=>{t?.contentDocument&&Se(t.contentDocument,e)},k=(t,e,n,i)=>{if(!t)return;const s=t?.contentDocument?.getElementById(e);if(s){s.innerHTML=n;return}qe(t,e,n,i)},j=t=>{if(t?.contentDocument){const n=t.contentDocument.querySelector("meta[name='viewport']");if(n){const i=n.getAttribute("content");if(i){const s=ye(i,"width"),r=ye(i,"height"),a=be(i,"width"),c=be(i,"height");return a>0&&c>0?{hasViewport:!0,widthToken:s,heightToken:r,width:a,height:c}:{hasViewport:!0,widthToken:s,heightToken:r}}}}return{hasViewport:!1}},Ye=t=>t.pipe(o.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?o.of(e):o.fromEvent(e,"load").pipe(o.take(1),o.map(()=>e)))),Xe=t=>t.pipe(o.switchMap(e=>{const n=e?.contentDocument?.fonts.ready;return n?o.from(n).pipe(o.map(()=>e)):o.of(e)})),Sn=t=>e=>{const n=t(e),i=new IntersectionObserver(s=>{s.forEach(r=>{r.isIntersecting?r.target.removeAttribute("tab-index"):r.target.setAttribute("tab-index","-1")})},{});return n.hookManager.register("item.onDocumentLoad",({itemId:s,destroy:r})=>{const a=n.spineItemsManager.get(s);if(!a)return;const c=a.renderer.getDocumentFrame();if(!c)return;k(c,"prose-reader-accessibility",`
2
2
  :focus-visible {
3
3
 
4
4
  outline: -webkit-focus-ring-color auto 1px;
5
5
  }
6
- `);const l=c.contentDocument?.body.querySelectorAll("a");l?.forEach(d=>{i.observe(d)}),s(()=>{l?.forEach(d=>{i.unobserve(d)})})}),{...n}},pn=t=>e=>{const n=t(e);return n.context.watch("rootElement").pipe(r.takeUntil(n.context.destroy$)).subscribe(i=>{if(!i)return;const o=()=>{n.settings.values.computedPageTurnMode==="controlled"&&i.scrollTo(0,0)};i.addEventListener("scroll",o)}),n.hookManager.register("item.onDocumentLoad",({itemId:i})=>{const s=n.spineItemsManager.get(i)?.renderer.getDocumentFrame();s&&s.contentDocument?.body.setAttribute("tabindex","-1")}),n},Ie=({position:t,frameElement:e})=>{const n=e.getBoundingClientRect(),i=n.width/e.offsetWidth,o=n.height/e.offsetHeight,{left:s=0,top:a=0}=n,c=t.clientX*i+s,l=t.clientY*o+a;return{clientX:c,clientY:l}},hn=(t,e,n,i)=>{const o=e?.view?.frameElement;if(!e||!o)return t;const s=n.getSpineItemFromIframe(o),a=o,{height:c,width:l}=i.pageSize;if(!s||!(a instanceof HTMLIFrameElement))return t;if(ge(t)){const{clientX:d,clientY:u}=Ie({position:t,frameElement:a}),p=new PointerEvent(t.type,{...t,pointerId:t.pointerId,clientX:d,clientY:u});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(rn(t)){const{clientX:d,clientY:u}=Ie({position:t,frameElement:a}),p=new MouseEvent(t.type,{...t,clientX:d,clientY:u});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(sn(t)){const d=Array.from(t.touches).map(p=>{const{clientX:g,clientY:h}=Ie({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:g,clientY:h})}),u=new TouchEvent(t.type,{touches:d,changedTouches:d,targetTouches:d});return Object.defineProperty(u,"target",{value:e.target,enumerable:!0}),u}return t},gn=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],mn=t=>e=>{const n=t(e);return n.hookManager.register("item.onDocumentLoad",({destroy:i,itemId:o})=>{const s=n.spineItemsManager.get(o),a=s?.renderer.getDocumentFrame();if(!a||!s)return;const c=gn.map(l=>{const d=u=>{let p=u;if(ge(u)&&(p=new PointerEvent(u.type,u)),p!==u){const g=hn(p,u,n.spine.locator,n.viewport);n.context.value.rootElement?.dispatchEvent(g)}};return a.contentDocument?.addEventListener(l,d),()=>{a.contentDocument?.removeEventListener(l,d)}});i(()=>{c.forEach(l=>{l()})})}),n},fn=t=>{const e=new FileReader;return new Promise(n=>{e.addEventListener("load",()=>{n(e.result)},!1),e.readAsDataURL(t)})},qe=(t,e)=>Object.entries(t).reduce((n,[i,o])=>e.includes(i)?{...n,[i]:o}:n,{}),we=t=>I.map(e=>qe(e,t)),ee=t=>e=>e.pipe(we(t),I.distinctUntilChanged(T.isShallowEqual));function te(t){return new r.Observable(e=>{const n=new ResizeObserver(i=>{e.next(i)});return n.observe(t),()=>{n.disconnect()}})}const Z=t=>e=>e.pipe(I.switchMap(n=>t.pipe(I.first(),I.map(()=>n)))),Xe=t=>{let e;const n=t.subscribe(i=>{e={result:i}});return()=>(n.unsubscribe(),e?r.of(e.result):t)};function ve(){return new r.Observable(t=>{if(window.requestIdleCallback){const n=window.requestIdleCallback(()=>{t.next(),t.complete()});return()=>cancelIdleCallback(n)}const e=setTimeout(()=>{t.next(),t.complete()},1);return()=>clearTimeout(e)})}function Pe(t){return r.defer(()=>ve().pipe(I.switchMap(t)))}const Te=(t,e)=>new r.Observable(n=>{const i=new MutationObserver(o=>{n.next(o)});return i.observe(t,e),()=>i.disconnect()});function Sn(t,e){return new r.Observable(n=>{const i=new IntersectionObserver(o=>{n.next(o)},e);return i.observe(t),()=>{i.disconnect()}})}class Ge{constructor(e,n){this.settingsManager=n;const i=T.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(i),this.inputSettings=T.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new r.Subject,this.values$=r.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(I.startWith(this.outputSettings))]).pipe(I.map(([o,s])=>({...o,...s})),I.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const n=this.getCleanedParentInputSettings(e),i=this.settingsManager._prepareUpdate(n),o=T.shallowMergeIfDefined(this.inputSettings,e),s=this.computeOutputSettings(o),a=this.hasSettingsChanged(s);return{hasChanged:a||i.hasChanged,commit:()=>(this.inputSettings=o,this.outputSettings=s,!i.hasChanged&&a&&this.outputSettingsUpdateSubject.next(s),{...i.commit(),...s})}}update(e){const{commit:n}=this._prepareUpdate(e);n()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(e){return Array.isArray(e)?this.values$.pipe(ee(e)):this.values$.pipe(I.map(n=>n[e]),I.distinctUntilChanged(T.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let bn=class extends Ge{computeOutputSettings(e){return e}hasSettingsChanged(e){return!T.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:n,fontScale:i,fontWeight:o,lineHeight:s,...a}=e;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const yn=t=>e=>{const{fontScale:n,lineHeight:i,fontWeight:o,fontJustification:s}=e,a=new r.Subject,c=t(e),l=new bn({fontScale:n,lineHeight:i,fontWeight:o,fontJustification:s},c.settings),d=()=>`
6
+ `);const l=c.contentDocument?.body.querySelectorAll("a");l?.forEach(u=>{i.observe(u)}),r(()=>{l?.forEach(u=>{i.unobserve(u)})})}),{...n}},yn=t=>e=>{const n=t(e);return n.context.watch("rootElement").pipe(o.takeUntil(n.context.destroy$)).subscribe(i=>{if(!i)return;const s=()=>{n.settings.values.computedPageTurnMode==="controlled"&&i.scrollTo(0,0)};i.addEventListener("scroll",s)}),n.hookManager.register("item.onDocumentLoad",({itemId:i})=>{const r=n.spineItemsManager.get(i)?.renderer.getDocumentFrame();r&&r.contentDocument?.body.setAttribute("tabindex","-1")}),n},Ie=({position:t,frameElement:e})=>{const n=e.getBoundingClientRect(),i=n.width/e.offsetWidth,s=n.height/e.offsetHeight,{left:r=0,top:a=0}=n,c=t.clientX*i+r,l=t.clientY*s+a;return{clientX:c,clientY:l}},bn=(t,e,n,i)=>{const s=e?.view?.frameElement;if(!e||!s)return t;const r=n.getSpineItemFromIframe(s),a=s,{height:c,width:l}=i.pageSize;if(!r||!(a instanceof HTMLIFrameElement))return t;if(ge(t)){const{clientX:u,clientY:d}=Ie({position:t,frameElement:a}),p=new PointerEvent(t.type,{...t,pointerId:t.pointerId,clientX:u,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(dn(t)){const{clientX:u,clientY:d}=Ie({position:t,frameElement:a}),p=new MouseEvent(t.type,{...t,clientX:u,clientY:d});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(pn(t)){const u=Array.from(t.touches).map(p=>{const{clientX:g,clientY:h}=Ie({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:g,clientY:h})}),d=new TouchEvent(t.type,{touches:u,changedTouches:u,targetTouches:u});return Object.defineProperty(d,"target",{value:e.target,enumerable:!0}),d}return t},In=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],vn=t=>e=>{const n=t(e);return n.hookManager.register("item.onDocumentLoad",({destroy:i,itemId:s})=>{const r=n.spineItemsManager.get(s),a=r?.renderer.getDocumentFrame();if(!a||!r)return;const c=In.map(l=>{const u=d=>{let p=d;if(ge(d)&&(p=new PointerEvent(d.type,d)),p!==d){const g=bn(p,d,n.spine.locator,n.viewport);n.context.value.rootElement?.dispatchEvent(g)}};return a.contentDocument?.addEventListener(l,u),()=>{a.contentDocument?.removeEventListener(l,u)}});i(()=>{c.forEach(l=>{l()})})}),n},wn=t=>{const e=new FileReader;return new Promise(n=>{e.addEventListener("load",()=>{n(e.result)},!1),e.readAsDataURL(t)})},Ge=(t,e)=>Object.entries(t).reduce((n,[i,s])=>e.includes(i)?{...n,[i]:s}:n,{}),ve=t=>b.map(e=>Ge(e,t)),ee=t=>e=>e.pipe(ve(t),b.distinctUntilChanged($.isShallowEqual));function te(t){return new o.Observable(e=>{const n=new ResizeObserver(i=>{e.next(i)});return n.observe(t),()=>{n.disconnect()}})}const Z=t=>e=>e.pipe(b.switchMap(n=>t.pipe(b.first(),b.map(()=>n)))),Ze=t=>{let e;const n=t.subscribe(i=>{e={result:i}});return()=>(n.unsubscribe(),e?o.of(e.result):t)};function we(){return new o.Observable(t=>{if(window.requestIdleCallback){const n=window.requestIdleCallback(()=>{t.next(),t.complete()});return()=>cancelIdleCallback(n)}const e=setTimeout(()=>{t.next(),t.complete()},1);return()=>clearTimeout(e)})}function Pe(t){return o.defer(()=>we().pipe(b.switchMap(t)))}const Te=(t,e)=>new o.Observable(n=>{const i=new MutationObserver(s=>{n.next(s)});return i.observe(t,e),()=>i.disconnect()});function Pn(t,e){return new o.Observable(n=>{const i=new IntersectionObserver(s=>{n.next(s)},e);return i.observe(t),()=>{i.disconnect()}})}class Je{constructor(e,n){this.settingsManager=n;const i=$.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(i),this.inputSettings=$.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new o.Subject,this.values$=o.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(b.startWith(this.outputSettings))]).pipe(b.map(([s,r])=>({...s,...r})),b.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const n=this.getCleanedParentInputSettings(e),i=this.settingsManager._prepareUpdate(n),s=$.shallowMergeIfDefined(this.inputSettings,e),r=this.computeOutputSettings(s),a=this.hasSettingsChanged(r);return{hasChanged:a||i.hasChanged,commit:()=>(this.inputSettings=s,this.outputSettings=r,!i.hasChanged&&a&&this.outputSettingsUpdateSubject.next(r),{...i.commit(),...r})}}update(e){const{commit:n}=this._prepareUpdate(e);n()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(e){return Array.isArray(e)?this.values$.pipe(ee(e)):this.values$.pipe(b.map(n=>n[e]),b.distinctUntilChanged($.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let Tn=class extends Je{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:n,fontScale:i,fontWeight:s,lineHeight:r,...a}=e;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const $n=t=>e=>{const{fontScale:n,lineHeight:i,fontWeight:s,fontJustification:r}=e,a=new o.Subject,c=t(e),l=new Tn({fontScale:n,lineHeight:i,fontWeight:s,fontJustification:r},c.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
- `,u=g=>{c.spineItemsManager.items.forEach(h=>{if(h.renditionLayout!=="pre-paginated"){const m=h.renderer.getDocumentFrame();m&&V(m,"prose-reader-fonts",d())}}),g&&c.layout()};c.hookManager.register("item.onDocumentLoad",({itemId:g})=>{const h=c.spineItemsManager.get(g);if(h?.renditionLayout!=="pre-paginated"){const m=h?.renderer.getDocumentFrame();m&&V(m,"prose-reader-fonts",d())}});const p=g=>g.pipe(I.pairwise(),r.map(([h,m])=>m.fontScale!==h.fontScale||m.lineHeight!==h.lineHeight));return l.values$.pipe(p,I.tap(u),r.takeUntil(c.$.destroy$)).subscribe(),{...c,destroy:()=>{a.complete(),l.destroy(),c.destroy()},settings:l}},In=t=>e=>{const n=t(e),i=o=>r.fromEvent(o,"keyup").pipe(r.map(s=>{const{pageTurnDirection:a,computedPageTurnMode:c}=n.settings.values;if(c==="scrollable")return s;if(a==="horizontal"){if(s.key==="ArrowRight")return n.navigation.turnRight();if(s.key==="ArrowLeft")return n.navigation.turnLeft()}if(a==="vertical"){if(s.key==="ArrowDown")return n.navigation.turnRight();if(s.key==="ArrowUp")return n.navigation.turnLeft()}return s}));return i(document).pipe(r.takeUntil(n.$.destroy$)).subscribe(),n.spineItemsManager.items$.pipe(r.switchMap(o=>r.merge(...o.map(s=>s.watch("isLoaded").pipe(r.switchMap(()=>{const a=s.renderer.getDocumentFrame();return a instanceof HTMLIFrameElement&&a?.contentDocument?i(a.contentDocument):r.EMPTY}))))),r.takeUntil(n.$.destroy$)).subscribe(),n},wn=t=>t.spine.spineItemsManager.items$.pipe(r.switchMap(e=>r.merge(...e.map(n=>n.watch("isLoaded").pipe(r.switchMap(()=>{const i=n.renderer.getDocumentFrame();if(!i||!i?.contentDocument)return r.NEVER;const s=Array.from(i.contentDocument.querySelectorAll("a")).map(a=>r.fromEvent(a,"click"));return r.merge(...s)}))))),r.tap(e=>{e.preventDefault()}),r.share());class O extends r.Observable{constructor(e){super(n=>this.stateSubject.pipe(r.takeUntil(this._destroy$)).subscribe(n)),this._destroy$=new r.Subject,this.destroy$=this._destroy$.asObservable(),this.stateSubject=new r.BehaviorSubject(e),this.state$=this.stateSubject.asObservable()}next(e){this.stateSubject.next(e)}mergeCompare(e){const n={...this.value,...e};T.isShallowEqual(this.value,n)||this.stateSubject.next(n)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(ee(e)):this.stateSubject.pipe(r.map(n=>n[e]),r.distinctUntilChanged(T.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this._destroy$.complete()}}const pe=class pe extends O{constructor(e){super({state:"idle",error:void 0,documentContainer:void 0}),this.triggerSubject=new r.Subject,this.context=e.context,this.settings=e.settings,this.hookManager=e.hookManager,this.item=e.item,this.containerElement=e.containerElement,this.resourcesHandler=e.resourcesHandler,this.viewport=e.viewport;const n=this.triggerSubject.pipe(r.filter(o=>o.type==="unload")),i=this.triggerSubject.pipe(r.filter(o=>o.type==="load"));this.loaded$=i.pipe(r.mergeMap(()=>this.value.state==="loaded"||this.value.state==="loading"?r.EMPTY:(this.mergeCompare({state:"loading",error:void 0}),this.onCreateDocument().pipe(r.first()).pipe(r.mergeMap(a=>(this.hookManager.execute("item.onDocumentCreated",this.item.id,{itemId:this.item.id,documentContainer:a}),this.onLoadDocument().pipe(r.endWith(null),r.first()).pipe(Z(this.context.bridgeEvent.viewportFree$),r.switchMap(()=>{const l=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:a}).filter(d=>d instanceof r.Observable);return r.combineLatest([r.of(null),...l]).pipe(r.first())})))),r.map(()=>{this.mergeCompare({state:"loaded",error:void 0})}),r.takeUntil(n)))),r.share()),this.unloaded$=n.pipe(r.mergeMap(()=>this.value.state==="unloading"||this.value.state==="idle"?r.EMPTY:(this.mergeCompare({state:"unloading",error:void 0}),this.context.bridgeEvent.viewportFree$.pipe(r.first(),r.switchMap(()=>(this.hookManager.destroy("item.onDocumentLoad",this.item.id),r.defer(()=>this.onUnload()).pipe(r.endWith(null),r.first(),r.catchError(a=>(C.error("Error unloading document",a),r.of(null)))))),r.map(()=>{this.mergeCompare({state:"idle",error:void 0})}),r.takeUntil(i)))),r.share()),r.merge(this.loaded$,this.unloaded$).pipe(r.catchError(o=>(this.mergeCompare({state:"error",error:o}),r.EMPTY)),r.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){e.classList.add(pe.DOCUMENT_CONTAINER_CLASS_NAME),this.mergeCompare({documentContainer:e})}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this.documentContainer?.remove(),this.mergeCompare({documentContainer:void 0})}get isLoaded$(){return this.state$.pipe(r.map(e=>e.state==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new r.Subject;return r.defer(()=>this.onRenderHeadless({release:e})).pipe(r.endWith(void 0),r.first(),r.map(n=>{if(n)return{doc:n,release:()=>{e.next(void 0)}}}),r.finalize(()=>{e.complete()}),r.catchError(n=>(C.error(n),r.of(void 0))))}layout(e){return this.onLayout(e)}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this.value.documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){const e=this.item.renditionLayout;if(e)return e;const n=this.getDocumentFrame();if(n){const{hasViewport:i}=j(n);if(i)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};pe.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let J=pe;const vn=t=>new URL(t.href);class ne{constructor(e,n){this.item=e,this.settings=n}async getResource(){return await r.lastValueFrom(this.settings.values.getResource?.(this.item)??r.of(void 0))??vn(this.item)}async fetchResource(){const e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}}const Ze=(t,e)=>{const n=t.startsWith("file://"),i=n?t.replace("file://","http://"):t,o=new URL(e,i).toString();return n?o.replace("http://","file://"):o},Pn=async(t,e,n,i,o)=>{if(!t||!t.defaultView)return;const s=e.sheet;if(s)try{const a=Array.from(s.cssRules||[]);for(let c=0;c<a.length;c++){const l=a[c];if(t.defaultView&&l instanceof t.defaultView.CSSFontFaceRule){const d=l.style.getPropertyValue("src");if(d.match(/url\(['"]?([^'"]+)['"]?\)/g)){const p=d.split(",").map(m=>m.trim()),g=await Promise.all(p.map(async m=>{if(m.startsWith("local("))return m;const f=m.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return m;const S=f[1]??"",y=i.manifest?.items.find(({href:w})=>`${Ze(n,S).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(y){const w=new ne(y,o);try{const v=await w.getResource();if(v instanceof Response){const $=await v.blob(),P=t.defaultView?.URL.createObjectURL($);return m.replace(f[0],`url("${P}")`)}}catch(v){console.error("Error loading font:",v)}}return m})),h=l.cssText.replace(/src:\s*[^;]+;/,`src: ${g.join(", ")};`);s.deleteRule(c),s.insertRule(h,c)}}}}catch(a){console.error("Could not access stylesheet rules:",a)}},Tn=(t,e,n,i,o)=>{const s=e.getAttribute("src")||e.getAttribute("href");if(!s)return r.of(null);const a=i.manifest?.items.find(({href:l})=>`${Ze(n,s).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!a)return r.of(null);const c=new ne(a,o);return r.from(c.getResource()).pipe(r.mergeMap(l=>l instanceof Response?r.from(l.blob()):r.of(void 0)),r.mergeMap(l=>{if(!l)return r.of(null);const d=t?.defaultView?.URL.createObjectURL(l)??"";if(e.hasAttribute("src"))e.setAttribute("src",d);else if(e.hasAttribute("href")&&(e.setAttribute("href",d),t?.defaultView&&e instanceof t.defaultView.HTMLLinkElement))return new r.Observable(u=>{e.onload=async()=>{try{e.sheet&&await Pn(t,e,n,i,o),u.next(),u.complete()}catch(p){u.error(p)}},e.onerror=u.error});return r.of(null)}))},$n=({settings:t,item:e,context:n})=>i=>i.pipe(r.switchMap(o=>{const s=_e(o.contentDocument),a=T.getParentPath(e.href),c=s.map(l=>Tn(o.contentDocument,l,a,n,t));return c.length===0?r.of(o):r.combineLatest(c).pipe(r.map(()=>o))})),Mn=t=>{cn(t?.contentDocument)},Fn=async(t,e)=>{if(typeof t=="string")return new Blob([t],{type:"text/html"});const n=T.parseContentType(t.headers.get("Content-Type")||"")||T.detectMimeTypeFromName(e.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(i=>i===n)){const i=await t.blob(),o=URL.createObjectURL(i),s=await createImageBitmap(i),{width:a,height:c}={width:s.width,height:s.height};s.close();const l=Math.random().toString(36).substring(2,15).toString();return new Blob([`
14
+ `,d=g=>{c.spineItemsManager.items.forEach(h=>{if(h.renditionLayout!=="pre-paginated"){const m=h.renderer.getDocumentFrame();m&&k(m,"prose-reader-fonts",u())}}),g&&c.layout()};c.hookManager.register("item.onDocumentLoad",({itemId:g})=>{const h=c.spineItemsManager.get(g);if(h?.renditionLayout!=="pre-paginated"){const m=h?.renderer.getDocumentFrame();m&&k(m,"prose-reader-fonts",u())}});const p=g=>g.pipe(b.pairwise(),o.map(([h,m])=>m.fontScale!==h.fontScale||m.lineHeight!==h.lineHeight));return l.values$.pipe(p,b.tap(d),o.takeUntil(c.$.destroy$)).subscribe(),{...c,destroy:()=>{a.complete(),l.destroy(),c.destroy()},settings:l}},Mn=t=>e=>{const n=t(e),i=s=>o.fromEvent(s,"keyup").pipe(o.map(r=>{const{pageTurnDirection:a,computedPageTurnMode:c}=n.settings.values;if(c==="scrollable")return r;if(a==="horizontal"){if(r.key==="ArrowRight")return n.navigation.turnRight();if(r.key==="ArrowLeft")return n.navigation.turnLeft()}if(a==="vertical"){if(r.key==="ArrowDown")return n.navigation.turnRight();if(r.key==="ArrowUp")return n.navigation.turnLeft()}return r}));return i(document).pipe(o.takeUntil(n.$.destroy$)).subscribe(),n.spineItemsManager.items$.pipe(o.switchMap(s=>o.merge(...s.map(r=>r.watch("isLoaded").pipe(o.switchMap(()=>{const a=r.renderer.getDocumentFrame();return a instanceof HTMLIFrameElement&&a?.contentDocument?i(a.contentDocument):o.EMPTY}))))),o.takeUntil(n.$.destroy$)).subscribe(),n},Fn=t=>t.spine.spineItemsManager.items$.pipe(o.switchMap(e=>o.merge(...e.map(n=>n.watch("isLoaded").pipe(o.switchMap(()=>{const i=n.renderer.getDocumentFrame();if(!i||!i?.contentDocument)return o.NEVER;const r=Array.from(i.contentDocument.querySelectorAll("a")).map(a=>o.fromEvent(a,"click"));return o.merge(...r)}))))),o.tap(e=>{e.preventDefault()}),o.share());class D extends o.Observable{constructor(e){super(n=>this.stateSubject.pipe(o.takeUntil(this._destroy$)).subscribe(n)),this._destroy$=new o.Subject,this.destroy$=this._destroy$.asObservable(),this.stateSubject=new o.BehaviorSubject(e),this.state$=this.stateSubject.asObservable()}next(e){this.stateSubject.next(e)}mergeCompare(e){const n={...this.value,...e};$.isShallowEqual(this.value,n)||this.stateSubject.next(n)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(ee(e)):this.stateSubject.pipe(o.map(n=>n[e]),o.distinctUntilChanged($.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this._destroy$.complete()}}const pe=class pe extends D{constructor(e){super({state:"idle",error:void 0,documentContainer:void 0}),this.triggerSubject=new o.Subject,this.context=e.context,this.settings=e.settings,this.hookManager=e.hookManager,this.item=e.item,this.containerElement=e.containerElement,this.resourcesHandler=e.resourcesHandler,this.viewport=e.viewport;const n=this.triggerSubject.pipe(o.filter(s=>s.type==="unload")),i=this.triggerSubject.pipe(o.filter(s=>s.type==="load"));this.loaded$=i.pipe(o.mergeMap(()=>this.value.state==="loaded"||this.value.state==="loading"?o.EMPTY:(this.mergeCompare({state:"loading",error:void 0}),this.onCreateDocument().pipe(o.first()).pipe(o.mergeMap(a=>(this.hookManager.execute("item.onDocumentCreated",this.item.id,{itemId:this.item.id,documentContainer:a}),this.onLoadDocument().pipe(o.endWith(null),o.first()).pipe(Z(this.context.bridgeEvent.viewportFree$),o.switchMap(()=>{const l=this.hookManager.execute("item.onDocumentLoad",this.item.id,{itemId:this.item.id,documentContainer:a}).filter(u=>u instanceof o.Observable);return o.combineLatest([o.of(null),...l]).pipe(o.first())})))),o.map(()=>{this.mergeCompare({state:"loaded",error:void 0})}),o.takeUntil(n)))),o.share()),this.unloaded$=n.pipe(o.mergeMap(()=>this.value.state==="unloading"||this.value.state==="idle"?o.EMPTY:(this.mergeCompare({state:"unloading",error:void 0}),this.context.bridgeEvent.viewportFree$.pipe(o.first(),o.switchMap(()=>(this.hookManager.destroy("item.onDocumentLoad",this.item.id),o.defer(()=>this.onUnload()).pipe(o.endWith(null),o.first(),o.catchError(a=>(F.error("Error unloading document",a),o.of(null)))))),o.map(()=>{this.mergeCompare({state:"idle",error:void 0})}),o.takeUntil(i)))),o.share()),o.merge(this.loaded$,this.unloaded$).pipe(o.catchError(s=>(this.mergeCompare({state:"error",error:s}),o.EMPTY)),o.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){e.classList.add(pe.DOCUMENT_CONTAINER_CLASS_NAME),this.mergeCompare({documentContainer:e})}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this.documentContainer?.remove(),this.mergeCompare({documentContainer:void 0})}get isLoaded$(){return this.state$.pipe(o.map(e=>e.state==="loaded"))}load(){this.triggerSubject.next({type:"load"})}unload(){this.triggerSubject.next({type:"unload"})}renderHeadless(){const e=new o.Subject;return o.defer(()=>this.onRenderHeadless({release:e})).pipe(o.endWith(void 0),o.first(),o.map(n=>{if(n)return{doc:n,release:()=>{e.next(void 0)}}}),o.finalize(()=>{e.complete()}),o.catchError(n=>(F.error(n),o.of(void 0))))}layout(e){return this.onLayout(e)}destroy(){this.unload(),this.stateSubject.complete(),super.destroy()}get documentContainer(){return this.value.documentContainer}get writingMode(){}get readingDirection(){}get renditionLayout(){const e=this.item.renditionLayout;if(e)return e;const n=this.getDocumentFrame();if(n){const{hasViewport:i}=j(n);if(i)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};pe.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let J=pe;const Cn=t=>new URL(t.href);class ne{constructor(e,n){this.item=e,this.settings=n}async getResource(){return await o.lastValueFrom(this.settings.values.getResource?.(this.item)??o.of(void 0))??Cn(this.item)}async fetchResource(){const e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}}const Ke=(t,e)=>{const n=t.startsWith("file://"),i=n?t.replace("file://","http://"):t,s=new URL(e,i).toString();return n?s.replace("http://","file://"):s},En=async(t,e,n,i,s)=>{if(!t||!t.defaultView)return;const r=e.sheet;if(r)try{const a=Array.from(r.cssRules||[]);for(let c=0;c<a.length;c++){const l=a[c];if(t.defaultView&&l instanceof t.defaultView.CSSFontFaceRule){const u=l.style.getPropertyValue("src");if(u.match(/url\(['"]?([^'"]+)['"]?\)/g)){const p=u.split(",").map(m=>m.trim()),g=await Promise.all(p.map(async m=>{if(m.startsWith("local("))return m;const f=m.match(/url\(['"]?([^'"]+)['"]?\)/);if(!f)return m;const S=f[1]??"",w=i.manifest?.items.find(({href:T})=>`${Ke(n,S).toLowerCase()}`.endsWith(`${T.toLowerCase()}`));if(w){const T=new ne(w,s);try{const I=await T.getResource();if(I instanceof Response){const v=await I.blob(),P=t.defaultView?.URL.createObjectURL(v);return m.replace(f[0],`url("${P}")`)}}catch(I){console.error("Error loading font:",I)}}return m})),h=l.cssText.replace(/src:\s*[^;]+;/,`src: ${g.join(", ")};`);r.deleteRule(c),r.insertRule(h,c)}}}}catch(a){console.error("Could not access stylesheet rules:",a)}},Ln=(t,e,n,i,s)=>{const r=e.getAttribute("src")||e.getAttribute("href");if(!r)return o.of(null);const a=i.manifest?.items.find(({href:l})=>`${Ke(n,r).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!a)return o.of(null);const c=new ne(a,s);return o.from(c.getResource()).pipe(o.mergeMap(l=>l instanceof Response?o.from(l.blob()):o.of(void 0)),o.mergeMap(l=>{if(!l)return o.of(null);const u=t?.defaultView?.URL.createObjectURL(l)??"";if(e.hasAttribute("src"))e.setAttribute("src",u);else if(e.hasAttribute("href")&&(e.setAttribute("href",u),t?.defaultView&&e instanceof t.defaultView.HTMLLinkElement))return new o.Observable(d=>{e.onload=async()=>{try{e.sheet&&await En(t,e,n,i,s),d.next(),d.complete()}catch(p){d.error(p)}},e.onerror=d.error});return o.of(null)}))},Nn=({settings:t,item:e,context:n})=>i=>i.pipe(o.switchMap(s=>{const r=Be(s.contentDocument),a=$.getParentPath(e.href),c=r.map(l=>Ln(s.contentDocument,l,a,n,t));return c.length===0?o.of(s):o.combineLatest(c).pipe(o.map(()=>s))})),An=t=>{gn(t?.contentDocument)},Rn=async(t,e)=>{if(typeof t=="string")return new Blob([t],{type:"text/html"});const n=$.parseContentType(t.headers.get("Content-Type")||"")||$.detectMimeTypeFromName(e.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(i=>i===n)){const i=await t.blob(),s=URL.createObjectURL(i),r=await createImageBitmap(i),{width:a,height:c}={width:r.width,height:r.height};r.close();const l=Math.random().toString(36).substring(2,15).toString();return new Blob([`
15
15
  <html>
16
16
  <head>
17
17
  ${e.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${a}, height=${c}">`:""}
@@ -19,7 +19,7 @@
19
19
  <body style="margin: 0px;" tab-index="-1;">
20
20
  <img
21
21
  id="${l}"
22
- src="${o}"
22
+ src="${s}"
23
23
  style="max-width:100%;height:100%;object-fit:contain;display:block;"
24
24
  >
25
25
  <script>
@@ -28,7 +28,7 @@
28
28
  imageElement.addEventListener(
29
29
  "load",
30
30
  () => {
31
- URL.revokeObjectURL("${o}")
31
+ URL.revokeObjectURL("${s}")
32
32
  },
33
33
  { once: true },
34
34
  )
@@ -52,7 +52,7 @@
52
52
  <pre>${i}</pre>
53
53
  </body>
54
54
  </html>
55
- `],{type:"text/html"})}return await t.blob()},Cn=[".txt",".jpg",".jpeg",".png",".webp"],Ln=["text/plain","image/jpg","image/jpeg","image/png","image/webp"],$e=t=>{const e=t?.getAttribute("src");e?.startsWith("blob:")&&URL.revokeObjectURL(e)},En=({item:t,resourcesHandler:e})=>{const n=(i,o)=>{$e(i);const s=URL.createObjectURL(o);i.setAttribute("src",s)};return i=>i.pipe(r.switchMap(o=>r.from(e.getResource()).pipe(r.switchMap(s=>{const a=Cn.some(l=>t.href.endsWith(l))||t.mediaType&&Ln.includes(t.mediaType);return s instanceof URL&&t.href.startsWith(window.location.origin)&&!a?($e(o),o?.setAttribute("src",s.href),r.of(o)):(s instanceof URL?r.from(e.fetchResource()):r.of(s)).pipe(r.switchMap(l=>{if(!(l instanceof Response))throw new Error("Invalid resource");return Fn(l,t)}),r.tap(l=>{n(o,l)}),r.map(()=>o),r.catchError(l=>(C.error(`Error while trying to fetch or load resource for item ${t.id}`,s),C.error(l),r.of(o))))}))))},Nn=()=>{const t=document.createElement("iframe");return t.frameBorder="no",t.tabIndex=0,t.setAttribute("sandbox",`
55
+ `],{type:"text/html"})}return await t.blob()},Dn=[".txt",".jpg",".jpeg",".png",".webp"],On=["text/plain","image/jpg","image/jpeg","image/png","image/webp"],$e=t=>{const e=t?.getAttribute("src");e?.startsWith("blob:")&&URL.revokeObjectURL(e)},Vn=({item:t,resourcesHandler:e})=>{const n=(i,s)=>{$e(i);const r=URL.createObjectURL(s);i.setAttribute("src",r)};return i=>i.pipe(o.switchMap(s=>o.from(e.getResource()).pipe(o.switchMap(r=>{const a=Dn.some(l=>t.href.endsWith(l))||t.mediaType&&On.includes(t.mediaType);return r instanceof URL&&t.href.startsWith(window.location.origin)&&!a?($e(s),s?.setAttribute("src",r.href),o.of(s)):(r instanceof URL?o.from(e.fetchResource()):o.of(r)).pipe(o.switchMap(l=>{if(!(l instanceof Response))throw new Error("Invalid resource");return Rn(l,t)}),o.tap(l=>{n(s,l)}),o.map(()=>s),o.catchError(l=>(F.error(`Error while trying to fetch or load resource for item ${t.id}`,r),F.error(l),o.of(s))))}))))},kn=()=>{const t=document.createElement("iframe");return t.frameBorder="no",t.tabIndex=0,t.setAttribute("sandbox",`
56
56
  allow-same-origin
57
57
  allow-scripts
58
58
  allow-top-navigation-to-custom-protocols
@@ -61,7 +61,7 @@
61
61
  background-color: transparent;
62
62
  border: 0px none transparent;
63
63
  padding: 0px;
64
- `,t.setAttribute("role","main"),t},Rn="body{margin:0}html,body{height:100%;width:100%}html[data-prose-reader-html-renderer-has-viewport-dimensions=false] body{display:flex}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=left] body{justify-content:flex-end}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=right] body{justify-content:flex-start}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=none] body{justify-content:center}:not(html.prose-reader-html-renderer-touch-enabled),:not(html.prose-reader-html-renderer-touch-enabled) body{touch-action:none}img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-khtml-user-drag:none;-moz-user-drag:none;-o-user-drag:none;display:flex}html[data-prose-reader-html-renderer-has-viewport-dimensions=false] img{max-width:100%;height:100%;object-fit:contain}",Je=({pageHeight:t,pageWidth:e,frameElement:n})=>{const i=j(n);let o=i.width,s=i.height;!o&&i.widthToken==="device-width"&&(o=e),!s&&i.heightToken==="device-height"&&(s=t),!s&&(o||i.widthToken==="device-width")&&(s=t),!o&&(s||i.heightToken==="device-height")&&(o=e);const a=i.hasViewport&&o&&s?{...i,width:o,height:s}:i;if(n?.contentDocument&&n.contentWindow&&a){const c=e/(a.width??1);return{computedScale:Math.min(c,t/(a.height??1)),computedWidthScale:c,viewportDimensions:a}}},Ke=new WeakMap,k=(t,e,n)=>{t.style.getPropertyValue(e)!==n&&t.style.setProperty(e,n)},G=(t,e)=>{t.style.getPropertyValue(e)!==""&&t.style.removeProperty(e)},Qe=(t,e)=>{const n=`${e.width}px`,i=`${e.height}px`;t.style.width!==n&&(t.style.width=n),t.style.height!==i&&(t.style.height=i)},An=(t,e,n)=>{const i=t.contentDocument?.documentElement;i&&i.getAttribute(e)!==n&&i.setAttribute(e,n)},On=({hasViewportDimensions:t,viewportWidth:e,viewportHeight:n,computedScale:i,spreadPosition:o,blankPagePosition:s,isRTL:a,pageWidth:c,pageHeight:l})=>[t?"1":"0",e??"",n??"",i,o,s,a?"1":"0",c,l].join("|"),Dn=({frameElement:t,viewportDimensions:e,computedScale:n,spreadPosition:i,blankPagePosition:o,isRTL:s,pageWidth:a})=>{if(e){k(t,"position","absolute"),k(t,"top","50%"),i==="left"?(k(t,"right","0"),G(t,"left")):o==="before"&&s?(k(t,"right","50%"),G(t,"left")):i==="right"?(k(t,"left","0"),G(t,"right")):(k(t,"left",o==="before"?s?"25%":"75%":o==="after"?s?"75%":"25%":"50%"),G(t,"right"));const c=i!=="none"?"0":"-50%",l=i==="right"&&o!=="before"?"left":i==="left"||o==="before"&&s?"right":"center";k(t,"transform",`translate(${c}, -50%) scale(${n})`),k(t,"transform-origin",`${l} center`);return}o==="before"?s?k(t,"margin-right",`${a}px`):k(t,"margin-left",`${a}px`):(G(t,"margin-left"),G(t,"margin-right"))},Vn=({minPageSpread:t,blankPagePosition:e,spreadPosition:n,pageHeight:i,pageWidth:o,frameElement:s,isRTL:a})=>{const c=t*o;if(s?.contentDocument&&s?.contentWindow){const{viewportDimensions:l,computedScale:d=1}=Je({frameElement:s,pageHeight:i,pageWidth:o})??{},u=!!l,p=o,g=i,h=On({hasViewportDimensions:u,viewportWidth:l?.width,viewportHeight:l?.height,computedScale:d,spreadPosition:n,blankPagePosition:e,isRTL:a,pageWidth:o,pageHeight:i});return Ke.get(s)===h?{width:c,height:g}:(Ke.set(s,h),An(s,"data-prose-reader-html-renderer-has-viewport-dimensions",u.toString()),l?Qe(s,{width:l.width??1,height:l.height??1}):Qe(s,{width:p,height:g}),Dn({frameElement:s,viewportDimensions:l,computedScale:d,spreadPosition:n,blankPagePosition:e,isRTL:a,pageWidth:o}),{width:c,height:g})}return{width:c,height:i}},kn=()=>`
64
+ `,t.setAttribute("role","main"),t},Un="body{margin:0}html,body{height:100%;width:100%}html[data-prose-reader-html-renderer-has-viewport-dimensions=false] body{display:flex}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=left] body{justify-content:flex-end}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=right] body{justify-content:flex-start}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=none] body{justify-content:center}:not(html.prose-reader-html-renderer-touch-enabled),:not(html.prose-reader-html-renderer-touch-enabled) body{touch-action:none}img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-khtml-user-drag:none;-moz-user-drag:none;-o-user-drag:none;display:flex}html[data-prose-reader-html-renderer-has-viewport-dimensions=false] img{max-width:100%;height:100%;object-fit:contain}",Qe=({pageHeight:t,pageWidth:e,frameElement:n})=>{const i=j(n);let s=i.width,r=i.height;!s&&i.widthToken==="device-width"&&(s=e),!r&&i.heightToken==="device-height"&&(r=t),!r&&(s||i.widthToken==="device-width")&&(r=t),!s&&(r||i.heightToken==="device-height")&&(s=e);const a=i.hasViewport&&s&&r?{...i,width:s,height:r}:i;if(n?.contentDocument&&n.contentWindow&&a){const c=e/(a.width??1);return{computedScale:Math.min(c,t/(a.height??1)),computedWidthScale:c,viewportDimensions:a}}},je=new WeakMap,U=(t,e,n)=>{t.style.getPropertyValue(e)!==n&&t.style.setProperty(e,n)},G=(t,e)=>{t.style.getPropertyValue(e)!==""&&t.style.removeProperty(e)},et=(t,e)=>{const n=`${e.width}px`,i=`${e.height}px`;t.style.width!==n&&(t.style.width=n),t.style.height!==i&&(t.style.height=i)},_n=(t,e,n)=>{const i=t.contentDocument?.documentElement;i&&i.getAttribute(e)!==n&&i.setAttribute(e,n)},zn=({hasViewportDimensions:t,viewportWidth:e,viewportHeight:n,computedScale:i,spreadPosition:s,blankPagePosition:r,isRTL:a,pageWidth:c,pageHeight:l})=>[t?"1":"0",e??"",n??"",i,s,r,a?"1":"0",c,l].join("|"),Wn=({frameElement:t,viewportDimensions:e,computedScale:n,spreadPosition:i,blankPagePosition:s,isRTL:r,pageWidth:a})=>{if(e){U(t,"position","absolute"),U(t,"top","50%"),i==="left"?(U(t,"right","0"),G(t,"left")):s==="before"&&r?(U(t,"right","50%"),G(t,"left")):i==="right"?(U(t,"left","0"),G(t,"right")):(U(t,"left",s==="before"?r?"25%":"75%":s==="after"?r?"75%":"25%":"50%"),G(t,"right"));const c=i!=="none"?"0":"-50%",l=i==="right"&&s!=="before"?"left":i==="left"||s==="before"&&r?"right":"center";U(t,"transform",`translate(${c}, -50%) scale(${n})`),U(t,"transform-origin",`${l} center`);return}s==="before"?r?U(t,"margin-right",`${a}px`):U(t,"margin-left",`${a}px`):(G(t,"margin-left"),G(t,"margin-right"))},Bn=({minPageSpread:t,blankPagePosition:e,spreadPosition:n,pageHeight:i,pageWidth:s,frameElement:r,isRTL:a})=>{const c=t*s;if(r?.contentDocument&&r?.contentWindow){const{viewportDimensions:l,computedScale:u=1}=Qe({frameElement:r,pageHeight:i,pageWidth:s})??{},d=!!l,p=s,g=i,h=zn({hasViewportDimensions:d,viewportWidth:l?.width,viewportHeight:l?.height,computedScale:u,spreadPosition:n,blankPagePosition:e,isRTL:a,pageWidth:s,pageHeight:i});return je.get(r)===h?{width:c,height:g}:(je.set(r,h),_n(r,"data-prose-reader-html-renderer-has-viewport-dimensions",d.toString()),l?et(r,{width:l.width??1,height:l.height??1}):et(r,{width:p,height:g}),Wn({frameElement:r,viewportDimensions:l,computedScale:u,spreadPosition:n,blankPagePosition:e,isRTL:a,pageWidth:s}),{width:c,height:g})}return{width:c,height:i}},Hn=()=>`
65
65
  body {
66
66
  margin: 0;
67
67
  }
@@ -78,7 +78,7 @@
78
78
  html, body {
79
79
  touch-action: none;
80
80
  }
81
- `,Un=({isScrollable:t,enableTouch:e})=>`
81
+ `,xn=({isScrollable:t,enableTouch:e})=>`
82
82
 
83
83
  html, body {
84
84
  width: 100%;
@@ -100,7 +100,7 @@
100
100
  display: block;
101
101
  }
102
102
  `:""}
103
- `,zn=({width:t,columnHeight:e,columnWidth:n})=>`
103
+ `,qn=({width:t,columnHeight:e,columnWidth:n})=>`
104
104
  parsererror {
105
105
  display: none !important;
106
106
  }
@@ -164,14 +164,14 @@
164
164
  td {
165
165
  max-width: ${n}px;
166
166
  }
167
- `,_n=({isUsingVerticalWriting:t,minimumWidth:e,pageHeight:n,pageWidth:i})=>{let a=i-0;const c=n-0;let l=i-0;return t&&(l=e-0,a=c),{columnHeight:c,columnWidth:a,width:l}},ie=(t,e)=>{t.style.width=`${e.width}px`,t.style.height=`${e.height}px`},Wn=({pageHeight:t,pageWidth:e,frameElement:n,manifest:i,minPageSpread:o,isRTL:s,blankPagePosition:a,isImageType:c,enableTouch:l,isUsingVerticalWriting:d})=>{const u=o*e,p=i?.renditionLayout==="reflowable"&&i?.renditionFlow==="scrolled-continuous",g=p?Math.min(400,t):t;n?.style.setProperty("width",`${e}px`),p?n?.style.removeProperty("height"):n?.style.setProperty("height",`${g}px`);const{viewportDimensions:h,computedScale:m=1}=Je({frameElement:n,pageHeight:g,pageWidth:e})??{},f=i?.renditionLayout==="pre-paginated";if(n?.contentDocument&&n?.contentWindow&&n.contentDocument.body){let S=e,y=g;if(h?.hasViewport)V(n,"prose-reader-html-renderer-framce-css",kn()),ie(n,{width:h.width??1,height:h.height??1}),n?.style.setProperty("position","absolute"),n?.style.setProperty("top","50%"),n?.style.setProperty("left",a==="before"?s?"25%":"75%":a==="after"?s?"75%":"25%":"50%"),n?.style.setProperty("transform",`translate(-50%, -50%) scale(${m})`),n?.style.setProperty("transform-origin","center center");else{const v=c?Un({isScrollable:i?.renditionFlow==="scrolled-continuous",enableTouch:l}):zn(_n({isUsingVerticalWriting:d,minimumWidth:u,pageHeight:g,pageWidth:e}));if(V(n,"prose-reader-css",v,!0),d)y=Math.ceil(n.contentDocument.documentElement.scrollHeight/g)*g,ie(n,{width:u,height:y});else if(i?.renditionFlow==="scrolled-continuous")y=n.contentDocument.body.scrollHeight,ie(n,{width:u,height:y});else{const $=Math.ceil(n.contentDocument.documentElement.scrollWidth/e);f?S=e:S=$*e,ie(n,{width:S,height:y})}}return S%u===0?n?.style.setProperty("margin-left","0px"):(S=S+e,s&&!d&&n?.style.setProperty("margin-left",`${e}px`)),{width:S,height:y}}};class Bn extends J{constructor(){super(...arguments),this.isPrePaginated=()=>this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&this.context.manifest?.renditionLayout==="pre-paginated",this.isImageType=()=>!!(this.item.mediaType??T.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=Nn();return this.setDocumentContainer(e),r.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return r.of(e).pipe(En({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),Z(this.context.bridgeEvent.viewportFree$),r.tap(n=>{this.prepareFrameForAttach(n),this.attach()}),xe,r.tap(n=>{this.isPrePaginated()?V(n,"prose-reader-css",Rn):this.isImageType()}),$n({context:this.context,item:this.item,settings:this.settings}),Ye,r.tap(n=>{this.revealFrameAfterReady(n)}))}onUnload(){const e=this.getFrameElement();return Mn(e),$e(e),this.detach(),r.EMPTY}onLayout({minPageSpread:e,blankPagePosition:n,spreadPosition:i}){const{width:o,height:s}=this.viewport.pageSize,a=this.getFrameElement();if(!a)return r.of(void 0);const c=this.settings.values.computedPageTurnMode==="scrollable";if(a.contentDocument?.documentElement&&(a.contentDocument?.documentElement.setAttribute("data-prose-reader-html-renderer-spread-position",i),c?a.contentDocument?.documentElement.classList.add("prose-reader-html-renderer-touch-enabled"):a.contentDocument?.documentElement.classList.remove("prose-reader-html-renderer-touch-enabled")),this.isPrePaginated()){const p=Vn({blankPagePosition:n,frameElement:a,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:s,pageWidth:o,spreadPosition:i});return r.of(p)}const l=!!this.writingMode?.startsWith("vertical"),d=this.isImageType(),u=Wn({pageHeight:s,pageWidth:o,frameElement:a,manifest:this.context.manifest,blankPagePosition:n,isUsingVerticalWriting:l,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:d,enableTouch:this.settings.values.computedPageTurnMode==="scrollable"});return r.of(u)}onRenderHeadless(){return r.from(this.resourcesHandler.fetchResource()).pipe(r.switchMap(e=>{if(e instanceof Response){const n=e.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(n))return r.from(e.text()).pipe(r.map(o=>new DOMParser().parseFromString(o,n)))}return r.of(void 0)}))}getFrameElement(){const e=this.documentContainer;if(e instanceof HTMLIFrameElement)return e}prepareFrameForAttach(e){e.style.setProperty("visibility","hidden"),e.style.setProperty("pointer-events","none"),e.style.setProperty("contain","layout paint size"),e.style.setProperty("display","block")}revealFrameAfterReady(e){e.style.removeProperty("visibility"),e.style.removeProperty("pointer-events"),e.style.removeProperty("contain")}getComputedStyleAfterLoad(){const e=this.getFrameElement(),n=e?.contentDocument?.body;if(n)return e?.contentWindow?.getComputedStyle(n)}get writingMode(){if(!this.isImageType())return this.getComputedStyleAfterLoad()?.writingMode}get readingDirection(){if(this.writingMode==="vertical-rl")return"rtl";switch(this.getComputedStyleAfterLoad()?.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const je=t=>e=>{const n=t({...e,getRenderer(o){return e.getRenderer?.(o)??(a=>new Bn(a))}}),i=wn(n);return i.pipe(r.takeUntil(n.$.destroy$)).subscribe(),{...n,links$:i}};function D(t){return t!=null}class oe{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 L{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class re{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class et extends oe{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class se extends oe{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class tt extends oe{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class Me{constructor(e){this.x=e.x,this.y=e.y}}class M extends Me{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new M(e)}}class U extends Me{constructor(){super(...arguments),this.__symbol="UnboundSpinePosition"}static from(e){return new U(e)}}const Hn=(t,e)=>{const n=e.getBoundingClientRect(),{x:i,y:o}=t,{left:s,top:a}=n,c=n.width/e.offsetWidth,l=n.height/e.offsetHeight,d=i-s,u=o-a;return{x:d/c,y:u/l}},xn=(t,e)=>new U(Hn(t,e)),Yn=t=>({getSpinePositionFromClientPosition:e=>t.spine.element?xn(e,t.spine.element):void 0}),qn=t=>{let e;const n=t.context.watch("rootElement").pipe(I.switchMap(l=>l?new r.Observable(()=>(e=l.ownerDocument.createElement("div"),e.style.cssText=`
167
+ `,Yn=({isUsingVerticalWriting:t,minimumWidth:e,pageHeight:n,pageWidth:i})=>{let a=i-0;const c=n-0;let l=i-0;return t&&(l=e-0,a=c),{columnHeight:c,columnWidth:a,width:l}},ie=(t,e)=>{t.style.width=`${e.width}px`,t.style.height=`${e.height}px`},Xn=({pageHeight:t,pageWidth:e,frameElement:n,manifest:i,minPageSpread:s,isRTL:r,blankPagePosition:a,isImageType:c,enableTouch:l,isUsingVerticalWriting:u})=>{const d=s*e,p=i?.renditionLayout==="reflowable"&&i?.renditionFlow==="scrolled-continuous",g=p?Math.min(400,t):t;n?.style.setProperty("width",`${e}px`),p?n?.style.removeProperty("height"):n?.style.setProperty("height",`${g}px`);const{viewportDimensions:h,computedScale:m=1}=Qe({frameElement:n,pageHeight:g,pageWidth:e})??{},f=i?.renditionLayout==="pre-paginated";if(n?.contentDocument&&n?.contentWindow&&n.contentDocument.body){let S=e,w=g;if(h?.hasViewport)k(n,"prose-reader-html-renderer-framce-css",Hn()),ie(n,{width:h.width??1,height:h.height??1}),n?.style.setProperty("position","absolute"),n?.style.setProperty("top","50%"),n?.style.setProperty("left",a==="before"?r?"25%":"75%":a==="after"?r?"75%":"25%":"50%"),n?.style.setProperty("transform",`translate(-50%, -50%) scale(${m})`),n?.style.setProperty("transform-origin","center center");else{const I=c?xn({isScrollable:i?.renditionFlow==="scrolled-continuous",enableTouch:l}):qn(Yn({isUsingVerticalWriting:u,minimumWidth:d,pageHeight:g,pageWidth:e}));if(k(n,"prose-reader-css",I,!0),u)w=Math.ceil(n.contentDocument.documentElement.scrollHeight/g)*g,ie(n,{width:d,height:w});else if(i?.renditionFlow==="scrolled-continuous")w=n.contentDocument.body.scrollHeight,ie(n,{width:d,height:w});else{const v=Math.ceil(n.contentDocument.documentElement.scrollWidth/e);f?S=e:S=v*e,ie(n,{width:S,height:w})}}return S%d===0?n?.style.setProperty("margin-left","0px"):(S=S+e,r&&!u&&n?.style.setProperty("margin-left",`${e}px`)),{width:S,height:w}}};class Gn extends J{constructor(){super(...arguments),this.isPrePaginated=()=>this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&this.context.manifest?.renditionLayout==="pre-paginated",this.isImageType=()=>!!(this.item.mediaType??$.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=kn();return this.setDocumentContainer(e),o.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return o.of(e).pipe(Vn({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),Z(this.context.bridgeEvent.viewportFree$),o.tap(n=>{this.prepareFrameForAttach(n),this.attach()}),Ye,o.tap(n=>{this.isPrePaginated()?k(n,"prose-reader-css",Un):this.isImageType()}),Nn({context:this.context,item:this.item,settings:this.settings}),Xe,o.tap(n=>{this.revealFrameAfterReady(n)}))}onUnload(){const e=this.getFrameElement();return An(e),$e(e),this.detach(),o.EMPTY}onLayout({minPageSpread:e,blankPagePosition:n,spreadPosition:i}){const{width:s,height:r}=this.viewport.pageSize,a=this.getFrameElement();if(!a)return o.of(void 0);const c=this.settings.values.computedPageTurnMode==="scrollable";if(a.contentDocument?.documentElement&&(a.contentDocument?.documentElement.setAttribute("data-prose-reader-html-renderer-spread-position",i),c?a.contentDocument?.documentElement.classList.add("prose-reader-html-renderer-touch-enabled"):a.contentDocument?.documentElement.classList.remove("prose-reader-html-renderer-touch-enabled")),this.isPrePaginated()){const p=Bn({blankPagePosition:n,frameElement:a,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:r,pageWidth:s,spreadPosition:i});return o.of(p)}const l=!!this.writingMode?.startsWith("vertical"),u=this.isImageType(),d=Xn({pageHeight:r,pageWidth:s,frameElement:a,manifest:this.context.manifest,blankPagePosition:n,isUsingVerticalWriting:l,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:u,enableTouch:this.settings.values.computedPageTurnMode==="scrollable"});return o.of(d)}onRenderHeadless(){return o.from(this.resourcesHandler.fetchResource()).pipe(o.switchMap(e=>{if(e instanceof Response){const n=e.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(n))return o.from(e.text()).pipe(o.map(s=>new DOMParser().parseFromString(s,n)))}return o.of(void 0)}))}getFrameElement(){const e=this.documentContainer;if(e instanceof HTMLIFrameElement)return e}prepareFrameForAttach(e){e.style.setProperty("visibility","hidden"),e.style.setProperty("pointer-events","none"),e.style.setProperty("contain","layout paint size"),e.style.setProperty("display","block")}revealFrameAfterReady(e){e.style.removeProperty("visibility"),e.style.removeProperty("pointer-events"),e.style.removeProperty("contain")}getComputedStyleAfterLoad(){const e=this.getFrameElement(),n=e?.contentDocument?.body;if(n)return e?.contentWindow?.getComputedStyle(n)}get writingMode(){if(!this.isImageType())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 tt=t=>e=>{const n=t({...e,getRenderer(s){return e.getRenderer?.(s)??(a=>new Gn(a))}}),i=Fn(n);return i.pipe(o.takeUntil(n.$.destroy$)).subscribe(),{...n,links$:i}};function O(t){return t!=null}class oe{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 C{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class re{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class nt extends oe{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class se extends oe{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class it extends oe{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class Me{constructor(e){this.x=e.x,this.y=e.y}}class L extends Me{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new L(e)}}class E extends Me{constructor(){super(...arguments),this.__symbol="UnboundSpinePosition"}static from(e){return new E(e)}}const Zn=(t,e)=>{const n=e.getBoundingClientRect(),{x:i,y:s}=t,{left:r,top:a}=n,c=n.width/e.offsetWidth,l=n.height/e.offsetHeight,u=i-r,d=s-a;return{x:u/c,y:d/l}},Jn=(t,e)=>new E(Zn(t,e)),Kn=t=>({getSpinePositionFromClientPosition:e=>t.spine.element?Jn(e,t.spine.element):void 0}),Qn=t=>{let e;const n=t.context.watch("rootElement").pipe(b.switchMap(l=>l?new o.Observable(()=>(e=l.ownerDocument.createElement("div"),e.style.cssText=`
168
168
  position: absolute;
169
169
  left: 0;
170
170
  top: 0;
171
171
  width: 100%;
172
172
  height: 100%;
173
173
  visibility: hidden;
174
- `,l.appendChild(e),()=>{e?.remove(),e=void 0})):r.NEVER)),i=l=>r.scheduled(l,r.animationFrameScheduler).pipe(I.tap(()=>{e?.style.setProperty("visibility","hidden")})),o=t.context.bridgeEvent.viewportBusy$.pipe(I.tap(()=>{e?.style.setProperty("visibility","visible")})),s=i(t.viewportFree$).pipe(I.take(1)),c=t.settings.values$.pipe(I.map(()=>t.settings.values.computedPageTurnMode),I.distinctUntilChanged()).pipe(I.switchMap(l=>l==="controlled"?o.pipe(I.switchMap(()=>s)):i(r.of(void 0))),I.takeUntil(t.$.destroy$));return r.merge(n,c)},Xn="@prose-reader/core",Gn=0,Zn=200,E="prose-reader",nt=`${E}-style`,it=`data-${E}-id`,ot=`${E}-viewport`,rt=`${E}-scroll-navigator`,st=`${E}-spine-item`,at=`${`${E}-enhancer-loading`}-container`,Jn=({container:t,item:e,viewport:n})=>{const i=t.ownerDocument.createElement("div");i.classList.add(at),i.style.cssText=`
174
+ `,l.appendChild(e),()=>{e?.remove(),e=void 0})):o.NEVER)),i=l=>o.scheduled(l,o.animationFrameScheduler).pipe(b.tap(()=>{e?.style.setProperty("visibility","hidden")})),s=t.context.bridgeEvent.viewportBusy$.pipe(b.tap(()=>{e?.style.setProperty("visibility","visible")})),r=i(t.viewportFree$).pipe(b.take(1)),c=t.settings.values$.pipe(b.map(()=>t.settings.values.computedPageTurnMode),b.distinctUntilChanged()).pipe(b.switchMap(l=>l==="controlled"?s.pipe(b.switchMap(()=>r)):i(o.of(void 0))),b.takeUntil(t.$.destroy$));return o.merge(n,c)},jn="@prose-reader/core",ei=0,ti=200,N="prose-reader",ot=`${N}-style`,rt=`data-${N}-id`,st=`${N}-viewport`,at=`${N}-scroll-navigator`,ct=`${N}-spine-item`,lt=`${`${N}-enhancer-loading`}-container`,ni=({container:t,item:e,viewport:n})=>{const i=t.ownerDocument.createElement("div");i.classList.add(lt),i.style.cssText=`
175
175
  height: 100%;
176
176
  width: 100%;
177
177
  max-width: ${n.absoluteViewport.width}px;
@@ -186,34 +186,34 @@
186
186
  color: rgb(202, 202, 202);
187
187
  background-color: white;
188
188
  z-index: 1;
189
- `;const o=i.ownerDocument.createElement("div");o.innerText="prose",o.style.cssText=`
189
+ `;const s=i.ownerDocument.createElement("div");s.innerText="prose",s.style.cssText=`
190
190
  font-size: 4em;
191
- `;const s=i.ownerDocument.createElement("div");return s.setAttribute("data-details-element","true"),s.innerText=`loading ${e.id}`,s.style.cssText=`
191
+ `;const r=i.ownerDocument.createElement("div");return r.setAttribute("data-details-element","true"),r.innerText=`loading ${e.id}`,r.style.cssText=`
192
192
  font-size: 1.2em;
193
193
  text-overflow: ellipsis;
194
194
  white-space: nowrap;
195
195
  overflow: hidden;
196
196
  max-width: 300px;
197
197
  width: 80%;
198
- `,i.appendChild(o),i.appendChild(s),i},Kn=t=>t.spineItemsManager.items$.pipe(I.switchMap(e=>r.merge(...e.map(n=>{n.containerElement.style.zIndex="0";const i=n.containerElement.querySelector(`.${at}`),o=i instanceof HTMLElement?i:Jn({container:n.containerElement,item:n.item,viewport:t.viewport});return n.containerElement.appendChild(o),r.merge(n.pipe(I.tap(s=>{if(o.style.setProperty("visibility",s.isReady?"hidden":"visible"),o.style.setProperty("z-index",s.isReady?"0":"1"),s.isError){const a=o.querySelector("[data-details-element]");a instanceof HTMLElement&&(a.innerText=s.error?.toString()??"Unknown error")}})),r.combineLatest([t.spine.layout$,t.theme.$.theme$]).pipe(I.tap(([,s])=>{const a=t.viewport.absoluteViewport.width;o.style.setProperty("max-width",`${a}px`),o.style.setProperty("color",s==="sepia"?"#939393":"rgb(202, 202, 202)")})))})))),Qn=t=>{t.hookManager.register("item.onDocumentLoad",({itemId:e})=>{t.spineItemsManager.get(e)?.renderer.getDocumentFrame()?.setAttribute("scrolling","no")})},jn=t=>{t.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:n,minimumWidth:i})=>{const o=t.spineItemsManager.get(e.id),s=o?.renderer.getDocumentFrame();if(o?.renditionLayout!=="reflowable"||!(s instanceof HTMLIFrameElement))return;const{hasViewport:a}=j(s),{width:c}=t.viewport.pageSize,l=o?.renderer.getDocumentFrame();if(a){const d=c<i;n==="none"&&d&&l instanceof HTMLIFrameElement&&l?.style.setProperty("left",t.context.isRTL()?"75%":"25%")}})},ei=t=>t.spineItemsObserver.states$.pipe(r.tap(({item:e,isReady:n,isDirty:i})=>{e.containerElement.dataset.isDirty=i.toString(),e.containerElement.dataset.isReady=n.toString()}));let ti=class extends Ge{computeOutputSettings(e){return e}hasSettingsChanged(e){return!T.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:n,pageHorizontalMargin:i,pageVerticalMargin:o,layoutLayerTransition:s,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0}}};const ni=t=>r.combineLatest([t.viewport.watch(["width","height"]),t.context.watch("manifest")]).pipe(r.tap(([{width:e,height:n},i])=>{const o=e>n;return!o&&i?.renditionSpread==="portrait"?t.settings.update({spreadMode:!0}):o&&(i?.renditionSpread===void 0||i?.renditionSpread==="auto"||i?.renditionSpread==="landscape"||i?.renditionSpread==="both")?t.settings.update({spreadMode:!0}):t.settings.update({spreadMode:!1})})),ct=t=>e=>{const{pageHorizontalMargin:n,pageVerticalMargin:i,layoutAutoResize:o,layoutLayerTransition:s}=e,a=t(e),c=new ti({pageHorizontalMargin:n,pageVerticalMargin:i,layoutAutoResize:o,layoutLayerTransition:s},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{for(const f of a.spineItemsManager.items){const S=f.renderer.getDocumentFrame();if(S){S.getBoundingClientRect().left;break}}}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const S=a.spineItemsManager.get(f.id),w=!!(f.mediaType??T.detectMimeTypeFromName(f.href))?.startsWith("image/"),{pageHorizontalMargin:v=0,pageVerticalMargin:$=0}=c.values,P=a.viewport.pageSize;if(S?.renditionLayout==="reflowable"&&!w){let F=P.width-v*2;const R=P.height-$*2;let A=P.width-v*2,Y=v*2;S.isUsingVerticalWriting()&&(A=P.width-v*2,F=R,Y=$*2);const q=S?.renderer.getDocumentFrame();q&&V(q,"prose-layout-enhancer-css",`
198
+ `,i.appendChild(s),i.appendChild(r),i},ii=t=>t.spineItemsManager.items$.pipe(b.switchMap(e=>o.merge(...e.map(n=>{n.containerElement.style.zIndex="0";const i=n.containerElement.querySelector(`.${lt}`),s=i instanceof HTMLElement?i:ni({container:n.containerElement,item:n.item,viewport:t.viewport});return n.containerElement.appendChild(s),o.merge(n.pipe(b.tap(r=>{if(s.style.setProperty("visibility",r.isReady?"hidden":"visible"),s.style.setProperty("z-index",r.isReady?"0":"1"),r.isError){const a=s.querySelector("[data-details-element]");a instanceof HTMLElement&&(a.innerText=r.error?.toString()??"Unknown error")}})),o.combineLatest([t.spine.layout$,t.theme.$.theme$]).pipe(b.tap(([,r])=>{const a=t.viewport.absoluteViewport.width;s.style.setProperty("max-width",`${a}px`),s.style.setProperty("color",r==="sepia"?"#939393":"rgb(202, 202, 202)")})))})))),oi=t=>{t.hookManager.register("item.onDocumentLoad",({itemId:e})=>{t.spineItemsManager.get(e)?.renderer.getDocumentFrame()?.setAttribute("scrolling","no")})},ri=t=>{t.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:n,minimumWidth:i})=>{const s=t.spineItemsManager.get(e.id),r=s?.renderer.getDocumentFrame();if(s?.renditionLayout!=="reflowable"||!(r instanceof HTMLIFrameElement))return;const{hasViewport:a}=j(r),{width:c}=t.viewport.pageSize,l=s?.renderer.getDocumentFrame();if(a){const u=c<i;n==="none"&&u&&l instanceof HTMLIFrameElement&&l?.style.setProperty("left",t.context.isRTL()?"75%":"25%")}})},si=t=>t.spineItemsObserver.states$.pipe(o.tap(({item:e,isReady:n,isDirty:i})=>{e.containerElement.dataset.isDirty=i.toString(),e.containerElement.dataset.isReady=n.toString()}));let ai=class extends Je{computeOutputSettings(e){return e}hasSettingsChanged(e){return!$.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:n,pageHorizontalMargin:i,pageVerticalMargin:s,layoutLayerTransition:r,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0}}};const ci=t=>o.combineLatest([t.viewport.watch(["width","height"]),t.context.watch("manifest")]).pipe(o.tap(([{width:e,height:n},i])=>{const s=e>n;return!s&&i?.renditionSpread==="portrait"?t.settings.update({spreadMode:!0}):s&&(i?.renditionSpread===void 0||i?.renditionSpread==="auto"||i?.renditionSpread==="landscape"||i?.renditionSpread==="both")?t.settings.update({spreadMode:!0}):t.settings.update({spreadMode:!1})})),ut=t=>e=>{const{pageHorizontalMargin:n,pageVerticalMargin:i,layoutAutoResize:s,layoutLayerTransition:r}=e,a=t(e),c=new ai({pageHorizontalMargin:n,pageVerticalMargin:i,layoutAutoResize:s,layoutLayerTransition:r},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{for(const f of a.spineItemsManager.items){const S=f.renderer.getDocumentFrame();if(S){S.getBoundingClientRect().left;break}}}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const S=a.spineItemsManager.get(f.id),T=!!(f.mediaType??$.detectMimeTypeFromName(f.href))?.startsWith("image/"),{pageHorizontalMargin:I=0,pageVerticalMargin:v=0}=c.values,P=a.viewport.pageSize;if(S?.renditionLayout==="reflowable"&&!T){let M=P.width-I*2;const A=P.height-v*2;let V=P.width-I*2,Y=I*2;S.isUsingVerticalWriting()&&(V=P.width-I*2,M=A,Y=v*2);const B=S?.renderer.getDocumentFrame();B&&k(B,"prose-layout-enhancer-css",`
199
199
  body {
200
- width: ${A}px !important;
201
- margin: ${$}px ${v}px !important;
200
+ width: ${V}px !important;
201
+ margin: ${v}px ${I}px !important;
202
202
  column-gap: ${Y}px !important;
203
- column-width: ${F}px !important;
204
- height: ${R}px !important;
203
+ column-width: ${M}px !important;
204
+ height: ${A}px !important;
205
205
  }
206
206
  img, video, audio, object, svg {
207
- -max-width: ${F}px !important;
208
- -max-height: ${R}px !important;
207
+ -max-width: ${M}px !important;
208
+ -max-height: ${A}px !important;
209
209
  }
210
210
  table {
211
- max-width: ${F}px !important;
211
+ max-width: ${M}px !important;
212
212
  }
213
213
  td {
214
- max-width: ${F}px;
214
+ max-width: ${M}px;
215
215
  }
216
- `)}}),jn(a),Qn(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:f})=>{f.style.opacity="0",c.values.layoutLayerTransition&&(f.style.transition="opacity 800ms")}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const y=a.spineItemsManager.get(f.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&y?.setAttribute("tab-index","0")});const l=a.spineItemsObserver.states$.pipe(I.filter(({isReady:f})=>f),I.tap(({item:f})=>{const S=f.renderer.documentContainer;S&&(S.style.opacity="1")})),d=c.values$.pipe(I.filter(({layoutAutoResize:f})=>f==="container"),I.switchMap(()=>a.context.watch("rootElement")),I.filter(D),I.switchMap(f=>te(f)),I.debounceTime(100),I.filter(D),I.tap(()=>{a?.layout()})),u=qn(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(I.skip(1),I.tap(()=>{a.layout()}),I.takeUntil(a.$.destroy$)).subscribe();const p=a.spine.pages.pipe(I.shareReplay({refCount:!0,bufferSize:1})),g=ei(a),h=ni(a),m=Kn(a);return r.merge(l,u,d,p,g,h,m).pipe(I.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:a.spine.layout$,layoutInfo$:p,coordinates:Yn(a)}},ii=t=>e=>{const n=t(e),i=new IntersectionObserver(a=>{a.forEach(c=>{const l=c.target,d=Array.from(l.contentDocument?.body.getElementsByTagName("audio")||[]);c.isIntersecting?d.forEach(u=>{u.hasAttribute("autoplay")&&u.paused&&u.readyState>=2&&u.play().catch(console.error)}):d.forEach(u=>{u.pause(),u.currentTime=0})})},{threshold:.01}),o=new IntersectionObserver(a=>{a.forEach(c=>{if(c.target.tagName==="video"){const l=c.target;c.isIntersecting?l.hasAttribute("autoplay")&&l.paused&&l.readyState>=2&&l.play().catch(console.error):(l.pause(),l.currentTime=0)}})},{threshold:.5});return n.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{const l=n.spineItemsManager.get(c)?.renderer.getDocumentFrame();if(!l)return;i.observe(l);const d=l.contentDocument?.body.getElementsByTagName("video"),u=Array.from(d||[]).map(p=>(o.observe(p),()=>o.unobserve(p)));a(()=>{i.unobserve(l),u.forEach(p=>{p()})})}),{...n,destroy:()=>{i.disconnect(),o.disconnect(),n.destroy()}}},oi=(t,e)=>t.links$.pipe(r.tap(n=>{if(!Be(n.target,"a")||n.type!=="click")return;const i=new URL(n.target.href),o=`${i.origin}${i.pathname}`;t.context.manifest?.spineItems.some(a=>a.href===o)&&e.goToUrl(i)})),z=C.namespace("navigation"),ri=({position:t,spineItem:e,pageHeight:n,pageWidth:i,spineItemLocator:o})=>{let s=new L({x:t.x-i,y:t.y});return e.isUsingVerticalWriting()&&(s=new L({x:t.x,y:t.y+n})),o.getSpineItemClosestPositionFromUnsafePosition(s,e)},lt=({position:t,navigationResolver:e,computedPageTurnDirection:n,spineItemsManager:i,spineLocator:o,viewport:s})=>{const a=n,c=o.getSpineItemFromPosition(t)||i.get(0),l=t;if(!c)return l;const d=o.getSpineItemPositionFromSpinePosition(t,c),u=ri({position:d,spineItem:c,pageHeight:s.pageSize.height,pageWidth:s.pageSize.width,spineItemLocator:o.spineItemLocator});return e.arePositionsDifferent(u,d)?o.getSpinePositionFromSpineItemPosition({spineItemPosition:u,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new M({x:t.x-s.pageSize.width,y:0}):new M({y:t.y-s.pageSize.height,x:0}))},si=({position:t,spineItem:e,context:n,navigationResolver:i,spineItemsManager:o,spineLocator:s,computedPageTurnDirection:a,viewport:c,settings:l})=>{const d=lt({position:t,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});if(e?.isUsingVerticalWriting()&&t.x===d.x)return i.getAdjustedPositionForSpread(d);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&t.x!==d.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(n.isRTL()?{...d,x:d.x+c.pageSize.width}:{...d,x:d.x-c.pageSize.width}));if(a==="vertical"&&t.y!==d.y)return i.getAdjustedPositionForSpread(d);const u=lt({position:d,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});return i.getAdjustedPositionForSpread(u)}return i.getAdjustedPositionForSpread(d)},ai=({position:t,spineItem:e,pageHeight:n,pageWidth:i,spineItemLocator:o})=>{let s=new L({x:t.x+i,y:t.y});return e.isUsingVerticalWriting()&&(s=new L({x:t.x,y:t.y-n})),o.getSpineItemClosestPositionFromUnsafePosition(s,e)},ut=({position:t,navigationResolver:e,computedPageTurnDirection:n,spineItemsManager:i,spineLocator:o,viewport:s})=>{const a=n,c=o.getSpineItemFromPosition(t)||i.get(0),l=t;if(!c)return l;const d=o.getSpineItemPositionFromSpinePosition(t,c),u=ai({position:d,spineItem:c,pageHeight:s.pageSize.height,pageWidth:s.pageSize.width,spineItemLocator:o.spineItemLocator});return e.arePositionsDifferent(u,d)?o.getSpinePositionFromSpineItemPosition({spineItemPosition:u,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new U({x:t.x+s.pageSize.width,y:0}):new U({y:t.y+s.pageSize.height,x:0}))},ci=({position:t,spineItem:e,context:n,navigationResolver:i,spineItemsManager:o,spineLocator:s,computedPageTurnDirection:a,viewport:c,settings:l})=>{const d=ut({position:t,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});if(e?.isUsingVerticalWriting()&&t.x===d.x)return i.getAdjustedPositionForSpread(d);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&t.x!==d.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(n.isRTL()?{...d,x:d.x-c.pageSize.width}:{...d,x:d.x+c.pageSize.width}));if(a==="vertical"&&t.y!==d.y)return i.getAdjustedPositionForSpread(d);const u=ut({position:d,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});return i.getAdjustedPositionForSpread(u)}return i.getAdjustedPositionForSpread(d)};class li{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new M({x:0,y:0}),this.unlock=void 0}turnRight(){return this.turnRightOrBottom()}turnLeft(){return this.turnLeftOrTop()}turnTop(){return this.turnLeftOrTop()}turnBottom(){return this.turnRightOrBottom()}turnRightOrBottom(){const e=this.reader.navigation.getNavigation(),n=this.reader.spineItemsManager.get(e.spineItem);if(!n)return;const i=ci({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:n,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),n=this.reader.spineItemsManager.get(e.spineItem);if(!n)return;const i=si({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:n,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}goToCfi(e,n={animate:!0}){return this.reader.navigation.navigate({animation:n.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...n}){const i=this.reader.spineItemsManager.get(e);if(i===void 0){z.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:i.index,...n})}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"){z.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"){z.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"){z.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){z.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:n,...i}){const o=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:n});z.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:n,...i,position:o}),this.reader.navigation.navigate({position:o,...i})}goToAbsolutePageIndex({absolutePageIndex:e,...n}){const i=this.reader.spine.pages.fromAbsolutePageIndex(e);if(z.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...n,foundInfo:i}),i){const o=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:i.pageIndex,spineItemId:i.itemIndex});return this.reader.navigation.navigate({position:o,...n})}}}class ui extends O{constructor(e){super({lastDelta:{x:0,y:0},lastPosition:new M({x:0,y:0}),lastStartPosition:new M({x:0,y:0}),isStarted:!1}),this.reader=e,this.unlock=void 0}start(e){this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.mergeCompare({isStarted:!0,lastDelta:e,lastStartPosition:this.reader.navigation.controlledNavigationController.viewportPosition,lastPosition:this.reader.navigation.controlledNavigationController.viewportPosition})}stop(e){this.panMoveTo(e),this.mergeCompare({isStarted:!1}),this.unlock?.()}panMoveTo(e){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){z.warn("pan control is not available on free page turn mode");return}if(!this.value.isStarted){z.error("Pan navigator is not started");return}const n=this.reader.settings.values.computedPageTurnDirection;let i=this.reader.navigation.getNavigation().position;if(e){const o=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,s=Math.floor(e.x)-(this.value.lastDelta?.x||0),a=Math.floor(e.y)-(this.value.lastDelta?.y||0),c=Math.floor(n==="horizontal"?this.value.lastPosition.x-s/o:0),l=Math.floor(n==="horizontal"?0:this.value.lastPosition.y-a/o);i=new M({x:c,y:l}),this.mergeCompare({lastDelta:e})}else i=this.value.lastPosition;this.mergeCompare({lastPosition:i}),this.reader.navigation.navigate({position:i,animation:!1})}}class N{constructor(){this.isDestroyed=!1,this.destroySubject=new r.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const di=500;class pi extends N{constructor(e,n){super(),this.scrollNavigationController=e,this.locker=n,this.navigationSubject=new r.Subject,this.navigation$=this.navigationSubject.asObservable();const i=this.scrollNavigationController.userScroll$.pipe(r.exhaustMap(o=>{const s=this.locker.lock();return r.merge(this.scrollNavigationController.userScroll$,r.of(o)).pipe(r.debounceTime(di,r.animationFrameScheduler),r.first(),r.tap(()=>{const a=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:"scroll",position:a})}),r.finalize(()=>{s()}))}));r.merge(i).pipe(r.takeUntil(this.destroy$)).subscribe()}}const hi=t=>t.pagination.state$.pipe(r.withLatestFrom(t.context.manifest$,t.settings.values$),r.map(([e,{spineItems:n,readingDirection:i},{computedPageTurnDirection:o}])=>{const s=n.length??0,a=e.beginSpineItemIndex===0,c=e.endSpineItemIndex===Math.max(s-1,0),l=e.endSpineItemIndex===Math.max(s-1,0),d=e.beginSpineItemIndex===0,u=e.beginPageIndexInSpineItem===0,p=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:o==="vertical"?!1:!u,canTurnRight:o==="vertical"?!1:!p,canGoTopSpineItem:o==="vertical"&&!a,canGoBottomSpineItem:o==="vertical"&&!c,canGoLeftSpineItem:o!=="vertical"&&(i==="ltr"&&!a||i==="rtl"&&!l),canGoRightSpineItem:o!=="vertical"&&(i==="ltr"&&!c||i==="rtl"&&!d)}}),r.distinctUntilChanged(T.isShallowEqual)),gi=({reader:t,duration:e})=>n=>{let i;const o=()=>{i?.(),i=void 0};return n.pipe(r.tap(()=>{i||(i=t?.navigation.lock())}),r.throttleTime(e,void 0,{trailing:!0,leading:!0}),r.tap(o),r.finalize(o))},mi=t=>e=>{const n=t(e),i=hi(n),o=new li(n),s=new ui(n),a=new pi(n.navigation.scrollNavigationController,n.navigation.locker),c=oi(n,o),l=a.navigation$.pipe(r.tap(p=>{n.navigation.navigate(p)}));return r.merge(c,l).pipe(r.takeUntil(n.$.destroy$)).subscribe(),{...n,load:p=>{const{cfi:g,...h}=p;n.load(h),g&&o.goToCfi(g,{animate:!1})},destroy:()=>{a.destroy(),n.destroy()},navigation:{...n.navigation,state$:i,throttleLock:({duration:p,trigger:g})=>g.pipe(gi({duration:p,reader:n})),panNavigator:s,turnBottom:o.turnBottom.bind(o),turnTop:o.turnTop.bind(o),turnLeftOrTop:o.turnLeftOrTop.bind(o),turnRightOrBottom:o.turnRightOrBottom.bind(o),turnLeft:o.turnLeft.bind(o),turnRight:o.turnRight.bind(o),goToCfi:o.goToCfi.bind(o),goToUrl:o.goToUrl.bind(o),goToSpineItem:o.goToSpineItem.bind(o),goToNextSpineItem:o.goToNextSpineItem.bind(o),goToPreviousSpineItem:o.goToPreviousSpineItem.bind(o),goToLeftOrTopSpineItem:o.goToLeftOrTopSpineItem.bind(o),goToRightOrBottomSpineItem:o.goToRightOrBottomSpineItem.bind(o),goToTopSpineItem:o.goToTopSpineItem.bind(o),goToBottomSpineItem:o.goToBottomSpineItem.bind(o),goToLeftSpineItem:o.goToLeftSpineItem.bind(o),goToRightSpineItem:o.goToRightSpineItem.bind(o),goToPageOfSpineItem:o.goToPageOfSpineItem.bind(o),goToAbsolutePageIndex:o.goToAbsolutePageIndex.bind(o)}}},H=t=>B.generate({spineIndex:t.index,spineId:t.id}),dt=({nodeOrRange:t,offset:e,item:n})=>{const i="ownerDocument"in t?t.ownerDocument:t.startContainer.ownerDocument;return!i||!i?.documentElement||t===i?H(n):ln(t)?B.generate({start:{node:t.startContainer,offset:t.startOffset,spineIndex:n.index,spineId:n.id},end:{node:t.endContainer,offset:t.endOffset,spineIndex:n.index,spineId:n.id}}):B.generate({node:t,offset:e,spineIndex:n.index,spineId:n.id})},ae=({spineItem:t,pageNode:e})=>dt({nodeOrRange:e.node,offset:e.offset,item:t}).trim(),pt=(t,e)=>dt({nodeOrRange:t,item:e}),fi=t=>t.index.toString(),ht=t=>t[0]?.index===6&&t.length>1,ce=t=>{const e=B.parse(t);return B.isIndirectionOnly(e)},Si=t=>Array.isArray(t)?t[0]&&ht(t[0])?t[0]:void 0:t.parent[0]&&ht(t.parent[0])?t.parent[0]:void 0,le=t=>{const e=B.parse(t),s=((Si(e)??[])[1]?.index??2)/2-1,a=B.isParsedCfiRange(e),c=a?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:a,itemIndex:s,offset:c??0}},Fe=({cfi:t,spineItemsManager:e})=>{const{itemIndex:n,...i}=le(t),o=e.get(n);if(!o)return{...i,itemIndex:n,node:null};const s=o.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){const a=s.contentWindow?.document;if(a)try{const c=B.resolve(t,a,{throwOnError:!0});return{...i,itemIndex:n,node:c.isRange?c.node?.startContainer??null:c.node??null,isCfiRange:c.isRange,range:c.isRange?c.node:void 0,offset:Array.isArray(c.offset)?c.offset.at(-1):c.offset,spineItem:o}}catch(c){return C.warn(`Error resolving cfi: ${t}.`),C.warn(c),{...i,spineItem:o,itemIndex:n,node:null}}}return{...i,itemIndex:n,spineItem:o,node:null}},bi=(t,e)=>{if("cfi"in e){const{itemIndex:s,...a}=t.cfi.parseCfi(e.cfi);return{...e,...a,itemIndex:s,node:null}}const n=t.spineItemsManager.get(e);if(!n)throw new Error("Spine item not found");const i=H(n.item);return{...t.cfi.parseCfi(i),cfi:H(n.item),itemIndex:n.index,node:null}},gt=(t,e)=>{let n=t?.itemPageIndex;const{itemIndex:i,...o}=e.cfi.parseCfi(t.cfi),s=e.spineItemsManager.get(i);return s?ve().pipe(r.withLatestFrom(s.isReady$),r.map(([,a])=>{const{node:c=null,offset:l,range:d}=a?e.cfi.resolveCfi({cfi:t.cfi}):{};s.renditionLayout!=="pre-paginated"&&c&&(n=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,l??0,s)??n);let p=t?.absolutePageIndex;return n===void 0&&(n=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:n,spineItemOrId:s})??t?.absolutePageIndex,{...t,...o,range:d,itemIndex:i,node:c,startOffset:l,absolutePageIndex:p,itemPageIndex:n}})):r.of({...t,itemIndex:i,...o})};class mt{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=n=>{const i=this.locatorsByKey.get(n);i&&(i.observerCount--,i.observerCount===0&&this.locatorsByKey.delete(n))},this.locate=(n,i)=>{const o={resource:n,meta:bi(this.reader,n)};return Pe(()=>{const s=this.reader.spineItemsManager.get(o.meta.itemIndex??0),a=s?.renditionLayout==="reflowable",c=i.mode==="shallow"||!a||!s?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([s.index]),l="cfi"in n?n.cfi:void 0,d=l?this.locatorsByKey.get(l):void 0,u=g=>g.pipe(r.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{c()},1e3)}));if(l&&d)return d.observerCount++,u(d.consolidate$.pipe(r.map(({resource:g,meta:h})=>({resource:g,meta:h}))));const p=this.reader.spine.layout$.pipe(r.debounceTime(10),r.startWith(o),r.switchScan(g=>gt(g.meta,this.reader).pipe(r.map(h=>({...g,meta:h}))),o),r.shareReplay({refCount:!0,bufferSize:1}));return l&&this.locatorsByKey.set(l,{observerCount:1,consolidate$:p}),u(p)})}}locateResource(e,n){return Array.isArray(e)?Pe(()=>r.combineLatest(e.map(i=>this.locate(i,n??{}))).pipe(r.defaultIfEmpty([]))):this.locate(e,n??{})}}const yi=C.namespace("spine"),ft=({position:t,pageSize:e})=>new tt({...t,left:t.x,top:t.y,width:e.width,height:e.height,bottom:t.y+e.height,right:t.x+e.width}),Ii=10,wi=t=>{const{spineItem:e,...n}=t;if(!t.spineItem.value.isLoaded)return{...n,firstVisibleNode:void 0};const o=t.spineItem.renderer?.getDocumentFrame()?.contentWindow?.document;return!o||o.body===null?{...n,firstVisibleNode:void 0}:{...n,firstVisibleNode:tn(o,t.layout)}},vi=t=>new r.Observable(e=>{if(t.length===0){e.next([]),e.complete();return}let n,i=0;const o=new Array(t.length),s=()=>{n!==void 0&&(cancelAnimationFrame(n),n=void 0)},a=()=>{n=void 0;let l=0;for(;i<t.length&&l<Ii;){const d=t[i];if(!d){i=t.length;break}o[i]=wi(d),i+=1,l+=1}if(i>=t.length){e.next(o),e.complete();return}c()},c=()=>{n=requestAnimationFrame(a)};return c(),()=>{s()}}),W=class W extends O{constructor(e,n,i,o,s,a){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=n,this.spineItemLocator=i,this.context=o,this.locator=s,this.viewport=a,this.fromSpineItemPageIndex=(c,l)=>W.fromSpineItemPageIndex(this.value,c,l),this.fromNextPageWithinSameSpineItem=c=>W.fromNextPageWithinSameSpineItem(this.value,c),this.fromAbsolutePageIndex=c=>W.fromAbsolutePageIndex(this.value,c),this.observeFromAbsolutePageIndex=c=>this.pipe(r.map(()=>this.fromAbsolutePageIndex(c))),this.layout$=e.layout$.pipe(r.withLatestFrom(a),r.switchMap(([,{pageSize:c}])=>{const l=n.items.reduce((d,u,p)=>{for(let g=0;g<u.numberOfPages;g+=1){const h=i.getSpineItemPositionFromPageIndex({spineItem:u,pageIndex:g}),m=s.getSpinePositionFromSpineItemPosition({spineItem:u,spineItemPosition:h}),f=d.length;d.push({absoluteLayout:ft({pageSize:c,position:m}),layout:new et({left:h.x,right:h.x+c.width,top:h.y,bottom:h.y+c.height,width:c.width,height:c.height,x:h.x,y:h.y}),itemIndex:p,absolutePageIndex:f,spineItem:u,pageIndex:g})}return d},[]);return vi(l)}),r.map(c=>(yi.info("Pages layout",c),{pages:c})),r.share()),this.layout$.pipe(r.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}};W.fromSpineItemPageIndex=(e,n,i)=>{const o=typeof n=="number"?n:n.index;return e.pages.find(s=>s.itemIndex===o&&s.pageIndex===i)},W.fromNextPageWithinSameSpineItem=(e,n)=>W.fromSpineItemPageIndex(e,n.itemIndex,n.pageIndex+1),W.fromAbsolutePageIndex=(e,n)=>e.pages.find(i=>i.absolutePageIndex===n);let x=W;const K=t=>{const e=t.indexOf("#");return e>=0?t.substring(0,e):t},St=t=>{if(!t)return;const e=t.indexOf("#");return e<0?void 0:t.substring(e+1)||void 0},Pi=t=>{try{return decodeURIComponent(t)}catch{return t}},bt=(t,e=[])=>t.flatMap(n=>{const i=[...e,{title:n.title,path:n.path}],o=n.href||n.path;return[{chain:i,href:o,anchorId:St(n.href)??St(n.path)},...bt(n.contents,i)]}),Ti=t=>{const e=new Map;return t.spineItems.forEach((n,i)=>{e.has(n.href)||e.set(n.href,i)}),e},$i=(t,e)=>{const n=Ti(e);return bt(t).map(i=>{const o=K(i.href),s=n.get(o)??-1;return{...i,hrefWithoutAnchor:o,spineItemIndex:s}})},Mi=({manifest:t,tocIndex:e})=>{const n=new Map;e.forEach((s,a)=>{const c=n.get(s.hrefWithoutAnchor);if(c){c.push(a);return}n.set(s.hrefWithoutAnchor,[a])});const i=new Map,o=new Map;for(const s of t.spineItems){if(i.has(s.href))continue;const a=K(s.href);let c=o.get(a);if(!c){const l=[];for(const[d,u]of n)Fi(a,d)&&l.push(...u);l.sort((d,u)=>d-u),c=l.map(d=>e[d]),o.set(a,c)}i.set(s.href,c)}return i},Fi=(t,e)=>t===e||t.endsWith(e)||e.endsWith(t),Ci=(t,e)=>{const n=t.endsWith(e),i=t.substring(0,t.lastIndexOf("/")),o=e.substring(0,e.lastIndexOf("/")),s=i!==""&&i.endsWith(o);return n||s},yt=t=>{const[e,...n]=t;if(!e)return;const i={title:e.title,path:e.path};let o=i;for(const s of n){const a={title:s.title,path:s.path};o.subChapter=a,o=a}return i},Li=({doc:t,node:e,offset:n})=>{const i=t.createRange();if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.CDATA_SECTION_NODE||e.nodeType===Node.COMMENT_NODE){const o=e,s=Math.max(0,Math.min(n,o.length));i.setStart(o,s)}else{const o=e.childNodes.length,s=Math.max(0,Math.min(n,o));i.setStart(e,s)}return i.collapse(!0),i},Ei=({rangeToTest:t,upperBoundRange:e})=>t.compareBoundaryPoints(Range.START_TO_START,e)<0,Ni=t=>{const e=t.createRange(),n=t.body??t.documentElement;if(n)return e.selectNodeContents(n),e.collapse(!1),e},Ri=({anchorNode:t,nextPageNode:e})=>t===e||t.contains(e),It=({node:t,offset:e,candidates:n,spineItem:i,nextPageEntry:o})=>{if(!t||e===void 0||!i||n.length===0)return;const s=i.renderer.getDocumentFrame()?.contentDocument;if(!s||t.ownerDocument!==s)return;const a=o?.firstVisibleNode?.node,c=o?.firstVisibleNode?.offset,l=o?a!==void 0&&c!==void 0&&a.ownerDocument===s?Li({doc:s,node:a,offset:c}):void 0:Ni(s);if(!l)return;const d=o!==void 0&&a!==void 0&&a.ownerDocument===s;let u,p,g;for(const m of n){if(!m.anchorId){g=m.chain;continue}const f=s.getElementById(Pi(m.anchorId));if(!f||d&&Ri({anchorNode:f,nextPageNode:a}))continue;const S=s.createRange();S.setStartBefore(f),S.collapse(!0),Ei({rangeToTest:S,upperBoundRange:l})&&(!p||S.compareBoundaryPoints(Range.START_TO_START,p)>0)&&(u=m.chain,p=S)}const h=u??g;return h?yt(h):void 0},Ai=({candidate:t,hrefHasAnchor:e})=>{if(e||!t.anchorId)return!1;const n=t.chain[t.chain.length-1],i=t.chain[t.chain.length-2];return!n||!i?!1:K(n.path)===K(i.path)},Oi=({href:t,tocIndex:e,manifest:n})=>{const i=K(t),o=t.includes("#"),s=n.spineItems.findIndex(c=>c.href===i);let a;for(const c of e)Ci(i,c.hrefWithoutAnchor)&&(s<c.spineItemIndex||Ai({candidate:c,hrefHasAnchor:o})||(a=c.chain));return a},Di=(t,e,n)=>{const{href:i}=n,o=Oi({href:i,tocIndex:e,manifest:t});return o?yt(o):void 0},Vi=(t,e)=>t?t.spineItems.reduce((i,o)=>(i[o.id]=Di(t,e,o),i),{}):{},ki=(t,e,n)=>t+e*n,Ui=(t,e,n)=>{const{height:i,width:o}=n.layoutInfo,{top:s,left:a}=t.spine.getSpineItemSpineLayoutInfo(n);return t.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-s+t.viewport.absoluteViewport.height)/i)):Math.max(0,Math.min(1,(e.x-a+t.viewport.absoluteViewport.width)/o))},zi=(t,e,n,i,o,s)=>o.isReady$.pipe(r.first(),r.withLatestFrom(t.layoutInfo$),r.map(([a,c])=>{const l=s.renditionLayout==="pre-paginated",d=s.spineItems.length||0,u=s.spineItems.slice(0,e).reduce((y,w)=>y+(w.progressionWeight??0),0)||0,p=t.spineItemsManager.getSpineItemIndex(o)??0,g=s.spineItems.length??0,h=c.pages.filter(y=>y.itemIndex===p).length??0,m=s.spineItems[e]?.progressionWeight??(p+1)/g;let f=(n+1)*(m/h);!l&&o.renditionLayout==="reflowable"&&!a&&(f=0);let S=u+f;return s.renditionFlow==="scrolled-continuous"&&(a?f=Ui(t,i,o):f=0,S=ki(u,m,f)),e===d-1&&n===h-1&&S>.99?1:S})),_i={tocCandidatesBySpineHref:new Map,chaptersInfo:{}},Wi=({beginItem:t,endItem:e,paginationInfo:n,chaptersData:i,pagesState:o})=>{const s=t&&n.beginPageIndexInSpineItem!==void 0?x.fromSpineItemPageIndex(o,t.index,n.beginPageIndexInSpineItem):void 0,a=s?x.fromNextPageWithinSameSpineItem(o,s):void 0,c=e&&n.endPageIndexInSpineItem!==void 0?x.fromSpineItemPageIndex(o,e.index,n.endPageIndexInSpineItem):void 0,l=c?x.fromNextPageWithinSameSpineItem(o,c):void 0,d=t?It({node:s?.firstVisibleNode?.node,offset:s?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(t.item.href)??[],spineItem:t,nextPageEntry:a}):void 0,u=e?It({node:c?.firstVisibleNode?.node,offset:c?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(e.item.href)??[],spineItem:e,nextPageEntry:l}):void 0;return{beginChapterInfo:d??(t?i.chaptersInfo[t.item.id]:void 0),beginSpineItemReadingDirection:t?.readingDirection,beginAbsolutePageIndex:s?.absolutePageIndex,endChapterInfo:u??(e?i.chaptersInfo[e.item.id]:void 0),endSpineItemReadingDirection:e?.readingDirection,endAbsolutePageIndex:c?.absolutePageIndex}},Bi=({items:t,pagesState:e})=>{const n=t.map(()=>0);for(const i of e.pages)n[i.itemIndex]=(n[i.itemIndex]??0)+1;return{numberOfPagesPerItems:n,numberOfTotalPages:e.pages.length}},Hi=(t,e)=>t.numberOfTotalPages!==e.numberOfTotalPages||t.numberOfPagesPerItems.length!==e.numberOfPagesPerItems.length?!1:t.numberOfPagesPerItems.every((n,i)=>n===e.numberOfPagesPerItems[i]),xi=({reader:t,paginationInfo:e,navigationPosition:n,manifest:i})=>{const o=t.spineItemsManager.get(e.endSpineItemIndex);return o?zi(t,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,n,o,i):r.of(0)},Yi=t=>t.context.manifest$.pipe(r.map(e=>{if(!e)return _i;const n=$i(e.nav?.toc??[],e);return{tocCandidatesBySpineHref:Mi({manifest:e,tocIndex:n}),chaptersInfo:Vi(e,n)}})),qi=t=>({beginSpineItemIndex:t.beginSpineItemIndex,beginPageIndexInSpineItem:t.beginPageIndexInSpineItem,endSpineItemIndex:t.endSpineItemIndex,endPageIndexInSpineItem:t.endPageIndexInSpineItem}),Xi=t=>{const e=t.pagination.state$,n=t.spine.pages.layout$,i=Yi(t).pipe(r.shareReplay({bufferSize:1,refCount:!0})),o=e.pipe(r.map(qi),r.distinctUntilChanged(T.isShallowEqual)),s=r.combineLatest([o,i,n]).pipe(r.map(([u,p,g])=>{const h=t.spineItemsManager.get(u.beginSpineItemIndex),m=t.spineItemsManager.get(u.endSpineItemIndex);return Wi({beginItem:h,endItem:m,paginationInfo:u,chaptersData:p,pagesState:g})}),r.shareReplay({bufferSize:1,refCount:!0})),a=t.settings.watch(["computedSpreadMode"]).pipe(r.map(u=>u.computedSpreadMode??!1),r.distinctUntilChanged()),c=r.combineLatest([n,t.spineItemsManager.items$]).pipe(r.map(([u,p])=>Bi({items:p,pagesState:u})),r.distinctUntilChanged(Hi)),l=r.combineLatest([e,a,s,c]).pipe(r.map(([u,p,g,h])=>({...u,...g,isUsingSpread:p,...h}))),d=r.combineLatest([e,t.layout$,t.navigation.navigation$,t.context.manifest$]).pipe(r.switchMap(([u,p,g,h])=>xi({reader:t,paginationInfo:u,navigationPosition:g.position,manifest:h})),r.map(u=>({percentageEstimateOfBook:u})));return r.combineLatest([l,d]).pipe(r.map(([u,p])=>({...u,...p})),r.distinctUntilChanged(T.isShallowEqual),r.auditTime(5))},wt=t=>e=>{const n=t(e),i=new r.BehaviorSubject({...n.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),o=new mt(n),s=Xi(n).pipe(r.tap(a=>C.log("Pagination",a))).subscribe(i);return{...n,locateResource:o.locateResource.bind(o),destroy:()=>{s.unsubscribe(),n.destroy()},pagination:{...n.pagination,get state(){return i.value},get state$(){return i}}}},Gi=t=>({put:(s,a)=>new Promise((c,l)=>{const d=t.transaction(["store"],"readwrite");d.onerror=g=>{l(g)},d.oncomplete=()=>{c()};const p=d.objectStore("store").put(a,s);p.onsuccess=()=>{c()},p.onerror=g=>{l(g)}}),keys:()=>new Promise((s,a)=>{const c=t.transaction(["store"],"readonly");c.onerror=p=>{a(p)};const d=c.objectStore("store").openKeyCursor(),u=[];d.onsuccess=()=>{const p=d.result;if(!p){s(u);return}u.push(p.key),p.continue()},d.onerror=()=>{a(d.error)}}),get:s=>new Promise((a,c)=>{const l=t.transaction(["store"],"readwrite"),u=l.objectStore("store").get(s);u.onsuccess=()=>{let p=u.result;p===void 0&&(p=null),a(p)},l.onerror=()=>{c(u.error)}}),remove:s=>new Promise((a,c)=>{const l=t.transaction(["store"],"readwrite"),u=l.objectStore("store").delete(s);l.onerror=()=>{c(u.error)},l.oncomplete=()=>{a()},l.onabort=()=>{const p=u.error?u.error:u.transaction?.error;c(p)}})}),Ce=async t=>new Promise((e,n)=>{const i=window.indexedDB.open(t);i.onerror=o=>{n(o)},i.onsuccess=()=>{e(Gi(i.result))},i.onupgradeneeded=()=>{i.result.createObjectStore("store")}}),Zi=t=>{let e=Date.now().toString();const n=new r.Subject,i=l=>{if(typeof l=="string"||typeof l=="object"){const d=typeof l=="object"?l.id:l;return t.manifest?.spineItems.find(u=>u.id===d)}return t.manifest?.spineItems[l]},o=async(l,d)=>{const u=i(l);if(!u)return new Response("Item not found",{status:404});const g=await(await Ce("prose-reader")).get(`${e}_${u.id}`);if(g)return new Response(g,{status:200});const h=d&&await d(u)||await fetch(u.href);return s(u,h.clone()),h},s=(l,d)=>{n.next({id:l,data:d})};n.asObservable().pipe(I.mergeMap(({id:l,data:d})=>{const u=i(l);return u?r.from(r.forkJoin([Ce("prose-reader"),r.from(d.blob())])).pipe(I.switchMap(([p,g])=>r.from(p.put(`${e}_${u.id}`,g))),I.catchError(p=>(C.error(p),r.EMPTY))):r.EMPTY}),I.takeUntil(t.destroy$)).subscribe();const a=t.manifest$.pipe(I.tap(()=>{e=Date.now().toString()}));return r.merge(a).pipe(I.switchMap(()=>(C.debug("Cleanup up old cache..."),r.from(Ce("prose-reader")).pipe(I.switchMap(l=>r.from(l.keys()).pipe(I.map(d=>d.filter(u=>!u.toString().startsWith(e))),I.switchMap(d=>{const u=d.map(p=>l.remove(p));return r.from(Promise.all(u))}))),I.catchError(l=>(C.error(l),r.EMPTY))))),I.takeUntil(t.destroy$)).subscribe(),{get:o,destroy:()=>{n.complete()}}},Ji=t=>e=>{const n=t(e),i=Zi(n.context);return{...n,destroy:()=>{i.destroy(),n.destroy()}}},Ki=(t,e)=>{const n=t.node.ownerDocument?.createRange(),i=t.node.compareDocumentPosition(e.node);if(n){try{if(i&Node.DOCUMENT_POSITION_PRECEDING)n.setStart(e.node,e.offset||0),n.setEnd(t.node,t.offset||0);else if(i&Node.DOCUMENT_POSITION_FOLLOWING)n.setStart(t.node,t.offset||0),n.setEnd(e.node,e.offset||0);else{const o=Math.min(t.offset||0,e.offset||0),s=Math.max(t.offset||0,e.offset||0);n.setStart(t.node,o),n.setEnd(t.node,s)}}catch(o){C.warn("Failed to create range from selection",o,{anchor:t,focus:e})}return n}},Qi=({selection:t,spineItem:e})=>{const{anchorNode:n,anchorOffset:i,focusNode:o,focusOffset:s}=t;if(!(!n||!o))try{return Ki({node:n,offset:i},{node:o,offset:s})}catch(a){C.warn("Failed to create range from selection",a,{selection:t,spineItem:e});return}};class ji extends N{constructor(e){super();const n=e.contentDocument||e.contentWindow?.document;if(!n)this.selectionChange$=r.NEVER,this.selectionOver$=r.NEVER;else{const i=Te(n.body,{childList:!0,subtree:!0}).pipe(r.filter(s=>!!s.find(a=>a.type==="childList"&&a.removedNodes.length))),o=e.parentElement?Te(e.parentElement,{childList:!0}).pipe(r.filter(s=>!!s.find(a=>Array.from(a.removedNodes).includes(e)))):r.of(null);this.selectionChange$=r.merge(r.fromEvent(n,"selectionchange"),i).pipe(r.map(()=>n.getSelection()),r.takeUntil(r.merge(o,this.destroy$)),r.endWith(null)),this.selectionOver$=r.fromEvent(n,"pointerdown").pipe(r.switchMap(()=>r.merge(r.fromEvent(n,"pointerup"),r.fromEvent(n,"pointercancel"),r.fromEvent(n,"contextmenu")).pipe(r.first(),r.delay(0),r.map(s=>{const a=n.getSelection();return a&&!a.isCollapsed?[s,a]:void 0}),r.filter(D))),r.takeUntil(r.merge(o,this.destroy$)))}}}const eo=t=>t.watch("isLoaded").pipe(r.switchMap(()=>{const e=t.renderer.getDocumentFrame(),n=e?.contentDocument||e?.contentWindow?.document;if(!e||!n)return r.NEVER;const i=new ji(e);return r.merge(i.selectionChange$.pipe(r.map(o=>{if(o?.toString())return{type:"change",selection:o}})),i.selectionOver$.pipe(r.map(([o,s])=>({type:"over",event:o,selection:s})))).pipe(r.takeUntil(t.unloaded$),r.endWith(void 0),r.finalize(()=>{i.destroy()}))}),r.distinctUntilChanged()),to=t=>e=>{const n=t(e);let i;const o=n.spineItemsManager.items$.pipe(r.switchMap(u=>{const p=u.map(g=>{const h=n.spineItemsManager.getSpineItemIndex(g)??0;return eo(g).pipe(r.map(m=>{if(m)return{...m,itemIndex:h}}))});return r.merge(...p)}),r.startWith(void 0),r.distinctUntilChanged(),r.tap(u=>{i=u}),r.shareReplay({refCount:!0,bufferSize:1})),s=o,a=o.pipe(r.map(u=>!!u),r.distinctUntilChanged(),r.filter(u=>u),r.share()),c=a.pipe(r.switchMap(()=>s),r.distinctUntilChanged(),r.filter(u=>!u),r.share()),l=o.pipe(r.filter(u=>u?.type==="over"),r.share()),d=n.context.watch("rootElement").pipe(r.filter(D),r.switchMap(u=>r.fromEvent(u,"pointerdown")),r.withLatestFrom(s),r.map(([,u])=>u),r.startWith(void 0),r.shareReplay({refCount:!0,bufferSize:1}));return r.merge(s,d).pipe(r.takeUntil(n.$.destroy$)).subscribe(),{...n,selection:{selection$:s,selectionStart$:a,selectionEnd$:c,selectionOver$:l,lastSelectionOnPointerdown$:d,getSelection:()=>i,createOrderedRangeFromSelection:Qi}}},vt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],no=t=>e=>{const n=t(e),i=new r.BehaviorSubject(e.theme??"bright"),o=()=>{const c=vt.find(l=>l.name===i.value);return`
216
+ `)}}),ri(a),oi(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:f})=>{f.style.opacity="0",c.values.layoutLayerTransition&&(f.style.transition="opacity 800ms")}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const w=a.spineItemsManager.get(f.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&w?.setAttribute("tab-index","0")});const l=a.spineItemsObserver.states$.pipe(b.filter(({isReady:f})=>f),b.tap(({item:f})=>{const S=f.renderer.documentContainer;S&&(S.style.opacity="1")})),u=c.values$.pipe(b.filter(({layoutAutoResize:f})=>f==="container"),b.switchMap(()=>a.context.watch("rootElement")),b.filter(O),b.switchMap(f=>te(f)),b.debounceTime(100),b.filter(O),b.tap(()=>{a?.layout()})),d=Qn(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(b.skip(1),b.tap(()=>{a.layout()}),b.takeUntil(a.$.destroy$)).subscribe();const p=a.spine.pages.pipe(b.shareReplay({refCount:!0,bufferSize:1})),g=si(a),h=ci(a),m=ii(a);return o.merge(l,d,u,p,g,h,m).pipe(b.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:a.spine.layout$,layoutInfo$:p,coordinates:Kn(a)}},li=t=>e=>{const n=t(e),i=new IntersectionObserver(a=>{a.forEach(c=>{const l=c.target,u=Array.from(l.contentDocument?.body.getElementsByTagName("audio")||[]);c.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(a=>{a.forEach(c=>{if(c.target.tagName==="video"){const l=c.target;c.isIntersecting?l.hasAttribute("autoplay")&&l.paused&&l.readyState>=2&&l.play().catch(console.error):(l.pause(),l.currentTime=0)}})},{threshold:.5});return n.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{const l=n.spineItemsManager.get(c)?.renderer.getDocumentFrame();if(!l)return;i.observe(l);const u=l.contentDocument?.body.getElementsByTagName("video"),d=Array.from(u||[]).map(p=>(s.observe(p),()=>s.unobserve(p)));a(()=>{i.unobserve(l),d.forEach(p=>{p()})})}),{...n,destroy:()=>{i.disconnect(),s.disconnect(),n.destroy()}}},Fe=t=>e=>e.pipe(o.switchMap(n=>t.pipe(o.filter(i=>i==="free"),o.first(),o.map(()=>n)))),Ce=({navigation$:t,navigationState$:e})=>t.pipe(Fe(e)),dt=t=>Ce(t).pipe(o.skip(1)),pt=t=>e=>e.pipe(o.takeUntil(dt(t))),ht=t=>t.navigation.navigation$.pipe(o.filter(e=>e.triggeredBy==="user"),Fe(t.navigation.navigationState$),o.map(e=>{const n=e.requestedPosition,i=e.requestedVisibleArea;return n&&i?t.navigation.navigationResolver.getBoundaryForPosition(n,i):void 0}),o.filter(e=>e!==void 0),o.map(e=>({boundary:e})),o.share()),ui=(t,e)=>t.links$.pipe(o.tap(n=>{if(!xe(n.target,"a")||n.type!=="click")return;const i=new URL(n.target.href),s=`${i.origin}${i.pathname}`;t.context.manifest?.spineItems.some(a=>a.href===s)&&e.goToUrl(i)})),_=F.namespace("navigation"),di=({position:t,spineItem:e,pageHeight:n,pageWidth:i,spineItemLocator:s})=>{let r=new C({x:t.x-i,y:t.y});return e.isUsingVerticalWriting()&&(r=new C({x:t.x,y:t.y+n})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},gt=({position:t,navigationResolver:e,computedPageTurnDirection:n,spineItemsManager:i,spineLocator:s,viewport:r})=>{const a=n,c=s.getSpineItemFromPosition(t)||i.get(0),l=t;if(!c)return l;const u=s.getSpineItemPositionFromSpinePosition(t,c),d=di({position:u,spineItem:c,pageHeight:r.pageSize.height,pageWidth:r.pageSize.width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,u)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):a==="horizontal"?new E({x:t.x-r.pageSize.width,y:0}):new E({y:t.y-r.pageSize.height,x:0})},pi=({position:t,spineItem:e,context:n,navigationResolver:i,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a,viewport:c,settings:l})=>{if(l.values.computedPageTurnMode==="scrollable"&&a==="vertical")return new E({x:t.x,y:t.y-c.pageSize.height});const u=gt({position:t,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&t.x===u.x)return i.getAdjustedPositionForSpread(u);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&t.x!==u.x)return i.getAdjustedPositionForSpread(n.isRTL()?new E({x:u.x+c.pageSize.width,y:u.y}):new E({x:u.x-c.pageSize.width,y:u.y}));if(a==="vertical"&&t.y!==u.y)return i.getAdjustedPositionForSpread(u);const d=gt({position:u,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return i.getAdjustedPositionForSpread(d)}return i.getAdjustedPositionForSpread(u)},hi=({position:t,spineItem:e,pageHeight:n,pageWidth:i,spineItemLocator:s})=>{let r=new C({x:t.x+i,y:t.y});return e.isUsingVerticalWriting()&&(r=new C({x:t.x,y:t.y-n})),s.getSpineItemClosestPositionFromUnsafePosition(r,e)},mt=({position:t,navigationResolver:e,computedPageTurnDirection:n,spineItemsManager:i,spineLocator:s,viewport:r})=>{const a=n,c=s.getSpineItemFromPosition(t)||i.get(0),l=t;if(!c)return l;const u=s.getSpineItemPositionFromSpinePosition(t,c),d=hi({position:u,spineItem:c,pageHeight:r.pageSize.height,pageWidth:r.pageSize.width,spineItemLocator:s.spineItemLocator});return e.arePositionsDifferent(d,u)?s.getSpinePositionFromSpineItemPosition({spineItemPosition:d,spineItem:c}):a==="horizontal"?new E({x:t.x+r.pageSize.width,y:0}):new E({y:t.y+r.pageSize.height,x:0})},gi=({position:t,spineItem:e,context:n,navigationResolver:i,spineItemsManager:s,spineLocator:r,computedPageTurnDirection:a,viewport:c,settings:l})=>{if(l.values.computedPageTurnMode==="scrollable"&&a==="vertical")return new E({x:t.x,y:t.y+c.pageSize.height});const u=mt({position:t,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});if(e?.isUsingVerticalWriting()&&t.x===u.x)return i.getAdjustedPositionForSpread(u);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&t.x!==u.x)return i.getAdjustedPositionForSpread(n.isRTL()?new E({x:u.x-c.pageSize.width,y:u.y}):new E({x:u.x+c.pageSize.width,y:u.y}));if(a==="vertical"&&t.y!==u.y)return i.getAdjustedPositionForSpread(u);const d=mt({position:u,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:s,spineLocator:r});return i.getAdjustedPositionForSpread(d)}return i.getAdjustedPositionForSpread(u)};class mi{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new L({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(),n=this.reader.spineItemsManager.get(e.spineItem);if(!n)return;const i=gi({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:n,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),n=this.reader.spineItemsManager.get(e.spineItem);if(!n)return;const i=pi({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:n,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}goToCfi(e,n={animate:!0}){return this.reader.navigation.navigate({animation:n.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...n}){const i=this.reader.spineItemsManager.get(e);if(i===void 0){_.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:i.index,...n})}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"){_.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"){_.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"){_.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){_.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:n,...i}){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:n});_.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:n,...i,position:s}),this.reader.navigation.navigate({position:s,...i})}goToAbsolutePageIndex({absolutePageIndex:e,...n}){const i=this.reader.spine.pages.fromAbsolutePageIndex(e);if(_.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...n,foundInfo:i}),i){const s=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:i.pageIndex,spineItemId:i.itemIndex});return this.reader.navigation.navigate({position:s,...n})}}}class fi extends D{constructor(e){super({lastDelta:{x:0,y:0},lastPosition:new L({x:0,y:0}),lastStartPosition:new L({x:0,y:0}),isStarted:!1}),this.reader=e,this.unlock=void 0}start(e){this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.mergeCompare({isStarted:!0,lastDelta:e,lastStartPosition:this.reader.navigation.controlledNavigationController.viewportPosition,lastPosition:this.reader.navigation.controlledNavigationController.viewportPosition})}stop(e){this.panMoveTo(e),this.mergeCompare({isStarted:!1}),this.unlock?.()}panMoveTo(e){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){_.warn("pan control is not available on free page turn mode");return}if(!this.value.isStarted){_.error("Pan navigator is not started");return}const n=this.reader.settings.values.computedPageTurnDirection;let i=this.reader.navigation.getNavigation().position;if(e){const s=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,r=Math.floor(e.x)-(this.value.lastDelta?.x||0),a=Math.floor(e.y)-(this.value.lastDelta?.y||0),c=Math.floor(n==="horizontal"?this.value.lastPosition.x-r/s:0),l=Math.floor(n==="horizontal"?0:this.value.lastPosition.y-a/s);i=new L({x:c,y:l}),this.mergeCompare({lastDelta:e})}else i=this.value.lastPosition;this.mergeCompare({lastPosition:i}),this.reader.navigation.navigate({position:i,animation:!1})}}class R{constructor(){this.isDestroyed=!1,this.destroySubject=new o.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const Si=500;class yi extends R{constructor(e,n){super(),this.scrollNavigationController=e,this.lock=n,this.navigationSubject=new o.Subject,this.navigation$=this.navigationSubject.asObservable();const i=this.scrollNavigationController.userScroll$.pipe(o.exhaustMap(s=>{const r=this.lock();return o.merge(this.scrollNavigationController.userScroll$,o.of(s)).pipe(o.debounceTime(Si,o.animationFrameScheduler),o.first(),o.tap(()=>{const a=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:"scroll",position:a})}),o.finalize(()=>{r()}))}));o.merge(i).pipe(o.takeUntil(this.destroy$)).subscribe()}}const bi=t=>t.pagination.state$.pipe(o.withLatestFrom(t.context.manifest$,t.settings.values$),o.map(([e,{spineItems:n,readingDirection:i},{computedPageTurnDirection:s}])=>{const r=n.length??0,a=e.beginSpineItemIndex===0,c=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"&&!a,canGoBottomSpineItem:s==="vertical"&&!c,canGoLeftSpineItem:s!=="vertical"&&(i==="ltr"&&!a||i==="rtl"&&!l),canGoRightSpineItem:s!=="vertical"&&(i==="ltr"&&!c||i==="rtl"&&!u)}}),o.distinctUntilChanged($.isShallowEqual)),Ii=({reader:t,duration:e})=>n=>{let i;const s=()=>{i?.(),i=void 0};return n.pipe(o.tap(()=>{i||(i=t?.navigation.lock())}),o.throttleTime(e,void 0,{trailing:!0,leading:!0}),o.tap(s),o.finalize(s))},vi=t=>e=>{const n=t(e),i=bi(n),s=ht(n),r=new mi(n),a=new fi(n),c=new yi(n.navigation.scrollNavigationController,n.navigation.lock),l=ui(n,r),u=c.navigation$.pipe(o.tap(g=>{n.navigation.navigate(g)}));return o.merge(l,u).pipe(o.takeUntil(n.$.destroy$)).subscribe(),{...n,load:g=>{const{cfi:h,...m}=g;n.load(m),h&&r.goToCfi(h,{animate:!1})},destroy:()=>{c.destroy(),n.destroy()},navigation:{...n.navigation,state$:i,outOfSpineBoundary$:s,throttleLock:({duration:g,trigger:h})=>h.pipe(Ii({duration:g,reader:n})),panNavigator:a,turnBottom:r.turnBottom.bind(r),turnTop:r.turnTop.bind(r),turnLeftOrTop:r.turnLeftOrTop.bind(r),turnRightOrBottom:r.turnRightOrBottom.bind(r),turnLeft:r.turnLeft.bind(r),turnRight:r.turnRight.bind(r),goToCfi:r.goToCfi.bind(r),goToUrl:r.goToUrl.bind(r),goToSpineItem:r.goToSpineItem.bind(r),goToNextSpineItem:r.goToNextSpineItem.bind(r),goToPreviousSpineItem:r.goToPreviousSpineItem.bind(r),goToLeftOrTopSpineItem:r.goToLeftOrTopSpineItem.bind(r),goToRightOrBottomSpineItem:r.goToRightOrBottomSpineItem.bind(r),goToTopSpineItem:r.goToTopSpineItem.bind(r),goToBottomSpineItem:r.goToBottomSpineItem.bind(r),goToLeftSpineItem:r.goToLeftSpineItem.bind(r),goToRightSpineItem:r.goToRightSpineItem.bind(r),goToPageOfSpineItem:r.goToPageOfSpineItem.bind(r),goToAbsolutePageIndex:r.goToAbsolutePageIndex.bind(r)}}},x=t=>H.generate({spineIndex:t.index,spineId:t.id}),ft=({nodeOrRange:t,offset:e,item:n})=>{const i="ownerDocument"in t?t.ownerDocument:t.startContainer.ownerDocument;return!i||!i?.documentElement||t===i?x(n):mn(t)?H.generate({start:{node:t.startContainer,offset:t.startOffset,spineIndex:n.index,spineId:n.id},end:{node:t.endContainer,offset:t.endOffset,spineIndex:n.index,spineId:n.id}}):H.generate({node:t,offset:e,spineIndex:n.index,spineId:n.id})},ae=({spineItem:t,pageNode:e})=>ft({nodeOrRange:e.node,offset:e.offset,item:t}).trim(),St=(t,e)=>ft({nodeOrRange:t,item:e}),wi=t=>t.index.toString(),yt=t=>t[0]?.index===6&&t.length>1,ce=t=>{const e=H.parse(t);return H.isIndirectionOnly(e)},Pi=t=>Array.isArray(t)?t[0]&&yt(t[0])?t[0]:void 0:t.parent[0]&&yt(t.parent[0])?t.parent[0]:void 0,le=t=>{const e=H.parse(t),r=((Pi(e)??[])[1]?.index??2)/2-1,a=H.isParsedCfiRange(e),c=a?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:a,itemIndex:r,offset:c??0}},Ee=({cfi:t,spineItemsManager:e})=>{const{itemIndex:n,...i}=le(t),s=e.get(n);if(!s)return{...i,itemIndex:n,node:null};const r=s.renderer.getDocumentFrame();if(r instanceof HTMLIFrameElement){const a=r.contentWindow?.document;if(a)try{const c=H.resolve(t,a,{throwOnError:!0});return{...i,itemIndex:n,node:c.isRange?c.node?.startContainer??null:c.node??null,isCfiRange:c.isRange,range:c.isRange?c.node:void 0,offset:Array.isArray(c.offset)?c.offset.at(-1):c.offset,spineItem:s}}catch(c){return F.warn(`Error resolving cfi: ${t}.`),F.warn(c),{...i,spineItem:s,itemIndex:n,node:null}}}return{...i,itemIndex:n,spineItem:s,node:null}},Ti=(t,e)=>{if("cfi"in e){const{itemIndex:r,...a}=t.cfi.parseCfi(e.cfi);return{...e,...a,itemIndex:r,node:null}}const n=t.spineItemsManager.get(e);if(!n)throw new Error("Spine item not found");const i=x(n.item);return{...t.cfi.parseCfi(i),cfi:x(n.item),itemIndex:n.index,node:null}},bt=(t,e)=>{let n=t?.itemPageIndex;const{itemIndex:i,...s}=e.cfi.parseCfi(t.cfi),r=e.spineItemsManager.get(i);return r?we().pipe(o.withLatestFrom(r.isReady$),o.map(([,a])=>{const{node:c=null,offset:l,range:u}=a?e.cfi.resolveCfi({cfi:t.cfi}):{};r.renditionLayout!=="pre-paginated"&&c&&(n=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,l??0,r)??n);let p=t?.absolutePageIndex;return n===void 0&&(n=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:n,spineItemOrId:r})??t?.absolutePageIndex,{...t,...s,range:u,itemIndex:i,node:c,startOffset:l,absolutePageIndex:p,itemPageIndex:n}})):o.of({...t,itemIndex:i,...s})};class It{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=n=>{const i=this.locatorsByKey.get(n);i&&(i.observerCount--,i.observerCount===0&&this.locatorsByKey.delete(n))},this.locate=(n,i)=>{const s={resource:n,meta:Ti(this.reader,n)};return Pe(()=>{const r=this.reader.spineItemsManager.get(s.meta.itemIndex??0),a=r?.renditionLayout==="reflowable",c=i.mode==="shallow"||!a||!r?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([r.index]),l="cfi"in n?n.cfi:void 0,u=l?this.locatorsByKey.get(l):void 0,d=g=>g.pipe(o.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{c()},1e3)}));if(l&&u)return u.observerCount++,d(u.consolidate$.pipe(o.map(({resource:g,meta:h})=>({resource:g,meta:h}))));const p=this.reader.spine.layout$.pipe(o.debounceTime(10),o.startWith(s),o.switchScan(g=>bt(g.meta,this.reader).pipe(o.map(h=>({...g,meta:h}))),s),o.shareReplay({refCount:!0,bufferSize:1}));return l&&this.locatorsByKey.set(l,{observerCount:1,consolidate$:p}),d(p)})}}locateResource(e,n){return Array.isArray(e)?Pe(()=>o.combineLatest(e.map(i=>this.locate(i,n??{}))).pipe(o.defaultIfEmpty([]))):this.locate(e,n??{})}}const $i=F.namespace("spine"),vt=({position:t,pageSize:e})=>new it({...t,left:t.x,top:t.y,width:e.width,height:e.height,bottom:t.y+e.height,right:t.x+e.width}),Mi=10,Fi=t=>{const{spineItem:e,...n}=t;if(!t.spineItem.value.isLoaded)return{...n,firstVisibleNode:void 0};const s=t.spineItem.renderer?.getDocumentFrame()?.contentWindow?.document;return!s||s.body===null?{...n,firstVisibleNode:void 0}:{...n,firstVisibleNode:cn(s,t.layout)}},Ci=t=>new o.Observable(e=>{if(t.length===0){e.next([]),e.complete();return}let n,i=0;const s=new Array(t.length),r=()=>{n!==void 0&&(cancelAnimationFrame(n),n=void 0)},a=()=>{n=void 0;let l=0;for(;i<t.length&&l<Mi;){const u=t[i];if(!u){i=t.length;break}s[i]=Fi(u),i+=1,l+=1}if(i>=t.length){e.next(s),e.complete();return}c()},c=()=>{n=requestAnimationFrame(a)};return c(),()=>{r()}}),W=class W extends D{constructor(e,n,i,s,r,a){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=n,this.spineItemLocator=i,this.context=s,this.locator=r,this.viewport=a,this.fromSpineItemPageIndex=(c,l)=>W.fromSpineItemPageIndex(this.value,c,l),this.fromNextPageWithinSameSpineItem=c=>W.fromNextPageWithinSameSpineItem(this.value,c),this.fromAbsolutePageIndex=c=>W.fromAbsolutePageIndex(this.value,c),this.observeFromAbsolutePageIndex=c=>this.pipe(o.map(()=>this.fromAbsolutePageIndex(c))),this.layout$=e.layout$.pipe(o.withLatestFrom(a),o.switchMap(([,{pageSize:c}])=>{const l=n.items.reduce((u,d,p)=>{for(let g=0;g<d.numberOfPages;g+=1){const h=i.getSpineItemPositionFromPageIndex({spineItem:d,pageIndex:g}),m=r.getSpinePositionFromSpineItemPosition({spineItem:d,spineItemPosition:h}),f=u.length;u.push({absoluteLayout:vt({pageSize:c,position:m}),layout:new nt({left:h.x,right:h.x+c.width,top:h.y,bottom:h.y+c.height,width:c.width,height:c.height,x:h.x,y:h.y}),itemIndex:p,absolutePageIndex:f,spineItem:d,pageIndex:g})}return u},[]);return Ci(l)}),o.map(c=>($i.info("Pages layout",c),{pages:c})),o.share()),this.layout$.pipe(o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}};W.fromSpineItemPageIndex=(e,n,i)=>{const s=typeof n=="number"?n:n.index;return e.pages.find(r=>r.itemIndex===s&&r.pageIndex===i)},W.fromNextPageWithinSameSpineItem=(e,n)=>W.fromSpineItemPageIndex(e,n.itemIndex,n.pageIndex+1),W.fromAbsolutePageIndex=(e,n)=>e.pages.find(i=>i.absolutePageIndex===n);let q=W;const K=t=>{const e=t.indexOf("#");return e>=0?t.substring(0,e):t},wt=t=>{if(!t)return;const e=t.indexOf("#");return e<0?void 0:t.substring(e+1)||void 0},Ei=t=>{try{return decodeURIComponent(t)}catch{return t}},Pt=(t,e=[])=>t.flatMap(n=>{const i=[...e,{title:n.title,path:n.path}],s=n.href||n.path;return[{chain:i,href:s,anchorId:wt(n.href)??wt(n.path)},...Pt(n.contents,i)]}),Li=t=>{const e=new Map;return t.spineItems.forEach((n,i)=>{e.has(n.href)||e.set(n.href,i)}),e},Ni=(t,e)=>{const n=Li(e);return Pt(t).map(i=>{const s=K(i.href),r=n.get(s)??-1;return{...i,hrefWithoutAnchor:s,spineItemIndex:r}})},Ai=({manifest:t,tocIndex:e})=>{const n=new Map;e.forEach((r,a)=>{const c=n.get(r.hrefWithoutAnchor);if(c){c.push(a);return}n.set(r.hrefWithoutAnchor,[a])});const i=new Map,s=new Map;for(const r of t.spineItems){if(i.has(r.href))continue;const a=K(r.href);let c=s.get(a);if(!c){const l=[];for(const[u,d]of n)Ri(a,u)&&l.push(...d);l.sort((u,d)=>u-d),c=l.map(u=>e[u]),s.set(a,c)}i.set(r.href,c)}return i},Ri=(t,e)=>t===e||t.endsWith(e)||e.endsWith(t),Di=(t,e)=>{const n=t.endsWith(e),i=t.substring(0,t.lastIndexOf("/")),s=e.substring(0,e.lastIndexOf("/")),r=i!==""&&i.endsWith(s);return n||r},Tt=t=>{const[e,...n]=t;if(!e)return;const i={title:e.title,path:e.path};let s=i;for(const r of n){const a={title:r.title,path:r.path};s.subChapter=a,s=a}return i},Oi=({doc:t,node:e,offset:n})=>{const i=t.createRange();if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.CDATA_SECTION_NODE||e.nodeType===Node.COMMENT_NODE){const s=e,r=Math.max(0,Math.min(n,s.length));i.setStart(s,r)}else{const s=e.childNodes.length,r=Math.max(0,Math.min(n,s));i.setStart(e,r)}return i.collapse(!0),i},Vi=({rangeToTest:t,upperBoundRange:e})=>t.compareBoundaryPoints(Range.START_TO_START,e)<0,ki=t=>{const e=t.createRange(),n=t.body??t.documentElement;if(n)return e.selectNodeContents(n),e.collapse(!1),e},Ui=({anchorNode:t,nextPageNode:e})=>t===e||t.contains(e),$t=({node:t,offset:e,candidates:n,spineItem:i,nextPageEntry:s})=>{if(!t||e===void 0||!i||n.length===0)return;const r=i.renderer.getDocumentFrame()?.contentDocument;if(!r||t.ownerDocument!==r)return;const a=s?.firstVisibleNode?.node,c=s?.firstVisibleNode?.offset,l=s?a!==void 0&&c!==void 0&&a.ownerDocument===r?Oi({doc:r,node:a,offset:c}):void 0:ki(r);if(!l)return;const u=s!==void 0&&a!==void 0&&a.ownerDocument===r;let d,p,g;for(const m of n){if(!m.anchorId){g=m.chain;continue}const f=r.getElementById(Ei(m.anchorId));if(!f||u&&Ui({anchorNode:f,nextPageNode:a}))continue;const S=r.createRange();S.setStartBefore(f),S.collapse(!0),Vi({rangeToTest:S,upperBoundRange:l})&&(!p||S.compareBoundaryPoints(Range.START_TO_START,p)>0)&&(d=m.chain,p=S)}const h=d??g;return h?Tt(h):void 0},_i=({candidate:t,hrefHasAnchor:e})=>{if(e||!t.anchorId)return!1;const n=t.chain[t.chain.length-1],i=t.chain[t.chain.length-2];return!n||!i?!1:K(n.path)===K(i.path)},zi=({href:t,tocIndex:e,manifest:n})=>{const i=K(t),s=t.includes("#"),r=n.spineItems.findIndex(c=>c.href===i);let a;for(const c of e)Di(i,c.hrefWithoutAnchor)&&(r<c.spineItemIndex||_i({candidate:c,hrefHasAnchor:s})||(a=c.chain));return a},Wi=(t,e,n)=>{const{href:i}=n,s=zi({href:i,tocIndex:e,manifest:t});return s?Tt(s):void 0},Bi=(t,e)=>t?t.spineItems.reduce((i,s)=>(i[s.id]=Wi(t,e,s),i),{}):{},Hi=(t,e,n)=>t+e*n,xi=(t,e,n)=>{const{height:i,width:s}=n.layoutInfo,{top:r,left:a}=t.spine.getSpineItemSpineLayoutInfo(n);return t.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-r+t.viewport.absoluteViewport.height)/i)):Math.max(0,Math.min(1,(e.x-a+t.viewport.absoluteViewport.width)/s))},qi=(t,e,n,i,s,r)=>s.isReady$.pipe(o.first(),o.withLatestFrom(t.layoutInfo$),o.map(([a,c])=>{const l=r.renditionLayout==="pre-paginated",u=r.spineItems.length||0,d=r.spineItems.slice(0,e).reduce((w,T)=>w+(T.progressionWeight??0),0)||0,p=t.spineItemsManager.getSpineItemIndex(s)??0,g=r.spineItems.length??0,h=c.pages.filter(w=>w.itemIndex===p).length??0,m=r.spineItems[e]?.progressionWeight??(p+1)/g;let f=(n+1)*(m/h);!l&&s.renditionLayout==="reflowable"&&!a&&(f=0);let S=d+f;return r.renditionFlow==="scrolled-continuous"&&(a?f=xi(t,i,s):f=0,S=Hi(d,m,f)),e===u-1&&n===h-1&&S>.99?1:S})),Yi={tocCandidatesBySpineHref:new Map,chaptersInfo:{}},Xi=({beginItem:t,endItem:e,paginationInfo:n,chaptersData:i,pagesState:s})=>{const r=t&&n.beginPageIndexInSpineItem!==void 0?q.fromSpineItemPageIndex(s,t.index,n.beginPageIndexInSpineItem):void 0,a=r?q.fromNextPageWithinSameSpineItem(s,r):void 0,c=e&&n.endPageIndexInSpineItem!==void 0?q.fromSpineItemPageIndex(s,e.index,n.endPageIndexInSpineItem):void 0,l=c?q.fromNextPageWithinSameSpineItem(s,c):void 0,u=t?$t({node:r?.firstVisibleNode?.node,offset:r?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(t.item.href)??[],spineItem:t,nextPageEntry:a}):void 0,d=e?$t({node:c?.firstVisibleNode?.node,offset:c?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(e.item.href)??[],spineItem:e,nextPageEntry:l}):void 0;return{beginChapterInfo:u??(t?i.chaptersInfo[t.item.id]:void 0),beginSpineItemReadingDirection:t?.readingDirection,beginAbsolutePageIndex:r?.absolutePageIndex,endChapterInfo:d??(e?i.chaptersInfo[e.item.id]:void 0),endSpineItemReadingDirection:e?.readingDirection,endAbsolutePageIndex:c?.absolutePageIndex}},Gi=({items:t,pagesState:e})=>{const n=t.map(()=>0);for(const i of e.pages)n[i.itemIndex]=(n[i.itemIndex]??0)+1;return{numberOfPagesPerItems:n,numberOfTotalPages:e.pages.length}},Zi=(t,e)=>t.numberOfTotalPages!==e.numberOfTotalPages||t.numberOfPagesPerItems.length!==e.numberOfPagesPerItems.length?!1:t.numberOfPagesPerItems.every((n,i)=>n===e.numberOfPagesPerItems[i]),Ji=({reader:t,paginationInfo:e,navigationPosition:n,manifest:i})=>{const s=t.spineItemsManager.get(e.endSpineItemIndex);return s?qi(t,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,n,s,i):o.of(0)},Ki=t=>t.context.manifest$.pipe(o.map(e=>{if(!e)return Yi;const n=Ni(e.nav?.toc??[],e);return{tocCandidatesBySpineHref:Ai({manifest:e,tocIndex:n}),chaptersInfo:Bi(e,n)}})),Qi=t=>({beginSpineItemIndex:t.beginSpineItemIndex,beginPageIndexInSpineItem:t.beginPageIndexInSpineItem,endSpineItemIndex:t.endSpineItemIndex,endPageIndexInSpineItem:t.endPageIndexInSpineItem}),ji=t=>{const e=t.pagination.state$,n=t.spine.pages.layout$,i=Ki(t).pipe(o.shareReplay({bufferSize:1,refCount:!0})),s=e.pipe(o.map(Qi),o.distinctUntilChanged($.isShallowEqual)),r=o.combineLatest([s,i,n]).pipe(o.map(([p,g,h])=>{const m=t.spineItemsManager.get(p.beginSpineItemIndex),f=t.spineItemsManager.get(p.endSpineItemIndex);return Xi({beginItem:m,endItem:f,paginationInfo:p,chaptersData:g,pagesState:h})}),o.shareReplay({bufferSize:1,refCount:!0})),a=t.settings.watch(["computedSpreadMode"]).pipe(o.map(p=>p.computedSpreadMode??!1),o.distinctUntilChanged()),c=o.combineLatest([n,t.spineItemsManager.items$]).pipe(o.map(([p,g])=>Gi({items:g,pagesState:p})),o.distinctUntilChanged(Zi)),l=o.combineLatest([e,a,r,c]).pipe(o.map(([p,g,h,m])=>({...p,...h,isUsingSpread:g,...m}))),u=Ce(t.navigation).pipe(o.map(({position:p})=>p),o.distinctUntilChanged($.isShallowEqual)),d=o.combineLatest([e,t.layout$,u,t.context.manifest$]).pipe(o.switchMap(([p,g,h,m])=>Ji({reader:t,paginationInfo:p,navigationPosition:h,manifest:m})),o.map(p=>({percentageEstimateOfBook:p})));return o.combineLatest([l,d]).pipe(o.map(([p,g])=>({...p,...g})),o.distinctUntilChanged($.isShallowEqual),o.auditTime(5))},Mt=t=>e=>{const n=t(e),i=new o.BehaviorSubject({...n.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),s=new It(n),r=ji(n).pipe(o.tap(a=>F.log("Pagination",a))).subscribe(i);return{...n,locateResource:s.locateResource.bind(s),destroy:()=>{r.unsubscribe(),n.destroy()},pagination:{...n.pagination,get state(){return i.value},get state$(){return i}}}},eo=t=>({put:(r,a)=>new Promise((c,l)=>{const u=t.transaction(["store"],"readwrite");u.onerror=g=>{l(g)},u.oncomplete=()=>{c()};const p=u.objectStore("store").put(a,r);p.onsuccess=()=>{c()},p.onerror=g=>{l(g)}}),keys:()=>new Promise((r,a)=>{const c=t.transaction(["store"],"readonly");c.onerror=p=>{a(p)};const u=c.objectStore("store").openKeyCursor(),d=[];u.onsuccess=()=>{const p=u.result;if(!p){r(d);return}d.push(p.key),p.continue()},u.onerror=()=>{a(u.error)}}),get:r=>new Promise((a,c)=>{const l=t.transaction(["store"],"readwrite"),d=l.objectStore("store").get(r);d.onsuccess=()=>{let p=d.result;p===void 0&&(p=null),a(p)},l.onerror=()=>{c(d.error)}}),remove:r=>new Promise((a,c)=>{const l=t.transaction(["store"],"readwrite"),d=l.objectStore("store").delete(r);l.onerror=()=>{c(d.error)},l.oncomplete=()=>{a()},l.onabort=()=>{const p=d.error?d.error:d.transaction?.error;c(p)}})}),Le=async t=>new Promise((e,n)=>{const i=window.indexedDB.open(t);i.onerror=s=>{n(s)},i.onsuccess=()=>{e(eo(i.result))},i.onupgradeneeded=()=>{i.result.createObjectStore("store")}}),to=t=>{let e=Date.now().toString();const n=new o.Subject,i=l=>{if(typeof l=="string"||typeof l=="object"){const u=typeof l=="object"?l.id:l;return t.manifest?.spineItems.find(d=>d.id===u)}return t.manifest?.spineItems[l]},s=async(l,u)=>{const d=i(l);if(!d)return new Response("Item not found",{status:404});const g=await(await Le("prose-reader")).get(`${e}_${d.id}`);if(g)return new Response(g,{status:200});const h=u&&await u(d)||await fetch(d.href);return r(d,h.clone()),h},r=(l,u)=>{n.next({id:l,data:u})};n.asObservable().pipe(b.mergeMap(({id:l,data:u})=>{const d=i(l);return d?o.from(o.forkJoin([Le("prose-reader"),o.from(u.blob())])).pipe(b.switchMap(([p,g])=>o.from(p.put(`${e}_${d.id}`,g))),b.catchError(p=>(F.error(p),o.EMPTY))):o.EMPTY}),b.takeUntil(t.destroy$)).subscribe();const a=t.manifest$.pipe(b.tap(()=>{e=Date.now().toString()}));return o.merge(a).pipe(b.switchMap(()=>(F.debug("Cleanup up old cache..."),o.from(Le("prose-reader")).pipe(b.switchMap(l=>o.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 o.from(Promise.all(d))}))),b.catchError(l=>(F.error(l),o.EMPTY))))),b.takeUntil(t.destroy$)).subscribe(),{get:s,destroy:()=>{n.complete()}}},no=t=>e=>{const n=t(e),i=to(n.context);return{...n,destroy:()=>{i.destroy(),n.destroy()}}},io=(t,e)=>{const n=t.node.ownerDocument?.createRange(),i=t.node.compareDocumentPosition(e.node);if(n){try{if(i&Node.DOCUMENT_POSITION_PRECEDING)n.setStart(e.node,e.offset||0),n.setEnd(t.node,t.offset||0);else if(i&Node.DOCUMENT_POSITION_FOLLOWING)n.setStart(t.node,t.offset||0),n.setEnd(e.node,e.offset||0);else{const s=Math.min(t.offset||0,e.offset||0),r=Math.max(t.offset||0,e.offset||0);n.setStart(t.node,s),n.setEnd(t.node,r)}}catch(s){F.warn("Failed to create range from selection",s,{anchor:t,focus:e})}return n}},oo=({selection:t,spineItem:e})=>{const{anchorNode:n,anchorOffset:i,focusNode:s,focusOffset:r}=t;if(!(!n||!s))try{return io({node:n,offset:i},{node:s,offset:r})}catch(a){F.warn("Failed to create range from selection",a,{selection:t,spineItem:e});return}};class ro extends R{constructor(e){super();const n=e.contentDocument||e.contentWindow?.document;if(!n)this.selectionChange$=o.NEVER,this.selectionOver$=o.NEVER;else{const i=Te(n.body,{childList:!0,subtree:!0}).pipe(o.filter(r=>!!r.find(a=>a.type==="childList"&&a.removedNodes.length))),s=e.parentElement?Te(e.parentElement,{childList:!0}).pipe(o.filter(r=>!!r.find(a=>Array.from(a.removedNodes).includes(e)))):o.of(null);this.selectionChange$=o.merge(o.fromEvent(n,"selectionchange"),i).pipe(o.map(()=>n.getSelection()),o.takeUntil(o.merge(s,this.destroy$)),o.endWith(null)),this.selectionOver$=o.fromEvent(n,"pointerdown").pipe(o.switchMap(()=>o.merge(o.fromEvent(n,"pointerup"),o.fromEvent(n,"pointercancel"),o.fromEvent(n,"contextmenu")).pipe(o.first(),o.delay(0),o.map(r=>{const a=n.getSelection();return a&&!a.isCollapsed?[r,a]:void 0}),o.filter(O))),o.takeUntil(o.merge(s,this.destroy$)))}}}const so=t=>t.watch("isLoaded").pipe(o.switchMap(()=>{const e=t.renderer.getDocumentFrame(),n=e?.contentDocument||e?.contentWindow?.document;if(!e||!n)return o.NEVER;const i=new ro(e);return o.merge(i.selectionChange$.pipe(o.map(s=>{if(s?.toString())return{type:"change",selection:s}})),i.selectionOver$.pipe(o.map(([s,r])=>({type:"over",event:s,selection:r})))).pipe(o.takeUntil(t.unloaded$),o.endWith(void 0),o.finalize(()=>{i.destroy()}))}),o.distinctUntilChanged()),ao=t=>e=>{const n=t(e);let i;const s=n.spineItemsManager.items$.pipe(o.switchMap(d=>{const p=d.map(g=>{const h=n.spineItemsManager.getSpineItemIndex(g)??0;return so(g).pipe(o.map(m=>{if(m)return{...m,itemIndex:h}}))});return o.merge(...p)}),o.startWith(void 0),o.distinctUntilChanged(),o.tap(d=>{i=d}),o.shareReplay({refCount:!0,bufferSize:1})),r=s,a=s.pipe(o.map(d=>!!d),o.distinctUntilChanged(),o.filter(d=>d),o.share()),c=a.pipe(o.switchMap(()=>r),o.distinctUntilChanged(),o.filter(d=>!d),o.share()),l=s.pipe(o.filter(d=>d?.type==="over"),o.share()),u=n.context.watch("rootElement").pipe(o.filter(O),o.switchMap(d=>o.fromEvent(d,"pointerdown")),o.withLatestFrom(r),o.map(([,d])=>d),o.startWith(void 0),o.shareReplay({refCount:!0,bufferSize:1}));return o.merge(r,u).pipe(o.takeUntil(n.$.destroy$)).subscribe(),{...n,selection:{selection$:r,selectionStart$:a,selectionEnd$:c,selectionOver$:l,lastSelectionOnPointerdown$:u,getSelection:()=>i,createOrderedRangeFromSelection:oo}}},Ft=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],co=t=>e=>{const n=t(e),i=new o.BehaviorSubject(e.theme??"bright"),s=()=>{const c=Ft.find(l=>l.name===i.value);return`
217
217
  body {
218
218
  ${c!==void 0?`background-color: ${c.backgroundColor} !important;`:""}
219
219
  }
@@ -223,19 +223,19 @@
223
223
  color: ${c.foregroundColor};
224
224
  }
225
225
  `:""}
226
- `},s=({container:c})=>{const l=vt.find(d=>d.name===i.value);return l&&c.style.setProperty("background-color",l.backgroundColor),()=>{}},a=()=>{n.spineItemsManager.items.forEach(c=>{const l=c.renderer.getDocumentFrame();l&&V(l,"prose-reader-theme",o()),s({container:c.element})})};return n.hookManager.register("item.onDocumentLoad",({itemId:c})=>{const l=n.spineItemsManager.get(c);if(l?.renditionLayout!=="pre-paginated"){const d=l?.renderer.getDocumentFrame();d&&V(d,"prose-reader-theme",o())}}),n.spineItemsManager.items$.pipe(I.tap(c=>c.map(({element:l})=>s({container:l}))),I.takeUntil(n.$.destroy$)).subscribe(),i.pipe(I.tap(()=>{a()}),I.takeUntil(n.$.destroy$)).subscribe(),{...n,theme:{set:c=>{c!==i.value&&i.next(c)},get:()=>i.value,$:{theme$:i.asObservable()}}}},io=t=>e=>{const n=t(e);return{...n,utils:{isOrIsWithinValidLink:s=>!!(me(s)&&(s.nodeName==="a"?s:s.closest("a"))?.getAttribute("href")),injectScopedCSS:(s,a,c)=>{const l=c.replace("${id}",n.id);return fe(s,`${a}-${n.id}`,l)}}}};navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const oo=t=>e=>t(e),Pt=(t,e,n)=>{const{clientWidth:i,clientHeight:o}=n.value.element,s={maxX:0,minX:i*(1-e),maxY:0,minY:o*(1-e)};return{x:Math.min(Math.max(t.x,s.minX),s.maxX),y:Math.min(Math.max(t.y,s.minY),s.maxY)}},ro=(t,e,n)=>{n.style.transformOrigin="0 0";const i=`translate3d(${e.x}px, ${e.y}px, 0px)`,o=`scale(${t})`;n.style.transform=`${i} ${o}`},so=(t,e,n,i)=>{const o=e/t,s=n.clientWidth,a=n.clientHeight,c=s/2-i.x,l=a/2-i.y;return{x:i.x+c*(1-o),y:i.y+l*(1-o)}};class Tt{constructor(e){this.x=e.x,this.y=e.y}}class Le extends Tt{}class $t extends Tt{constructor(){super(...arguments),this.__symbol=Symbol("UnboundScrollPosition")}}class Mt extends O{constructor(e,n,i,o,s){super({element:void 0}),this.viewport=e,this.settings=n,this.hookManager=i,this.spine=o,this.context=s,this.navigateSubject=new r.Subject,this.scrollingSubject=new r.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:p})=>{const g=this.value.element;this.scrollingSubject.next(!0);const h=this.fromSpinePosition(p);g?.scrollTo({left:h.x,top:h.y,behavior:"instant"}),r.timer(1).pipe(r.tap(()=>{this.scrollingSubject.next(!1)}),r.takeUntil(r.merge(this.scrollingSubject.pipe(r.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const a=this.context.pipe(ee(["rootElement"]),r.tap(({rootElement:p})=>{if(!p)return;const g=document.createElement("div");g.setAttribute(`data-${rt}`,""),g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),c=r.combineLatest([n.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(r.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(r.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(r.startWith(!1),r.switchMap(()=>r.merge(r.of(!0),r.of(!1))),r.shareReplay(1));const d=r.merge(o.element$.pipe(r.filter(D),r.switchMap(p=>te(p))),o.element$.pipe(r.filter(D),r.switchMap(p=>r.fromEvent(p,"scroll"))),o.spineItemsObserver.itemResize$).pipe(r.switchMap(()=>r.timer(10).pipe(r.map(()=>!1),r.startWith(!0))),r.distinctUntilChanged(),r.startWith(!1)),u=r.combineLatest([d,this.isScrolling$]).pipe(r.map(([p,g])=>p||g),r.shareReplay(1));this.userScroll$=this.watch("element").pipe(r.filter(D),r.switchMap(p=>n.watch(["computedPageTurnMode"]).pipe(r.switchMap(({computedPageTurnMode:g})=>g==="controlled"?r.NEVER:r.fromEvent(p,"scroll").pipe(r.withLatestFrom(u),r.filter(([,h])=>!h),r.map(([h])=>h))))),r.share()),r.merge(a,c,l).pipe(r.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){const n=this.viewport.scaleFactor;return new U({x:e.x/n,y:e.y/n})}fromSpinePosition(e){const n=this.viewport.scaleFactor;return new Le({x:e.x*n,y:e.y*n})}get scrollPosition(){const e=this.value.element;return new Le({x:e?.scrollLeft??0,y:e?.scrollTop??0})}}const ao=(t,e,n,i,o)=>{const s=t.clientWidth,a=t.clientHeight,c=t.scrollLeft,l=t.scrollTop,d=c+s/2-i,u=l+a/2-o,p=n/e,g=d*p,h=u*p,m=g-s/2+i,f=h-a/2+o;return new $t({x:m,y:f})},co=(t,e)=>{const n=e.viewport,i=e.navigation.scrollNavigationController,o=n.value.element,s=i.value.element,a=i.value.element,c=Math.round(n.scaleFactor*100)/100,l=o.offsetLeft,d=o.offsetTop,u=ao(s??an(),c,t,l,d),p=t<1?"down":"up";a?.setAttribute(`data-${E}-zooming-direction`,p),t<1?o.style.transformOrigin="top":t>1&&(o.style.transformOrigin=`${l}px ${d}px`),o.style.transform=`scale(${t})`;const g=i.fromScrollPosition(u);e.navigation.navigate({position:g})},ue=200;class lo extends O{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new r.Subject,this.exitSubject=new r.Subject;const n=this.enterSubject.pipe(r.switchMap(o=>{const{scale:s=1,animate:a=!1}=o??{},c=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${E}-zooming`,"true"),this.scrollNavigationController.value.element?.setAttribute(`data-${E}-zooming`,this.isControlled?"false":"true"),a&&this.isControlled&&(c.style.transition=`transform ${ue}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(s),s!==1&&this.isControlled?r.timer(o?.animate?ue:0).pipe(r.tap(()=>{this.reader.layout()})):r.EMPTY})),i=this.exitSubject.pipe(r.switchMap(o=>{const s=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${E}-zooming`,"false"),this.scrollNavigationController.value.element?.removeAttribute(`data-${E}-zooming-direction`),this.scrollNavigationController.value.element?.setAttribute(`data-${E}-zooming`,"false"),o?.animate&&this.isControlled&&(s.style.transition=`transform ${ue}ms`),this.updateZoom(1,{x:0,y:0}),s.style.transform="",this.mergeCompare({isZooming:!1}),r.timer(o?.animate?ue:0).pipe(r.tap(()=>{const a=this.reader.viewport.value.element;a.style.transformOrigin="",a.style.transition="",this.isControlled&&this.reader.layout()}),r.takeUntil(this.enterSubject))}));r.merge(n,i).pipe(r.takeUntil(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,n){this.isControlled&&(this.viewport.element.style.transition="",this.updateZoom(this.value.currentScale,e,{constraints:n?.constrain==="within-viewport"?(...i)=>Pt(...i,this.reader.viewport):void 0}))}scaleAt(e,n){this.viewport.element.style.transition="";const o=Math.ceil(e*100)/100;this.updateZoom(o,void 0,{constraints:n?.constrain==="within-viewport"?(...s)=>Pt(...s,this.reader.viewport):void 0})}updateZoom(e,n,i){if(this.isControlled){const o=n||so(this.value.currentScale,e,this.viewport.element,this.value.currentPosition),s=i?.constraints?.(o,e)??o;return this.applyZoom(e,s),this.mergeCompare({currentScale:e,currentPosition:s})}this.applyZoom(e,n??this.value.currentPosition),this.mergeCompare({currentScale:e})}applyZoom(e,n){this.isControlled?ro(e,n,this.viewport.element):co(e,this.reader)}get isControlled(){return this.reader.settings.values.computedPageTurnMode==="controlled"}get scrollNavigationController(){return this.reader.navigation.scrollNavigationController}get viewport(){return this.reader.viewport.value}}const uo=t=>e=>{const n=t(e),i=new lo(n),o=()=>{i.destroy(),n.destroy()},s=i;return{...n,destroy:o,zoom:{enter:i.enter.bind(i),scaleAt:i.scaleAt.bind(i),move:i.move.bind(i),exit:i.exit.bind(i),state$:s,get state(){return i.value}}}},Ft=t=>t?.renditionLayout==="pre-paginated"||t?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class po{constructor(){this.navigationSubject=new r.ReplaySubject(1),this.viewportStateSubject=new r.BehaviorSubject("free"),this.paginationSubject=new r.ReplaySubject,this.navigationIsLockedSubject=new r.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(r.distinctUntilChanged(),r.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(r.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(r.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}class Ct extends O{constructor(){super({assumedRenditionLayout:"reflowable"}),this.bridgeEvent=new po,this.manifest$=this.pipe(I.map(e=>e.manifest),I.filter(D),I.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const n=this.value,i=e.manifest??n.manifest,o={...n,...e,...e.manifest&&{isFullyPrePaginated:Ft(i),assumedRenditionLayout:i?.renditionLayout??"reflowable"}};this.mergeCompare(o)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}}class Lt extends O{constructor(e,n){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),r.combineLatest([e.watch(["manifest","hasVerticalWriting"]),n.watch(["computedPageTurnMode"])]).pipe(r.map(([{manifest:i,hasVerticalWriting:o},{computedPageTurnMode:s}])=>({hasVerticalWriting:o,renditionFlow:i?.renditionFlow,renditionLayout:i?.renditionLayout,computedPageTurnMode:s})),r.distinctUntilChanged(T.isShallowEqual),r.map(({hasVerticalWriting:i,renditionFlow:o,renditionLayout:s,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:o==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:o==="scrolled-continuous"||a==="scrollable"?["none"]:i?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:s==="reflowable"?["horizontal"]:["horizontal","vertical"]})),r.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Et{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(n=>n!==e),this.destroy(e.name,void 0,e)}register(e,n){const i={name:e,runFn:n};return this._hooks.push(i),()=>{this.deregister(i)}}execute(e,n,i){return this._hooks.filter(a=>e===a.name).map(a=>{let c=()=>r.of(void 0);const l=new r.Subject,d=g=>{c=g},u=()=>(l.next(),l.complete(),c()??r.of(void 0)),p=a.runFn({...i,destroy$:l.asObservable(),destroy:d});return this._hookExecutions.push({name:e,id:n,destroyFn:u,ref:a}),p})}destroy(e,n,i){const o=this._hookExecutions.filter(a=>i&&a.ref===i||e===a.name&&(!n||n&&n===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!o.includes(a));const s=o.map(({destroyFn:a})=>a());return r.combineLatest(s)}}const ho="[data-prose-reader-spine-item][data-is-ready=false]{pointer-events:none;user-select:none;-webkit-user-select:none}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true]{overflow:scroll}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true][data-prose-reader-zooming-direction=down]{overflow-x:auto}[data-prose-reader-scroll-navigator]{height:100%;width:100%;position:relative;overflow-y:scroll;overflow-x:hidden}[data-prose-reader-viewport]{background-color:#fff;position:relative;height:100%;width:100%}",go=t=>({x:-t.x,y:-t.y}),mo=t=>t instanceof DOMMatrix?new M({x:-t.e,y:-t.f}):new M({x:-t.x,y:-t.y}),Nt=C.namespace("navigation/ViewportNavigator");class Rt extends N{constructor(e,n,i,o,s){super(),this.settings=e,this.hookManager=n,this.context=i,this.spine=o,this.viewport=s,this.navigateSubject=new r.Subject,this.element$=new r.BehaviorSubject(document.createElement("div"));const a=this.spine.element$.pipe(r.filter(D),r.withLatestFrom(this.element$),r.tap(([u,p])=>{p.style.cssText=`
226
+ `},r=({container:c})=>{const l=Ft.find(u=>u.name===i.value);return l&&c.style.setProperty("background-color",l.backgroundColor),()=>{}},a=()=>{n.spineItemsManager.items.forEach(c=>{const l=c.renderer.getDocumentFrame();l&&k(l,"prose-reader-theme",s()),r({container:c.element})})};return n.hookManager.register("item.onDocumentLoad",({itemId:c})=>{const l=n.spineItemsManager.get(c);if(l?.renditionLayout!=="pre-paginated"){const u=l?.renderer.getDocumentFrame();u&&k(u,"prose-reader-theme",s())}}),n.spineItemsManager.items$.pipe(b.tap(c=>c.map(({element:l})=>r({container:l}))),b.takeUntil(n.$.destroy$)).subscribe(),i.pipe(b.tap(()=>{a()}),b.takeUntil(n.$.destroy$)).subscribe(),{...n,theme:{set:c=>{c!==i.value&&i.next(c)},get:()=>i.value,$:{theme$:i.asObservable()}}}},lo=t=>e=>{const n=t(e);return{...n,utils:{isOrIsWithinValidLink:r=>!!(me(r)&&(r.nodeName==="a"?r:r.closest("a"))?.getAttribute("href")),injectScopedCSS:(r,a,c)=>{const l=c.replace("${id}",n.id);return fe(r,`${a}-${n.id}`,l)}}}};navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const uo=t=>e=>t(e),Ct=(t,e,n)=>{const{clientWidth:i,clientHeight:s}=n.value.element,r={maxX:0,minX:i*(1-e),maxY:0,minY:s*(1-e)};return{x:Math.min(Math.max(t.x,r.minX),r.maxX),y:Math.min(Math.max(t.y,r.minY),r.maxY)}},po=(t,e,n)=>{n.style.transformOrigin="0 0";const i=`translate3d(${e.x}px, ${e.y}px, 0px)`,s=`scale(${t})`;n.style.transform=`${i} ${s}`},ho=(t,e,n,i)=>{const s=e/t,r=n.clientWidth,a=n.clientHeight,c=r/2-i.x,l=a/2-i.y;return{x:i.x+c*(1-s),y:i.y+l*(1-s)}};class Et{constructor(e){this.x=e.x,this.y=e.y}}class Ne extends Et{}class Lt extends Et{constructor(){super(...arguments),this.__symbol=Symbol("UnboundScrollPosition")}}class Nt extends D{constructor(e,n,i,s,r){super({element:void 0}),this.viewport=e,this.settings=n,this.hookManager=i,this.spine=s,this.context=r,this.navigateSubject=new o.Subject,this.scrollingSubject=new o.BehaviorSubject(!1),this.applyNavigationPosition=({position:p})=>{const g=this.value.element;if(!g)return;const h=this.fromSpinePosition(p);Math.round(h.x)===g.scrollLeft&&Math.round(h.y)===g.scrollTop||(this.scrollingSubject.next(!0),g.scrollTo({left:h.x,top:h.y,behavior:"instant"}),o.timer(1).pipe(o.tap(()=>{this.scrollingSubject.next(!1)}),o.takeUntil(o.merge(this.scrollingSubject.pipe(o.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{}))},this.isActive=()=>this.settings.values.computedPageTurnMode==="scrollable",this.getNavigationVisibleArea=()=>this.viewport.relativeViewport;const a=this.context.pipe(ee(["rootElement"]),o.tap(({rootElement:p})=>{if(!p)return;const g=document.createElement("div");g.setAttribute(`data-${at}`,""),g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),c=o.combineLatest([n.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(o.tap(this.applyNavigationPosition));this.isNavigating$=this.scrollingSubject.asObservable();const u=o.merge(s.element$.pipe(o.filter(O),o.switchMap(p=>te(p))),s.element$.pipe(o.filter(O),o.switchMap(p=>o.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(o.switchMap(()=>o.timer(10).pipe(o.map(()=>!1),o.startWith(!0))),o.distinctUntilChanged(),o.startWith(!1)),d=o.combineLatest([u,this.isNavigating$]).pipe(o.map(([p,g])=>p||g),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(O),o.switchMap(p=>n.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:g})=>g==="controlled"?o.NEVER:o.fromEvent(p,"scroll").pipe(o.withLatestFrom(d),o.filter(([,h])=>!h),o.map(([h])=>h))))),o.share()),o.merge(a,c,l).pipe(o.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){const n=this.viewport.scaleFactor;return new E({x:e.x/n,y:e.y/n})}fromSpinePosition(e){const n=this.viewport.scaleFactor;return new Ne({x:e.x*n,y:e.y*n})}get scrollPosition(){const e=this.value.element;return new Ne({x:e?.scrollLeft??0,y:e?.scrollTop??0})}}const go=(t,e,n,i,s)=>{const r=t.clientWidth,a=t.clientHeight,c=t.scrollLeft,l=t.scrollTop,u=c+r/2-i,d=l+a/2-s,p=n/e,g=u*p,h=d*p,m=g-r/2+i,f=h-a/2+s;return new Lt({x:m,y:f})},mo=(t,e)=>{const n=e.viewport,i=e.navigation.scrollNavigationController,s=n.value.element,r=i.value.element,a=i.value.element,c=Math.round(n.scaleFactor*100)/100,l=s.offsetLeft,u=s.offsetTop,d=go(r??hn(),c,t,l,u),p=t<1?"down":"up";a?.setAttribute(`data-${N}-zooming-direction`,p),t<1?s.style.transformOrigin="top":t>1&&(s.style.transformOrigin=`${l}px ${u}px`),s.style.transform=`scale(${t})`;const g=i.fromScrollPosition(d);e.navigation.navigate({position:g})},ue=200;class fo extends D{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new o.Subject,this.exitSubject=new o.Subject;const n=this.enterSubject.pipe(o.switchMap(s=>{const{scale:r=1,animate:a=!1}=s??{},c=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${N}-zooming`,"true"),this.scrollNavigationController.value.element?.setAttribute(`data-${N}-zooming`,this.isControlled?"false":"true"),a&&this.isControlled&&(c.style.transition=`transform ${ue}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(r),r!==1&&this.isControlled?o.timer(s?.animate?ue:0).pipe(o.tap(()=>{this.reader.layout()})):o.EMPTY})),i=this.exitSubject.pipe(o.switchMap(s=>{const r=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${N}-zooming`,"false"),this.scrollNavigationController.value.element?.removeAttribute(`data-${N}-zooming-direction`),this.scrollNavigationController.value.element?.setAttribute(`data-${N}-zooming`,"false"),s?.animate&&this.isControlled&&(r.style.transition=`transform ${ue}ms`),this.updateZoom(1,{x:0,y:0}),r.style.transform="",this.mergeCompare({isZooming:!1}),o.timer(s?.animate?ue:0).pipe(o.tap(()=>{const a=this.reader.viewport.value.element;a.style.transformOrigin="",a.style.transition="",this.isControlled&&this.reader.layout()}),o.takeUntil(this.enterSubject))}));o.merge(n,i).pipe(o.takeUntil(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,n){this.isControlled&&(this.viewport.element.style.transition="",this.updateZoom(this.value.currentScale,e,{constraints:n?.constrain==="within-viewport"?(...i)=>Ct(...i,this.reader.viewport):void 0}))}scaleAt(e,n){if(!this.value.isZooming)return;this.viewport.element.style.transition="";const s=Math.ceil(e*100)/100;this.updateZoom(s,void 0,{constraints:n?.constrain==="within-viewport"?(...r)=>Ct(...r,this.reader.viewport):void 0})}updateZoom(e,n,i){if(this.isControlled){const s=n||ho(this.value.currentScale,e,this.viewport.element,this.value.currentPosition),r=i?.constraints?.(s,e)??s;return this.applyZoom(e,r),this.mergeCompare({currentScale:e,currentPosition:r})}this.applyZoom(e,n??this.value.currentPosition),this.mergeCompare({currentScale:e})}applyZoom(e,n){this.isControlled?po(e,n,this.viewport.element):mo(e,this.reader),this.reader.viewport.layout()}get isControlled(){return this.reader.settings.values.computedPageTurnMode==="controlled"}get scrollNavigationController(){return this.reader.navigation.scrollNavigationController}get viewport(){return this.reader.viewport.value}}const So=t=>e=>{const n=t(e),i=new fo(n),s=()=>{i.destroy(),n.destroy()},r=i;return{...n,destroy:s,zoom:{enter:i.enter.bind(i),scaleAt:i.scaleAt.bind(i),move:i.move.bind(i),exit:i.exit.bind(i),state$:r,get state(){return i.value}}}},At=t=>t?.renditionLayout==="pre-paginated"||t?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class yo{constructor(){this.navigationSubject=new o.ReplaySubject(1),this.positionSubject=new o.ReplaySubject(1),this.viewportStateSubject=new o.BehaviorSubject("free"),this.paginationSubject=new o.ReplaySubject(1),this.pagination$=this.paginationSubject.asObservable(),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(o.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(o.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable(),this.position$=this.positionSubject.asObservable()}}class Rt extends D{constructor(){super({assumedRenditionLayout:"reflowable"}),this.bridgeEvent=new yo,this.manifest$=this.pipe(b.map(e=>e.manifest),b.filter(O),b.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const n=this.value,i=e.manifest??n.manifest,s={...n,...e,...e.manifest&&{isFullyPrePaginated:At(i),assumedRenditionLayout:i?.renditionLayout??"reflowable"}};this.mergeCompare(s)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}}class Dt extends D{constructor(e,n){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),o.combineLatest([e.watch(["manifest","hasVerticalWriting"]),n.watch(["computedPageTurnMode"])]).pipe(o.map(([{manifest:i,hasVerticalWriting:s},{computedPageTurnMode:r}])=>({hasVerticalWriting:s,renditionFlow:i?.renditionFlow,renditionLayout:i?.renditionLayout,computedPageTurnMode:r})),o.distinctUntilChanged($.isShallowEqual),o.map(({hasVerticalWriting:i,renditionFlow:s,renditionLayout:r,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:s==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:s==="scrolled-continuous"||a==="scrollable"?["none"]:i?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:r==="reflowable"?["horizontal"]:["horizontal","vertical"]})),o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Ot{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(n=>n!==e),this.destroy(e.name,void 0,e)}register(e,n){const i={name:e,runFn:n};return this._hooks.push(i),()=>{this.deregister(i)}}execute(e,n,i){return this._hooks.filter(a=>e===a.name).map(a=>{let c=()=>o.of(void 0);const l=new o.Subject,u=g=>{c=g},d=()=>(l.next(),l.complete(),c()??o.of(void 0)),p=a.runFn({...i,destroy$:l.asObservable(),destroy:u});return this._hookExecutions.push({name:e,id:n,destroyFn:d,ref:a}),p})}destroy(e,n,i){const s=this._hookExecutions.filter(a=>i&&a.ref===i||e===a.name&&(!n||n&&n===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!s.includes(a));const r=s.map(({destroyFn:a})=>a());return o.combineLatest(r)}}const bo="[data-prose-reader-spine-item][data-is-ready=false]{pointer-events:none;user-select:none;-webkit-user-select:none}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true]{overflow:scroll}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true][data-prose-reader-zooming-direction=down]{overflow-x:auto}[data-prose-reader-scroll-navigator]{height:100%;width:100%;position:relative;overflow-y:scroll;overflow-x:hidden}[data-prose-reader-viewport]{background-color:#fff;position:relative;height:100%;width:100%}",Io=t=>({x:-t.x,y:-t.y}),vo=t=>t instanceof DOMMatrix?new L({x:-t.e,y:-t.f}):new L({x:-t.x,y:-t.y}),Vt=F.namespace("navigation/ControlledNavigationController");class kt extends R{constructor(e,n,i,s,r){super(),this.settings=e,this.hookManager=n,this.context=i,this.spine=s,this.viewport=r,this.navigateSubject=new o.Subject,this.element$=new o.BehaviorSubject(document.createElement("div")),this.isActive=()=>this.settings.values.computedPageTurnMode==="controlled",this.getNavigationVisibleArea=()=>this.viewport.absoluteViewport;const a=this.spine.element$.pipe(o.filter(O),o.withLatestFrom(this.element$),o.tap(([u,d])=>{d.style.cssText=`
227
227
  height: 100%;
228
228
  width: 100%;
229
229
  position: relative;
230
- `,p.className=`${E}-controlled-navigator`,p.innerHTML="",p.appendChild(u),this.viewport.value.element.appendChild(p),this.element$.next(p)})),c=e.watch(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),l=r.combineLatest([c,this.element$]).pipe(r.tap(([,u])=>{e.values.computedPageTurnMode==="scrollable"?u.style.display="contents":u.style.display="block"}));this.layout$=l.pipe(r.tap(()=>{Nt.info("layout",e.values)}),r.share());const d=this.navigateSubject.pipe(r.tap(u=>{Nt.info("Navigation requested",u)}));this.isNavigating$=d.pipe(r.map(({animation:u,position:p})=>({type:"manualAdjust",shouldAnimate:!(!u||u==="turn"&&e.values.computedPageTurnAnimation==="none"),animation:u,position:p})),r.switchMap(u=>{const p=this.element$.getValue();return p.style.setProperty("transition","none"),p.style.setProperty("opacity","1"),r.merge(r.of(!0),r.of(null).pipe(r.mergeMap(()=>{if(u?.type!=="manualAdjust")return r.of(!1);const g=u.animation==="snap"?e.values.snapAnimationDuration:e.values.computedPageTurnAnimationDuration,h=u.animation==="snap"?"slide":e.values.computedPageTurnAnimation;return r.of(u).pipe(u.shouldAnimate?r.delay(1,r.animationFrameScheduler):r.identity,r.tap(m=>{const f=this.element$.getValue();m.shouldAnimate?h==="fade"?(f.style.setProperty("transition",`opacity ${g/2}ms`),f.style.setProperty("opacity","0")):(u.animation==="snap"||h==="slide")&&(f.style.setProperty("transition",`transform ${g}ms`),f.style.setProperty("opacity","1")):(f.style.setProperty("transition","none"),f.style.setProperty("opacity","1"))}),r.tap(m=>{h!=="fade"&&this.setViewportPosition(m.position)}),u.shouldAnimate?r.delay(g/2,r.animationFrameScheduler):r.identity,r.tap(m=>{const f=this.element$.getValue();h==="fade"&&(this.setViewportPosition(m.position),f.style.setProperty("opacity","1"))}),u.shouldAnimate?r.delay(g/2,r.animationFrameScheduler):r.identity,r.tap(m=>{h==="fade"&&this.setViewportPosition(m.position)}))}),r.map(()=>!1)))}),r.startWith(!1),r.shareReplay(1)),r.merge(a,this.isNavigating$,this.layout$).pipe(r.takeUntil(this.destroy$)).subscribe()}setViewportPosition(e){const n=this.element$.getValue(),i=go(e);n.style.transform=`translate(${i.x}px, ${i.y}px)`,this.hookManager.execute("onViewportOffsetAdjust",void 0,{})}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.element$.getValue(),n=window.getComputedStyle(e),i=n.transform||n.webkitTransform;if(!i||i==="none")return new M({x:0,y:0});const o=new DOMMatrix(i);return mo(o)}}const fo=()=>t=>t.pipe(r.map(({navigation:e,pagination:n,...i})=>({navigation:{...e,paginationBeginCfi:n.beginCfi},...i}))),So=(t,e,n)=>t.bridgeEvent.pagination$.pipe(r.withLatestFrom(e),r.filter(([i,o])=>i.navigationId===o.id),r.switchMap(([i,o])=>(n.spineItemsManager.get(o.spineItem)?.isReady$.pipe(r.first())??r.of(!1)).pipe(r.filter(a=>a),r.map(()=>({pagination:i,navigation:o})))),fo(),r.distinctUntilChanged((i,o)=>i.navigation.paginationBeginCfi===o.navigation.paginationBeginCfi),r.map(({navigation:i})=>({...i,meta:{triggeredBy:"pagination"}}))),bo=({navigationResolver:t})=>e=>e.pipe(r.map(([n,i])=>{const o={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...n,position:n.position?t.fromOutOfBoundsSpinePosition(n.position):void 0};return{previousNavigation:i,navigation:o}})),yo=({navigationResolver:t})=>e=>e.pipe(r.map(n=>{if(n.navigation.cfi){const i=t.getNavigationForCfi(n.navigation.cfi);if(i)return{...n,navigation:{...n.navigation,position:i}}}return n})),Io=({navigation:t,previousNavigation:e,settings:n})=>t.directionFromLastNavigation?t.directionFromLastNavigation:t.url!==void 0||t.cfi!==void 0?"anchor":e.spineItem===void 0||t.spineItem||!t.position?"forward":n.values.computedPageTurnDirection==="vertical"?t.position.y>e.position.y||t.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(t.position.x)>Math.abs(e.position.x)||t.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",wo=({context:t,settings:e})=>n=>n.pipe(r.map(({navigation:i,previousNavigation:o})=>{const s=Io({navigation:i,previousNavigation:o,settings:e}),a={...i,directionFromLastNavigation:s};return{previousNavigation:o,navigation:a,direction:s}})),vo=({spineItemsManager:t,navigationResolver:e,settings:n})=>i=>i.pipe(r.map(({navigation:o,...s})=>{const a=t.get(o.spineItem);if(o.position)return n.values.computedPageTurnMode==="scrollable"?{navigation:{...o,position:o.position},...s}:{navigation:{...o,position:e.fromUnboundSpinePosition(o.position)},...s};if(!a)return{navigation:{...o,position:s.previousNavigation.position},...s};const c=e.getNavigationForSpineIndexOrId(a),l=n.values.computedPageTurnMode==="scrollable"?new U({x:c.x+s.previousNavigation.position.x,y:c.y}):e.fromUnboundSpinePosition(c);return{navigation:{...o,position:l},...s}})),At=({settings:t,spineItemsManager:e,navigationResolver:n,spineLocator:i})=>o=>{const s=a=>{const{position:c,spineItem:l,cfi:d,directionFromLastNavigation:u}=a,{navigationSnapThreshold:p,computedPageTurnMode:g}=t.values;if(l!==void 0){const h=e.get(l);if(h)return h}if(typeof l=="number")return l>e.items.length-1?e.get(e.items.length-1):e.get(0);if(d){const h=e.getSpineItemFromCfi(d);if(h)return h}if(c&&g==="controlled"){const{beginIndex:h,endIndex:m}=i.getVisibleSpineItemsFromPosition({position:c,threshold:p,restrictToScreen:!1})??{},f=(u==="forward"||u==="anchor"?m:h)??h,S=e.get(f);if(!S)return;const{endPageIndex:y,beginPageIndex:w}=i.getVisiblePagesFromViewportPosition({position:c,spineItem:S,threshold:p,restrictToScreen:!1})??{},v=(u==="forward"||u==="anchor"?y:w)??0,$=n.getNavigationForSpineItemPage({pageIndex:v,spineItemId:S}),P=i.getVisibleSpineItemsFromPosition({position:$,threshold:p,restrictToScreen:!1}),F=u==="forward"||u==="anchor"?P?.beginIndex:P?.endIndex;return e.get(F)}return c&&g==="scrollable"?i.getSpineItemFromPosition(c):e.get(0)};return o.pipe(r.map(({navigation:a,...c})=>{const l=s(a);return{navigation:{...a,spineItem:e.getSpineItemIndex(l)},...c}}))},Ot=({spine:t})=>e=>e.pipe(r.switchMap(({navigation:n,...i})=>{const o=t.getSpineItemSpineLayoutInfo(n.spineItem),s=t.spineItemsManager.get(n.spineItem);return(s?.isReady$??r.of(!1)).pipe(r.first(),r.map(a=>({navigation:{...n,spineItemHeight:o?.height,spineItemWidth:o?.width,spineItemLeft:o.left,spineItemTop:o.top,spineItemIsUsingVerticalWriting:s?.isUsingVerticalWriting(),spineItemIsReady:a},...i})))})),Ee=({settings:t,spineItemsManager:e,spineLocator:n,navigationResolver:i})=>o=>{const s=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:l}=t.values,d=e.get(a.spineItem);if(!(!d||!a.position)){if(l==="controlled"){const{endPageIndex:u,beginPageIndex:p}=n.getVisiblePagesFromViewportPosition({position:a.position,spineItem:d,threshold:c,restrictToScreen:!1})??{},g=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?u:p)??0,h=i.getNavigationForSpineItemPage({pageIndex:g,spineItemId:d}),m=n.getVisiblePagesFromViewportPosition({position:h,spineItem:d,threshold:{type:"percentage",value:0},restrictToScreen:!0}),f=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?m?.beginPageIndex:m?.endPageIndex)??0;return n.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:d})}return n.getSpineItemPositionFromSpinePosition(a.position,d)}};return o.pipe(r.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:s(a)},...c})))},Po=({navigationResolver:t})=>e=>e.pipe(r.map(n=>{if(n.navigation.url){const i=t.getNavigationForUrl(n.navigation.url);if(i)return{...n,navigation:{...n.navigation,position:i.position,spineItem:i.spineItemId}}}return n}));class Ne{constructor(){this.isLockedSubject=new r.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(r.map(e=>!!e),r.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const To=({spineLocator:t,navigation:e,navigationResolver:n,spineItemsManager:i,spine:o})=>{const s=i.get(e.spineItem);return s?s.isReady$.pipe(r.first(),r.map(a=>{const c=o.getSpineItemSpineLayoutInfo(s),l=t.isPositionWithinSpineItem(e.position,s),d=c.width-(e.spineItemWidth??0),u=c.height-(e.spineItemHeight??0),p=d!==0||u!==0;if(e.url!==void 0&&(d||u||a&&!e.spineItemIsReady)){const h=n.getNavigationForUrl(e.url);if(h)return h.position}const g=e.cfi??e.paginationBeginCfi;if(g!==void 0&&!ce(g)&&(d||u||a&&!e.spineItemIsReady)){const h=n.getNavigationForCfi(g);if(h)return h}if(l&&p&&e.directionFromLastNavigation==="backward"){const h=new L({x:(e.positionInSpineItem?.x??0)+d,y:(e.positionInSpineItem?.y??0)+u});return n.getNavigationFromSpineItemPosition({spineItem:s,spineItemPosition:h})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const h=t.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return n.getNavigationForSpineItemPage({pageIndex:h,spineItemId:s})}return l?n.getNavigationForPosition(e.position):n.getNavigationForSpineIndexOrId(s)})):r.of(new M({x:0,y:0}))},$o=({navigation:t,spineLocator:e,spineItemsManager:n,settings:i,navigationResolver:o,spine:s})=>{const{spineItem:a}=t,c=n.get(a);if(!c)return new M({x:0,y:0});const{height:l,top:d}=s.getSpineItemSpineLayoutInfo(c),u=e.isPositionWithinSpineItem(t.position,c),p=t.positionInSpineItem??new L({y:0,x:0});if(i.values.computedPageTurnDirection==="vertical"){if(d===t.spineItemTop&&l===t.spineItemHeight&&u)return t.position;if(d===t.spineItemTop&&l===t.spineItemHeight&&!u)return o.getNavigationForSpineIndexOrId(c);if(d!==t.spineItemTop){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(t.positionInSpineItem??new L({x:0,y:0}),c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:c})}if(d===t.spineItemTop&&l!==t.spineItemHeight){const g=(t.spineItemHeight??p.y)-p.y,h=new L({y:t.directionFromLastNavigation==="backward"?l-g:p.y,x:t.position.x});if(u){const m=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(h,c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:c})}if(!u){if(!(t.position.y<d)){const f=new L({y:l-g,x:t.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return o.getNavigationForSpineIndexOrId(c)}}}return t.position},Mo=({navigation:t,spineItemsManager:e,settings:n,spineLocator:i,navigationResolver:o,spine:s})=>n.values.computedPageTurnMode==="scrollable"?r.of($o({navigation:t,spineLocator:i,navigationResolver:o,settings:n,spineItemsManager:e,spine:s})):To({navigation:t,spineLocator:i,navigationResolver:o,spineItemsManager:e,spine:s}),Dt=({settings:t,navigationResolver:e,context:n,spine:i})=>o=>o.pipe(r.switchMap(s=>Mo({spineLocator:i.locator,navigation:s.navigation,navigationResolver:e,settings:t,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,spine:i}).pipe(r.map(a=>({...s,navigation:{...s.navigation,position:a}}))))),Fo=C.namespace("navigation/InternalNavigator");class Vt extends N{constructor(e,n,i,o,s,a,c,l){super(),this.settings=e,this.context=n,this.userNavigation$=i,this.controlledNavigationController=o,this.scrollNavigationController=s,this.navigationResolver=a,this.spine=c,this.isRestorationLocked$=l,this.navigationSubject=new r.BehaviorSubject({animation:!1,position:new M({x:0,y:0}),meta:{triggeredBy:"user"},spineItemIsReady:!1,type:"api",id:Symbol()}),this.navigated$=this.navigationSubject.pipe(r.skip(1)),this.navigation$=this.navigationSubject.pipe(r.map(({position:y,id:w})=>({position:y,id:w})),r.distinctUntilChanged(({position:y,...w},{position:v,...$})=>T.isShallowEqual(w,$)&&T.isShallowEqual(y,v)),r.shareReplay(1)),this.locker=new Ne;const d=i.pipe(r.withLatestFrom(this.navigationSubject),bo({navigationResolver:a}),Po({navigationResolver:a}),yo({navigationResolver:a}),wo({context:n,settings:e}),At({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Ee({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Ot({spine:c})).pipe(vo({navigationResolver:a,spineItemsManager:c.spineItemsManager,settings:e}),r.withLatestFrom(l),r.switchMap(([y,w])=>{const v=y.navigation.cfi||y.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return r.of(y).pipe(v?r.identity:Dt({navigationResolver:a,settings:e,spine:c,context:n}))}),Ee({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),r.map(y=>y.navigation),r.share()),u=d.pipe(r.withLatestFrom(l),r.filter(([,y])=>y),r.switchMap(([y])=>{const w=this.locker.lock();return l.pipe(r.filter(v=>!v),r.first(),r.map(()=>({...y,animation:"snap"})),r.finalize(()=>{w()}),r.takeUntil(d))}),r.share()),p=r.merge(o.layout$,c.layout$).pipe(r.switchMap(()=>r.of(null).pipe(r.switchMap(()=>l.pipe(r.filter(y=>!y),r.first())),r.map(()=>({...this.navigationSubject.getValue(),animation:!1})),r.takeUntil(r.merge(u,d))))),g=r.merge(p,u).pipe(r.map(y=>({navigation:y})),Dt({navigationResolver:a,settings:e,context:n,spine:c}),r.map(y=>{const w={...y.navigation,meta:{triggeredBy:"restoration"}};return{...y,navigation:w}}),At({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Ot({spine:c}),Ee({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),r.map(({navigation:y})=>y),r.share()),h=So(n,this.navigationSubject,c),m=r.merge(g,d,h),f=y=>y.pipe(r.tap(([w,v])=>{Fo.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),S=y=>y.pipe(r.tap(([w,v])=>{const $=w.type==="scroll",P=w.meta.triggeredBy==="pagination",F=w.meta.triggeredBy==="restoration",R=T.isShallowEqual(v.position,w.position);if($&&!F||P||R)return;const A={position:w.position,animation:w.animation};e.values.computedPageTurnMode==="scrollable"?this.scrollNavigationController.navigate(A):this.controlledNavigationController.navigate({...A,position:M.from(A.position)})}));m.pipe(r.withLatestFrom(this.navigationSubject),S,f,r.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const de=(t,e,n)=>{const i=n-t,o=n*(e*t)/(n||1);return Math.max(0,Math.min(i,o))},Re=(t,e)=>(e||0)===0||(t||0)===0?1:Math.floor(Math.max(1,t/e)),Ae=(t,e,n)=>{const i=Re(n,e),o=[...Array(i)].map((s,a)=>a*e);return t>=i*e?o[o.length-1]||0:o.find(s=>t<s+e)||0},kt=(t,e,n)=>{const i=[...Array(n)].map((o,s)=>s*e);return t<=0||n===0?0:t>=n*e?n-1:i.findIndex(o=>t<o+e)??0},Co=({itemWidth:t,itemHeight:e,spineItemPosition:n})=>new L({x:Math.min(t,Math.max(0,n.x)),y:Math.min(e,Math.max(0,n.y))}),Ut=({itemHeight:t,itemWidth:e,isUsingVerticalWriting:n,pageWidth:i,pageHeight:o,pageTurnDirection:s,pageTurnMode:a})=>s==="vertical"&&a==="scrollable"?1:n||s==="vertical"?Re(t,o):Re(e,i),zt=({itemWidth:t,itemHeight:e,position:n,isUsingVerticalWriting:i,pageWidth:o,pageHeight:s,pageTurnDirection:a,pageTurnMode:c,isRTL:l})=>{const u=Co({spineItemPosition:n,itemHeight:e,itemWidth:t}).x,p=Ut({isUsingVerticalWriting:i,itemHeight:e,itemWidth:t,pageWidth:o,pageHeight:s,pageTurnDirection:a,pageTurnMode:c});if(i)return kt(n.y,s,p);const g=kt(u,o,p);return l?p-1-g:g},Lo=({pageIndex:t,itemLayout:e,context:n,isUsingVerticalWriting:i,viewport:o})=>{if(i){const a=de(o.pageSize.height,t,e.height);return new L({x:0,y:a})}const s=de(o.pageSize.width,t,e.width);return n.isRTL()?new L({x:e.width-s-o.pageSize.width,y:0}):new L({x:s,y:0})},_t=({context:t,settings:e,viewport:n})=>{const i=(c,l,d)=>{let u;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?u=c.getBoundingClientRect().x:c&&(u=(c?on(c,l):void 0)?.getBoundingClientRect().x||u);const p=d.layoutInfo?.width||0,g=n.pageSize.width;if(u!==void 0){const h=Ae(u,g,p);return new L({x:h,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:l})=>Lo({context:t,isUsingVerticalWriting:!!l.isUsingVerticalWriting(),itemLayout:l.layoutInfo,pageIndex:c,viewport:n}),getSpineItemPageIndexFromPosition:c=>zt({...c,isRTL:t.isRTL(),pageWidth:n.pageSize.width,pageHeight:n.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,l,d)=>{const u=i(c,l,d),{height:p,width:g}=d.layoutInfo;return u?zt({isUsingVerticalWriting:!!d.isUsingVerticalWriting(),position:u,itemHeight:p,itemWidth:g,isRTL:t.isRTL(),pageWidth:n.pageSize.width,pageHeight:n.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,l)=>{const{width:d,height:u}=l.layoutInfo;return new L({x:Ae(c.x,n.pageSize.width,d),y:Ae(c.y,n.pageSize.height,u)})},getSpineItemPagePositionFromSpineItemPosition:(c,l,d)=>{const{width:u,height:p}=d.layoutInfo,g=n.pageSize.width,h=n.pageSize.height;if(!!d.isUsingVerticalWriting()){const S=de(h,l,p);return new re({x:c.x,y:c.y-S})}const f=de(g,l,u);if(t.isRTL()){const S=u-(l+1)*g;return new re({x:c.x-Math.max(0,S),y:c.y})}return new re({x:c.x-f,y:c.y})}}},Eo=({context:t,settings:e,viewport:n})=>{const i=_t({context:t,settings:e,viewport:n});return{getNavigationForLastPage:c=>{const l=c.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:l-1,spineItem:c})},getNavigationForPosition:(c,l)=>i.getSpineItemClosestPositionFromUnsafePosition(l,c),getNavigationFromNode:(c,l,d)=>i.getSpineItemPositionFromNode(l,d,c)||new L({x:0,y:0})}};function Wt({position:t,isRTL:e,spineItemsManager:n,spine:i,viewportWidth:o}){const s=n.get(n.items.length-1),a=i.getSpineItemSpineLayoutInfo(s||0),c=a.bottom-1,l=Math.max(0,t.y),d=Math.min(l,c);if(e){const h=Math.min(o,t.x),m=Math.max(h,a.left);return new M({x:m,y:d})}const u=a.right-1,p=Math.max(0,t.x),g=Math.min(p,u);return new M({x:g,y:d})}const Bt=({position:t,isRTL:e,pageSizeHeight:n,spineItemsManager:i,visibleAreaRectWidth:o,spine:s})=>{const a=Wt({position:t,isRTL:e,spineItemsManager:i,spine:s,viewportWidth:o}),c=i.get(i.items.length-1),l=s.getSpineItemSpineLayoutInfo(c),d=l.bottom-n,u=Math.min(a.y,d);if(e){const g=Math.min(0,a.x);return new M({x:g,y:u})}const p=l.right-o;return new M({x:Math.min(a.x,p),y:u})},_=({position:{x:t,y:e},pageSizeWidth:n,visibleAreaRectWidth:i})=>{const s=t%i!==0?t-n:t;return new M({x:s,y:e})},Oe=({viewportPosition:t,spineLocator:e,spineItemNavigationResolver:n,viewport:i})=>{const o=e.getSpineItemFromPosition(t);if(o){const s=e.getSpineItemPositionFromSpinePosition(t,o),a=n.getNavigationForPosition(o,s),c=e.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:o});return _({position:c,pageSizeWidth:i.pageSize.width,visibleAreaRectWidth:i.absoluteViewport.width})}return new M({x:0,y:0})},No=({pageIndex:t,spineItemsManager:e,spineItemId:n,spineLocator:i,spineItemNavigationResolver:o,viewport:s})=>{const a=e.get(n);if(!a){const d=t*s.pageSize.width;return Oe({viewportPosition:new M({x:d,y:0}),spineItemNavigationResolver:o,spineLocator:i,viewport:s})}const c=i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:t,spineItem:a}),l=i.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return _({position:l,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},Ro=(t,e)=>{if(e&&e instanceof HTMLIFrameElement){const n=e.contentDocument,i=t.trim();if(!n||i.length===0)return;if(i.startsWith("#")){const o=i.slice(1);return o.length===0?void 0:n.getElementById(o)}try{return n.querySelector(i)}catch{return}}},Ao=({anchor:t,spineItem:e,spine:n})=>{const i=Ro(t,e.renderer.getDocumentFrame());return i?n.spineItemLocator.getSpineItemPositionFromNode(i,0,e)?.x??0:0},Oo=({anchor:t,spineItem:e,spineLocator:n,spine:i})=>{const o=Ao({anchor:t,spineItem:e,spine:i});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new L({x:o,y:0}),spineItem:e})},Do=({anchor:t,spineItem:e,spineLocator:n,spine:i,pageSizeWidth:o,visibleAreaRectWidth:s})=>{const a=Oo({anchor:t,spineItem:e,spineLocator:n,spine:i});return _({position:a,pageSizeWidth:o,visibleAreaRectWidth:s})},Vo=({spine:t,spineItemsManager:e,spineLocator:n,url:i,context:o,pageSizeWidth:s,visibleAreaRectWidth:a})=>{try{const c=i instanceof URL?i:new URL(i),l=`${c.origin}${c.pathname}`,d=o.manifest?.spineItems.find(u=>u.href===l);if(d){const u=e.get(d.id);if(u){const p=Do({anchor:c.hash,spineItem:u,spine:t,spineLocator:n,pageSizeWidth:s,visibleAreaRectWidth:a});return{position:_({position:p,pageSizeWidth:s,visibleAreaRectWidth:a}),spineItemId:d.id}}}return}catch(c){console.error(c);return}},ko=({spineItem:t,spineItemPosition:e,spineLocator:n,spineItemLocator:i,viewport:o})=>{const s=i.getSpineItemClosestPositionFromUnsafePosition(e,t),a=n.getSpinePositionFromSpineItemPosition({spineItemPosition:s,spineItem:t});return _({position:a,pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width})},Uo="spineNavigator",zo=({context:t,spineItemsManager:e,locator:n,settings:i,spine:o,viewport:s})=>{const a=Eo({context:t,settings:i,viewport:s});return{getNavigationForUrl:h=>Vo({context:t,spineItemsManager:e,spineLocator:n,url:h,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width,spine:o}),getNavigationForSpineItemPage:h=>No({...h,spineItemsManager:e,spineItemNavigationResolver:a,spineLocator:n,viewport:s}),getNavigationFromSpineItemPosition:h=>ko({...h,spineItemLocator:n.spineItemLocator,spineLocator:n,viewport:s}),getNavigationForCfi:h=>{const m=e.getSpineItemFromCfi(h),{node:f,offset:S=0}=Fe({cfi:h,spineItemsManager:e});if(!m){C.warn(Uo,`unable to detect item id from cfi ${h}`);return}const y=f?a.getNavigationFromNode(m,f,S):new L({x:0,y:0}),w=n.getSpinePositionFromSpineItemPosition({spineItemPosition:y,spineItem:m});return _({position:w,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},getNavigationForLastPage:h=>{const m=a.getNavigationForLastPage(h),f=n.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:h});return _({position:f,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},getNavigationForSpineIndexOrId:h=>{const m=e.get(h);if(m){const f=n.getSpinePositionFromSpineItem(m);return _({position:f,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})}return new M({x:0,y:0})},getNavigationForPosition:h=>Oe({viewportPosition:h,spineItemNavigationResolver:a,spineLocator:n,viewport:s}),getMostPredominantNavigationForPosition:h=>{const m=i.values.computedPageTurnDirection,f=.5,S=m==="horizontal"?h.x+s.absoluteViewport.width*f:0,y=m==="horizontal"?0:h.y+s.absoluteViewport.height*f,w=Bt({position:new M({x:S,y}),isRTL:t.isRTL(),pageSizeHeight:s.pageSize.height,visibleAreaRectWidth:s.absoluteViewport.width,spineItemsManager:e,spine:o});return Oe({spineItemNavigationResolver:a,spineLocator:n,viewportPosition:w,viewport:s})},fromUnboundSpinePosition:h=>Bt({position:h,isRTL:t.isRTL(),pageSizeHeight:s.pageSize.height,visibleAreaRectWidth:s.absoluteViewport.width,spineItemsManager:e,spine:o}),fromOutOfBoundsSpinePosition:h=>Wt({position:h,isRTL:t.isRTL(),spineItemsManager:e,spine:o,viewportWidth:s.absoluteViewport.width}),isNavigationGoingForwardFrom:(h,m)=>i.values.computedPageTurnDirection==="vertical"?h.y>m.y:h.x>m.x,arePositionsDifferent:(h,m)=>h.x!==m.x||h.y!==m.y,getAdjustedPositionForSpread:h=>_({position:h,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width}),spineItemNavigator:a}},_o=({spineItemsManager:t,context:e,hookManager:n,spine:i,settings:o,viewport:s})=>{const a=new r.Subject,c=a.asObservable(),l=new Ne,d=zo({context:e,settings:o,spineItemsManager:t,locator:i.locator,spine:i,viewport:s}),u=new Rt(o,n,e,i,s),p=new Mt(s,o,n,i,e),g=new Vt(o,e,c,u,p,d,i,l.isLocked$),h=r.combineLatest([u.isNavigating$,p.isNavigating$,l.isLocked$,g.locker.isLocked$]).pipe(I.map(S=>S.some(y=>y)?"busy":"free"),I.distinctUntilChanged(),I.shareReplay(1));return{destroy:()=>{u.destroy(),g.destroy()},getNavigation:()=>g.navigation,internalNavigator:g,scrollNavigationController:p,controlledNavigationController:u,locker:l,navigationState$:h,navigate:S=>{C.info("User navigation",S),a.next(S)},lock(){return l.lock()},navigationResolver:d,navigation$:g.navigation$}};class Ht extends O{constructor(e,n){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=n}update(e){this.mergeCompare(e)}}class xt extends N{constructor(e,n,i,o,s){super(),this.context=e,this.pagination=n,this.spineItemsManager=i,this.spine=o,this.spineItemLocator=s;const a=r.merge(this.context.bridgeEvent.navigation$,o.layout$).pipe(r.switchMap(()=>{const l=({spineItem:d,position:u})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:d,position:u,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(r.take(1),r.withLatestFrom(this.context.bridgeEvent.navigation$),r.tap(([,d])=>{const{position:u}=d,p=this.pagination.value,{beginIndex:g,endIndex:h}=this.spine.locator.getVisibleSpineItemsFromPosition({position:u,threshold:{type:"percentage",value:.5}})??{},m=this.spineItemsManager.get(g),f=this.spineItemsManager.get(h);if(!m||!f)return;const S=p.beginCfi,y=p.endCfi,{beginPageIndex:w=0}=l({spineItem:m,position:u})??{},{endPageIndex:v=0}=l({spineItem:f,position:u})??{},$=S===void 0||ce(S)||p.beginSpineItemIndex!==g,P=p.endSpineItemIndex!==h||y===void 0||ce(y),F=$?H(m.item):S,R=P?H(f.item):y,A=m.numberOfPages,Y=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:R,endNumberOfPagesInSpineItem:Y,endPageIndexInSpineItem:v,endSpineItemIndex:h,navigationId:d.id})}))})),c=a.pipe(Z(this.context.bridgeEvent.viewportFree$),r.tap(()=>{const{beginSpineItemIndex:l,endSpineItemIndex:d,beginPageIndexInSpineItem:u,endPageIndexInSpineItem:p}=this.pagination.value;if(u===void 0||p===void 0||l===void 0||d===void 0)return;const g=this.spineItemsManager.get(l),h=this.spineItemsManager.get(d);if(g===void 0||h===void 0)return;const m=this.spine.pages.fromSpineItemPageIndex(g,u),f=this.spine.pages.fromSpineItemPageIndex(h,p);this.pagination.update({beginCfi:m?.firstVisibleNode?ae({spineItem:g.item,pageNode:m?.firstVisibleNode}):H(g.item),endCfi:f?.firstVisibleNode?ae({spineItem:h.item,pageNode:f?.firstVisibleNode}):H(h.item)})}));r.merge(a,c).pipe(r.takeUntil(this.destroy$)).subscribe()}}const Wo=({manifest:t,spreadMode:e})=>t?.renditionFlow==="scrolled-continuous"?!1:e;class Yt extends N{constructor(e){super();const n={...this.getDefaultSettings(),...e};this.inputSettings=n,this.outputSettingsUpdateSubject=new r.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(r.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const n=T.shallowMergeIfDefined(this.inputSettings,e),i=this.getOutputSettings(n),o=!T.isShallowEqual(this.outputSettings,i);return{hasChanged:o,state:i,commit:()=>(this.inputSettings=n,this.outputSettings=i,o&&this.outputSettingsUpdateSubject.next(i),i)}}update(e){const{commit:n}=this._prepareUpdate(e);n()}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(we(e),r.distinctUntilChanged(T.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Bo extends Yt{constructor(e,n){super(e),this.context=n,n.watch(["manifest","hasVerticalWriting"]).pipe(r.tap(()=>this.update(this.values)),r.takeUntil(this.destroy$)).subscribe()}getComputedSettings(e){const n=this.context.manifest,i=this.context.value.hasVerticalWriting??!1,o={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0,computedSpreadMode:Wo({spreadMode:e.spreadMode,manifest:n})};return n?.renditionFlow==="scrolled-continuous"&&(o.computedPageTurnMode="scrollable"),o.computedPageTurnMode==="scrollable"&&(o.computedPageTurnDirection="vertical"),i&&o.computedPageTurnAnimation==="slide"&&(C.warn(`pageTurnAnimation ${o.computedPageTurnAnimation} incompatible with current book, switching back to default`),o.computedPageTurnAnimation="none"),o.computedPageTurnMode==="scrollable"?(o.computedPageTurnAnimationDuration=0,o.computedPageTurnAnimation="none"):o.computedPageTurnAnimationDuration=e.pageTurnAnimationDuration!==void 0?e.pageTurnAnimationDuration:300,o}getOutputSettings(e){const n=this.getComputedSettings(e);return{...this.outputSettings,...e,...n}}getDefaultSettings(){return{spreadMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class Ho extends J{onUnload(){return r.EMPTY}onCreateDocument(){return r.of(document.createElement("div"))}onLoadDocument(){return r.EMPTY}onLayout(){return r.of(void 0)}onRenderHeadless(){return r.EMPTY}getDocumentFrame(){}}class xo extends N{constructor(e,n,i,o,s,a,c){super(),this.item=e,this.containerElement=n,this.context=i,this.hookManager=o,this.renderer=s,this.settings=a,this.viewport=c,this.layoutTriggerSubject=new r.Subject,this.lastLayout=null,this.computeLayoutInformation=({isLastItem:d,horizontalOffset:u})=>{let p=this.viewport.value.pageSize.width,g="none";const h=u%this.viewport.absoluteViewport.width===0,m=this.context.manifest,f=Ft(m)??!1;if(this.settings.values.computedSpreadMode){!f&&this.renderer.renditionLayout==="reflowable"&&!d&&(p=this.viewport.value.pageSize.width*2),!f&&this.renderer.renditionLayout==="reflowable"&&d&&h&&(p=this.viewport.value.pageSize.width*2);const S=h&&d&&f;this.item.pageSpreadRight&&h&&!this.context.isRTL()?(g="before",p=this.viewport.value.pageSize.width*2):this.item.pageSpreadLeft&&h&&this.context.isRTL()?(g="before",p=this.viewport.value.pageSize.width*2):S&&(this.context.isRTL()?g="before":g="after",p=this.viewport.value.pageSize.width*2)}return{minimumWidth:p,blankPagePosition:g}},this.adjustPositionOfElement=({right:d,left:u,top:p})=>{d!==void 0?this.containerElement.style.right=`${d}px`:this.containerElement.style.removeProperty("right"),u!==void 0?this.containerElement.style.left=`${u}px`:this.containerElement.style.removeProperty("left"),p!==void 0?this.containerElement.style.top=`${p}px`:this.containerElement.style.removeProperty("top")},this.updateContainerLayout=({minimumWidth:d,edgeX:u,edgeY:p})=>g=>g.pipe(r.map(h=>{const m=T.isShallowEqual(this.lastLayout?.pageSize,this.viewport.pageSize)?this.lastLayout:void 0,{width:f,height:S}=m??{},{width:y=f,height:w=S}=h??{},{width:v,height:$}=this.viewport.pageSize,P=this.validateDimension(y??v,v,d),F=this.settings.values.computedPageTurnMode==="scrollable"?w??$:this.validateDimension(w??$,$,$);return this.lastLayout={width:P,height:F,pageSize:this.viewport.pageSize},this.containerElement.style.width=`${P}px`,this.containerElement.style.height=`${F}px`,this.settings.values.computedPageTurnDirection==="vertical"?(this.adjustPositionOfElement({top:p,left:u}),{width:P,height:F}):(this.adjustPositionOfElement(this.context.isRTL()?{right:u,top:0}:{left:u,top:0}),{width:P,height:F})})),this.layout=d=>{const u=Xe(this.didLayout$.pipe(r.first()));return this.layoutTriggerSubject.next(d),u()};const l=this.layoutTriggerSubject.pipe(r.switchMap(({spreadPosition:d,horizontalOffset:u,isLastItem:p,edgeX:g,edgeY:h})=>{const{blankPagePosition:m,minimumWidth:f}=this.computeLayoutInformation({horizontalOffset:u,isLastItem:p});this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:m,item:this.item,minimumWidth:f});const S=this.renderer.layout({blankPagePosition:m,minPageSpread:f/this.viewport.pageSize.width,minimumWidth:f,spreadPosition:d});return r.merge(r.of({type:"start"}),S.pipe(this.updateContainerLayout({minimumWidth:f,edgeX:g,edgeY:h}),r.map(y=>(this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:m,item:this.item,minimumWidth:f}),{type:"end",data:y}))))}),r.share());this.didLayout$=l.pipe(r.filter(d=>d.type==="end"),r.map(d=>d.data),r.share())}validateDimension(e,n,i){if(e<=0)return i;const o=Math.max(e,i),a=Math.ceil(o/n)*n;return Math.max(a,n)}get layoutInfo(){const e=this.containerElement.style,n=e.width?parseFloat(e.width):0,i=e.height?parseFloat(e.height):0;return{width:n,height:i}}}class De extends O{constructor(e,n,i,o,s,a,c){super({isLoaded:!1,isReady:!1,isDirty:!1,isError:!1,error:void 0}),this.item=e,this.parentElement=n,this.context=i,this.settings=o,this.hookManager=s,this.index=a,this.viewport=c,this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.markDirty=()=>{this.mergeCompare({isDirty:!0})},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.layout=p=>this._layout.layout(p),this.containerElement=Yo(n,e,s),n.appendChild(this.containerElement);const l=this.settings.values.getRenderer?.(e);this.resourcesHandler=new ne(e,this.settings);const d={context:i,settings:o,hookManager:s,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler,viewport:this.viewport};this.renderer=l?l(d):new Ho(d),this._layout=new xo(e,this.containerElement,i,s,this.renderer,this.settings,this.viewport);const u=this.renderer.state$.pipe(I.tap(({state:p,error:g})=>{this.mergeCompare({isLoaded:p==="loaded",isError:p==="error",error:p==="error"?g:void 0})}));this.didLayout$=this._layout.didLayout$.pipe(I.tap(()=>{this.mergeCompare({isDirty:!1,isReady:this.renderer.value.state==="loaded"})}),I.share()),r.merge(u,this.didLayout$).pipe(I.takeUntil(this.destroy$)).subscribe()}get isReady$(){return this.watch("isReady")}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.loaded$}get unloaded$(){return this.renderer.unloaded$}get renditionLayout(){return this.renderer.renditionLayout}get layoutInfo(){return this._layout.layoutInfo}get numberOfPages(){return Ut({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this._layout.layoutInfo.height,itemWidth:this._layout.layoutInfo.width,pageWidth:this.viewport.pageSize.width,pageHeight:this.viewport.pageSize.height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Yo=(t,e,n)=>{const i=t.ownerDocument.createElement("div");return i.setAttribute(`data-${st}`,""),i.classList.add("spineItem"),i.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),i.style.cssText=`
230
+ `,d.className=`${N}-controlled-navigator`,d.innerHTML="",d.appendChild(u),this.viewport.value.element.appendChild(d),this.element$.next(d)})),c=e.watch(["computedPageTurnDirection","computedPageTurnMode","numberOfAdjacentSpineItemToPreLoad"]),l=o.combineLatest([c,this.element$]).pipe(o.tap(([,u])=>{e.values.computedPageTurnMode==="scrollable"?u.style.display="contents":u.style.display="block"}));this.layout$=l.pipe(o.tap(()=>{Vt.info("layout",e.values)}),o.share()),this.isNavigating$=this.navigateSubject.pipe(o.distinctUntilChanged((u,d)=>$.isShallowEqual(u.position,d.position)),o.map(({animation:u,position:d})=>(Vt.info("Navigation requested",{animation:u,position:d}),{type:"manualAdjust",shouldAnimate:!(!u||u==="turn"&&e.values.computedPageTurnAnimation==="none"),animation:u,position:d})),o.switchMap(u=>{const d=this.element$.getValue();return d.style.setProperty("transition","none"),d.style.setProperty("opacity","1"),o.merge(o.of(!0),o.of(null).pipe(o.mergeMap(()=>{if(u?.type!=="manualAdjust")return o.of(!1);const p=u.animation==="snap"?e.values.snapAnimationDuration:e.values.computedPageTurnAnimationDuration,g=u.animation==="snap"?"slide":e.values.computedPageTurnAnimation;return o.of(u).pipe(u.shouldAnimate?o.delay(1,o.animationFrameScheduler):o.identity,o.tap(h=>{const m=this.element$.getValue();h.shouldAnimate?g==="fade"?(m.style.setProperty("transition",`opacity ${p/2}ms`),m.style.setProperty("opacity","0")):(u.animation==="snap"||g==="slide")&&(m.style.setProperty("transition",`transform ${p}ms`),m.style.setProperty("opacity","1")):(m.style.setProperty("transition","none"),m.style.setProperty("opacity","1"))}),o.tap(h=>{g!=="fade"&&this.applyNavigationPosition(h.position)}),u.shouldAnimate?o.delay(p/2,o.animationFrameScheduler):o.identity,o.tap(h=>{const m=this.element$.getValue();g==="fade"&&(this.applyNavigationPosition(h.position),m.style.setProperty("opacity","1"))}),u.shouldAnimate?o.delay(p/2,o.animationFrameScheduler):o.identity,o.tap(h=>{g==="fade"&&this.applyNavigationPosition(h.position)}))}),o.map(()=>!1)))}),o.startWith(!1),o.shareReplay(1)),o.merge(a,this.isNavigating$,this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}applyNavigationPosition(e){const n=this.element$.getValue(),i=Io(e);n.style.transform=`translate(${i.x}px, ${i.y}px)`,this.hookManager.execute("onViewportOffsetAdjust",void 0,{})}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.element$.getValue(),n=window.getComputedStyle(e),i=n.transform||n.webkitTransform;if(!i||i==="none")return new L({x:0,y:0});const s=new DOMMatrix(i);return vo(s)}}const wo=()=>t=>t.pipe(o.map(({navigation:e,pagination:n,...i})=>({navigation:{...e,paginationBeginCfi:n.beginCfi},...i}))),Po=(t,e,n)=>t.bridgeEvent.pagination$.pipe(o.withLatestFrom(e),o.filter(([i,s])=>i.navigationId===s.id),o.switchMap(([i,s])=>(n.spineItemsManager.get(s.spineItem)?.isReady$.pipe(o.first())??o.of(!1)).pipe(o.filter(a=>a),o.map(()=>({pagination:i,navigation:s})))),wo(),o.distinctUntilChanged((i,s)=>i.navigation.paginationBeginCfi===s.navigation.paginationBeginCfi),o.map(({navigation:i})=>({...i,meta:{triggeredBy:"pagination"},requestedPosition:i.position}))),To=({navigationResolver:t,getNavigationVisibleArea:e})=>n=>n.pipe(o.map(([i,s])=>{const r=i.position,a=r?e():void 0,c=r&&a?t.clampPositionInSpine(r,a):void 0,l={type:"api",meta:{triggeredBy:"user"},id:Symbol("user"),animation:"turn",...i,requestedPosition:r,requestedVisibleArea:a,position:c};return{previousNavigation:s,navigation:l}})),$o=({navigationResolver:t})=>e=>e.pipe(o.map(n=>{if(n.navigation.cfi){const i=t.getNavigationForCfi(n.navigation.cfi);if(i)return{...n,navigation:{...n.navigation,position:i}}}return n})),Mo=({navigation:t,previousNavigation:e,settings:n})=>t.directionFromLastNavigation?t.directionFromLastNavigation:t.url!==void 0||t.cfi!==void 0?"anchor":e.spineItem===void 0||t.spineItem||!t.position?"forward":n.values.computedPageTurnDirection==="vertical"?t.position.y>e.position.y||t.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(t.position.x)>Math.abs(e.position.x)||t.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",Fo=({context:t,settings:e})=>n=>n.pipe(o.map(({navigation:i,previousNavigation:s})=>{const r=Mo({navigation:i,previousNavigation:s,settings:e}),a={...i,directionFromLastNavigation:r};return{previousNavigation:s,navigation:a,direction:r}})),Co=({spineItemsManager:t,navigationResolver:e,settings:n,viewport:i})=>s=>s.pipe(o.map(({navigation:r,...a})=>{const c=t.get(r.spineItem);if(r.position)return n.values.computedPageTurnMode==="scrollable"?{navigation:{...r,position:r.position},...a}:{navigation:{...r,position:e.clampPositionInSpine(r.position,i.absoluteViewport)},...a};if(!c)return{navigation:{...r,position:a.previousNavigation.position},...a};const l=e.getNavigationForSpineIndexOrId(c),u=n.values.computedPageTurnMode==="scrollable"?new E({x:l.x+a.previousNavigation.position.x,y:l.y}):e.clampPositionInSpine(l,i.absoluteViewport);return{navigation:{...r,position:u},...a}})),Ut=({settings:t,spineItemsManager:e,navigationResolver:n,spineLocator:i})=>s=>{const r=a=>{const{position:c,spineItem:l,cfi:u,directionFromLastNavigation:d}=a,{navigationSnapThreshold:p,computedPageTurnMode:g}=t.values;if(l!==void 0){const h=e.get(l);if(h)return h}if(typeof l=="number")return l>e.items.length-1?e.get(e.items.length-1):e.get(0);if(u){const h=e.getSpineItemFromCfi(u);if(h)return h}if(c&&g==="controlled"){const{beginIndex:h,endIndex:m}=i.getVisibleSpineItemsFromPosition({position:c,threshold:p,restrictToScreen:!1})??{},f=(d==="forward"||d==="anchor"?m:h)??h,S=e.get(f);if(!S)return;const{endPageIndex:w,beginPageIndex:T}=i.getVisiblePagesFromViewportPosition({position:c,spineItem:S,threshold:p,restrictToScreen:!1})??{},I=(d==="forward"||d==="anchor"?w:T)??0,v=n.getNavigationForSpineItemPage({pageIndex:I,spineItemId:S}),P=i.getVisibleSpineItemsFromPosition({position:v,threshold:p,restrictToScreen:!1}),M=d==="forward"||d==="anchor"?P?.beginIndex:P?.endIndex;return e.get(M)}return c&&g==="scrollable"?i.getSpineItemFromPosition(c):e.get(0)};return s.pipe(o.map(({navigation:a,...c})=>{const l=r(a);return{navigation:{...a,spineItem:e.getSpineItemIndex(l)},...c}}))},_t=({spine:t})=>e=>e.pipe(o.switchMap(({navigation:n,...i})=>{const s=t.getSpineItemSpineLayoutInfo(n.spineItem),r=t.spineItemsManager.get(n.spineItem);return(r?.isReady$??o.of(!1)).pipe(o.first(),o.map(a=>({navigation:{...n,spineItemHeight:s?.height,spineItemWidth:s?.width,spineItemLeft:s.left,spineItemTop:s.top,spineItemIsUsingVerticalWriting:r?.isUsingVerticalWriting(),spineItemIsReady:a},...i})))})),Ae=({settings:t,spineItemsManager:e,spineLocator:n,navigationResolver:i})=>s=>{const r=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:l}=t.values,u=e.get(a.spineItem);if(!(!u||!a.position)){if(l==="controlled"){const{endPageIndex:d,beginPageIndex:p}=n.getVisiblePagesFromViewportPosition({position:a.position,spineItem:u,threshold:c,restrictToScreen:!1})??{},g=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?d:p)??0,h=i.getNavigationForSpineItemPage({pageIndex:g,spineItemId:u}),m=n.getVisiblePagesFromViewportPosition({position:h,spineItem:u,threshold:{type:"percentage",value:0},restrictToScreen:!0}),f=(a.directionFromLastNavigation==="forward"||a.directionFromLastNavigation==="anchor"?m?.beginPageIndex:m?.endPageIndex)??0;return n.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:u})}return n.getSpineItemPositionFromSpinePosition(a.position,u)}};return s.pipe(o.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:r(a)},...c})))},Eo=({navigationResolver:t})=>e=>e.pipe(o.map(n=>{if(n.navigation.url){const i=t.getNavigationForUrl(n.navigation.url);if(i)return{...n,navigation:{...n.navigation,position:i.position,spineItem:i.spineItemId}}}return n}));class Re{constructor(){this.isLockedSubject=new o.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe(o.map(e=>!!e),o.distinctUntilChanged())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}}const Lo=({spineLocator:t,navigation:e,navigationResolver:n,spineItemsManager:i,spine:s})=>{const r=i.get(e.spineItem);return r?r.isReady$.pipe(o.first(),o.map(a=>{const c=s.getSpineItemSpineLayoutInfo(r),l=t.isPositionWithinSpineItem(e.position,r),u=c.width-(e.spineItemWidth??0),d=c.height-(e.spineItemHeight??0),p=u!==0||d!==0;if(e.url!==void 0&&(u||d||a&&!e.spineItemIsReady)){const h=n.getNavigationForUrl(e.url);if(h)return h.position}const g=e.cfi??e.paginationBeginCfi;if(g!==void 0&&!ce(g)&&(u||d||a&&!e.spineItemIsReady)){const h=n.getNavigationForCfi(g);if(h)return h}if(l&&p&&e.directionFromLastNavigation==="backward"){const h=new C({x:(e.positionInSpineItem?.x??0)+u,y:(e.positionInSpineItem?.y??0)+d});return n.getNavigationFromSpineItemPosition({spineItem:r,spineItemPosition:h})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const h=t.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return n.getNavigationForSpineItemPage({pageIndex:h,spineItemId:r})}return l?n.getNavigationForPosition(e.position):n.getNavigationForSpineIndexOrId(r)})):o.of(new L({x:0,y:0}))},No=({navigation:t,spineLocator:e,spineItemsManager:n,settings:i,navigationResolver:s,spine:r})=>{const{spineItem:a}=t,c=n.get(a);if(!c)return new L({x:0,y:0});const{height:l,top:u}=r.getSpineItemSpineLayoutInfo(c),d=e.isPositionWithinSpineItem(t.position,c),p=t.positionInSpineItem??new C({y:0,x:0});if(i.values.computedPageTurnDirection==="vertical"){if(u===t.spineItemTop&&l===t.spineItemHeight&&d)return t.position;if(u===t.spineItemTop&&l===t.spineItemHeight&&!d)return s.getNavigationForSpineIndexOrId(c);if(u!==t.spineItemTop){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(t.positionInSpineItem??new C({x:0,y:0}),c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:c})}if(u===t.spineItemTop&&l!==t.spineItemHeight){const g=(t.spineItemHeight??p.y)-p.y,h=new C({y:t.directionFromLastNavigation==="backward"?l-g:p.y,x:t.position.x});if(d){const m=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(h,c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:c})}if(!d){if(!(t.position.y<u)){const f=new C({y:l-g,x:t.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return s.getNavigationForSpineIndexOrId(c)}}}return t.position},Ao=({navigation:t,spineItemsManager:e,settings:n,spineLocator:i,navigationResolver:s,spine:r})=>n.values.computedPageTurnMode==="scrollable"?o.of(No({navigation:t,spineLocator:i,navigationResolver:s,settings:n,spineItemsManager:e,spine:r})):Lo({navigation:t,spineLocator:i,navigationResolver:s,spineItemsManager:e,spine:r}),zt=({settings:t,navigationResolver:e,context:n,spine:i})=>s=>s.pipe(o.switchMap(r=>Ao({spineLocator:i.locator,navigation:r.navigation,navigationResolver:e,settings:t,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,spine:i}).pipe(o.map(a=>({...r,navigation:{...r.navigation,position:a}}))))),Ro=F.namespace("navigation/InternalNavigator"),Wt=(t,e)=>t===e||!!t&&!!e&&t.x===e.x&&t.y===e.y,Do=(t,e)=>t===e||!!t&&!!e&&t.width===e.width&&t.height===e.height,Oo=(t,e)=>t.id===e.id&&Wt(t.position,e.position)&&Wt(t.requestedPosition,e.requestedPosition)&&Do(t.requestedVisibleArea,e.requestedVisibleArea);class Bt extends R{constructor(e,n,i,s,r,a,c,l,u){super(),this.settings=e,this.context=n,this.userNavigation$=i,this.getActiveNavigationModeController=s,this.navigationModeLayout$=r,this.navigationResolver=a,this.spine=c,this.viewport=l,this.isUserInteractionLocked$=u,this.navigationSubject=new o.BehaviorSubject({animation:!1,position:new L({x:0,y:0}),meta:{triggeredBy:"user"},requestedPosition:new L({x:0,y:0}),spineItemIsReady:!1,type:"api",id:Symbol("init")}),this.navigation$=this.navigationSubject.pipe(o.map(({position:I,id:v,requestedPosition:P,requestedVisibleArea:M,meta:A})=>({position:I,id:v,requestedPosition:P,requestedVisibleArea:M,triggeredBy:A.triggeredBy})),o.distinctUntilChanged(Oo),o.shareReplay(1)),this.locker=new Re;const d=()=>s().getNavigationVisibleArea(),p=i.pipe(o.withLatestFrom(this.navigationSubject),To({navigationResolver:a,getNavigationVisibleArea:d}),Eo({navigationResolver:a}),$o({navigationResolver:a}),Fo({context:n,settings:e}),Ut({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Ae({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),_t({spine:c})).pipe(Co({navigationResolver:a,spineItemsManager:c.spineItemsManager,settings:e,viewport:l}),o.withLatestFrom(u),o.switchMap(([I,v])=>{const P=I.navigation.cfi||I.navigation.url||e.values.computedPageTurnMode==="scrollable"||v;return o.of(I).pipe(P?o.identity:zt({navigationResolver:a,settings:e,spine:c,context:n}))}),Ae({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),o.map(I=>I.navigation),o.share()),g=p.pipe(o.withLatestFrom(u),o.filter(([,I])=>I),o.switchMap(([I])=>{const v=this.locker.lock();return u.pipe(o.filter(P=>!P),o.first(),o.map(()=>({navigation:{...I,animation:"snap"}})),o.finalize(()=>{v()}),o.takeUntil(p))}),o.share()),h=o.merge(r,c.layout$).pipe(o.switchMap(()=>o.of(null).pipe(o.switchMap(()=>u.pipe(o.filter(I=>!I),o.first())),o.map(()=>({navigation:{...this.navigationSubject.getValue(),animation:!1}})),o.takeUntil(o.merge(g,p))))),m=o.merge(h,g).pipe(zt({navigationResolver:a,settings:e,context:n,spine:c}),o.map(({navigation:I})=>({navigation:{...I,meta:{triggeredBy:"restoration"},requestedPosition:I.position}})),Ut({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),_t({spine:c}),Ae({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),o.map(({navigation:I})=>I),o.share()),f=Po(n,this.navigationSubject,c),S=o.merge(m,p,f),w=I=>I.pipe(o.tap(([v,P])=>{Ro.info(`navigation updated from ${v.meta.triggeredBy} of type ${v.type}`,{previousNavigation:P,currentNavigation:v}),this.navigationSubject.next(v)})),T=I=>I.pipe(o.tap(([v])=>{const P=v.type==="scroll",M=v.meta.triggeredBy==="pagination",A=v.meta.triggeredBy==="restoration";if(P&&!A||M)return;const V={position:v.position,animation:v.animation};this.getActiveNavigationModeController().navigate(V)}));S.pipe(o.withLatestFrom(this.navigationSubject),T,w,o.takeUntil(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}}const de=(t,e,n)=>{const i=n-t,s=n*(e*t)/(n||1);return Math.max(0,Math.min(i,s))},De=(t,e)=>(e||0)===0||(t||0)===0?1:Math.floor(Math.max(1,t/e)),Oe=(t,e,n)=>{const i=De(n,e),s=[...Array(i)].map((r,a)=>a*e);return t>=i*e?s[s.length-1]||0:s.find(r=>t<r+e)||0},Ht=(t,e,n)=>{const i=[...Array(n)].map((s,r)=>r*e);return t<=0||n===0?0:t>=n*e?n-1:i.findIndex(s=>t<s+e)??0},Vo=({itemWidth:t,itemHeight:e,spineItemPosition:n})=>new C({x:Math.min(t,Math.max(0,n.x)),y:Math.min(e,Math.max(0,n.y))}),xt=({itemHeight:t,itemWidth:e,isUsingVerticalWriting:n,pageWidth:i,pageHeight:s,pageTurnDirection:r,pageTurnMode:a})=>r==="vertical"&&a==="scrollable"?1:n||r==="vertical"?De(t,s):De(e,i),qt=({itemWidth:t,itemHeight:e,position:n,isUsingVerticalWriting:i,pageWidth:s,pageHeight:r,pageTurnDirection:a,pageTurnMode:c,isRTL:l})=>{const d=Vo({spineItemPosition:n,itemHeight:e,itemWidth:t}).x,p=xt({isUsingVerticalWriting:i,itemHeight:e,itemWidth:t,pageWidth:s,pageHeight:r,pageTurnDirection:a,pageTurnMode:c});if(i)return Ht(n.y,r,p);const g=Ht(d,s,p);return l?p-1-g:g},ko=({pageIndex:t,itemLayout:e,context:n,isUsingVerticalWriting:i,viewport:s})=>{if(i){const a=de(s.pageSize.height,t,e.height);return new C({x:0,y:a})}const r=de(s.pageSize.width,t,e.width);return n.isRTL()?new C({x:e.width-r-s.pageSize.width,y:0}):new C({x:r,y:0})},Yt=({context:t,settings:e,viewport:n})=>{const i=(c,l,u)=>{let d;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?d=c.getBoundingClientRect().x:c&&(d=(c?un(c,l):void 0)?.getBoundingClientRect().x||d);const p=u.layoutInfo?.width||0,g=n.pageSize.width;if(d!==void 0){const h=Oe(d,g,p);return new C({x:h,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:l})=>ko({context:t,isUsingVerticalWriting:!!l.isUsingVerticalWriting(),itemLayout:l.layoutInfo,pageIndex:c,viewport:n}),getSpineItemPageIndexFromPosition:c=>qt({...c,isRTL:t.isRTL(),pageWidth:n.pageSize.width,pageHeight:n.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,l,u)=>{const d=i(c,l,u),{height:p,width:g}=u.layoutInfo;return d?qt({isUsingVerticalWriting:!!u.isUsingVerticalWriting(),position:d,itemHeight:p,itemWidth:g,isRTL:t.isRTL(),pageWidth:n.pageSize.width,pageHeight:n.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,l)=>{const{width:u,height:d}=l.layoutInfo;return new C({x:Oe(c.x,n.pageSize.width,u),y:Oe(c.y,n.pageSize.height,d)})},getSpineItemPagePositionFromSpineItemPosition:(c,l,u)=>{const{width:d,height:p}=u.layoutInfo,g=n.pageSize.width,h=n.pageSize.height;if(!!u.isUsingVerticalWriting()){const S=de(h,l,p);return new re({x:c.x,y:c.y-S})}const f=de(g,l,d);if(t.isRTL()){const S=d-(l+1)*g;return new re({x:c.x-Math.max(0,S),y:c.y})}return new re({x:c.x-f,y:c.y})}}},Uo=({context:t,settings:e,viewport:n})=>{const i=Yt({context:t,settings:e,viewport:n});return{getNavigationForLastPage:c=>{const l=c.numberOfPages;return i.getSpineItemPositionFromPageIndex({pageIndex:l-1,spineItem:c})},getNavigationForPosition:(c,l)=>i.getSpineItemClosestPositionFromUnsafePosition(l,c),getNavigationFromNode:(c,l,u)=>i.getSpineItemPositionFromNode(l,u,c)||new C({x:0,y:0})}},Xt=({size:t,isRTL:e,spineItemsManager:n,spine:i})=>{const s=n.get(n.items.length-1);if(!s)return;const r=i.getSpineItemSpineLayoutInfo(s),a=Math.max(0,r.bottom-t.height);if(e){const c=n.get(0),l=c?i.getSpineItemSpineLayoutInfo(c).right:0;return{xMin:r.left,xMax:Math.max(0,l-t.width),yMin:0,yMax:a}}return{xMin:0,xMax:Math.max(0,r.right-t.width),yMin:0,yMax:a}},Gt=({position:t,size:e,isRTL:n,spineItemsManager:i,spine:s})=>{const r=Xt({size:e,isRTL:n,spineItemsManager:i,spine:s});if(!r)return new E({x:0,y:0});const a=Math.min(Math.max(r.yMin,t.y),r.yMax),c=n?Math.max(r.xMin,Math.min(r.xMax,t.x)):Math.min(Math.max(r.xMin,t.x),r.xMax);return new E({x:c,y:a})},_o=({position:t,size:e,isRTL:n,spineItemsManager:i,spine:s})=>{const r=Xt({size:e,isRTL:n,spineItemsManager:i,spine:s});if(r){if(t.y<r.yMin)return"start";if(t.y>r.yMax)return"end";if(n){if(t.x>r.xMax)return"start";if(t.x<r.xMin)return"end"}else{if(t.x<r.xMin)return"start";if(t.x>r.xMax)return"end"}}},z=({position:t,pageSizeWidth:e,visibleAreaRectWidth:n})=>{const{x:i,y:s}=t,a=i%n!==0?i-e:i;return t instanceof E?new E({x:a,y:s}):new L({x:a,y:s})},Ve=({viewportPosition:t,spineLocator:e,spineItemNavigationResolver:n,viewport:i})=>{const s=e.getSpineItemFromPosition(t);if(s){const r=e.getSpineItemPositionFromSpinePosition(t,s),a=n.getNavigationForPosition(s,r),c=e.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:s});return z({position:c,pageSizeWidth:i.pageSize.width,visibleAreaRectWidth:i.absoluteViewport.width})}return new L({x:0,y:0})},zo=({pageIndex:t,spineItemsManager:e,spineItemId:n,spineLocator:i,spineItemNavigationResolver:s,viewport:r})=>{const a=e.get(n);if(!a){const u=t*r.pageSize.width;return Ve({viewportPosition:new L({x:u,y:0}),spineItemNavigationResolver:s,spineLocator:i,viewport:r})}const c=i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:t,spineItem:a}),l=i.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return z({position:l,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},Wo=(t,e)=>{if(e&&e instanceof HTMLIFrameElement){const n=e.contentDocument,i=t.trim();if(!n||i.length===0)return;if(i.startsWith("#")){const s=i.slice(1);return s.length===0?void 0:n.getElementById(s)}try{return n.querySelector(i)}catch{return}}},Bo=({anchor:t,spineItem:e,spine:n})=>{const i=Wo(t,e.renderer.getDocumentFrame());return i?n.spineItemLocator.getSpineItemPositionFromNode(i,0,e)?.x??0:0},Ho=({anchor:t,spineItem:e,spineLocator:n,spine:i})=>{const s=Bo({anchor:t,spineItem:e,spine:i});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new C({x:s,y:0}),spineItem:e})},xo=({anchor:t,spineItem:e,spineLocator:n,spine:i,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const a=Ho({anchor:t,spineItem:e,spineLocator:n,spine:i});return z({position:a,pageSizeWidth:s,visibleAreaRectWidth:r})},qo=({spine:t,spineItemsManager:e,spineLocator:n,url:i,context:s,pageSizeWidth:r,visibleAreaRectWidth:a})=>{try{const c=i instanceof URL?i:new URL(i),l=`${c.origin}${c.pathname}`,u=s.manifest?.spineItems.find(d=>d.href===l);if(u){const d=e.get(u.id);if(d){const p=xo({anchor:c.hash,spineItem:d,spine:t,spineLocator:n,pageSizeWidth:r,visibleAreaRectWidth:a});return{position:z({position:p,pageSizeWidth:r,visibleAreaRectWidth:a}),spineItemId:u.id}}}return}catch(c){console.error(c);return}},Yo=({spineItem:t,spineItemPosition:e,spineLocator:n,spineItemLocator:i,viewport:s})=>{const r=i.getSpineItemClosestPositionFromUnsafePosition(e,t),a=n.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:t});return z({position:a,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},Xo="spineNavigator",Go=({context:t,spineItemsManager:e,locator:n,settings:i,spine:s,viewport:r})=>{const a=Uo({context:t,settings:i,viewport:r});return{getNavigationForUrl:h=>qo({context:t,spineItemsManager:e,spineLocator:n,url:h,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width,spine:s}),getNavigationForSpineItemPage:h=>zo({...h,spineItemsManager:e,spineItemNavigationResolver:a,spineLocator:n,viewport:r}),getNavigationFromSpineItemPosition:h=>Yo({...h,spineItemLocator:n.spineItemLocator,spineLocator:n,viewport:r}),getNavigationForCfi:h=>{const m=e.getSpineItemFromCfi(h),{node:f,offset:S=0}=Ee({cfi:h,spineItemsManager:e});if(!m){F.warn(Xo,`unable to detect item id from cfi ${h}`);return}const w=f?a.getNavigationFromNode(m,f,S):new C({x:0,y:0}),T=n.getSpinePositionFromSpineItemPosition({spineItemPosition:w,spineItem:m});return z({position:T,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},getNavigationForLastPage:h=>{const m=a.getNavigationForLastPage(h),f=n.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:h});return z({position:f,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})},getNavigationForSpineIndexOrId:h=>{const m=e.get(h);if(m){const f=n.getSpinePositionFromSpineItem(m);return z({position:f,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})}return new L({x:0,y:0})},getNavigationForPosition:h=>Ve({viewportPosition:h,spineItemNavigationResolver:a,spineLocator:n,viewport:r}),getMostPredominantNavigationForPosition:h=>{const m=i.values.computedPageTurnDirection,f=.5,S=m==="horizontal"?h.x+r.absoluteViewport.width*f:0,w=m==="horizontal"?0:h.y+r.absoluteViewport.height*f,T=Gt({position:new L({x:S,y:w}),size:r.absoluteViewport,isRTL:t.isRTL(),spineItemsManager:e,spine:s});return Ve({spineItemNavigationResolver:a,spineLocator:n,viewportPosition:T,viewport:r})},clampPositionInSpine:(h,m)=>Gt({position:h,size:m,isRTL:t.isRTL(),spineItemsManager:e,spine:s}),getBoundaryForPosition:(h,m=r.absoluteViewport)=>_o({position:h,size:m,isRTL:t.isRTL(),spineItemsManager:e,spine:s}),isNavigationGoingForwardFrom:(h,m)=>i.values.computedPageTurnDirection==="vertical"?h.y>m.y:h.x>m.x,arePositionsDifferent:(h,m)=>h.x!==m.x||h.y!==m.y,getAdjustedPositionForSpread:h=>z({position:h,pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width}),spineItemNavigator:a}},Zo=({spineItemsManager:t,context:e,hookManager:n,spine:i,settings:s,viewport:r})=>{const a=new o.Subject,c=a.asObservable(),l=new Re,u=Go({context:e,settings:s,spineItemsManager:t,locator:i.locator,spine:i,viewport:r}),d=new kt(s,n,e,i,r),p=new Nt(r,s,n,i,e),g=[p,d],h=()=>g.find(v=>v.isActive())??d,m=o.merge(...g.flatMap(v=>v.layout$?[v.layout$]:[])),f=new Bt(s,e,c,h,m,u,i,r,l.isLocked$),S=o.combineLatest([...g.map(v=>v.isNavigating$),l.isLocked$,f.locker.isLocked$]).pipe(o.map(v=>v.some(P=>P)?"busy":"free"),o.distinctUntilChanged(),o.shareReplay(1)),w=f.navigation$.pipe(o.map(({position:v})=>v),o.distinctUntilChanged($.isShallowEqual),o.shareReplay(1));return{destroy:()=>{g.forEach(v=>{v.destroy()}),f.destroy()},getNavigation:()=>f.navigation,internalNavigator:f,scrollNavigationController:p,controlledNavigationController:d,navigationState$:S,navigate:v=>{F.info("User navigation",v),a.next(v)},lock:()=>l.lock(),isLocked$:l.isLocked$,navigationResolver:u,navigation$:f.navigation$,position$:w}};class Zt extends D{constructor(e,n){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=n}update(e){this.mergeCompare(e)}}class Jt extends R{constructor(e,n,i,s,r,a){super(),this.context=e,this.pagination=n,this.spineItemsManager=i,this.spine=s,this.spineItemLocator=r,this.isNavigationLocked$=a;const c=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const u=({spineItem:d,position:p})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:d,position:p,threshold:{type:"percentage",value:.5}});return this.isNavigationLocked$.pipe(o.filter(d=>!d),o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,d])=>{const{position:p}=d,g=this.pagination.value,{beginIndex:h,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:p,threshold:{type:"percentage",value:.5}})??{},f=this.spineItemsManager.get(h),S=this.spineItemsManager.get(m);if(!f||!S)return;const w=g.beginCfi,T=g.endCfi,{beginPageIndex:I=0}=u({spineItem:f,position:p})??{},{endPageIndex:v=0}=u({spineItem:S,position:p})??{},P=w===void 0||ce(w)||g.beginSpineItemIndex!==h,M=g.endSpineItemIndex!==m||T===void 0||ce(T),A=P?x(f.item):w,V=M?x(S.item):T,Y=f.numberOfPages,B=S.numberOfPages;this.pagination.update({beginCfi:A,beginNumberOfPagesInSpineItem:Y,beginPageIndexInSpineItem:I,beginSpineItemIndex:h,endCfi:V,endNumberOfPagesInSpineItem:B,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:d.id})}))})),l=c.pipe(Z(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:u,endSpineItemIndex:d,beginPageIndexInSpineItem:p,endPageIndexInSpineItem:g}=this.pagination.value;if(p===void 0||g===void 0||u===void 0||d===void 0)return;const h=this.spineItemsManager.get(u),m=this.spineItemsManager.get(d);if(h===void 0||m===void 0)return;const f=this.spine.pages.fromSpineItemPageIndex(h,p),S=this.spine.pages.fromSpineItemPageIndex(m,g);this.pagination.update({beginCfi:f?.firstVisibleNode?ae({spineItem:h.item,pageNode:f?.firstVisibleNode}):x(h.item),endCfi:S?.firstVisibleNode?ae({spineItem:m.item,pageNode:S?.firstVisibleNode}):x(m.item)})}));o.merge(c,l).pipe(o.takeUntil(this.destroy$)).subscribe()}}const Jo=({manifest:t,spreadMode:e})=>t?.renditionFlow==="scrolled-continuous"?!1:e;class Kt extends R{constructor(e){super();const n={...this.getDefaultSettings(),...e};this.inputSettings=n,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const n=$.shallowMergeIfDefined(this.inputSettings,e),i=this.getOutputSettings(n),s=!$.isShallowEqual(this.outputSettings,i);return{hasChanged:s,state:i,commit:()=>(this.inputSettings=n,this.outputSettings=i,s&&this.outputSettingsUpdateSubject.next(i),i)}}update(e){const{commit:n}=this._prepareUpdate(e);n()}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(ve(e),o.distinctUntilChanged($.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Ko extends Kt{constructor(e,n){super(e),this.context=n,n.watch(["manifest","hasVerticalWriting"]).pipe(o.tap(()=>this.update(this.values)),o.takeUntil(this.destroy$)).subscribe()}getComputedSettings(e){const n=this.context.manifest,i=this.context.value.hasVerticalWriting??!1,s={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0,computedSpreadMode:Jo({spreadMode:e.spreadMode,manifest:n})};return n?.renditionFlow==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),i&&s.computedPageTurnAnimation==="slide"&&(F.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 n=this.getComputedSettings(e);return{...this.outputSettings,...e,...n}}getDefaultSettings(){return{spreadMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class Qo extends J{onUnload(){return o.EMPTY}onCreateDocument(){return o.of(document.createElement("div"))}onLoadDocument(){return o.EMPTY}onLayout(){return o.of(void 0)}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}class jo extends R{constructor(e,n,i,s,r,a,c){super(),this.item=e,this.containerElement=n,this.context=i,this.hookManager=s,this.renderer=r,this.settings=a,this.viewport=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.computeLayoutInformation=({isLastItem:u,horizontalOffset:d})=>{let p=this.viewport.value.pageSize.width,g="none";const h=d%this.viewport.absoluteViewport.width===0,m=this.context.manifest,f=At(m)??!1;if(this.settings.values.computedSpreadMode){!f&&this.renderer.renditionLayout==="reflowable"&&!u&&(p=this.viewport.value.pageSize.width*2),!f&&this.renderer.renditionLayout==="reflowable"&&u&&h&&(p=this.viewport.value.pageSize.width*2);const S=h&&u&&f;this.item.pageSpreadRight&&h&&!this.context.isRTL()?(g="before",p=this.viewport.value.pageSize.width*2):this.item.pageSpreadLeft&&h&&this.context.isRTL()?(g="before",p=this.viewport.value.pageSize.width*2):S&&(this.context.isRTL()?g="before":g="after",p=this.viewport.value.pageSize.width*2)}return{minimumWidth:p,blankPagePosition:g}},this.adjustPositionOfElement=({right:u,left:d,top:p})=>{u!==void 0?this.containerElement.style.right=`${u}px`:this.containerElement.style.removeProperty("right"),d!==void 0?this.containerElement.style.left=`${d}px`:this.containerElement.style.removeProperty("left"),p!==void 0?this.containerElement.style.top=`${p}px`:this.containerElement.style.removeProperty("top")},this.updateContainerLayout=({minimumWidth:u,edgeX:d,edgeY:p})=>g=>g.pipe(o.map(h=>{const m=$.isShallowEqual(this.lastLayout?.pageSize,this.viewport.pageSize)?this.lastLayout:void 0,{width:f,height:S}=m??{},{width:w=f,height:T=S}=h??{},{width:I,height:v}=this.viewport.pageSize,P=this.validateDimension(w??I,I,u),M=this.settings.values.computedPageTurnMode==="scrollable"?T??v:this.validateDimension(T??v,v,v);return this.lastLayout={width:P,height:M,pageSize:this.viewport.pageSize},this.containerElement.style.width=`${P}px`,this.containerElement.style.height=`${M}px`,this.settings.values.computedPageTurnDirection==="vertical"?(this.adjustPositionOfElement({top:p,left:d}),{width:P,height:M}):(this.adjustPositionOfElement(this.context.isRTL()?{right:d,top:0}:{left:d,top:0}),{width:P,height:M})})),this.layout=u=>{const d=Ze(this.didLayout$.pipe(o.first()));return this.layoutTriggerSubject.next(u),d()};const l=this.layoutTriggerSubject.pipe(o.switchMap(({spreadPosition:u,horizontalOffset:d,isLastItem:p,edgeX:g,edgeY:h})=>{const{blankPagePosition:m,minimumWidth:f}=this.computeLayoutInformation({horizontalOffset:d,isLastItem:p});this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:m,item:this.item,minimumWidth:f});const S=this.renderer.layout({blankPagePosition:m,minPageSpread:f/this.viewport.pageSize.width,minimumWidth:f,spreadPosition:u});return o.merge(o.of({type:"start"}),S.pipe(this.updateContainerLayout({minimumWidth:f,edgeX:g,edgeY:h}),o.map(w=>(this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:m,item:this.item,minimumWidth:f}),{type:"end",data:w}))))}),o.share());this.didLayout$=l.pipe(o.filter(u=>u.type==="end"),o.map(u=>u.data),o.share())}validateDimension(e,n,i){if(e<=0)return i;const s=Math.max(e,i),a=Math.ceil(s/n)*n;return Math.max(a,n)}get layoutInfo(){const e=this.containerElement.style,n=e.width?parseFloat(e.width):0,i=e.height?parseFloat(e.height):0;return{width:n,height:i}}}class ke extends D{constructor(e,n,i,s,r,a,c){super({isLoaded:!1,isReady:!1,isDirty:!1,isError:!1,error:void 0}),this.item=e,this.parentElement=n,this.context=i,this.settings=s,this.hookManager=r,this.index=a,this.viewport=c,this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.markDirty=()=>{this.mergeCompare({isDirty:!0})},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.layout=p=>this._layout.layout(p),this.containerElement=er(n,e,r),n.appendChild(this.containerElement);const l=this.settings.values.getRenderer?.(e);this.resourcesHandler=new ne(e,this.settings);const u={context:i,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler,viewport:this.viewport};this.renderer=l?l(u):new Qo(u),this._layout=new jo(e,this.containerElement,i,r,this.renderer,this.settings,this.viewport);const d=this.renderer.state$.pipe(b.tap(({state:p,error:g})=>{this.mergeCompare({isLoaded:p==="loaded",isError:p==="error",error:p==="error"?g:void 0})}));this.didLayout$=this._layout.didLayout$.pipe(b.tap(()=>{this.mergeCompare({isDirty:!1,isReady:this.renderer.value.state==="loaded"})}),b.share()),o.merge(d,this.didLayout$).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.unloaded$}get renditionLayout(){return this.renderer.renditionLayout}get layoutInfo(){return this._layout.layoutInfo}get numberOfPages(){return xt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this._layout.layoutInfo.height,itemWidth:this._layout.layoutInfo.width,pageWidth:this.viewport.pageSize.width,pageHeight:this.viewport.pageSize.height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const er=(t,e,n)=>{const i=t.ownerDocument.createElement("div");return i.setAttribute(`data-${ct}`,""),i.classList.add("spineItem"),i.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),i.style.cssText=`
231
231
  position: absolute;
232
232
  overflow: hidden;
233
- `,i.dataset.isReady="false",n.execute("item.onBeforeContainerCreated",void 0,{element:i}),i};class qo extends N{constructor(e,n,i,o,s){super(),this.context=e,this.spineItemsManager=n,this.spineLocator=i,this.settings=o,this.spineLayout=s,this.forcedOpenSubject=new r.BehaviorSubject(new Map);const a=this.forcedOpenSubject.pipe(r.map(d=>Array.from(d.keys()).sort((u,p)=>u-p)),r.distinctUntilChanged(T.arrayEqual),r.shareReplay({bufferSize:1,refCount:!0}));r.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,a,o.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(r.debounceTime(100),Z(this.context.bridgeEvent.viewportFree$),r.withLatestFrom(this.context.bridgeEvent.navigation$,a),r.map(([,d,u])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=o.values,{beginIndex:g=0,endIndex:h=0}=i.getVisibleSpineItemsFromPosition({position:d.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},m=p===1/0?0:g-p,f=p===1/0?n.items.length-1:h+p,S=Array.from({length:f-m+1},(w,v)=>m+v),y=[...u,...S];n.items.forEach((w,v)=>{y.includes(v)?w.load():w.unload()})})).pipe(r.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const n=e.map(o=>typeof o=="number"?o:o.index),i=o=>{const s=this.forcedOpenSubject.value;n.forEach(a=>{const c=s.get(a)||0,l=o?c+1:c-1;l<=0?s.delete(a):s.set(a,l)}),this.forcedOpenSubject.next(s)};return i(!0),()=>{this.isDestroyed||i(!1)}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const qt=(t,e,n)=>{const i=(n.width-e.width)/2,o=(n.height-e.height)/2;return new U({x:t.x-i,y:t.y-o})};class Q extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,n){if(n){const o=e;return new Q(o.x,o.y,n.width,n.height)}const i=e;return new Q(i.x,i.y,i.width,i.height)}}class Xo{constructor({width:e,height:n}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=n}}class Go{constructor({width:e,height:n}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=n}}const Zo=({pageIndex:t,spineItemOrId:e,spineItemsManager:n})=>{const i=n.items,o=n.get(e);if(!o)return;const{currentAbsolutePage:s}=i.reduce((a,c)=>{if(a.found)return a;const l=c.numberOfPages;return o===c&&t<=l-1?{currentAbsolutePage:a.currentAbsolutePage+t,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+l}},{currentAbsolutePage:0,found:!1});return s},Jo=({itemHeight:t,itemWidth:e,visibleWidthOfItem:n,visibleHeightOfItem:i,threshold:o})=>{const s=n/e,a=i/t;return o.type==="percentage"?s>=o.value&&a>=o.value:n>=o.value&&i>=o.value},Ko=({visibleWidthOfItem:t,visibleHeightOfItem:e,threshold:n,viewportPosition:i})=>{const o=t/i.width,s=e/i.height;return n.type==="percentage"?s>=n.value&&o>=n.value:e>=n.value&&t>=n.value},Xt=({itemPosition:{bottom:t,left:e,right:n,top:i,width:o,height:s},threshold:a,viewportPosition:c,restrictToScreen:l})=>{const d=c.x,u=c.x+(c.width-1),p=c.y,g=Math.max(c.y+(c.height-1),0),h=Math.max(0,Math.min(n,u)-Math.max(e,d)),m=Math.max(0,Math.min(t,g)-Math.max(i,p));if(h<=0||m<=0)return{visible:!1};const S=Ko({threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h,viewportPosition:c});return l?{visible:S}:{visible:Jo({itemHeight:s,itemWidth:o,threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h})||S}},Ve=({position:t,spineItemsManager:e,spineLayout:n})=>{const i=e.items.find(o=>{const{left:s,right:a,bottom:c,top:l}=n.getSpineItemSpineLayoutInfo(o),d=t.x>=s&&t.x<a,u=t.y>=l&&t.y<c;return d&&u});return t.x===0&&!i?e.items[0]:i},ke=({spineItemPosition:t,itemLayout:{left:e,top:n}})=>new M({x:e+t.x,y:n+t.y}),Qo=({position:t,threshold:e,restrictToScreen:n,spineItemsManager:i,spineLayout:o,useAbsoluteViewport:s=!0,viewport:a})=>{const c=Ve({position:t,spineItemsManager:i,spineLayout:o})||i.get(0),l=i.items.reduce((h,m)=>{const f=o.getSpineItemSpineLayoutInfo(m),S=s?a.absoluteViewport:a.relativeViewport,y=qt(t,a.absoluteViewport,S),w=Q.from(y,S),{visible:v}=Xt({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:n});return v?[...h,m]:h},[]),d=l[0]??c,u=l[l.length-1]??d;if(!d||!u)return;const p=i.getSpineItemIndex(d),g=i.getSpineItemIndex(u);return{beginIndex:p??0,endIndex:g??0}},jo=({spineItemsManager:t,context:e,spineItemLocator:n,settings:i,spineLayout:o,viewport:s})=>{const a=(m,f)=>{const{left:S,top:y}=o.getSpineItemSpineLayoutInfo(f);return new L({x:Math.max(m.x-S,0),y:Math.max(m.y-y,0)})},c=m=>ke({spineItemPosition:new L({x:0,y:0}),itemLayout:o.getSpineItemSpineLayoutInfo(m)}),l=m=>t.items.find(f=>f.renderer.getDocumentFrame()===m),d=(m,f,S)=>{if(typeof S=="number"){const y=t.get(S);return y?n.getSpineItemPageIndexFromNode(m,f||0,y):void 0}return n.getSpineItemPageIndexFromNode(m,f||0,S)},u=({position:m,threshold:f,spineItem:S,restrictToScreen:y,useAbsoluteViewport:w=!0,viewport:v})=>{const $=S.numberOfPages,F=Array.from(Array($)).map((Y,q)=>{const Ue=n.getSpineItemPositionFromPageIndex({pageIndex:q,spineItem:S}),X=ke({spineItemPosition:Ue,itemLayout:o.getSpineItemSpineLayoutInfo(S)});return{index:q,absolutePosition:{width:v.pageSize.width,height:v.pageSize.height,left:X.x,top:X.y,bottom:X.y+v.pageSize.height,right:X.x+v.pageSize.width}}}).reduce((Y,{absolutePosition:q,index:Ue})=>{const X=w?v.absoluteViewport:v.relativeViewport,rr=qt(m,v.absoluteViewport,X),sr=Q.from(rr,X),{visible:ar}=Xt({viewportPosition:sr,restrictToScreen:y,threshold:f,itemPosition:q});return ar?[...Y,Ue]:Y},[]),R=F[0],A=F[F.length-1]??R;if(!(R===void 0||A===void 0))return{beginPageIndex:R,endPageIndex:A}};return{getSpinePositionFromSpineItemPosition:({spineItem:m,spineItemPosition:f})=>{const S=o.getSpineItemSpineLayoutInfo(m);return ke({itemLayout:S,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:m=>Zo({...m,spineItemsManager:t}),getSpineItemPagePositionFromSpinePosition:m=>{const f=Ve({position:m,spineItemsManager:t,spineLayout:o});if(!f)return;const S=a(m,f),y=n.getSpineItemPageIndexFromPosition({itemWidth:f.layoutInfo.width,itemHeight:f.layoutInfo.height,position:S,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=n.getSpineItemPagePositionFromSpineItemPosition(S,y,f);return{spineItem:f,spineItemPageIndex:y,spineItemPagePosition:w,pageSize:s.value.pageSize}},getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:m=>Ve({position:m,spineItemsManager:t,spineLayout:o}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:d,getVisibleSpineItemsFromPosition:m=>Qo({spineItemsManager:t,spineLayout:o,viewport:s,...m}),getVisiblePagesFromViewportPosition:m=>u({...m,viewport:s}),isPositionWithinSpineItem:(m,f)=>{const{bottom:S,left:y,right:w,top:v}=o.getSpineItemSpineLayoutInfo(f);return m.x>=y&&m.x<=w&&m.y<=S&&m.y>=v},spineItemLocator:n,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(m,f)=>{const{height:S,width:y}=o.getSpineItemSpineLayoutInfo(f);return new L({x:Math.min(Math.max(0,m.x),y),y:Math.min(Math.max(0,m.y),S)})}}};class Gt extends N{constructor(e){super(),this.spineItemsManager=e,this.states$=this.spineItemsManager.items$.pipe(r.switchMap(n=>r.merge(...n.map(i=>i.pipe(r.map(o=>({item:i,...o})),r.distinctUntilChanged(T.isShallowEqual))))),r.share()),this.itemResize$=this.spineItemsManager.items$.pipe(r.switchMap(n=>{const i=n.map(o=>te(o.element).pipe(r.map(s=>({entries:s,item:o}))));return r.merge(...i)}),r.share()),this.itemLoad$=this.spineItemsManager.items$.pipe(r.switchMap(n=>r.merge(...n.map(i=>i.loaded$.pipe(r.map(()=>i))))),r.share()),this.itemUnload$=this.spineItemsManager.items$.pipe(r.switchMap(n=>r.merge(...n.map(i=>i.unloaded$.pipe(r.map(()=>i))))),r.share())}}class er extends N{constructor(e,n,i,o,s){super(),this.spineItemsManager=e,this.spineItemsObserver=n,this.context=i,this.settings=o,this.viewport=s,this.externalLayoutTrigger=new r.Subject,this.spineItemsRelativeLayouts=[];const a=r.merge(n.itemLoad$,n.itemUnload$),c=r.merge(this.externalLayoutTrigger,a);this.layout$=c.pipe(r.tap(()=>{this.spineItemsManager.items.forEach(l=>{l.markDirty()})}),r.debounceTime(50),r.switchMap(()=>this.spineItemsManager.items.reduce((l,d,u)=>l.pipe(r.concatMap(({horizontalOffset:p,verticalOffset:g})=>{const h=p%s.absoluteViewport.width===0,m=u===e.items.length-1,f=o.values.computedPageTurnDirection==="vertical",S=i.isRTL(),y=this.getSpreadPosition(h,S),{edgeX:w,edgeY:v}=this.getStartEdges(f,h,p,g,s.absoluteViewport.height);return d.layout({spreadPosition:y,horizontalOffset:p,isLastItem:m,edgeX:w,edgeY:v}).pipe(r.map(({width:$,height:P})=>{const F=this.createSpineItemLayout(f,S,w,v,$,P,s.absoluteViewport.width);return this.spineItemsRelativeLayouts[u]=F,{horizontalOffset:w+$,verticalOffset:f?v+P:0}}))})),r.of({horizontalOffset:0,verticalOffset:0}))),r.takeUntil(this.destroy$),r.share()),this.layout$.subscribe(),this.watchForVerticalWritingUpdate()}watchForVerticalWritingUpdate(){this.spineItemsObserver.itemLoad$.pipe(r.tap(e=>{this.context.update({hasVerticalWriting:e.isUsingVerticalWriting()})}),r.takeUntil(this.destroy$)).subscribe()}layout(){this.externalLayoutTrigger.next(void 0)}getSpineItemSpineLayoutInfo(e){const n=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[n]||new se({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,n)=>e+n.numberOfPages,0)}destroy(){super.destroy(),this.externalLayoutTrigger.complete()}getSpreadPosition(e,n){return this.settings.values.computedSpreadMode?e?n?"right":"left":n?"left":"right":"none"}getStartEdges(e,n,i,o,s){return e?{edgeX:n?0:i,edgeY:n?o:o-s}:{edgeX:i,edgeY:0}}createSpineItemLayout(e,n,i,o,s,a,c){if(e){const d=s+i,u=a+o;return new se({left:i,right:d,top:o,bottom:u,height:a,width:s,x:i,y:o})}const l=n?c-i-s:i;return new se({right:n?c-i:i+s,left:l,x:l,top:o,bottom:a,height:a,width:s,y:o})}}class Zt extends N{constructor(e,n,i,o,s,a,c){super(),this.context=e,this.pagination=n,this.spineItemsManager=i,this.spineItemLocator=o,this.settings=s,this.hookManager=a,this.viewport=c,this.elementSubject=new r.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineItemsObserver=new Gt(i),this.spineLayout=new er(i,this.spineItemsObserver,e,s,c),this.locator=jo({context:e,spineItemsManager:i,spineItemLocator:o,settings:s,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new qo(this.context,i,this.locator,s,this.spineLayout),this.pages=new x(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const l=e.watch("rootElement").pipe(I.filter(D),I.tap(u=>{const p=u.ownerDocument.createElement("div");p.style.cssText=`
233
+ `,i.dataset.isReady="false",n.execute("item.onBeforeContainerCreated",void 0,{element:i}),i};class tr extends R{constructor(e,n,i,s,r,a){super(),this.context=e,this.spineItemsManager=n,this.spineLocator=i,this.settings=s,this.spineLayout=r,this.viewport=a,this.forcedOpenSubject=new o.BehaviorSubject(new Map);const c=this.forcedOpenSubject.pipe(o.map(d=>Array.from(d.keys()).sort((p,g)=>p-g)),o.distinctUntilChanged($.arrayEqual),o.shareReplay({bufferSize:1,refCount:!0}));o.merge(this.context.bridgeEvent.position$,this.viewport.layout$,this.spineLayout.layout$,c,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(o.debounceTime(100),Z(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.position$,c),o.map(([,d,p])=>{const{numberOfAdjacentSpineItemToPreLoad:g}=s.values,{beginIndex:h=0,endIndex:m=0}=i.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},f=g===1/0?0:h-g,S=g===1/0?n.items.length-1:m+g,w=Array.from({length:S-f+1},(I,v)=>f+v),T=[...p,...w];n.items.forEach((I,v)=>{T.includes(v)?I.load():I.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const n=e.map(s=>typeof s=="number"?s:s.index),i=s=>{const r=this.forcedOpenSubject.value;n.forEach(a=>{const c=r.get(a)||0,l=s?c+1:c-1;l<=0?r.delete(a):r.set(a,l)}),this.forcedOpenSubject.next(r)};return i(!0),()=>{this.isDestroyed||i(!1)}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Qt=(t,e,n)=>{const i=(n.width-e.width)/2,s=(n.height-e.height)/2;return new E({x:t.x-i,y:t.y-s})};class Q extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,n){if(n){const s=e;return new Q(s.x,s.y,n.width,n.height)}const i=e;return new Q(i.x,i.y,i.width,i.height)}}class nr{constructor({width:e,height:n}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=n}}class ir{constructor({width:e,height:n}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=n}}const or=({pageIndex:t,spineItemOrId:e,spineItemsManager:n})=>{const i=n.items,s=n.get(e);if(!s)return;const{currentAbsolutePage:r}=i.reduce((a,c)=>{if(a.found)return a;const l=c.numberOfPages;return s===c&&t<=l-1?{currentAbsolutePage:a.currentAbsolutePage+t,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+l}},{currentAbsolutePage:0,found:!1});return r},rr=({itemHeight:t,itemWidth:e,visibleWidthOfItem:n,visibleHeightOfItem:i,threshold:s})=>{const r=n/e,a=i/t;return s.type==="percentage"?r>=s.value&&a>=s.value:n>=s.value&&i>=s.value},sr=({visibleWidthOfItem:t,visibleHeightOfItem:e,threshold:n,viewportPosition:i})=>{const s=t/i.width,r=e/i.height;return n.type==="percentage"?r>=n.value&&s>=n.value:e>=n.value&&t>=n.value},jt=({itemPosition:{bottom:t,left:e,right:n,top:i,width:s,height:r},threshold:a,viewportPosition:c,restrictToScreen:l})=>{const u=c.x,d=c.x+(c.width-1),p=c.y,g=Math.max(c.y+(c.height-1),0),h=Math.max(0,Math.min(n,d)-Math.max(e,u)),m=Math.max(0,Math.min(t,g)-Math.max(i,p));if(h<=0||m<=0)return{visible:!1};const S=sr({threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h,viewportPosition:c});return l?{visible:S}:{visible:rr({itemHeight:r,itemWidth:s,threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h})||S}},Ue=({position:t,spineItemsManager:e,spineLayout:n})=>{const i=e.items.find(s=>{const{left:r,right:a,bottom:c,top:l}=n.getSpineItemSpineLayoutInfo(s),u=t.x>=r&&t.x<a,d=t.y>=l&&t.y<c;return u&&d});return t.x===0&&!i?e.items[0]:i},_e=({spineItemPosition:t,itemLayout:{left:e,top:n}})=>new L({x:e+t.x,y:n+t.y}),ar=({position:t,threshold:e,restrictToScreen:n,spineItemsManager:i,spineLayout:s,useAbsoluteViewport:r=!0,viewport:a})=>{const c=Ue({position:t,spineItemsManager:i,spineLayout:s})||i.get(0),l=i.items.reduce((h,m)=>{const f=s.getSpineItemSpineLayoutInfo(m),S=r?a.absoluteViewport:a.relativeViewport,w=Qt(t,a.absoluteViewport,S),T=Q.from(w,S),{visible:I}=jt({itemPosition:f,threshold:e,viewportPosition:T,restrictToScreen:n});return I?[...h,m]:h},[]),u=l[0]??c,d=l[l.length-1]??u;if(!u||!d)return;const p=i.getSpineItemIndex(u),g=i.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:g??0}},cr=({spineItemsManager:t,context:e,spineItemLocator:n,settings:i,spineLayout:s,viewport:r})=>{const a=(m,f)=>{const{left:S,top:w}=s.getSpineItemSpineLayoutInfo(f);return new C({x:Math.max(m.x-S,0),y:Math.max(m.y-w,0)})},c=m=>_e({spineItemPosition:new C({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(m)}),l=m=>t.items.find(f=>f.renderer.getDocumentFrame()===m),u=(m,f,S)=>{if(typeof S=="number"){const w=t.get(S);return w?n.getSpineItemPageIndexFromNode(m,f||0,w):void 0}return n.getSpineItemPageIndexFromNode(m,f||0,S)},d=({position:m,threshold:f,spineItem:S,restrictToScreen:w,useAbsoluteViewport:T=!0,viewport:I})=>{const v=S.numberOfPages,M=Array.from(Array(v)).map((Y,B)=>{const ze=n.getSpineItemPositionFromPageIndex({pageIndex:B,spineItem:S}),X=_e({spineItemPosition:ze,itemLayout:s.getSpineItemSpineLayoutInfo(S)});return{index:B,absolutePosition:{width:I.pageSize.width,height:I.pageSize.height,left:X.x,top:X.y,bottom:X.y+I.pageSize.height,right:X.x+I.pageSize.width}}}).reduce((Y,{absolutePosition:B,index:ze})=>{const X=T?I.absoluteViewport:I.relativeViewport,fr=Qt(m,I.absoluteViewport,X),Sr=Q.from(fr,X),{visible:yr}=jt({viewportPosition:Sr,restrictToScreen:w,threshold:f,itemPosition:B});return yr?[...Y,ze]:Y},[]),A=M[0],V=M[M.length-1]??A;if(!(A===void 0||V===void 0))return{beginPageIndex:A,endPageIndex:V}};return{getSpinePositionFromSpineItemPosition:({spineItem:m,spineItemPosition:f})=>{const S=s.getSpineItemSpineLayoutInfo(m);return _e({itemLayout:S,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:m=>or({...m,spineItemsManager:t}),getSpineItemPagePositionFromSpinePosition:m=>{const f=Ue({position:m,spineItemsManager:t,spineLayout:s});if(!f)return;const S=a(m,f),w=n.getSpineItemPageIndexFromPosition({itemWidth:f.layoutInfo.width,itemHeight:f.layoutInfo.height,position:S,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),T=n.getSpineItemPagePositionFromSpineItemPosition(S,w,f);return{spineItem:f,spineItemPageIndex:w,spineItemPagePosition:T,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:m=>Ue({position:m,spineItemsManager:t,spineLayout:s}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:u,getVisibleSpineItemsFromPosition:m=>ar({spineItemsManager:t,spineLayout:s,viewport:r,...m}),getVisiblePagesFromViewportPosition:m=>d({...m,viewport:r}),isPositionWithinSpineItem:(m,f)=>{const{bottom:S,left:w,right:T,top:I}=s.getSpineItemSpineLayoutInfo(f);return m.x>=w&&m.x<=T&&m.y<=S&&m.y>=I},spineItemLocator:n,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(m,f)=>{const{height:S,width:w}=s.getSpineItemSpineLayoutInfo(f);return new C({x:Math.min(Math.max(0,m.x),w),y:Math.min(Math.max(0,m.y),S)})}}};class en extends R{constructor(e){super(),this.spineItemsManager=e,this.states$=this.spineItemsManager.items$.pipe(o.switchMap(n=>o.merge(...n.map(i=>i.pipe(o.map(s=>({item:i,...s})),o.distinctUntilChanged($.isShallowEqual))))),o.share()),this.itemResize$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const i=n.map(s=>te(s.element).pipe(o.map(r=>({entries:r,item:s}))));return o.merge(...i)}),o.share()),this.itemLoad$=this.spineItemsManager.items$.pipe(o.switchMap(n=>o.merge(...n.map(i=>i.loaded$.pipe(o.map(()=>i))))),o.share()),this.itemUnload$=this.spineItemsManager.items$.pipe(o.switchMap(n=>o.merge(...n.map(i=>i.unloaded$.pipe(o.map(()=>i))))),o.share())}}class lr extends R{constructor(e,n,i,s,r){super(),this.spineItemsManager=e,this.spineItemsObserver=n,this.context=i,this.settings=s,this.viewport=r,this.externalLayoutTrigger=new o.Subject,this.spineItemsRelativeLayouts=[];const a=o.merge(n.itemLoad$,n.itemUnload$),c=o.merge(this.externalLayoutTrigger,a);this.layout$=c.pipe(o.tap(()=>{this.spineItemsManager.items.forEach(l=>{l.markDirty()})}),o.debounceTime(50),o.switchMap(()=>this.spineItemsManager.items.reduce((l,u,d)=>l.pipe(o.concatMap(({horizontalOffset:p,verticalOffset:g})=>{const h=p%r.absoluteViewport.width===0,m=d===e.items.length-1,f=s.values.computedPageTurnDirection==="vertical",S=i.isRTL(),w=this.getSpreadPosition(h,S),{edgeX:T,edgeY:I}=this.getStartEdges(f,h,p,g,r.absoluteViewport.height);return u.layout({spreadPosition:w,horizontalOffset:p,isLastItem:m,edgeX:T,edgeY:I}).pipe(o.map(({width:v,height:P})=>{const M=this.createSpineItemLayout(f,S,T,I,v,P,r.absoluteViewport.width);return this.spineItemsRelativeLayouts[d]=M,{horizontalOffset:T+v,verticalOffset:f?I+P:0}}))})),o.of({horizontalOffset:0,verticalOffset:0}))),o.takeUntil(this.destroy$),o.share()),this.layout$.subscribe(),this.watchForVerticalWritingUpdate()}watchForVerticalWritingUpdate(){this.spineItemsObserver.itemLoad$.pipe(o.tap(e=>{this.context.update({hasVerticalWriting:e.isUsingVerticalWriting()})}),o.takeUntil(this.destroy$)).subscribe()}layout(){this.externalLayoutTrigger.next(void 0)}getSpineItemSpineLayoutInfo(e){const n=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[n]||new se({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,n)=>e+n.numberOfPages,0)}destroy(){super.destroy(),this.externalLayoutTrigger.complete()}getSpreadPosition(e,n){return this.settings.values.computedSpreadMode?e?n?"right":"left":n?"left":"right":"none"}getStartEdges(e,n,i,s,r){return e?{edgeX:n?0:i,edgeY:n?s:s-r}:{edgeX:i,edgeY:0}}createSpineItemLayout(e,n,i,s,r,a,c){if(e){const u=r+i,d=a+s;return new se({left:i,right:u,top:s,bottom:d,height:a,width:r,x:i,y:s})}const l=n?c-i-r:i;return new se({right:n?c-i:i+r,left:l,x:l,top:s,bottom:a,height:a,width:r,y:s})}}class tn extends R{constructor(e,n,i,s,r,a,c){super(),this.context=e,this.pagination=n,this.spineItemsManager=i,this.spineItemLocator=s,this.settings=r,this.hookManager=a,this.viewport=c,this.elementSubject=new o.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineItemsObserver=new en(i),this.spineLayout=new lr(i,this.spineItemsObserver,e,r,c),this.locator=cr({context:e,spineItemsManager:i,spineItemLocator:s,settings:r,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new tr(this.context,i,this.locator,r,this.spineLayout,this.viewport),this.pages=new q(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const l=e.watch("rootElement").pipe(b.filter(O),b.tap(d=>{const p=d.ownerDocument.createElement("div");p.style.cssText=`
234
234
  height: 100%;
235
235
  position: relative;
236
- `,p.className=`${E}-spine`,this.elementSubject.next(p)})),d=r.combineLatest([this.context.manifest$,this.element$]).pipe(I.tap(([u,p])=>{if(!p)return;this.spineItemsManager.destroyItems();const g=u.spineItems.map((h,m)=>new De(h,p,this.context,this.settings,this.hookManager,m,this.viewport));this.spineItemsManager.addMany(g)}));r.merge(d,l).pipe(I.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}getSpineItemSpineLayoutInfo(e){return this.spineLayout.getSpineItemSpineLayoutInfo(e)}get layout$(){return this.pages.layout$}destroy(){super.destroy(),this.pages.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue()?.remove(),this.elementSubject.complete()}}class Jt extends N{constructor(e,n){super(),this.context=e,this.settings=n,this.orderedSpineItemsSubject=new r.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(e){return typeof e=="number"?this.orderedSpineItemsSubject.value[e]:typeof e=="string"?this.orderedSpineItemsSubject.value.find(({item:n})=>n.id===e):e}comparePositionOf(e,n){const i=this.getSpineItemIndex(e)??0,o=this.getSpineItemIndex(n)??0;return i>o?"after":i===o?"same":"before"}getSpineItemIndex(e){const n=e instanceof De?e:this.get(e);if(!n)return;const i=this.orderedSpineItemsSubject.value.indexOf(n);return i<0?void 0:i}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:n}=le(e);if(n!==void 0)return this.get(n)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>{e.destroy()})}}class Kt extends O{constructor(e,n){const i=document.createElement("div");i.setAttribute(`data-${ot}`,""),super({element:i,pageSize:{width:1,height:1},width:1,height:1}),this.context=e,this.settingsManager=n;const o=this.settingsManager.watch(["computedSpreadMode"]).pipe(r.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize(this.value)})})),s=this.context.watch("rootElement").pipe(r.tap(()=>{this.layout()}));r.merge(o,s).pipe(r.takeUntil(this.destroy$)).subscribe()}calculatePageSize(e){const{computedSpreadMode:n}=this.settingsManager.values;return{width:n?e.width/2:e.width,height:e.height}}layout(){const e={width:this.value.element.clientWidth,height:this.value.element.clientHeight};this.mergeCompare({pageSize:this.calculatePageSize(e),...e})}get absoluteViewport(){return new Xo({width:this.value.width,height:this.value.height})}get pageSize(){return this.value.pageSize}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,n=this.scaleFactor;return new Go({width:e.width/n,height:e.height/n})}}const Qt=`${nt}-core`,tr=t=>{const e=crypto.randomUUID(),n=new r.Subject,i=new r.Subject,o=new Et,s=new Ct,a=new Bo(t,s),c=new Lt(s,a),l=new Jt(s,a),d=new Kt(s,a),u=_t({context:s,settings:a,viewport:d}),p=new Ht(s,l),g=new Zt(s,p,l,u,a,o,d),h=_o({context:s,spineItemsManager:l,hookManager:o,spine:g,settings:a,viewport:d}),m=new xt(s,p,l,g,u);h.navigationState$.subscribe(s.bridgeEvent.viewportStateSubject),h.navigation$.subscribe(s.bridgeEvent.navigationSubject),h.locker.isLocked$.subscribe(s.bridgeEvent.navigationIsLockedSubject),p.subscribe(s.bridgeEvent.paginationSubject);const f=()=>{n.next()},S=P=>{const{containerElement:F,manifest:R}=P;if(s.manifest){C.warn("loading a new book is not supported yet");return}C.log("load",{options:P});const A=nr(F,e);s.update({manifest:R,rootElement:A}),f()},y=a.watch(["computedSpreadMode"]).pipe(I.skip(1),I.tap(f)),w=n.pipe(I.tap(()=>{const P=s.value.rootElement;P&&(P.style.setProperty("overflow","hidden"),d.layout(),g.layout())}),I.takeUntil(i)),v=r.merge(w,y).subscribe();fe(document,Qt,ho);const $=()=>{Se(document,Qt),v.unsubscribe(),l.destroy(),m.destroy(),a.destroy(),p.destroy(),s.destroy(),h.destroy(),g.destroy(),c.destroy(),i.next(),i.complete(),d.destroy()};return{id:e,context:s,spine:g,hookManager:o,cfi:{generateCfiFromRange:pt,parseCfi:le,generateCfiForSpineItemPage:ae,resolveCfi:P=>Fe({...P,spineItemsManager:l})},navigation:h,spineItemsObserver:g.spineItemsObserver,spineItemsManager:l,layout:f,load:S,destroy:$,pagination:{get state(){return p.value},get state$(){return p}},settings:a,renderHeadless:P=>l.get(P)?.renderer.renderHeadless()??r.of(void 0),viewport:d,viewportState$:s.bridgeEvent.viewportState$,viewportFree$:s.bridgeEvent.viewportFree$,state$:s.manifest$.pipe(I.map(P=>P?"ready":"idle")),features:c,$:{destroy$:i}}},nr=(t,e)=>(t.style.cssText=`
236
+ `,p.className=`${N}-spine`,this.elementSubject.next(p)})),u=o.combineLatest([this.context.manifest$,this.element$]).pipe(b.tap(([d,p])=>{if(!p)return;this.spineItemsManager.destroyItems();const g=d.spineItems.map((h,m)=>new ke(h,p,this.context,this.settings,this.hookManager,m,this.viewport));this.spineItemsManager.addMany(g)}));o.merge(u,l).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 nn extends R{constructor(e,n){super(),this.context=e,this.settings=n,this.orderedSpineItemsSubject=new o.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(e){return typeof e=="number"?this.orderedSpineItemsSubject.value[e]:typeof e=="string"?this.orderedSpineItemsSubject.value.find(({item:n})=>n.id===e):e}comparePositionOf(e,n){const i=this.getSpineItemIndex(e)??0,s=this.getSpineItemIndex(n)??0;return i>s?"after":i===s?"same":"before"}getSpineItemIndex(e){const n=e instanceof ke?e:this.get(e);if(!n)return;const i=this.orderedSpineItemsSubject.value.indexOf(n);return i<0?void 0:i}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:n}=le(e);if(n!==void 0)return this.get(n)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>{e.destroy()})}}class on extends D{constructor(e,n){const i=document.createElement("div");i.setAttribute(`data-${st}`,""),super({element:i,pageSize:{width:1,height:1},width:1,height:1}),this.context=e,this.settingsManager=n,this.layoutSubject=new o.Subject,this.layout$=this.layoutSubject.asObservable();const s=this.settingsManager.watch(["computedSpreadMode"]).pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize(this.value)})})),r=this.context.watch("rootElement").pipe(o.tap(()=>{this.layout()}));o.merge(s,r).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(e){const{computedSpreadMode:n}=this.settingsManager.values;return{width:n?e.width/2:e.width,height:e.height}}layout(){const e={width:this.value.element.clientWidth,height:this.value.element.clientHeight};this.mergeCompare({pageSize:this.calculatePageSize(e),...e}),this.layoutSubject.next()}get absoluteViewport(){return new nr({width:this.value.width,height:this.value.height})}get pageSize(){return this.value.pageSize}get scaleFactor(){const e=this.absoluteViewport;return e.width?(this.value.element.getBoundingClientRect()?.width||e.width)/e.width:1}get relativeViewport(){const e=this.absoluteViewport,n=this.scaleFactor;return new ir({width:e.width/n,height:e.height/n})}destroy(){super.destroy(),this.layoutSubject.complete()}}const rn=`${ot}-core`,ur=t=>{const e=crypto.randomUUID(),n=new o.Subject,i=new o.Subject,s=new Ot,r=new Rt,a=new Ko(t,r),c=new Dt(r,a),l=new nn(r,a),u=new on(r,a),d=Yt({context:r,settings:a,viewport:u}),p=new Zt(r,l),g=new tn(r,p,l,d,a,s,u),h=Zo({context:r,spineItemsManager:l,hookManager:s,spine:g,settings:a,viewport:u}),m=new Jt(r,p,l,g,d,h.isLocked$);h.navigationState$.subscribe(r.bridgeEvent.viewportStateSubject),h.navigation$.subscribe(r.bridgeEvent.navigationSubject),h.position$.subscribe(r.bridgeEvent.positionSubject),p.subscribe(r.bridgeEvent.paginationSubject);const f=()=>{n.next()},S=P=>{const{containerElement:M,manifest:A}=P;if(r.manifest){F.warn("loading a new book is not supported yet");return}F.log("load",{options:P});const V=dr(M,e);r.update({manifest:A,rootElement:V}),f()},w=a.watch(["computedSpreadMode"]).pipe(b.skip(1),b.tap(f)),T=n.pipe(b.tap(()=>{const P=r.value.rootElement;P&&(P.style.setProperty("overflow","hidden"),u.layout(),g.layout())}),b.takeUntil(i)),I=o.merge(T,w).subscribe();fe(document,rn,bo);const v=()=>{Se(document,rn),I.unsubscribe(),l.destroy(),m.destroy(),a.destroy(),p.destroy(),r.destroy(),h.destroy(),g.destroy(),c.destroy(),i.next(),i.complete(),u.destroy()};return{id:e,context:r,spine:g,hookManager:s,cfi:{generateCfiFromRange:St,parseCfi:le,generateCfiForSpineItemPage:ae,resolveCfi:P=>Ee({...P,spineItemsManager:l})},navigation:h,spineItemsObserver:g.spineItemsObserver,spineItemsManager:l,layout:f,load:S,destroy:v,pagination:{get state(){return p.value},get state$(){return p}},settings:a,renderHeadless:P=>l.get(P)?.renderer.renderHeadless()??o.of(void 0),viewport:u,viewportState$:r.bridgeEvent.viewportState$,viewportFree$:r.bridgeEvent.viewportFree$,state$:r.manifest$.pipe(b.map(P=>P?"ready":"idle")),features:c,$:{destroy$:i}}},dr=(t,e)=>(t.style.cssText=`
237
237
  ${t.style.cssText}
238
238
  background-color: white;
239
239
  position: relative;
240
- `,t.classList.add(`${E}-reader`),t.setAttribute(it,e),t.setAttribute("data-prose-reader-container",e),t),ir=to(In(oo(yn(dn(Ji(io(uo(mi(je(ii(pn(mn(wt(ct(no(tr)))))))))))))))),or=t=>e=>t(e);Object.defineProperty(b,"isShallowEqual",{enumerable:!0,get:()=>T.isShallowEqual}),b.AbstractSpinePosition=Me,b.Context=Ct,b.ControlledNavigationController=Rt,b.DestroyableClass=N,b.DocumentRenderer=J,b.Features=Lt,b.HTML_ATTRIBUTE_DATA_READER_ID=it,b.HTML_PREFIX=E,b.HTML_PREFIX_SCROLL_NAVIGATOR=rt,b.HTML_PREFIX_SPINE_ITEM=st,b.HTML_PREFIX_VIEWPORT=ot,b.HTML_STYLE_PREFIX=nt,b.HookManager=Et,b.InternalNavigator=Vt,b.LayoutEntry=oe,b.Locker=Ne,b.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=Zn,b.PROSE_READER_NAMESPACE=Xn,b.Pages=x,b.Pagination=Ht,b.PaginationController=xt,b.ReactiveEntity=O,b.ResourceHandler=ne,b.ResourcesLocator=mt,b.ScrollNavigationController=Mt,b.ScrollPosition=Le,b.SettingsManager=Yt,b.Spine=Zt,b.SpineItem=De,b.SpineItemPageLayout=et,b.SpineItemPageSpineLayout=tt,b.SpineItemPosition=L,b.SpineItemSpineLayout=se,b.SpineItemsManager=Jt,b.SpineItemsObserver=Gt,b.SpinePosition=M,b.UnboundScrollPosition=$t,b.UnboundSpineItemPagePosition=re,b.UnboundSpinePosition=U,b.VIEWPORT_ADJUSTMENT_THROTTLE=Gn,b.Viewport=Kt,b.consolidate=gt,b.createReader=ir,b.deferIdle=Pe,b.deferNextResult=Xe,b.generateCfiForSpineItemPage=ae,b.generateCfiFromRange=pt,b.generateRootCfi=H,b.getAttributeValueFromString=ye,b.getBase64FromBlob=fn,b.getFrameViewportInfo=j,b.getItemAnchor=fi,b.htmlEnhancer=je,b.idle=ve,b.injectCSSToFrame=He,b.isDefined=D,b.isHtmlElement=me,b.isHtmlTagElement=Be,b.isRootCfi=ce,b.layoutEnhancer=ct,b.mapKeysTo=we,b.observeIntersection=Sn,b.observeMutation=Te,b.observeResize=te,b.paginationEnhancer=wt,b.parseCfi=le,b.pick=qe,b.removeCSS=un,b.resolveCfi=Fe,b.rootEnhancer=or,b.spinePositionToSpineItemSpineLayout=ft,b.upsertCSSToFrame=V,b.waitForFrameLoad=xe,b.waitForFrameReady=Ye,b.waitForSwitch=Z,b.watchKeys=ee,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})}));
240
+ `,t.classList.add(`${N}-reader`),t.setAttribute(rt,e),t.setAttribute("data-prose-reader-container",e),t),pr=ao(Mn(uo($n(Sn(no(lo(So(vi(tt(li(yn(vn(Mt(ut(co(ur)))))))))))))))),hr=t=>e=>t(e),gr=5e3,mr=(t,{itemReadinessTimeoutMs:e=gr}={})=>ht(t).pipe(o.switchMap(n=>{if(n.boundary==="start")return o.of(n);const i=t.spineItemsManager.items,s=i[i.length-1];return s?s.value.isReady?o.of(n):s.isReady$.pipe(o.filter(Boolean),o.first(),o.map(()=>n),e===1/0?o.identity:o.timeout({first:e,with:()=>o.EMPTY}),pt(t.navigation)):o.EMPTY}),o.share());Object.defineProperty(y,"isShallowEqual",{enumerable:!0,get:()=>$.isShallowEqual}),y.AbstractSpinePosition=Me,y.Context=Rt,y.ControlledNavigationController=kt,y.DestroyableClass=R,y.DocumentRenderer=J,y.Features=Dt,y.HTML_ATTRIBUTE_DATA_READER_ID=rt,y.HTML_PREFIX=N,y.HTML_PREFIX_SCROLL_NAVIGATOR=at,y.HTML_PREFIX_SPINE_ITEM=ct,y.HTML_PREFIX_VIEWPORT=st,y.HTML_STYLE_PREFIX=ot,y.HookManager=Ot,y.InternalNavigator=Bt,y.LayoutEntry=oe,y.Locker=Re,y.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=ti,y.PROSE_READER_NAMESPACE=jn,y.Pages=q,y.Pagination=Zt,y.PaginationController=Jt,y.ReactiveEntity=D,y.ResourceHandler=ne,y.ResourcesLocator=It,y.ScrollNavigationController=Nt,y.ScrollPosition=Ne,y.SettingsManager=Kt,y.Spine=tn,y.SpineItem=ke,y.SpineItemPageLayout=nt,y.SpineItemPageSpineLayout=it,y.SpineItemPosition=C,y.SpineItemSpineLayout=se,y.SpineItemsManager=nn,y.SpineItemsObserver=en,y.SpinePosition=L,y.UnboundScrollPosition=Lt,y.UnboundSpineItemPagePosition=re,y.UnboundSpinePosition=E,y.VIEWPORT_ADJUSTMENT_THROTTLE=ei,y.Viewport=on,y.consolidate=bt,y.createReader=pr,y.deferIdle=Pe,y.deferNextResult=Ze,y.generateCfiForSpineItemPage=ae,y.generateCfiFromRange=St,y.generateRootCfi=x,y.getAttributeValueFromString=be,y.getBase64FromBlob=wn,y.getFrameViewportInfo=j,y.getItemAnchor=wi,y.htmlEnhancer=tt,y.idle=we,y.injectCSSToFrame=qe,y.isDefined=O,y.isHtmlElement=me,y.isHtmlTagElement=xe,y.isRootCfi=ce,y.layoutEnhancer=ut,y.mapKeysTo=ve,y.observeBookBoundaryReached=mr,y.observeIntersection=Pn,y.observeMutation=Te,y.observeNextSettledNavigation=dt,y.observeResize=te,y.observeSettledNavigation=Ce,y.paginationEnhancer=Mt,y.parseCfi=le,y.pick=Ge,y.removeCSS=fn,y.resolveCfi=Ee,y.rootEnhancer=hr,y.spinePositionToSpineItemSpineLayout=vt,y.takeUntilNextNavigationSettled=pt,y.upsertCSSToFrame=k,y.waitForFrameLoad=Ye,y.waitForFrameReady=Xe,y.waitForNavigationSettled=Fe,y.waitForSwitch=Z,y.watchKeys=ee,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})}));
241
241
  //# sourceMappingURL=index.umd.cjs.map