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