@prose-reader/core 1.281.0 → 1.282.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.
@@ -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)}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}),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.next({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.next({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.next({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.next({state:"idle",error:void 0})}),r.takeUntil(i)))),r.share()),r.merge(this.loaded$,this.unloaded$).pipe(r.catchError(o=>(this.next({state:"error",error:o}),r.EMPTY)),r.takeUntil(this.destroy$)).subscribe()}setDocumentContainer(e){this._documentContainer=e,this._documentContainer.classList.add(pe.DOCUMENT_CONTAINER_CLASS_NAME)}attach(){this.documentContainer&&this.containerElement.appendChild(this.documentContainer)}detach(){this._documentContainer?.remove(),this._documentContainer=void 0}get state$(){return this.stateSubject}get isLoaded$(){return this.state$.pipe(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._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
+ `,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([`
15
15
  <html>
16
16
  <head>
17
17
  ${e.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${a}, height=${c}">`:""}
@@ -227,7 +227,7 @@
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.state$.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
+ `,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=`
231
231
  position: absolute;
232
232
  overflow: hidden;
233
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=`