@prose-reader/core 1.278.0 → 1.279.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.
- package/dist/enhancers/html/renderer/HtmlRenderer.d.ts +3 -1
- package/dist/index.js +1186 -1231
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +22 -21
- package/dist/index.umd.cjs.map +1 -1
- package/dist/utils/frames.d.ts +1 -1
- package/package.json +4 -4
- package/dist/enhancers/media/ImageRenderer.d.ts +0 -18
package/dist/index.umd.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
(function(y,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi"],r):(y=typeof globalThis<"u"?globalThis:y||self,r(y.prose={},y.rxjs,y.shared,y.operators,y.cfi))})(this,(function(y,r,T,I,W){"use strict";const
|
|
1
|
+
(function(y,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("rxjs"),require("@prose-reader/shared"),require("rxjs/operators"),require("@prose-reader/cfi")):typeof define=="function"&&define.amd?define(["exports","rxjs","@prose-reader/shared","rxjs/operators","@prose-reader/cfi"],r):(y=typeof globalThis<"u"?globalThis:y||self,r(y.prose={},y.rxjs,y.shared,y.operators,y.cfi))})(this,(function(y,r,T,I,W){"use strict";const C=T.Report.namespace("@prose-reader/core",void 0,{color:"#98cde7"}),Zt=["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"];function Jt(n,e,t){if("caretPositionFromPoint"in n)return n.caretPositionFromPoint(e,t);if("caretRangeFromPoint"in n&&typeof n.caretRangeFromPoint<"u")return n.caretRangeFromPoint(e,t)}const Kt=(n,e)=>{const t="createRange"in n?n:n.ownerDocument;if(!t)return;const i="body"in n?de(n.body,e):de(n,e);if(i){let o,s=0;const a=t.createRange();return Array.from(i.childNodes).some(c=>{a.selectNodeContents(c);const l=a.getClientRects(),d=Qt(l,e);if(d){o=a.cloneRange();const u=Jt(t,Math.ceil(d.left),Math.ceil(d.top));return u&&"startContainer"in u&&u.startContainer===o.startContainer&&(s=u.startOffset),u&&"offsetNode"in u&&u.offsetNode===o.startContainer&&(s=u.offset),!0}return!1}),o?{node:o.startContainer,offset:s}:{node:i,offset:0}}},de=(n,e)=>{const t=n.getBoundingClientRect(),i=De(t,e);let o;i!=="before"&&i!=="after"&&(o=n);for(const s of n.children){const a=de(s,e);if(a)return a}return o};function De(n,{left:e,right:t}){return n.left<=e&&n.right<=e?"before":n.left<=e&&n.right>e&&n.right<=t?"partially-before":n.left<=t&&n.right>t?"partially-after":n.left>t?"after":"within"}function Qt(n,e){return Array.from(n).find(t=>{const i=De(t,e);return i!=="before"&&i!=="after"})}const jt=(n,e)=>{if(n.nodeType!==Node.CDATA_SECTION_NODE&&n.nodeType!==Node.DOCUMENT_TYPE_NODE){const t=n.ownerDocument?.createRange();t?.selectNodeContents(n);try{e<=(t?.endOffset||0)&&t?.setStart(n,e||0)}catch(i){C.error(i)}return t}},pe=n=>{if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.PointerEvent&&n instanceof e.PointerEvent)return!0}if(n?.view?.window){const e=n?.view;if(e.PointerEvent&&n instanceof e.PointerEvent)return!0}return!!Zt.includes(n.type)},en=n=>{if(pe(n))return!1;if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.MouseEvent)return n instanceof e.MouseEvent}if(n?.view?.window){const e=n?.view;if(e.MouseEvent)return n instanceof e.MouseEvent}return!1},tn=n=>{if(n?.target&&n?.target?.ownerDocument?.defaultView){const e=n?.target?.ownerDocument?.defaultView;if(e.TouchEvent)return n instanceof e.TouchEvent}if(n?.view?.window){const e=n?.view;if(e.TouchEvent)return n instanceof e.TouchEvent}return!1},nn=()=>document.createElement("div"),Ve=n=>{const e=["img","video","audio","source","link","script"].join(",");return Array.from(n?.querySelectorAll(e)||[])},on=n=>{if(Ve(n).forEach(t=>{const i=t.getAttribute("src")||t.getAttribute("href");i?.startsWith("blob:")&&n?.defaultView?.URL.revokeObjectURL(i)}),n){const t=Array.from(n.styleSheets||[]);for(const i of t){const s=(()=>{try{return Array.from(i.cssRules||[])}catch(a){return C.warn(`Error getting rules for sheet: ${i.href}`,a),[]}})();for(const a of s)if(n.defaultView&&a instanceof n.defaultView.CSSFontFaceRule){const l=a.style.getPropertyValue("src").match(/blob:[^,\s'")]+/g);l&&l.forEach(d=>{n?.defaultView?.URL.revokeObjectURL(d)})}}}};function Ue(n,e,t=[]){if(typeof n!="object"||n===null)return!1;for(const i of e)if(!(i in n))return!1;for(const i of t)if(i in n&&typeof n[i]!="function")return!1;return!0}function he(n){return Ue(n,["nodeType"],[])&&n.nodeType===Node.ELEMENT_NODE}function ke(n,e){return he(n)&&n.tagName.toLowerCase()===e.toLowerCase()}function rn(n){return Ue(n,["startContainer","endContainer","startOffset","endOffset","collapsed","commonAncestorContainer"],["setStart","setEnd","selectNodeContents"])}const ge=(n,e,t,i)=>{const o=n.createElement("style");return o.id=e,o.innerHTML=t,i?n.head.prepend(o):n.head.appendChild(o),()=>{me(n,e)}},me=(n,e)=>{if(n?.head){const t=n.getElementById(e);t&&t.remove()}},fe=(n,e)=>{const t=new RegExp(`${e}\\s*=\\s*([0-9.]+)`,"i"),i=n.match(t)||[],o=i[1]||"0";return i&&Number.parseFloat(o)||0},_e=(n,e,t,i)=>{n?.contentDocument?.head&&ge(n.contentDocument,e,t,i)},sn=(n,e)=>{n?.contentDocument&&me(n.contentDocument,e)},V=(n,e,t,i)=>{if(!n)return;const o=n?.contentDocument?.getElementById(e);if(o){o.innerHTML=t;return}_e(n,e,t,i)},K=n=>{if(n?.contentDocument){const t=n.contentDocument.querySelector("meta[name='viewport']");if(t){const i=t.getAttribute("content");if(i){const o=fe(i,"width"),s=fe(i,"height");return o>0&&s>0?{hasViewport:!0,width:o,height:s}:{hasViewport:!0}}}}return{hasViewport:!1}},ze=n=>n.pipe(r.switchMap(e=>e.src==="about:blank"&&e.contentDocument?.readyState==="complete"&&e.contentDocument.body?r.of(e):r.fromEvent(e,"load").pipe(r.take(1),r.map(()=>e)))),We=n=>n.pipe(r.switchMap(e=>{const t=e?.contentDocument?.fonts.ready;return t?r.from(t).pipe(r.map(()=>e)):r.of(e)})),an=n=>e=>{const t=n(e),i=new IntersectionObserver(o=>{o.forEach(s=>{s.isIntersecting?s.target.removeAttribute("tab-index"):s.target.setAttribute("tab-index","-1")})},{});return t.hookManager.register("item.onDocumentLoad",({itemId:o,destroy:s})=>{const a=t.spineItemsManager.get(o);if(!a)return;const c=a.renderer.getDocumentFrame();if(!c)return;V(c,"prose-reader-accessibility",`
|
|
2
2
|
:focus-visible {
|
|
3
3
|
|
|
4
4
|
outline: -webkit-focus-ring-color auto 1px;
|
|
5
5
|
}
|
|
6
|
-
`);const l=c.contentDocument?.body.querySelectorAll("a");l?.forEach(d=>{i.observe(d)}),s(()=>{l?.forEach(d=>{i.unobserve(d)})})}),{...t}},cn=n=>e=>{const t=n(e);return t.context.watch("rootElement").pipe(r.takeUntil(t.context.destroy$)).subscribe(i=>{if(!i)return;const o=()=>{t.settings.values.computedPageTurnMode==="controlled"&&i.scrollTo(0,0)};i.addEventListener("scroll",o)}),t.hookManager.register("item.onDocumentLoad",({itemId:i})=>{const s=t.spineItemsManager.get(i)?.renderer.getDocumentFrame();s&&s.contentDocument?.body.setAttribute("tabindex","-1")}),t},Se=({position:n,frameElement:e})=>{const t=e.getBoundingClientRect(),i=t.width/e.offsetWidth,o=t.height/e.offsetHeight,{left:s=0,top:a=0}=t,c=n.clientX*i+s,l=n.clientY*o+a;return{clientX:c,clientY:l}},ln=(n,e,t,i)=>{const o=e?.view?.frameElement;if(!e||!o)return n;const s=t.getSpineItemFromIframe(o),a=o,{height:c,width:l}=i.pageSize;if(!s||!(a instanceof HTMLIFrameElement))return n;if(pe(n)){const{clientX:d,clientY:u}=Se({position:n,frameElement:a}),p=new PointerEvent(n.type,{...n,pointerId:n.pointerId,clientX:d,clientY:u});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(en(n)){const{clientX:d,clientY:u}=Se({position:n,frameElement:a}),p=new MouseEvent(n.type,{...n,clientX:d,clientY:u});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(tn(n)){const d=Array.from(n.touches).map(p=>{const{clientX:g,clientY:h}=Se({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:g,clientY:h})}),u=new TouchEvent(n.type,{touches:d,changedTouches:d,targetTouches:d});return Object.defineProperty(u,"target",{value:e.target,enumerable:!0}),u}return n},un=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],dn=n=>e=>{const t=n(e);return t.hookManager.register("item.onDocumentLoad",({destroy:i,itemId:o})=>{const s=t.spineItemsManager.get(o),a=s?.renderer.getDocumentFrame();if(!a||!s)return;const c=un.map(l=>{const d=u=>{let p=u;if(pe(u)&&(p=new PointerEvent(u.type,u)),p!==u){const g=ln(p,u,t.spine.locator,t.viewport);t.context.value.rootElement?.dispatchEvent(g)}};return a.contentDocument?.addEventListener(l,d),()=>{a.contentDocument?.removeEventListener(l,d)}});i(()=>{c.forEach(l=>{l()})})}),t},pn=n=>{const e=new FileReader;return new Promise(t=>{e.addEventListener("load",()=>{t(e.result)},!1),e.readAsDataURL(n)})},
|
|
6
|
+
`);const l=c.contentDocument?.body.querySelectorAll("a");l?.forEach(d=>{i.observe(d)}),s(()=>{l?.forEach(d=>{i.unobserve(d)})})}),{...t}},cn=n=>e=>{const t=n(e);return t.context.watch("rootElement").pipe(r.takeUntil(t.context.destroy$)).subscribe(i=>{if(!i)return;const o=()=>{t.settings.values.computedPageTurnMode==="controlled"&&i.scrollTo(0,0)};i.addEventListener("scroll",o)}),t.hookManager.register("item.onDocumentLoad",({itemId:i})=>{const s=t.spineItemsManager.get(i)?.renderer.getDocumentFrame();s&&s.contentDocument?.body.setAttribute("tabindex","-1")}),t},Se=({position:n,frameElement:e})=>{const t=e.getBoundingClientRect(),i=t.width/e.offsetWidth,o=t.height/e.offsetHeight,{left:s=0,top:a=0}=t,c=n.clientX*i+s,l=n.clientY*o+a;return{clientX:c,clientY:l}},ln=(n,e,t,i)=>{const o=e?.view?.frameElement;if(!e||!o)return n;const s=t.getSpineItemFromIframe(o),a=o,{height:c,width:l}=i.pageSize;if(!s||!(a instanceof HTMLIFrameElement))return n;if(pe(n)){const{clientX:d,clientY:u}=Se({position:n,frameElement:a}),p=new PointerEvent(n.type,{...n,pointerId:n.pointerId,clientX:d,clientY:u});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(en(n)){const{clientX:d,clientY:u}=Se({position:n,frameElement:a}),p=new MouseEvent(n.type,{...n,clientX:d,clientY:u});return Object.defineProperty(p,"target",{value:e.target,enumerable:!0}),p}if(tn(n)){const d=Array.from(n.touches).map(p=>{const{clientX:g,clientY:h}=Se({position:p,frameElement:a});return new Touch({identifier:p.identifier,target:p.target,clientX:g,clientY:h})}),u=new TouchEvent(n.type,{touches:d,changedTouches:d,targetTouches:d});return Object.defineProperty(u,"target",{value:e.target,enumerable:!0}),u}return n},un=[...["pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"]],dn=n=>e=>{const t=n(e);return t.hookManager.register("item.onDocumentLoad",({destroy:i,itemId:o})=>{const s=t.spineItemsManager.get(o),a=s?.renderer.getDocumentFrame();if(!a||!s)return;const c=un.map(l=>{const d=u=>{let p=u;if(pe(u)&&(p=new PointerEvent(u.type,u)),p!==u){const g=ln(p,u,t.spine.locator,t.viewport);t.context.value.rootElement?.dispatchEvent(g)}};return a.contentDocument?.addEventListener(l,d),()=>{a.contentDocument?.removeEventListener(l,d)}});i(()=>{c.forEach(l=>{l()})})}),t},pn=n=>{const e=new FileReader;return new Promise(t=>{e.addEventListener("load",()=>{t(e.result)},!1),e.readAsDataURL(n)})},Be=(n,e)=>Object.entries(n).reduce((t,[i,o])=>e.includes(i)?{...t,[i]:o}:t,{}),ye=n=>I.map(e=>Be(e,n)),Q=n=>e=>e.pipe(ye(n),I.distinctUntilChanged(T.isShallowEqual));function j(n){return new r.Observable(e=>{const t=new ResizeObserver(i=>{e.next(i)});return t.observe(n),()=>{t.disconnect()}})}const X=n=>e=>e.pipe(I.switchMap(t=>n.pipe(I.first(),I.map(()=>t)))),He=n=>{let e;const t=n.subscribe(i=>{e={result:i}});return()=>(t.unsubscribe(),e?r.of(e.result):n)};function be(){return new r.Observable(n=>{if(window.requestIdleCallback){const t=window.requestIdleCallback(()=>{n.next(),n.complete()});return()=>cancelIdleCallback(t)}const e=setTimeout(()=>{n.next(),n.complete()},1);return()=>clearTimeout(e)})}function Ie(n){return r.defer(()=>be().pipe(I.switchMap(n)))}const we=(n,e)=>new r.Observable(t=>{const i=new MutationObserver(o=>{t.next(o)});return i.observe(n,e),()=>i.disconnect()});function hn(n,e){return new r.Observable(t=>{const i=new IntersectionObserver(o=>{t.next(o)},e);return i.observe(n),()=>{i.disconnect()}})}class xe{constructor(e,t){this.settingsManager=t;const i=T.shallowMergeIfDefined(this.getDefaultSettings(),e);this.outputSettings=this.computeOutputSettings(i),this.inputSettings=T.shallowMergeIfDefined(this.getDefaultSettings(),e),this.outputSettingsUpdateSubject=new r.Subject,this.values$=r.combineLatest([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe(I.startWith(this.outputSettings))]).pipe(I.map(([o,s])=>({...o,...s})),I.shareReplay(1)),this.values$.subscribe()}_prepareUpdate(e){const t=this.getCleanedParentInputSettings(e),i=this.settingsManager._prepareUpdate(t),o=T.shallowMergeIfDefined(this.inputSettings,e),s=this.computeOutputSettings(o),a=this.hasSettingsChanged(s);return{hasChanged:a||i.hasChanged,commit:()=>(this.inputSettings=o,this.outputSettings=s,!i.hasChanged&&a&&this.outputSettingsUpdateSubject.next(s),{...i.commit(),...s})}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){return{...this.settingsManager.values,...this.outputSettings}}watch(e){return Array.isArray(e)?this.values$.pipe(Q(e)):this.values$.pipe(I.map(t=>t[e]),I.distinctUntilChanged(T.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}}let gn=class extends xe{computeOutputSettings(e){return e}hasSettingsChanged(e){return!T.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{fontJustification:t,fontScale:i,fontWeight:o,lineHeight:s,...a}=e;return a}getDefaultSettings(){return{fontScale:1,fontWeight:"publisher",lineHeight:"publisher",fontJustification:"publisher"}}};const mn=n=>e=>{const{fontScale:t,lineHeight:i,fontWeight:o,fontJustification:s}=e,a=new r.Subject,c=n(e),l=new gn({fontScale:t,lineHeight:i,fontWeight:o,fontJustification:s},c.settings),d=()=>`
|
|
7
7
|
|
|
8
8
|
body {
|
|
9
9
|
${l.values.fontScale!==1?`font-size: ${l.values.fontScale}em !important;`:""}
|
|
@@ -11,16 +11,17 @@
|
|
|
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}},fn=n=>e=>{const t=n(e),i=o=>r.fromEvent(o,"keyup").pipe(r.map(s=>{const{pageTurnDirection:a,computedPageTurnMode:c}=t.settings.values;if(c==="scrollable")return s;if(a==="horizontal"){if(s.key==="ArrowRight")return t.navigation.turnRight();if(s.key==="ArrowLeft")return t.navigation.turnLeft()}if(a==="vertical"){if(s.key==="ArrowDown")return t.navigation.turnRight();if(s.key==="ArrowUp")return t.navigation.turnLeft()}return s}));return i(document).pipe(r.takeUntil(t.$.destroy$)).subscribe(),t.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(t.$.destroy$)).subscribe(),t},Sn=n=>n.spine.spineItemsManager.items$.pipe(r.switchMap(e=>r.merge(...e.map(t=>t.watch("isLoaded").pipe(r.switchMap(()=>{const i=t.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
|
|
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}},fn=n=>e=>{const t=n(e),i=o=>r.fromEvent(o,"keyup").pipe(r.map(s=>{const{pageTurnDirection:a,computedPageTurnMode:c}=t.settings.values;if(c==="scrollable")return s;if(a==="horizontal"){if(s.key==="ArrowRight")return t.navigation.turnRight();if(s.key==="ArrowLeft")return t.navigation.turnLeft()}if(a==="vertical"){if(s.key==="ArrowDown")return t.navigation.turnRight();if(s.key==="ArrowUp")return t.navigation.turnLeft()}return s}));return i(document).pipe(r.takeUntil(t.$.destroy$)).subscribe(),t.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(t.$.destroy$)).subscribe(),t},Sn=n=>n.spine.spineItemsManager.items$.pipe(r.switchMap(e=>r.merge(...e.map(t=>t.watch("isLoaded").pipe(r.switchMap(()=>{const i=t.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(t=>this.stateSubject.pipe(r.takeUntil(this._destroy$)).subscribe(t)),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 t={...this.value,...e};T.isShallowEqual(this.value,t)||this.stateSubject.next(t)}watch(e){return Array.isArray(e)?this.stateSubject.pipe(Q(e)):this.stateSubject.pipe(r.map(t=>t[e]),r.distinctUntilChanged(T.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.stateSubject.complete(),this._destroy$.complete()}}const ue=class ue 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 t=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(X(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(t)))),r.share()),this.unloaded$=t.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(ue.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(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),r.finalize(()=>{e.complete()}),r.catchError(t=>(C.error(t),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 t=this.getDocumentFrame();if(t){const{hasViewport:i}=K(t);if(i)return"pre-paginated"}return this.context.manifest?.renditionLayout??"reflowable"}};ue.DOCUMENT_CONTAINER_CLASS_NAME="prose-reader-document-container";let G=ue;const yn=n=>new URL(n.href);class ee{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await r.lastValueFrom(this.settings.values.getResource?.(this.item)??r.of(void 0))??yn(this.item)}async fetchResource(){const e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}}const Ye=(n,e)=>{const t=n.startsWith("file://"),i=t?n.replace("file://","http://"):n,o=new URL(e,i).toString();return t?o.replace("http://","file://"):o},bn=async(n,e,t,i,o)=>{if(!n||!n.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(n.defaultView&&l instanceof n.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]??"",b=i.manifest?.items.find(({href:w})=>`${Ye(t,S).toLowerCase()}`.endsWith(`${w.toLowerCase()}`));if(b){const w=new ee(b,o);try{const v=await w.getResource();if(v instanceof Response){const $=await v.blob(),P=n.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)}},In=(n,e,t,i,o)=>{const s=e.getAttribute("src")||e.getAttribute("href");if(!s)return r.of(null);const a=i.manifest?.items.find(({href:l})=>`${Ye(t,s).toLowerCase()}`.endsWith(`${l.toLowerCase()}`));if(!a)return r.of(null);const c=new ee(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=n?.defaultView?.URL.createObjectURL(l)??"";if(e.hasAttribute("src"))e.setAttribute("src",d);else if(e.hasAttribute("href")&&(e.setAttribute("href",d),n?.defaultView&&e instanceof n.defaultView.HTMLLinkElement))return new r.Observable(u=>{e.onload=async()=>{try{e.sheet&&await bn(n,e,t,i,o),u.next(),u.complete()}catch(p){u.error(p)}},e.onerror=u.error});return r.of(null)}))},wn=({settings:n,item:e,context:t})=>i=>i.pipe(r.switchMap(o=>{const s=Ve(o.contentDocument),a=T.getParentPath(e.href),c=s.map(l=>In(o.contentDocument,l,a,t,n));return c.length===0?r.of(o):r.combineLatest(c).pipe(r.map(()=>o))})),vn=n=>{on(n?.contentDocument)},Pn="@prose-reader/core",Tn=0,$n=200,qe=[".xhtml",".html",".htm"],E="prose-reader",Xe=`${E}-style`,Ge=`data-${E}-id`,Ze=`${E}-viewport`,Je=`${E}-scroll-navigator`,Ke=`${E}-spine-item`,Mn=async(n,e)=>{if(typeof n=="string")return n;const t=T.parseContentType(n.headers.get("Content-Type")||"")||T.detectMimeTypeFromName(e.href);if(["image/jpg","image/jpeg","image/png","image/webp"].some(o=>o===t)){const o=await n.blob(),s=URL.createObjectURL(o),a=await createImageBitmap(o),{width:c,height:l}={width:a.width,height:a.height};return a.close(),`
|
|
15
15
|
<html>
|
|
16
16
|
<head>
|
|
17
17
|
${e.renditionLayout==="pre-paginated"?`<meta name="viewport" content="width=${c}, height=${l}">`:""}
|
|
18
18
|
</head>
|
|
19
19
|
<body style="margin: 0px;" tab-index="-1;">
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
<img
|
|
21
|
+
src="${s}"
|
|
22
|
+
style="max-width:100%;height:100%;object-fit:contain;display:block;"
|
|
23
|
+
decoding="async"
|
|
24
|
+
>
|
|
24
25
|
</body>
|
|
25
26
|
</html>
|
|
26
27
|
`}return["text/plain"].some(o=>o===t)?`
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
<pre>${await n.text()}</pre>
|
|
40
41
|
</body>
|
|
41
42
|
</html>
|
|
42
|
-
`:await n.text()},Fn=({item:n,resourcesHandler:e})=>{const t=i=>Mn(i,n);return i=>i.pipe(r.switchMap(o=>r.from(e.getResource()).pipe(r.switchMap(s=>s instanceof URL&&n.href.startsWith(window.location.origin)&&(n.mediaType&&["application/xhtml+xml","application/xml","text/html","text/xml"].includes(n.mediaType)||!n.mediaType&&qe.some(c=>n.href.endsWith(c)))?(o?.setAttribute("src",n.href),r.of(o)):(s instanceof URL?r.from(e.fetchResource()):r.of(s)).pipe(r.switchMap(c=>{if(!(c instanceof Response))throw new Error("Invalid resource");return r.from(t(c))}),r.tap(c=>{if(c){const l=new Blob([c],{type:"text/html"}),d=URL.createObjectURL(l);o?.setAttribute("src",d)}}),r.map(()=>o),r.catchError(c=>(
|
|
43
|
+
`:await n.text()},Fn=({item:n,resourcesHandler:e})=>{const t=i=>Mn(i,n);return i=>i.pipe(r.switchMap(o=>r.from(e.getResource()).pipe(r.switchMap(s=>s instanceof URL&&n.href.startsWith(window.location.origin)&&(n.mediaType&&["application/xhtml+xml","application/xml","text/html","text/xml"].includes(n.mediaType)||!n.mediaType&&qe.some(c=>n.href.endsWith(c)))?(o?.setAttribute("src",n.href),r.of(o)):(s instanceof URL?r.from(e.fetchResource()):r.of(s)).pipe(r.switchMap(c=>{if(!(c instanceof Response))throw new Error("Invalid resource");return r.from(t(c))}),r.tap(c=>{if(c){const l=new Blob([c],{type:"text/html"}),d=URL.createObjectURL(l);o?.setAttribute("src",d)}}),r.map(()=>o),r.catchError(c=>(C.error(`Error while trying to fetch or load resource for item ${n.id}`,s),C.error(c),r.of(o))))))))},Cn=()=>{const n=document.createElement("iframe");return n.frameBorder="no",n.tabIndex=0,n.setAttribute("sandbox",`
|
|
43
44
|
allow-same-origin
|
|
44
45
|
allow-scripts
|
|
45
46
|
allow-top-navigation-to-custom-protocols
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
background-color: transparent;
|
|
49
50
|
border: 0px none transparent;
|
|
50
51
|
padding: 0px;
|
|
51
|
-
`,n.setAttribute("role","main"),n},
|
|
52
|
+
`,n.setAttribute("role","main"),n},Ln="body{margin:0}html,body{height:100%;width:100%}html[data-prose-reader-html-renderer-has-viewport-dimensions=false] body{display:flex}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=left] body{justify-content:flex-end}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=right] body{justify-content:flex-start}html[data-prose-reader-html-renderer-has-viewport-dimensions=false][data-prose-reader-html-renderer-spread-position=none] body{justify-content:center}:not(html.prose-reader-html-renderer-touch-enabled),:not(html.prose-reader-html-renderer-touch-enabled) body{touch-action:none}img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-khtml-user-drag:none;-moz-user-drag:none;-o-user-drag:none;display:flex}html[data-prose-reader-html-renderer-has-viewport-dimensions=false] img{max-width:100%;height:100%;object-fit:contain}",Qe=({pageHeight:n,pageWidth:e,frameElement:t})=>{const i=K(t);if(t?.contentDocument&&t.contentWindow&&i){const o=e/(i.width??1);return{computedScale:Math.min(o,n/(i.height??1)),computedWidthScale:o,viewportDimensions:i}}},je=(n,e)=>{n.style.width=`${e.width}px`,n.style.height=`${e.height}px`},En=({minPageSpread:n,blankPagePosition:e,spreadPosition:t,pageHeight:i,pageWidth:o,frameElement:s,isRTL:a})=>{const c=n*o;if(s?.contentDocument&&s?.contentWindow){const{viewportDimensions:l,computedScale:d=1}=Qe({frameElement:s,pageHeight:i,pageWidth:o})??{},u=!!l,p=o,g=i;if(s.contentDocument?.documentElement&&s.contentDocument?.documentElement.setAttribute("data-prose-reader-html-renderer-has-viewport-dimensions",u.toString()),l?je(s,{width:l.width??1,height:l.height??1}):je(s,{width:p,height:g}),l){s?.style.setProperty("position","absolute"),s?.style.setProperty("top","50%"),t==="left"?(s?.style.setProperty("right","0"),s?.style.removeProperty("left")):e==="before"&&a?(s?.style.setProperty("right","50%"),s?.style.removeProperty("left")):t==="right"?(s?.style.setProperty("left","0"),s?.style.removeProperty("right")):(s?.style.setProperty("left",e==="before"?a?"25%":"75%":e==="after"?a?"75%":"25%":"50%"),s?.style.removeProperty("right"));const h=t!=="none"?"0":"-50%",m=t==="right"&&e!=="before"?"left":t==="left"||e==="before"&&a?"right":"center";s?.style.setProperty("transform",`translate(${h}, -50%) scale(${d})`),s?.style.setProperty("transform-origin",`${m} center`)}else e==="before"?a?s?.style.setProperty("margin-right",`${o}px`):s?.style.setProperty("margin-left",`${o}px`):(s?.style.removeProperty("margin-left"),s?.style.removeProperty("margin-right"));return{width:c,height:g}}return{width:c,height:i}},Nn=()=>`
|
|
52
53
|
body {
|
|
53
54
|
margin: 0;
|
|
54
55
|
}
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
html, body {
|
|
66
67
|
touch-action: none;
|
|
67
68
|
}
|
|
68
|
-
`,
|
|
69
|
+
`,Rn=({isScrollable:n,enableTouch:e})=>`
|
|
69
70
|
|
|
70
71
|
html, body {
|
|
71
72
|
width: 100%;
|
|
@@ -151,14 +152,14 @@
|
|
|
151
152
|
td {
|
|
152
153
|
max-width: ${t}px;
|
|
153
154
|
}
|
|
154
|
-
`,
|
|
155
|
+
`,On=({isUsingVerticalWriting:n,minimumWidth:e,pageHeight:t,pageWidth:i})=>{let a=i-0;const c=t-0;let l=i-0;return n&&(l=e-0,a=c),{columnHeight:c,columnWidth:a,width:l}},te=(n,e)=>{n.style.width=`${e.width}px`,n.style.height=`${e.height}px`},Dn=({pageHeight:n,pageWidth:e,frameElement:t,manifest:i,minPageSpread:o,isRTL:s,blankPagePosition:a,isImageType:c,enableTouch:l,isUsingVerticalWriting:d})=>{const u=o*e,p=i?.renditionLayout==="reflowable"&&i?.renditionFlow==="scrolled-continuous",g=p?Math.min(400,n):n;t?.style.setProperty("width",`${e}px`),p?t?.style.removeProperty("height"):t?.style.setProperty("height",`${g}px`);const{viewportDimensions:h,computedScale:m=1}=Qe({frameElement:t,pageHeight:g,pageWidth:e})??{},f=i?.renditionLayout==="pre-paginated";if(t?.contentDocument&&t?.contentWindow&&t.contentDocument.body){let S=e,b=g;if(h?.hasViewport)V(t,"prose-reader-html-renderer-framce-css",Nn()),te(t,{width:h.width??1,height:h.height??1}),t?.style.setProperty("position","absolute"),t?.style.setProperty("top","50%"),t?.style.setProperty("left",a==="before"?s?"25%":"75%":a==="after"?s?"75%":"25%":"50%"),t?.style.setProperty("transform",`translate(-50%, -50%) scale(${m})`),t?.style.setProperty("transform-origin","center center");else{const v=c?Rn({isScrollable:i?.renditionFlow==="scrolled-continuous",enableTouch:l}):An(On({isUsingVerticalWriting:d,minimumWidth:u,pageHeight:g,pageWidth:e}));if(V(t,"prose-reader-css",v,!0),d)b=Math.ceil(t.contentDocument.documentElement.scrollHeight/g)*g,te(t,{width:u,height:b});else if(i?.renditionFlow==="scrolled-continuous")b=t.contentDocument.body.scrollHeight,te(t,{width:u,height:b});else{const $=Math.ceil(t.contentDocument.documentElement.scrollWidth/e);f?S=e:S=$*e,te(t,{width:S,height:b})}}return S%u===0?t?.style.setProperty("margin-left","0px"):(S=S+e,s&&!d&&t?.style.setProperty("margin-left",`${e}px`)),{width:S,height:b}}};class Vn extends G{constructor(){super(...arguments),this.isPrePaginated=()=>this.item.renditionLayout==="pre-paginated"||!this.item.renditionLayout&&this.context.manifest?.renditionLayout==="pre-paginated",this.isImageType=()=>!!(this.item.mediaType??T.detectMimeTypeFromName(this.item.href))?.startsWith("image/")}onCreateDocument(){const e=Cn();return this.setDocumentContainer(e),r.of(e)}onLoadDocument(){const e=this.getFrameElement();if(!e)throw new Error("invalid frame");return r.of(e).pipe(Fn({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),X(this.context.bridgeEvent.viewportFree$),r.tap(t=>{this.prepareFrameForAttach(t),this.attach()}),ze,r.tap(t=>{this.isPrePaginated()?V(t,"prose-reader-css",Ln):this.isImageType()}),wn({context:this.context,item:this.item,settings:this.settings}),We,r.tap(t=>{this.revealFrameAfterReady(t)}))}onUnload(){return vn(this.getFrameElement()),this.detach(),r.EMPTY}onLayout({minPageSpread:e,blankPagePosition:t,spreadPosition:i}){const{width:o,height:s}=this.viewport.pageSize,a=this.getFrameElement();if(!a)return r.of(void 0);const c=!!this.writingMode?.startsWith("vertical"),l=this.settings.values.computedPageTurnMode==="scrollable";if(a.contentDocument?.documentElement&&(a.contentDocument?.documentElement.setAttribute("data-prose-reader-html-renderer-spread-position",i),l?a.contentDocument?.documentElement.classList.add("prose-reader-html-renderer-touch-enabled"):a.contentDocument?.documentElement.classList.remove("prose-reader-html-renderer-touch-enabled")),this.isPrePaginated()){const u=En({blankPagePosition:t,frameElement:a,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:s,pageWidth:o,spreadPosition:i});return r.of(u)}const d=Dn({pageHeight:s,pageWidth:o,frameElement:a,manifest:this.context.manifest,blankPagePosition:t,isUsingVerticalWriting:c,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:this.isImageType(),enableTouch:this.settings.values.computedPageTurnMode==="scrollable"});return r.of(d)}onRenderHeadless(){return r.from(this.resourcesHandler.fetchResource()).pipe(r.switchMap(e=>{if(e instanceof Response){const t=e.headers.get("content-type")??"";if(["application/xhtml+xml","application/xml","text/html","text/xml"].includes(t))return r.from(e.text()).pipe(r.map(o=>new DOMParser().parseFromString(o,t)))}return r.of(void 0)}))}getFrameElement(){const e=this.documentContainer;if(e instanceof HTMLIFrameElement)return e}prepareFrameForAttach(e){e.style.setProperty("visibility","hidden"),e.style.setProperty("pointer-events","none"),e.style.setProperty("contain","layout paint size"),e.style.setProperty("display","block")}revealFrameAfterReady(e){e.style.removeProperty("visibility"),e.style.removeProperty("pointer-events"),e.style.removeProperty("contain")}getComputedStyleAfterLoad(){const e=this.getFrameElement(),t=e?.contentDocument?.body;if(t)return e?.contentWindow?.getComputedStyle(t)}get writingMode(){return this.getComputedStyleAfterLoad()?.writingMode}get readingDirection(){if(this.writingMode==="vertical-rl")return"rtl";switch(this.getComputedStyleAfterLoad()?.direction){case"ltr":case"inherit":case"initial":return"ltr";case"rtl":return"rtl";default:return}}getDocumentFrame(){return this.getFrameElement()}}const et=n=>e=>{const t=n({...e,getRenderer(o){return e.getRenderer?.(o)??(a=>new Vn(a))}}),i=Sn(t);return i.pipe(r.takeUntil(t.$.destroy$)).subscribe(),{...t,links$:i}};function D(n){return n!=null}class ne{constructor(e){this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.width=e.width,this.height=e.height,this.x=e.x,this.y=e.y}}class L{constructor(e){this.__symbol=Symbol("SpineItemPosition"),this.x=e.x,this.y=e.y}}class ie{constructor(e){this.__symbol=Symbol("SpineItemPagePosition"),this.x=e.x,this.y=e.y}}class tt extends ne{constructor(){super(...arguments),this.__symbol="SpineItemPageLayout"}}class oe extends ne{constructor(){super(...arguments),this.__symbol="SpineItemSpineLayout"}}class nt extends ne{constructor(){super(...arguments),this.__symbol="SpineItemPageSpineLayout"}}class ve{constructor(e){this.x=e.x,this.y=e.y}}class M extends ve{constructor(){super(...arguments),this.__symbol="SpinePosition"}static from(e){return new M(e)}}class U extends ve{constructor(){super(...arguments),this.__symbol="UnboundSpinePosition"}static from(e){return new U(e)}}const Un=(n,e)=>{const t=e.getBoundingClientRect(),{x:i,y:o}=n,{left:s,top:a}=t,c=t.width/e.offsetWidth,l=t.height/e.offsetHeight,d=i-s,u=o-a;return{x:d/c,y:u/l}},kn=(n,e)=>new U(Un(n,e)),_n=n=>({getSpinePositionFromClientPosition:e=>n.spine.element?kn(e,n.spine.element):void 0}),zn=n=>{let e;const t=n.context.watch("rootElement").pipe(I.switchMap(l=>l?new r.Observable(()=>(e=l.ownerDocument.createElement("div"),e.style.cssText=`
|
|
155
156
|
position: absolute;
|
|
156
157
|
left: 0;
|
|
157
158
|
top: 0;
|
|
158
159
|
width: 100%;
|
|
159
160
|
height: 100%;
|
|
160
161
|
visibility: hidden;
|
|
161
|
-
`,l.appendChild(e),()=>{e?.remove(),e=void 0})):r.NEVER)),i=l=>r.scheduled(l,r.animationFrameScheduler).pipe(I.tap(()=>{e?.style.setProperty("visibility","hidden")})),o=n.context.bridgeEvent.viewportBusy$.pipe(I.tap(()=>{e?.style.setProperty("visibility","visible")})),s=i(n.viewportFree$).pipe(I.take(1)),c=n.settings.values$.pipe(I.map(()=>n.settings.values.computedPageTurnMode),I.distinctUntilChanged()).pipe(I.switchMap(l=>l==="controlled"?o.pipe(I.switchMap(()=>s)):i(r.of(void 0))),I.takeUntil(n.$.destroy$));return r.merge(t,c)},it=`${`${
|
|
162
|
+
`,l.appendChild(e),()=>{e?.remove(),e=void 0})):r.NEVER)),i=l=>r.scheduled(l,r.animationFrameScheduler).pipe(I.tap(()=>{e?.style.setProperty("visibility","hidden")})),o=n.context.bridgeEvent.viewportBusy$.pipe(I.tap(()=>{e?.style.setProperty("visibility","visible")})),s=i(n.viewportFree$).pipe(I.take(1)),c=n.settings.values$.pipe(I.map(()=>n.settings.values.computedPageTurnMode),I.distinctUntilChanged()).pipe(I.switchMap(l=>l==="controlled"?o.pipe(I.switchMap(()=>s)):i(r.of(void 0))),I.takeUntil(n.$.destroy$));return r.merge(t,c)},it=`${`${E}-enhancer-loading`}-container`,Wn=({container:n,item:e,viewport:t})=>{const i=n.ownerDocument.createElement("div");i.classList.add(it),i.style.cssText=`
|
|
162
163
|
height: 100%;
|
|
163
164
|
width: 100%;
|
|
164
165
|
max-width: ${t.absoluteViewport.width}px;
|
|
@@ -182,17 +183,17 @@
|
|
|
182
183
|
overflow: hidden;
|
|
183
184
|
max-width: 300px;
|
|
184
185
|
width: 80%;
|
|
185
|
-
`,i.appendChild(o),i.appendChild(s),i},
|
|
186
|
+
`,i.appendChild(o),i.appendChild(s),i},Bn=n=>n.spineItemsManager.items$.pipe(I.switchMap(e=>r.merge(...e.map(t=>{t.containerElement.style.zIndex="0";const i=t.containerElement.querySelector(`.${it}`),o=i instanceof HTMLElement?i:Wn({container:t.containerElement,item:t.item,viewport:n.viewport});return t.containerElement.appendChild(o),r.merge(t.pipe(I.tap(s=>{if(o.style.setProperty("visibility",s.isReady?"hidden":"visible"),o.style.setProperty("z-index",s.isReady?"0":"1"),s.isError){const a=o.querySelector("[data-details-element]");a instanceof HTMLElement&&(a.innerText=s.error?.toString()??"Unknown error")}})),r.combineLatest([n.spine.layout$,n.theme.$.theme$]).pipe(I.tap(([,s])=>{const a=n.viewport.absoluteViewport.width;o.style.setProperty("max-width",`${a}px`),o.style.setProperty("color",s==="sepia"?"#939393":"rgb(202, 202, 202)")})))})))),Hn=n=>{n.hookManager.register("item.onDocumentLoad",({itemId:e})=>{n.spineItemsManager.get(e)?.renderer.getDocumentFrame()?.setAttribute("scrolling","no")})},xn=n=>{n.hookManager.register("item.onAfterLayout",({item:e,blankPagePosition:t,minimumWidth:i})=>{const o=n.spineItemsManager.get(e.id),s=o?.renderer.getDocumentFrame();if(o?.renditionLayout!=="reflowable"||!(s instanceof HTMLIFrameElement))return;const{hasViewport:a}=K(s),{width:c}=n.viewport.pageSize,l=o?.renderer.getDocumentFrame();if(a){const d=c<i;t==="none"&&d&&l instanceof HTMLIFrameElement&&l?.style.setProperty("left",n.context.isRTL()?"75%":"25%")}})},Yn=n=>n.spineItemsObserver.states$.pipe(r.tap(({item:e,isReady:t,isDirty:i})=>{e.containerElement.dataset.isDirty=i.toString(),e.containerElement.dataset.isReady=t.toString()}));let qn=class extends xe{computeOutputSettings(e){return e}hasSettingsChanged(e){return!T.isShallowEqual(this.outputSettings,e)}getCleanedParentInputSettings(e){const{layoutAutoResize:t,pageHorizontalMargin:i,pageVerticalMargin:o,layoutLayerTransition:s,...a}=e;return a}getDefaultSettings(){return{layoutAutoResize:"container",pageHorizontalMargin:24,pageVerticalMargin:24,layoutLayerTransition:!0}}};const Xn=n=>r.combineLatest([n.viewport.watch(["width","height"]),n.context.watch("manifest")]).pipe(r.tap(([{width:e,height:t},i])=>{const o=e>t;return!o&&i?.renditionSpread==="portrait"?n.settings.update({spreadMode:!0}):o&&(i?.renditionSpread===void 0||i?.renditionSpread==="auto"||i?.renditionSpread==="landscape"||i?.renditionSpread==="both")?n.settings.update({spreadMode:!0}):n.settings.update({spreadMode:!1})})),ot=n=>e=>{const{pageHorizontalMargin:t,pageVerticalMargin:i,layoutAutoResize:o,layoutLayerTransition:s}=e,a=n(e),c=new qn({pageHorizontalMargin:t,pageVerticalMargin:i,layoutAutoResize:o,layoutLayerTransition:s},a.settings);a.hookManager.register("onViewportOffsetAdjust",()=>{let f=!1;a.spineItemsManager.items.forEach(S=>{const b=S.renderer.getDocumentFrame();!f&&b&&(b.getBoundingClientRect().left,f=!0)})}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const S=a.spineItemsManager.get(f.id),w=!!(f.mediaType??T.detectMimeTypeFromName(f.href))?.startsWith("image/"),{pageHorizontalMargin:v=0,pageVerticalMargin:$=0}=c.values,P=a.viewport.pageSize;if(S?.renditionLayout==="reflowable"&&!w){let F=P.width-v*2;const R=P.height-$*2;let A=P.width-v*2,x=v*2;S.isUsingVerticalWriting()&&(A=P.width-v*2,F=R,x=$*2);const Y=S?.renderer.getDocumentFrame();Y&&V(Y,"prose-layout-enhancer-css",`
|
|
186
187
|
body {
|
|
187
188
|
width: ${A}px !important;
|
|
188
189
|
margin: ${$}px ${v}px !important;
|
|
189
190
|
column-gap: ${x}px !important;
|
|
190
191
|
column-width: ${F}px !important;
|
|
191
|
-
height: ${
|
|
192
|
+
height: ${R}px !important;
|
|
192
193
|
}
|
|
193
194
|
img, video, audio, object, svg {
|
|
194
195
|
-max-width: ${F}px !important;
|
|
195
|
-
-max-height: ${
|
|
196
|
+
-max-height: ${R}px !important;
|
|
196
197
|
}
|
|
197
198
|
table {
|
|
198
199
|
max-width: ${F}px !important;
|
|
@@ -200,7 +201,7 @@
|
|
|
200
201
|
td {
|
|
201
202
|
max-width: ${F}px;
|
|
202
203
|
}
|
|
203
|
-
`)}}),xn(a),Bn(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:f})=>{f.style.opacity="0",c.values.layoutLayerTransition&&(f.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const b=a.spineItemsManager.get(f.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&b?.setAttribute("tab-index","0")});const l=a.spineItemsObserver.states$.pipe(I.filter(({isReady:f})=>f),I.tap(({item:f})=>{const S=f.renderer.documentContainer;S&&(S.style.opacity="1")})),d=c.values$.pipe(I.filter(({layoutAutoResize:f})=>f==="container"),I.switchMap(()=>a.context.watch("rootElement")),I.filter(O),I.switchMap(f=>j(f)),I.debounceTime(100),I.filter(O),I.tap(()=>{a?.layout()})),u=zn(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(I.skip(1),I.tap(()=>{a.layout()}),I.takeUntil(a.$.destroy$)).subscribe();const p=a.spine.pages.pipe(I.shareReplay({refCount:!0,bufferSize:1})),g=Yn(a),h=Xn(a),m=Hn(a);return r.merge(l,u,d,p,g,h,m).pipe(I.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:a.spine.layout$,layoutInfo$:p,coordinates:_n(a)}};class Gn extends X{getImageElement(){const e=this.documentContainer;if(e instanceof HTMLImageElement)return e}onCreateDocument(){const e=this.containerElement.ownerDocument.createElement("img");return r.from(this.resourcesHandler.getResource()).pipe(r.switchMap(t=>{if(this.setDocumentContainer(e),e.style.objectFit="contain",e.style.userSelect="none",t instanceof URL)return r.of(t.href);if(t instanceof Response)return r.from(t.blob()).pipe(r.map(i=>URL.createObjectURL(i)));throw new Error("Invalid resource")}),r.map(t=>{const i=this.getImageElement();return i&&(i.src=t),e}))}onLoadDocument(){const e=this.getImageElement();if(!e)throw new Error("invalid element");return this.attach(),r.fromEvent(e,"load")}onUnload(){const e=this.getImageElement();return e&&URL.revokeObjectURL(e.src),this.detach(),r.EMPTY}onLayout({spreadPosition:e}){const t=this.getImageElement(),{height:i,width:o}=this.viewport.value.pageSize;let s=i;const a=o;if(!t)return r.of(void 0);const c=t.naturalWidth||1,l=t.naturalHeight||1,d=c/l;return this.settings.values.computedPageTurnDirection==="vertical"&&this.settings.values.computedPageTurnMode==="scrollable"&&!this.settings.values.computedSpreadMode&&(s=Math.ceil(o/d)),t.style.height=`${s}px`,t.style.width=`${a}px`,t.style.objectPosition=e==="left"?"right":e==="right"?"left":"center",r.of({width:a,height:s})}onRenderHeadless(){return r.EMPTY}getDocumentFrame(){}}const Zn=n=>e=>{const t=n({...e,getRenderer(a){const c=e.getRenderer?.(a),d=!!(a.mediaType??T.detectMimeTypeFromName(a.href))?.startsWith("image/");return!c&&d?u=>new Gn(u):c}}),i=new IntersectionObserver(a=>{a.forEach(c=>{const l=c.target,d=Array.from(l.contentDocument?.body.getElementsByTagName("audio")||[]);c.isIntersecting?d.forEach(u=>{u.hasAttribute("autoplay")&&u.paused&&u.readyState>=2&&u.play().catch(console.error)}):d.forEach(u=>{u.pause(),u.currentTime=0})})},{threshold:.01}),o=new IntersectionObserver(a=>{a.forEach(c=>{if(c.target.tagName==="video"){const l=c.target;c.isIntersecting?l.hasAttribute("autoplay")&&l.paused&&l.readyState>=2&&l.play().catch(console.error):(l.pause(),l.currentTime=0)}})},{threshold:.5});return t.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{const l=t.spineItemsManager.get(c)?.renderer.getDocumentFrame();if(!l)return;i.observe(l);const d=l.contentDocument?.body.getElementsByTagName("video"),u=Array.from(d||[]).map(p=>(o.observe(p),()=>o.unobserve(p)));a(()=>{i.unobserve(l),u.forEach(p=>{p()})})}),{...t,destroy:()=>{i.disconnect(),o.disconnect(),t.destroy()}}},Jn=(n,e)=>n.links$.pipe(r.tap(t=>{if(!ke(t.target,"a")||t.type!=="click")return;const i=new URL(t.target.href),o=`${i.origin}${i.pathname}`;n.context.manifest?.spineItems.some(a=>a.href===o)&&e.goToUrl(i)})),k=E.namespace("navigation"),Kn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:o})=>{let s=new C({x:n.x-i,y:n.y});return e.isUsingVerticalWriting()&&(s=new C({x:n.x,y:n.y+t})),o.getSpineItemClosestPositionFromUnsafePosition(s,e)},rt=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:o,viewport:s})=>{const a=t,c=o.getSpineItemFromPosition(n)||i.get(0),l=n;if(!c)return l;const d=o.getSpineItemPositionFromSpinePosition(n,c),u=Kn({position:d,spineItem:c,pageHeight:s.pageSize.height,pageWidth:s.pageSize.width,spineItemLocator:o.spineItemLocator});return e.arePositionsDifferent(u,d)?o.getSpinePositionFromSpineItemPosition({spineItemPosition:u,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new M({x:n.x-s.pageSize.width,y:0}):new M({y:n.y-s.pageSize.height,x:0}))},Qn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:o,spineLocator:s,computedPageTurnDirection:a,viewport:c,settings:l})=>{const d=rt({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});if(e?.isUsingVerticalWriting()&&n.x===d.x)return i.getAdjustedPositionForSpread(d);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==d.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...d,x:d.x+c.pageSize.width}:{...d,x:d.x-c.pageSize.width}));if(a==="vertical"&&n.y!==d.y)return i.getAdjustedPositionForSpread(d);const u=rt({position:d,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});return i.getAdjustedPositionForSpread(u)}return i.getAdjustedPositionForSpread(d)},jn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:o})=>{let s=new C({x:n.x+i,y:n.y});return e.isUsingVerticalWriting()&&(s=new C({x:n.x,y:n.y-t})),o.getSpineItemClosestPositionFromUnsafePosition(s,e)},st=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:o,viewport:s})=>{const a=t,c=o.getSpineItemFromPosition(n)||i.get(0),l=n;if(!c)return l;const d=o.getSpineItemPositionFromSpinePosition(n,c),u=jn({position:d,spineItem:c,pageHeight:s.pageSize.height,pageWidth:s.pageSize.width,spineItemLocator:o.spineItemLocator});return e.arePositionsDifferent(u,d)?o.getSpinePositionFromSpineItemPosition({spineItemPosition:u,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new U({x:n.x+s.pageSize.width,y:0}):new U({y:n.y+s.pageSize.height,x:0}))},ei=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:o,spineLocator:s,computedPageTurnDirection:a,viewport:c,settings:l})=>{const d=st({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});if(e?.isUsingVerticalWriting()&&n.x===d.x)return i.getAdjustedPositionForSpread(d);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==d.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...d,x:d.x-c.pageSize.width}:{...d,x:d.x+c.pageSize.width}));if(a==="vertical"&&n.y!==d.y)return i.getAdjustedPositionForSpread(d);const u=st({position:d,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});return i.getAdjustedPositionForSpread(u)}return i.getAdjustedPositionForSpread(d)};class ti{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new M({x:0,y:0}),this.unlock=void 0}turnRight(){return this.turnRightOrBottom()}turnLeft(){return this.turnLeftOrTop()}turnTop(){return this.turnLeftOrTop()}turnBottom(){return this.turnRightOrBottom()}turnRightOrBottom(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=ei({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=Qn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const i=this.reader.spineItemsManager.get(e);if(i===void 0){k.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:i.index,...t})}goToNextSpineItem(){const{endIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})||{};this.goToSpineItem({indexOrId:e+1})}goToPreviousSpineItem(){const{beginIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})??{};this.goToSpineItem({indexOrId:e-1})}goToUrl(e){this.reader.navigation.navigate({url:e,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){k.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToPreviousSpineItem():this.goToNextSpineItem()}goToRightOrBottomSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToBottomSpineItem():this.goToRightSpineItem()}goToLeftOrTopSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToTopSpineItem():this.goToLeftSpineItem()}goToLeftSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){k.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToNextSpineItem():this.goToPreviousSpineItem()}goToTopSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){k.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){k.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:t,...i}){const o=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});k.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...i,position:o}),this.reader.navigation.navigate({position:o,...i})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const i=this.reader.spine.pages.fromAbsolutePageIndex(e);if(k.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:i}),i){const o=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:i.pageIndex,spineItemId:i.itemIndex});return this.reader.navigation.navigate({position:o,...t})}}}class ni extends D{constructor(e){super({lastDelta:{x:0,y:0},lastPosition:new M({x:0,y:0}),lastStartPosition:new M({x:0,y:0}),isStarted:!1}),this.reader=e,this.unlock=void 0}start(e){this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.mergeCompare({isStarted:!0,lastDelta:e,lastStartPosition:this.reader.navigation.controlledNavigationController.viewportPosition,lastPosition:this.reader.navigation.controlledNavigationController.viewportPosition})}stop(e){this.panMoveTo(e),this.mergeCompare({isStarted:!1}),this.unlock?.()}panMoveTo(e){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){k.warn("pan control is not available on free page turn mode");return}if(!this.value.isStarted){k.error("Pan navigator is not started");return}const t=this.reader.settings.values.computedPageTurnDirection;let i=this.reader.navigation.getNavigation().position;if(e){const o=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,s=Math.floor(e.x)-(this.value.lastDelta?.x||0),a=Math.floor(e.y)-(this.value.lastDelta?.y||0),c=Math.floor(t==="horizontal"?this.value.lastPosition.x-s/o:0),l=Math.floor(t==="horizontal"?0:this.value.lastPosition.y-a/o);i=new M({x:c,y:l}),this.mergeCompare({lastDelta:e})}else i=this.value.lastPosition;this.mergeCompare({lastPosition:i}),this.reader.navigation.navigate({position:i,animation:!1})}}class R{constructor(){this.isDestroyed=!1,this.destroySubject=new r.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const ii=500;class oi extends R{constructor(e,t){super(),this.scrollNavigationController=e,this.locker=t,this.navigationSubject=new r.Subject,this.navigation$=this.navigationSubject.asObservable();const i=this.scrollNavigationController.userScroll$.pipe(r.exhaustMap(o=>{const s=this.locker.lock();return r.merge(this.scrollNavigationController.userScroll$,r.of(o)).pipe(r.debounceTime(ii,r.animationFrameScheduler),r.first(),r.tap(()=>{const a=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:"scroll",position:a})}),r.finalize(()=>{s()}))}));r.merge(i).pipe(r.takeUntil(this.destroy$)).subscribe()}}const ri=n=>n.pagination.state$.pipe(r.withLatestFrom(n.context.manifest$,n.settings.values$),r.map(([e,{spineItems:t,readingDirection:i},{computedPageTurnDirection:o}])=>{const s=t.length??0,a=e.beginSpineItemIndex===0,c=e.endSpineItemIndex===Math.max(s-1,0),l=e.endSpineItemIndex===Math.max(s-1,0),d=e.beginSpineItemIndex===0,u=e.beginPageIndexInSpineItem===0,p=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:o==="vertical"?!1:!u,canTurnRight:o==="vertical"?!1:!p,canGoTopSpineItem:o==="vertical"&&!a,canGoBottomSpineItem:o==="vertical"&&!c,canGoLeftSpineItem:o!=="vertical"&&(i==="ltr"&&!a||i==="rtl"&&!l),canGoRightSpineItem:o!=="vertical"&&(i==="ltr"&&!c||i==="rtl"&&!d)}}),r.distinctUntilChanged(T.isShallowEqual)),si=({reader:n,duration:e})=>t=>{let i;const o=()=>{i?.(),i=void 0};return t.pipe(r.tap(()=>{i||(i=n?.navigation.lock())}),r.throttleTime(e,r.animationFrameScheduler,{trailing:!0,leading:!0}),r.tap(o),r.finalize(o))},ai=n=>e=>{const t=n(e),i=ri(t),o=new ti(t),s=new ni(t),a=new oi(t.navigation.scrollNavigationController,t.navigation.locker),c=Jn(t,o),l=a.navigation$.pipe(r.tap(p=>{t.navigation.navigate(p)}));return r.merge(c,l).pipe(r.takeUntil(t.$.destroy$)).subscribe(),{...t,load:p=>{const{cfi:g,...h}=p;t.load(h),g&&o.goToCfi(g,{animate:!1})},destroy:()=>{a.destroy(),t.destroy()},navigation:{...t.navigation,state$:i,throttleLock:({duration:p,trigger:g})=>g.pipe(si({duration:p,reader:t})),panNavigator:s,turnBottom:o.turnBottom.bind(o),turnTop:o.turnTop.bind(o),turnLeftOrTop:o.turnLeftOrTop.bind(o),turnRightOrBottom:o.turnRightOrBottom.bind(o),turnLeft:o.turnLeft.bind(o),turnRight:o.turnRight.bind(o),goToCfi:o.goToCfi.bind(o),goToUrl:o.goToUrl.bind(o),goToSpineItem:o.goToSpineItem.bind(o),goToNextSpineItem:o.goToNextSpineItem.bind(o),goToPreviousSpineItem:o.goToPreviousSpineItem.bind(o),goToLeftOrTopSpineItem:o.goToLeftOrTopSpineItem.bind(o),goToRightOrBottomSpineItem:o.goToRightOrBottomSpineItem.bind(o),goToTopSpineItem:o.goToTopSpineItem.bind(o),goToBottomSpineItem:o.goToBottomSpineItem.bind(o),goToLeftSpineItem:o.goToLeftSpineItem.bind(o),goToRightSpineItem:o.goToRightSpineItem.bind(o),goToPageOfSpineItem:o.goToPageOfSpineItem.bind(o),goToAbsolutePageIndex:o.goToAbsolutePageIndex.bind(o)}}},H=n=>W.generate({spineIndex:n.index,spineId:n.id}),at=({nodeOrRange:n,offset:e,item:t})=>{const i="ownerDocument"in n?n.ownerDocument:n.startContainer.ownerDocument;return!i||!i?.documentElement||n===i?H(t):rn(n)?W.generate({start:{node:n.startContainer,offset:n.startOffset,spineIndex:t.index,spineId:t.id},end:{node:n.endContainer,offset:n.endOffset,spineIndex:t.index,spineId:t.id}}):W.generate({node:n,offset:e,spineIndex:t.index,spineId:t.id})},re=({spineItem:n,pageNode:e})=>at({nodeOrRange:e.node,offset:e.offset,item:n}).trim(),ct=(n,e)=>at({nodeOrRange:n,item:e}),ci=n=>n.index.toString(),lt=n=>n[0]?.index===6&&n.length>1,se=n=>{const e=W.parse(n);return W.isIndirectionOnly(e)},li=n=>Array.isArray(n)?n[0]&<(n[0])?n[0]:void 0:n.parent[0]&<(n.parent[0])?n.parent[0]:void 0,ae=n=>{const e=W.parse(n),s=((li(e)??[])[1]?.index??2)/2-1,a=W.isParsedCfiRange(e),c=a?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:a,itemIndex:s,offset:c??0}},Pe=({cfi:n,spineItemsManager:e})=>{const{itemIndex:t,...i}=ae(n),o=e.get(t);if(!o)return{...i,itemIndex:t,node:null};const s=o.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){const a=s.contentWindow?.document;if(a)try{const c=W.resolve(n,a,{throwOnError:!0});return{...i,itemIndex:t,node:c.isRange?c.node?.startContainer??null:c.node??null,isCfiRange:c.isRange,range:c.isRange?c.node:void 0,offset:Array.isArray(c.offset)?c.offset.at(-1):c.offset,spineItem:o}}catch(c){return E.warn(`Error resolving cfi: ${n}.`),E.warn(c),{...i,spineItem:o,itemIndex:t,node:null}}}return{...i,itemIndex:t,spineItem:o,node:null}},ui=(n,e)=>{if("cfi"in e){const{itemIndex:s,...a}=n.cfi.parseCfi(e.cfi);return{...e,...a,itemIndex:s,node:null}}const t=n.spineItemsManager.get(e);if(!t)throw new Error("Spine item not found");const i=H(t.item);return{...n.cfi.parseCfi(i),cfi:H(t.item),itemIndex:t.index,node:null}},ut=(n,e)=>{let t=n?.itemPageIndex;const{itemIndex:i,...o}=e.cfi.parseCfi(n.cfi),s=e.spineItemsManager.get(i);return s?be().pipe(r.withLatestFrom(s.isReady$),r.map(([,a])=>{const{node:c=null,offset:l,range:d}=a?e.cfi.resolveCfi({cfi:n.cfi}):{};s.renditionLayout!=="pre-paginated"&&c&&(t=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,l??0,s)??t);let p=n?.absolutePageIndex;return t===void 0&&(t=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:t,spineItemOrId:s})??n?.absolutePageIndex,{...n,...o,range:d,itemIndex:i,node:c,startOffset:l,absolutePageIndex:p,itemPageIndex:t}})):r.of({...n,itemIndex:i,...o})};class dt{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const i=this.locatorsByKey.get(t);i&&(i.observerCount--,i.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,i)=>{const o={resource:t,meta:ui(this.reader,t)};return Ie(()=>{const s=this.reader.spineItemsManager.get(o.meta.itemIndex??0),a=s?.renditionLayout==="reflowable",c=i.mode==="shallow"||!a||!s?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([s.index]),l="cfi"in t?t.cfi:void 0,d=l?this.locatorsByKey.get(l):void 0,u=g=>g.pipe(r.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{c()},1e3)}));if(l&&d)return d.observerCount++,u(d.consolidate$.pipe(r.map(({resource:g,meta:h})=>({resource:g,meta:h}))));const p=this.reader.spine.layout$.pipe(r.debounceTime(10),r.startWith(o),r.switchScan(g=>ut(g.meta,this.reader).pipe(r.map(h=>({...g,meta:h}))),o),r.shareReplay({refCount:!0,bufferSize:1}));return l&&this.locatorsByKey.set(l,{observerCount:1,consolidate$:p}),u(p)})}}locateResource(e,t){return Array.isArray(e)?Ie(()=>r.combineLatest(e.map(i=>this.locate(i,t??{}))).pipe(r.defaultIfEmpty([]))):this.locate(e,t??{})}}const di=E.namespace("spine"),pt=({position:n,pageSize:e})=>new nt({...n,left:n.x,top:n.y,width:e.width,height:e.height,bottom:n.y+e.height,right:n.x+e.width}),pi=10,hi=n=>{const{spineItem:e,...t}=n;if(!n.spineItem.value.isLoaded)return{...t,firstVisibleNode:void 0};const o=n.spineItem.renderer?.getDocumentFrame()?.contentWindow?.document;return!o||o.body===null?{...t,firstVisibleNode:void 0}:{...t,firstVisibleNode:Kt(o,n.layout)}},gi=n=>new r.Observable(e=>{if(n.length===0){e.next([]),e.complete();return}let t,i=0;const o=new Array(n.length),s=()=>{t!==void 0&&(cancelAnimationFrame(t),t=void 0)},a=()=>{t=void 0;let l=0;for(;i<n.length&&l<pi;){const d=n[i];if(!d){i=n.length;break}o[i]=hi(d),i+=1,l+=1}if(i>=n.length){e.next(o),e.complete();return}c()},c=()=>{t=requestAnimationFrame(a)};return c(),()=>{s()}}),z=class z extends D{constructor(e,t,i,o,s,a){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=i,this.context=o,this.locator=s,this.viewport=a,this.fromSpineItemPageIndex=(c,l)=>z.fromSpineItemPageIndex(this.value,c,l),this.fromNextPageWithinSameSpineItem=c=>z.fromNextPageWithinSameSpineItem(this.value,c),this.fromAbsolutePageIndex=c=>z.fromAbsolutePageIndex(this.value,c),this.observeFromAbsolutePageIndex=c=>this.pipe(r.map(()=>this.fromAbsolutePageIndex(c))),this.layout$=e.layout$.pipe(r.withLatestFrom(a),r.switchMap(([,{pageSize:c}])=>{const l=t.items.reduce((d,u,p)=>{for(let g=0;g<u.numberOfPages;g+=1){const h=i.getSpineItemPositionFromPageIndex({spineItem:u,pageIndex:g}),m=s.getSpinePositionFromSpineItemPosition({spineItem:u,spineItemPosition:h}),f=d.length;d.push({absoluteLayout:pt({pageSize:c,position:m}),layout:new tt({left:h.x,right:h.x+c.width,top:h.y,bottom:h.y+c.height,width:c.width,height:c.height,x:h.x,y:h.y}),itemIndex:p,absolutePageIndex:f,spineItem:u,pageIndex:g})}return d},[]);return gi(l)}),r.map(c=>(di.info("Pages layout",c),{pages:c})),r.share()),this.layout$.pipe(r.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}};z.fromSpineItemPageIndex=(e,t,i)=>{const o=typeof t=="number"?t:t.index;return e.pages.find(s=>s.itemIndex===o&&s.pageIndex===i)},z.fromNextPageWithinSameSpineItem=(e,t)=>z.fromSpineItemPageIndex(e,t.itemIndex,t.pageIndex+1),z.fromAbsolutePageIndex=(e,t)=>e.pages.find(i=>i.absolutePageIndex===t);let B=z;const Z=n=>{const e=n.indexOf("#");return e>=0?n.substring(0,e):n},ht=n=>{if(!n)return;const e=n.indexOf("#");return e<0?void 0:n.substring(e+1)||void 0},mi=n=>{try{return decodeURIComponent(n)}catch{return n}},gt=(n,e=[])=>n.flatMap(t=>{const i=[...e,{title:t.title,path:t.path}],o=t.href||t.path;return[{chain:i,href:o,anchorId:ht(t.href)??ht(t.path)},...gt(t.contents,i)]}),fi=n=>{const e=new Map;return n.spineItems.forEach((t,i)=>{e.has(t.href)||e.set(t.href,i)}),e},Si=(n,e)=>{const t=fi(e);return gt(n).map(i=>{const o=Z(i.href),s=t.get(o)??-1;return{...i,hrefWithoutAnchor:o,spineItemIndex:s}})},yi=({manifest:n,tocIndex:e})=>{const t=new Map;e.forEach((s,a)=>{const c=t.get(s.hrefWithoutAnchor);if(c){c.push(a);return}t.set(s.hrefWithoutAnchor,[a])});const i=new Map,o=new Map;for(const s of n.spineItems){if(i.has(s.href))continue;const a=Z(s.href);let c=o.get(a);if(!c){const l=[];for(const[d,u]of t)bi(a,d)&&l.push(...u);l.sort((d,u)=>d-u),c=l.map(d=>e[d]),o.set(a,c)}i.set(s.href,c)}return i},bi=(n,e)=>n===e||n.endsWith(e)||e.endsWith(n),Ii=(n,e)=>{const t=n.endsWith(e),i=n.substring(0,n.lastIndexOf("/")),o=e.substring(0,e.lastIndexOf("/")),s=i!==""&&i.endsWith(o);return t||s},mt=n=>{const[e,...t]=n;if(!e)return;const i={title:e.title,path:e.path};let o=i;for(const s of t){const a={title:s.title,path:s.path};o.subChapter=a,o=a}return i},wi=({doc:n,node:e,offset:t})=>{const i=n.createRange();if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.CDATA_SECTION_NODE||e.nodeType===Node.COMMENT_NODE){const o=e,s=Math.max(0,Math.min(t,o.length));i.setStart(o,s)}else{const o=e.childNodes.length,s=Math.max(0,Math.min(t,o));i.setStart(e,s)}return i.collapse(!0),i},vi=({rangeToTest:n,upperBoundRange:e})=>n.compareBoundaryPoints(Range.START_TO_START,e)<0,Pi=n=>{const e=n.createRange(),t=n.body??n.documentElement;if(t)return e.selectNodeContents(t),e.collapse(!1),e},Ti=({anchorNode:n,nextPageNode:e})=>n===e||n.contains(e),ft=({node:n,offset:e,candidates:t,spineItem:i,nextPageEntry:o})=>{if(!n||e===void 0||!i||t.length===0)return;const s=i.renderer.getDocumentFrame()?.contentDocument;if(!s||n.ownerDocument!==s)return;const a=o?.firstVisibleNode?.node,c=o?.firstVisibleNode?.offset,l=o?a!==void 0&&c!==void 0&&a.ownerDocument===s?wi({doc:s,node:a,offset:c}):void 0:Pi(s);if(!l)return;const d=o!==void 0&&a!==void 0&&a.ownerDocument===s;let u,p,g;for(const m of t){if(!m.anchorId){g=m.chain;continue}const f=s.getElementById(mi(m.anchorId));if(!f||d&&Ti({anchorNode:f,nextPageNode:a}))continue;const S=s.createRange();S.setStartBefore(f),S.collapse(!0),vi({rangeToTest:S,upperBoundRange:l})&&(!p||S.compareBoundaryPoints(Range.START_TO_START,p)>0)&&(u=m.chain,p=S)}const h=u??g;return h?mt(h):void 0},$i=({candidate:n,hrefHasAnchor:e})=>{if(e||!n.anchorId)return!1;const t=n.chain[n.chain.length-1],i=n.chain[n.chain.length-2];return!t||!i?!1:Z(t.path)===Z(i.path)},Mi=({href:n,tocIndex:e,manifest:t})=>{const i=Z(n),o=n.includes("#"),s=t.spineItems.findIndex(c=>c.href===i);let a;for(const c of e)Ii(i,c.hrefWithoutAnchor)&&(s<c.spineItemIndex||$i({candidate:c,hrefHasAnchor:o})||(a=c.chain));return a},Fi=(n,e,t)=>{const{href:i}=t,o=Mi({href:i,tocIndex:e,manifest:n});return o?mt(o):void 0},Ei=(n,e)=>n?n.spineItems.reduce((i,o)=>(i[o.id]=Fi(n,e,o),i),{}):{},Ci=(n,e,t)=>n+e*t,Li=(n,e,t)=>{const{height:i,width:o}=t.layoutInfo,{top:s,left:a}=n.spine.getSpineItemSpineLayoutInfo(t);return n.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-s+n.viewport.absoluteViewport.height)/i)):Math.max(0,Math.min(1,(e.x-a+n.viewport.absoluteViewport.width)/o))},Ri=(n,e,t,i,o,s)=>o.isReady$.pipe(r.first(),r.withLatestFrom(n.layoutInfo$),r.map(([a,c])=>{const l=s.renditionLayout==="pre-paginated",d=s.spineItems.length||0,u=s.spineItems.slice(0,e).reduce((b,w)=>b+(w.progressionWeight??0),0)||0,p=n.spineItemsManager.getSpineItemIndex(o)??0,g=s.spineItems.length??0,h=c.pages.filter(b=>b.itemIndex===p).length??0,m=s.spineItems[e]?.progressionWeight??(p+1)/g;let f=(t+1)*(m/h);!l&&o.renditionLayout==="reflowable"&&!a&&(f=0);let S=u+f;return s.renditionFlow==="scrolled-continuous"&&(a?f=Li(n,i,o):f=0,S=Ci(u,m,f)),e===d-1&&t===h-1&&S>.99?1:S})),Ni={tocCandidatesBySpineHref:new Map,chaptersInfo:{}},Ai=({beginItem:n,endItem:e,paginationInfo:t,chaptersData:i,pagesState:o})=>{const s=n&&t.beginPageIndexInSpineItem!==void 0?B.fromSpineItemPageIndex(o,n.index,t.beginPageIndexInSpineItem):void 0,a=s?B.fromNextPageWithinSameSpineItem(o,s):void 0,c=e&&t.endPageIndexInSpineItem!==void 0?B.fromSpineItemPageIndex(o,e.index,t.endPageIndexInSpineItem):void 0,l=c?B.fromNextPageWithinSameSpineItem(o,c):void 0,d=n?ft({node:s?.firstVisibleNode?.node,offset:s?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(n.item.href)??[],spineItem:n,nextPageEntry:a}):void 0,u=e?ft({node:c?.firstVisibleNode?.node,offset:c?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(e.item.href)??[],spineItem:e,nextPageEntry:l}):void 0;return{beginChapterInfo:d??(n?i.chaptersInfo[n.item.id]:void 0),beginSpineItemReadingDirection:n?.readingDirection,beginAbsolutePageIndex:s?.absolutePageIndex,endChapterInfo:u??(e?i.chaptersInfo[e.item.id]:void 0),endSpineItemReadingDirection:e?.readingDirection,endAbsolutePageIndex:c?.absolutePageIndex}},Di=({items:n,pagesState:e})=>{const t=n.map(()=>0);for(const i of e.pages)t[i.itemIndex]=(t[i.itemIndex]??0)+1;return{numberOfPagesPerItems:t,numberOfTotalPages:e.pages.length}},Oi=(n,e)=>n.numberOfTotalPages!==e.numberOfTotalPages||n.numberOfPagesPerItems.length!==e.numberOfPagesPerItems.length?!1:n.numberOfPagesPerItems.every((t,i)=>t===e.numberOfPagesPerItems[i]),Vi=({reader:n,paginationInfo:e,navigationPosition:t,manifest:i})=>{const o=n.spineItemsManager.get(e.endSpineItemIndex);return o?Ri(n,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,t,o,i):r.of(0)},Ui=n=>n.context.manifest$.pipe(r.map(e=>{if(!e)return Ni;const t=Si(e.nav?.toc??[],e);return{tocCandidatesBySpineHref:yi({manifest:e,tocIndex:t}),chaptersInfo:Ei(e,t)}})),ki=n=>({beginSpineItemIndex:n.beginSpineItemIndex,beginPageIndexInSpineItem:n.beginPageIndexInSpineItem,endSpineItemIndex:n.endSpineItemIndex,endPageIndexInSpineItem:n.endPageIndexInSpineItem}),_i=n=>{const e=n.pagination.state$,t=n.spine.pages.layout$,i=Ui(n).pipe(r.shareReplay({bufferSize:1,refCount:!0})),o=e.pipe(r.map(ki),r.distinctUntilChanged(T.isShallowEqual)),s=r.combineLatest([o,i,t]).pipe(r.map(([u,p,g])=>{const h=n.spineItemsManager.get(u.beginSpineItemIndex),m=n.spineItemsManager.get(u.endSpineItemIndex);return Ai({beginItem:h,endItem:m,paginationInfo:u,chaptersData:p,pagesState:g})}),r.shareReplay({bufferSize:1,refCount:!0})),a=n.settings.watch(["computedSpreadMode"]).pipe(r.map(u=>u.computedSpreadMode??!1),r.distinctUntilChanged()),c=r.combineLatest([t,n.spineItemsManager.items$]).pipe(r.map(([u,p])=>Di({items:p,pagesState:u})),r.distinctUntilChanged(Oi)),l=r.combineLatest([e,a,s,c]).pipe(r.map(([u,p,g,h])=>({...u,...g,isUsingSpread:p,...h}))),d=r.combineLatest([e,n.layout$,n.navigation.navigation$,n.context.manifest$]).pipe(r.switchMap(([u,p,g,h])=>Vi({reader:n,paginationInfo:u,navigationPosition:g.position,manifest:h})),r.map(u=>({percentageEstimateOfBook:u})));return r.combineLatest([l,d]).pipe(r.map(([u,p])=>({...u,...p})),r.distinctUntilChanged(T.isShallowEqual),r.auditTime(5))},St=n=>e=>{const t=n(e),i=new r.BehaviorSubject({...t.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),o=new dt(t),s=_i(t).pipe(r.tap(a=>E.log("Pagination",a))).subscribe(i);return{...t,locateResource:o.locateResource.bind(o),destroy:()=>{s.unsubscribe(),t.destroy()},pagination:{...t.pagination,get state(){return i.value},get state$(){return i}}}},zi=n=>({put:(s,a)=>new Promise((c,l)=>{const d=n.transaction(["store"],"readwrite");d.onerror=g=>{l(g)},d.oncomplete=()=>{c()};const p=d.objectStore("store").put(a,s);p.onsuccess=()=>{c()},p.onerror=g=>{l(g)}}),keys:()=>new Promise((s,a)=>{const c=n.transaction(["store"],"readonly");c.onerror=p=>{a(p)};const d=c.objectStore("store").openKeyCursor(),u=[];d.onsuccess=()=>{const p=d.result;if(!p){s(u);return}u.push(p.key),p.continue()},d.onerror=()=>{a(d.error)}}),get:s=>new Promise((a,c)=>{const l=n.transaction(["store"],"readwrite"),u=l.objectStore("store").get(s);u.onsuccess=()=>{let p=u.result;p===void 0&&(p=null),a(p)},l.onerror=()=>{c(u.error)}}),remove:s=>new Promise((a,c)=>{const l=n.transaction(["store"],"readwrite"),u=l.objectStore("store").delete(s);l.onerror=()=>{c(u.error)},l.oncomplete=()=>{a()},l.onabort=()=>{const p=u.error?u.error:u.transaction?.error;c(p)}})}),Te=async n=>new Promise((e,t)=>{const i=window.indexedDB.open(n);i.onerror=o=>{t(o)},i.onsuccess=()=>{e(zi(i.result))},i.onupgradeneeded=()=>{i.result.createObjectStore("store")}}),Wi=n=>{let e=Date.now().toString();const t=new r.Subject,i=l=>{if(typeof l=="string"||typeof l=="object"){const d=typeof l=="object"?l.id:l;return n.manifest?.spineItems.find(u=>u.id===d)}return n.manifest?.spineItems[l]},o=async(l,d)=>{const u=i(l);if(!u)return new Response("Item not found",{status:404});const g=await(await Te("prose-reader")).get(`${e}_${u.id}`);if(g)return new Response(g,{status:200});const h=d&&await d(u)||await fetch(u.href);return s(u,h.clone()),h},s=(l,d)=>{t.next({id:l,data:d})};t.asObservable().pipe(I.mergeMap(({id:l,data:d})=>{const u=i(l);return u?r.from(r.forkJoin([Te("prose-reader"),r.from(d.blob())])).pipe(I.switchMap(([p,g])=>r.from(p.put(`${e}_${u.id}`,g))),I.catchError(p=>(E.error(p),r.EMPTY))):r.EMPTY}),I.takeUntil(n.destroy$)).subscribe();const a=n.manifest$.pipe(I.tap(()=>{e=Date.now().toString()}));return r.merge(a).pipe(I.switchMap(()=>(E.debug("Cleanup up old cache..."),r.from(Te("prose-reader")).pipe(I.switchMap(l=>r.from(l.keys()).pipe(I.map(d=>d.filter(u=>!u.toString().startsWith(e))),I.switchMap(d=>{const u=d.map(p=>l.remove(p));return r.from(Promise.all(u))}))),I.catchError(l=>(E.error(l),r.EMPTY))))),I.takeUntil(n.destroy$)).subscribe(),{get:o,destroy:()=>{t.complete()}}},Hi=n=>e=>{const t=n(e),i=Wi(t.context);return{...t,destroy:()=>{i.destroy(),t.destroy()}}},Bi=(n,e)=>{const t=n.node.ownerDocument?.createRange(),i=n.node.compareDocumentPosition(e.node);if(t){try{if(i&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(n.node,n.offset||0);else if(i&Node.DOCUMENT_POSITION_FOLLOWING)t.setStart(n.node,n.offset||0),t.setEnd(e.node,e.offset||0);else{const o=Math.min(n.offset||0,e.offset||0),s=Math.max(n.offset||0,e.offset||0);t.setStart(n.node,o),t.setEnd(n.node,s)}}catch(o){E.warn("Failed to create range from selection",o,{anchor:n,focus:e})}return t}},xi=({selection:n,spineItem:e})=>{const{anchorNode:t,anchorOffset:i,focusNode:o,focusOffset:s}=n;if(!(!t||!o))try{return Bi({node:t,offset:i},{node:o,offset:s})}catch(a){E.warn("Failed to create range from selection",a,{selection:n,spineItem:e});return}};class Yi extends R{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=r.NEVER,this.selectionOver$=r.NEVER;else{const i=we(t.body,{childList:!0,subtree:!0}).pipe(r.filter(s=>!!s.find(a=>a.type==="childList"&&a.removedNodes.length))),o=e.parentElement?we(e.parentElement,{childList:!0}).pipe(r.filter(s=>!!s.find(a=>Array.from(a.removedNodes).includes(e)))):r.of(null);this.selectionChange$=r.merge(r.fromEvent(t,"selectionchange"),i).pipe(r.map(()=>t.getSelection()),r.takeUntil(r.merge(o,this.destroy$)),r.endWith(null)),this.selectionOver$=r.fromEvent(t,"pointerdown").pipe(r.switchMap(()=>r.merge(r.fromEvent(t,"pointerup"),r.fromEvent(t,"pointercancel"),r.fromEvent(t,"contextmenu")).pipe(r.first(),r.delay(0),r.map(s=>{const a=t.getSelection();return a&&!a.isCollapsed?[s,a]:void 0}),r.filter(O))),r.takeUntil(r.merge(o,this.destroy$)))}}}const qi=n=>n.watch("isLoaded").pipe(r.switchMap(()=>{const e=n.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return r.NEVER;const i=new Yi(e);return r.merge(i.selectionChange$.pipe(r.map(o=>{if(o?.toString())return{type:"change",selection:o}})),i.selectionOver$.pipe(r.map(([o,s])=>({type:"over",event:o,selection:s})))).pipe(r.takeUntil(n.unloaded$),r.endWith(void 0),r.finalize(()=>{i.destroy()}))}),r.distinctUntilChanged()),Xi=n=>e=>{const t=n(e);let i;const o=t.spineItemsManager.items$.pipe(r.switchMap(u=>{const p=u.map(g=>{const h=t.spineItemsManager.getSpineItemIndex(g)??0;return qi(g).pipe(r.map(m=>{if(m)return{...m,itemIndex:h}}))});return r.merge(...p)}),r.startWith(void 0),r.distinctUntilChanged(),r.tap(u=>{i=u}),r.shareReplay({refCount:!0,bufferSize:1})),s=o,a=o.pipe(r.map(u=>!!u),r.distinctUntilChanged(),r.filter(u=>u),r.share()),c=a.pipe(r.switchMap(()=>s),r.distinctUntilChanged(),r.filter(u=>!u),r.share()),l=o.pipe(r.filter(u=>u?.type==="over"),r.share()),d=t.context.watch("rootElement").pipe(r.filter(O),r.switchMap(u=>r.fromEvent(u,"pointerdown")),r.withLatestFrom(s),r.map(([,u])=>u),r.startWith(void 0),r.shareReplay({refCount:!0,bufferSize:1}));return r.merge(s,d).pipe(r.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:s,selectionStart$:a,selectionEnd$:c,selectionOver$:l,lastSelectionOnPointerdown$:d,getSelection:()=>i,createOrderedRangeFromSelection:xi}}},yt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],Gi=n=>e=>{const t=n(e),i=new r.BehaviorSubject(e.theme??"bright"),o=()=>{const c=yt.find(l=>l.name===i.value);return`
|
|
204
|
+
`)}}),xn(a),Hn(a),a.hookManager.register("item.onDocumentCreated",({documentContainer:f})=>{f.style.opacity="0",c.values.layoutLayerTransition&&(f.style.transition="opacity 300ms")}),a.hookManager.register("item.onBeforeLayout",({item:f})=>{const b=a.spineItemsManager.get(f.id)?.renderer.documentContainer;a.settings.values.computedPageTurnMode!=="scrollable"&&b?.setAttribute("tab-index","0")});const l=a.spineItemsObserver.states$.pipe(I.filter(({isReady:f})=>f),I.tap(({item:f})=>{const S=f.renderer.documentContainer;S&&(S.style.opacity="1")})),d=c.values$.pipe(I.filter(({layoutAutoResize:f})=>f==="container"),I.switchMap(()=>a.context.watch("rootElement")),I.filter(D),I.switchMap(f=>j(f)),I.debounceTime(100),I.filter(D),I.tap(()=>{a?.layout()})),u=zn(a);c.watch(["pageHorizontalMargin","pageVerticalMargin"]).pipe(I.skip(1),I.tap(()=>{a.layout()}),I.takeUntil(a.$.destroy$)).subscribe();const p=a.spine.pages.pipe(I.shareReplay({refCount:!0,bufferSize:1})),g=Yn(a),h=Xn(a),m=Bn(a);return r.merge(l,u,d,p,g,h,m).pipe(I.takeUntil(a.$.destroy$)).subscribe(),{...a,destroy:()=>{c.destroy(),a.destroy()},settings:c,layout$:a.spine.layout$,layoutInfo$:p,coordinates:_n(a)}},Gn=n=>e=>{const t=n(e),i=new IntersectionObserver(a=>{a.forEach(c=>{const l=c.target,d=Array.from(l.contentDocument?.body.getElementsByTagName("audio")||[]);c.isIntersecting?d.forEach(u=>{u.hasAttribute("autoplay")&&u.paused&&u.readyState>=2&&u.play().catch(console.error)}):d.forEach(u=>{u.pause(),u.currentTime=0})})},{threshold:.01}),o=new IntersectionObserver(a=>{a.forEach(c=>{if(c.target.tagName==="video"){const l=c.target;c.isIntersecting?l.hasAttribute("autoplay")&&l.paused&&l.readyState>=2&&l.play().catch(console.error):(l.pause(),l.currentTime=0)}})},{threshold:.5});return t.hookManager.register("item.onDocumentLoad",({destroy:a,itemId:c})=>{const l=t.spineItemsManager.get(c)?.renderer.getDocumentFrame();if(!l)return;i.observe(l);const d=l.contentDocument?.body.getElementsByTagName("video"),u=Array.from(d||[]).map(p=>(o.observe(p),()=>o.unobserve(p)));a(()=>{i.unobserve(l),u.forEach(p=>{p()})})}),{...t,destroy:()=>{i.disconnect(),o.disconnect(),t.destroy()}}},Zn=(n,e)=>n.links$.pipe(r.tap(t=>{if(!ke(t.target,"a")||t.type!=="click")return;const i=new URL(t.target.href),o=`${i.origin}${i.pathname}`;n.context.manifest?.spineItems.some(a=>a.href===o)&&e.goToUrl(i)})),k=C.namespace("navigation"),Jn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:o})=>{let s=new L({x:n.x-i,y:n.y});return e.isUsingVerticalWriting()&&(s=new L({x:n.x,y:n.y+t})),o.getSpineItemClosestPositionFromUnsafePosition(s,e)},rt=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:o,viewport:s})=>{const a=t,c=o.getSpineItemFromPosition(n)||i.get(0),l=n;if(!c)return l;const d=o.getSpineItemPositionFromSpinePosition(n,c),u=Jn({position:d,spineItem:c,pageHeight:s.pageSize.height,pageWidth:s.pageSize.width,spineItemLocator:o.spineItemLocator});return e.arePositionsDifferent(u,d)?o.getSpinePositionFromSpineItemPosition({spineItemPosition:u,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new M({x:n.x-s.pageSize.width,y:0}):new M({y:n.y-s.pageSize.height,x:0}))},Kn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:o,spineLocator:s,computedPageTurnDirection:a,viewport:c,settings:l})=>{const d=rt({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});if(e?.isUsingVerticalWriting()&&n.x===d.x)return i.getAdjustedPositionForSpread(d);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==d.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...d,x:d.x+c.pageSize.width}:{...d,x:d.x-c.pageSize.width}));if(a==="vertical"&&n.y!==d.y)return i.getAdjustedPositionForSpread(d);const u=rt({position:d,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});return i.getAdjustedPositionForSpread(u)}return i.getAdjustedPositionForSpread(d)},Qn=({position:n,spineItem:e,pageHeight:t,pageWidth:i,spineItemLocator:o})=>{let s=new L({x:n.x+i,y:n.y});return e.isUsingVerticalWriting()&&(s=new L({x:n.x,y:n.y-t})),o.getSpineItemClosestPositionFromUnsafePosition(s,e)},st=({position:n,navigationResolver:e,computedPageTurnDirection:t,spineItemsManager:i,spineLocator:o,viewport:s})=>{const a=t,c=o.getSpineItemFromPosition(n)||i.get(0),l=n;if(!c)return l;const d=o.getSpineItemPositionFromSpinePosition(n,c),u=Qn({position:d,spineItem:c,pageHeight:s.pageSize.height,pageWidth:s.pageSize.width,spineItemLocator:o.spineItemLocator});return e.arePositionsDifferent(u,d)?o.getSpinePositionFromSpineItemPosition({spineItemPosition:u,spineItem:c}):e.fromUnboundSpinePosition(a==="horizontal"?new U({x:n.x+s.pageSize.width,y:0}):new U({y:n.y+s.pageSize.height,x:0}))},jn=({position:n,spineItem:e,context:t,navigationResolver:i,spineItemsManager:o,spineLocator:s,computedPageTurnDirection:a,viewport:c,settings:l})=>{const d=st({position:n,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});if(e?.isUsingVerticalWriting()&&n.x===d.x)return i.getAdjustedPositionForSpread(d);if(l.values.computedSpreadMode){if(e?.isUsingVerticalWriting()&&n.x!==d.x)return i.getAdjustedPositionForSpread(i.fromUnboundSpinePosition(t.isRTL()?{...d,x:d.x-c.pageSize.width}:{...d,x:d.x+c.pageSize.width}));if(a==="vertical"&&n.y!==d.y)return i.getAdjustedPositionForSpread(d);const u=st({position:d,viewport:c,navigationResolver:i,computedPageTurnDirection:a,spineItemsManager:o,spineLocator:s});return i.getAdjustedPositionForSpread(u)}return i.getAdjustedPositionForSpread(d)};class ei{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new M({x:0,y:0}),this.unlock=void 0}turnRight(){return this.turnRightOrBottom()}turnLeft(){return this.turnLeftOrTop()}turnTop(){return this.turnLeftOrTop()}turnBottom(){return this.turnRightOrBottom()}turnRightOrBottom(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=jn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}turnLeftOrTop(){const e=this.reader.navigation.getNavigation(),t=this.reader.spineItemsManager.get(e.spineItem);if(!t)return;const i=Kn({context:this.reader.context,navigationResolver:this.reader.navigation.navigationResolver,position:e.position,computedPageTurnDirection:this.reader.settings.values.computedPageTurnDirection,spineItem:t,spineItemsManager:this.reader.spineItemsManager,spineLocator:this.reader.spine.locator,viewport:this.reader.viewport,settings:this.reader.settings});return this.reader.navigation.navigate({position:i})}goToCfi(e,t={animate:!0}){return this.reader.navigation.navigate({animation:t.animate?"turn":!1,cfi:e})}goToSpineItem({indexOrId:e,...t}){const i=this.reader.spineItemsManager.get(e);if(i===void 0){k.warn("goToSpineItem",`Ignore navigation to ${e} since the item does not exist`);return}this.reader.navigation.navigate({spineItem:i.index,...t})}goToNextSpineItem(){const{endIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})||{};this.goToSpineItem({indexOrId:e+1})}goToPreviousSpineItem(){const{beginIndex:e=0}=this.reader.spine.locator.getVisibleSpineItemsFromPosition({position:this.reader.navigation.getNavigation().position,threshold:{type:"percentage",value:.5}})??{};this.goToSpineItem({indexOrId:e-1})}goToUrl(e){this.reader.navigation.navigate({url:e,animation:!1})}goToRightSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){k.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToPreviousSpineItem():this.goToNextSpineItem()}goToRightOrBottomSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToBottomSpineItem():this.goToRightSpineItem()}goToLeftOrTopSpineItem(){return this.reader.settings.values.computedPageTurnDirection==="vertical"?this.goToTopSpineItem():this.goToLeftSpineItem()}goToLeftSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="vertical"){k.warn("You cannot call this navigation method on vertical direction");return}return this.reader.context.isRTL()?this.goToNextSpineItem():this.goToPreviousSpineItem()}goToTopSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){k.warn("You cannot call this navigation method on horizontal direction");return}return this.goToPreviousSpineItem()}goToBottomSpineItem(){if(this.reader.settings.values.computedPageTurnDirection==="horizontal"){k.warn("You cannot call this navigation method on horizontal direction");return}return this.goToNextSpineItem()}goToPageOfSpineItem({pageIndex:e,spineItemId:t,...i}){const o=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:e,spineItemId:t});k.debug(".goToPageOfSpineItem()",{pageIndex:e,spineItemId:t,...i,position:o}),this.reader.navigation.navigate({position:o,...i})}goToAbsolutePageIndex({absolutePageIndex:e,...t}){const i=this.reader.spine.pages.fromAbsolutePageIndex(e);if(k.debug(".goToAbsolutePageIndex()",{absolutePageIndex:e,...t,foundInfo:i}),i){const o=this.reader.navigation.navigationResolver.getNavigationForSpineItemPage({pageIndex:i.pageIndex,spineItemId:i.itemIndex});return this.reader.navigation.navigate({position:o,...t})}}}class ti extends O{constructor(e){super({lastDelta:{x:0,y:0},lastPosition:new M({x:0,y:0}),lastStartPosition:new M({x:0,y:0}),isStarted:!1}),this.reader=e,this.unlock=void 0}start(e){this.unlock?.(),this.unlock=this.reader.navigation.lock(),this.mergeCompare({isStarted:!0,lastDelta:e,lastStartPosition:this.reader.navigation.controlledNavigationController.viewportPosition,lastPosition:this.reader.navigation.controlledNavigationController.viewportPosition})}stop(e){this.panMoveTo(e),this.mergeCompare({isStarted:!1}),this.unlock?.()}panMoveTo(e){if(this.reader.settings.values.computedPageTurnMode==="scrollable"){k.warn("pan control is not available on free page turn mode");return}if(!this.value.isStarted){k.error("Pan navigator is not started");return}const t=this.reader.settings.values.computedPageTurnDirection;let i=this.reader.navigation.getNavigation().position;if(e){const o=this.reader.viewport.absoluteViewport.width/this.reader.viewport.relativeViewport.width,s=Math.floor(e.x)-(this.value.lastDelta?.x||0),a=Math.floor(e.y)-(this.value.lastDelta?.y||0),c=Math.floor(t==="horizontal"?this.value.lastPosition.x-s/o:0),l=Math.floor(t==="horizontal"?0:this.value.lastPosition.y-a/o);i=new M({x:c,y:l}),this.mergeCompare({lastDelta:e})}else i=this.value.lastPosition;this.mergeCompare({lastPosition:i}),this.reader.navigation.navigate({position:i,animation:!1})}}class N{constructor(){this.isDestroyed=!1,this.destroySubject=new r.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}}const ni=500;class ii extends N{constructor(e,t){super(),this.scrollNavigationController=e,this.locker=t,this.navigationSubject=new r.Subject,this.navigation$=this.navigationSubject.asObservable();const i=this.scrollNavigationController.userScroll$.pipe(r.exhaustMap(o=>{const s=this.locker.lock();return r.merge(this.scrollNavigationController.userScroll$,r.of(o)).pipe(r.debounceTime(ni,r.animationFrameScheduler),r.first(),r.tap(()=>{const a=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:"scroll",position:a})}),r.finalize(()=>{s()}))}));r.merge(i).pipe(r.takeUntil(this.destroy$)).subscribe()}}const oi=n=>n.pagination.state$.pipe(r.withLatestFrom(n.context.manifest$,n.settings.values$),r.map(([e,{spineItems:t,readingDirection:i},{computedPageTurnDirection:o}])=>{const s=t.length??0,a=e.beginSpineItemIndex===0,c=e.endSpineItemIndex===Math.max(s-1,0),l=e.endSpineItemIndex===Math.max(s-1,0),d=e.beginSpineItemIndex===0,u=e.beginPageIndexInSpineItem===0,p=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:o==="vertical"?!1:!u,canTurnRight:o==="vertical"?!1:!p,canGoTopSpineItem:o==="vertical"&&!a,canGoBottomSpineItem:o==="vertical"&&!c,canGoLeftSpineItem:o!=="vertical"&&(i==="ltr"&&!a||i==="rtl"&&!l),canGoRightSpineItem:o!=="vertical"&&(i==="ltr"&&!c||i==="rtl"&&!d)}}),r.distinctUntilChanged(T.isShallowEqual)),ri=({reader:n,duration:e})=>t=>{let i;const o=()=>{i?.(),i=void 0};return t.pipe(r.tap(()=>{i||(i=n?.navigation.lock())}),r.throttleTime(e,void 0,{trailing:!0,leading:!0}),r.tap(o),r.finalize(o))},si=n=>e=>{const t=n(e),i=oi(t),o=new ei(t),s=new ti(t),a=new ii(t.navigation.scrollNavigationController,t.navigation.locker),c=Zn(t,o),l=a.navigation$.pipe(r.tap(p=>{t.navigation.navigate(p)}));return r.merge(c,l).pipe(r.takeUntil(t.$.destroy$)).subscribe(),{...t,load:p=>{const{cfi:g,...h}=p;t.load(h),g&&o.goToCfi(g,{animate:!1})},destroy:()=>{a.destroy(),t.destroy()},navigation:{...t.navigation,state$:i,throttleLock:({duration:p,trigger:g})=>g.pipe(ri({duration:p,reader:t})),panNavigator:s,turnBottom:o.turnBottom.bind(o),turnTop:o.turnTop.bind(o),turnLeftOrTop:o.turnLeftOrTop.bind(o),turnRightOrBottom:o.turnRightOrBottom.bind(o),turnLeft:o.turnLeft.bind(o),turnRight:o.turnRight.bind(o),goToCfi:o.goToCfi.bind(o),goToUrl:o.goToUrl.bind(o),goToSpineItem:o.goToSpineItem.bind(o),goToNextSpineItem:o.goToNextSpineItem.bind(o),goToPreviousSpineItem:o.goToPreviousSpineItem.bind(o),goToLeftOrTopSpineItem:o.goToLeftOrTopSpineItem.bind(o),goToRightOrBottomSpineItem:o.goToRightOrBottomSpineItem.bind(o),goToTopSpineItem:o.goToTopSpineItem.bind(o),goToBottomSpineItem:o.goToBottomSpineItem.bind(o),goToLeftSpineItem:o.goToLeftSpineItem.bind(o),goToRightSpineItem:o.goToRightSpineItem.bind(o),goToPageOfSpineItem:o.goToPageOfSpineItem.bind(o),goToAbsolutePageIndex:o.goToAbsolutePageIndex.bind(o)}}},B=n=>W.generate({spineIndex:n.index,spineId:n.id}),at=({nodeOrRange:n,offset:e,item:t})=>{const i="ownerDocument"in n?n.ownerDocument:n.startContainer.ownerDocument;return!i||!i?.documentElement||n===i?B(t):rn(n)?W.generate({start:{node:n.startContainer,offset:n.startOffset,spineIndex:t.index,spineId:t.id},end:{node:n.endContainer,offset:n.endOffset,spineIndex:t.index,spineId:t.id}}):W.generate({node:n,offset:e,spineIndex:t.index,spineId:t.id})},re=({spineItem:n,pageNode:e})=>at({nodeOrRange:e.node,offset:e.offset,item:n}).trim(),ct=(n,e)=>at({nodeOrRange:n,item:e}),ai=n=>n.index.toString(),lt=n=>n[0]?.index===6&&n.length>1,se=n=>{const e=W.parse(n);return W.isIndirectionOnly(e)},ci=n=>Array.isArray(n)?n[0]&<(n[0])?n[0]:void 0:n.parent[0]&<(n.parent[0])?n.parent[0]:void 0,ae=n=>{const e=W.parse(n),s=((ci(e)??[])[1]?.index??2)/2-1,a=W.isParsedCfiRange(e),c=a?e.end.at(-1)?.at(-1)?.offset:e.at(-1)?.at(-1)?.offset;return{isCfiRange:a,itemIndex:s,offset:c??0}},Pe=({cfi:n,spineItemsManager:e})=>{const{itemIndex:t,...i}=ae(n),o=e.get(t);if(!o)return{...i,itemIndex:t,node:null};const s=o.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){const a=s.contentWindow?.document;if(a)try{const c=W.resolve(n,a,{throwOnError:!0});return{...i,itemIndex:t,node:c.isRange?c.node?.startContainer??null:c.node??null,isCfiRange:c.isRange,range:c.isRange?c.node:void 0,offset:Array.isArray(c.offset)?c.offset.at(-1):c.offset,spineItem:o}}catch(c){return C.warn(`Error resolving cfi: ${n}.`),C.warn(c),{...i,spineItem:o,itemIndex:t,node:null}}}return{...i,itemIndex:t,spineItem:o,node:null}},li=(n,e)=>{if("cfi"in e){const{itemIndex:s,...a}=n.cfi.parseCfi(e.cfi);return{...e,...a,itemIndex:s,node:null}}const t=n.spineItemsManager.get(e);if(!t)throw new Error("Spine item not found");const i=B(t.item);return{...n.cfi.parseCfi(i),cfi:B(t.item),itemIndex:t.index,node:null}},ut=(n,e)=>{let t=n?.itemPageIndex;const{itemIndex:i,...o}=e.cfi.parseCfi(n.cfi),s=e.spineItemsManager.get(i);return s?be().pipe(r.withLatestFrom(s.isReady$),r.map(([,a])=>{const{node:c=null,offset:l,range:d}=a?e.cfi.resolveCfi({cfi:n.cfi}):{};s.renditionLayout!=="pre-paginated"&&c&&(t=e.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(c,l??0,s)??t);let p=n?.absolutePageIndex;return t===void 0&&(t=0),p=e.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:t,spineItemOrId:s})??n?.absolutePageIndex,{...n,...o,range:d,itemIndex:i,node:c,startOffset:l,absolutePageIndex:p,itemPageIndex:t}})):r.of({...n,itemIndex:i,...o})};class dt{constructor(e){this.reader=e,this.locatorsByKey=new Map,this.deregisterMemoizedStream=t=>{const i=this.locatorsByKey.get(t);i&&(i.observerCount--,i.observerCount===0&&this.locatorsByKey.delete(t))},this.locate=(t,i)=>{const o={resource:t,meta:li(this.reader,t)};return Ie(()=>{const s=this.reader.spineItemsManager.get(o.meta.itemIndex??0),a=s?.renditionLayout==="reflowable",c=i.mode==="shallow"||!a||!s?()=>{}:this.reader.spine.spineItemsLoader.forceOpen([s.index]),l="cfi"in t?t.cfi:void 0,d=l?this.locatorsByKey.get(l):void 0,u=g=>g.pipe(r.finalize(()=>{l&&this.deregisterMemoizedStream(l),setTimeout(()=>{c()},1e3)}));if(l&&d)return d.observerCount++,u(d.consolidate$.pipe(r.map(({resource:g,meta:h})=>({resource:g,meta:h}))));const p=this.reader.spine.layout$.pipe(r.debounceTime(10),r.startWith(o),r.switchScan(g=>ut(g.meta,this.reader).pipe(r.map(h=>({...g,meta:h}))),o),r.shareReplay({refCount:!0,bufferSize:1}));return l&&this.locatorsByKey.set(l,{observerCount:1,consolidate$:p}),u(p)})}}locateResource(e,t){return Array.isArray(e)?Ie(()=>r.combineLatest(e.map(i=>this.locate(i,t??{}))).pipe(r.defaultIfEmpty([]))):this.locate(e,t??{})}}const ui=C.namespace("spine"),pt=({position:n,pageSize:e})=>new nt({...n,left:n.x,top:n.y,width:e.width,height:e.height,bottom:n.y+e.height,right:n.x+e.width}),di=10,pi=n=>{const{spineItem:e,...t}=n;if(!n.spineItem.value.isLoaded)return{...t,firstVisibleNode:void 0};const o=n.spineItem.renderer?.getDocumentFrame()?.contentWindow?.document;return!o||o.body===null?{...t,firstVisibleNode:void 0}:{...t,firstVisibleNode:Kt(o,n.layout)}},hi=n=>new r.Observable(e=>{if(n.length===0){e.next([]),e.complete();return}let t,i=0;const o=new Array(n.length),s=()=>{t!==void 0&&(cancelAnimationFrame(t),t=void 0)},a=()=>{t=void 0;let l=0;for(;i<n.length&&l<di;){const d=n[i];if(!d){i=n.length;break}o[i]=pi(d),i+=1,l+=1}if(i>=n.length){e.next(o),e.complete();return}c()},c=()=>{t=requestAnimationFrame(a)};return c(),()=>{s()}}),z=class z extends O{constructor(e,t,i,o,s,a){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=i,this.context=o,this.locator=s,this.viewport=a,this.fromSpineItemPageIndex=(c,l)=>z.fromSpineItemPageIndex(this.value,c,l),this.fromNextPageWithinSameSpineItem=c=>z.fromNextPageWithinSameSpineItem(this.value,c),this.fromAbsolutePageIndex=c=>z.fromAbsolutePageIndex(this.value,c),this.observeFromAbsolutePageIndex=c=>this.pipe(r.map(()=>this.fromAbsolutePageIndex(c))),this.layout$=e.layout$.pipe(r.withLatestFrom(a),r.switchMap(([,{pageSize:c}])=>{const l=t.items.reduce((d,u,p)=>{for(let g=0;g<u.numberOfPages;g+=1){const h=i.getSpineItemPositionFromPageIndex({spineItem:u,pageIndex:g}),m=s.getSpinePositionFromSpineItemPosition({spineItem:u,spineItemPosition:h}),f=d.length;d.push({absoluteLayout:pt({pageSize:c,position:m}),layout:new tt({left:h.x,right:h.x+c.width,top:h.y,bottom:h.y+c.height,width:c.width,height:c.height,x:h.x,y:h.y}),itemIndex:p,absolutePageIndex:f,spineItem:u,pageIndex:g})}return d},[]);return hi(l)}),r.map(c=>(ui.info("Pages layout",c),{pages:c})),r.share()),this.layout$.pipe(r.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}};z.fromSpineItemPageIndex=(e,t,i)=>{const o=typeof t=="number"?t:t.index;return e.pages.find(s=>s.itemIndex===o&&s.pageIndex===i)},z.fromNextPageWithinSameSpineItem=(e,t)=>z.fromSpineItemPageIndex(e,t.itemIndex,t.pageIndex+1),z.fromAbsolutePageIndex=(e,t)=>e.pages.find(i=>i.absolutePageIndex===t);let H=z;const Z=n=>{const e=n.indexOf("#");return e>=0?n.substring(0,e):n},ht=n=>{if(!n)return;const e=n.indexOf("#");return e<0?void 0:n.substring(e+1)||void 0},gi=n=>{try{return decodeURIComponent(n)}catch{return n}},gt=(n,e=[])=>n.flatMap(t=>{const i=[...e,{title:t.title,path:t.path}],o=t.href||t.path;return[{chain:i,href:o,anchorId:ht(t.href)??ht(t.path)},...gt(t.contents,i)]}),mi=n=>{const e=new Map;return n.spineItems.forEach((t,i)=>{e.has(t.href)||e.set(t.href,i)}),e},fi=(n,e)=>{const t=mi(e);return gt(n).map(i=>{const o=Z(i.href),s=t.get(o)??-1;return{...i,hrefWithoutAnchor:o,spineItemIndex:s}})},Si=({manifest:n,tocIndex:e})=>{const t=new Map;e.forEach((s,a)=>{const c=t.get(s.hrefWithoutAnchor);if(c){c.push(a);return}t.set(s.hrefWithoutAnchor,[a])});const i=new Map,o=new Map;for(const s of n.spineItems){if(i.has(s.href))continue;const a=Z(s.href);let c=o.get(a);if(!c){const l=[];for(const[d,u]of t)yi(a,d)&&l.push(...u);l.sort((d,u)=>d-u),c=l.map(d=>e[d]),o.set(a,c)}i.set(s.href,c)}return i},yi=(n,e)=>n===e||n.endsWith(e)||e.endsWith(n),bi=(n,e)=>{const t=n.endsWith(e),i=n.substring(0,n.lastIndexOf("/")),o=e.substring(0,e.lastIndexOf("/")),s=i!==""&&i.endsWith(o);return t||s},mt=n=>{const[e,...t]=n;if(!e)return;const i={title:e.title,path:e.path};let o=i;for(const s of t){const a={title:s.title,path:s.path};o.subChapter=a,o=a}return i},Ii=({doc:n,node:e,offset:t})=>{const i=n.createRange();if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.CDATA_SECTION_NODE||e.nodeType===Node.COMMENT_NODE){const o=e,s=Math.max(0,Math.min(t,o.length));i.setStart(o,s)}else{const o=e.childNodes.length,s=Math.max(0,Math.min(t,o));i.setStart(e,s)}return i.collapse(!0),i},wi=({rangeToTest:n,upperBoundRange:e})=>n.compareBoundaryPoints(Range.START_TO_START,e)<0,vi=n=>{const e=n.createRange(),t=n.body??n.documentElement;if(t)return e.selectNodeContents(t),e.collapse(!1),e},Pi=({anchorNode:n,nextPageNode:e})=>n===e||n.contains(e),ft=({node:n,offset:e,candidates:t,spineItem:i,nextPageEntry:o})=>{if(!n||e===void 0||!i||t.length===0)return;const s=i.renderer.getDocumentFrame()?.contentDocument;if(!s||n.ownerDocument!==s)return;const a=o?.firstVisibleNode?.node,c=o?.firstVisibleNode?.offset,l=o?a!==void 0&&c!==void 0&&a.ownerDocument===s?Ii({doc:s,node:a,offset:c}):void 0:vi(s);if(!l)return;const d=o!==void 0&&a!==void 0&&a.ownerDocument===s;let u,p,g;for(const m of t){if(!m.anchorId){g=m.chain;continue}const f=s.getElementById(gi(m.anchorId));if(!f||d&&Pi({anchorNode:f,nextPageNode:a}))continue;const S=s.createRange();S.setStartBefore(f),S.collapse(!0),wi({rangeToTest:S,upperBoundRange:l})&&(!p||S.compareBoundaryPoints(Range.START_TO_START,p)>0)&&(u=m.chain,p=S)}const h=u??g;return h?mt(h):void 0},Ti=({candidate:n,hrefHasAnchor:e})=>{if(e||!n.anchorId)return!1;const t=n.chain[n.chain.length-1],i=n.chain[n.chain.length-2];return!t||!i?!1:Z(t.path)===Z(i.path)},$i=({href:n,tocIndex:e,manifest:t})=>{const i=Z(n),o=n.includes("#"),s=t.spineItems.findIndex(c=>c.href===i);let a;for(const c of e)bi(i,c.hrefWithoutAnchor)&&(s<c.spineItemIndex||Ti({candidate:c,hrefHasAnchor:o})||(a=c.chain));return a},Mi=(n,e,t)=>{const{href:i}=t,o=$i({href:i,tocIndex:e,manifest:n});return o?mt(o):void 0},Fi=(n,e)=>n?n.spineItems.reduce((i,o)=>(i[o.id]=Mi(n,e,o),i),{}):{},Ci=(n,e,t)=>n+e*t,Li=(n,e,t)=>{const{height:i,width:o}=t.layoutInfo,{top:s,left:a}=n.spine.getSpineItemSpineLayoutInfo(t);return n.settings.values.computedPageTurnDirection==="vertical"?Math.max(0,Math.min(1,(e.y-s+n.viewport.absoluteViewport.height)/i)):Math.max(0,Math.min(1,(e.x-a+n.viewport.absoluteViewport.width)/o))},Ei=(n,e,t,i,o,s)=>o.isReady$.pipe(r.first(),r.withLatestFrom(n.layoutInfo$),r.map(([a,c])=>{const l=s.renditionLayout==="pre-paginated",d=s.spineItems.length||0,u=s.spineItems.slice(0,e).reduce((b,w)=>b+(w.progressionWeight??0),0)||0,p=n.spineItemsManager.getSpineItemIndex(o)??0,g=s.spineItems.length??0,h=c.pages.filter(b=>b.itemIndex===p).length??0,m=s.spineItems[e]?.progressionWeight??(p+1)/g;let f=(t+1)*(m/h);!l&&o.renditionLayout==="reflowable"&&!a&&(f=0);let S=u+f;return s.renditionFlow==="scrolled-continuous"&&(a?f=Li(n,i,o):f=0,S=Ci(u,m,f)),e===d-1&&t===h-1&&S>.99?1:S})),Ni={tocCandidatesBySpineHref:new Map,chaptersInfo:{}},Ri=({beginItem:n,endItem:e,paginationInfo:t,chaptersData:i,pagesState:o})=>{const s=n&&t.beginPageIndexInSpineItem!==void 0?H.fromSpineItemPageIndex(o,n.index,t.beginPageIndexInSpineItem):void 0,a=s?H.fromNextPageWithinSameSpineItem(o,s):void 0,c=e&&t.endPageIndexInSpineItem!==void 0?H.fromSpineItemPageIndex(o,e.index,t.endPageIndexInSpineItem):void 0,l=c?H.fromNextPageWithinSameSpineItem(o,c):void 0,d=n?ft({node:s?.firstVisibleNode?.node,offset:s?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(n.item.href)??[],spineItem:n,nextPageEntry:a}):void 0,u=e?ft({node:c?.firstVisibleNode?.node,offset:c?.firstVisibleNode?.offset,candidates:i.tocCandidatesBySpineHref.get(e.item.href)??[],spineItem:e,nextPageEntry:l}):void 0;return{beginChapterInfo:d??(n?i.chaptersInfo[n.item.id]:void 0),beginSpineItemReadingDirection:n?.readingDirection,beginAbsolutePageIndex:s?.absolutePageIndex,endChapterInfo:u??(e?i.chaptersInfo[e.item.id]:void 0),endSpineItemReadingDirection:e?.readingDirection,endAbsolutePageIndex:c?.absolutePageIndex}},Ai=({items:n,pagesState:e})=>{const t=n.map(()=>0);for(const i of e.pages)t[i.itemIndex]=(t[i.itemIndex]??0)+1;return{numberOfPagesPerItems:t,numberOfTotalPages:e.pages.length}},Oi=(n,e)=>n.numberOfTotalPages!==e.numberOfTotalPages||n.numberOfPagesPerItems.length!==e.numberOfPagesPerItems.length?!1:n.numberOfPagesPerItems.every((t,i)=>t===e.numberOfPagesPerItems[i]),Di=({reader:n,paginationInfo:e,navigationPosition:t,manifest:i})=>{const o=n.spineItemsManager.get(e.endSpineItemIndex);return o?Ei(n,e.endSpineItemIndex??0,e.endPageIndexInSpineItem||0,t,o,i):r.of(0)},Vi=n=>n.context.manifest$.pipe(r.map(e=>{if(!e)return Ni;const t=fi(e.nav?.toc??[],e);return{tocCandidatesBySpineHref:Si({manifest:e,tocIndex:t}),chaptersInfo:Fi(e,t)}})),Ui=n=>({beginSpineItemIndex:n.beginSpineItemIndex,beginPageIndexInSpineItem:n.beginPageIndexInSpineItem,endSpineItemIndex:n.endSpineItemIndex,endPageIndexInSpineItem:n.endPageIndexInSpineItem}),ki=n=>{const e=n.pagination.state$,t=n.spine.pages.layout$,i=Vi(n).pipe(r.shareReplay({bufferSize:1,refCount:!0})),o=e.pipe(r.map(Ui),r.distinctUntilChanged(T.isShallowEqual)),s=r.combineLatest([o,i,t]).pipe(r.map(([u,p,g])=>{const h=n.spineItemsManager.get(u.beginSpineItemIndex),m=n.spineItemsManager.get(u.endSpineItemIndex);return Ri({beginItem:h,endItem:m,paginationInfo:u,chaptersData:p,pagesState:g})}),r.shareReplay({bufferSize:1,refCount:!0})),a=n.settings.watch(["computedSpreadMode"]).pipe(r.map(u=>u.computedSpreadMode??!1),r.distinctUntilChanged()),c=r.combineLatest([t,n.spineItemsManager.items$]).pipe(r.map(([u,p])=>Ai({items:p,pagesState:u})),r.distinctUntilChanged(Oi)),l=r.combineLatest([e,a,s,c]).pipe(r.map(([u,p,g,h])=>({...u,...g,isUsingSpread:p,...h}))),d=r.combineLatest([e,n.layout$,n.navigation.navigation$,n.context.manifest$]).pipe(r.switchMap(([u,p,g,h])=>Di({reader:n,paginationInfo:u,navigationPosition:g.position,manifest:h})),r.map(u=>({percentageEstimateOfBook:u})));return r.combineLatest([l,d]).pipe(r.map(([u,p])=>({...u,...p})),r.distinctUntilChanged(T.isShallowEqual),r.auditTime(5))},St=n=>e=>{const t=n(e),i=new r.BehaviorSubject({...t.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),o=new dt(t),s=ki(t).pipe(r.tap(a=>C.log("Pagination",a))).subscribe(i);return{...t,locateResource:o.locateResource.bind(o),destroy:()=>{s.unsubscribe(),t.destroy()},pagination:{...t.pagination,get state(){return i.value},get state$(){return i}}}},_i=n=>({put:(s,a)=>new Promise((c,l)=>{const d=n.transaction(["store"],"readwrite");d.onerror=g=>{l(g)},d.oncomplete=()=>{c()};const p=d.objectStore("store").put(a,s);p.onsuccess=()=>{c()},p.onerror=g=>{l(g)}}),keys:()=>new Promise((s,a)=>{const c=n.transaction(["store"],"readonly");c.onerror=p=>{a(p)};const d=c.objectStore("store").openKeyCursor(),u=[];d.onsuccess=()=>{const p=d.result;if(!p){s(u);return}u.push(p.key),p.continue()},d.onerror=()=>{a(d.error)}}),get:s=>new Promise((a,c)=>{const l=n.transaction(["store"],"readwrite"),u=l.objectStore("store").get(s);u.onsuccess=()=>{let p=u.result;p===void 0&&(p=null),a(p)},l.onerror=()=>{c(u.error)}}),remove:s=>new Promise((a,c)=>{const l=n.transaction(["store"],"readwrite"),u=l.objectStore("store").delete(s);l.onerror=()=>{c(u.error)},l.oncomplete=()=>{a()},l.onabort=()=>{const p=u.error?u.error:u.transaction?.error;c(p)}})}),Te=async n=>new Promise((e,t)=>{const i=window.indexedDB.open(n);i.onerror=o=>{t(o)},i.onsuccess=()=>{e(_i(i.result))},i.onupgradeneeded=()=>{i.result.createObjectStore("store")}}),zi=n=>{let e=Date.now().toString();const t=new r.Subject,i=l=>{if(typeof l=="string"||typeof l=="object"){const d=typeof l=="object"?l.id:l;return n.manifest?.spineItems.find(u=>u.id===d)}return n.manifest?.spineItems[l]},o=async(l,d)=>{const u=i(l);if(!u)return new Response("Item not found",{status:404});const g=await(await Te("prose-reader")).get(`${e}_${u.id}`);if(g)return new Response(g,{status:200});const h=d&&await d(u)||await fetch(u.href);return s(u,h.clone()),h},s=(l,d)=>{t.next({id:l,data:d})};t.asObservable().pipe(I.mergeMap(({id:l,data:d})=>{const u=i(l);return u?r.from(r.forkJoin([Te("prose-reader"),r.from(d.blob())])).pipe(I.switchMap(([p,g])=>r.from(p.put(`${e}_${u.id}`,g))),I.catchError(p=>(C.error(p),r.EMPTY))):r.EMPTY}),I.takeUntil(n.destroy$)).subscribe();const a=n.manifest$.pipe(I.tap(()=>{e=Date.now().toString()}));return r.merge(a).pipe(I.switchMap(()=>(C.debug("Cleanup up old cache..."),r.from(Te("prose-reader")).pipe(I.switchMap(l=>r.from(l.keys()).pipe(I.map(d=>d.filter(u=>!u.toString().startsWith(e))),I.switchMap(d=>{const u=d.map(p=>l.remove(p));return r.from(Promise.all(u))}))),I.catchError(l=>(C.error(l),r.EMPTY))))),I.takeUntil(n.destroy$)).subscribe(),{get:o,destroy:()=>{t.complete()}}},Wi=n=>e=>{const t=n(e),i=zi(t.context);return{...t,destroy:()=>{i.destroy(),t.destroy()}}},Bi=(n,e)=>{const t=n.node.ownerDocument?.createRange(),i=n.node.compareDocumentPosition(e.node);if(t){try{if(i&Node.DOCUMENT_POSITION_PRECEDING)t.setStart(e.node,e.offset||0),t.setEnd(n.node,n.offset||0);else if(i&Node.DOCUMENT_POSITION_FOLLOWING)t.setStart(n.node,n.offset||0),t.setEnd(e.node,e.offset||0);else{const o=Math.min(n.offset||0,e.offset||0),s=Math.max(n.offset||0,e.offset||0);t.setStart(n.node,o),t.setEnd(n.node,s)}}catch(o){C.warn("Failed to create range from selection",o,{anchor:n,focus:e})}return t}},Hi=({selection:n,spineItem:e})=>{const{anchorNode:t,anchorOffset:i,focusNode:o,focusOffset:s}=n;if(!(!t||!o))try{return Bi({node:t,offset:i},{node:o,offset:s})}catch(a){C.warn("Failed to create range from selection",a,{selection:n,spineItem:e});return}};class xi extends N{constructor(e){super();const t=e.contentDocument||e.contentWindow?.document;if(!t)this.selectionChange$=r.NEVER,this.selectionOver$=r.NEVER;else{const i=we(t.body,{childList:!0,subtree:!0}).pipe(r.filter(s=>!!s.find(a=>a.type==="childList"&&a.removedNodes.length))),o=e.parentElement?we(e.parentElement,{childList:!0}).pipe(r.filter(s=>!!s.find(a=>Array.from(a.removedNodes).includes(e)))):r.of(null);this.selectionChange$=r.merge(r.fromEvent(t,"selectionchange"),i).pipe(r.map(()=>t.getSelection()),r.takeUntil(r.merge(o,this.destroy$)),r.endWith(null)),this.selectionOver$=r.fromEvent(t,"pointerdown").pipe(r.switchMap(()=>r.merge(r.fromEvent(t,"pointerup"),r.fromEvent(t,"pointercancel"),r.fromEvent(t,"contextmenu")).pipe(r.first(),r.delay(0),r.map(s=>{const a=t.getSelection();return a&&!a.isCollapsed?[s,a]:void 0}),r.filter(D))),r.takeUntil(r.merge(o,this.destroy$)))}}}const Yi=n=>n.watch("isLoaded").pipe(r.switchMap(()=>{const e=n.renderer.getDocumentFrame(),t=e?.contentDocument||e?.contentWindow?.document;if(!e||!t)return r.NEVER;const i=new xi(e);return r.merge(i.selectionChange$.pipe(r.map(o=>{if(o?.toString())return{type:"change",selection:o}})),i.selectionOver$.pipe(r.map(([o,s])=>({type:"over",event:o,selection:s})))).pipe(r.takeUntil(n.unloaded$),r.endWith(void 0),r.finalize(()=>{i.destroy()}))}),r.distinctUntilChanged()),qi=n=>e=>{const t=n(e);let i;const o=t.spineItemsManager.items$.pipe(r.switchMap(u=>{const p=u.map(g=>{const h=t.spineItemsManager.getSpineItemIndex(g)??0;return Yi(g).pipe(r.map(m=>{if(m)return{...m,itemIndex:h}}))});return r.merge(...p)}),r.startWith(void 0),r.distinctUntilChanged(),r.tap(u=>{i=u}),r.shareReplay({refCount:!0,bufferSize:1})),s=o,a=o.pipe(r.map(u=>!!u),r.distinctUntilChanged(),r.filter(u=>u),r.share()),c=a.pipe(r.switchMap(()=>s),r.distinctUntilChanged(),r.filter(u=>!u),r.share()),l=o.pipe(r.filter(u=>u?.type==="over"),r.share()),d=t.context.watch("rootElement").pipe(r.filter(D),r.switchMap(u=>r.fromEvent(u,"pointerdown")),r.withLatestFrom(s),r.map(([,u])=>u),r.startWith(void 0),r.shareReplay({refCount:!0,bufferSize:1}));return r.merge(s,d).pipe(r.takeUntil(t.$.destroy$)).subscribe(),{...t,selection:{selection$:s,selectionStart$:a,selectionEnd$:c,selectionOver$:l,lastSelectionOnPointerdown$:d,getSelection:()=>i,createOrderedRangeFromSelection:Hi}}},yt=[{name:"bright",backgroundColor:"white"},{name:"sepia",backgroundColor:"#eaddc7",foregroundColor:"black"},{name:"night",backgroundColor:"#191717",foregroundColor:"#f1ebeb"}],Xi=n=>e=>{const t=n(e),i=new r.BehaviorSubject(e.theme??"bright"),o=()=>{const c=yt.find(l=>l.name===i.value);return`
|
|
204
205
|
body {
|
|
205
206
|
${c!==void 0?`background-color: ${c.backgroundColor} !important;`:""}
|
|
206
207
|
}
|
|
@@ -210,19 +211,19 @@
|
|
|
210
211
|
color: ${c.foregroundColor};
|
|
211
212
|
}
|
|
212
213
|
`:""}
|
|
213
|
-
`},s=({container:c})=>{const l=yt.find(d=>d.name===i.value);return l&&c.style.setProperty("background-color",l.backgroundColor),()=>{}},a=()=>{t.spineItemsManager.items.forEach(c=>{const l=c.renderer.getDocumentFrame();l&&V(l,"prose-reader-theme",o()),s({container:c.element})})};return t.hookManager.register("item.onDocumentLoad",({itemId:c})=>{const l=t.spineItemsManager.get(c);if(l?.renditionLayout!=="pre-paginated"){const d=l?.renderer.getDocumentFrame();d&&V(d,"prose-reader-theme",o())}}),t.spineItemsManager.items$.pipe(I.tap(c=>c.map(({element:l})=>s({container:l}))),I.takeUntil(t.$.destroy$)).subscribe(),i.pipe(I.tap(()=>{a()}),I.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:c=>{c!==i.value&&i.next(c)},get:()=>i.value,$:{theme$:i.asObservable()}}}},Zi=n=>e=>{const t=n(e);return{...t,utils:{isOrIsWithinValidLink:s=>!!(he(s)&&(s.nodeName==="a"?s:s.closest("a"))?.getAttribute("href")),injectScopedCSS:(s,a,c)=>{const l=c.replace("${id}",t.id);return ge(s,`${a}-${t.id}`,l)}}}};navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const Ji=n=>e=>n(e),bt=(n,e,t)=>{const{clientWidth:i,clientHeight:o}=t.value.element,s={maxX:0,minX:i*(1-e),maxY:0,minY:o*(1-e)};return{x:Math.min(Math.max(n.x,s.minX),s.maxX),y:Math.min(Math.max(n.y,s.minY),s.maxY)}},Ki=(n,e,t)=>{t.style.transformOrigin="0 0";const i=`translate3d(${e.x}px, ${e.y}px, 0px)`,o=`scale(${n})`;t.style.transform=`${i} ${o}`},Qi=(n,e,t,i)=>{const o=e/n,s=t.clientWidth,a=t.clientHeight,c=s/2-i.x,l=a/2-i.y;return{x:i.x+c*(1-o),y:i.y+l*(1-o)}};class It{constructor(e){this.x=e.x,this.y=e.y}}class $e extends It{}class wt extends It{constructor(){super(...arguments),this.__symbol=Symbol("UnboundScrollPosition")}}class vt extends D{constructor(e,t,i,o,s){super({element:void 0}),this.viewport=e,this.settings=t,this.hookManager=i,this.spine=o,this.context=s,this.navigateSubject=new r.Subject,this.scrollingSubject=new r.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:p})=>{const g=this.value.element;this.scrollingSubject.next(!0);const h=this.fromSpinePosition(p);g?.scrollTo({left:h.x,top:h.y,behavior:"instant"}),r.timer(1).pipe(r.tap(()=>{this.scrollingSubject.next(!1)}),r.takeUntil(r.merge(this.scrollingSubject.pipe(r.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const a=this.context.pipe(Q(["rootElement"]),r.tap(({rootElement:p})=>{if(!p)return;const g=document.createElement("div");g.setAttribute(`data-${Je}`,""),g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),c=r.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(r.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(r.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(r.startWith(!1),r.switchMap(()=>r.merge(r.of(!0),r.of(!1))),r.shareReplay(1));const d=r.merge(o.element$.pipe(r.filter(O),r.switchMap(p=>j(p))),o.element$.pipe(r.filter(O),r.switchMap(p=>r.fromEvent(p,"scroll"))),o.spineItemsObserver.itemResize$).pipe(r.switchMap(()=>r.timer(10).pipe(r.map(()=>!1),r.startWith(!0))),r.distinctUntilChanged(),r.startWith(!1)),u=r.combineLatest([d,this.isScrolling$]).pipe(r.map(([p,g])=>p||g),r.shareReplay(1));this.userScroll$=this.watch("element").pipe(r.filter(O),r.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(r.switchMap(({computedPageTurnMode:g})=>g==="controlled"?r.NEVER:r.fromEvent(p,"scroll").pipe(r.withLatestFrom(u),r.filter(([,h])=>!h),r.map(([h])=>h))))),r.share()),r.merge(a,c,l).pipe(r.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){const t=this.viewport.scaleFactor;return new U({x:e.x/t,y:e.y/t})}fromSpinePosition(e){const t=this.viewport.scaleFactor;return new $e({x:e.x*t,y:e.y*t})}get scrollPosition(){const e=this.value.element;return new $e({x:e?.scrollLeft??0,y:e?.scrollTop??0})}}const ji=(n,e,t,i,o)=>{const s=n.clientWidth,a=n.clientHeight,c=n.scrollLeft,l=n.scrollTop,d=c+s/2-i,u=l+a/2-o,p=t/e,g=d*p,h=u*p,m=g-s/2+i,f=h-a/2+o;return new wt({x:m,y:f})},eo=(n,e)=>{const t=e.viewport,i=e.navigation.scrollNavigationController,o=t.value.element,s=i.value.element,a=i.value.element,c=Math.round(t.scaleFactor*100)/100,l=o.offsetLeft,d=o.offsetTop,u=ji(s??nn(),c,n,l,d),p=n<1?"down":"up";a?.setAttribute(`data-${L}-zooming-direction`,p),n<1?o.style.transformOrigin="top":n>1&&(o.style.transformOrigin=`${l}px ${d}px`),o.style.transform=`scale(${n})`;const g=i.fromScrollPosition(u);e.navigation.navigate({position:g})},ce=200;class to extends D{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new r.Subject,this.exitSubject=new r.Subject;const t=this.enterSubject.pipe(r.switchMap(o=>{const{scale:s=1,animate:a=!1}=o??{},c=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${L}-zooming`,"true"),this.scrollNavigationController.value.element?.setAttribute(`data-${L}-zooming`,this.isControlled?"false":"true"),a&&this.isControlled&&(c.style.transition=`transform ${ce}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(s),s!==1&&this.isControlled?r.timer(o?.animate?ce:0).pipe(r.tap(()=>{this.reader.layout()})):r.EMPTY})),i=this.exitSubject.pipe(r.switchMap(o=>{const s=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${L}-zooming`,"false"),this.scrollNavigationController.value.element?.removeAttribute(`data-${L}-zooming-direction`),this.scrollNavigationController.value.element?.setAttribute(`data-${L}-zooming`,"false"),o?.animate&&this.isControlled&&(s.style.transition=`transform ${ce}ms`),this.updateZoom(1,{x:0,y:0}),s.style.transform="",this.mergeCompare({isZooming:!1}),r.timer(o?.animate?ce:0).pipe(r.tap(()=>{const a=this.reader.viewport.value.element;a.style.transformOrigin="",a.style.transition="",this.isControlled&&this.reader.layout()}),r.takeUntil(this.enterSubject))}));r.merge(t,i).pipe(r.takeUntil(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,t){this.isControlled&&(this.viewport.element.style.transition="",this.updateZoom(this.value.currentScale,e,{constraints:t?.constrain==="within-viewport"?(...i)=>bt(...i,this.reader.viewport):void 0}))}scaleAt(e,t){this.viewport.element.style.transition="";const o=Math.ceil(e*100)/100;this.updateZoom(o,void 0,{constraints:t?.constrain==="within-viewport"?(...s)=>bt(...s,this.reader.viewport):void 0})}updateZoom(e,t,i){if(this.isControlled){const o=t||Qi(this.value.currentScale,e,this.viewport.element,this.value.currentPosition),s=i?.constraints?.(o,e)??o;return this.applyZoom(e,s),this.mergeCompare({currentScale:e,currentPosition:s})}this.applyZoom(e,t??this.value.currentPosition),this.mergeCompare({currentScale:e})}applyZoom(e,t){this.isControlled?Ki(e,t,this.viewport.element):eo(e,this.reader)}get isControlled(){return this.reader.settings.values.computedPageTurnMode==="controlled"}get scrollNavigationController(){return this.reader.navigation.scrollNavigationController}get viewport(){return this.reader.viewport.value}}const no=n=>e=>{const t=n(e),i=new to(t),o=()=>{i.destroy(),t.destroy()},s=i;return{...t,destroy:o,zoom:{enter:i.enter.bind(i),scaleAt:i.scaleAt.bind(i),move:i.move.bind(i),exit:i.exit.bind(i),state$:s,get state(){return i.value}}}},Pt=n=>n?.renditionLayout==="pre-paginated"||n?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class io{constructor(){this.navigationSubject=new r.ReplaySubject(1),this.viewportStateSubject=new r.BehaviorSubject("free"),this.paginationSubject=new r.ReplaySubject,this.navigationIsLockedSubject=new r.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(r.distinctUntilChanged(),r.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(r.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(r.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}class Tt extends D{constructor(){super({assumedRenditionLayout:"reflowable"}),this.bridgeEvent=new io,this.manifest$=this.pipe(I.map(e=>e.manifest),I.filter(O),I.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,i=e.manifest??t.manifest,o={...t,...e,...e.manifest&&{isFullyPrePaginated:Pt(i),assumedRenditionLayout:i?.renditionLayout??"reflowable"}};this.mergeCompare(o)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}}class $t extends D{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),r.combineLatest([e.watch(["manifest","hasVerticalWriting"]),t.watch(["computedPageTurnMode"])]).pipe(r.map(([{manifest:i,hasVerticalWriting:o},{computedPageTurnMode:s}])=>({hasVerticalWriting:o,renditionFlow:i?.renditionFlow,renditionLayout:i?.renditionLayout,computedPageTurnMode:s})),r.distinctUntilChanged(T.isShallowEqual),r.map(({hasVerticalWriting:i,renditionFlow:o,renditionLayout:s,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:o==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:o==="scrolled-continuous"||a==="scrollable"?["none"]:i?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:s==="reflowable"?["horizontal"]:["horizontal","vertical"]})),r.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Mt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(t=>t!==e),this.destroy(e.name,void 0,e)}register(e,t){const i={name:e,runFn:t};return this._hooks.push(i),()=>{this.deregister(i)}}execute(e,t,i){return this._hooks.filter(a=>e===a.name).map(a=>{let c=()=>r.of(void 0);const l=new r.Subject,d=g=>{c=g},u=()=>(l.next(),l.complete(),c()??r.of(void 0)),p=a.runFn({...i,destroy$:l.asObservable(),destroy:d});return this._hookExecutions.push({name:e,id:t,destroyFn:u,ref:a}),p})}destroy(e,t,i){const o=this._hookExecutions.filter(a=>i&&a.ref===i||e===a.name&&(!t||t&&t===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!o.includes(a));const s=o.map(({destroyFn:a})=>a());return r.combineLatest(s)}}const oo="[data-prose-reader-spine-item][data-is-ready=false]{pointer-events:none;user-select:none;-webkit-user-select:none}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true]{overflow:scroll}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true][data-prose-reader-zooming-direction=down]{overflow-x:auto}[data-prose-reader-scroll-navigator]{height:100%;width:100%;position:relative;overflow-y:scroll;overflow-x:hidden}[data-prose-reader-viewport]{background-color:#fff;position:relative;height:100%;width:100%}",ro=n=>({x:-n.x,y:-n.y}),so=n=>n instanceof DOMMatrix?new M({x:-n.e,y:-n.f}):new M({x:-n.x,y:-n.y}),Ft=E.namespace("navigation/ViewportNavigator");class Et extends R{constructor(e,t,i,o,s){super(),this.settings=e,this.hookManager=t,this.context=i,this.spine=o,this.viewport=s,this.navigateSubject=new r.Subject,this.element$=new r.BehaviorSubject(document.createElement("div"));const a=this.spine.element$.pipe(r.filter(O),r.withLatestFrom(this.element$),r.tap(([u,p])=>{p.style.cssText=`
|
|
214
|
+
`},s=({container:c})=>{const l=yt.find(d=>d.name===i.value);return l&&c.style.setProperty("background-color",l.backgroundColor),()=>{}},a=()=>{t.spineItemsManager.items.forEach(c=>{const l=c.renderer.getDocumentFrame();l&&V(l,"prose-reader-theme",o()),s({container:c.element})})};return t.hookManager.register("item.onDocumentLoad",({itemId:c})=>{const l=t.spineItemsManager.get(c);if(l?.renditionLayout!=="pre-paginated"){const d=l?.renderer.getDocumentFrame();d&&V(d,"prose-reader-theme",o())}}),t.spineItemsManager.items$.pipe(I.tap(c=>c.map(({element:l})=>s({container:l}))),I.takeUntil(t.$.destroy$)).subscribe(),i.pipe(I.tap(()=>{a()}),I.takeUntil(t.$.destroy$)).subscribe(),{...t,theme:{set:c=>{c!==i.value&&i.next(c)},get:()=>i.value,$:{theme$:i.asObservable()}}}},Gi=n=>e=>{const t=n(e);return{...t,utils:{isOrIsWithinValidLink:s=>!!(he(s)&&(s.nodeName==="a"?s:s.closest("a"))?.getAttribute("href")),injectScopedCSS:(s,a,c)=>{const l=c.replace("${id}",t.id);return ge(s,`${a}-${t.id}`,l)}}}};navigator.userAgent.indexOf("")>-1&&navigator.userAgent.indexOf("Chrome")<=-1;const Zi=n=>e=>n(e),bt=(n,e,t)=>{const{clientWidth:i,clientHeight:o}=t.value.element,s={maxX:0,minX:i*(1-e),maxY:0,minY:o*(1-e)};return{x:Math.min(Math.max(n.x,s.minX),s.maxX),y:Math.min(Math.max(n.y,s.minY),s.maxY)}},Ji=(n,e,t)=>{t.style.transformOrigin="0 0";const i=`translate3d(${e.x}px, ${e.y}px, 0px)`,o=`scale(${n})`;t.style.transform=`${i} ${o}`},Ki=(n,e,t,i)=>{const o=e/n,s=t.clientWidth,a=t.clientHeight,c=s/2-i.x,l=a/2-i.y;return{x:i.x+c*(1-o),y:i.y+l*(1-o)}};class It{constructor(e){this.x=e.x,this.y=e.y}}class $e extends It{}class wt extends It{constructor(){super(...arguments),this.__symbol=Symbol("UnboundScrollPosition")}}class vt extends O{constructor(e,t,i,o,s){super({element:void 0}),this.viewport=e,this.settings=t,this.hookManager=i,this.spine=o,this.context=s,this.navigateSubject=new r.Subject,this.scrollingSubject=new r.BehaviorSubject(!1),this.isScrolling$=this.scrollingSubject.asObservable(),this.setViewportPosition=({position:p})=>{const g=this.value.element;this.scrollingSubject.next(!0);const h=this.fromSpinePosition(p);g?.scrollTo({left:h.x,top:h.y,behavior:"instant"}),r.timer(1).pipe(r.tap(()=>{this.scrollingSubject.next(!1)}),r.takeUntil(r.merge(this.scrollingSubject.pipe(r.skip(1)),this.destroy$))).subscribe(),this.hookManager.execute("onViewportOffsetAdjust",void 0,{})};const a=this.context.pipe(Q(["rootElement"]),r.tap(({rootElement:p})=>{if(!p)return;const g=document.createElement("div");g.setAttribute(`data-${Je}`,""),g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),c=r.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(r.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(r.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(r.startWith(!1),r.switchMap(()=>r.merge(r.of(!0),r.of(!1))),r.shareReplay(1));const d=r.merge(o.element$.pipe(r.filter(D),r.switchMap(p=>j(p))),o.element$.pipe(r.filter(D),r.switchMap(p=>r.fromEvent(p,"scroll"))),o.spineItemsObserver.itemResize$).pipe(r.switchMap(()=>r.timer(10).pipe(r.map(()=>!1),r.startWith(!0))),r.distinctUntilChanged(),r.startWith(!1)),u=r.combineLatest([d,this.isScrolling$]).pipe(r.map(([p,g])=>p||g),r.shareReplay(1));this.userScroll$=this.watch("element").pipe(r.filter(D),r.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(r.switchMap(({computedPageTurnMode:g})=>g==="controlled"?r.NEVER:r.fromEvent(p,"scroll").pipe(r.withLatestFrom(u),r.filter(([,h])=>!h),r.map(([h])=>h))))),r.share()),r.merge(a,c,l).pipe(r.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){const t=this.viewport.scaleFactor;return new U({x:e.x/t,y:e.y/t})}fromSpinePosition(e){const t=this.viewport.scaleFactor;return new $e({x:e.x*t,y:e.y*t})}get scrollPosition(){const e=this.value.element;return new $e({x:e?.scrollLeft??0,y:e?.scrollTop??0})}}const Qi=(n,e,t,i,o)=>{const s=n.clientWidth,a=n.clientHeight,c=n.scrollLeft,l=n.scrollTop,d=c+s/2-i,u=l+a/2-o,p=t/e,g=d*p,h=u*p,m=g-s/2+i,f=h-a/2+o;return new wt({x:m,y:f})},ji=(n,e)=>{const t=e.viewport,i=e.navigation.scrollNavigationController,o=t.value.element,s=i.value.element,a=i.value.element,c=Math.round(t.scaleFactor*100)/100,l=o.offsetLeft,d=o.offsetTop,u=Qi(s??nn(),c,n,l,d),p=n<1?"down":"up";a?.setAttribute(`data-${E}-zooming-direction`,p),n<1?o.style.transformOrigin="top":n>1&&(o.style.transformOrigin=`${l}px ${d}px`),o.style.transform=`scale(${n})`;const g=i.fromScrollPosition(u);e.navigation.navigate({position:g})},ce=200;class eo extends O{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new r.Subject,this.exitSubject=new r.Subject;const t=this.enterSubject.pipe(r.switchMap(o=>{const{scale:s=1,animate:a=!1}=o??{},c=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${E}-zooming`,"true"),this.scrollNavigationController.value.element?.setAttribute(`data-${E}-zooming`,this.isControlled?"false":"true"),a&&this.isControlled&&(c.style.transition=`transform ${ce}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(s),s!==1&&this.isControlled?r.timer(o?.animate?ce:0).pipe(r.tap(()=>{this.reader.layout()})):r.EMPTY})),i=this.exitSubject.pipe(r.switchMap(o=>{const s=this.reader.viewport.value.element;return this.viewport.element.setAttribute(`data-${E}-zooming`,"false"),this.scrollNavigationController.value.element?.removeAttribute(`data-${E}-zooming-direction`),this.scrollNavigationController.value.element?.setAttribute(`data-${E}-zooming`,"false"),o?.animate&&this.isControlled&&(s.style.transition=`transform ${ce}ms`),this.updateZoom(1,{x:0,y:0}),s.style.transform="",this.mergeCompare({isZooming:!1}),r.timer(o?.animate?ce:0).pipe(r.tap(()=>{const a=this.reader.viewport.value.element;a.style.transformOrigin="",a.style.transition="",this.isControlled&&this.reader.layout()}),r.takeUntil(this.enterSubject))}));r.merge(t,i).pipe(r.takeUntil(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,t){this.isControlled&&(this.viewport.element.style.transition="",this.updateZoom(this.value.currentScale,e,{constraints:t?.constrain==="within-viewport"?(...i)=>bt(...i,this.reader.viewport):void 0}))}scaleAt(e,t){this.viewport.element.style.transition="";const o=Math.ceil(e*100)/100;this.updateZoom(o,void 0,{constraints:t?.constrain==="within-viewport"?(...s)=>bt(...s,this.reader.viewport):void 0})}updateZoom(e,t,i){if(this.isControlled){const o=t||Ki(this.value.currentScale,e,this.viewport.element,this.value.currentPosition),s=i?.constraints?.(o,e)??o;return this.applyZoom(e,s),this.mergeCompare({currentScale:e,currentPosition:s})}this.applyZoom(e,t??this.value.currentPosition),this.mergeCompare({currentScale:e})}applyZoom(e,t){this.isControlled?Ji(e,t,this.viewport.element):ji(e,this.reader)}get isControlled(){return this.reader.settings.values.computedPageTurnMode==="controlled"}get scrollNavigationController(){return this.reader.navigation.scrollNavigationController}get viewport(){return this.reader.viewport.value}}const to=n=>e=>{const t=n(e),i=new eo(t),o=()=>{i.destroy(),t.destroy()},s=i;return{...t,destroy:o,zoom:{enter:i.enter.bind(i),scaleAt:i.scaleAt.bind(i),move:i.move.bind(i),exit:i.exit.bind(i),state$:s,get state(){return i.value}}}},Pt=n=>n?.renditionLayout==="pre-paginated"||n?.spineItems.every(e=>e.renditionLayout==="pre-paginated");class no{constructor(){this.navigationSubject=new r.ReplaySubject(1),this.viewportStateSubject=new r.BehaviorSubject("free"),this.paginationSubject=new r.ReplaySubject,this.navigationIsLockedSubject=new r.BehaviorSubject(!1),this.pagination$=this.paginationSubject.asObservable(),this.navigationUnlocked$=this.navigationIsLockedSubject.pipe(r.distinctUntilChanged(),r.filter(e=>!e)),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe(r.filter(e=>e==="free")),this.viewportBusy$=this.viewportState$.pipe(r.filter(e=>e==="busy")),this.navigation$=this.navigationSubject.asObservable()}}class Tt extends O{constructor(){super({assumedRenditionLayout:"reflowable"}),this.bridgeEvent=new no,this.manifest$=this.pipe(I.map(e=>e.manifest),I.filter(D),I.distinctUntilChanged()),this.isRTL=()=>this.value.manifest?.readingDirection==="rtl"}update(e){const t=this.value,i=e.manifest??t.manifest,o={...t,...e,...e.manifest&&{isFullyPrePaginated:Pt(i),assumedRenditionLayout:i?.renditionLayout??"reflowable"}};this.mergeCompare(o)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}}class $t extends O{constructor(e,t){super({supportedPageTurnAnimation:["fade","none","slide"],supportedPageTurnMode:["controlled","scrollable"],supportedPageTurnDirection:["horizontal","vertical"],supportedComputedPageTurnDirection:["horizontal","vertical"]}),r.combineLatest([e.watch(["manifest","hasVerticalWriting"]),t.watch(["computedPageTurnMode"])]).pipe(r.map(([{manifest:i,hasVerticalWriting:o},{computedPageTurnMode:s}])=>({hasVerticalWriting:o,renditionFlow:i?.renditionFlow,renditionLayout:i?.renditionLayout,computedPageTurnMode:s})),r.distinctUntilChanged(T.isShallowEqual),r.map(({hasVerticalWriting:i,renditionFlow:o,renditionLayout:s,computedPageTurnMode:a})=>({...this.value,supportedPageTurnMode:o==="scrolled-continuous"?["scrollable"]:["controlled","scrollable"],supportedPageTurnAnimation:o==="scrolled-continuous"||a==="scrollable"?["none"]:i?["fade","none"]:["fade","none","slide"],supportedPageTurnDirection:a==="scrollable"?["vertical"]:s==="reflowable"?["horizontal"]:["horizontal","vertical"]})),r.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Mt{constructor(){this._hooks=[],this._hookExecutions=[]}deregister(e){return this._hooks=this._hooks.filter(t=>t!==e),this.destroy(e.name,void 0,e)}register(e,t){const i={name:e,runFn:t};return this._hooks.push(i),()=>{this.deregister(i)}}execute(e,t,i){return this._hooks.filter(a=>e===a.name).map(a=>{let c=()=>r.of(void 0);const l=new r.Subject,d=g=>{c=g},u=()=>(l.next(),l.complete(),c()??r.of(void 0)),p=a.runFn({...i,destroy$:l.asObservable(),destroy:d});return this._hookExecutions.push({name:e,id:t,destroyFn:u,ref:a}),p})}destroy(e,t,i){const o=this._hookExecutions.filter(a=>i&&a.ref===i||e===a.name&&(!t||t&&t===a.id));this._hookExecutions=this._hookExecutions.filter(a=>!o.includes(a));const s=o.map(({destroyFn:a})=>a());return r.combineLatest(s)}}const io="[data-prose-reader-spine-item][data-is-ready=false]{pointer-events:none;user-select:none;-webkit-user-select:none}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true]{overflow:scroll}[data-prose-reader-scroll-navigator][data-prose-reader-zooming=true][data-prose-reader-zooming-direction=down]{overflow-x:auto}[data-prose-reader-scroll-navigator]{height:100%;width:100%;position:relative;overflow-y:scroll;overflow-x:hidden}[data-prose-reader-viewport]{background-color:#fff;position:relative;height:100%;width:100%}",oo=n=>({x:-n.x,y:-n.y}),ro=n=>n instanceof DOMMatrix?new M({x:-n.e,y:-n.f}):new M({x:-n.x,y:-n.y}),Ft=C.namespace("navigation/ViewportNavigator");class Ct extends N{constructor(e,t,i,o,s){super(),this.settings=e,this.hookManager=t,this.context=i,this.spine=o,this.viewport=s,this.navigateSubject=new r.Subject,this.element$=new r.BehaviorSubject(document.createElement("div"));const a=this.spine.element$.pipe(r.filter(D),r.withLatestFrom(this.element$),r.tap(([u,p])=>{p.style.cssText=`
|
|
214
215
|
height: 100%;
|
|
215
216
|
width: 100%;
|
|
216
217
|
position: relative;
|
|
217
|
-
`,p.className=`${L}-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(()=>{Ft.info("layout",e.values)}),r.share());const d=this.navigateSubject.pipe(r.tap(u=>{Ft.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 t=this.element$.getValue(),i=ro(e);t.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(),t=window.getComputedStyle(e),i=t.transform||t.webkitTransform;if(!i||i==="none")return new M({x:0,y:0});const o=new DOMMatrix(i);return so(o)}}const ao=()=>n=>n.pipe(r.map(({navigation:e,pagination:t,...i})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...i}))),co=(n,e,t)=>n.bridgeEvent.pagination$.pipe(r.withLatestFrom(e),r.filter(([i,o])=>i.navigationId===o.id),r.switchMap(([i,o])=>(t.spineItemsManager.get(o.spineItem)?.isReady$.pipe(r.first())??r.of(!1)).pipe(r.filter(a=>a),r.map(()=>({pagination:i,navigation:o})))),ao(),r.distinctUntilChanged((i,o)=>i.navigation.paginationBeginCfi===o.navigation.paginationBeginCfi),r.map(({navigation:i})=>({...i,meta:{triggeredBy:"pagination"}}))),lo=({navigationResolver:n})=>e=>e.pipe(r.map(([t,i])=>{const o={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t,position:t.position?n.fromOutOfBoundsSpinePosition(t.position):void 0};return{previousNavigation:i,navigation:o}})),uo=({navigationResolver:n})=>e=>e.pipe(r.map(t=>{if(t.navigation.cfi){const i=n.getNavigationForCfi(t.navigation.cfi);if(i)return{...t,navigation:{...t.navigation,position:i}}}return t})),po=({navigation:n,previousNavigation:e,settings:t})=>n.directionFromLastNavigation?n.directionFromLastNavigation:n.url!==void 0||n.cfi!==void 0?"anchor":e.spineItem===void 0||n.spineItem||!n.position?"forward":t.values.computedPageTurnDirection==="vertical"?n.position.y>e.position.y||n.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(n.position.x)>Math.abs(e.position.x)||n.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",ho=({context:n,settings:e})=>t=>t.pipe(r.map(({navigation:i,previousNavigation:o})=>{const s=po({navigation:i,previousNavigation:o,settings:e}),a={...i,directionFromLastNavigation:s};return{previousNavigation:o,navigation:a,direction:s}})),go=({spineItemsManager:n,navigationResolver:e,settings:t})=>i=>i.pipe(r.map(({navigation:o,...s})=>{const a=n.get(o.spineItem);if(o.position)return t.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=t.values.computedPageTurnMode==="scrollable"?new U({x:c.x+s.previousNavigation.position.x,y:c.y}):e.fromUnboundSpinePosition(c);return{navigation:{...o,position:l},...s}})),Ct=({settings:n,spineItemsManager:e,navigationResolver:t,spineLocator:i})=>o=>{const s=a=>{const{position:c,spineItem:l,cfi:d,directionFromLastNavigation:u}=a,{navigationSnapThreshold:p,computedPageTurnMode:g}=n.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:b,beginPageIndex:w}=i.getVisiblePagesFromViewportPosition({position:c,spineItem:S,threshold:p,restrictToScreen:!1})??{},v=(u==="forward"||u==="anchor"?b:w)??0,$=t.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}}))},Lt=({spine:n})=>e=>e.pipe(r.switchMap(({navigation:t,...i})=>{const o=n.getSpineItemSpineLayoutInfo(t.spineItem),s=n.spineItemsManager.get(t.spineItem);return(s?.isReady$??r.of(!1)).pipe(r.first(),r.map(a=>({navigation:{...t,spineItemHeight:o?.height,spineItemWidth:o?.width,spineItemLeft:o.left,spineItemTop:o.top,spineItemIsUsingVerticalWriting:s?.isUsingVerticalWriting(),spineItemIsReady:a},...i})))})),Me=({settings:n,spineItemsManager:e,spineLocator:t,navigationResolver:i})=>o=>{const s=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:l}=n.values,d=e.get(a.spineItem);if(!(!d||!a.position)){if(l==="controlled"){const{endPageIndex:u,beginPageIndex:p}=t.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=t.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 t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:d})}return t.getSpineItemPositionFromSpinePosition(a.position,d)}};return o.pipe(r.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:s(a)},...c})))},mo=({navigationResolver:n})=>e=>e.pipe(r.map(t=>{if(t.navigation.url){const i=n.getNavigationForUrl(t.navigation.url);if(i)return{...t,navigation:{...t.navigation,position:i.position,spineItem:i.spineItemId}}}return t}));class Fe{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 fo=({spineLocator:n,navigation:e,navigationResolver:t,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=n.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=t.getNavigationForUrl(e.url);if(h)return h.position}const g=e.cfi??e.paginationBeginCfi;if(g!==void 0&&!se(g)&&(d||u||a&&!e.spineItemIsReady)){const h=t.getNavigationForCfi(g);if(h)return h}if(l&&p&&e.directionFromLastNavigation==="backward"){const h=new C({x:(e.positionInSpineItem?.x??0)+d,y:(e.positionInSpineItem?.y??0)+u});return t.getNavigationFromSpineItemPosition({spineItem:s,spineItemPosition:h})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const h=n.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return t.getNavigationForSpineItemPage({pageIndex:h,spineItemId:s})}return l?t.getNavigationForPosition(e.position):t.getNavigationForSpineIndexOrId(s)})):r.of(new M({x:0,y:0}))},So=({navigation:n,spineLocator:e,spineItemsManager:t,settings:i,navigationResolver:o,spine:s})=>{const{spineItem:a}=n,c=t.get(a);if(!c)return new M({x:0,y:0});const{height:l,top:d}=s.getSpineItemSpineLayoutInfo(c),u=e.isPositionWithinSpineItem(n.position,c),p=n.positionInSpineItem??new C({y:0,x:0});if(i.values.computedPageTurnDirection==="vertical"){if(d===n.spineItemTop&&l===n.spineItemHeight&&u)return n.position;if(d===n.spineItemTop&&l===n.spineItemHeight&&!u)return o.getNavigationForSpineIndexOrId(c);if(d!==n.spineItemTop){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(n.positionInSpineItem??new C({x:0,y:0}),c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:c})}if(d===n.spineItemTop&&l!==n.spineItemHeight){const g=(n.spineItemHeight??p.y)-p.y,h=new C({y:n.directionFromLastNavigation==="backward"?l-g:p.y,x:n.position.x});if(u){const m=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(h,c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:c})}if(!u){if(!(n.position.y<d)){const f=new C({y:l-g,x:n.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return o.getNavigationForSpineIndexOrId(c)}}}return n.position},yo=({navigation:n,spineItemsManager:e,settings:t,spineLocator:i,navigationResolver:o,spine:s})=>t.values.computedPageTurnMode==="scrollable"?r.of(So({navigation:n,spineLocator:i,navigationResolver:o,settings:t,spineItemsManager:e,spine:s})):fo({navigation:n,spineLocator:i,navigationResolver:o,spineItemsManager:e,spine:s}),Rt=({settings:n,navigationResolver:e,context:t,spine:i})=>o=>o.pipe(r.switchMap(s=>yo({spineLocator:i.locator,navigation:s.navigation,navigationResolver:e,settings:n,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,spine:i}).pipe(r.map(a=>({...s,navigation:{...s.navigation,position:a}}))))),bo=E.namespace("navigation/InternalNavigator");class Nt extends R{constructor(e,t,i,o,s,a,c,l){super(),this.settings=e,this.context=t,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:b,id:w})=>({position:b,id:w})),r.distinctUntilChanged(({position:b,...w},{position:v,...$})=>T.isShallowEqual(w,$)&&T.isShallowEqual(b,v)),r.shareReplay(1)),this.locker=new Fe;const d=i.pipe(r.withLatestFrom(this.navigationSubject),lo({navigationResolver:a}),mo({navigationResolver:a}),uo({navigationResolver:a}),ho({context:t,settings:e}),Ct({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Me({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Lt({spine:c})).pipe(go({navigationResolver:a,spineItemsManager:c.spineItemsManager,settings:e}),r.withLatestFrom(l),r.switchMap(([b,w])=>{const v=b.navigation.cfi||b.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return r.of(b).pipe(v?r.identity:Rt({navigationResolver:a,settings:e,spine:c,context:t}))}),Me({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),r.map(b=>b.navigation),r.share()),u=d.pipe(r.withLatestFrom(l),r.filter(([,b])=>b),r.switchMap(([b])=>{const w=this.locker.lock();return l.pipe(r.filter(v=>!v),r.first(),r.map(()=>({...b,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(b=>!b),r.first())),r.map(()=>({...this.navigationSubject.getValue(),animation:!1})),r.takeUntil(r.merge(u,d))))),g=r.merge(p,u).pipe(r.map(b=>({navigation:b})),Rt({navigationResolver:a,settings:e,context:t,spine:c}),r.map(b=>{const w={...b.navigation,meta:{triggeredBy:"restoration"}};return{...b,navigation:w}}),Ct({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Lt({spine:c}),Me({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),r.map(({navigation:b})=>b),r.share()),h=co(t,this.navigationSubject,c),m=r.merge(g,d,h),f=b=>b.pipe(r.tap(([w,v])=>{bo.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),S=b=>b.pipe(r.tap(([w,v])=>{const $=w.type==="scroll",P=w.meta.triggeredBy==="pagination",F=w.meta.triggeredBy==="restoration",N=T.isShallowEqual(v.position,w.position);if($&&!F||P||N)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 le=(n,e,t)=>{const i=t-n,o=t*(e*n)/(t||1);return Math.max(0,Math.min(i,o))},Ee=(n,e)=>(e||0)===0||(n||0)===0?1:Math.floor(Math.max(1,n/e)),Ce=(n,e,t)=>{const i=Ee(t,e),o=[...Array(i)].map((s,a)=>a*e);return n>=i*e?o[o.length-1]||0:o.find(s=>n<s+e)||0},At=(n,e,t)=>{const i=[...Array(t)].map((o,s)=>s*e);return n<=0||t===0?0:n>=t*e?t-1:i.findIndex(o=>n<o+e)??0},Io=({itemWidth:n,itemHeight:e,spineItemPosition:t})=>new C({x:Math.min(n,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),Dt=({itemHeight:n,itemWidth:e,isUsingVerticalWriting:t,pageWidth:i,pageHeight:o,pageTurnDirection:s,pageTurnMode:a})=>s==="vertical"&&a==="scrollable"?1:t||s==="vertical"?Ee(n,o):Ee(e,i),Ot=({itemWidth:n,itemHeight:e,position:t,isUsingVerticalWriting:i,pageWidth:o,pageHeight:s,pageTurnDirection:a,pageTurnMode:c,isRTL:l})=>{const u=Io({spineItemPosition:t,itemHeight:e,itemWidth:n}).x,p=Dt({isUsingVerticalWriting:i,itemHeight:e,itemWidth:n,pageWidth:o,pageHeight:s,pageTurnDirection:a,pageTurnMode:c});if(i)return At(t.y,s,p);const g=At(u,o,p);return l?p-1-g:g},wo=({pageIndex:n,itemLayout:e,context:t,isUsingVerticalWriting:i,viewport:o})=>{if(i){const a=le(o.pageSize.height,n,e.height);return new C({x:0,y:a})}const s=le(o.pageSize.width,n,e.width);return t.isRTL()?new C({x:e.width-s-o.pageSize.width,y:0}):new C({x:s,y:0})},Vt=({context:n,settings:e,viewport:t})=>{const i=(c,l,d)=>{let u;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?u=c.getBoundingClientRect().x:c&&(u=(c?jt(c,l):void 0)?.getBoundingClientRect().x||u);const p=d.layoutInfo?.width||0,g=t.pageSize.width;if(u!==void 0){const h=Ce(u,g,p);return new C({x:h,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:l})=>wo({context:n,isUsingVerticalWriting:!!l.isUsingVerticalWriting(),itemLayout:l.layoutInfo,pageIndex:c,viewport:t}),getSpineItemPageIndexFromPosition:c=>Ot({...c,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.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?Ot({isUsingVerticalWriting:!!d.isUsingVerticalWriting(),position:u,itemHeight:p,itemWidth:g,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.pageSize.height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,l)=>{const{width:d,height:u}=l.layoutInfo;return new C({x:Ce(c.x,t.pageSize.width,d),y:Ce(c.y,t.pageSize.height,u)})},getSpineItemPagePositionFromSpineItemPosition:(c,l,d)=>{const{width:u,height:p}=d.layoutInfo,g=t.pageSize.width,h=t.pageSize.height;if(!!d.isUsingVerticalWriting()){const S=le(h,l,p);return new ie({x:c.x,y:c.y-S})}const f=le(g,l,u);if(n.isRTL()){const S=u-(l+1)*g;return new ie({x:c.x-Math.max(0,S),y:c.y})}return new ie({x:c.x-f,y:c.y})}}},vo=({context:n,settings:e,viewport:t})=>{const i=Vt({context:n,settings:e,viewport:t});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 C({x:0,y:0})}};function Ut({position:n,isRTL:e,spineItemsManager:t,spine:i,viewportWidth:o}){const s=t.get(t.items.length-1),a=i.getSpineItemSpineLayoutInfo(s||0),c=a.bottom-1,l=Math.max(0,n.y),d=Math.min(l,c);if(e){const h=Math.min(o,n.x),m=Math.max(h,a.left);return new M({x:m,y:d})}const u=a.right-1,p=Math.max(0,n.x),g=Math.min(p,u);return new M({x:g,y:d})}const kt=({position:n,isRTL:e,pageSizeHeight:t,spineItemsManager:i,visibleAreaRectWidth:o,spine:s})=>{const a=Ut({position:n,isRTL:e,spineItemsManager:i,spine:s,viewportWidth:o}),c=i.get(i.items.length-1),l=s.getSpineItemSpineLayoutInfo(c),d=l.bottom-t,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:n,y:e},pageSizeWidth:t,visibleAreaRectWidth:i})=>{const s=n%i!==0?n-t:n;return new M({x:s,y:e})},Le=({viewportPosition:n,spineLocator:e,spineItemNavigationResolver:t,viewport:i})=>{const o=e.getSpineItemFromPosition(n);if(o){const s=e.getSpineItemPositionFromSpinePosition(n,o),a=t.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})},Po=({pageIndex:n,spineItemsManager:e,spineItemId:t,spineLocator:i,spineItemNavigationResolver:o,viewport:s})=>{const a=e.get(t);if(!a){const d=n*s.pageSize.width;return Le({viewportPosition:new M({x:d,y:0}),spineItemNavigationResolver:o,spineLocator:i,viewport:s})}const c=i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:n,spineItem:a}),l=i.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return _({position:l,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},To=(n,e)=>{if(e&&e instanceof HTMLIFrameElement){const t=e.contentDocument,i=n.trim();if(!t||i.length===0)return;if(i.startsWith("#")){const o=i.slice(1);return o.length===0?void 0:t.getElementById(o)}try{return t.querySelector(i)}catch{return}}},$o=({anchor:n,spineItem:e,spine:t})=>{const i=To(n,e.renderer.getDocumentFrame());return i?t.spineItemLocator.getSpineItemPositionFromNode(i,0,e)?.x??0:0},Mo=({anchor:n,spineItem:e,spineLocator:t,spine:i})=>{const o=$o({anchor:n,spineItem:e,spine:i});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:new C({x:o,y:0}),spineItem:e})},Fo=({anchor:n,spineItem:e,spineLocator:t,spine:i,pageSizeWidth:o,visibleAreaRectWidth:s})=>{const a=Mo({anchor:n,spineItem:e,spineLocator:t,spine:i});return _({position:a,pageSizeWidth:o,visibleAreaRectWidth:s})},Eo=({spine:n,spineItemsManager:e,spineLocator:t,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=Fo({anchor:c.hash,spineItem:u,spine:n,spineLocator:t,pageSizeWidth:s,visibleAreaRectWidth:a});return{position:_({position:p,pageSizeWidth:s,visibleAreaRectWidth:a}),spineItemId:d.id}}}return}catch(c){console.error(c);return}},Co=({spineItem:n,spineItemPosition:e,spineLocator:t,spineItemLocator:i,viewport:o})=>{const s=i.getSpineItemClosestPositionFromUnsafePosition(e,n),a=t.getSpinePositionFromSpineItemPosition({spineItemPosition:s,spineItem:n});return _({position:a,pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width})},Lo="spineNavigator",Ro=({context:n,spineItemsManager:e,locator:t,settings:i,spine:o,viewport:s})=>{const a=vo({context:n,settings:i,viewport:s});return{getNavigationForUrl:h=>Eo({context:n,spineItemsManager:e,spineLocator:t,url:h,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width,spine:o}),getNavigationForSpineItemPage:h=>Po({...h,spineItemsManager:e,spineItemNavigationResolver:a,spineLocator:t,viewport:s}),getNavigationFromSpineItemPosition:h=>Co({...h,spineItemLocator:t.spineItemLocator,spineLocator:t,viewport:s}),getNavigationForCfi:h=>{const m=e.getSpineItemFromCfi(h),{node:f,offset:S=0}=Pe({cfi:h,spineItemsManager:e});if(!m){E.warn(Lo,`unable to detect item id from cfi ${h}`);return}const b=f?a.getNavigationFromNode(m,f,S):new C({x:0,y:0}),w=t.getSpinePositionFromSpineItemPosition({spineItemPosition:b,spineItem:m});return _({position:w,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},getNavigationForLastPage:h=>{const m=a.getNavigationForLastPage(h),f=t.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=t.getSpinePositionFromSpineItem(m);return _({position:f,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})}return new M({x:0,y:0})},getNavigationForPosition:h=>Le({viewportPosition:h,spineItemNavigationResolver:a,spineLocator:t,viewport:s}),getMostPredominantNavigationForPosition:h=>{const m=i.values.computedPageTurnDirection,f=.5,S=m==="horizontal"?h.x+s.absoluteViewport.width*f:0,b=m==="horizontal"?0:h.y+s.absoluteViewport.height*f,w=kt({position:new M({x:S,y:b}),isRTL:n.isRTL(),pageSizeHeight:s.pageSize.height,visibleAreaRectWidth:s.absoluteViewport.width,spineItemsManager:e,spine:o});return Le({spineItemNavigationResolver:a,spineLocator:t,viewportPosition:w,viewport:s})},fromUnboundSpinePosition:h=>kt({position:h,isRTL:n.isRTL(),pageSizeHeight:s.pageSize.height,visibleAreaRectWidth:s.absoluteViewport.width,spineItemsManager:e,spine:o}),fromOutOfBoundsSpinePosition:h=>Ut({position:h,isRTL:n.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}},No=({spineItemsManager:n,context:e,hookManager:t,spine:i,settings:o,viewport:s})=>{const a=new r.Subject,c=a.asObservable(),l=new Fe,d=Ro({context:e,settings:o,spineItemsManager:n,locator:i.locator,spine:i,viewport:s}),u=new Et(o,t,e,i,s),p=new vt(s,o,t,i,e),g=new Nt(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(b=>b)?"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=>{E.info("User navigation",S),a.next(S)},lock(){return l.lock()},navigationResolver:d,navigation$:g.navigation$}};class _t extends D{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class zt extends R{constructor(e,t,i,o,s){super(),this.context=e,this.pagination=t,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,b=p.endCfi,{beginPageIndex:w=0}=l({spineItem:m,position:u})??{},{endPageIndex:v=0}=l({spineItem:f,position:u})??{},$=S===void 0||se(S)||p.beginSpineItemIndex!==g,P=p.endSpineItemIndex!==h||b===void 0||se(b),F=$?H(m.item):S,N=P?H(f.item):b,A=m.numberOfPages,x=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:N,endNumberOfPagesInSpineItem:x,endPageIndexInSpineItem:v,endSpineItemIndex:h,navigationId:d.id})}))})),c=a.pipe(G(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?re({spineItem:g.item,pageNode:m?.firstVisibleNode}):H(g.item),endCfi:f?.firstVisibleNode?re({spineItem:h.item,pageNode:f?.firstVisibleNode}):H(h.item)})}));r.merge(a,c).pipe(r.takeUntil(this.destroy$)).subscribe()}}const Ao=({manifest:n,spreadMode:e})=>n?.renditionFlow==="scrolled-continuous"?!1:e;class Wt extends R{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new r.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(r.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=T.shallowMergeIfDefined(this.inputSettings,e),i=this.getOutputSettings(t),o=!T.isShallowEqual(this.outputSettings,i);return{hasChanged:o,state:i,commit:()=>(this.inputSettings=t,this.outputSettings=i,o&&this.outputSettingsUpdateSubject.next(i),i)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(ye(e),r.distinctUntilChanged(T.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Do extends Wt{constructor(e,t){super(e),this.context=t,t.watch(["manifest","hasVerticalWriting"]).pipe(r.tap(()=>this.update(this.values)),r.takeUntil(this.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,i=this.context.value.hasVerticalWriting??!1,o={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0,computedSpreadMode:Ao({spreadMode:e.spreadMode,manifest:t})};return t?.renditionFlow==="scrolled-continuous"&&(o.computedPageTurnMode="scrollable"),o.computedPageTurnMode==="scrollable"&&(o.computedPageTurnDirection="vertical"),i&&o.computedPageTurnAnimation==="slide"&&(E.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 t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{spreadMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class Oo extends X{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 Vo extends R{constructor(e,t,i,o,s,a,c){super(),this.item=e,this.containerElement=t,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=Pt(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:b=f,height:w=S}=h??{},{width:v,height:$}=this.viewport.pageSize,P=this.validateDimension(b??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=Be(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(b=>(this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:m,item:this.item,minimumWidth:f}),{type:"end",data:b}))))}),r.share());this.didLayout$=l.pipe(r.filter(d=>d.type==="end"),r.map(d=>d.data),r.share())}validateDimension(e,t,i){if(e<=0)return i;const o=Math.max(e,i),a=Math.ceil(o/t)*t;return Math.max(a,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,i=e.height?parseFloat(e.height):0;return{width:t,height:i}}}class Re extends D{constructor(e,t,i,o,s,a,c){super({isLoaded:!1,isReady:!1,isDirty:!1,isError:!1,error:void 0}),this.item=e,this.parentElement=t,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=Uo(t,e,s),t.appendChild(this.containerElement);const l=this.settings.values.getRenderer?.(e);this.resourcesHandler=new ee(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 Oo(d),this._layout=new Vo(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 Dt({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 Uo=(n,e,t)=>{const i=n.ownerDocument.createElement("div");return i.setAttribute(`data-${Ke}`,""),i.classList.add("spineItem"),i.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),i.style.cssText=`
|
|
218
|
+
`,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(()=>{Ft.info("layout",e.values)}),r.share());const d=this.navigateSubject.pipe(r.tap(u=>{Ft.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 t=this.element$.getValue(),i=oo(e);t.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(),t=window.getComputedStyle(e),i=t.transform||t.webkitTransform;if(!i||i==="none")return new M({x:0,y:0});const o=new DOMMatrix(i);return ro(o)}}const so=()=>n=>n.pipe(r.map(({navigation:e,pagination:t,...i})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...i}))),ao=(n,e,t)=>n.bridgeEvent.pagination$.pipe(r.withLatestFrom(e),r.filter(([i,o])=>i.navigationId===o.id),r.switchMap(([i,o])=>(t.spineItemsManager.get(o.spineItem)?.isReady$.pipe(r.first())??r.of(!1)).pipe(r.filter(a=>a),r.map(()=>({pagination:i,navigation:o})))),so(),r.distinctUntilChanged((i,o)=>i.navigation.paginationBeginCfi===o.navigation.paginationBeginCfi),r.map(({navigation:i})=>({...i,meta:{triggeredBy:"pagination"}}))),co=({navigationResolver:n})=>e=>e.pipe(r.map(([t,i])=>{const o={type:"api",meta:{triggeredBy:"user"},id:Symbol(),animation:"turn",...t,position:t.position?n.fromOutOfBoundsSpinePosition(t.position):void 0};return{previousNavigation:i,navigation:o}})),lo=({navigationResolver:n})=>e=>e.pipe(r.map(t=>{if(t.navigation.cfi){const i=n.getNavigationForCfi(t.navigation.cfi);if(i)return{...t,navigation:{...t.navigation,position:i}}}return t})),uo=({navigation:n,previousNavigation:e,settings:t})=>n.directionFromLastNavigation?n.directionFromLastNavigation:n.url!==void 0||n.cfi!==void 0?"anchor":e.spineItem===void 0||n.spineItem||!n.position?"forward":t.values.computedPageTurnDirection==="vertical"?n.position.y>e.position.y||n.position.y===e.position.y&&e.directionFromLastNavigation!=="backward"?"forward":"backward":Math.abs(n.position.x)>Math.abs(e.position.x)||n.position.x===e.position.x&&e.directionFromLastNavigation!=="backward"?"forward":"backward",po=({context:n,settings:e})=>t=>t.pipe(r.map(({navigation:i,previousNavigation:o})=>{const s=uo({navigation:i,previousNavigation:o,settings:e}),a={...i,directionFromLastNavigation:s};return{previousNavigation:o,navigation:a,direction:s}})),ho=({spineItemsManager:n,navigationResolver:e,settings:t})=>i=>i.pipe(r.map(({navigation:o,...s})=>{const a=n.get(o.spineItem);if(o.position)return t.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=t.values.computedPageTurnMode==="scrollable"?new U({x:c.x+s.previousNavigation.position.x,y:c.y}):e.fromUnboundSpinePosition(c);return{navigation:{...o,position:l},...s}})),Lt=({settings:n,spineItemsManager:e,navigationResolver:t,spineLocator:i})=>o=>{const s=a=>{const{position:c,spineItem:l,cfi:d,directionFromLastNavigation:u}=a,{navigationSnapThreshold:p,computedPageTurnMode:g}=n.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:b,beginPageIndex:w}=i.getVisiblePagesFromViewportPosition({position:c,spineItem:S,threshold:p,restrictToScreen:!1})??{},v=(u==="forward"||u==="anchor"?b:w)??0,$=t.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}}))},Et=({spine:n})=>e=>e.pipe(r.switchMap(({navigation:t,...i})=>{const o=n.getSpineItemSpineLayoutInfo(t.spineItem),s=n.spineItemsManager.get(t.spineItem);return(s?.isReady$??r.of(!1)).pipe(r.first(),r.map(a=>({navigation:{...t,spineItemHeight:o?.height,spineItemWidth:o?.width,spineItemLeft:o.left,spineItemTop:o.top,spineItemIsUsingVerticalWriting:s?.isUsingVerticalWriting(),spineItemIsReady:a},...i})))})),Me=({settings:n,spineItemsManager:e,spineLocator:t,navigationResolver:i})=>o=>{const s=a=>{const{navigationSnapThreshold:c,computedPageTurnMode:l}=n.values,d=e.get(a.spineItem);if(!(!d||!a.position)){if(l==="controlled"){const{endPageIndex:u,beginPageIndex:p}=t.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=t.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 t.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:f,spineItem:d})}return t.getSpineItemPositionFromSpinePosition(a.position,d)}};return o.pipe(r.map(({navigation:a,...c})=>({navigation:{...a,positionInSpineItem:s(a)},...c})))},go=({navigationResolver:n})=>e=>e.pipe(r.map(t=>{if(t.navigation.url){const i=n.getNavigationForUrl(t.navigation.url);if(i)return{...t,navigation:{...t.navigation,position:i.position,spineItem:i.spineItemId}}}return t}));class Fe{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 mo=({spineLocator:n,navigation:e,navigationResolver:t,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=n.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=t.getNavigationForUrl(e.url);if(h)return h.position}const g=e.cfi??e.paginationBeginCfi;if(g!==void 0&&!se(g)&&(d||u||a&&!e.spineItemIsReady)){const h=t.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 t.getNavigationFromSpineItemPosition({spineItem:s,spineItemPosition:h})}if(e.positionInSpineItem&&e.spineItemHeight&&e.spineItemWidth){const h=n.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:e.spineItemWidth,itemHeight:e.spineItemHeight,isUsingVerticalWriting:!!e.spineItemIsUsingVerticalWriting,position:e.positionInSpineItem});return t.getNavigationForSpineItemPage({pageIndex:h,spineItemId:s})}return l?t.getNavigationForPosition(e.position):t.getNavigationForSpineIndexOrId(s)})):r.of(new M({x:0,y:0}))},fo=({navigation:n,spineLocator:e,spineItemsManager:t,settings:i,navigationResolver:o,spine:s})=>{const{spineItem:a}=n,c=t.get(a);if(!c)return new M({x:0,y:0});const{height:l,top:d}=s.getSpineItemSpineLayoutInfo(c),u=e.isPositionWithinSpineItem(n.position,c),p=n.positionInSpineItem??new L({y:0,x:0});if(i.values.computedPageTurnDirection==="vertical"){if(d===n.spineItemTop&&l===n.spineItemHeight&&u)return n.position;if(d===n.spineItemTop&&l===n.spineItemHeight&&!u)return o.getNavigationForSpineIndexOrId(c);if(d!==n.spineItemTop){const g=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(n.positionInSpineItem??new L({x:0,y:0}),c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:g,spineItem:c})}if(d===n.spineItemTop&&l!==n.spineItemHeight){const g=(n.spineItemHeight??p.y)-p.y,h=new L({y:n.directionFromLastNavigation==="backward"?l-g:p.y,x:n.position.x});if(u){const m=e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(h,c);return e.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:c})}if(!u){if(!(n.position.y<d)){const f=new L({y:l-g,x:n.position.x});return e.getSpinePositionFromSpineItemPosition({spineItemPosition:e.getSafeSpineItemPositionFromUnsafeSpineItemPosition(f,c),spineItem:c})}return o.getNavigationForSpineIndexOrId(c)}}}return n.position},So=({navigation:n,spineItemsManager:e,settings:t,spineLocator:i,navigationResolver:o,spine:s})=>t.values.computedPageTurnMode==="scrollable"?r.of(fo({navigation:n,spineLocator:i,navigationResolver:o,settings:t,spineItemsManager:e,spine:s})):mo({navigation:n,spineLocator:i,navigationResolver:o,spineItemsManager:e,spine:s}),Nt=({settings:n,navigationResolver:e,context:t,spine:i})=>o=>o.pipe(r.switchMap(s=>So({spineLocator:i.locator,navigation:s.navigation,navigationResolver:e,settings:n,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,spine:i}).pipe(r.map(a=>({...s,navigation:{...s.navigation,position:a}}))))),yo=C.namespace("navigation/InternalNavigator");class Rt extends N{constructor(e,t,i,o,s,a,c,l){super(),this.settings=e,this.context=t,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:b,id:w})=>({position:b,id:w})),r.distinctUntilChanged(({position:b,...w},{position:v,...$})=>T.isShallowEqual(w,$)&&T.isShallowEqual(b,v)),r.shareReplay(1)),this.locker=new Fe;const d=i.pipe(r.withLatestFrom(this.navigationSubject),co({navigationResolver:a}),go({navigationResolver:a}),lo({navigationResolver:a}),po({context:t,settings:e}),Lt({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Me({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Et({spine:c})).pipe(ho({navigationResolver:a,spineItemsManager:c.spineItemsManager,settings:e}),r.withLatestFrom(l),r.switchMap(([b,w])=>{const v=b.navigation.cfi||b.navigation.url||e.values.computedPageTurnMode==="scrollable"||w;return r.of(b).pipe(v?r.identity:Nt({navigationResolver:a,settings:e,spine:c,context:t}))}),Me({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),r.map(b=>b.navigation),r.share()),u=d.pipe(r.withLatestFrom(l),r.filter(([,b])=>b),r.switchMap(([b])=>{const w=this.locker.lock();return l.pipe(r.filter(v=>!v),r.first(),r.map(()=>({...b,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(b=>!b),r.first())),r.map(()=>({...this.navigationSubject.getValue(),animation:!1})),r.takeUntil(r.merge(u,d))))),g=r.merge(p,u).pipe(r.map(b=>({navigation:b})),Nt({navigationResolver:a,settings:e,context:t,spine:c}),r.map(b=>{const w={...b.navigation,meta:{triggeredBy:"restoration"}};return{...b,navigation:w}}),Lt({navigationResolver:a,settings:e,spineItemsManager:c.spineItemsManager,spineLocator:c.locator}),Et({spine:c}),Me({spineItemsManager:c.spineItemsManager,spineLocator:c.locator,settings:e,navigationResolver:a}),r.map(({navigation:b})=>b),r.share()),h=ao(t,this.navigationSubject,c),m=r.merge(g,d,h),f=b=>b.pipe(r.tap(([w,v])=>{yo.info(`navigation updated from ${w.meta.triggeredBy} of type ${w.type}`,{previousNavigation:v,currentNavigation:w}),this.navigationSubject.next(w)})),S=b=>b.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 le=(n,e,t)=>{const i=t-n,o=t*(e*n)/(t||1);return Math.max(0,Math.min(i,o))},Ce=(n,e)=>(e||0)===0||(n||0)===0?1:Math.floor(Math.max(1,n/e)),Le=(n,e,t)=>{const i=Ce(t,e),o=[...Array(i)].map((s,a)=>a*e);return n>=i*e?o[o.length-1]||0:o.find(s=>n<s+e)||0},At=(n,e,t)=>{const i=[...Array(t)].map((o,s)=>s*e);return n<=0||t===0?0:n>=t*e?t-1:i.findIndex(o=>n<o+e)??0},bo=({itemWidth:n,itemHeight:e,spineItemPosition:t})=>new L({x:Math.min(n,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),Ot=({itemHeight:n,itemWidth:e,isUsingVerticalWriting:t,pageWidth:i,pageHeight:o,pageTurnDirection:s,pageTurnMode:a})=>s==="vertical"&&a==="scrollable"?1:t||s==="vertical"?Ce(n,o):Ce(e,i),Dt=({itemWidth:n,itemHeight:e,position:t,isUsingVerticalWriting:i,pageWidth:o,pageHeight:s,pageTurnDirection:a,pageTurnMode:c,isRTL:l})=>{const u=bo({spineItemPosition:t,itemHeight:e,itemWidth:n}).x,p=Ot({isUsingVerticalWriting:i,itemHeight:e,itemWidth:n,pageWidth:o,pageHeight:s,pageTurnDirection:a,pageTurnMode:c});if(i)return At(t.y,s,p);const g=At(u,o,p);return l?p-1-g:g},Io=({pageIndex:n,itemLayout:e,context:t,isUsingVerticalWriting:i,viewport:o})=>{if(i){const a=le(o.pageSize.height,n,e.height);return new L({x:0,y:a})}const s=le(o.pageSize.width,n,e.width);return t.isRTL()?new L({x:e.width-s-o.pageSize.width,y:0}):new L({x:s,y:0})},Vt=({context:n,settings:e,viewport:t})=>{const i=(c,l,d)=>{let u;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?u=c.getBoundingClientRect().x:c&&(u=(c?jt(c,l):void 0)?.getBoundingClientRect().x||u);const p=d.layoutInfo?.width||0,g=t.pageSize.width;if(u!==void 0){const h=Le(u,g,p);return new L({x:h,y:0})}};return{getSpineItemPositionFromNode:i,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:l})=>Io({context:n,isUsingVerticalWriting:!!l.isUsingVerticalWriting(),itemLayout:l.layoutInfo,pageIndex:c,viewport:t}),getSpineItemPageIndexFromPosition:c=>Dt({...c,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.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?Dt({isUsingVerticalWriting:!!d.isUsingVerticalWriting(),position:u,itemHeight:p,itemWidth:g,isRTL:n.isRTL(),pageWidth:t.pageSize.width,pageHeight:t.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:Le(c.x,t.pageSize.width,d),y:Le(c.y,t.pageSize.height,u)})},getSpineItemPagePositionFromSpineItemPosition:(c,l,d)=>{const{width:u,height:p}=d.layoutInfo,g=t.pageSize.width,h=t.pageSize.height;if(!!d.isUsingVerticalWriting()){const S=le(h,l,p);return new ie({x:c.x,y:c.y-S})}const f=le(g,l,u);if(n.isRTL()){const S=u-(l+1)*g;return new ie({x:c.x-Math.max(0,S),y:c.y})}return new ie({x:c.x-f,y:c.y})}}},wo=({context:n,settings:e,viewport:t})=>{const i=Vt({context:n,settings:e,viewport:t});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 Ut({position:n,isRTL:e,spineItemsManager:t,spine:i,viewportWidth:o}){const s=t.get(t.items.length-1),a=i.getSpineItemSpineLayoutInfo(s||0),c=a.bottom-1,l=Math.max(0,n.y),d=Math.min(l,c);if(e){const h=Math.min(o,n.x),m=Math.max(h,a.left);return new M({x:m,y:d})}const u=a.right-1,p=Math.max(0,n.x),g=Math.min(p,u);return new M({x:g,y:d})}const kt=({position:n,isRTL:e,pageSizeHeight:t,spineItemsManager:i,visibleAreaRectWidth:o,spine:s})=>{const a=Ut({position:n,isRTL:e,spineItemsManager:i,spine:s,viewportWidth:o}),c=i.get(i.items.length-1),l=s.getSpineItemSpineLayoutInfo(c),d=l.bottom-t,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:n,y:e},pageSizeWidth:t,visibleAreaRectWidth:i})=>{const s=n%i!==0?n-t:n;return new M({x:s,y:e})},Ee=({viewportPosition:n,spineLocator:e,spineItemNavigationResolver:t,viewport:i})=>{const o=e.getSpineItemFromPosition(n);if(o){const s=e.getSpineItemPositionFromSpinePosition(n,o),a=t.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})},vo=({pageIndex:n,spineItemsManager:e,spineItemId:t,spineLocator:i,spineItemNavigationResolver:o,viewport:s})=>{const a=e.get(t);if(!a){const d=n*s.pageSize.width;return Ee({viewportPosition:new M({x:d,y:0}),spineItemNavigationResolver:o,spineLocator:i,viewport:s})}const c=i.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:n,spineItem:a}),l=i.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:a});return _({position:l,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},Po=(n,e)=>{if(e&&e instanceof HTMLIFrameElement){const t=e.contentDocument,i=n.trim();if(!t||i.length===0)return;if(i.startsWith("#")){const o=i.slice(1);return o.length===0?void 0:t.getElementById(o)}try{return t.querySelector(i)}catch{return}}},To=({anchor:n,spineItem:e,spine:t})=>{const i=Po(n,e.renderer.getDocumentFrame());return i?t.spineItemLocator.getSpineItemPositionFromNode(i,0,e)?.x??0:0},$o=({anchor:n,spineItem:e,spineLocator:t,spine:i})=>{const o=To({anchor:n,spineItem:e,spine:i});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:new L({x:o,y:0}),spineItem:e})},Mo=({anchor:n,spineItem:e,spineLocator:t,spine:i,pageSizeWidth:o,visibleAreaRectWidth:s})=>{const a=$o({anchor:n,spineItem:e,spineLocator:t,spine:i});return _({position:a,pageSizeWidth:o,visibleAreaRectWidth:s})},Fo=({spine:n,spineItemsManager:e,spineLocator:t,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=Mo({anchor:c.hash,spineItem:u,spine:n,spineLocator:t,pageSizeWidth:s,visibleAreaRectWidth:a});return{position:_({position:p,pageSizeWidth:s,visibleAreaRectWidth:a}),spineItemId:d.id}}}return}catch(c){console.error(c);return}},Co=({spineItem:n,spineItemPosition:e,spineLocator:t,spineItemLocator:i,viewport:o})=>{const s=i.getSpineItemClosestPositionFromUnsafePosition(e,n),a=t.getSpinePositionFromSpineItemPosition({spineItemPosition:s,spineItem:n});return _({position:a,pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width})},Lo="spineNavigator",Eo=({context:n,spineItemsManager:e,locator:t,settings:i,spine:o,viewport:s})=>{const a=wo({context:n,settings:i,viewport:s});return{getNavigationForUrl:h=>Fo({context:n,spineItemsManager:e,spineLocator:t,url:h,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width,spine:o}),getNavigationForSpineItemPage:h=>vo({...h,spineItemsManager:e,spineItemNavigationResolver:a,spineLocator:t,viewport:s}),getNavigationFromSpineItemPosition:h=>Co({...h,spineItemLocator:t.spineItemLocator,spineLocator:t,viewport:s}),getNavigationForCfi:h=>{const m=e.getSpineItemFromCfi(h),{node:f,offset:S=0}=Pe({cfi:h,spineItemsManager:e});if(!m){C.warn(Lo,`unable to detect item id from cfi ${h}`);return}const b=f?a.getNavigationFromNode(m,f,S):new L({x:0,y:0}),w=t.getSpinePositionFromSpineItemPosition({spineItemPosition:b,spineItem:m});return _({position:w,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})},getNavigationForLastPage:h=>{const m=a.getNavigationForLastPage(h),f=t.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=t.getSpinePositionFromSpineItem(m);return _({position:f,pageSizeWidth:s.pageSize.width,visibleAreaRectWidth:s.absoluteViewport.width})}return new M({x:0,y:0})},getNavigationForPosition:h=>Ee({viewportPosition:h,spineItemNavigationResolver:a,spineLocator:t,viewport:s}),getMostPredominantNavigationForPosition:h=>{const m=i.values.computedPageTurnDirection,f=.5,S=m==="horizontal"?h.x+s.absoluteViewport.width*f:0,b=m==="horizontal"?0:h.y+s.absoluteViewport.height*f,w=kt({position:new M({x:S,y:b}),isRTL:n.isRTL(),pageSizeHeight:s.pageSize.height,visibleAreaRectWidth:s.absoluteViewport.width,spineItemsManager:e,spine:o});return Ee({spineItemNavigationResolver:a,spineLocator:t,viewportPosition:w,viewport:s})},fromUnboundSpinePosition:h=>kt({position:h,isRTL:n.isRTL(),pageSizeHeight:s.pageSize.height,visibleAreaRectWidth:s.absoluteViewport.width,spineItemsManager:e,spine:o}),fromOutOfBoundsSpinePosition:h=>Ut({position:h,isRTL:n.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}},No=({spineItemsManager:n,context:e,hookManager:t,spine:i,settings:o,viewport:s})=>{const a=new r.Subject,c=a.asObservable(),l=new Fe,d=Eo({context:e,settings:o,spineItemsManager:n,locator:i.locator,spine:i,viewport:s}),u=new Ct(o,t,e,i,s),p=new vt(s,o,t,i,e),g=new Rt(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(b=>b)?"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 _t extends O{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class zt extends N{constructor(e,t,i,o,s){super(),this.context=e,this.pagination=t,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,b=p.endCfi,{beginPageIndex:w=0}=l({spineItem:m,position:u})??{},{endPageIndex:v=0}=l({spineItem:f,position:u})??{},$=S===void 0||se(S)||p.beginSpineItemIndex!==g,P=p.endSpineItemIndex!==h||b===void 0||se(b),F=$?B(m.item):S,R=P?B(f.item):b,A=m.numberOfPages,x=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:A,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:R,endNumberOfPagesInSpineItem:x,endPageIndexInSpineItem:v,endSpineItemIndex:h,navigationId:d.id})}))})),c=a.pipe(X(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?re({spineItem:g.item,pageNode:m?.firstVisibleNode}):B(g.item),endCfi:f?.firstVisibleNode?re({spineItem:h.item,pageNode:f?.firstVisibleNode}):B(h.item)})}));r.merge(a,c).pipe(r.takeUntil(this.destroy$)).subscribe()}}const Ro=({manifest:n,spreadMode:e})=>n?.renditionFlow==="scrolled-continuous"?!1:e;class Wt extends N{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new r.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(r.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=T.shallowMergeIfDefined(this.inputSettings,e),i=this.getOutputSettings(t),o=!T.isShallowEqual(this.outputSettings,i);return{hasChanged:o,state:i,commit:()=>(this.inputSettings=t,this.outputSettings=i,o&&this.outputSettingsUpdateSubject.next(i),i)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(ye(e),r.distinctUntilChanged(T.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Ao extends Wt{constructor(e,t){super(e),this.context=t,t.watch(["manifest","hasVerticalWriting"]).pipe(r.tap(()=>this.update(this.values)),r.takeUntil(this.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,i=this.context.value.hasVerticalWriting??!1,o={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0,computedSpreadMode:Ro({spreadMode:e.spreadMode,manifest:t})};return t?.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 t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{spreadMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class Oo extends G{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 Do extends N{constructor(e,t,i,o,s,a,c){super(),this.item=e,this.containerElement=t,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=Pt(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:b=f,height:w=S}=h??{},{width:v,height:$}=this.viewport.pageSize,P=this.validateDimension(b??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=He(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(b=>(this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:m,item:this.item,minimumWidth:f}),{type:"end",data:b}))))}),r.share());this.didLayout$=l.pipe(r.filter(d=>d.type==="end"),r.map(d=>d.data),r.share())}validateDimension(e,t,i){if(e<=0)return i;const o=Math.max(e,i),a=Math.ceil(o/t)*t;return Math.max(a,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,i=e.height?parseFloat(e.height):0;return{width:t,height:i}}}class Ne extends O{constructor(e,t,i,o,s,a,c){super({isLoaded:!1,isReady:!1,isDirty:!1,isError:!1,error:void 0}),this.item=e,this.parentElement=t,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=Vo(t,e,s),t.appendChild(this.containerElement);const l=this.settings.values.getRenderer?.(e);this.resourcesHandler=new ee(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 Oo(d),this._layout=new Do(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 Ot({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 Vo=(n,e,t)=>{const i=n.ownerDocument.createElement("div");return i.setAttribute(`data-${Ke}`,""),i.classList.add("spineItem"),i.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),i.style.cssText=`
|
|
218
219
|
position: absolute;
|
|
219
220
|
overflow: hidden;
|
|
220
|
-
`,i.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:i}),i};class ko extends R{constructor(e,t,i,o,s){super(),this.context=e,this.spineItemsManager=t,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,r.animationFrameScheduler),G(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?t.items.length-1:h+p,S=Array.from({length:f-m+1},(w,v)=>m+v),b=[...u,...S];t.items.forEach((w,v)=>{b.includes(v)?w.load():w.unload()})})).pipe(r.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(o=>typeof o=="number"?o:o.index),i=o=>{const s=this.forcedOpenSubject.value;t.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 Ht=(n,e,t)=>{const i=(t.width-e.width)/2,o=(t.height-e.height)/2;return new U({x:n.x-i,y:n.y-o})};class J extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const o=e;return new J(o.x,o.y,t.width,t.height)}const i=e;return new J(i.x,i.y,i.width,i.height)}}class _o{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class zo{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const Wo=({pageIndex:n,spineItemOrId:e,spineItemsManager:t})=>{const i=t.items,o=t.get(e);if(!o)return;const{currentAbsolutePage:s}=i.reduce((a,c)=>{if(a.found)return a;const l=c.numberOfPages;return o===c&&n<=l-1?{currentAbsolutePage:a.currentAbsolutePage+n,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+l}},{currentAbsolutePage:0,found:!1});return s},Ho=({itemHeight:n,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:i,threshold:o})=>{const s=t/e,a=i/n;return o.type==="percentage"?s>=o.value&&a>=o.value:t>=o.value&&i>=o.value},Bo=({visibleWidthOfItem:n,visibleHeightOfItem:e,threshold:t,viewportPosition:i})=>{const o=n/i.width,s=e/i.height;return t.type==="percentage"?s>=t.value&&o>=t.value:e>=t.value&&n>=t.value},Bt=({itemPosition:{bottom:n,left:e,right:t,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(t,u)-Math.max(e,d)),m=Math.max(0,Math.min(n,g)-Math.max(i,p));if(h<=0||m<=0)return{visible:!1};const S=Bo({threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h,viewportPosition:c});return l?{visible:S}:{visible:Ho({itemHeight:s,itemWidth:o,threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h})||S}},Ne=({position:n,spineItemsManager:e,spineLayout:t})=>{const i=e.items.find(o=>{const{left:s,right:a,bottom:c,top:l}=t.getSpineItemSpineLayoutInfo(o),d=n.x>=s&&n.x<a,u=n.y>=l&&n.y<c;return d&&u});return n.x===0&&!i?e.items[0]:i},Ae=({spineItemPosition:n,itemLayout:{left:e,top:t}})=>new M({x:e+n.x,y:t+n.y}),xo=({position:n,threshold:e,restrictToScreen:t,spineItemsManager:i,spineLayout:o,useAbsoluteViewport:s=!0,viewport:a})=>{const c=Ne({position:n,spineItemsManager:i,spineLayout:o})||i.get(0),l=i.items.reduce((h,m)=>{const f=o.getSpineItemSpineLayoutInfo(m),S=s?a.absoluteViewport:a.relativeViewport,b=Ht(n,a.absoluteViewport,S),w=J.from(b,S),{visible:v}=Bt({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:t});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}},Yo=({spineItemsManager:n,context:e,spineItemLocator:t,settings:i,spineLayout:o,viewport:s})=>{const a=(m,f)=>{const{left:S,top:b}=o.getSpineItemSpineLayoutInfo(f);return new C({x:Math.max(m.x-S,0),y:Math.max(m.y-b,0)})},c=m=>Ae({spineItemPosition:new C({x:0,y:0}),itemLayout:o.getSpineItemSpineLayoutInfo(m)}),l=m=>n.items.find(f=>f.renderer.getDocumentFrame()===m),d=(m,f,S)=>{if(typeof S=="number"){const b=n.get(S);return b?t.getSpineItemPageIndexFromNode(m,f||0,b):void 0}return t.getSpineItemPageIndexFromNode(m,f||0,S)},u=({position:m,threshold:f,spineItem:S,restrictToScreen:b,useAbsoluteViewport:w=!0,viewport:v})=>{const $=S.numberOfPages,F=Array.from(Array($)).map((x,Y)=>{const De=t.getSpineItemPositionFromPageIndex({pageIndex:Y,spineItem:S}),q=Ae({spineItemPosition:De,itemLayout:o.getSpineItemSpineLayoutInfo(S)});return{index:Y,absolutePosition:{width:v.pageSize.width,height:v.pageSize.height,left:q.x,top:q.y,bottom:q.y+v.pageSize.height,right:q.x+v.pageSize.width}}}).reduce((x,{absolutePosition:Y,index:De})=>{const q=w?v.absoluteViewport:v.relativeViewport,Ko=Ht(m,v.absoluteViewport,q),Qo=J.from(Ko,q),{visible:jo}=Bt({viewportPosition:Qo,restrictToScreen:b,threshold:f,itemPosition:Y});return jo?[...x,De]:x},[]),N=F[0],A=F[F.length-1]??N;if(!(N===void 0||A===void 0))return{beginPageIndex:N,endPageIndex:A}};return{getSpinePositionFromSpineItemPosition:({spineItem:m,spineItemPosition:f})=>{const S=o.getSpineItemSpineLayoutInfo(m);return Ae({itemLayout:S,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:m=>Wo({...m,spineItemsManager:n}),getSpineItemPagePositionFromSpinePosition:m=>{const f=Ne({position:m,spineItemsManager:n,spineLayout:o});if(!f)return;const S=a(m,f),b=t.getSpineItemPageIndexFromPosition({itemWidth:f.layoutInfo.width,itemHeight:f.layoutInfo.height,position:S,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(S,b,f);return{spineItem:f,spineItemPageIndex:b,spineItemPagePosition:w,pageSize:s.value.pageSize}},getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:m=>Ne({position:m,spineItemsManager:n,spineLayout:o}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:d,getVisibleSpineItemsFromPosition:m=>xo({spineItemsManager:n,spineLayout:o,viewport:s,...m}),getVisiblePagesFromViewportPosition:m=>u({...m,viewport:s}),isPositionWithinSpineItem:(m,f)=>{const{bottom:S,left:b,right:w,top:v}=o.getSpineItemSpineLayoutInfo(f);return m.x>=b&&m.x<=w&&m.y<=S&&m.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(m,f)=>{const{height:S,width:b}=o.getSpineItemSpineLayoutInfo(f);return new C({x:Math.min(Math.max(0,m.x),b),y:Math.min(Math.max(0,m.y),S)})}}};class xt extends R{constructor(e){super(),this.spineItemsManager=e,this.states$=this.spineItemsManager.items$.pipe(r.switchMap(t=>r.merge(...t.map(i=>i.pipe(r.map(o=>({item:i,...o})),r.distinctUntilChanged(T.isShallowEqual))))),r.share()),this.itemResize$=this.spineItemsManager.items$.pipe(r.switchMap(t=>{const i=t.map(o=>j(o.element).pipe(r.map(s=>({entries:s,item:o}))));return r.merge(...i)}),r.share()),this.itemLoad$=this.spineItemsManager.items$.pipe(r.switchMap(t=>r.merge(...t.map(i=>i.loaded$.pipe(r.map(()=>i))))),r.share()),this.itemUnload$=this.spineItemsManager.items$.pipe(r.switchMap(t=>r.merge(...t.map(i=>i.unloaded$.pipe(r.map(()=>i))))),r.share())}}class qo extends R{constructor(e,t,i,o,s){super(),this.spineItemsManager=e,this.spineItemsObserver=t,this.context=i,this.settings=o,this.viewport=s,this.externalLayoutTrigger=new r.Subject,this.spineItemsRelativeLayouts=[];const a=r.merge(t.itemLoad$,t.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(),b=this.getSpreadPosition(h,S),{edgeX:w,edgeY:v}=this.getStartEdges(f,h,p,g,s.absoluteViewport.height);return d.layout({spreadPosition:b,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 t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new oe({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,t)=>e+t.numberOfPages,0)}destroy(){super.destroy(),this.externalLayoutTrigger.complete()}getSpreadPosition(e,t){return this.settings.values.computedSpreadMode?e?t?"right":"left":t?"left":"right":"none"}getStartEdges(e,t,i,o,s){return e?{edgeX:t?0:i,edgeY:t?o:o-s}:{edgeX:i,edgeY:0}}createSpineItemLayout(e,t,i,o,s,a,c){if(e){const d=s+i,u=a+o;return new oe({left:i,right:d,top:o,bottom:u,height:a,width:s,x:i,y:o})}const l=t?c-i-s:i;return new oe({right:t?c-i:i+s,left:l,x:l,top:o,bottom:a,height:a,width:s,y:o})}}class Yt extends R{constructor(e,t,i,o,s,a,c){super(),this.context=e,this.pagination=t,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 xt(i),this.spineLayout=new qo(i,this.spineItemsObserver,e,s,c),this.locator=Yo({context:e,spineItemsManager:i,spineItemLocator:o,settings:s,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new ko(this.context,i,this.locator,s,this.spineLayout),this.pages=new B(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const l=e.watch("rootElement").pipe(I.filter(O),I.tap(u=>{const p=u.ownerDocument.createElement("div");p.style.cssText=`
|
|
221
|
+
`,i.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:i}),i};class Uo extends N{constructor(e,t,i,o,s){super(),this.context=e,this.spineItemsManager=t,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),X(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?t.items.length-1:h+p,S=Array.from({length:f-m+1},(w,v)=>m+v),b=[...u,...S];t.items.forEach((w,v)=>{b.includes(v)?w.load():w.unload()})})).pipe(r.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(o=>typeof o=="number"?o:o.index),i=o=>{const s=this.forcedOpenSubject.value;t.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 Bt=(n,e,t)=>{const i=(t.width-e.width)/2,o=(t.height-e.height)/2;return new U({x:n.x-i,y:n.y-o})};class J extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const o=e;return new J(o.x,o.y,t.width,t.height)}const i=e;return new J(i.x,i.y,i.width,i.height)}}class ko{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class _o{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const zo=({pageIndex:n,spineItemOrId:e,spineItemsManager:t})=>{const i=t.items,o=t.get(e);if(!o)return;const{currentAbsolutePage:s}=i.reduce((a,c)=>{if(a.found)return a;const l=c.numberOfPages;return o===c&&n<=l-1?{currentAbsolutePage:a.currentAbsolutePage+n,found:!0}:{...a,currentAbsolutePage:a.currentAbsolutePage+l}},{currentAbsolutePage:0,found:!1});return s},Wo=({itemHeight:n,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:i,threshold:o})=>{const s=t/e,a=i/n;return o.type==="percentage"?s>=o.value&&a>=o.value:t>=o.value&&i>=o.value},Bo=({visibleWidthOfItem:n,visibleHeightOfItem:e,threshold:t,viewportPosition:i})=>{const o=n/i.width,s=e/i.height;return t.type==="percentage"?s>=t.value&&o>=t.value:e>=t.value&&n>=t.value},Ht=({itemPosition:{bottom:n,left:e,right:t,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(t,u)-Math.max(e,d)),m=Math.max(0,Math.min(n,g)-Math.max(i,p));if(h<=0||m<=0)return{visible:!1};const S=Bo({threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h,viewportPosition:c});return l?{visible:S}:{visible:Wo({itemHeight:s,itemWidth:o,threshold:a,visibleHeightOfItem:m,visibleWidthOfItem:h})||S}},Re=({position:n,spineItemsManager:e,spineLayout:t})=>{const i=e.items.find(o=>{const{left:s,right:a,bottom:c,top:l}=t.getSpineItemSpineLayoutInfo(o),d=n.x>=s&&n.x<a,u=n.y>=l&&n.y<c;return d&&u});return n.x===0&&!i?e.items[0]:i},Ae=({spineItemPosition:n,itemLayout:{left:e,top:t}})=>new M({x:e+n.x,y:t+n.y}),Ho=({position:n,threshold:e,restrictToScreen:t,spineItemsManager:i,spineLayout:o,useAbsoluteViewport:s=!0,viewport:a})=>{const c=Re({position:n,spineItemsManager:i,spineLayout:o})||i.get(0),l=i.items.reduce((h,m)=>{const f=o.getSpineItemSpineLayoutInfo(m),S=s?a.absoluteViewport:a.relativeViewport,b=Bt(n,a.absoluteViewport,S),w=J.from(b,S),{visible:v}=Ht({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:t});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}},xo=({spineItemsManager:n,context:e,spineItemLocator:t,settings:i,spineLayout:o,viewport:s})=>{const a=(m,f)=>{const{left:S,top:b}=o.getSpineItemSpineLayoutInfo(f);return new L({x:Math.max(m.x-S,0),y:Math.max(m.y-b,0)})},c=m=>Ae({spineItemPosition:new L({x:0,y:0}),itemLayout:o.getSpineItemSpineLayoutInfo(m)}),l=m=>n.items.find(f=>f.renderer.getDocumentFrame()===m),d=(m,f,S)=>{if(typeof S=="number"){const b=n.get(S);return b?t.getSpineItemPageIndexFromNode(m,f||0,b):void 0}return t.getSpineItemPageIndexFromNode(m,f||0,S)},u=({position:m,threshold:f,spineItem:S,restrictToScreen:b,useAbsoluteViewport:w=!0,viewport:v})=>{const $=S.numberOfPages,F=Array.from(Array($)).map((x,Y)=>{const Oe=t.getSpineItemPositionFromPageIndex({pageIndex:Y,spineItem:S}),q=Ae({spineItemPosition:Oe,itemLayout:o.getSpineItemSpineLayoutInfo(S)});return{index:Y,absolutePosition:{width:v.pageSize.width,height:v.pageSize.height,left:q.x,top:q.y,bottom:q.y+v.pageSize.height,right:q.x+v.pageSize.width}}}).reduce((x,{absolutePosition:Y,index:Oe})=>{const q=w?v.absoluteViewport:v.relativeViewport,Jo=Bt(m,v.absoluteViewport,q),Ko=J.from(Jo,q),{visible:Qo}=Ht({viewportPosition:Ko,restrictToScreen:b,threshold:f,itemPosition:Y});return Qo?[...x,Oe]:x},[]),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 Ae({itemLayout:S,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:m=>zo({...m,spineItemsManager:n}),getSpineItemPagePositionFromSpinePosition:m=>{const f=Re({position:m,spineItemsManager:n,spineLayout:o});if(!f)return;const S=a(m,f),b=t.getSpineItemPageIndexFromPosition({itemWidth:f.layoutInfo.width,itemHeight:f.layoutInfo.height,position:S,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(S,b,f);return{spineItem:f,spineItemPageIndex:b,spineItemPagePosition:w,pageSize:s.value.pageSize}},getSpinePositionFromSpineItem:c,getSpineItemPositionFromSpinePosition:a,getSpineItemFromPosition:m=>Re({position:m,spineItemsManager:n,spineLayout:o}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:d,getVisibleSpineItemsFromPosition:m=>Ho({spineItemsManager:n,spineLayout:o,viewport:s,...m}),getVisiblePagesFromViewportPosition:m=>u({...m,viewport:s}),isPositionWithinSpineItem:(m,f)=>{const{bottom:S,left:b,right:w,top:v}=o.getSpineItemSpineLayoutInfo(f);return m.x>=b&&m.x<=w&&m.y<=S&&m.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(m,f)=>{const{height:S,width:b}=o.getSpineItemSpineLayoutInfo(f);return new L({x:Math.min(Math.max(0,m.x),b),y:Math.min(Math.max(0,m.y),S)})}}};class xt extends N{constructor(e){super(),this.spineItemsManager=e,this.states$=this.spineItemsManager.items$.pipe(r.switchMap(t=>r.merge(...t.map(i=>i.pipe(r.map(o=>({item:i,...o})),r.distinctUntilChanged(T.isShallowEqual))))),r.share()),this.itemResize$=this.spineItemsManager.items$.pipe(r.switchMap(t=>{const i=t.map(o=>j(o.element).pipe(r.map(s=>({entries:s,item:o}))));return r.merge(...i)}),r.share()),this.itemLoad$=this.spineItemsManager.items$.pipe(r.switchMap(t=>r.merge(...t.map(i=>i.loaded$.pipe(r.map(()=>i))))),r.share()),this.itemUnload$=this.spineItemsManager.items$.pipe(r.switchMap(t=>r.merge(...t.map(i=>i.unloaded$.pipe(r.map(()=>i))))),r.share())}}class Yo extends N{constructor(e,t,i,o,s){super(),this.spineItemsManager=e,this.spineItemsObserver=t,this.context=i,this.settings=o,this.viewport=s,this.externalLayoutTrigger=new r.Subject,this.spineItemsRelativeLayouts=[];const a=r.merge(t.itemLoad$,t.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(),b=this.getSpreadPosition(h,S),{edgeX:w,edgeY:v}=this.getStartEdges(f,h,p,g,s.absoluteViewport.height);return d.layout({spreadPosition:b,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 t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new oe({left:0,right:0,top:0,bottom:0,width:0,height:0,x:0,y:0})}get numberOfPages(){return this.spineItemsManager.items.reduce((e,t)=>e+t.numberOfPages,0)}destroy(){super.destroy(),this.externalLayoutTrigger.complete()}getSpreadPosition(e,t){return this.settings.values.computedSpreadMode?e?t?"right":"left":t?"left":"right":"none"}getStartEdges(e,t,i,o,s){return e?{edgeX:t?0:i,edgeY:t?o:o-s}:{edgeX:i,edgeY:0}}createSpineItemLayout(e,t,i,o,s,a,c){if(e){const d=s+i,u=a+o;return new oe({left:i,right:d,top:o,bottom:u,height:a,width:s,x:i,y:o})}const l=t?c-i-s:i;return new oe({right:t?c-i:i+s,left:l,x:l,top:o,bottom:a,height:a,width:s,y:o})}}class Yt extends N{constructor(e,t,i,o,s,a,c){super(),this.context=e,this.pagination=t,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 xt(i),this.spineLayout=new Yo(i,this.spineItemsObserver,e,s,c),this.locator=xo({context:e,spineItemsManager:i,spineItemLocator:o,settings:s,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new Uo(this.context,i,this.locator,s,this.spineLayout),this.pages=new H(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=`
|
|
221
222
|
height: 100%;
|
|
222
223
|
position: relative;
|
|
223
|
-
`,p.className=`${
|
|
224
|
+
`,p.className=`${E}-spine`,this.elementSubject.next(p)})),d=r.combineLatest([this.context.manifest$,this.element$]).pipe(I.tap(([u,p])=>{if(!p)return;this.spineItemsManager.destroyItems();const g=u.spineItems.map((h,m)=>new Ne(h,p,this.context,this.settings,this.hookManager,m,this.viewport));this.spineItemsManager.addMany(g)}));r.merge(d,l).pipe(I.takeUntil(this.destroy$)).subscribe()}get element(){return this.elementSubject.getValue()}layout(){this.spineLayout.layout()}getSpineItemSpineLayoutInfo(e){return this.spineLayout.getSpineItemSpineLayoutInfo(e)}get layout$(){return this.pages.layout$}destroy(){super.destroy(),this.pages.destroy(),this.spineItemsLoader.destroy(),this.elementSubject.getValue()?.remove(),this.elementSubject.complete()}}class qt extends N{constructor(e,t){super(),this.context=e,this.settings=t,this.orderedSpineItemsSubject=new r.BehaviorSubject([]),this.items$=this.orderedSpineItemsSubject.asObservable()}get(e){return typeof e=="number"?this.orderedSpineItemsSubject.value[e]:typeof e=="string"?this.orderedSpineItemsSubject.value.find(({item:t})=>t.id===e):e}comparePositionOf(e,t){const i=this.getSpineItemIndex(e)??0,o=this.getSpineItemIndex(t)??0;return i>o?"after":i===o?"same":"before"}getSpineItemIndex(e){const t=e instanceof Ne?e:this.get(e);if(!t)return;const i=this.orderedSpineItemsSubject.value.indexOf(t);return i<0?void 0:i}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}getSpineItemFromCfi(e){const{itemIndex:t}=ae(e);if(t!==void 0)return this.get(t)}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){this.orderedSpineItemsSubject.value.forEach(e=>{e.destroy()})}}class Xt extends O{constructor(e,t){const i=document.createElement("div");i.setAttribute(`data-${Ze}`,""),super({element:i,pageSize:{width:1,height:1},width:1,height:1}),this.context=e,this.settingsManager=t;const o=this.settingsManager.watch(["computedSpreadMode"]).pipe(r.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize(this.value)})})),s=this.context.watch("rootElement").pipe(r.tap(()=>{this.layout()}));r.merge(o,s).pipe(r.takeUntil(this.destroy$)).subscribe()}calculatePageSize(e){const{computedSpreadMode:t}=this.settingsManager.values;return{width:t?e.width/2:e.width,height:e.height}}layout(){const e={width:this.value.element.clientWidth,height:this.value.element.clientHeight};this.mergeCompare({pageSize:this.calculatePageSize(e),...e})}get absoluteViewport(){return new ko({width:this.value.width,height:this.value.height})}get pageSize(){return this.value.pageSize}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,t=this.scaleFactor;return new _o({width:e.width/t,height:e.height/t})}}const Gt=`${Xe}-core`,qo=n=>{const e=crypto.randomUUID(),t=new r.Subject,i=new r.Subject,o=new Mt,s=new Tt,a=new Ao(n,s),c=new $t(s,a),l=new qt(s,a),d=new Xt(s,a),u=Vt({context:s,settings:a,viewport:d}),p=new _t(s,l),g=new Yt(s,p,l,u,a,o,d),h=No({context:s,spineItemsManager:l,hookManager:o,spine:g,settings:a,viewport:d}),m=new zt(s,p,l,g,u);h.navigationState$.subscribe(s.bridgeEvent.viewportStateSubject),h.navigation$.subscribe(s.bridgeEvent.navigationSubject),h.locker.isLocked$.subscribe(s.bridgeEvent.navigationIsLockedSubject),p.subscribe(s.bridgeEvent.paginationSubject);const f=()=>{t.next()},S=P=>{const{containerElement:F,manifest:R}=P;if(s.manifest){C.warn("loading a new book is not supported yet");return}C.log("load",{options:P});const A=Xo(F,e);s.update({manifest:R,rootElement:A}),f()},b=a.watch(["computedSpreadMode"]).pipe(I.skip(1),I.tap(f)),w=t.pipe(I.tap(()=>{const P=s.value.rootElement;P&&(P.style.setProperty("overflow","hidden"),d.layout(),g.layout())}),I.takeUntil(i)),v=r.merge(w,b).subscribe();ge(document,Gt,io);const $=()=>{me(document,Gt),v.unsubscribe(),l.destroy(),m.destroy(),a.destroy(),p.destroy(),s.destroy(),h.destroy(),g.destroy(),c.destroy(),i.next(),i.complete(),d.destroy()};return{id:e,context:s,spine:g,hookManager:o,cfi:{generateCfiFromRange:ct,parseCfi:ae,generateCfiForSpineItemPage:re,resolveCfi:P=>Pe({...P,spineItemsManager:l})},navigation:h,spineItemsObserver:g.spineItemsObserver,spineItemsManager:l,layout:f,load:S,destroy:$,pagination:{get state(){return p.value},get state$(){return p}},settings:a,renderHeadless:P=>l.get(P)?.renderer.renderHeadless()??r.of(void 0),viewport:d,viewportState$:s.bridgeEvent.viewportState$,viewportFree$:s.bridgeEvent.viewportFree$,state$:s.manifest$.pipe(I.map(P=>P?"ready":"idle")),features:c,$:{destroy$:i}}},Xo=(n,e)=>(n.style.cssText=`
|
|
224
225
|
${n.style.cssText}
|
|
225
226
|
background-color: white;
|
|
226
227
|
position: relative;
|
|
227
|
-
`,n.classList.add(`${
|
|
228
|
+
`,n.classList.add(`${E}-reader`),n.setAttribute(Ge,e),n.setAttribute("data-prose-reader-container",e),n),Go=qi(fn(Zi(mn(an(Wi(Gi(to(si(et(Gn(cn(dn(St(ot(Xi(qo)))))))))))))))),Zo=n=>e=>n(e);Object.defineProperty(y,"isShallowEqual",{enumerable:!0,get:()=>T.isShallowEqual}),y.AbstractSpinePosition=ve,y.Context=Tt,y.ControlledNavigationController=Ct,y.DestroyableClass=N,y.DocumentRenderer=G,y.Features=$t,y.HTML_ATTRIBUTE_DATA_READER_ID=Ge,y.HTML_PREFIX=E,y.HTML_PREFIX_SCROLL_NAVIGATOR=Je,y.HTML_PREFIX_SPINE_ITEM=Ke,y.HTML_PREFIX_VIEWPORT=Ze,y.HTML_STYLE_PREFIX=Xe,y.HookManager=Mt,y.ITEM_EXTENSION_VALID_FOR_FRAME_SRC=qe,y.InternalNavigator=Rt,y.LayoutEntry=ne,y.Locker=Fe,y.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=$n,y.PROSE_READER_NAMESPACE=Pn,y.Pages=H,y.Pagination=_t,y.PaginationController=zt,y.ReactiveEntity=O,y.ResourceHandler=ee,y.ResourcesLocator=dt,y.ScrollNavigationController=vt,y.ScrollPosition=$e,y.SettingsManager=Wt,y.Spine=Yt,y.SpineItem=Ne,y.SpineItemPageLayout=tt,y.SpineItemPageSpineLayout=nt,y.SpineItemPosition=L,y.SpineItemSpineLayout=oe,y.SpineItemsManager=qt,y.SpineItemsObserver=xt,y.SpinePosition=M,y.UnboundScrollPosition=wt,y.UnboundSpineItemPagePosition=ie,y.UnboundSpinePosition=U,y.VIEWPORT_ADJUSTMENT_THROTTLE=Tn,y.Viewport=Xt,y.consolidate=ut,y.createReader=Go,y.deferIdle=Ie,y.deferNextResult=He,y.generateCfiForSpineItemPage=re,y.generateCfiFromRange=ct,y.generateRootCfi=B,y.getAttributeValueFromString=fe,y.getBase64FromBlob=pn,y.getFrameViewportInfo=K,y.getItemAnchor=ai,y.htmlEnhancer=et,y.idle=be,y.injectCSSToFrame=_e,y.isDefined=D,y.isHtmlElement=he,y.isHtmlTagElement=ke,y.isRootCfi=se,y.layoutEnhancer=ot,y.mapKeysTo=ye,y.observeIntersection=hn,y.observeMutation=we,y.observeResize=j,y.paginationEnhancer=St,y.parseCfi=ae,y.pick=Be,y.removeCSS=sn,y.resolveCfi=Pe,y.rootEnhancer=Zo,y.spinePositionToSpineItemSpineLayout=pt,y.upsertCSSToFrame=V,y.waitForFrameLoad=ze,y.waitForFrameReady=We,y.waitForSwitch=X,y.watchKeys=Q,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})}));
|
|
228
229
|
//# sourceMappingURL=index.umd.cjs.map
|