@prose-reader/core 1.323.0 → 1.325.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/context/Context.d.ts +5 -7
- package/dist/createReaderWithEnhancer.d.ts +9 -7
- package/dist/enhancers/html/renderer/HtmlRenderer.d.ts +1 -1
- package/dist/enhancers/html/renderer/reflowable/renderReflowable.d.ts +1 -1
- package/dist/enhancers/layout/spreadMode.d.ts +2 -2
- package/dist/enhancers/layout/updateSpreadMode.d.ts +1 -1
- package/dist/enhancers/navigation/index.d.ts +1 -1
- package/dist/enhancers/navigation/resolvers/getSpineItemPositionForLeftPage.d.ts +1 -1
- package/dist/enhancers/navigation/types.d.ts +0 -4
- package/dist/hooks/types.d.ts +2 -2
- package/dist/index.cjs +14 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +766 -857
- package/dist/index.js.map +1 -1
- package/dist/manifest/isFullyPrePaginated.d.ts +1 -1
- package/dist/navigation/controllers/ControlledNavigationController.d.ts +1 -0
- package/dist/navigation/controllers/ScrollNavigationController.d.ts +1 -0
- package/dist/pagination/index.d.ts +1 -1
- package/dist/reader.d.ts +9 -7
- package/dist/reader.test.d.ts +1 -0
- package/dist/settings/computeSpreadMode.d.ts +1 -1
- package/dist/spine/SpineItemsManager.d.ts +1 -0
- package/dist/spineItem/renderer/DefaultRenderer.d.ts +1 -1
- package/dist/spineItem/renderer/DocumentRenderer.d.ts +1 -1
- package/dist/tests/utils.d.ts +2 -0
- package/dist/utils/ReactiveEntity.d.ts +1 -0
- package/package.json +4 -4
- package/dist/enhancers/resources/index.d.ts +0 -2
- package/dist/enhancers/resources/indexedDB.d.ts +0 -6
- package/dist/enhancers/resources/resourcesManager.d.ts +0 -6
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@prose-reader/shared"),t=require("rxjs"),n=require("rxjs/operators"),r=require("@prose-reader/cfi");var i=e.Report.namespace(`@prose-reader/core`,void 0,{color:`#98cde7`}),a=[`pointercancel`,`pointerdown`,`pointerenter`,`pointerleave`,`pointermove`,`pointerout`,`pointerover`,`pointerup`];function o(e,t,n){let r=String(n);e.getAttribute(t)!==r&&e.setAttribute(t,r)}function s(e,t){e.hasAttribute(t)&&e.removeAttribute(t)}function c(e,t,n){e[t]!==n&&(e[t]=n)}function l(e,t,n){e.getPropertyValue(t)!==n&&e.setProperty(t,n)}function u(e,t){e.getPropertyValue(t)!==``&&e.removeProperty(t)}function d(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 f=(e,t)=>{let n=`createRange`in e?e:e.ownerDocument;if(!n)return;let r=`body`in e?p(e.body,t):p(e,t);if(r){let e,i=0,a=n.createRange();return Array.from(r.childNodes).some(r=>{a.selectNodeContents(r);let o=h(a.getClientRects(),t);if(o){e=a.cloneRange();let t=d(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}}},p=(e,t)=>{let n=m(e.getBoundingClientRect(),t),r;n!==`before`&&n!==`after`&&(r=e);for(let n of e.children){let e=p(n,t);if(e)return e}return r};function m(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 h(e,t){return Array.from(e).find(e=>{let n=m(e,t);return n!==`before`&&n!==`after`})}var g=(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){i.error(e)}return n}},_=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!!a.includes(e.type)},v=e=>{if(_(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},
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@prose-reader/shared"),t=require("rxjs"),n=require("rxjs/operators"),r=require("@prose-reader/cfi");var i=e.Report.namespace(`@prose-reader/core`,void 0,{color:`#98cde7`}),a=[`pointercancel`,`pointerdown`,`pointerenter`,`pointerleave`,`pointermove`,`pointerout`,`pointerover`,`pointerup`];function o(e,t,n){let r=String(n);e.getAttribute(t)!==r&&e.setAttribute(t,r)}function s(e,t){e.hasAttribute(t)&&e.removeAttribute(t)}function c(e,t,n){e[t]!==n&&(e[t]=n)}function l(e,t,n){e.getPropertyValue(t)!==n&&e.setProperty(t,n)}function u(e,t){e.getPropertyValue(t)!==``&&e.removeProperty(t)}function d(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 f=(e,t)=>{let n=`createRange`in e?e:e.ownerDocument;if(!n)return;let r=`body`in e?p(e.body,t):p(e,t);if(r){let e,i=0,a=n.createRange();return Array.from(r.childNodes).some(r=>{a.selectNodeContents(r);let o=h(a.getClientRects(),t);if(o){e=a.cloneRange();let t=d(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}}},p=(e,t)=>{let n=m(e.getBoundingClientRect(),t),r;n!==`before`&&n!==`after`&&(r=e);for(let n of e.children){let e=p(n,t);if(e)return e}return r};function m(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 h(e,t){return Array.from(e).find(e=>{let n=m(e,t);return n!==`before`&&n!==`after`})}var g=(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){i.error(e)}return n}},_=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!!a.includes(e.type)},v=e=>{if(_(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},y=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},b=()=>document.createElement(`div`),ee=e=>{let t=[`img`,`video`,`audio`,`source`,`link`,`script`].join(`,`);return Array.from(e?.querySelectorAll(t)||[])},x=e=>{if(ee(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 i.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 te(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 S(e){return te(e,[`nodeType`],[])&&e.nodeType===Node.ELEMENT_NODE}function ne(e,t){return S(e)&&e.tagName.toLowerCase()===t.toLowerCase()}function re(e){return te(e,[`startContainer`,`endContainer`,`startOffset`,`endOffset`,`collapsed`,`commonAncestorContainer`],[`setStart`,`setEnd`,`selectNodeContents`])}var C=(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),()=>{ie(e,t)}},ie=(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},ae=(e,t,n,r)=>{e?.contentDocument?.head&&C(e.contentDocument,t,n,r)},oe=(e,t)=>{e?.contentDocument&&ie(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}ae(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}},se=e=>e.pipe((0,t.switchMap)(e=>e.src===`about:blank`&&e.contentDocument?.readyState===`complete`&&e.contentDocument.body?(0,t.of)(e):(0,t.fromEvent)(e,`load`).pipe((0,t.take)(1),(0,t.map)(()=>e)))),ce=e=>e.pipe((0,t.switchMap)(e=>{let n=e?.contentDocument?.fonts.ready;return n?(0,t.from)(n).pipe((0,t.map)(()=>e)):(0,t.of)(e)})),le=e=>t=>{let n=e(t),r=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting?s(e.target,`tab-index`):o(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
|
-
`);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`,
|
|
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`,({itemId:e})=>{i.get(e)?.(),i.delete(e)}),{...n}},ue=e=>n=>{let r=e(n);return r.context.watch(`rootElement`).pipe((0,t.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&&o(t.contentDocument.body,`tabindex`,`-1`)}),r},de=({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}},fe=(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(_(e)){let{clientX:n,clientY:r}=de({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(v(e)){let{clientX:n,clientY:r}=de({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(y(e)){let n=Array.from(e.touches).map(e=>{let{clientX:t,clientY:n}=de({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},pe=[`pointercancel`,`pointerdown`,`pointerenter`,`pointerleave`,`pointermove`,`pointerout`,`pointerover`,`pointerup`],me=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=pe.map(e=>{let t=e=>{let t=e;if(_(e)&&(t=new PointerEvent(e.type,e)),t!==e){let r=fe(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`,({itemId:e})=>{r.get(e)?.(),r.delete(e)}),n},he=e=>{let t=new FileReader;return new Promise(n=>{t.addEventListener(`load`,()=>{n(t.result)},!1),t.readAsDataURL(e)})},ge=(e,t)=>Object.entries(e).reduce((e,[n,r])=>t.includes(n)?{...e,[n]:r}:e,{}),_e=e=>(0,n.map)(t=>ge(t,e)),O=t=>r=>r.pipe(_e(t),(0,n.distinctUntilChanged)(e.isShallowEqual));function k(e){return new t.Observable(t=>{let n=new ResizeObserver(e=>{t.next(e)});return n.observe(e),()=>{n.disconnect()}})}var A=e=>t=>t.pipe((0,n.switchMap)(t=>e.pipe((0,n.first)(),(0,n.map)(()=>t)))),ve=e=>{let n,r=e.subscribe(e=>{n={result:e}});return()=>(r.unsubscribe(),n?(0,t.of)(n.result):e)};function ye(){return new t.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 be(e){return(0,t.defer)(()=>ye().pipe((0,n.switchMap)(e)))}var j=(e,n)=>new t.Observable(t=>{let r=new MutationObserver(e=>{t.next(e)});return r.observe(e,n),()=>r.disconnect()});function xe(e,n){return new t.Observable(t=>{let r=new IntersectionObserver(e=>{t.next(e)},n);return r.observe(e),()=>{r.disconnect()}})}var Se=class{constructor(r,i){this.settingsManager=i;let a=(0,e.shallowMergeIfDefined)(this.getDefaultSettings(),r);this.outputSettings=this.computeOutputSettings(a),this.inputSettings=(0,e.shallowMergeIfDefined)(this.getDefaultSettings(),r),this.outputSettingsUpdateSubject=new t.Subject,this.values$=(0,t.combineLatest)([this.settingsManager.values$,this.outputSettingsUpdateSubject.pipe((0,n.startWith)(this.outputSettings))]).pipe((0,n.map)(([e,t])=>({...e,...t})),(0,n.shareReplay)(1)),this.values$.subscribe()}_prepareUpdate(t){let n=this.getCleanedParentInputSettings(t),r=this.settingsManager._prepareUpdate(n),i=(0,e.shallowMergeIfDefined)(this.inputSettings,t),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(t){return Array.isArray(t)?this.values$.pipe(O(t)):this.values$.pipe((0,n.map)(e=>e[t]),(0,n.distinctUntilChanged)(e.isShallowEqual))}destroy(){this.outputSettingsUpdateSubject.complete()}},Ce=class extends Se{computeOutputSettings(e){return e}hasSettingsChanged(t){return!(0,e.isShallowEqual)(this.outputSettings,t)}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`}}},we=e=>r=>{let{fontScale:i,lineHeight:a,fontWeight:o,fontJustification:s}=r,c=new t.Subject,l=e(r),u=new Ce({fontScale:i,lineHeight:a,fontWeight:o,fontJustification:s},l.settings),d=()=>`
|
|
7
7
|
|
|
8
8
|
body {
|
|
9
9
|
${u.values.fontScale===1?``:`font-size: ${u.values.fontScale}em !important;`}
|
|
@@ -11,7 +11,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
11
11
|
${u.values.fontWeight===`publisher`?``:`font-weight: ${u.values.fontWeight} !important;`}
|
|
12
12
|
${u.values.fontJustification===`publisher`?``:`text-align: ${u.values.fontJustification} !important;`}
|
|
13
13
|
}
|
|
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&&
|
|
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,n.pairwise)(),(0,t.map)(([e,t])=>t.fontScale!==e.fontScale||t.lineHeight!==e.lineHeight)),(0,n.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,t.takeUntil)(l.$.destroy$)).subscribe(),{...l,destroy:()=>{c.complete(),u.destroy(),l.destroy()},settings:u}},Te=e=>n=>{let r=e(n),i=e=>(0,t.fromEvent)(e,`keyup`).pipe((0,t.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,t.takeUntil)(r.$.destroy$)).subscribe(),r.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>e.watch(`isLoaded`).pipe((0,t.switchMap)(()=>{let n=e.renderer.getDocumentFrame();return n instanceof HTMLIFrameElement&&n?.contentDocument?i(n.contentDocument):t.EMPTY}))))),(0,t.takeUntil)(r.$.destroy$)).subscribe(),r},Ee=e=>e.spine.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>e.watch(`isLoaded`).pipe((0,t.switchMap)(()=>{let n=e.renderer.getDocumentFrame();return n?.contentDocument?(0,t.merge)(...Array.from(n.contentDocument.querySelectorAll(`a`)).map(e=>(0,t.fromEvent)(e,`click`))):t.NEVER}))))),(0,t.tap)(e=>{e.preventDefault()}),(0,t.share)()),M=class extends t.Observable{constructor(e){super(e=>this.stateSubject.pipe((0,t.takeUntil)(this._destroy$)).subscribe(e)),this._destroy$=new t.Subject,this.isDestroyed=!1,this.destroy$=this._destroy$.asObservable(),this.stateSubject=new t.BehaviorSubject(e),this.state$=this.stateSubject.asObservable()}next(e){this.stateSubject.next(e)}mergeCompare(t){let n={...this.value,...t};(0,e.isShallowEqual)(this.value,n)||this.stateSubject.next(n)}watch(n){return Array.isArray(n)?this.stateSubject.pipe(O(n)):this.stateSubject.pipe((0,t.map)(e=>e[n]),(0,t.distinctUntilChanged)(e.isShallowEqual))}get value(){return this.stateSubject.value}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.stateSubject.complete(),this._destroy$.next(),this._destroy$.complete())}},N=class e extends M{static{this.DOCUMENT_CONTAINER_CLASS_NAME=`prose-reader-document-container`}constructor(e){super({state:`idle`,error:void 0,documentContainer:void 0}),this.triggerSubject=new t.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 n=this.triggerSubject.pipe((0,t.filter)(e=>e.type===`unload`)),r=this.triggerSubject.pipe((0,t.filter)(e=>e.type===`load`));this.loaded$=r.pipe((0,t.mergeMap)(()=>this.value.state===`loaded`||this.value.state===`loading`?t.EMPTY:(this.mergeCompare({state:`loading`,error:void 0}),this.onCreateDocument().pipe((0,t.first)()).pipe((0,t.mergeMap)(e=>(this.hookManager.execute(`item.onDocumentCreated`,{itemId:this.item.id,documentContainer:e}),this.onLoadDocument().pipe((0,t.endWith)(null),(0,t.first)()).pipe(A(this.context.bridgeEvent.viewportFree$),(0,t.switchMap)(()=>this.hookManager.fromExecuteAsync(`item.onDocumentLoad`,this.item.id,{itemId:this.item.id,documentContainer:e}))))),(0,t.map)(()=>{this.mergeCompare({state:`loaded`,error:void 0})}),(0,t.takeUntil)(n)))),(0,t.share)()),this.unloaded$=n.pipe((0,t.mergeMap)(()=>this.value.state===`unloading`||this.value.state===`idle`?t.EMPTY:(this.mergeCompare({state:`unloading`,error:void 0}),this.context.bridgeEvent.viewportFree$.pipe((0,t.first)(),(0,t.map)(()=>{let e=this.value.documentContainer;if(e)try{this.hookManager.execute(`item.onDocumentUnload`,{itemId:this.item.id,documentContainer:e})}catch(e){i.error(`Error unloading document`,e)}try{this.onUnload()}catch(e){i.error(`Error unloading document`,e)}this.mergeCompare({state:`idle`,error:void 0})}),(0,t.takeUntil)(r)))),(0,t.share)()),(0,t.merge)(this.loaded$,this.unloaded$).pipe((0,t.catchError)(e=>(this.mergeCompare({state:`error`,error:e}),t.EMPTY)),(0,t.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,t.map)(e=>e.state===`loaded`))}load(){this.triggerSubject.next({type:`load`})}unload(){this.triggerSubject.next({type:`unload`})}renderHeadless(){let e=new t.Subject;return(0,t.defer)(()=>this.onRenderHeadless({release:e})).pipe((0,t.endWith)(void 0),(0,t.first)(),(0,t.map)(t=>{if(t)return{doc:t,release:()=>{e.next(void 0)}}}),(0,t.finalize)(()=>{e.complete()}),(0,t.catchError)(e=>(i.error(e),(0,t.of)(void 0))))}layout(e){return this.onLayout(e)}destroy(){if(this.isDestroyed)return;let e=this.value.documentContainer;if(e){try{this.hookManager.execute(`item.onDocumentUnload`,{itemId:this.item.id,documentContainer:e})}catch(e){i.error(`Error while executing unload hooks on destroy`,e)}try{this.onUnload()}catch(e){i.error(`Error while unloading document on destroy`,e)}}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`}},De=e=>new URL(e.href),P=class{constructor(e,t){this.item=e,this.settings=t}async getResource(){return await(0,t.lastValueFrom)(this.settings.values.getResource?.(this.item)??(0,t.of)(void 0))??De(this.item)}async fetchResource(){let e=await this.getResource();return e instanceof Response?e:e instanceof URL?fetch(e):e}},Oe=(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},ke=async(e,t,n,r,i)=>{if(!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})=>`${Oe(n,o).toLowerCase()}`.endsWith(`${e.toLowerCase()}`));if(s){let n=new P(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)}},Ae=(e,n,r,i,a)=>{let o=n.getAttribute(`src`)||n.getAttribute(`href`);if(!o)return(0,t.of)(null);let s=i.manifest.items.find(({href:e})=>`${Oe(r,o).toLowerCase()}`.endsWith(`${e.toLowerCase()}`));return s?(0,t.from)(new P(s,a).getResource()).pipe((0,t.mergeMap)(e=>e instanceof Response?(0,t.from)(e.blob()):(0,t.of)(void 0)),(0,t.mergeMap)(o=>{if(!o)return(0,t.of)(null);let s=e?.defaultView?.URL.createObjectURL(o)??``;if(n.hasAttribute(`src`))n.setAttribute(`src`,s);else if(n.hasAttribute(`href`)&&(n.setAttribute(`href`,s),e?.defaultView&&n instanceof e.defaultView.HTMLLinkElement))return new t.Observable(t=>{n.onload=async()=>{try{n.sheet&&await ke(e,n,r,i,a),t.next(),t.complete()}catch(e){t.error(e)}},n.onerror=t.error});return(0,t.of)(null)})):(0,t.of)(null)},je=({settings:n,item:r,context:i})=>a=>a.pipe((0,t.switchMap)(a=>{let o=ee(a.contentDocument),s=(0,e.getParentPath)(r.href),c=o.map(e=>Ae(a.contentDocument,e,s,i,n));return c.length===0?(0,t.of)(a):(0,t.combineLatest)(c).pipe((0,t.map)(()=>a))})),Me=e=>{x(e?.contentDocument)},Ne=async(t,n)=>{if(typeof t==`string`)return new Blob([t],{type:`text/html`});let r=(0,e.parseContentType)(t.headers.get(`Content-Type`)||``)||(0,e.detectMimeTypeFromName)(n.href);if([`image/jpg`,`image/jpeg`,`image/png`,`image/webp`].some(e=>e===r)){let e=await t.blob(),r=URL.createObjectURL(e),i=await createImageBitmap(e),{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}">`:``}
|
|
@@ -39,7 +39,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
39
39
|
<pre>${e}</pre>
|
|
40
40
|
</body>
|
|
41
41
|
</html>
|
|
42
|
-
`],{type:`text/html`})}return await t.blob()},
|
|
42
|
+
`],{type:`text/html`})}return await t.blob()},Pe=[`.txt`,`.jpg`,`.jpeg`,`.png`,`.webp`],Fe=[`text/plain`,`image/jpg`,`image/jpeg`,`image/png`,`image/webp`],Ie=e=>{let t=e?.getAttribute(`src`);t?.startsWith(`blob:`)&&URL.revokeObjectURL(t)},Le=({item:e,resourcesHandler:n})=>{let r=(e,t)=>{Ie(e);let n=URL.createObjectURL(t);e.setAttribute(`src`,n)};return a=>a.pipe((0,t.switchMap)(a=>(0,t.from)(n.getResource()).pipe((0,t.switchMap)(o=>{let s=Pe.some(t=>e.href.endsWith(t))||e.mediaType&&Fe.includes(e.mediaType);return o instanceof URL&&e.href.startsWith(window.location.origin)&&!s?(Ie(a),a?.setAttribute(`src`,o.href),(0,t.of)(a)):(o instanceof URL?(0,t.from)(n.fetchResource()):(0,t.of)(o)).pipe((0,t.switchMap)(t=>{if(!(t instanceof Response))throw Error(`Invalid resource`);return Ne(t,e)}),(0,t.tap)(e=>{r(a,e)}),(0,t.map)(()=>a),(0,t.catchError)(n=>(i.error(`Error while trying to fetch or load resource for item ${e.id}`,o),i.error(n),(0,t.of)(a))))}))))},Re=()=>{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
|
|
@@ -48,7 +48,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
48
48
|
background-color: transparent;
|
|
49
49
|
border: 0px none transparent;
|
|
50
50
|
padding: 0px;
|
|
51
|
-
`,e.setAttribute(`role`,`main`),e},
|
|
51
|
+
`,e.setAttribute(`role`,`main`),e},ze=`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%}`,Be=({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}}},Ve=new WeakMap,F=(e,t,n)=>{e.style.getPropertyValue(t)!==n&&e.style.setProperty(t,n)},I=(e,t)=>{e.style.getPropertyValue(t)!==``&&e.style.removeProperty(t)},He=(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)},Ue=(e,t,n)=>{let r=e.contentDocument?.documentElement;r&&r.getAttribute(t)!==n&&r.setAttribute(t,n)},We=({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(`|`),Ge=({frameElement:e,viewportDimensions:t,computedScale:n,spreadPosition:r,blankPagePosition:i,isRTL:a,pageWidth:o})=>{if(t){F(e,`position`,`absolute`),F(e,`top`,`50%`),i===`before`?r===`left`?(F(e,`left`,a?`0`:`50%`),I(e,`right`)):r===`right`?(F(e,`right`,a?`50%`:`0`),I(e,`left`)):(F(e,`left`,a?`25%`:`75%`),I(e,`right`)):r===`left`?(F(e,`right`,`0`),I(e,`left`)):r===`right`?(F(e,`left`,`0`),I(e,`right`)):(F(e,`left`,i===`after`?a?`75%`:`25%`:`50%`),I(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`;F(e,`transform`,`translate(${t}, -50%) scale(${n})`),F(e,`transform-origin`,`${o} center`);return}i===`before`?a?F(e,`margin-right`,`${o}px`):F(e,`margin-left`,`${o}px`):(I(e,`margin-left`),I(e,`margin-right`))},Ke=({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}=Be({frameElement:a,pageHeight:r,pageWidth:i})??{},l=!!e,u=i,d=r,f=We({hasViewportDimensions:l,viewportWidth:e?.width,viewportHeight:e?.height,computedScale:c,spreadPosition:n,blankPagePosition:t,isRTL:o,pageWidth:i,pageHeight:r});return Ve.get(a)===f?{width:s,height:d}:(Ve.set(a,f),Ue(a,`data-prose-reader-html-renderer-has-viewport-dimensions`,l.toString()),e?He(a,{width:e.width??1,height:e.height??1}):He(a,{width:u,height:d}),Ge({frameElement:a,viewportDimensions:e,computedScale:c,spreadPosition:n,blankPagePosition:t,isRTL:o,pageWidth:i}),{width:s,height:d})}return{width:s,height:r}},qe=()=>`
|
|
52
52
|
body {
|
|
53
53
|
margin: 0;
|
|
54
54
|
}
|
|
@@ -65,7 +65,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
65
65
|
html, body {
|
|
66
66
|
touch-action: none;
|
|
67
67
|
}
|
|
68
|
-
`,
|
|
68
|
+
`,Je=({isScrollable:e,enableTouch:t})=>`
|
|
69
69
|
|
|
70
70
|
html, body {
|
|
71
71
|
width: 100%;
|
|
@@ -87,7 +87,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
87
87
|
display: block;
|
|
88
88
|
}
|
|
89
89
|
`:``}
|
|
90
|
-
`,
|
|
90
|
+
`,Ye=({width:e,columnHeight:t,columnWidth:n})=>`
|
|
91
91
|
parsererror {
|
|
92
92
|
display: none !important;
|
|
93
93
|
}
|
|
@@ -151,14 +151,14 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
151
151
|
td {
|
|
152
152
|
max-width: ${n}px;
|
|
153
153
|
}
|
|
154
|
-
|
|
154
|
+
`,Xe=({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}},L=(e,t)=>{l(e.style,`width`,`${t.width}px`),l(e.style,`height`,`${t.height}px`)},Ze=({pageHeight:e,pageWidth:t,frameElement:n,manifest:r,renditionFlow:i,minPageSpread:a,isRTL:o,blankPagePosition:s,isImageType:c,enableTouch:d,isUsingVerticalWriting:f})=>{let p=a*t,m=r.renditionLayout===`reflowable`&&i===`scrolled-continuous`,h=m?Math.min(400,e):e;l(n.style,`width`,`${t}px`),m?u(n.style,`height`):l(n.style,`height`,`${h}px`);let{viewportDimensions:g,computedScale:_=1}=Be({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`,qe()),L(n,{width:g.width??1,height:g.height??1}),l(n.style,`position`,`absolute`),l(n.style,`top`,`50%`),l(n.style,`left`,s===`before`?o?`25%`:`75%`:s===`after`?o?`75%`:`25%`:`50%`),l(n.style,`transform`,`translate(-50%, -50%) scale(${_})`),l(n.style,`transform-origin`,`center center`);else if(E(n,`prose-reader-css`,c?Je({isScrollable:i===`scrolled-continuous`,enableTouch:d}):Ye(Xe({isUsingVerticalWriting:f,minimumWidth:p,pageHeight:h,pageWidth:t})),!0),f)r=Math.ceil(n.contentDocument.documentElement.scrollHeight/h)*h,L(n,{width:p,height:r});else if(i===`scrolled-continuous`)r=n.contentDocument.body.scrollHeight,L(n,{width:p,height:r});else{let i=Math.ceil(n.contentDocument.documentElement.scrollWidth/t);e=v?t:i*t,L(n,{width:e,height:r})}return e%p===0?l(n.style,`margin-left`,`0px`):(e+=t,o&&!f&&l(n.style,`margin-left`,`${t}px`)),{width:e,height:r}}},Qe=class extends N{constructor(...t){super(...t),this.isPrePaginated=()=>this.item.renditionLayout===`pre-paginated`||!this.item.renditionLayout&&this.context.manifest.renditionLayout===`pre-paginated`,this.isImageType=()=>!!(this.item.mediaType??(0,e.detectMimeTypeFromName)(this.item.href))?.startsWith(`image/`)}onCreateDocument(){let e=Re();return this.setDocumentContainer(e),(0,t.of)(e)}onLoadDocument(){let e=this.getFrameElement();if(!e)throw Error(`invalid frame`);return(0,t.of)(e).pipe(Le({item:this.item,resourcesHandler:this.resourcesHandler,settings:this.settings}),A(this.context.bridgeEvent.viewportFree$),(0,t.tap)(e=>{this.prepareFrameForAttach(e),this.attach()}),se,(0,t.tap)(e=>{this.isPrePaginated()?E(e,`prose-reader-css`,ze):this.isImageType()}),je({context:this.context,item:this.item,settings:this.settings}),ce,(0,t.tap)(e=>{this.revealFrameAfterReady(e)}))}onUnload(){let e=this.getFrameElement();Me(e),Ie(e),this.detach()}onLayout({minPageSpread:e,blankPagePosition:n,spreadPosition:r}){let{width:i,height:a}=this.viewport.pageSize,s=this.getFrameElement();if(!s)return(0,t.of)(void 0);let c=this.settings.values.computedPageTurnMode===`scrollable`;if(s.contentDocument?.documentElement&&(o(s.contentDocument.documentElement,`data-prose-reader-html-renderer-spread-position`,r),c?s.contentDocument?.documentElement.classList.add(`prose-reader-html-renderer-touch-enabled`):s.contentDocument?.documentElement.classList.remove(`prose-reader-html-renderer-touch-enabled`)),this.isPrePaginated())return(0,t.of)(Ke({blankPagePosition:n,frameElement:s,isRTL:this.context.isRTL(),minPageSpread:e,pageHeight:a,pageWidth:i,spreadPosition:r}));let l=!!this.writingMode?.startsWith(`vertical`),u=this.isImageType();return(0,t.of)(Ze({pageHeight:a,pageWidth:i,frameElement:s,manifest:this.context.manifest,renditionFlow:this.item.renditionFlow??this.context.manifest.renditionFlow,blankPagePosition:n,isUsingVerticalWriting:l,isRTL:this.context.isRTL(),minPageSpread:e,isImageType:u,enableTouch:this.settings.values.computedPageTurnMode===`scrollable`}))}onRenderHeadless(){return(0,t.from)(this.resourcesHandler.fetchResource()).pipe((0,t.switchMap)(e=>{if(e instanceof Response){let n=e.headers.get(`content-type`)??``;if([`application/xhtml+xml`,`application/xml`,`text/html`,`text/xml`].includes(n))return(0,t.from)(e.text()).pipe((0,t.map)(e=>new DOMParser().parseFromString(e,n)))}return(0,t.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()}},$e=e=>n=>{let r=e({...n,getRenderer(e){return n.getRenderer?.(e)??(e=>new Qe(e))}}),i=Ee(r);return i.pipe((0,t.takeUntil)(r.$.destroy$)).subscribe(),{...r,links$:i}};function R(e){return e!=null}var z=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}},B=class{constructor(e){this.__symbol=Symbol(`SpineItemPosition`),this.x=e.x,this.y=e.y}},V=class{constructor(e){this.__symbol=Symbol(`SpineItemPagePosition`),this.x=e.x,this.y=e.y}},et=class extends z{constructor(...e){super(...e),this.__symbol=`SpineItemPageLayout`}},H=class extends z{constructor(...e){super(...e),this.__symbol=`SpineItemSpineLayout`}},tt=class extends z{constructor(...e){super(...e),this.__symbol=`SpineItemPageSpineLayout`}},nt=class{constructor(e){this.x=e.x,this.y=e.y}},U=class e extends nt{constructor(...e){super(...e),this.__symbol=`SpinePosition`}static from(t){return new e(t)}},W=class e extends nt{constructor(...e){super(...e),this.__symbol=`UnboundSpinePosition`}static from(t){return new e(t)}},rt=(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}},it=(e,t)=>new W(rt(e,t)),at=e=>({getSpinePositionFromClientPosition:t=>e.spine.element?it(t,e.spine.element):void 0}),ot=e=>{let r,i=e.context.watch(`rootElement`).pipe((0,n.switchMap)(e=>e?new t.Observable(()=>(r=e.ownerDocument.createElement(`div`),r.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
|
-
`,e.appendChild(r),()=>{r?.remove(),r=void 0})):t.NEVER)),a=e=>(0,t.scheduled)(e,t.animationFrameScheduler).pipe((0,n.tap)(()=>{r&&l(r.style,`visibility`,`hidden`)})),o=e.context.bridgeEvent.viewportBusy$.pipe((0,n.tap)(()=>{r&&l(r.style,`visibility`,`visible`)})),s=a(e.viewportFree$).pipe((0,n.take)(1));return(0,t.merge)(i,e.settings.values$.pipe((0,n.map)(()=>e.settings.values.computedPageTurnMode),(0,n.distinctUntilChanged)()).pipe((0,n.switchMap)(e=>e===`controlled`?o.pipe((0,n.switchMap)(()=>s)):a((0,t.of)(void 0))),(0,n.takeUntil)(e.$.destroy$)))},
|
|
161
|
+
`,e.appendChild(r),()=>{r?.remove(),r=void 0})):t.NEVER)),a=e=>(0,t.scheduled)(e,t.animationFrameScheduler).pipe((0,n.tap)(()=>{r&&l(r.style,`visibility`,`hidden`)})),o=e.context.bridgeEvent.viewportBusy$.pipe((0,n.tap)(()=>{r&&l(r.style,`visibility`,`visible`)})),s=a(e.viewportFree$).pipe((0,n.take)(1));return(0,t.merge)(i,e.settings.values$.pipe((0,n.map)(()=>e.settings.values.computedPageTurnMode),(0,n.distinctUntilChanged)()).pipe((0,n.switchMap)(e=>e===`controlled`?o.pipe((0,n.switchMap)(()=>s)):a((0,t.of)(void 0))),(0,n.takeUntil)(e.$.destroy$)))},st=`@prose-reader/core`,ct=0,lt=200,G=`prose-reader`,ut=`${G}-style`,dt=`data-${G}-id`,ft=`${G}-viewport`,pt=`${G}-scroll-navigator`,mt=`${G}-spine-item`,ht=`--${G}-absolute-viewport-width`,gt=`--${G}-absolute-viewport-height`,_t=`${G}-enhancer-loading`,vt=`${_t}-container`,yt=`${_t}-logo`,bt=`${_t}-details`,xt=({container:e,item:t})=>{let n=e.ownerDocument.createElement(`div`);n.classList.add(vt);let r=n.ownerDocument.createElement(`div`);r.classList.add(yt),r.innerText=`prose`;let i=n.ownerDocument.createElement(`div`);return i.classList.add(bt),i.setAttribute(`data-details-element`,`true`),i.innerText=`loading ${t.id}`,n.appendChild(r),n.appendChild(i),n},St=e=>e===`sepia`?`#939393`:`rgb(202, 202, 202)`,Ct=({loadingElement:e,theme:t})=>{l(e.style,`color`,St(t))},wt=e=>{let r=new WeakMap;return e.hookManager.register(`item.onBeforeContainerAttach`,({element:t,item:n})=>{l(t.style,`z-index`,`0`);let i=xt({container:t,item:n});Ct({loadingElement:i,theme:e.theme.get()}),r.set(t,i),t.appendChild(i)}),(0,t.merge)(e.spineItemsObserver.states$.pipe((0,n.tap)(({item:e,isError:t,error:n})=>{if(!t)return;let i=r.get(e.containerElement);if(!i)return;let a=i.querySelector(`[data-details-element]`);a instanceof HTMLElement&&c(a,`innerText`,n?.toString()??`Unknown error`)})),e.theme.$.theme$.pipe((0,n.tap)(t=>{for(let n of e.spineItemsManager.items){let e=r.get(n.containerElement);e&&Ct({loadingElement:e,theme:t})}})))},Tt=e=>{e.hookManager.register(`item.onDocumentLoad`,async({itemId:t})=>{let n=e.spineItemsManager.get(t)?.renderer.getDocumentFrame();n&&o(n,`scrolling`,`no`)})},Et=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&&l(c.style,`left`,e.context.isRTL()?`75%`:`25%`)})},Dt=e=>e.spineItemsObserver.states$.pipe((0,t.tap)(({item:e,isReady:t,isDirty:n})=>{e.containerElement.dataset.isDirty=n.toString(),e.containerElement.dataset.isReady=t.toString()})),Ot=class extends Se{computeOutputSettings(e){return e}hasSettingsChanged(t){return!(0,e.isShallowEqual)(this.outputSettings,t)}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}}},kt=({manifest:e,spreadMode:t})=>e.renditionFlow!==`scrolled-continuous`&&t,At=e=>e===void 0||e===`auto`||e===`landscape`||e===`both`,jt=({manifest:e,viewport:t})=>{let n=t.width>t.height;return!!(!n&&e.renditionSpread===`portrait`||n&&At(e.renditionSpread))},Mt=({manifest:e,viewport:t})=>kt({manifest:e,spreadMode:jt({manifest:e,viewport:t})}),Nt=e=>(0,t.combineLatest)([e.viewport.watch([`width`,`height`]),e.context.watch(`manifest`)]).pipe((0,t.tap)(([t,n])=>e.settings.update({spreadMode:jt({manifest:n,viewport:t})}))),Pt=r=>i=>{let{pageHorizontalMargin:a,pageVerticalMargin:s,layoutAutoResize:c,layoutLayerTransition:u}=i,d=r(i),f=new Ot({pageHorizontalMargin:a,pageVerticalMargin:s,layoutAutoResize:c,layoutLayerTransition:u},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:t})=>{let n=d.spineItemsManager.get(t.id),r=!!(t.mediaType??(0,e.detectMimeTypeFromName)(t.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
163
|
width: ${r}px !important;
|
|
164
164
|
margin: ${a}px ${i}px !important;
|
|
@@ -176,7 +176,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
176
176
|
td {
|
|
177
177
|
max-width: ${e}px;
|
|
178
178
|
}
|
|
179
|
-
`)}}),Et(d),Tt(d),d.hookManager.register(`item.onDocumentCreated`,({documentContainer:e})=>{l(e.style,`opacity`,`0`),f.values.layoutLayerTransition&&l(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&&o(t,`tab-index`,`0`)});let p=d.spineItemsObserver.states$.pipe((0,n.filter)(({isReady:e})=>e),(0,n.tap)(({item:e})=>{let t=e.renderer.documentContainer;t&&l(t.style,`opacity`,`1`)})),m=f.values$.pipe((0,n.filter)(({layoutAutoResize:e})=>e===`container`),(0,n.switchMap)(()=>d.context.watch(`rootElement`)),(0,n.filter)(F),(0,n.switchMap)(e=>D(e)),(0,n.debounceTime)(100),(0,n.filter)(F),(0,n.tap)(()=>{d?.layout()})),h=ct(d);f.watch([`pageHorizontalMargin`,`pageVerticalMargin`]).pipe((0,n.skip)(1),(0,n.tap)(()=>{d.layout()}),(0,n.takeUntil)(d.$.destroy$)).subscribe();let g=d.spine.pages.pipe((0,n.shareReplay)({refCount:!0,bufferSize:1}));return(0,t.merge)(p,h,m,g,Dt(d),Nt(d),wt(d)).pipe((0,n.takeUntil)(d.$.destroy$)).subscribe(),{...d,destroy:()=>{f.destroy(),d.destroy()},settings:f,layout$:d.spine.layout$,layoutInfo$:g,coordinates:st(d)}},Ft=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}},It=e=>n=>n.pipe((0,t.switchMap)(n=>e.pipe((0,t.filter)(e=>e===`free`),(0,t.first)(),(0,t.map)(()=>n)))),Lt=({navigation$:e,navigationState$:t})=>e.pipe(It(t)),Rt=e=>Lt(e).pipe((0,t.skip)(1)),zt=e=>n=>n.pipe((0,t.takeUntil)(Rt(e))),Bt=e=>e.navigation.navigation$.pipe((0,t.filter)(e=>e.triggeredBy===`user`),It(e.navigation.navigationState$),(0,t.map)(t=>{let n=t.requestedPosition,r=t.requestedVisibleArea;return n&&r?e.navigation.navigationResolver.getBoundaryForPosition(n,r):void 0}),(0,t.filter)(e=>e!==void 0),(0,t.map)(e=>({boundary:e})),(0,t.share)()),Vt=(e,n)=>e.links$.pipe((0,t.tap)(t=>{if(!re(t.target,`a`)||t.type!==`click`)return;let r=new URL(t.target.href),i=`${r.origin}${r.pathname}`;e.context.manifest?.spineItems.some(e=>e.href===i)&&n.goToUrl(r)})),K=i.namespace(`navigation`),Ht=({position:e,spineItem:t,pageHeight:n,pageWidth:r,spineItemLocator:i})=>{let a=new L({x:e.x-r,y:e.y});return t.isUsingVerticalWriting()&&(a=new L({x:e.x,y:e.y+n})),i.getSpineItemClosestPositionFromUnsafePosition(a,t)},Ut=({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=Ht({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 H({x:e.x-a.pageSize.width,y:0}):new H({y:e.y-a.pageSize.height,x:0})},Wt=({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 H({x:e.x,y:e.y-s.pageSize.height});let l=Ut({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 H({x:l.x+s.pageSize.width,y:l.y}):new H({x:l.x-s.pageSize.width,y:l.y}));if(o===`vertical`&&e.y!==l.y)return r.getAdjustedPositionForSpread(l);let c=Ut({position:l,viewport:s,navigationResolver:r,computedPageTurnDirection:o,spineItemsManager:i,spineLocator:a});return r.getAdjustedPositionForSpread(c)}return r.getAdjustedPositionForSpread(l)},Gt=({position:e,spineItem:t,pageHeight:n,pageWidth:r,spineItemLocator:i})=>{let a=new L({x:e.x+r,y:e.y});return t.isUsingVerticalWriting()&&(a=new L({x:e.x,y:e.y-n})),i.getSpineItemClosestPositionFromUnsafePosition(a,t)},Kt=({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=Gt({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 H({x:e.x+a.pageSize.width,y:0}):new H({y:e.y+a.pageSize.height,x:0})},qt=({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 H({x:e.x,y:e.y+s.pageSize.height});let l=Kt({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 H({x:l.x-s.pageSize.width,y:l.y}):new H({x:l.x+s.pageSize.width,y:l.y}));if(o===`vertical`&&e.y!==l.y)return r.getAdjustedPositionForSpread(l);let c=Kt({position:l,viewport:s,navigationResolver:r,computedPageTurnDirection:o,spineItemsManager:i,spineLocator:a});return r.getAdjustedPositionForSpread(c)}return r.getAdjustedPositionForSpread(l)},Jt=class{constructor(e){this.reader=e,this.movingLastDelta={x:0,y:0},this.movingLastPosition=new V({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=qt({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=Wt({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})}}},Yt=class extends k{constructor(e){super({lastDelta:{x:0,y:0},lastPosition:new V({x:0,y:0}),lastStartPosition:new V({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 V({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 t.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}},Xt=500,Zt=class extends q{constructor(e,n){super(),this.scrollNavigationController=e,this.lock=n,this.navigationSubject=new t.Subject,this.navigation$=this.navigationSubject.asObservable(),(0,t.merge)(this.scrollNavigationController.userScroll$.pipe((0,t.exhaustMap)(e=>{let n=this.lock();return(0,t.merge)(this.scrollNavigationController.userScroll$,(0,t.of)(e)).pipe((0,t.debounceTime)(Xt,t.animationFrameScheduler),(0,t.first)(),(0,t.tap)(()=>{let e=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:`scroll`,position:e})}),(0,t.finalize)(()=>{n()}))}))).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}},Qt=n=>n.pagination.state$.pipe((0,t.withLatestFrom)(n.context.manifest$,n.settings.values$),(0,t.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`&&!l,canTurnRight:r!==`vertical`&&!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,t.distinctUntilChanged)(e.isShallowEqual)),$t=({reader:e,duration:n})=>r=>{let i,a=()=>{i?.(),i=void 0};return r.pipe((0,t.tap)(()=>{i||=e?.navigation.lock()}),(0,t.throttleTime)(n,void 0,{trailing:!0,leading:!0}),(0,t.tap)(a),(0,t.finalize)(a))},en=e=>n=>{let r=e(n),i=Qt(r),a=Bt(r),o=new Jt(r),s=new Yt(r),c=new Zt(r.navigation.scrollNavigationController,r.navigation.lock);(0,t.merge)(Vt(r,o),c.navigation$.pipe((0,t.tap)(e=>{r.navigation.navigate(e)}))).pipe((0,t.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($t({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)}}},tn=(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}},nn=(e,n)=>{let r=e?.itemPageIndex,{itemIndex:i,...a}=n.cfi.parseCfi(e.cfi),o=n.spineItemsManager.get(i);return o?xe().pipe((0,t.withLatestFrom)(o.isReady$),(0,t.map)(([,t])=>{let{node:s=null,offset:c,range:l}=t?n.cfi.resolveCfi({cfi:e.cfi}):{};o.renditionLayout!==`pre-paginated`&&s&&(r=n.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(s,c??0,o)??r);let u=e?.absolutePageIndex;return r===void 0&&(r=0),u=n.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:r,spineItemOrId:o})??e?.absolutePageIndex,{...e,...a,range:l,itemIndex:i,node:s,startOffset:c,absolutePageIndex:u,itemPageIndex:r}})):(0,t.of)({...e,itemIndex:i,...a})},rn=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,n)=>{let r={resource:e,meta:tn(this.reader,e)};return Se(()=>{let i=this.reader.spineItemsManager.get(r.meta.itemIndex??0),a=i?.renditionLayout===`reflowable`,o=n.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,t.finalize)(()=>{s&&this.deregisterMemoizedStream(s),setTimeout(()=>{o()},1e3)}));if(s&&c)return c.observerCount++,l(c.consolidate$.pipe((0,t.map)(({resource:e,meta:t})=>({resource:e,meta:t}))));let u=this.reader.spine.layout$.pipe((0,t.debounceTime)(10),(0,t.startWith)(r),(0,t.switchScan)(e=>nn(e.meta,this.reader).pipe((0,t.map)(t=>({...e,meta:t}))),r),(0,t.shareReplay)({refCount:!0,bufferSize:1}));return s&&this.locatorsByKey.set(s,{observerCount:1,consolidate$:u}),l(u)})}}locateResource(e,n){return Array.isArray(e)?Se(()=>(0,t.combineLatest)(e.map(e=>this.locate(e,n??{}))).pipe((0,t.defaultIfEmpty)([]))):this.locate(e,n??{})}},an=i.namespace(`spine`),on=({position:e,pageSize:t})=>new it({...e,left:e.x,top:e.y,width:t.width,height:t.height,bottom:e.y+t.height,right:e.x+t.width}),sn=10,cn=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:f(r,e.layout)}},ln=e=>new t.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<sn;){let t=e[r];if(!t){r=e.length;break}i[r]=cn(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 k{constructor(n,r,i,a,o,s){super({pages:[]}),this.spineLayout=n,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,t.map)(()=>this.fromAbsolutePageIndex(e))),this.layout$=n.layout$.pipe((0,t.withLatestFrom)(s),(0,t.switchMap)(([,{pageSize:e}])=>ln(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:on({pageSize:e,position:c}),layout:new rt({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,t.map)(e=>(an.info(`Pages layout`,e),{pages:e})),(0,t.share)()),this.layout$.pipe((0,t.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},un=e=>{if(!e)return;let t=e.indexOf(`#`);if(!(t<0))return e.substring(t+1)||void 0},dn=e=>{try{return decodeURIComponent(e)}catch{return e}},fn=(e,t=[])=>e.flatMap(e=>{let n=[...t,{title:e.title,path:e.path}];return[{chain:n,href:e.href||e.path,anchorId:un(e.href)??un(e.path)},...fn(e.contents,n)]}),pn=e=>{let t=new Map;return e.spineItems.forEach((e,n)=>{t.has(e.href)||t.set(e.href,n)}),t},mn=(e,t)=>{let n=pn(t);return fn(e).map(e=>{let t=Y(e.href),r=n.get(t)??-1;return{...e,hrefWithoutAnchor:t,spineItemIndex:r}})},hn=({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)gn(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},gn=(e,t)=>e===t||e.endsWith(t)||t.endsWith(e),_n=(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},vn=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},yn=({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},bn=({rangeToTest:e,upperBoundRange:t})=>e.compareBoundaryPoints(Range.START_TO_START,t)<0,xn=e=>{let t=e.createRange(),n=e.body??e.documentElement;if(n)return t.selectNodeContents(n),t.collapse(!1),t},Sn=({anchorNode:e,nextPageNode:t})=>e===t||e.contains(t),Cn=({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?yn({doc:a,node:o,offset:s}):void 0:xn(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(dn(e.anchorId));if(!t||l&&Sn({anchorNode:t,nextPageNode:o}))continue;let n=a.createRange();n.setStartBefore(t),n.collapse(!0),bn({rangeToTest:n,upperBoundRange:c})&&(!d||n.compareBoundaryPoints(Range.START_TO_START,d)>0)&&(u=e.chain,d=n)}let p=u??f;return p?vn(p):void 0},wn=({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)},Tn=({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)_n(r,e.hrefWithoutAnchor)&&(a<e.spineItemIndex||wn({candidate:e,hrefHasAnchor:i})||(o=e.chain));return o},En=(e,t,n)=>{let{href:r}=n,i=Tn({href:r,tocIndex:t,manifest:e});return i?vn(i):void 0},Dn=(e,t)=>e?e.spineItems.reduce((n,r)=>(n[r.id]=En(e,t,r),n),{}):{},On=(e,t,n)=>e+t*n,kn=(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))},An=(e,n,r,i,a,o)=>a.isReady$.pipe((0,t.first)(),(0,t.withLatestFrom)(e.layoutInfo$),(0,t.map)(([t,s])=>{let c=o.renditionLayout===`pre-paginated`,l=o.spineItems.length||0,u=o.spineItems.slice(0,n).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[n]?.progressionWeight??(d+1)/f,h=(r+1)*(m/p);!c&&a.renditionLayout===`reflowable`&&!t&&(h=0);let g=u+h;return o.renditionFlow===`scrolled-continuous`&&(h=t?kn(e,i,a):0,g=On(u,m,h)),n===l-1&&r===p-1&&g>.99?1:g})),jn={tocCandidatesBySpineHref:new Map,chaptersInfo:{}},Mn=({beginItem:e,endItem:t,paginationInfo:n,chaptersData:r,pagesState:i})=>{let a=e&&n.beginPageIndexInSpineItem!==void 0?J.fromSpineItemPageIndex(i,e.index,n.beginPageIndexInSpineItem):void 0,o=a?J.fromNextPageWithinSameSpineItem(i,a):void 0,s=t&&n.endPageIndexInSpineItem!==void 0?J.fromSpineItemPageIndex(i,t.index,n.endPageIndexInSpineItem):void 0,c=s?J.fromNextPageWithinSameSpineItem(i,s):void 0,l=e?Cn({node:a?.firstVisibleNode?.node,offset:a?.firstVisibleNode?.offset,candidates:r.tocCandidatesBySpineHref.get(e.item.href)??[],spineItem:e,nextPageEntry:o}):void 0,u=t?Cn({node:s?.firstVisibleNode?.node,offset:s?.firstVisibleNode?.offset,candidates:r.tocCandidatesBySpineHref.get(t.item.href)??[],spineItem:t,nextPageEntry:c}):void 0;return{beginChapterInfo:l??(e?r.chaptersInfo[e.item.id]:void 0),beginSpineItemReadingDirection:e?.readingDirection,beginAbsolutePageIndex:a?.absolutePageIndex,endChapterInfo:u??(t?r.chaptersInfo[t.item.id]:void 0),endSpineItemReadingDirection:t?.readingDirection,endAbsolutePageIndex:s?.absolutePageIndex}},Nn=({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}},Pn=(e,t)=>e.numberOfTotalPages!==t.numberOfTotalPages||e.numberOfPagesPerItems.length!==t.numberOfPagesPerItems.length?!1:e.numberOfPagesPerItems.every((e,n)=>e===t.numberOfPagesPerItems[n]),Fn=({reader:e,paginationInfo:n,navigationPosition:r,manifest:i})=>{let a=e.spineItemsManager.get(n.endSpineItemIndex);return a?An(e,n.endSpineItemIndex??0,n.endPageIndexInSpineItem||0,r,a,i):(0,t.of)(0)},In=e=>e.context.manifest$.pipe((0,t.map)(e=>{if(!e)return jn;let t=mn(e.nav?.toc??[],e);return{tocCandidatesBySpineHref:hn({manifest:e,tocIndex:t}),chaptersInfo:Dn(e,t)}})),Ln=e=>({beginSpineItemIndex:e.beginSpineItemIndex,beginPageIndexInSpineItem:e.beginPageIndexInSpineItem,endSpineItemIndex:e.endSpineItemIndex,endPageIndexInSpineItem:e.endPageIndexInSpineItem}),Rn=n=>{let r=n.pagination.state$,i=n.spine.pages.layout$,a=In(n).pipe((0,t.shareReplay)({bufferSize:1,refCount:!0})),o=(0,t.combineLatest)([r.pipe((0,t.map)(Ln),(0,t.distinctUntilChanged)(e.isShallowEqual)),a,i]).pipe((0,t.map)(([e,t,r])=>Mn({beginItem:n.spineItemsManager.get(e.beginSpineItemIndex),endItem:n.spineItemsManager.get(e.endSpineItemIndex),paginationInfo:e,chaptersData:t,pagesState:r})),(0,t.shareReplay)({bufferSize:1,refCount:!0})),s=(0,t.combineLatest)([r,n.settings.watch([`computedSpreadMode`]).pipe((0,t.map)(e=>e.computedSpreadMode??!1),(0,t.distinctUntilChanged)()),o,(0,t.combineLatest)([i,n.spineItemsManager.items$]).pipe((0,t.map)(([e,t])=>Nn({items:t,pagesState:e})),(0,t.distinctUntilChanged)(Pn))]).pipe((0,t.map)(([e,t,n,r])=>({...e,...n,isUsingSpread:t,...r}))),c=Lt(n.navigation).pipe((0,t.map)(({position:e})=>e),(0,t.distinctUntilChanged)(e.isShallowEqual));return(0,t.combineLatest)([s,(0,t.combineLatest)([r,n.layout$,c,n.context.manifest$]).pipe((0,t.switchMap)(([e,t,r,i])=>Fn({reader:n,paginationInfo:e,navigationPosition:r,manifest:i})),(0,t.map)(e=>({percentageEstimateOfBook:e})))]).pipe((0,t.map)(([e,t])=>({...e,...t})),(0,t.distinctUntilChanged)(e.isShallowEqual),(0,t.auditTime)(5))},zn=e=>n=>{let r=e(n),a=new t.BehaviorSubject({...r.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),o=new rn(r),s=Rn(r).pipe((0,t.tap)(e=>i.log(`Pagination`,e))).subscribe(a);return{...r,locateResource:o.locateResource.bind(o),destroy:()=>{s.unsubscribe(),r.destroy()},pagination:{...r.pagination,get state(){return a.value},get state$(){return a}}}},Bn=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)}})}),Vn=async e=>new Promise((t,n)=>{let r=window.indexedDB.open(e);r.onerror=e=>{n(e)},r.onsuccess=()=>{t(Bn(r.result))},r.onupgradeneeded=()=>{r.result.createObjectStore(`store`)}}),Hn=e=>{let r=Date.now().toString(),a=new t.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,t)=>{let n=o(e);if(!n)return new Response(`Item not found`,{status:404});let i=await(await Vn(`prose-reader`)).get(`${r}_${n.id}`);if(i)return new Response(i,{status:200});let a=t&&await t(n)||await fetch(n.href);return c(n,a.clone()),a},c=(e,t)=>{a.next({id:e,data:t})};return a.asObservable().pipe((0,n.mergeMap)(({id:e,data:a})=>{let s=o(e);return s?(0,t.from)((0,t.forkJoin)([Vn(`prose-reader`),(0,t.from)(a.blob())])).pipe((0,n.switchMap)(([e,n])=>(0,t.from)(e.put(`${r}_${s.id}`,n))),(0,n.catchError)(e=>(i.error(e),t.EMPTY))):t.EMPTY}),(0,n.takeUntil)(e.destroy$)).subscribe(),(0,t.merge)(e.manifest$.pipe((0,n.tap)(()=>{r=Date.now().toString()}))).pipe((0,n.switchMap)(()=>(i.debug(`Cleanup up old cache...`),(0,t.from)(Vn(`prose-reader`)).pipe((0,n.switchMap)(e=>(0,t.from)(e.keys()).pipe((0,n.map)(e=>e.filter(e=>!e.toString().startsWith(r))),(0,n.switchMap)(n=>{let r=n.map(t=>e.remove(t));return(0,t.from)(Promise.all(r))}))),(0,n.catchError)(e=>(i.error(e),t.EMPTY))))),(0,n.takeUntil)(e.destroy$)).subscribe(),{get:s,destroy:()=>{a.complete()}}},Un=e=>t=>{let n=e(t),r=Hn(n.context),i=()=>{r.destroy(),n.destroy()};return{...n,destroy:i}},Wn=(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){i.warn(`Failed to create range from selection`,n,{anchor:e,focus:t})}return n}},Gn=({selection:e,spineItem:t})=>{let{anchorNode:n,anchorOffset:r,focusNode:a,focusOffset:o}=e;if(!(!n||!a))try{return Wn({node:n,offset:r},{node:a,offset:o})}catch(n){i.warn(`Failed to create range from selection`,n,{selection:e,spineItem:t});return}},Kn=class extends q{constructor(e){super();let n=e.contentDocument||e.contentWindow?.document;if(!n)this.selectionChange$=t.NEVER,this.selectionOver$=t.NEVER;else{let r=Ce(n.body,{childList:!0,subtree:!0}).pipe((0,t.filter)(e=>!!e.find(e=>e.type===`childList`&&e.removedNodes.length))),i=e.parentElement?Ce(e.parentElement,{childList:!0}).pipe((0,t.filter)(t=>!!t.find(t=>Array.from(t.removedNodes).includes(e)))):(0,t.of)(null);this.selectionChange$=(0,t.merge)((0,t.fromEvent)(n,`selectionchange`),r).pipe((0,t.map)(()=>n.getSelection()),(0,t.takeUntil)((0,t.merge)(i,this.destroy$)),(0,t.endWith)(null)),this.selectionOver$=(0,t.fromEvent)(n,`pointerdown`).pipe((0,t.switchMap)(()=>(0,t.merge)((0,t.fromEvent)(n,`pointerup`),(0,t.fromEvent)(n,`pointercancel`),(0,t.fromEvent)(n,`contextmenu`)).pipe((0,t.first)(),(0,t.delay)(0),(0,t.map)(e=>{let t=n.getSelection();return t&&!t.isCollapsed?[e,t]:void 0}),(0,t.filter)(F))),(0,t.takeUntil)((0,t.merge)(i,this.destroy$)))}}},qn=e=>e.watch(`isLoaded`).pipe((0,t.switchMap)(()=>{let n=e.renderer.getDocumentFrame(),r=n?.contentDocument||n?.contentWindow?.document;if(!n||!r)return t.NEVER;let i=new Kn(n);return(0,t.merge)(i.selectionChange$.pipe((0,t.map)(e=>{if(e?.toString())return{type:`change`,selection:e}})),i.selectionOver$.pipe((0,t.map)(([e,t])=>({type:`over`,event:e,selection:t})))).pipe((0,t.takeUntil)(e.unloaded$),(0,t.endWith)(void 0),(0,t.finalize)(()=>{i.destroy()}))}),(0,t.distinctUntilChanged)()),Jn=e=>n=>{let r=e(n),i,a=r.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>{let n=r.spineItemsManager.getSpineItemIndex(e)??0;return qn(e).pipe((0,t.map)(e=>{if(e)return{...e,itemIndex:n}}))}))),(0,t.startWith)(void 0),(0,t.distinctUntilChanged)(),(0,t.tap)(e=>{i=e}),(0,t.shareReplay)({refCount:!0,bufferSize:1})),o=a,s=a.pipe((0,t.map)(e=>!!e),(0,t.distinctUntilChanged)(),(0,t.filter)(e=>e),(0,t.share)()),c=s.pipe((0,t.switchMap)(()=>o),(0,t.distinctUntilChanged)(),(0,t.filter)(e=>!e),(0,t.share)()),l=a.pipe((0,t.filter)(e=>e?.type===`over`),(0,t.share)()),u=r.context.watch(`rootElement`).pipe((0,t.filter)(F),(0,t.switchMap)(e=>(0,t.fromEvent)(e,`pointerdown`)),(0,t.withLatestFrom)(o),(0,t.map)(([,e])=>e),(0,t.startWith)(void 0),(0,t.shareReplay)({refCount:!0,bufferSize:1}));return(0,t.merge)(o,u).pipe((0,t.takeUntil)(r.$.destroy$)).subscribe(),{...r,selection:{selection$:o,selectionStart$:s,selectionEnd$:c,selectionOver$:l,lastSelectionOnPointerdown$:u,getSelection:()=>i,createOrderedRangeFromSelection:Gn}}},Yn=[{name:`bright`,backgroundColor:`white`},{name:`sepia`,backgroundColor:`#eaddc7`,foregroundColor:`black`},{name:`night`,backgroundColor:`#191717`,foregroundColor:`#f1ebeb`}],Xn=e=>r=>{let i=e(r),a=new t.BehaviorSubject(r.theme??`bright`),o=()=>{let e=Yn.find(e=>e.name===a.value);return`
|
|
179
|
+
`)}}),Et(d),Tt(d),d.hookManager.register(`item.onDocumentCreated`,({documentContainer:e})=>{l(e.style,`opacity`,`0`),f.values.layoutLayerTransition&&l(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&&o(t,`tab-index`,`0`)});let p=d.spineItemsObserver.states$.pipe((0,n.filter)(({isReady:e})=>e),(0,n.tap)(({item:e})=>{let t=e.renderer.documentContainer;t&&l(t.style,`opacity`,`1`)})),m=f.values$.pipe((0,n.filter)(({layoutAutoResize:e})=>e===`container`),(0,n.switchMap)(()=>d.context.watch(`rootElement`)),(0,n.filter)(R),(0,n.switchMap)(e=>k(e)),(0,n.debounceTime)(100),(0,n.filter)(R),(0,n.tap)(()=>{d?.layout()})),h=ot(d);f.watch([`pageHorizontalMargin`,`pageVerticalMargin`]).pipe((0,n.skip)(1),(0,n.tap)(()=>{d.layout()}),(0,n.takeUntil)(d.$.destroy$)).subscribe();let g=d.spine.pages.pipe((0,n.shareReplay)({refCount:!0,bufferSize:1}));return(0,t.merge)(p,h,m,g,Dt(d),Nt(d),wt(d)).pipe((0,n.takeUntil)(d.$.destroy$)).subscribe(),{...d,destroy:()=>{f.destroy(),d.destroy()},settings:f,layout$:d.spine.layout$,layoutInfo$:g,coordinates:at(d)}},Ft=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`,({itemId:e})=>{a.get(e)?.(),a.delete(e)});let o=()=>{r.disconnect(),i.disconnect(),a.clear(),n.destroy()};return{...n,destroy:o}},It=e=>n=>n.pipe((0,t.switchMap)(n=>e.pipe((0,t.filter)(e=>e===`free`),(0,t.first)(),(0,t.map)(()=>n)))),Lt=({navigation$:e,navigationState$:t})=>e.pipe(It(t)),Rt=e=>Lt(e).pipe((0,t.skip)(1)),zt=e=>n=>n.pipe((0,t.takeUntil)(Rt(e))),Bt=e=>e.navigation.navigation$.pipe((0,t.filter)(e=>e.triggeredBy===`user`),It(e.navigation.navigationState$),(0,t.map)(t=>{let n=t.requestedPosition,r=t.requestedVisibleArea;return n&&r?e.navigation.navigationResolver.getBoundaryForPosition(n,r):void 0}),(0,t.filter)(e=>e!==void 0),(0,t.map)(e=>({boundary:e})),(0,t.share)()),Vt=(e,n)=>e.links$.pipe((0,t.tap)(t=>{if(!ne(t.target,`a`)||t.type!==`click`)return;let r=new URL(t.target.href),i=`${r.origin}${r.pathname}`;e.context.manifest.spineItems.some(e=>e.href===i)&&n.goToUrl(r)})),K=i.namespace(`navigation`),Ht=({position:e,spineItem:t,pageHeight:n,pageWidth:r,spineItemLocator:i})=>{let a=new B({x:e.x-r,y:e.y});return t.isUsingVerticalWriting()&&(a=new B({x:e.x,y:e.y+n})),i.getSpineItemClosestPositionFromUnsafePosition(a,t)},Ut=({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=Ht({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})},Wt=({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=Ut({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=Ut({position:l,viewport:s,navigationResolver:r,computedPageTurnDirection:o,spineItemsManager:i,spineLocator:a});return r.getAdjustedPositionForSpread(c)}return r.getAdjustedPositionForSpread(l)},Gt=({position:e,spineItem:t,pageHeight:n,pageWidth:r,spineItemLocator:i})=>{let a=new B({x:e.x+r,y:e.y});return t.isUsingVerticalWriting()&&(a=new B({x:e.x,y:e.y-n})),i.getSpineItemClosestPositionFromUnsafePosition(a,t)},Kt=({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=Gt({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})},qt=({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=Kt({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=Kt({position:l,viewport:s,navigationResolver:r,computedPageTurnDirection:o,spineItemsManager:i,spineLocator:a});return r.getAdjustedPositionForSpread(c)}return r.getAdjustedPositionForSpread(l)},Jt=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=qt({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=Wt({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})}}},Yt=class extends M{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 t.Subject,this.destroy$=this.destroySubject.asObservable()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.destroySubject.next(),this.destroySubject.complete())}},Xt=500,Zt=class extends q{constructor(e,n){super(),this.scrollNavigationController=e,this.lock=n,this.navigationSubject=new t.Subject,this.navigation$=this.navigationSubject.asObservable(),(0,t.merge)(this.scrollNavigationController.userScroll$.pipe((0,t.exhaustMap)(e=>{let n=this.lock();return(0,t.merge)(this.scrollNavigationController.userScroll$,(0,t.of)(e)).pipe((0,t.debounceTime)(Xt,t.animationFrameScheduler),(0,t.first)(),(0,t.tap)(()=>{let e=this.scrollNavigationController.fromScrollPosition(this.scrollNavigationController.scrollPosition);this.navigationSubject.next({animation:!1,type:`scroll`,position:e})}),(0,t.finalize)(()=>{n()}))}))).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}},Qt=n=>n.pagination.state$.pipe((0,t.withLatestFrom)(n.settings.values$),(0,t.map)(([e,{computedPageTurnDirection:t}])=>{let{spineItems:r,readingDirection:i}=n.context.manifest,a=r.length??0,o=e.beginSpineItemIndex===0,s=e.endSpineItemIndex===Math.max(a-1,0),c=e.endSpineItemIndex===Math.max(a-1,0),l=e.beginSpineItemIndex===0,u=e.beginPageIndexInSpineItem===0,d=e.endPageIndexInSpineItem===e.endNumberOfPagesInSpineItem-1;return{canTurnLeft:t!==`vertical`&&!u,canTurnRight:t!==`vertical`&&!d,canGoTopSpineItem:t===`vertical`&&!o,canGoBottomSpineItem:t===`vertical`&&!s,canGoLeftSpineItem:t!==`vertical`&&(i===`ltr`&&!o||i===`rtl`&&!c),canGoRightSpineItem:t!==`vertical`&&(i===`ltr`&&!s||i===`rtl`&&!l)}}),(0,t.distinctUntilChanged)(e.isShallowEqual)),$t=({reader:e,duration:n})=>r=>{let i,a=()=>{i?.(),i=void 0};return r.pipe((0,t.tap)(()=>{i||=e?.navigation.lock()}),(0,t.throttleTime)(n,void 0,{trailing:!0,leading:!0}),(0,t.tap)(a),(0,t.finalize)(a))},en=e=>n=>{let r=e(n),i=Qt(r),a=Bt(r),o=new Jt(r),s=new Yt(r),c=new Zt(r.navigation.scrollNavigationController,r.navigation.lock);(0,t.merge)(Vt(r,o),c.navigation$.pipe((0,t.tap)(e=>{r.navigation.navigate(e)}))).pipe((0,t.takeUntil)(r.$.destroy$)).subscribe();let l=e=>{r.mount(e),n.cfi&&o.goToCfi(n.cfi,{animate:!1})},u=()=>{c.destroy(),r.destroy()};return{...r,mount:l,destroy:u,navigation:{...r.navigation,state$:i,outOfSpineBoundary$:a,throttleLock:({duration:e,trigger:t})=>t.pipe($t({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)}}},tn=(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}},nn=(e,n)=>{let r=e?.itemPageIndex,{itemIndex:i,...a}=n.cfi.parseCfi(e.cfi),o=n.spineItemsManager.get(i);return o?ye().pipe((0,t.withLatestFrom)(o.isReady$),(0,t.map)(([,t])=>{let{node:s=null,offset:c,range:l}=t?n.cfi.resolveCfi({cfi:e.cfi}):{};o.renditionLayout!==`pre-paginated`&&s&&(r=n.spine.locator.spineItemLocator.getSpineItemPageIndexFromNode(s,c??0,o)??r);let u=e?.absolutePageIndex;return r===void 0&&(r=0),u=n.spine.locator._getAbsolutePageIndexFromPageIndex({pageIndex:r,spineItemOrId:o})??e?.absolutePageIndex,{...e,...a,range:l,itemIndex:i,node:s,startOffset:c,absolutePageIndex:u,itemPageIndex:r}})):(0,t.of)({...e,itemIndex:i,...a})},rn=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,n)=>{let r={resource:e,meta:tn(this.reader,e)};return be(()=>{let i=this.reader.spineItemsManager.get(r.meta.itemIndex??0),a=i?.renditionLayout===`reflowable`,o=n.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,t.finalize)(()=>{s&&this.deregisterMemoizedStream(s),setTimeout(()=>{o()},1e3)}));if(s&&c)return c.observerCount++,l(c.consolidate$.pipe((0,t.map)(({resource:e,meta:t})=>({resource:e,meta:t}))));let u=this.reader.spine.layout$.pipe((0,t.debounceTime)(10),(0,t.startWith)(r),(0,t.switchScan)(e=>nn(e.meta,this.reader).pipe((0,t.map)(t=>({...e,meta:t}))),r),(0,t.shareReplay)({refCount:!0,bufferSize:1}));return s&&this.locatorsByKey.set(s,{observerCount:1,consolidate$:u}),l(u)})}}locateResource(e,n){return Array.isArray(e)?be(()=>(0,t.combineLatest)(e.map(e=>this.locate(e,n??{}))).pipe((0,t.defaultIfEmpty)([]))):this.locate(e,n??{})}},an=i.namespace(`spine`),on=({position:e,pageSize:t})=>new tt({...e,left:e.x,top:e.y,width:t.width,height:t.height,bottom:e.y+t.height,right:e.x+t.width}),sn=10,cn=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:f(r,e.layout)}},ln=e=>new t.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<sn;){let t=e[r];if(!t){r=e.length;break}i[r]=cn(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 M{constructor(n,r,i,a,o,s){super({pages:[]}),this.spineLayout=n,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,t.map)(()=>this.fromAbsolutePageIndex(e))),this.layout$=n.layout$.pipe((0,t.withLatestFrom)(s),(0,t.switchMap)(([,{pageSize:e}])=>ln(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:on({pageSize:e,position:c}),layout:new et({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,t.map)(e=>(an.info(`Pages layout`,e),{pages:e})),(0,t.share)()),this.layout$.pipe((0,t.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},un=e=>{if(!e)return;let t=e.indexOf(`#`);if(!(t<0))return e.substring(t+1)||void 0},dn=e=>{try{return decodeURIComponent(e)}catch{return e}},fn=(e,t=[])=>e.flatMap(e=>{let n=[...t,{title:e.title,path:e.path}];return[{chain:n,href:e.href||e.path,anchorId:un(e.href)??un(e.path)},...fn(e.contents,n)]}),pn=e=>{let t=new Map;return e.spineItems.forEach((e,n)=>{t.has(e.href)||t.set(e.href,n)}),t},mn=(e,t)=>{let n=pn(t);return fn(e).map(e=>{let t=Y(e.href),r=n.get(t)??-1;return{...e,hrefWithoutAnchor:t,spineItemIndex:r}})},hn=({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)gn(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},gn=(e,t)=>e===t||e.endsWith(t)||t.endsWith(e),_n=(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},vn=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},yn=({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},bn=({rangeToTest:e,upperBoundRange:t})=>e.compareBoundaryPoints(Range.START_TO_START,t)<0,xn=e=>{let t=e.createRange(),n=e.body??e.documentElement;if(n)return t.selectNodeContents(n),t.collapse(!1),t},Sn=({anchorNode:e,nextPageNode:t})=>e===t||e.contains(t),Cn=({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?yn({doc:a,node:o,offset:s}):void 0:xn(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(dn(e.anchorId));if(!t||l&&Sn({anchorNode:t,nextPageNode:o}))continue;let n=a.createRange();n.setStartBefore(t),n.collapse(!0),bn({rangeToTest:n,upperBoundRange:c})&&(!d||n.compareBoundaryPoints(Range.START_TO_START,d)>0)&&(u=e.chain,d=n)}let p=u??f;return p?vn(p):void 0},wn=({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)},Tn=({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)_n(r,e.hrefWithoutAnchor)&&(a<e.spineItemIndex||wn({candidate:e,hrefHasAnchor:i})||(o=e.chain));return o},En=(e,t,n)=>{let{href:r}=n,i=Tn({href:r,tocIndex:t,manifest:e});return i?vn(i):void 0},Dn=(e,t)=>e?e.spineItems.reduce((n,r)=>(n[r.id]=En(e,t,r),n),{}):{},On=(e,t,n)=>e+t*n,kn=(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))},An=(e,n,r,i,a,o)=>a.isReady$.pipe((0,t.first)(),(0,t.withLatestFrom)(e.layoutInfo$),(0,t.map)(([t,s])=>{let c=o.renditionLayout===`pre-paginated`,l=o.spineItems.length||0,u=o.spineItems.slice(0,n).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[n]?.progressionWeight??(d+1)/f,h=(r+1)*(m/p);!c&&a.renditionLayout===`reflowable`&&!t&&(h=0);let g=u+h;return o.renditionFlow===`scrolled-continuous`&&(h=t?kn(e,i,a):0,g=On(u,m,h)),n===l-1&&r===p-1&&g>.99?1:g})),jn=({beginItem:e,endItem:t,paginationInfo:n,chaptersData:r,pagesState:i})=>{let a=e&&n.beginPageIndexInSpineItem!==void 0?J.fromSpineItemPageIndex(i,e.index,n.beginPageIndexInSpineItem):void 0,o=a?J.fromNextPageWithinSameSpineItem(i,a):void 0,s=t&&n.endPageIndexInSpineItem!==void 0?J.fromSpineItemPageIndex(i,t.index,n.endPageIndexInSpineItem):void 0,c=s?J.fromNextPageWithinSameSpineItem(i,s):void 0,l=e?Cn({node:a?.firstVisibleNode?.node,offset:a?.firstVisibleNode?.offset,candidates:r.tocCandidatesBySpineHref.get(e.item.href)??[],spineItem:e,nextPageEntry:o}):void 0,u=t?Cn({node:s?.firstVisibleNode?.node,offset:s?.firstVisibleNode?.offset,candidates:r.tocCandidatesBySpineHref.get(t.item.href)??[],spineItem:t,nextPageEntry:c}):void 0;return{beginChapterInfo:l??(e?r.chaptersInfo[e.item.id]:void 0),beginSpineItemReadingDirection:e?.readingDirection,beginAbsolutePageIndex:a?.absolutePageIndex,endChapterInfo:u??(t?r.chaptersInfo[t.item.id]:void 0),endSpineItemReadingDirection:t?.readingDirection,endAbsolutePageIndex:s?.absolutePageIndex}},Mn=({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}},Nn=(e,t)=>e.numberOfTotalPages!==t.numberOfTotalPages||e.numberOfPagesPerItems.length!==t.numberOfPagesPerItems.length?!1:e.numberOfPagesPerItems.every((e,n)=>e===t.numberOfPagesPerItems[n]),Pn=({reader:e,paginationInfo:n,navigationPosition:r,manifest:i})=>{let a=e.spineItemsManager.get(n.endSpineItemIndex);return a?An(e,n.endSpineItemIndex??0,n.endPageIndexInSpineItem||0,r,a,i):(0,t.of)(0)},Fn=e=>(0,t.of)(e.context.manifest).pipe((0,t.map)(e=>{let t=mn(e.nav?.toc??[],e);return{tocCandidatesBySpineHref:hn({manifest:e,tocIndex:t}),chaptersInfo:Dn(e,t)}})),In=e=>({beginSpineItemIndex:e.beginSpineItemIndex,beginPageIndexInSpineItem:e.beginPageIndexInSpineItem,endSpineItemIndex:e.endSpineItemIndex,endPageIndexInSpineItem:e.endPageIndexInSpineItem}),Ln=n=>{let r=n.pagination.state$,i=n.spine.pages.layout$,a=Fn(n).pipe((0,t.shareReplay)({bufferSize:1,refCount:!0})),o=(0,t.combineLatest)([r.pipe((0,t.map)(In),(0,t.distinctUntilChanged)(e.isShallowEqual)),a,i]).pipe((0,t.map)(([e,t,r])=>jn({beginItem:n.spineItemsManager.get(e.beginSpineItemIndex),endItem:n.spineItemsManager.get(e.endSpineItemIndex),paginationInfo:e,chaptersData:t,pagesState:r})),(0,t.shareReplay)({bufferSize:1,refCount:!0})),s=(0,t.combineLatest)([r,n.settings.watch([`computedSpreadMode`]).pipe((0,t.map)(e=>e.computedSpreadMode??!1),(0,t.distinctUntilChanged)()),o,(0,t.combineLatest)([i,n.spineItemsManager.items$]).pipe((0,t.map)(([e,t])=>Mn({items:t,pagesState:e})),(0,t.distinctUntilChanged)(Nn))]).pipe((0,t.map)(([e,t,n,r])=>({...e,...n,isUsingSpread:t,...r}))),c=Lt(n.navigation).pipe((0,t.map)(({position:e})=>e),(0,t.distinctUntilChanged)(e.isShallowEqual));return(0,t.combineLatest)([s,(0,t.combineLatest)([r,n.layout$,c]).pipe((0,t.switchMap)(([e,t,r])=>Pn({reader:n,paginationInfo:e,navigationPosition:r,manifest:n.context.manifest})),(0,t.map)(e=>({percentageEstimateOfBook:e})))]).pipe((0,t.map)(([e,t])=>({...e,...t})),(0,t.distinctUntilChanged)(e.isShallowEqual),(0,t.auditTime)(5))},Rn=e=>n=>{let r=e(n),a=new t.BehaviorSubject({...r.pagination.state,beginChapterInfo:void 0,beginCfi:void 0,beginPageIndexInSpineItem:void 0,isUsingSpread:!1,beginAbsolutePageIndex:0,endAbsolutePageIndex:0,numberOfTotalPages:0,beginSpineItemReadingDirection:void 0,beginSpineItemIndex:void 0,endCfi:void 0,endChapterInfo:void 0,endSpineItemReadingDirection:void 0,percentageEstimateOfBook:0}),o=new rn(r),s=Ln(r).pipe((0,t.tap)(e=>i.log(`Pagination`,e))).subscribe(a);return{...r,locateResource:o.locateResource.bind(o),destroy:()=>{s.unsubscribe(),r.destroy()},pagination:{...r.pagination,get state(){return a.value},get state$(){return a}}}},zn=(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){i.warn(`Failed to create range from selection`,n,{anchor:e,focus:t})}return n}},Bn=({selection:e,spineItem:t})=>{let{anchorNode:n,anchorOffset:r,focusNode:a,focusOffset:o}=e;if(!(!n||!a))try{return zn({node:n,offset:r},{node:a,offset:o})}catch(n){i.warn(`Failed to create range from selection`,n,{selection:e,spineItem:t});return}},Vn=class extends q{constructor(e){super();let n=e.contentDocument||e.contentWindow?.document;if(!n)this.selectionChange$=t.NEVER,this.selectionOver$=t.NEVER;else{let r=j(n.body,{childList:!0,subtree:!0}).pipe((0,t.filter)(e=>!!e.find(e=>e.type===`childList`&&e.removedNodes.length))),i=e.parentElement?j(e.parentElement,{childList:!0}).pipe((0,t.filter)(t=>!!t.find(t=>Array.from(t.removedNodes).includes(e)))):(0,t.of)(null);this.selectionChange$=(0,t.merge)((0,t.fromEvent)(n,`selectionchange`),r).pipe((0,t.map)(()=>n.getSelection()),(0,t.takeUntil)((0,t.merge)(i,this.destroy$)),(0,t.endWith)(null)),this.selectionOver$=(0,t.fromEvent)(n,`pointerdown`).pipe((0,t.switchMap)(()=>(0,t.merge)((0,t.fromEvent)(n,`pointerup`),(0,t.fromEvent)(n,`pointercancel`),(0,t.fromEvent)(n,`contextmenu`)).pipe((0,t.first)(),(0,t.delay)(0),(0,t.map)(e=>{let t=n.getSelection();return t&&!t.isCollapsed?[e,t]:void 0}),(0,t.filter)(R))),(0,t.takeUntil)((0,t.merge)(i,this.destroy$)))}}},Hn=e=>e.watch(`isLoaded`).pipe((0,t.switchMap)(()=>{let n=e.renderer.getDocumentFrame(),r=n?.contentDocument||n?.contentWindow?.document;if(!n||!r)return t.NEVER;let i=new Vn(n);return(0,t.merge)(i.selectionChange$.pipe((0,t.map)(e=>{if(e?.toString())return{type:`change`,selection:e}})),i.selectionOver$.pipe((0,t.map)(([e,t])=>({type:`over`,event:e,selection:t})))).pipe((0,t.takeUntil)(e.unloaded$),(0,t.endWith)(void 0),(0,t.finalize)(()=>{i.destroy()}))}),(0,t.distinctUntilChanged)()),Un=e=>n=>{let r=e(n),i,a=r.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>{let n=r.spineItemsManager.getSpineItemIndex(e)??0;return Hn(e).pipe((0,t.map)(e=>{if(e)return{...e,itemIndex:n}}))}))),(0,t.startWith)(void 0),(0,t.distinctUntilChanged)(),(0,t.tap)(e=>{i=e}),(0,t.shareReplay)({refCount:!0,bufferSize:1})),o=a,s=a.pipe((0,t.map)(e=>!!e),(0,t.distinctUntilChanged)(),(0,t.filter)(e=>e),(0,t.share)()),c=s.pipe((0,t.switchMap)(()=>o),(0,t.distinctUntilChanged)(),(0,t.filter)(e=>!e),(0,t.share)()),l=a.pipe((0,t.filter)(e=>e?.type===`over`),(0,t.share)()),u=r.context.watch(`rootElement`).pipe((0,t.filter)(R),(0,t.switchMap)(e=>(0,t.fromEvent)(e,`pointerdown`)),(0,t.withLatestFrom)(o),(0,t.map)(([,e])=>e),(0,t.startWith)(void 0),(0,t.shareReplay)({refCount:!0,bufferSize:1}));return(0,t.merge)(o,u).pipe((0,t.takeUntil)(r.$.destroy$)).subscribe(),{...r,selection:{selection$:o,selectionStart$:s,selectionEnd$:c,selectionOver$:l,lastSelectionOnPointerdown$:u,getSelection:()=>i,createOrderedRangeFromSelection:Bn}}},Wn=[{name:`bright`,backgroundColor:`white`},{name:`sepia`,backgroundColor:`#eaddc7`,foregroundColor:`black`},{name:`night`,backgroundColor:`#191717`,foregroundColor:`#f1ebeb`}],Gn=e=>r=>{let i=e(r),a=new t.BehaviorSubject(r.theme??`bright`),o=()=>{let e=Wn.find(e=>e.name===a.value);return`
|
|
180
180
|
body {
|
|
181
181
|
${e===void 0?``:`background-color: ${e.backgroundColor} !important;`}
|
|
182
182
|
}
|
|
@@ -186,19 +186,15 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
186
186
|
color: ${e.foregroundColor};
|
|
187
187
|
}
|
|
188
188
|
`:``}
|
|
189
|
-
`},s=({container:e})=>{let t=Yn.find(e=>e.name===a.value);return t&&l(e.style,`background-color`,t.backgroundColor),()=>{}},c=()=>{i.spineItemsManager.items.forEach(e=>{let t=e.renderer.getDocumentFrame();t&&C(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&&C(e,`prose-reader-theme`,o())}}),i.spineItemsManager.items$.pipe((0,n.tap)(e=>e.map(({element:e})=>s({container:e}))),(0,n.takeUntil)(i.$.destroy$)).subscribe(),a.pipe((0,n.tap)(()=>{c()}),(0,n.takeUntil)(i.$.destroy$)).subscribe(),{...i,theme:{set:e=>{e!==a.value&&a.next(e)},get:()=>a.value,$:{theme$:a.asObservable()}}}},Zn=e=>t=>{let n=e(t),r=e=>!!(x(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 Qn=e=>t=>e(t),$n=(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)}},er=(e,t,n)=>{l(n.style,`transform-origin`,`0 0`);let r=`translate3d(${t.x}px, ${t.y}px, 0px)`,i=`scale(${e})`;l(n.style,`transform`,`${r} ${i}`)},tr=(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)}},nr=class{constructor(e){this.x=e.x,this.y=e.y}},rr=class extends nr{},ir=class extends nr{constructor(...e){super(...e),this.__symbol=Symbol(`UnboundScrollPosition`)}},ar=class extends k{constructor(e,n,r,i,a){super({element:void 0}),this.viewport=e,this.settings=n,this.hookManager=r,this.spine=i,this.context=a,this.navigateSubject=new t.Subject,this.scrollingSubject=new t.BehaviorSubject(!1),this.applyNavigationPosition=({position:e})=>{let n=this.value.element;if(!n)return;let r=this.fromSpinePosition(e);Math.round(r.x)===n.scrollLeft&&Math.round(r.y)===n.scrollTop||(this.scrollingSubject.next(!0),n.scrollTo({left:r.x,top:r.y,behavior:`instant`}),(0,t.timer)(1).pipe((0,t.tap)(()=>{this.scrollingSubject.next(!1)}),(0,t.takeUntil)((0,t.merge)(this.scrollingSubject.pipe((0,t.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(E([`rootElement`]),(0,t.tap)(({rootElement:e})=>{if(!e)return;let t=document.createElement(`div`);t.setAttribute(`data-${ht}`,``),t.appendChild(this.viewport.value.element),e.appendChild(t),this.update({element:t})})),s=(0,t.combineLatest)([n.watch([`computedPageTurnMode`]),this.watch(`element`)]).pipe((0,t.tap)(([{computedPageTurnMode:e},t])=>{t&&(e===`scrollable`?l(t.style,`display`,`block`):l(t.style,`display`,`contents`))})),c=this.navigateSubject.pipe((0,t.tap)(this.applyNavigationPosition));this.isNavigating$=this.scrollingSubject.asObservable();let u=(0,t.combineLatest)([(0,t.merge)(i.element$.pipe((0,t.filter)(F),(0,t.switchMap)(e=>D(e))),i.element$.pipe((0,t.filter)(F),(0,t.switchMap)(e=>(0,t.fromEvent)(e,`scroll`))),i.spineItemsObserver.itemResize$).pipe((0,t.switchMap)(()=>(0,t.timer)(10).pipe((0,t.map)(()=>!1),(0,t.startWith)(!0))),(0,t.distinctUntilChanged)(),(0,t.startWith)(!1)),this.isNavigating$]).pipe((0,t.map)(([e,t])=>e||t),(0,t.shareReplay)(1));this.userScroll$=this.watch(`element`).pipe((0,t.filter)(F),(0,t.switchMap)(e=>n.watch([`computedPageTurnMode`]).pipe((0,t.switchMap)(({computedPageTurnMode:n})=>n===`controlled`?t.NEVER:(0,t.fromEvent)(e,`scroll`).pipe((0,t.withLatestFrom)(u),(0,t.filter)(([,e])=>!e),(0,t.map)(([e])=>e))))),(0,t.share)()),(0,t.merge)(o,s,c).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}fromScrollPosition(e){let t=this.viewport.scaleFactor;return new H({x:e.x/t,y:e.y/t})}fromSpinePosition(e){let t=this.viewport.scaleFactor;return new rr({x:e.x*t,y:e.y*t})}get scrollPosition(){let e=this.value.element;return new rr({x:e?.scrollLeft??0,y:e?.scrollTop??0})}},or=(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 ir({x:f-a/2+r,y:p-o/2+i})},sr=(e,t)=>{let n=t.viewport,r=t.navigation.scrollNavigationController,i=n.value.element,a=r.value.element,s=r.value.element,c=Math.round(n.scaleFactor*100)/100,u=i.offsetLeft,d=i.offsetTop,f=or(a??y(),c,e,u,d),p=e<1?`down`:`up`;s&&o(s,`data-${U}-zooming-direction`,p),e<1?l(i.style,`transform-origin`,`top`):e>1&&l(i.style,`transform-origin`,`${u}px ${d}px`),l(i.style,`transform`,`scale(${e})`);let m=r.fromScrollPosition(f);t.navigation.navigate({position:m})},X=200,cr=class extends k{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new t.Subject,this.exitSubject=new t.Subject,(0,t.merge)(this.enterSubject.pipe((0,t.switchMap)(e=>{let{scale:n=1,animate:r=!1}=e??{},i=this.reader.viewport.value.element;o(this.viewport.element,`data-${U}-zooming`,`true`);let a=this.scrollNavigationController.value.element;return a&&o(a,`data-${U}-zooming`,this.isControlled?`false`:`true`),r&&this.isControlled&&l(i.style,`transition`,`transform ${X}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(n),n!==1&&this.isControlled?(0,t.timer)(e?.animate?X:0).pipe((0,t.tap)(()=>{this.reader.layout()})):t.EMPTY})),this.exitSubject.pipe((0,t.switchMap)(e=>{let n=this.reader.viewport.value.element;o(this.viewport.element,`data-${U}-zooming`,`false`);let r=this.scrollNavigationController.value.element;return r&&(s(r,`data-${U}-zooming-direction`),o(r,`data-${U}-zooming`,`false`)),e?.animate&&this.isControlled&&l(n.style,`transition`,`transform ${X}ms`),this.updateZoom(1,{x:0,y:0}),u(n.style,`transform`),this.mergeCompare({isZooming:!1}),(0,t.timer)(e?.animate?X:0).pipe((0,t.tap)(()=>{let e=this.reader.viewport.value.element;u(e.style,`transform-origin`),u(e.style,`transition`),this.isControlled&&this.reader.layout()}),(0,t.takeUntil)(this.enterSubject))}))).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,t){this.isControlled&&(u(this.viewport.element.style,`transition`),this.updateZoom(this.value.currentScale,e,{constraints:t?.constrain===`within-viewport`?(...e)=>$n(...e,this.reader.viewport):void 0}))}scaleAt(e,t){if(!this.value.isZooming)return;u(this.viewport.element.style,`transition`);let n=Math.ceil(e*100)/100;this.updateZoom(n,void 0,{constraints:t?.constrain===`within-viewport`?(...e)=>$n(...e,this.reader.viewport):void 0})}updateZoom(e,t,n){if(this.isControlled){let r=t||tr(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?er(e,t,this.viewport.element):sr(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}},lr=e=>t=>{let n=e(t),r=new cr(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}}}},ur=e=>(0,r.generate)({spineIndex:e.index,spineId:e.id}),dr=({nodeOrRange:e,offset:t,item:n})=>{let i=`ownerDocument`in e?e.ownerDocument:e.startContainer.ownerDocument;return!i?.documentElement||e===i?ur(n):ie(e)?(0,r.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,r.generate)({node:e,offset:t,spineIndex:n.index,spineId:n.id})},fr=({spineItem:e,pageNode:t})=>dr({nodeOrRange:t.node,offset:t.offset,item:e}).trim(),pr=(e,t)=>dr({nodeOrRange:e,item:t}),mr=e=>e.index.toString(),hr=e=>e[0]?.index===6&&e.length>1,gr=e=>(0,r.isIndirectionOnly)((0,r.parse)(e)),_r=e=>Array.isArray(e)?e[0]&&hr(e[0])?e[0]:void 0:e.parent[0]&&hr(e.parent[0])?e.parent[0]:void 0,vr=e=>{let t=(0,r.parse)(e),n=((_r(t)??[])[1]?.index??2)/2-1,i=(0,r.isParsedCfiRange)(t);return{isCfiRange:i,itemIndex:n,offset:(i?t.end.at(-1)?.at(-1)?.offset:t.at(-1)?.at(-1)?.offset)??0}},yr=({cfi:e,spineItemsManager:t})=>{let{itemIndex:n,...a}=vr(e),o=t.get(n);if(!o)return{...a,itemIndex:n,node:null};let s=o.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){let t=s.contentWindow?.document;if(t)try{let i=(0,r.resolve)(e,t,{throwOnError:!0});return{...a,itemIndex:n,node:i.isRange?i.node?.startContainer??null:i.node??null,isCfiRange:i.isRange,range:i.isRange?i.node:void 0,offset:Array.isArray(i.offset)?i.offset.at(-1):i.offset,spineItem:o}}catch(t){return i.warn(`Error resolving cfi: ${e}.`),i.warn(t),{...a,spineItem:o,itemIndex:n,node:null}}}return{...a,itemIndex:n,spineItem:o,node:null}},br=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=>vr(this.transformForResolve(e)),this.getSpineItemFromCfi=e=>{let{itemIndex:t}=this.parseCfi(e);if(t!==void 0)return this.spineItemsManager.get(t)},this.isRootCfi=e=>gr(e),this.generateRootCfi=e=>this.transformGeneratedCfi({cfi:ur(e),spineItem:e}),this.generateCfiForSpineItemPage=({spineItem:e,pageNode:t})=>this.transformGeneratedCfi({cfi:fr({spineItem:e,pageNode:t}),spineItem:e}),this.generateCfiFromRange=(e,t)=>this.transformGeneratedCfi({cfi:pr(e,t),spineItem:t}),this.resolveCfi=e=>yr({...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}},xr=e=>e?.spineItems.every(t=>(t.renditionLayout??e.renditionLayout)===`pre-paginated`),Sr=class{constructor(){this.navigationSubject=new t.ReplaySubject(1),this.positionSubject=new t.ReplaySubject(1),this.viewportStateSubject=new t.BehaviorSubject(`free`),this.paginationSubject=new t.ReplaySubject(1),this.pagination$=this.paginationSubject.asObservable(),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe((0,t.filter)(e=>e===`free`)),this.viewportBusy$=this.viewportState$.pipe((0,t.filter)(e=>e===`busy`)),this.navigation$=this.navigationSubject.asObservable(),this.position$=this.positionSubject.asObservable()}},Cr=class extends k{constructor(){super({assumedRenditionLayout:`reflowable`}),this.bridgeEvent=new Sr,this.manifest$=this.pipe((0,n.map)(e=>e.manifest),(0,n.filter)(F),(0,n.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:xr(n),assumedRenditionLayout:n?.renditionLayout??`reflowable`}};this.mergeCompare(r)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest?.readingDirection}},wr=class extends k{constructor(n,r){super({supportedPageTurnAnimation:[`fade`,`none`,`slide`],supportedPageTurnMode:[`controlled`,`scrollable`],supportedPageTurnDirection:[`horizontal`,`vertical`],supportedComputedPageTurnDirection:[`horizontal`,`vertical`]}),(0,t.combineLatest)([n.watch([`manifest`,`hasVerticalWriting`]),r.watch([`computedPageTurnMode`])]).pipe((0,t.map)(([{manifest:e,hasVerticalWriting:t},{computedPageTurnMode:n}])=>({hasVerticalWriting:t,renditionFlow:e?.renditionFlow,renditionLayout:e?.renditionLayout,computedPageTurnMode:n})),(0,t.distinctUntilChanged)(e.isShallowEqual),(0,t.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,t.takeUntil)(this.destroy$)).subscribe(this.next.bind(this))}},Tr=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,n,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:n,ref:r,abortController:i,destroyFn:()=>(i.abort(),(0,t.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,n,r){return new t.Observable(t=>{let i=new AbortController;return this.executeAsync(e,n,r,i.signal).then(e=>{t.next(e),t.complete()},e=>t.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,n,r){let i=this._hookExecutions.filter(t=>r&&t.ref===r||e===t.name&&(!n||n&&n===t.id));return this._hookExecutions=this._hookExecutions.filter(e=>!i.includes(e)),(0,t.combineLatest)(i.map(({destroyFn:e})=>e()))}},Er=`[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}`,Dr=e=>({x:-e.x,y:-e.y}),Or=e=>e instanceof DOMMatrix?new V({x:-e.e,y:-e.f}):new V({x:-e.x,y:-e.y}),kr=i.namespace(`navigation/ControlledNavigationController`),Ar=class extends q{constructor(n,r,i,a,o){super(),this.settings=n,this.hookManager=r,this.context=i,this.spine=a,this.viewport=o,this.navigateSubject=new t.Subject,this.element$=new t.BehaviorSubject(document.createElement(`div`)),this.isActive=()=>this.settings.values.computedPageTurnMode===`controlled`,this.getNavigationVisibleArea=()=>this.viewport.absoluteViewport;let s=this.spine.element$.pipe((0,t.filter)(F),(0,t.withLatestFrom)(this.element$),(0,t.tap)(([e,t])=>{t.style.cssText=`
|
|
189
|
+
`},s=({container:e})=>{let t=Wn.find(e=>e.name===a.value);return t&&l(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,n.tap)(e=>e.map(({element:e})=>s({container:e}))),(0,n.takeUntil)(i.$.destroy$)).subscribe(),a.pipe((0,n.tap)(()=>{c()}),(0,n.takeUntil)(i.$.destroy$)).subscribe(),{...i,theme:{set:e=>{e!==a.value&&a.next(e)},get:()=>a.value,$:{theme$:a.asObservable()}}}},Kn=e=>t=>{let n=e(t),r=e=>!!(S(e)&&(e.nodeName===`a`?e:e.closest(`a`))?.getAttribute(`href`)),i=(e,t,r)=>{let i=r.replace("${id}",n.id);return C(e,`${t}-${n.id}`,i)};return{...n,utils:{isOrIsWithinValidLink:r,injectScopedCSS:i}}};navigator.userAgent.indexOf(``)>-1&&navigator.userAgent.indexOf(`Chrome`);var qn=e=>t=>e(t),Jn=(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)}},Yn=(e,t,n)=>{l(n.style,`transform-origin`,`0 0`);let r=`translate3d(${t.x}px, ${t.y}px, 0px)`,i=`scale(${e})`;l(n.style,`transform`,`${r} ${i}`)},Xn=(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)}},Zn=class{constructor(e){this.x=e.x,this.y=e.y}},Qn=class extends Zn{},$n=class extends Zn{constructor(...e){super(...e),this.__symbol=Symbol(`UnboundScrollPosition`)}},er=class extends M{constructor(e,n,r,i,a){super({element:void 0}),this.viewport=e,this.settings=n,this.hookManager=r,this.spine=i,this.context=a,this.navigateSubject=new t.Subject,this.scrollingSubject=new t.BehaviorSubject(!1),this.applyNavigationPosition=({position:e})=>{let n=this.value.element;if(!n)return;let r=this.fromSpinePosition(e);Math.round(r.x)===n.scrollLeft&&Math.round(r.y)===n.scrollTop||(this.scrollingSubject.next(!0),n.scrollTo({left:r.x,top:r.y,behavior:`instant`}),(0,t.timer)(1).pipe((0,t.tap)(()=>{this.scrollingSubject.next(!1)}),(0,t.takeUntil)((0,t.merge)(this.scrollingSubject.pipe((0,t.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,t.tap)(({rootElement:e})=>{if(!e)return;let t=document.createElement(`div`);t.setAttribute(`data-${pt}`,``),t.appendChild(this.viewport.value.element),e.appendChild(t),this.update({element:t})})),s=(0,t.combineLatest)([n.watch([`computedPageTurnMode`]),this.watch(`element`)]).pipe((0,t.tap)(([{computedPageTurnMode:e},t])=>{t&&(e===`scrollable`?l(t.style,`display`,`block`):l(t.style,`display`,`contents`))})),c=this.navigateSubject.pipe((0,t.tap)(this.applyNavigationPosition));this.isNavigating$=this.scrollingSubject.asObservable();let u=(0,t.combineLatest)([(0,t.merge)(i.element$.pipe((0,t.filter)(R),(0,t.switchMap)(e=>k(e))),i.element$.pipe((0,t.filter)(R),(0,t.switchMap)(e=>(0,t.fromEvent)(e,`scroll`))),i.spineItemsObserver.itemResize$).pipe((0,t.switchMap)(()=>(0,t.timer)(10).pipe((0,t.map)(()=>!1),(0,t.startWith)(!0))),(0,t.distinctUntilChanged)(),(0,t.startWith)(!1)),this.isNavigating$]).pipe((0,t.map)(([e,t])=>e||t),(0,t.shareReplay)(1));this.userScroll$=this.watch(`element`).pipe((0,t.filter)(R),(0,t.switchMap)(e=>n.watch([`computedPageTurnMode`]).pipe((0,t.switchMap)(({computedPageTurnMode:n})=>n===`controlled`?t.NEVER:(0,t.fromEvent)(e,`scroll`).pipe((0,t.withLatestFrom)(u),(0,t.filter)(([,e])=>!e),(0,t.map)(([e])=>e))))),(0,t.share)()),(0,t.merge)(o,s,c).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}destroy(){super.destroy(),this.value.element?.remove()}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 Qn({x:e.x*t,y:e.y*t})}get scrollPosition(){let e=this.value.element;return new Qn({x:e?.scrollLeft??0,y:e?.scrollTop??0})}},tr=(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 $n({x:f-a/2+r,y:p-o/2+i})},nr=(e,t)=>{let n=t.viewport,r=t.navigation.scrollNavigationController,i=n.value.element,a=r.value.element,s=r.value.element,c=Math.round(n.scaleFactor*100)/100,u=i.offsetLeft,d=i.offsetTop,f=tr(a??b(),c,e,u,d),p=e<1?`down`:`up`;s&&o(s,`data-${G}-zooming-direction`,p),e<1?l(i.style,`transform-origin`,`top`):e>1&&l(i.style,`transform-origin`,`${u}px ${d}px`),l(i.style,`transform`,`scale(${e})`);let m=r.fromScrollPosition(f);t.navigation.navigate({position:m})},X=200,rr=class extends M{constructor(e){super({isZooming:!1,currentScale:1,currentPosition:{x:0,y:0}}),this.reader=e,this.enterSubject=new t.Subject,this.exitSubject=new t.Subject,(0,t.merge)(this.enterSubject.pipe((0,t.switchMap)(e=>{let{scale:n=1,animate:r=!1}=e??{},i=this.reader.viewport.value.element;o(this.viewport.element,`data-${G}-zooming`,`true`);let a=this.scrollNavigationController.value.element;return a&&o(a,`data-${G}-zooming`,this.isControlled?`false`:`true`),r&&this.isControlled&&l(i.style,`transition`,`transform ${X}ms`),this.mergeCompare({isZooming:!0,currentScale:1,currentPosition:{x:0,y:0}}),this.updateZoom(n),n!==1&&this.isControlled?(0,t.timer)(e?.animate?X:0).pipe((0,t.tap)(()=>{this.reader.layout()})):t.EMPTY})),this.exitSubject.pipe((0,t.switchMap)(e=>{let n=this.reader.viewport.value.element;o(this.viewport.element,`data-${G}-zooming`,`false`);let r=this.scrollNavigationController.value.element;return r&&(s(r,`data-${G}-zooming-direction`),o(r,`data-${G}-zooming`,`false`)),e?.animate&&this.isControlled&&l(n.style,`transition`,`transform ${X}ms`),this.updateZoom(1,{x:0,y:0}),u(n.style,`transform`),this.mergeCompare({isZooming:!1}),(0,t.timer)(e?.animate?X:0).pipe((0,t.tap)(()=>{let e=this.reader.viewport.value.element;u(e.style,`transform-origin`),u(e.style,`transition`),this.isControlled&&this.reader.layout()}),(0,t.takeUntil)(this.enterSubject))}))).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}enter(e){this.enterSubject.next(e)}exit(e){this.exitSubject.next(e)}move(e,t){this.isControlled&&(u(this.viewport.element.style,`transition`),this.updateZoom(this.value.currentScale,e,{constraints:t?.constrain===`within-viewport`?(...e)=>Jn(...e,this.reader.viewport):void 0}))}scaleAt(e,t){if(!this.value.isZooming)return;u(this.viewport.element.style,`transition`);let n=Math.ceil(e*100)/100;this.updateZoom(n,void 0,{constraints:t?.constrain===`within-viewport`?(...e)=>Jn(...e,this.reader.viewport):void 0})}updateZoom(e,t,n){if(this.isControlled){let r=t||Xn(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?Yn(e,t,this.viewport.element):nr(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}},ir=e=>t=>{let n=e(t),r=new rr(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}}}},ar=e=>(0,r.generate)({spineIndex:e.index,spineId:e.id}),or=({nodeOrRange:e,offset:t,item:n})=>{let i=`ownerDocument`in e?e.ownerDocument:e.startContainer.ownerDocument;return!i?.documentElement||e===i?ar(n):re(e)?(0,r.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,r.generate)({node:e,offset:t,spineIndex:n.index,spineId:n.id})},sr=({spineItem:e,pageNode:t})=>or({nodeOrRange:t.node,offset:t.offset,item:e}).trim(),cr=(e,t)=>or({nodeOrRange:e,item:t}),lr=e=>e.index.toString(),ur=e=>e[0]?.index===6&&e.length>1,dr=e=>(0,r.isIndirectionOnly)((0,r.parse)(e)),fr=e=>Array.isArray(e)?e[0]&&ur(e[0])?e[0]:void 0:e.parent[0]&&ur(e.parent[0])?e.parent[0]:void 0,pr=e=>{let t=(0,r.parse)(e),n=((fr(t)??[])[1]?.index??2)/2-1,i=(0,r.isParsedCfiRange)(t);return{isCfiRange:i,itemIndex:n,offset:(i?t.end.at(-1)?.at(-1)?.offset:t.at(-1)?.at(-1)?.offset)??0}},mr=({cfi:e,spineItemsManager:t})=>{let{itemIndex:n,...a}=pr(e),o=t.get(n);if(!o)return{...a,itemIndex:n,node:null};let s=o.renderer.getDocumentFrame();if(s instanceof HTMLIFrameElement){let t=s.contentWindow?.document;if(t)try{let i=(0,r.resolve)(e,t,{throwOnError:!0});return{...a,itemIndex:n,node:i.isRange?i.node?.startContainer??null:i.node??null,isCfiRange:i.isRange,range:i.isRange?i.node:void 0,offset:Array.isArray(i.offset)?i.offset.at(-1):i.offset,spineItem:o}}catch(t){return i.warn(`Error resolving cfi: ${e}.`),i.warn(t),{...a,spineItem:o,itemIndex:n,node:null}}}return{...a,itemIndex:n,spineItem:o,node:null}},hr=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=>pr(this.transformForResolve(e)),this.getSpineItemFromCfi=e=>{let{itemIndex:t}=this.parseCfi(e);if(t!==void 0)return this.spineItemsManager.get(t)},this.isRootCfi=e=>dr(e),this.generateRootCfi=e=>this.transformGeneratedCfi({cfi:ar(e),spineItem:e}),this.generateCfiForSpineItemPage=({spineItem:e,pageNode:t})=>this.transformGeneratedCfi({cfi:sr({spineItem:e,pageNode:t}),spineItem:e}),this.generateCfiFromRange=(e,t)=>this.transformGeneratedCfi({cfi:cr(e,t),spineItem:t}),this.resolveCfi=e=>mr({...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}},gr=e=>e.spineItems.every(t=>(t.renditionLayout??e.renditionLayout)===`pre-paginated`),_r=class{constructor(){this.navigationSubject=new t.ReplaySubject(1),this.positionSubject=new t.ReplaySubject(1),this.viewportStateSubject=new t.BehaviorSubject(`free`),this.paginationSubject=new t.ReplaySubject(1),this.pagination$=this.paginationSubject.asObservable(),this.viewportState$=this.viewportStateSubject.asObservable(),this.viewportFree$=this.viewportState$.pipe((0,t.filter)(e=>e===`free`)),this.viewportBusy$=this.viewportState$.pipe((0,t.filter)(e=>e===`busy`)),this.navigation$=this.navigationSubject.asObservable(),this.position$=this.positionSubject.asObservable()}},vr=class extends M{constructor(e){super({manifest:e,assumedRenditionLayout:e.renditionLayout??`reflowable`,isFullyPrePaginated:gr(e)}),this.bridgeEvent=new _r,this.isRTL=()=>this.value.manifest.readingDirection===`rtl`}update(e){this.mergeCompare(e)}get manifest(){return this.value.manifest}get readingDirection(){return this.manifest.readingDirection}},yr=class extends M{constructor(n,r){super({supportedPageTurnAnimation:[`fade`,`none`,`slide`],supportedPageTurnMode:[`controlled`,`scrollable`],supportedPageTurnDirection:[`horizontal`,`vertical`],supportedComputedPageTurnDirection:[`horizontal`,`vertical`]}),(0,t.combineLatest)([n.watch([`hasVerticalWriting`]),r.watch([`computedPageTurnMode`])]).pipe((0,t.map)(([{hasVerticalWriting:e},{computedPageTurnMode:t}])=>({hasVerticalWriting:e,renditionFlow:n.manifest.renditionFlow,renditionLayout:n.manifest.renditionLayout,computedPageTurnMode:t})),(0,t.distinctUntilChanged)(e.isShallowEqual),(0,t.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,t.takeUntil)(this.destroy$)).subscribe(this.next.bind(this))}},br=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,n,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:n,ref:r,abortController:i,destroyFn:()=>(i.abort(),(0,t.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,n,r){return new t.Observable(t=>{let i=new AbortController;return this.executeAsync(e,n,r,i.signal).then(e=>{t.next(e),t.complete()},e=>t.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,n,r){let i=this._hookExecutions.filter(t=>r&&t.ref===r||e===t.name&&(!n||n&&n===t.id));return this._hookExecutions=this._hookExecutions.filter(e=>!i.includes(e)),(0,t.combineLatest)(i.map(({destroyFn:e})=>e()))}},xr=`[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}.prose-reader-reader{background-color:#fff;position:relative;overflow:hidden}`,Sr=e=>({x:-e.x,y:-e.y}),Cr=e=>e instanceof DOMMatrix?new U({x:-e.e,y:-e.f}):new U({x:-e.x,y:-e.y}),wr=i.namespace(`navigation/ControlledNavigationController`),Tr=class extends q{constructor(n,r,i,a,o){super(),this.settings=n,this.hookManager=r,this.context=i,this.spine=a,this.viewport=o,this.navigateSubject=new t.Subject,this.element$=new t.BehaviorSubject(document.createElement(`div`)),this.isActive=()=>this.settings.values.computedPageTurnMode===`controlled`,this.getNavigationVisibleArea=()=>this.viewport.absoluteViewport;let s=this.spine.element$.pipe((0,t.filter)(R),(0,t.withLatestFrom)(this.element$),(0,t.tap)(([e,t])=>{t.style.cssText=`
|
|
190
190
|
height: 100%;
|
|
191
191
|
width: 100%;
|
|
192
192
|
position: relative;
|
|
193
|
-
`,t.className=`${U}-controlled-navigator`,t.innerHTML=``,t.appendChild(e),this.viewport.value.element.appendChild(t),this.element$.next(t)})),c=(0,t.combineLatest)([n.watch([`computedPageTurnDirection`,`computedPageTurnMode`,`numberOfAdjacentSpineItemToPreLoad`]),this.element$]).pipe((0,t.tap)(([,e])=>{n.values.computedPageTurnMode===`scrollable`?l(e.style,`display`,`contents`):l(e.style,`display`,`block`)}));this.layout$=c.pipe((0,t.tap)(()=>{kr.info(`layout`,n.values)}),(0,t.share)()),this.isNavigating$=this.navigateSubject.pipe((0,t.distinctUntilChanged)((t,n)=>(0,e.isShallowEqual)(t.position,n.position)),(0,t.map)(({animation:e,position:t})=>(kr.info(`Navigation requested`,{animation:e,position:t}),{type:`manualAdjust`,shouldAnimate:!(!e||e===`turn`&&n.values.computedPageTurnAnimation===`none`),animation:e,position:t})),(0,t.switchMap)(e=>{let r=this.element$.getValue();return l(r.style,`transition`,`none`),l(r.style,`opacity`,`1`),(0,t.merge)((0,t.of)(!0),(0,t.of)(null).pipe((0,t.mergeMap)(()=>{if(e?.type!==`manualAdjust`)return(0,t.of)(!1);let r=e.animation===`snap`?n.values.snapAnimationDuration:n.values.computedPageTurnAnimationDuration,i=e.animation===`snap`?`slide`:n.values.computedPageTurnAnimation;return(0,t.of)(e).pipe(e.shouldAnimate?(0,t.delay)(1,t.animationFrameScheduler):t.identity,(0,t.tap)(t=>{let n=this.element$.getValue();t.shouldAnimate?i===`fade`?(l(n.style,`transition`,`opacity ${r/2}ms`),l(n.style,`opacity`,`0`)):(e.animation===`snap`||i===`slide`)&&(l(n.style,`transition`,`transform ${r}ms`),l(n.style,`opacity`,`1`)):(l(n.style,`transition`,`none`),l(n.style,`opacity`,`1`))}),(0,t.tap)(e=>{i!==`fade`&&this.applyNavigationPosition(e.position)}),e.shouldAnimate?(0,t.delay)(r/2,t.animationFrameScheduler):t.identity,(0,t.tap)(e=>{let t=this.element$.getValue();i===`fade`&&(this.applyNavigationPosition(e.position),l(t.style,`opacity`,`1`))}),e.shouldAnimate?(0,t.delay)(r/2,t.animationFrameScheduler):t.identity,(0,t.tap)(e=>{i===`fade`&&this.applyNavigationPosition(e.position)}))}),(0,t.map)(()=>!1)))}),(0,t.startWith)(!1),(0,t.shareReplay)(1)),(0,t.merge)(s,this.isNavigating$,this.layout$).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}applyNavigationPosition(e){let t=this.element$.getValue(),n=Dr(e);l(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 V({x:0,y:0}):Or(new DOMMatrix(n))}},jr=()=>e=>e.pipe((0,t.map)(({navigation:e,pagination:t,...n})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...n}))),Mr=(e,n,r)=>e.bridgeEvent.pagination$.pipe((0,t.withLatestFrom)(n),(0,t.filter)(([e,t])=>e.navigationId===t.id),(0,t.switchMap)(([e,n])=>(r.spineItemsManager.get(n.spineItem)?.isReady$.pipe((0,t.first)())??(0,t.of)(!1)).pipe((0,t.filter)(e=>e),(0,t.map)(()=>({pagination:e,navigation:n})))),jr(),(0,t.distinctUntilChanged)((e,t)=>e.navigation.paginationBeginCfi===t.navigation.paginationBeginCfi),(0,t.map)(({navigation:e})=>({...e,meta:{triggeredBy:`pagination`},requestedPosition:e.position}))),Nr=({navigationResolver:e,getNavigationVisibleArea:n})=>r=>r.pipe((0,t.map)(([t,r])=>{let i=t.position,a=i?n():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`,...t,requestedPosition:i,requestedVisibleArea:a,position:o}}})),Pr=({navigationResolver:e})=>n=>n.pipe((0,t.map)(t=>{if(t.navigation.cfi){let n=e.getNavigationForCfi(t.navigation.cfi);if(n)return{...t,navigation:{...t.navigation,position:n}}}return t})),Fr=({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`,Ir=({context:e,settings:n})=>r=>r.pipe((0,t.map)(({navigation:t,previousNavigation:r})=>{let i=Fr({context:e,navigation:t,previousNavigation:r,settings:n});return{previousNavigation:r,navigation:{...t,directionFromLastNavigation:i},direction:i}})),Lr=({spineItemsManager:e,navigationResolver:n,settings:r,viewport:i})=>a=>a.pipe((0,t.map)(({navigation:t,...a})=>{let o=e.get(t.spineItem);if(t.position)return r.values.computedPageTurnMode===`scrollable`?{navigation:{...t,position:t.position},...a}:{navigation:{...t,position:n.clampPositionInSpine(t.position,i.absoluteViewport)},...a};if(!o)return{navigation:{...t,position:a.previousNavigation.position},...a};let s=n.getNavigationForSpineIndexOrId(o),c=r.values.computedPageTurnMode===`scrollable`?new H({x:s.x+a.previousNavigation.position.x,y:s.y}):n.clampPositionInSpine(s,i.absoluteViewport);return{navigation:{...t,position:c},...a}})),Rr=({settings:e,spineItemsManager:n,navigationResolver:r,spineLocator:i,cfi:a})=>o=>{let s=t=>{let{position:o,spineItem:s,cfi:c,directionFromLastNavigation:l}=t,{navigationSnapThreshold:u,computedPageTurnMode:d}=e.values;if(s!==void 0){let e=n.get(s);if(e)return e}if(typeof s==`number`)return s>n.items.length-1?n.get(n.items.length-1):n.get(0);if(c){let e=a.getSpineItemFromCfi(c);if(e)return e}if(o&&d===`controlled`){let{beginIndex:e,endIndex:t}=i.getVisibleSpineItemsFromPosition({position:o,threshold:u,restrictToScreen:!1})??{},a=(l===`forward`||l===`anchor`?t:e)??e,s=n.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 n.get(h)}return o&&d===`scrollable`?i.getSpineItemFromPosition(o):n.get(0)};return o.pipe((0,t.map)(({navigation:e,...t})=>{let r=s(e);return{navigation:{...e,spineItem:n.getSpineItemIndex(r)},...t}}))},zr=({spine:e})=>n=>n.pipe((0,t.switchMap)(({navigation:n,...r})=>{let i=e.getSpineItemSpineLayoutInfo(n.spineItem),a=e.spineItemsManager.get(n.spineItem);return(a?.isReady$??(0,t.of)(!1)).pipe((0,t.first)(),(0,t.map)(e=>({navigation:{...n,spineItemHeight:i?.height,spineItemWidth:i?.width,spineItemLeft:i.left,spineItemTop:i.top,spineItemIsUsingVerticalWriting:a?.isUsingVerticalWriting(),spineItemIsReady:e},...r})))})),Br=({settings:e,spineItemsManager:n,spineLocator:r,navigationResolver:i})=>a=>{let o=t=>{let{navigationSnapThreshold:a,computedPageTurnMode:o}=e.values,s=n.get(t.spineItem);if(!(!s||!t.position)){if(o===`controlled`){let{endPageIndex:e,beginPageIndex:n}=r.getVisiblePagesFromViewportPosition({position:t.position,spineItem:s,threshold:a,restrictToScreen:!1})??{},o=(t.directionFromLastNavigation===`forward`||t.directionFromLastNavigation===`anchor`?e:n)??0,c=i.getNavigationForSpineItemPage({pageIndex:o,spineItemId:s}),l=r.getVisiblePagesFromViewportPosition({position:c,spineItem:s,threshold:{type:`percentage`,value:0},restrictToScreen:!0}),u=(t.directionFromLastNavigation===`forward`||t.directionFromLastNavigation===`anchor`?l?.beginPageIndex:l?.endPageIndex)??0;return r.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:u,spineItem:s})}return r.getSpineItemPositionFromSpinePosition(t.position,s)}};return a.pipe((0,t.map)(({navigation:e,...t})=>({navigation:{...e,positionInSpineItem:o(e)},...t})))},Vr=({navigationResolver:e})=>n=>n.pipe((0,t.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})),Z=class{constructor(){this.isLockedSubject=new t.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe((0,t.map)(e=>!!e),(0,t.distinctUntilChanged)())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}},Hr=({spineLocator:e,navigation:n,navigationResolver:r,spineItemsManager:i,spine:a,cfiManager:o})=>{let s=i.get(n.spineItem);return s?s.isReady$.pipe((0,t.first)(),(0,t.map)(t=>{let i=a.getSpineItemSpineLayoutInfo(s),c=e.isPositionWithinSpineItem(n.position,s),l=i.width-(n.spineItemWidth??0),u=i.height-(n.spineItemHeight??0),d=l!==0||u!==0;if(n.url!==void 0&&(l||u||t&&!n.spineItemIsReady)){let e=r.getNavigationForUrl(n.url);if(e)return e.position}let f=n.cfi??n.paginationBeginCfi;if(f!==void 0&&!o.isRootCfi(f)&&(l||u||t&&!n.spineItemIsReady)){let e=r.getNavigationForCfi(f);if(e)return e}if(c&&d&&n.directionFromLastNavigation===`backward`){let e=new L({x:(n.positionInSpineItem?.x??0)+l,y:(n.positionInSpineItem?.y??0)+u});return r.getNavigationFromSpineItemPosition({spineItem:s,spineItemPosition:e})}if(n.positionInSpineItem&&n.spineItemHeight&&n.spineItemWidth){let t=e.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:n.spineItemWidth,itemHeight:n.spineItemHeight,isUsingVerticalWriting:!!n.spineItemIsUsingVerticalWriting,position:n.positionInSpineItem});return r.getNavigationForSpineItemPage({pageIndex:t,spineItemId:s})}return c?r.getNavigationForPosition(n.position):r.getNavigationForSpineIndexOrId(s)})):(0,t.of)(new V({x:0,y:0}))},Ur=({navigation:e,spineLocator:t,spineItemsManager:n,settings:r,navigationResolver:i,spine:a})=>{let{spineItem:o}=e,s=n.get(o);if(!s)return new V({x:0,y:0});let{height:c,top:l}=a.getSpineItemSpineLayoutInfo(s),u=t.isPositionWithinSpineItem(e.position,s),d=e.positionInSpineItem??new L({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 L({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 L({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 L({y:c-n,x:e.position.x});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(r,s),spineItem:s})}return i.getNavigationForSpineIndexOrId(s)}}}return e.position},Wr=({navigation:e,spineItemsManager:n,settings:r,spineLocator:i,navigationResolver:a,spine:o,cfiManager:s})=>r.values.computedPageTurnMode===`scrollable`?(0,t.of)(Ur({navigation:e,spineLocator:i,navigationResolver:a,settings:r,spineItemsManager:n,spine:o})):Hr({navigation:e,spineLocator:i,navigationResolver:a,spineItemsManager:n,spine:o,cfiManager:s}),Gr=({settings:e,navigationResolver:n,context:r,spine:i,cfiManager:a})=>o=>o.pipe((0,t.switchMap)(o=>Wr({spineLocator:i.locator,navigation:o.navigation,navigationResolver:n,settings:e,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,context:r,spine:i,cfiManager:a}).pipe((0,t.map)(e=>({...o,navigation:{...o.navigation,position:e}}))))),Kr=i.namespace(`navigation/InternalNavigator`),qr=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y,Jr=(e,t)=>e===t||!!e&&!!t&&e.width===t.width&&e.height===t.height,Yr=(e,t)=>e.id===t.id&&qr(e.position,t.position)&&qr(e.requestedPosition,t.requestedPosition)&&Jr(e.requestedVisibleArea,t.requestedVisibleArea),Xr=class extends q{constructor(e,n,r,i,a,o,s,c,l,u){super(),this.settings=e,this.context=n,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 t.BehaviorSubject({animation:!1,position:new V({x:0,y:0}),meta:{triggeredBy:`user`},requestedPosition:new V({x:0,y:0}),spineItemIsReady:!1,type:`api`,id:Symbol(`init`)}),this.navigation$=this.navigationSubject.pipe((0,t.map)(({position:e,id:t,requestedPosition:n,requestedVisibleArea:r,meta:i})=>({position:e,id:t,requestedPosition:n,requestedVisibleArea:r,triggeredBy:i.triggeredBy})),(0,t.distinctUntilChanged)(Yr),(0,t.shareReplay)(1)),this.locker=new Z;let d=r.pipe((0,t.withLatestFrom)(this.navigationSubject),Nr({navigationResolver:o,getNavigationVisibleArea:()=>i().getNavigationVisibleArea()}),Vr({navigationResolver:o}),Pr({navigationResolver:o}),Ir({context:n,settings:e}),Rr({context:n,cfi:l,navigationResolver:o,settings:e,spineItemsManager:s.spineItemsManager,spineLocator:s.locator}),Br({navigationResolver:o,settings:e,spineItemsManager:s.spineItemsManager,spineLocator:s.locator}),zr({spine:s})).pipe(Lr({navigationResolver:o,spineItemsManager:s.spineItemsManager,settings:e,viewport:c}),(0,t.withLatestFrom)(u),(0,t.switchMap)(([r,i])=>{let a=r.navigation.cfi||r.navigation.url||e.values.computedPageTurnMode===`scrollable`||i;return(0,t.of)(r).pipe(a?t.identity:Gr({navigationResolver:o,settings:e,spine:s,context:n,cfiManager:l}))}),Br({spineItemsManager:s.spineItemsManager,spineLocator:s.locator,settings:e,navigationResolver:o}),(0,t.map)(e=>e.navigation),(0,t.share)()),f=d.pipe((0,t.withLatestFrom)(u),(0,t.filter)(([,e])=>e),(0,t.switchMap)(([e])=>{let n=this.locker.lock();return u.pipe((0,t.filter)(e=>!e),(0,t.first)(),(0,t.map)(()=>({navigation:{...e,animation:`snap`}})),(0,t.finalize)(()=>{n()}),(0,t.takeUntil)(d))}),(0,t.share)());(0,t.merge)((0,t.merge)((0,t.merge)(a,s.layout$).pipe((0,t.switchMap)(()=>(0,t.of)(null).pipe((0,t.switchMap)(()=>u.pipe((0,t.filter)(e=>!e),(0,t.first)())),(0,t.map)(()=>({navigation:{...this.navigationSubject.getValue(),animation:!1}})),(0,t.takeUntil)((0,t.merge)(f,d))))),f).pipe(Gr({navigationResolver:o,settings:e,context:n,spine:s,cfiManager:l}),(0,t.map)(({navigation:e})=>({navigation:{...e,meta:{triggeredBy:`restoration`},requestedPosition:e.position}})),Rr({context:n,cfi:l,navigationResolver:o,settings:e,spineItemsManager:s.spineItemsManager,spineLocator:s.locator}),zr({spine:s}),Br({spineItemsManager:s.spineItemsManager,spineLocator:s.locator,settings:e,navigationResolver:o}),(0,t.map)(({navigation:e})=>e),(0,t.share)()),d,Mr(n,this.navigationSubject,s)).pipe((0,t.withLatestFrom)(this.navigationSubject),e=>e.pipe((0,t.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,t.tap)(([e,t])=>{Kr.info(`navigation updated from ${e.meta.triggeredBy} of type ${e.type}`,{previousNavigation:t,currentNavigation:e}),this.navigationSubject.next(e)})),(0,t.takeUntil)(this.destroy$)).subscribe()}get navigation(){return this.navigationSubject.getValue()}},Q=(e,t,n)=>{let r=n-e,i=t*e*n/(n||1);return Math.max(0,Math.min(r,i))},Zr=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),Qr=(e,t,n)=>{let r=Zr(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},$r=(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},ei=({itemWidth:e,itemHeight:t,spineItemPosition:n})=>new L({x:Math.min(e,Math.max(0,n.x)),y:Math.min(t,Math.max(0,n.y))}),ti=({itemHeight:e,itemWidth:t,isUsingVerticalWriting:n,pageWidth:r,pageHeight:i,pageTurnDirection:a,pageTurnMode:o})=>a===`vertical`&&o===`scrollable`?1:n||a===`vertical`?Zr(e,i):Zr(t,r),ni=({itemWidth:e,itemHeight:t,position:n,isUsingVerticalWriting:r,pageWidth:i,pageHeight:a,pageTurnDirection:o,pageTurnMode:s,isRTL:c})=>{let l=ei({spineItemPosition:n,itemHeight:t,itemWidth:e}).x,u=ti({isUsingVerticalWriting:r,itemHeight:t,itemWidth:e,pageWidth:i,pageHeight:a,pageTurnDirection:o,pageTurnMode:s});if(r)return $r(n.y,a,u);let d=$r(l,i,u);return c?u-1-d:d},ri=({pageIndex:e,itemLayout:t,context:n,isUsingVerticalWriting:r,viewport:i})=>{if(r)return new L({x:0,y:Q(i.pageSize.height,e,t.height)});let a=Q(i.pageSize.width,e,t.width);return n.isRTL()?new L({x:t.width-a-i.pageSize.width,y:0}):new L({x:a,y:0})},ii=({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?g(e,t):void 0)?.getBoundingClientRect().x||i);let a=r.layoutInfo?.width||0,o=n.pageSize.width;if(i!==void 0)return new L({x:Qr(i,o,a),y:0})};return{getSpineItemPositionFromNode:r,getSpineItemPositionFromPageIndex:({pageIndex:t,spineItem:r})=>ri({context:e,isUsingVerticalWriting:!!r.isUsingVerticalWriting(),itemLayout:r.layoutInfo,pageIndex:t,viewport:n}),getSpineItemPageIndexFromPosition:r=>ni({...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?ni({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 L({x:Qr(e.x,n.pageSize.width,r),y:Qr(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=Q(c,r,o);return new R({x:t.x,y:t.y-e})}let l=Q(s,r,a);if(e.isRTL()){let e=a-(r+1)*s;return new R({x:t.x-Math.max(0,e),y:t.y})}return new R({x:t.x-l,y:t.y})}}},ai=({context:e,settings:t,viewport:n})=>{let r=ii({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 L({x:0,y:0})}},oi=({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}},si=({position:e,size:t,isRTL:n,spineItemsManager:r,spine:i})=>{let a=oi({size:t,isRTL:n,spineItemsManager:r,spine:i});if(!a)return new H({x:0,y:0});let o=Math.min(Math.max(a.yMin,e.y),a.yMax);return new H({x:n?Math.max(a.xMin,Math.min(a.xMax,e.x)):Math.min(Math.max(a.xMin,e.x),a.xMax),y:o})},ci=({position:e,size:t,isRTL:n,spineItemsManager:r,spine:i})=>{let a=oi({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`}}},$=({position:e,pageSizeWidth:t,visibleAreaRectWidth:n})=>{let{x:r,y:i}=e,a=r%n===0?r:r-t;return e instanceof H?new H({x:a,y:i}):new V({x:a,y:i})},li=({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 $({position:t.getSpinePositionFromSpineItemPosition({spineItemPosition:o,spineItem:i}),pageSizeWidth:r.pageSize.width,visibleAreaRectWidth:r.absoluteViewport.width})}return new V({x:0,y:0})},ui=({pageIndex:e,spineItemsManager:t,spineItemId:n,spineLocator:r,spineItemNavigationResolver:i,viewport:a})=>{let o=t.get(n);if(!o)return li({viewportPosition:new V({x:e*a.pageSize.width,y:0}),spineItemNavigationResolver:i,spineLocator:r,viewport:a});let s=r.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:e,spineItem:o});return $({position:r.getSpinePositionFromSpineItemPosition({spineItemPosition:s,spineItem:o}),pageSizeWidth:a.pageSize.width,visibleAreaRectWidth:a.absoluteViewport.width})},di=(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}}},fi=({anchor:e,spineItem:t,spine:n})=>{let r=di(e,t.renderer.getDocumentFrame());return r?n.spineItemLocator.getSpineItemPositionFromNode(r,0,t)?.x??0:0},pi=({anchor:e,spineItem:t,spineLocator:n,spine:r})=>{let i=fi({anchor:e,spineItem:t,spine:r});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new L({x:i,y:0}),spineItem:t})},mi=({anchor:e,spineItem:t,spineLocator:n,spine:r,pageSizeWidth:i,visibleAreaRectWidth:a})=>$({position:pi({anchor:e,spineItem:t,spineLocator:n,spine:r}),pageSizeWidth:i,visibleAreaRectWidth:a}),hi=({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:$({position:mi({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}},gi=({spineItem:e,spineItemPosition:t,spineLocator:n,spineItemLocator:r,viewport:i})=>{let a=r.getSpineItemClosestPositionFromUnsafePosition(t,e);return $({position:n.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:e}),pageSizeWidth:i.pageSize.width,visibleAreaRectWidth:i.absoluteViewport.width})},_i=`spineNavigator`,vi=({context:e,spineItemsManager:t,locator:n,settings:r,spine:a,viewport:o,cfi:s})=>{let c=ai({context:e,settings:r,viewport:o});return{getNavigationForUrl:r=>hi({context:e,spineItemsManager:t,spineLocator:n,url:r,pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width,spine:a}),getNavigationForSpineItemPage:e=>ui({...e,spineItemsManager:t,spineItemNavigationResolver:c,spineLocator:n,viewport:o}),getNavigationFromSpineItemPosition:e=>gi({...e,spineItemLocator:n.spineItemLocator,spineLocator:n,viewport:o}),getNavigationForCfi:e=>{let{node:t,offset:r=0,spineItem:a}=s.resolveCfi({cfi:e});if(!a){i.warn(_i,`unable to detect item id from cfi ${e}`);return}let l=t?c.getNavigationFromNode(a,t,r):new L({x:0,y:0});return $({position:n.getSpinePositionFromSpineItemPosition({spineItemPosition:l,spineItem:a}),pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width})},getNavigationForLastPage:e=>{let t=c.getNavigationForLastPage(e);return $({position:n.getSpinePositionFromSpineItemPosition({spineItemPosition:t,spineItem:e}),pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width})},getNavigationForSpineIndexOrId:e=>{let r=t.get(e);return r?$({position:n.getSpinePositionFromSpineItem(r),pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width}):new V({x:0,y:0})},getNavigationForPosition:e=>li({viewportPosition:e,spineItemNavigationResolver:c,spineLocator:n,viewport:o}),getMostPredominantNavigationForPosition:i=>{let s=r.values.computedPageTurnDirection,l=.5,u=si({position:new V({x:s===`horizontal`?i.x+o.absoluteViewport.width*l:0,y:s===`horizontal`?0:i.y+o.absoluteViewport.height*l}),size:o.absoluteViewport,isRTL:e.isRTL(),spineItemsManager:t,spine:a});return li({spineItemNavigationResolver:c,spineLocator:n,viewportPosition:u,viewport:o})},clampPositionInSpine:(n,r)=>si({position:n,size:r,isRTL:e.isRTL(),spineItemsManager:t,spine:a}),getBoundaryForPosition:(n,r=o.absoluteViewport)=>ci({position:n,size:r,isRTL:e.isRTL(),spineItemsManager:t,spine:a}),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=>$({position:e,pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width}),spineItemNavigator:c}},yi=({spineItemsManager:n,context:r,hookManager:a,spine:o,settings:s,viewport:c,cfi:l})=>{let u=new t.Subject,d=u.asObservable(),f=new Z,p=l,m=vi({cfi:p,context:r,settings:s,spineItemsManager:n,locator:o.locator,spine:o,viewport:c}),h=new Ar(s,a,r,o,c),g=new ar(c,s,a,o,r),_=[g,h],v=new Xr(s,r,d,()=>_.find(e=>e.isActive())??h,(0,t.merge)(..._.flatMap(e=>e.layout$?[e.layout$]:[])),m,o,c,p,f.isLocked$),ee=(0,t.combineLatest)([..._.map(e=>e.isNavigating$),f.isLocked$,v.locker.isLocked$]).pipe((0,t.map)(e=>e.some(e=>e)?`busy`:`free`),(0,t.distinctUntilChanged)(),(0,t.shareReplay)(1)),y=v.navigation$.pipe((0,t.map)(({position:e})=>e),(0,t.distinctUntilChanged)(e.isShallowEqual),(0,t.shareReplay)(1));return{destroy:()=>{_.forEach(e=>{e.destroy()}),v.destroy()},getNavigation:()=>v.navigation,internalNavigator:v,scrollNavigationController:g,controlledNavigationController:h,navigationState$:ee,navigate:e=>{i.info(`User navigation`,e),u.next(e)},lock:()=>f.lock(),isLocked$:f.isLocked$,navigationResolver:m,navigation$:v.navigation$,position$:y}},bi=class extends k{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)}},xi=class extends q{constructor(e,n,r,i,a,o,s){super(),this.context=e,this.pagination=n,this.spineItemsManager=r,this.spine=i,this.spineItemLocator=a,this.isNavigationLocked$=o,this.cfi=s;let c=(0,t.merge)(this.context.bridgeEvent.navigation$,i.layout$).pipe((0,t.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,t.filter)(e=>!e),(0,t.take)(1),(0,t.withLatestFrom)(this.context.bridgeEvent.navigation$),(0,t.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,t.merge)(c,c.pipe(O(this.context.bridgeEvent.viewportFree$),(0,t.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,t.takeUntil)(this.destroy$)).subscribe()}},Si=class extends q{constructor(e){super();let n={...this.getDefaultSettings(),...e};this.inputSettings=n,this.outputSettingsUpdateSubject=new t.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe((0,t.shareReplay)(1)),this._settings$.subscribe()}_prepareUpdate(t){let n=(0,e.shallowMergeIfDefined)(this.inputSettings,t),r=this.getOutputSettings(n),i=!(0,e.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(n){return this.values$.pipe(ye(n),(0,t.distinctUntilChanged)(e.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}},Ci=class extends Si{constructor(e,n){super(e),this.context=n,n.watch([`manifest`,`hasVerticalWriting`]).pipe((0,t.tap)(()=>this.update(this.values)),(0,t.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:kt({spreadMode:e.spreadMode,manifest:t})};return t?.renditionFlow===`scrolled-continuous`&&(r.computedPageTurnMode=`scrollable`),r.computedPageTurnMode===`scrollable`&&(r.computedPageTurnDirection=`vertical`),n&&r.computedPageTurnAnimation===`slide`&&(i.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}}},wi=class extends Ae{onUnload(){return t.EMPTY}onCreateDocument(){return(0,t.of)(document.createElement(`div`))}onLoadDocument(){return t.EMPTY}onLayout(){return(0,t.of)(void 0)}onRenderHeadless(){return t.EMPTY}getDocumentFrame(){}},Ti=class extends q{constructor(n,r,i,a,o,s,c){super(),this.item=n,this.containerElement=r,this.context=i,this.hookManager=a,this.renderer=o,this.settings=s,this.viewport=c,this.layoutTriggerSubject=new t.Subject,this.lastLayout=null,this.computeLayoutInformation=({isLastItem:t,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=xr(s)??!1;if(this.settings.values.computedSpreadMode){!c&&this.renderer.renditionLayout===`reflowable`&&!t&&(i=this.viewport.value.pageSize.width*2),!c&&this.renderer.renditionLayout===`reflowable`&&t&&o&&(i=this.viewport.value.pageSize.width*2);let n=o&&t&&c,s=(0,e.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?u(this.containerElement.style,`right`):l(this.containerElement.style,`right`,`${e}px`),t===void 0?u(this.containerElement.style,`left`):l(this.containerElement.style,`left`,`${t}px`),n===void 0?u(this.containerElement.style,`top`):l(this.containerElement.style,`top`,`${n}px`)},this.updateContainerLayout=({minimumWidth:n,edgeX:r,edgeY:i})=>a=>a.pipe((0,t.map)(t=>{let{width:a,height:o}=((0,e.isShallowEqual)(this.lastLayout?.pageSize,this.viewport.pageSize)?this.lastLayout:void 0)??{},{width:s=a,height:c=o}=t??{},{width:u,height:d}=this.viewport.pageSize,f=this.validateDimension(s??u,u,n),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},l(this.containerElement.style,`width`,`${f}px`),l(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 n=be(this.didLayout$.pipe((0,t.first)()));return this.layoutTriggerSubject.next(e),n()};let d=this.layoutTriggerSubject.pipe((0,t.switchMap)(({spreadPosition:e,horizontalOffset:n,isLastItem:r,edgeX:i,edgeY:a})=>{let{blankPagePosition:o,minimumWidth:s}=this.computeLayoutInformation({horizontalOffset:n,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,t.merge)((0,t.of)({type:`start`}),c.pipe(this.updateContainerLayout({minimumWidth:s,edgeX:i,edgeY:a}),(0,t.map)(e=>(this.hookManager.execute(`item.onAfterLayout`,{blankPagePosition:o,item:this.item,minimumWidth:s}),{type:`end`,data:e}))))}),(0,t.share)());this.didLayout$=d.pipe((0,t.filter)(e=>e.type===`end`),(0,t.map)(e=>e.data),(0,t.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}}},Ei=class extends k{constructor(e,r,i,a,o,s,c){super({isLoaded:!1,isReady:!1,isDirty:!1,isError:!1,error:void 0}),this.item=e,this.parentElement=r,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=Di(r,e,o),r.appendChild(this.containerElement);let l=this.settings.values.getRenderer?.(e);this.resourcesHandler=new A(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 wi(u),this._layout=new Ti(e,this.containerElement,i,o,this.renderer,this.settings,this.viewport);let d=this.renderer.state$.pipe((0,n.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,n.tap)(()=>{this.mergeCompare({isDirty:!1,isReady:this.renderer.value.state===`loaded`})}),(0,n.share)()),(0,t.merge)(d,this.didLayout$).pipe((0,n.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 ti({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})}},Di=(e,t,n)=>{let r=e.ownerDocument.createElement(`div`);return r.setAttribute(`data-${gt}`,``),r.classList.add(`spineItem`),r.classList.add(`spineItem-${t.renditionLayout??`reflowable`}`),r.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,t.combineLatest)([n.watch([`computedPageTurnDirection`,`computedPageTurnMode`,`numberOfAdjacentSpineItemToPreLoad`]),this.element$]).pipe((0,t.tap)(([,e])=>{n.values.computedPageTurnMode===`scrollable`?l(e.style,`display`,`contents`):l(e.style,`display`,`block`)}));this.layout$=c.pipe((0,t.tap)(()=>{wr.info(`layout`,n.values)}),(0,t.share)()),this.isNavigating$=this.navigateSubject.pipe((0,t.distinctUntilChanged)((t,n)=>(0,e.isShallowEqual)(t.position,n.position)),(0,t.map)(({animation:e,position:t})=>(wr.info(`Navigation requested`,{animation:e,position:t}),{type:`manualAdjust`,shouldAnimate:!(!e||e===`turn`&&n.values.computedPageTurnAnimation===`none`),animation:e,position:t})),(0,t.switchMap)(e=>{let r=this.element$.getValue();return l(r.style,`transition`,`none`),l(r.style,`opacity`,`1`),(0,t.merge)((0,t.of)(!0),(0,t.of)(null).pipe((0,t.mergeMap)(()=>{if(e?.type!==`manualAdjust`)return(0,t.of)(!1);let r=e.animation===`snap`?n.values.snapAnimationDuration:n.values.computedPageTurnAnimationDuration,i=e.animation===`snap`?`slide`:n.values.computedPageTurnAnimation;return(0,t.of)(e).pipe(e.shouldAnimate?(0,t.delay)(1,t.animationFrameScheduler):t.identity,(0,t.tap)(t=>{let n=this.element$.getValue();t.shouldAnimate?i===`fade`?(l(n.style,`transition`,`opacity ${r/2}ms`),l(n.style,`opacity`,`0`)):(e.animation===`snap`||i===`slide`)&&(l(n.style,`transition`,`transform ${r}ms`),l(n.style,`opacity`,`1`)):(l(n.style,`transition`,`none`),l(n.style,`opacity`,`1`))}),(0,t.tap)(e=>{i!==`fade`&&this.applyNavigationPosition(e.position)}),e.shouldAnimate?(0,t.delay)(r/2,t.animationFrameScheduler):t.identity,(0,t.tap)(e=>{let t=this.element$.getValue();i===`fade`&&(this.applyNavigationPosition(e.position),l(t.style,`opacity`,`1`))}),e.shouldAnimate?(0,t.delay)(r/2,t.animationFrameScheduler):t.identity,(0,t.tap)(e=>{i===`fade`&&this.applyNavigationPosition(e.position)}))}),(0,t.map)(()=>!1)))}),(0,t.startWith)(!1),(0,t.shareReplay)(1)),(0,t.merge)(s,this.isNavigating$,this.layout$).pipe((0,t.takeUntil)(this.destroy$)).subscribe()}applyNavigationPosition(e){let t=this.element$.getValue(),n=Sr(e);l(t.style,`transform`,`translate(${n.x}px, ${n.y}px)`),this.hookManager.execute(`onViewportOffsetAdjust`,void 0)}navigate(e){this.navigateSubject.next(e)}destroy(){super.destroy(),this.element$.getValue().remove(),this.element$.complete()}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}):Cr(new DOMMatrix(n))}},Er=()=>e=>e.pipe((0,t.map)(({navigation:e,pagination:t,...n})=>({navigation:{...e,paginationBeginCfi:t.beginCfi},...n}))),Dr=(e,n,r)=>e.bridgeEvent.pagination$.pipe((0,t.withLatestFrom)(n),(0,t.filter)(([e,t])=>e.navigationId===t.id),(0,t.switchMap)(([e,n])=>(r.spineItemsManager.get(n.spineItem)?.isReady$.pipe((0,t.first)())??(0,t.of)(!1)).pipe((0,t.filter)(e=>e),(0,t.map)(()=>({pagination:e,navigation:n})))),Er(),(0,t.distinctUntilChanged)((e,t)=>e.navigation.paginationBeginCfi===t.navigation.paginationBeginCfi),(0,t.map)(({navigation:e})=>({...e,meta:{triggeredBy:`pagination`},requestedPosition:e.position}))),Or=({navigationResolver:e,getNavigationVisibleArea:n})=>r=>r.pipe((0,t.map)(([t,r])=>{let i=t.position,a=i?n():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`,...t,requestedPosition:i,requestedVisibleArea:a,position:o}}})),kr=({navigationResolver:e})=>n=>n.pipe((0,t.map)(t=>{if(t.navigation.cfi){let n=e.getNavigationForCfi(t.navigation.cfi);if(n)return{...t,navigation:{...t.navigation,position:n}}}return t})),Ar=({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`,jr=({context:e,settings:n})=>r=>r.pipe((0,t.map)(({navigation:t,previousNavigation:r})=>{let i=Ar({context:e,navigation:t,previousNavigation:r,settings:n});return{previousNavigation:r,navigation:{...t,directionFromLastNavigation:i},direction:i}})),Mr=({spineItemsManager:e,navigationResolver:n,settings:r,viewport:i})=>a=>a.pipe((0,t.map)(({navigation:t,...a})=>{let o=e.get(t.spineItem);if(t.position)return r.values.computedPageTurnMode===`scrollable`?{navigation:{...t,position:t.position},...a}:{navigation:{...t,position:n.clampPositionInSpine(t.position,i.absoluteViewport)},...a};if(!o)return{navigation:{...t,position:a.previousNavigation.position},...a};let s=n.getNavigationForSpineIndexOrId(o),c=r.values.computedPageTurnMode===`scrollable`?new W({x:s.x+a.previousNavigation.position.x,y:s.y}):n.clampPositionInSpine(s,i.absoluteViewport);return{navigation:{...t,position:c},...a}})),Nr=({settings:e,spineItemsManager:n,navigationResolver:r,spineLocator:i,cfi:a})=>o=>{let s=t=>{let{position:o,spineItem:s,cfi:c,directionFromLastNavigation:l}=t,{navigationSnapThreshold:u,computedPageTurnMode:d}=e.values;if(s!==void 0){let e=n.get(s);if(e)return e}if(typeof s==`number`)return s>n.items.length-1?n.get(n.items.length-1):n.get(0);if(c){let e=a.getSpineItemFromCfi(c);if(e)return e}if(o&&d===`controlled`){let{beginIndex:e,endIndex:t}=i.getVisibleSpineItemsFromPosition({position:o,threshold:u,restrictToScreen:!1})??{},a=(l===`forward`||l===`anchor`?t:e)??e,s=n.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 n.get(h)}return o&&d===`scrollable`?i.getSpineItemFromPosition(o):n.get(0)};return o.pipe((0,t.map)(({navigation:e,...t})=>{let r=s(e);return{navigation:{...e,spineItem:n.getSpineItemIndex(r)},...t}}))},Pr=({spine:e})=>n=>n.pipe((0,t.switchMap)(({navigation:n,...r})=>{let i=e.getSpineItemSpineLayoutInfo(n.spineItem),a=e.spineItemsManager.get(n.spineItem);return(a?.isReady$??(0,t.of)(!1)).pipe((0,t.first)(),(0,t.map)(e=>({navigation:{...n,spineItemHeight:i?.height,spineItemWidth:i?.width,spineItemLeft:i.left,spineItemTop:i.top,spineItemIsUsingVerticalWriting:a?.isUsingVerticalWriting(),spineItemIsReady:e},...r})))})),Fr=({settings:e,spineItemsManager:n,spineLocator:r,navigationResolver:i})=>a=>{let o=t=>{let{navigationSnapThreshold:a,computedPageTurnMode:o}=e.values,s=n.get(t.spineItem);if(!(!s||!t.position)){if(o===`controlled`){let{endPageIndex:e,beginPageIndex:n}=r.getVisiblePagesFromViewportPosition({position:t.position,spineItem:s,threshold:a,restrictToScreen:!1})??{},o=(t.directionFromLastNavigation===`forward`||t.directionFromLastNavigation===`anchor`?e:n)??0,c=i.getNavigationForSpineItemPage({pageIndex:o,spineItemId:s}),l=r.getVisiblePagesFromViewportPosition({position:c,spineItem:s,threshold:{type:`percentage`,value:0},restrictToScreen:!0}),u=(t.directionFromLastNavigation===`forward`||t.directionFromLastNavigation===`anchor`?l?.beginPageIndex:l?.endPageIndex)??0;return r.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:u,spineItem:s})}return r.getSpineItemPositionFromSpinePosition(t.position,s)}};return a.pipe((0,t.map)(({navigation:e,...t})=>({navigation:{...e,positionInSpineItem:o(e)},...t})))},Ir=({navigationResolver:e})=>n=>n.pipe((0,t.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})),Lr=class{constructor(){this.isLockedSubject=new t.BehaviorSubject(0),this.isLocked$=this.isLockedSubject.pipe((0,t.map)(e=>!!e),(0,t.distinctUntilChanged)())}lock(){let e=!1;return this.isLockedSubject.next(this.isLockedSubject.getValue()+1),()=>{e||(e=!0,this.isLockedSubject.next(this.isLockedSubject.getValue()-1))}}},Rr=({spineLocator:e,navigation:n,navigationResolver:r,spineItemsManager:i,spine:a,cfiManager:o})=>{let s=i.get(n.spineItem);return s?s.isReady$.pipe((0,t.first)(),(0,t.map)(t=>{let i=a.getSpineItemSpineLayoutInfo(s),c=e.isPositionWithinSpineItem(n.position,s),l=i.width-(n.spineItemWidth??0),u=i.height-(n.spineItemHeight??0),d=l!==0||u!==0;if(n.url!==void 0&&(l||u||t&&!n.spineItemIsReady)){let e=r.getNavigationForUrl(n.url);if(e)return e.position}let f=n.cfi??n.paginationBeginCfi;if(f!==void 0&&!o.isRootCfi(f)&&(l||u||t&&!n.spineItemIsReady)){let e=r.getNavigationForCfi(f);if(e)return e}if(c&&d&&n.directionFromLastNavigation===`backward`){let e=new B({x:(n.positionInSpineItem?.x??0)+l,y:(n.positionInSpineItem?.y??0)+u});return r.getNavigationFromSpineItemPosition({spineItem:s,spineItemPosition:e})}if(n.positionInSpineItem&&n.spineItemHeight&&n.spineItemWidth){let t=e.spineItemLocator.getSpineItemPageIndexFromPosition({itemWidth:n.spineItemWidth,itemHeight:n.spineItemHeight,isUsingVerticalWriting:!!n.spineItemIsUsingVerticalWriting,position:n.positionInSpineItem});return r.getNavigationForSpineItemPage({pageIndex:t,spineItemId:s})}return c?r.getNavigationForPosition(n.position):r.getNavigationForSpineIndexOrId(s)})):(0,t.of)(new U({x:0,y:0}))},zr=({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 B({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 B({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 B({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 B({y:c-n,x:e.position.x});return t.getSpinePositionFromSpineItemPosition({spineItemPosition:t.getSafeSpineItemPositionFromUnsafeSpineItemPosition(r,s),spineItem:s})}return i.getNavigationForSpineIndexOrId(s)}}}return e.position},Br=({navigation:e,spineItemsManager:n,settings:r,spineLocator:i,navigationResolver:a,spine:o,cfiManager:s})=>r.values.computedPageTurnMode===`scrollable`?(0,t.of)(zr({navigation:e,spineLocator:i,navigationResolver:a,settings:r,spineItemsManager:n,spine:o})):Rr({navigation:e,spineLocator:i,navigationResolver:a,spineItemsManager:n,spine:o,cfiManager:s}),Vr=({settings:e,navigationResolver:n,context:r,spine:i,cfiManager:a})=>o=>o.pipe((0,t.switchMap)(o=>Br({spineLocator:i.locator,navigation:o.navigation,navigationResolver:n,settings:e,spineItemsManager:i.spineItemsManager,spineItemLocator:i.locator.spineItemLocator,context:r,spine:i,cfiManager:a}).pipe((0,t.map)(e=>({...o,navigation:{...o.navigation,position:e}}))))),Hr=i.namespace(`navigation/InternalNavigator`),Ur=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y,Wr=(e,t)=>e===t||!!e&&!!t&&e.width===t.width&&e.height===t.height,Gr=(e,t)=>e.id===t.id&&Ur(e.position,t.position)&&Ur(e.requestedPosition,t.requestedPosition)&&Wr(e.requestedVisibleArea,t.requestedVisibleArea),Kr=class extends q{constructor(e,n,r,i,a,o,s,c,l,u){super(),this.settings=e,this.context=n,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 t.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,t.map)(({position:e,id:t,requestedPosition:n,requestedVisibleArea:r,meta:i})=>({position:e,id:t,requestedPosition:n,requestedVisibleArea:r,triggeredBy:i.triggeredBy})),(0,t.distinctUntilChanged)(Gr),(0,t.shareReplay)(1)),this.locker=new Lr;let d=r.pipe((0,t.withLatestFrom)(this.navigationSubject),Or({navigationResolver:o,getNavigationVisibleArea:()=>i().getNavigationVisibleArea()}),Ir({navigationResolver:o}),kr({navigationResolver:o}),jr({context:n,settings:e}),Nr({context:n,cfi:l,navigationResolver:o,settings:e,spineItemsManager:s.spineItemsManager,spineLocator:s.locator}),Fr({navigationResolver:o,settings:e,spineItemsManager:s.spineItemsManager,spineLocator:s.locator}),Pr({spine:s})).pipe(Mr({navigationResolver:o,spineItemsManager:s.spineItemsManager,settings:e,viewport:c}),(0,t.withLatestFrom)(u),(0,t.switchMap)(([r,i])=>{let a=r.navigation.cfi||r.navigation.url||e.values.computedPageTurnMode===`scrollable`||i;return(0,t.of)(r).pipe(a?t.identity:Vr({navigationResolver:o,settings:e,spine:s,context:n,cfiManager:l}))}),Fr({spineItemsManager:s.spineItemsManager,spineLocator:s.locator,settings:e,navigationResolver:o}),(0,t.map)(e=>e.navigation),(0,t.share)()),f=d.pipe((0,t.withLatestFrom)(u),(0,t.filter)(([,e])=>e),(0,t.switchMap)(([e])=>{let n=this.locker.lock();return u.pipe((0,t.filter)(e=>!e),(0,t.first)(),(0,t.map)(()=>({navigation:{...e,animation:`snap`}})),(0,t.finalize)(()=>{n()}),(0,t.takeUntil)(d))}),(0,t.share)());(0,t.merge)((0,t.merge)((0,t.merge)(a,s.layout$).pipe((0,t.switchMap)(()=>(0,t.of)(null).pipe((0,t.switchMap)(()=>u.pipe((0,t.filter)(e=>!e),(0,t.first)())),(0,t.map)(()=>({navigation:{...this.navigationSubject.getValue(),animation:!1}})),(0,t.takeUntil)((0,t.merge)(f,d))))),f).pipe(Vr({navigationResolver:o,settings:e,context:n,spine:s,cfiManager:l}),(0,t.map)(({navigation:e})=>({navigation:{...e,meta:{triggeredBy:`restoration`},requestedPosition:e.position}})),Nr({context:n,cfi:l,navigationResolver:o,settings:e,spineItemsManager:s.spineItemsManager,spineLocator:s.locator}),Pr({spine:s}),Fr({spineItemsManager:s.spineItemsManager,spineLocator:s.locator,settings:e,navigationResolver:o}),(0,t.map)(({navigation:e})=>e),(0,t.share)()),d,Dr(n,this.navigationSubject,s)).pipe((0,t.withLatestFrom)(this.navigationSubject),e=>e.pipe((0,t.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,t.tap)(([e,t])=>{Hr.info(`navigation updated from ${e.meta.triggeredBy} of type ${e.type}`,{previousNavigation:t,currentNavigation:e}),this.navigationSubject.next(e)})),(0,t.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))},qr=(e,t)=>(t||0)===0||(e||0)===0?1:Math.floor(Math.max(1,e/t)),Jr=(e,t,n)=>{let r=qr(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},Yr=(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},Xr=({itemWidth:e,itemHeight:t,spineItemPosition:n})=>new B({x:Math.min(e,Math.max(0,n.x)),y:Math.min(t,Math.max(0,n.y))}),Zr=({itemHeight:e,itemWidth:t,isUsingVerticalWriting:n,pageWidth:r,pageHeight:i,pageTurnDirection:a,pageTurnMode:o})=>a===`vertical`&&o===`scrollable`?1:n||a===`vertical`?qr(e,i):qr(t,r),Qr=({itemWidth:e,itemHeight:t,position:n,isUsingVerticalWriting:r,pageWidth:i,pageHeight:a,pageTurnDirection:o,pageTurnMode:s,isRTL:c})=>{let l=Xr({spineItemPosition:n,itemHeight:t,itemWidth:e}).x,u=Zr({isUsingVerticalWriting:r,itemHeight:t,itemWidth:e,pageWidth:i,pageHeight:a,pageTurnDirection:o,pageTurnMode:s});if(r)return Yr(n.y,a,u);let d=Yr(l,i,u);return c?u-1-d:d},$r=({pageIndex:e,itemLayout:t,context:n,isUsingVerticalWriting:r,viewport:i})=>{if(r)return new B({x:0,y:Z(i.pageSize.height,e,t.height)});let a=Z(i.pageSize.width,e,t.width);return n.isRTL()?new B({x:t.width-a-i.pageSize.width,y:0}):new B({x:a,y:0})},ei=({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?g(e,t):void 0)?.getBoundingClientRect().x||i);let a=r.layoutInfo?.width||0,o=n.pageSize.width;if(i!==void 0)return new B({x:Jr(i,o,a),y:0})};return{getSpineItemPositionFromNode:r,getSpineItemPositionFromPageIndex:({pageIndex:t,spineItem:r})=>$r({context:e,isUsingVerticalWriting:!!r.isUsingVerticalWriting(),itemLayout:r.layoutInfo,pageIndex:t,viewport:n}),getSpineItemPageIndexFromPosition:r=>Qr({...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?Qr({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 B({x:Jr(e.x,n.pageSize.width,r),y:Jr(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 V({x:t.x,y:t.y-e})}let l=Z(s,r,a);if(e.isRTL()){let e=a-(r+1)*s;return new V({x:t.x-Math.max(0,e),y:t.y})}return new V({x:t.x-l,y:t.y})}}},ti=({context:e,settings:t,viewport:n})=>{let r=ei({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 B({x:0,y:0})}},ni=({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}},ri=({position:e,size:t,isRTL:n,spineItemsManager:r,spine:i})=>{let a=ni({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})},ii=({position:e,size:t,isRTL:n,spineItemsManager:r,spine:i})=>{let a=ni({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})},$=({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})},ai=({pageIndex:e,spineItemsManager:t,spineItemId:n,spineLocator:r,spineItemNavigationResolver:i,viewport:a})=>{let o=t.get(n);if(!o)return $({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})},oi=(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}}},si=({anchor:e,spineItem:t,spine:n})=>{let r=oi(e,t.renderer.getDocumentFrame());return r?n.spineItemLocator.getSpineItemPositionFromNode(r,0,t)?.x??0:0},ci=({anchor:e,spineItem:t,spineLocator:n,spine:r})=>{let i=si({anchor:e,spineItem:t,spine:r});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new B({x:i,y:0}),spineItem:t})},li=({anchor:e,spineItem:t,spineLocator:n,spine:r,pageSizeWidth:i,visibleAreaRectWidth:a})=>Q({position:ci({anchor:e,spineItem:t,spineLocator:n,spine:r}),pageSizeWidth:i,visibleAreaRectWidth:a}),ui=({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:li({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}},di=({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})},fi=`spineNavigator`,pi=({context:e,spineItemsManager:t,locator:n,settings:r,spine:a,viewport:o,cfi:s})=>{let c=ti({context:e,settings:r,viewport:o});return{getNavigationForUrl:r=>ui({context:e,spineItemsManager:t,spineLocator:n,url:r,pageSizeWidth:o.pageSize.width,visibleAreaRectWidth:o.absoluteViewport.width,spine:a}),getNavigationForSpineItemPage:e=>ai({...e,spineItemsManager:t,spineItemNavigationResolver:c,spineLocator:n,viewport:o}),getNavigationFromSpineItemPosition:e=>di({...e,spineItemLocator:n.spineItemLocator,spineLocator:n,viewport:o}),getNavigationForCfi:e=>{let{node:t,offset:r=0,spineItem:a}=s.resolveCfi({cfi:e});if(!a){i.warn(fi,`unable to detect item id from cfi ${e}`);return}let l=t?c.getNavigationFromNode(a,t,r):new B({x:0,y:0});return Q({position:n.getSpinePositionFromSpineItemPosition({spineItemPosition:l,spineItem:a}),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=>$({viewportPosition:e,spineItemNavigationResolver:c,spineLocator:n,viewport:o}),getMostPredominantNavigationForPosition:i=>{let s=r.values.computedPageTurnDirection,l=.5,u=ri({position:new U({x:s===`horizontal`?i.x+o.absoluteViewport.width*l:0,y:s===`horizontal`?0:i.y+o.absoluteViewport.height*l}),size:o.absoluteViewport,isRTL:e.isRTL(),spineItemsManager:t,spine:a});return $({spineItemNavigationResolver:c,spineLocator:n,viewportPosition:u,viewport:o})},clampPositionInSpine:(n,r)=>ri({position:n,size:r,isRTL:e.isRTL(),spineItemsManager:t,spine:a}),getBoundaryForPosition:(n,r=o.absoluteViewport)=>ii({position:n,size:r,isRTL:e.isRTL(),spineItemsManager:t,spine:a}),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}},mi=({spineItemsManager:n,context:r,hookManager:a,spine:o,settings:s,viewport:c,cfi:l})=>{let u=new t.Subject,d=u.asObservable(),f=new Lr,p=l,m=pi({cfi:p,context:r,settings:s,spineItemsManager:n,locator:o.locator,spine:o,viewport:c}),h=new Tr(s,a,r,o,c),g=new er(c,s,a,o,r),_=[g,h],v=new Kr(s,r,d,()=>_.find(e=>e.isActive())??h,(0,t.merge)(..._.flatMap(e=>e.layout$?[e.layout$]:[])),m,o,c,p,f.isLocked$),y=(0,t.combineLatest)([..._.map(e=>e.isNavigating$),f.isLocked$,v.locker.isLocked$]).pipe((0,t.map)(e=>e.some(e=>e)?`busy`:`free`),(0,t.distinctUntilChanged)(),(0,t.shareReplay)(1)),b=v.navigation$.pipe((0,t.map)(({position:e})=>e),(0,t.distinctUntilChanged)(e.isShallowEqual),(0,t.shareReplay)(1));return{destroy:()=>{_.forEach(e=>{e.destroy()}),v.destroy()},getNavigation:()=>v.navigation,internalNavigator:v,scrollNavigationController:g,controlledNavigationController:h,navigationState$:y,navigate:e=>{i.info(`User navigation`,e),u.next(e)},lock:()=>f.lock(),isLocked$:f.isLocked$,navigationResolver:m,navigation$:v.navigation$,position$:b}},hi=class extends M{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)}},gi=class extends q{constructor(e,n,r,i,a,o,s){super(),this.context=e,this.pagination=n,this.spineItemsManager=r,this.spine=i,this.spineItemLocator=a,this.isNavigationLocked$=o,this.cfi=s;let c=(0,t.merge)(this.context.bridgeEvent.navigation$,i.layout$).pipe((0,t.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,t.filter)(e=>!e),(0,t.take)(1),(0,t.withLatestFrom)(this.context.bridgeEvent.navigation$),(0,t.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,t.merge)(c,c.pipe(A(this.context.bridgeEvent.viewportFree$),(0,t.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,t.takeUntil)(this.destroy$)).subscribe()}},_i=class extends q{constructor(e){super();let n={...this.getDefaultSettings(),...e};this.inputSettings=n,this.outputSettingsUpdateSubject=new t.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe((0,t.shareReplay)(1)),this._settings$.subscribe()}_prepareUpdate(t){let n=(0,e.shallowMergeIfDefined)(this.inputSettings,t),r=this.getOutputSettings(n),i=!(0,e.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(n){return this.values$.pipe(_e(n),(0,t.distinctUntilChanged)(e.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}},vi=class extends _i{constructor(e,n){super(e),this.context=n,n.watch([`hasVerticalWriting`]).pipe((0,t.tap)(()=>this.update(this.values)),(0,t.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:kt({spreadMode:e.spreadMode,manifest:t})};return t.renditionFlow===`scrolled-continuous`&&(r.computedPageTurnMode=`scrollable`),r.computedPageTurnMode===`scrollable`&&(r.computedPageTurnDirection=`vertical`),n&&r.computedPageTurnAnimation===`slide`&&(i.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}}},yi=class extends N{onUnload(){}onCreateDocument(){return(0,t.of)(document.createElement(`div`))}onLoadDocument(){return t.EMPTY}onLayout(){return(0,t.of)(void 0)}onRenderHeadless(){return t.EMPTY}getDocumentFrame(){}},bi=class extends q{constructor(n,r,i,a,o,s,c){super(),this.item=n,this.containerElement=r,this.context=i,this.hookManager=a,this.renderer=o,this.settings=s,this.viewport=c,this.layoutTriggerSubject=new t.Subject,this.lastLayout=null,this.computeLayoutInformation=({isLastItem:t,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=gr(s);if(this.settings.values.computedSpreadMode){!c&&this.renderer.renditionLayout===`reflowable`&&!t&&(i=this.viewport.value.pageSize.width*2),!c&&this.renderer.renditionLayout===`reflowable`&&t&&o&&(i=this.viewport.value.pageSize.width*2);let n=o&&t&&c,s=(0,e.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?u(this.containerElement.style,`right`):l(this.containerElement.style,`right`,`${e}px`),t===void 0?u(this.containerElement.style,`left`):l(this.containerElement.style,`left`,`${t}px`),n===void 0?u(this.containerElement.style,`top`):l(this.containerElement.style,`top`,`${n}px`)},this.updateContainerLayout=({minimumWidth:n,edgeX:r,edgeY:i})=>a=>a.pipe((0,t.map)(t=>{let{width:a,height:o}=((0,e.isShallowEqual)(this.lastLayout?.pageSize,this.viewport.pageSize)?this.lastLayout:void 0)??{},{width:s=a,height:c=o}=t??{},{width:u,height:d}=this.viewport.pageSize,f=this.validateDimension(s??u,u,n),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},l(this.containerElement.style,`width`,`${f}px`),l(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 n=ve(this.didLayout$.pipe((0,t.first)()));return this.layoutTriggerSubject.next(e),n()};let d=this.layoutTriggerSubject.pipe((0,t.switchMap)(({spreadPosition:e,horizontalOffset:n,isLastItem:r,edgeX:i,edgeY:a})=>{let{blankPagePosition:o,minimumWidth:s}=this.computeLayoutInformation({horizontalOffset:n,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,t.merge)((0,t.of)({type:`start`}),c.pipe(this.updateContainerLayout({minimumWidth:s,edgeX:i,edgeY:a}),(0,t.map)(e=>(this.hookManager.execute(`item.onAfterLayout`,{blankPagePosition:o,item:this.item,minimumWidth:s}),{type:`end`,data:e}))))}),(0,t.share)());this.didLayout$=d.pipe((0,t.filter)(e=>e.type===`end`),(0,t.map)(e=>e.data),(0,t.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}}},xi=class extends M{constructor(e,r,i,a,o,s,c){super({isLoaded:!1,isReady:!1,isDirty:!1,isError:!1,error:void 0}),this.item=e,this.parentElement=r,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=()=>{this.isDestroyed||(super.destroy(),this._layout.destroy(),this.renderer.destroy(),this.containerElement.remove())},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith(`vertical`),this.layout=e=>this._layout.layout(e),this.containerElement=Si(r,e,o),r.appendChild(this.containerElement);let l=this.settings.values.getRenderer?.(e);this.resourcesHandler=new P(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 yi(u),this._layout=new bi(e,this.containerElement,i,o,this.renderer,this.settings,this.viewport);let d=this.renderer.state$.pipe((0,n.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,n.tap)(()=>{this.mergeCompare({isDirty:!1,isReady:this.renderer.value.state===`loaded`})}),(0,n.share)()),(0,t.merge)(d,this.didLayout$).pipe((0,n.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 Zr({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})}},Si=(e,t,n)=>{let r=e.ownerDocument.createElement(`div`);return r.setAttribute(`data-${mt}`,``),r.classList.add(`spineItem`),r.classList.add(`spineItem-${t.renditionLayout??`reflowable`}`),r.style.cssText=`
|
|
194
194
|
position: absolute;
|
|
195
195
|
overflow: hidden;
|
|
196
|
-
`,r.dataset.isReady=`false`,n.execute(`item.onBeforeContainerAttach`,{element:r,item:t}),r},Oi=class extends q{constructor(n,r,i,a,o,s){super(),this.context=n,this.spineItemsManager=r,this.spineLocator=i,this.settings=a,this.spineLayout=o,this.viewport=s,this.forcedOpenSubject=new t.BehaviorSubject(new Map);let c=this.forcedOpenSubject.pipe((0,t.map)(e=>Array.from(e.keys()).sort((e,t)=>e-t)),(0,t.distinctUntilChanged)(e.arrayEqual),(0,t.shareReplay)({bufferSize:1,refCount:!0}));(0,t.merge)(this.context.bridgeEvent.position$,this.viewport.layout$,this.spineLayout.layout$,c,a.watch([`numberOfAdjacentSpineItemToPreLoad`])).pipe((0,t.debounceTime)(100),O(this.context.bridgeEvent.viewportFree$),(0,t.withLatestFrom)(this.context.bridgeEvent.position$,c),(0,t.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,t.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()}},ki=(e,t,n)=>{let r=(n.width-t.width)/2,i=(n.height-t.height)/2;return new H({x:e.x-r,y:e.y-i})},Ai=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)}},ji=class{constructor({width:e,height:t}){this.__symbol=Symbol(`AbsoluteViewport`),this.width=e,this.height=t}},Mi=class{constructor({width:e,height:t}){this.__symbol=Symbol(`RelativeViewport`),this.width=e,this.height=t}},Ni=({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},Pi=({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},Fi=({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},Ii=({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=Fi({threshold:o,visibleHeightOfItem:m,visibleWidthOfItem:p,viewportPosition:s});return c?{visible:h}:{visible:Pi({itemHeight:a,itemWidth:i,threshold:o,visibleHeightOfItem:m,visibleWidthOfItem:p})||h}},Li=({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},Ri=({spineItemPosition:e,itemLayout:{left:t,top:n}})=>new V({x:t+e.x,y:n+e.y}),zi=({position:e,threshold:t,restrictToScreen:n,spineItemsManager:r,spineLayout:i,useAbsoluteViewport:a=!0,viewport:o})=>{let s=Li({position:e,spineItemsManager:r,spineLayout:i})||r.get(0),c=a?o.absoluteViewport:o.relativeViewport,l=ki(e,o.absoluteViewport,c),u=Ai.from(l,c),d=[];for(let e of r.items){let{visible:r}=Ii({itemPosition:i.getSpineItemSpineLayoutInfo(e),threshold:t,viewportPosition:u,restrictToScreen:n});r&&d.push(e)}let f=d[0]??s,p=d[d.length-1]??f;if(!f||!p)return;let m=r.getSpineItemIndex(f),h=r.getSpineItemIndex(p);return{beginIndex:m??0,endIndex:h??0}},Bi=({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 L({x:Math.max(e.x-n,0),y:Math.max(e.y-r,0)})},s=e=>Ri({spineItemPosition:new L({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=Ri({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=ki(e,s.absoluteViewport,c),{visible:u}=Ii({viewportPosition:Ai.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})=>Ri({itemLayout:i.getSpineItemSpineLayoutInfo(e),spineItemPosition:t}),_getAbsolutePageIndexFromPageIndex:n=>Ni({...n,context:t,settings:r,spineItemsManager:e,spineLayout:i}),getSpineItemPagePositionFromSpinePosition:t=>{let r=Li({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=>Li({position:t,spineItemsManager:e,spineLayout:i}),getSpineItemFromIframe:c,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:t=>zi({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 L({x:Math.min(Math.max(0,e.x),r),y:Math.min(Math.max(0,e.y),n)})}}},Vi=class extends q{constructor(n){super(),this.spineItemsManager=n,this.states$=this.spineItemsManager.items$.pipe((0,t.switchMap)(n=>(0,t.merge)(...n.map(n=>n.pipe((0,t.map)(e=>({item:n,...e})),(0,t.distinctUntilChanged)(e.isShallowEqual))))),(0,t.share)()),this.itemResize$=this.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>D(e.element).pipe((0,t.map)(t=>({entries:t,item:e})))))),(0,t.share)()),this.itemLoad$=this.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>e.loaded$.pipe((0,t.map)(()=>e))))),(0,t.share)()),this.itemUnload$=this.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>e.unloaded$.pipe((0,t.map)(()=>e))))),(0,t.share)())}},Hi=class extends q{constructor(e,n,r,i,a){super(),this.spineItemsManager=e,this.spineItemsObserver=n,this.context=r,this.settings=i,this.viewport=a,this.externalLayoutTrigger=new t.Subject,this.spineItemsRelativeLayouts=[];let o=(0,t.merge)(n.itemLoad$,n.itemUnload$).pipe((0,t.map)(()=>({immediate:!1}))),s=(0,t.merge)(this.externalLayoutTrigger,o);this.layout$=s.pipe((0,t.tap)(()=>{this.spineItemsManager.items.forEach(e=>{e.markDirty()})}),(0,t.debounce)(e=>e.immediate?(0,t.of)(void 0):(0,t.timer)(50)),(0,t.switchMap)(()=>this.spineItemsManager.items.reduce((n,o,s)=>n.pipe((0,t.concatMap)(({horizontalOffset:n,verticalOffset:c})=>{let l=n%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,n,c,a.absoluteViewport.height);return o.layout({spreadPosition:p,horizontalOffset:n,isLastItem:u,edgeX:m,edgeY:h}).pipe((0,t.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,t.of)({horizontalOffset:0,verticalOffset:0}))),(0,t.takeUntil)(this.destroy$),(0,t.share)()),this.layout$.subscribe(),this.watchForVerticalWritingUpdate()}watchForVerticalWritingUpdate(){this.spineItemsObserver.itemLoad$.pipe((0,t.tap)(e=>{this.context.update({hasVerticalWriting:e.isUsingVerticalWriting()})}),(0,t.takeUntil)(this.destroy$)).subscribe()}layout(e={}){this.externalLayoutTrigger.next(e)}getSpineItemSpineLayoutInfo(e){let t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new z({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 z({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 z({right:t?o-n:n+i,left:s,x:s,top:r,bottom:a,height:a,width:i,y:r})}},Ui=class extends q{constructor(e,r,i,a,o,s,c){super(),this.context=e,this.pagination=r,this.spineItemsManager=i,this.spineItemLocator=a,this.settings=o,this.hookManager=s,this.viewport=c,this.elementSubject=new t.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineItemsObserver=new Vi(i),this.spineLayout=new Hi(i,this.spineItemsObserver,e,o,c),this.locator=Bi({context:e,spineItemsManager:i,spineItemLocator:a,settings:o,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new Oi(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,n.filter)(F),(0,n.tap)(e=>{let t=e.ownerDocument.createElement(`div`);t.style.cssText=`
|
|
196
|
+
`,r.dataset.isReady=`false`,n.execute(`item.onBeforeContainerAttach`,{element:r,item:t}),r},Ci=class extends q{constructor(n,r,i,a,o,s){super(),this.context=n,this.spineItemsManager=r,this.spineLocator=i,this.settings=a,this.spineLayout=o,this.viewport=s,this.forcedOpenSubject=new t.BehaviorSubject(new Map);let c=this.forcedOpenSubject.pipe((0,t.map)(e=>Array.from(e.keys()).sort((e,t)=>e-t)),(0,t.distinctUntilChanged)(e.arrayEqual),(0,t.shareReplay)({bufferSize:1,refCount:!0}));(0,t.merge)(this.context.bridgeEvent.position$,this.viewport.layout$,this.spineLayout.layout$,c,a.watch([`numberOfAdjacentSpineItemToPreLoad`])).pipe((0,t.debounceTime)(100),A(this.context.bridgeEvent.viewportFree$),(0,t.withLatestFrom)(this.context.bridgeEvent.position$,c),(0,t.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,t.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()}},wi=(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})},Ti=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)}},Ei=class{constructor({width:e,height:t}){this.__symbol=Symbol(`AbsoluteViewport`),this.width=e,this.height=t}},Di=class{constructor({width:e,height:t}){this.__symbol=Symbol(`RelativeViewport`),this.width=e,this.height=t}},Oi=({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},ki=({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},Ai=({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},ji=({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=Ai({threshold:o,visibleHeightOfItem:m,visibleWidthOfItem:p,viewportPosition:s});return c?{visible:h}:{visible:ki({itemHeight:a,itemWidth:i,threshold:o,visibleHeightOfItem:m,visibleWidthOfItem:p})||h}},Mi=({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},Ni=({spineItemPosition:e,itemLayout:{left:t,top:n}})=>new U({x:t+e.x,y:n+e.y}),Pi=({position:e,threshold:t,restrictToScreen:n,spineItemsManager:r,spineLayout:i,useAbsoluteViewport:a=!0,viewport:o})=>{let s=Mi({position:e,spineItemsManager:r,spineLayout:i})||r.get(0),c=a?o.absoluteViewport:o.relativeViewport,l=wi(e,o.absoluteViewport,c),u=Ti.from(l,c),d=[];for(let e of r.items){let{visible:r}=ji({itemPosition:i.getSpineItemSpineLayoutInfo(e),threshold:t,viewportPosition:u,restrictToScreen:n});r&&d.push(e)}let f=d[0]??s,p=d[d.length-1]??f;if(!f||!p)return;let m=r.getSpineItemIndex(f),h=r.getSpineItemIndex(p);return{beginIndex:m??0,endIndex:h??0}},Fi=({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 B({x:Math.max(e.x-n,0),y:Math.max(e.y-r,0)})},s=e=>Ni({spineItemPosition:new B({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=Ni({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=wi(e,s.absoluteViewport,c),{visible:u}=ji({viewportPosition:Ti.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})=>Ni({itemLayout:i.getSpineItemSpineLayoutInfo(e),spineItemPosition:t}),_getAbsolutePageIndexFromPageIndex:n=>Oi({...n,context:t,settings:r,spineItemsManager:e,spineLayout:i}),getSpineItemPagePositionFromSpinePosition:t=>{let r=Mi({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=>Mi({position:t,spineItemsManager:e,spineLayout:i}),getSpineItemFromIframe:c,getSpineItemPageIndexFromNode:l,getVisibleSpineItemsFromPosition:t=>Pi({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 B({x:Math.min(Math.max(0,e.x),r),y:Math.min(Math.max(0,e.y),n)})}}},Ii=class extends q{constructor(n){super(),this.spineItemsManager=n,this.states$=this.spineItemsManager.items$.pipe((0,t.switchMap)(n=>(0,t.merge)(...n.map(n=>n.pipe((0,t.map)(e=>({item:n,...e})),(0,t.distinctUntilChanged)(e.isShallowEqual))))),(0,t.share)()),this.itemResize$=this.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>k(e.element).pipe((0,t.map)(t=>({entries:t,item:e})))))),(0,t.share)()),this.itemLoad$=this.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>e.loaded$.pipe((0,t.map)(()=>e))))),(0,t.share)()),this.itemUnload$=this.spineItemsManager.items$.pipe((0,t.switchMap)(e=>(0,t.merge)(...e.map(e=>e.unloaded$.pipe((0,t.map)(()=>e))))),(0,t.share)())}},Li=class extends q{constructor(e,n,r,i,a){super(),this.spineItemsManager=e,this.spineItemsObserver=n,this.context=r,this.settings=i,this.viewport=a,this.externalLayoutTrigger=new t.Subject,this.spineItemsRelativeLayouts=[];let o=(0,t.merge)(n.itemLoad$,n.itemUnload$).pipe((0,t.map)(()=>({immediate:!1}))),s=(0,t.merge)(this.externalLayoutTrigger,o);this.layout$=s.pipe((0,t.tap)(()=>{this.spineItemsManager.items.forEach(e=>{e.markDirty()})}),(0,t.debounce)(e=>e.immediate?(0,t.of)(void 0):(0,t.timer)(50)),(0,t.switchMap)(()=>this.spineItemsManager.items.reduce((n,o,s)=>n.pipe((0,t.concatMap)(({horizontalOffset:n,verticalOffset:c})=>{let l=n%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,n,c,a.absoluteViewport.height);return o.layout({spreadPosition:p,horizontalOffset:n,isLastItem:u,edgeX:m,edgeY:h}).pipe((0,t.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,t.of)({horizontalOffset:0,verticalOffset:0}))),(0,t.takeUntil)(this.destroy$),(0,t.share)()),this.layout$.subscribe(),this.watchForVerticalWritingUpdate()}watchForVerticalWritingUpdate(){this.spineItemsObserver.itemLoad$.pipe((0,t.tap)(e=>{this.context.update({hasVerticalWriting:e.isUsingVerticalWriting()})}),(0,t.takeUntil)(this.destroy$)).subscribe()}layout(e={}){this.externalLayoutTrigger.next(e)}getSpineItemSpineLayoutInfo(e){let t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new H({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 H({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 H({right:t?o-n:n+i,left:s,x:s,top:r,bottom:a,height:a,width:i,y:r})}},Ri=class extends q{constructor(e,r,i,a,o,s,c){super(),this.context=e,this.pagination=r,this.spineItemsManager=i,this.spineItemLocator=a,this.settings=o,this.hookManager=s,this.viewport=c,this.elementSubject=new t.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineItemsObserver=new Ii(i),this.spineLayout=new Li(i,this.spineItemsObserver,e,o,c),this.locator=Fi({context:e,spineItemsManager:i,spineItemLocator:a,settings:o,spineLayout:this.spineLayout,viewport:c}),this.spineItemsLoader=new Ci(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,n.filter)(R),(0,n.tap)(e=>{let t=e.ownerDocument.createElement(`div`);t.style.cssText=`
|
|
197
197
|
height: 100%;
|
|
198
198
|
position: relative;
|
|
199
|
-
`,t.className=`${
|
|
200
|
-
${e.style.cssText}
|
|
201
|
-
background-color: white;
|
|
202
|
-
position: relative;
|
|
203
|
-
`,e.classList.add(`${U}-reader`),e.setAttribute(pt,t),e.setAttribute(`data-prose-reader-container`,t),e),Yi=Jn(Oe(Qn(De(fe(Un(Zn(lr(en(nt(Ft(pe(ge(zn(Pt(Xn(qi)))))))))))))))),Xi=e=>t=>e(t),Zi=5e3,Qi=(e,{itemReadinessTimeoutMs:n=Zi}={})=>Bt(e).pipe((0,t.switchMap)(r=>{if(r.boundary===`start`)return(0,t.of)(r);let i=e.spineItemsManager.items,a=i[i.length-1];return a?a.value.isReady?(0,t.of)(r):a.isReady$.pipe((0,t.filter)(Boolean),(0,t.first)(),(0,t.map)(()=>r),n===1/0?t.identity:(0,t.timeout)({first:n,with:()=>t.EMPTY}),zt(e.navigation)):t.EMPTY}),(0,t.share)());exports.AbstractSpinePosition=B,exports.CSS_VAR_ABSOLUTE_VIEWPORT_HEIGHT=G,exports.CSS_VAR_ABSOLUTE_VIEWPORT_WIDTH=W,exports.CfiManager=br,exports.Context=Cr,exports.ControlledNavigationController=Ar,exports.DestroyableClass=q,exports.DocumentRenderer=Ae,exports.Features=wr,exports.HTML_ATTRIBUTE_DATA_READER_ID=pt,exports.HTML_PREFIX=U,exports.HTML_PREFIX_SCROLL_NAVIGATOR=ht,exports.HTML_PREFIX_SPINE_ITEM=gt,exports.HTML_PREFIX_VIEWPORT=mt,exports.HTML_STYLE_PREFIX=ft,exports.HookManager=Tr,exports.InternalNavigator=Xr,exports.LayoutEntry=I,exports.Locker=Z,exports.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=dt,exports.PROSE_READER_NAMESPACE=lt,exports.Pages=J,exports.Pagination=bi,exports.PaginationController=xi,exports.ReactiveEntity=k,exports.ResourceHandler=A,exports.ResourcesLocator=rn,exports.ScrollNavigationController=ar,exports.ScrollPosition=rr,exports.SettingsManager=Si,exports.Spine=Ui,exports.SpineItem=Ei,exports.SpineItemPageLayout=rt,exports.SpineItemPageSpineLayout=it,exports.SpineItemPosition=L,exports.SpineItemSpineLayout=z,exports.SpineItemsManager=Wi,exports.SpineItemsObserver=Vi,exports.SpinePosition=V,exports.UnboundScrollPosition=ir,exports.UnboundSpineItemPagePosition=R,exports.UnboundSpinePosition=H,exports.VIEWPORT_ADJUSTMENT_THROTTLE=ut,exports.Viewport=Gi,exports.consolidate=nn,exports.createReader=Yi,exports.deferIdle=Se,exports.deferNextResult=be,exports.generateCfiForSpineItemPage=fr,exports.generateCfiFromRange=pr,exports.generateRootCfi=ur,exports.getAttributeValueFromString=se,exports.getBase64FromBlob=_e,exports.getFrameViewportInfo=w,exports.getItemAnchor=mr,exports.htmlEnhancer=nt,exports.idle=xe,exports.injectCSS=S,exports.injectCSSToFrame=ce,exports.isDefined=F,exports.isHtmlElement=x,exports.isHtmlTagElement=re,exports.isRootCfi=gr,Object.defineProperty(exports,"isShallowEqual",{enumerable:!0,get:function(){return e.isShallowEqual}}),exports.layoutEnhancer=Pt,exports.mapKeysTo=ye,exports.observeBookBoundaryReached=Qi,exports.observeIntersection=we,exports.observeMutation=Ce,exports.observeNextSettledNavigation=Rt,exports.observeResize=D,exports.observeSettledNavigation=Lt,exports.paginationEnhancer=zn,exports.parseCfi=vr,exports.pick=ve,exports.removeAttributeIfPresent=s,exports.removeCSS=le,exports.removeStylePropertyIfPresent=u,exports.resolveCfi=yr,exports.rootEnhancer=Xi,exports.setAttributeIfChanged=o,exports.setPropertyIfChanged=c,exports.setStylePropertyIfChanged=l,exports.shouldEnableSpreadModeForViewport=jt,exports.shouldUseComputedSpreadModeForViewport=Mt,exports.spinePositionToSpineItemSpineLayout=on,exports.takeUntilNextNavigationSettled=zt,exports.upsertCSSToFrame=C,exports.waitForFrameLoad=ue,exports.waitForFrameReady=de,exports.waitForNavigationSettled=It,exports.waitForSwitch=O,exports.watchKeys=E;
|
|
199
|
+
`,t.className=`${G}-spine`,this.elementSubject.next(t)}));(0,t.merge)(this.element$.pipe((0,n.filter)(R),(0,n.tap)(e=>{let t=this.context.manifest.spineItems.map((t,n)=>new xi(t,e,this.context,this.settings,this.hookManager,n,this.viewport));this.spineItemsManager.addMany(t)})),l).pipe((0,n.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()}},zi=class extends q{constructor(e,n){super(),this.context=e,this.settings=n,this.orderedSpineItemsSubject=new t.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){return(e instanceof xi?e:this.get(e))?.index}addMany(e){this.orderedSpineItemsSubject.next([...this.orderedSpineItemsSubject.getValue(),...e])}get items(){return this.orderedSpineItemsSubject.value}destroyItems(){let e=this.orderedSpineItemsSubject.value;e.forEach(e=>{e.destroy()}),e.length&&this.orderedSpineItemsSubject.next([])}destroy(){this.destroyItems(),super.destroy()}},Bi=class extends M{constructor(e,n){let r=document.createElement(`div`);r.setAttribute(`data-${ft}`,``),super({element:r,pageSize:{width:1,height:1},width:1,height:1}),this.context=e,this.settingsManager=n,this.layoutSubject=new t.Subject,this.layout$=this.layoutSubject.asObservable(),(0,t.merge)(this.settingsManager.watch([`computedSpreadMode`]).pipe((0,t.tap)(()=>{this.mergeCompare({pageSize:this.calculatePageSize(this.value)})})),this.context.watch(`rootElement`).pipe((0,t.tap)(()=>{this.layout()}))).pipe((0,t.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?l(t,ht,`${e.width}px`):u(t,ht),e.height>0?l(t,gt,`${e.height}px`):u(t,gt)}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 Ei({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 Di({width:e.width/t,height:e.height/t})}destroy(){super.destroy(),this.layoutSubject.complete(),this.value.element.remove()}},Vi=({manifest:e,cfi:r,...a})=>{let o=crypto.randomUUID(),s=`${ut}-core-${o}`,c=new t.Subject,l=new t.Subject,u=new br,d=new vr(e),f=new vi(a,d),p=new yr(d,f),m=new zi(d,f),h=new hr(u,m),g=new Bi(d,f),_=ei({context:d,settings:f,viewport:g}),v=new hi(d,m),y=new Ri(d,v,m,_,f,u,g),b=mi({cfi:h,context:d,spineItemsManager:m,hookManager:u,spine:y,settings:f,viewport:g}),ee=new gi(d,v,m,y,_,b.isLocked$,h);b.navigationState$.subscribe(d.bridgeEvent.viewportStateSubject),b.navigation$.subscribe(d.bridgeEvent.navigationSubject),b.position$.subscribe(d.bridgeEvent.positionSubject),v.subscribe(d.bridgeEvent.paginationSubject);let x=(e={})=>{c.next(e)},te=e=>{if(d.value.rootElement)throw Error(`This reader is already mounted. A reader renders a single book, destroy it and create a new reader instead.`);i.log(`mount`,{containerElement:e}),C(document,s,xr);let t=Wi(e,o);d.update({rootElement:t}),x({immediate:!0})},S=f.watch([`computedSpreadMode`]).pipe((0,n.skip)(1),(0,n.tap)(()=>x())),ne=(0,t.merge)(c.pipe((0,n.tap)(e=>{d.value.rootElement&&(g.layout(),y.layout(e))}),(0,n.takeUntil)(l)),S).subscribe();return{id:o,context:d,spine:y,hookManager:u,cfi:h,navigation:b,spineItemsObserver:y.spineItemsObserver,spineItemsManager:m,layout:x,mount:te,destroy:()=>{let e=d.value.rootElement;ie(document,s),e&&Gi(e),ne.unsubscribe(),m.destroy(),ee.destroy(),f.destroy(),v.destroy(),d.destroy(),b.destroy(),y.destroy(),p.destroy(),l.next(),l.complete(),g.destroy()},pagination:{get state(){return v.value},get state$(){return v}},settings:f,renderHeadless:e=>m.get(e)?.renderer.renderHeadless()??(0,t.of)(void 0),viewport:g,viewportState$:d.bridgeEvent.viewportState$,viewportFree$:d.bridgeEvent.viewportFree$,mounted$:d.watch(`rootElement`).pipe((0,n.map)(R),(0,n.distinctUntilChanged)()),features:p,$:{destroy$:l}}},Hi=`${G}-reader`,Ui=`data-prose-reader-container`,Wi=(e,t)=>(e.classList.add(Hi),o(e,dt,t),o(e,Ui,t),e),Gi=e=>{e.classList.remove(Hi),e.removeAttribute(dt),e.removeAttribute(Ui)},Ki=Un(Te(qn(we(le(Kn(ir(en($e(Ft(ue(me(Rn(Pt(Gn(Vi))))))))))))))),qi=e=>t=>e(t),Ji=5e3,Yi=(e,{itemReadinessTimeoutMs:n=Ji}={})=>Bt(e).pipe((0,t.switchMap)(r=>{if(r.boundary===`start`)return(0,t.of)(r);let i=e.spineItemsManager.items,a=i[i.length-1];return a?a.value.isReady?(0,t.of)(r):a.isReady$.pipe((0,t.filter)(Boolean),(0,t.first)(),(0,t.map)(()=>r),n===1/0?t.identity:(0,t.timeout)({first:n,with:()=>t.EMPTY}),zt(e.navigation)):t.EMPTY}),(0,t.share)());exports.AbstractSpinePosition=nt,exports.CSS_VAR_ABSOLUTE_VIEWPORT_HEIGHT=gt,exports.CSS_VAR_ABSOLUTE_VIEWPORT_WIDTH=ht,exports.CfiManager=hr,exports.Context=vr,exports.ControlledNavigationController=Tr,exports.DestroyableClass=q,exports.DocumentRenderer=N,exports.Features=yr,exports.HTML_ATTRIBUTE_DATA_READER_ID=dt,exports.HTML_PREFIX=G,exports.HTML_PREFIX_SCROLL_NAVIGATOR=pt,exports.HTML_PREFIX_SPINE_ITEM=mt,exports.HTML_PREFIX_VIEWPORT=ft,exports.HTML_STYLE_PREFIX=ut,exports.HookManager=br,exports.InternalNavigator=Kr,exports.LayoutEntry=z,exports.Locker=Lr,exports.PAGINATION_UPDATE_AFTER_VIEWPORT_ADJUSTMENT_DEBOUNCE=lt,exports.PROSE_READER_NAMESPACE=st,exports.Pages=J,exports.Pagination=hi,exports.PaginationController=gi,exports.ReactiveEntity=M,exports.ResourceHandler=P,exports.ResourcesLocator=rn,exports.ScrollNavigationController=er,exports.ScrollPosition=Qn,exports.SettingsManager=_i,exports.Spine=Ri,exports.SpineItem=xi,exports.SpineItemPageLayout=et,exports.SpineItemPageSpineLayout=tt,exports.SpineItemPosition=B,exports.SpineItemSpineLayout=H,exports.SpineItemsManager=zi,exports.SpineItemsObserver=Ii,exports.SpinePosition=U,exports.UnboundScrollPosition=$n,exports.UnboundSpineItemPagePosition=V,exports.UnboundSpinePosition=W,exports.VIEWPORT_ADJUSTMENT_THROTTLE=ct,exports.Viewport=Bi,exports.consolidate=nn,exports.createReader=Ki,exports.deferIdle=be,exports.deferNextResult=ve,exports.generateCfiForSpineItemPage=sr,exports.generateCfiFromRange=cr,exports.generateRootCfi=ar,exports.getAttributeValueFromString=T,exports.getBase64FromBlob=he,exports.getFrameViewportInfo=D,exports.getItemAnchor=lr,exports.htmlEnhancer=$e,exports.idle=ye,exports.injectCSS=C,exports.injectCSSToFrame=ae,exports.isDefined=R,exports.isHtmlElement=S,exports.isHtmlTagElement=ne,exports.isRootCfi=dr,Object.defineProperty(exports,"isShallowEqual",{enumerable:!0,get:function(){return e.isShallowEqual}}),exports.layoutEnhancer=Pt,exports.mapKeysTo=_e,exports.observeBookBoundaryReached=Yi,exports.observeIntersection=xe,exports.observeMutation=j,exports.observeNextSettledNavigation=Rt,exports.observeResize=k,exports.observeSettledNavigation=Lt,exports.paginationEnhancer=Rn,exports.parseCfi=pr,exports.pick=ge,exports.removeAttributeIfPresent=s,exports.removeCSS=oe,exports.removeStylePropertyIfPresent=u,exports.resolveCfi=mr,exports.rootEnhancer=qi,exports.setAttributeIfChanged=o,exports.setPropertyIfChanged=c,exports.setStylePropertyIfChanged=l,exports.shouldEnableSpreadModeForViewport=jt,exports.shouldUseComputedSpreadModeForViewport=Mt,exports.spinePositionToSpineItemSpineLayout=on,exports.takeUntilNextNavigationSettled=zt,exports.upsertCSSToFrame=E,exports.waitForFrameLoad=se,exports.waitForFrameReady=ce,exports.waitForNavigationSettled=It,exports.waitForSwitch=A,exports.watchKeys=O;
|
|
204
200
|
//# sourceMappingURL=index.cjs.map
|