@prose-reader/core 1.235.0 → 1.237.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/createReaderWithEnhancer.d.ts +5 -1
- package/dist/index.d.ts +25 -24
- package/dist/index.js +22 -21
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +2 -2
- package/dist/index.umd.cjs.map +1 -1
- package/dist/reader.d.ts +5 -1
- package/dist/spine/SpineItemsManager.d.ts +2 -2
- package/dist/spineItem/SpineItem.d.ts +1 -1
- package/package.json +4 -4
package/dist/index.umd.cjs
CHANGED
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
position: relative;
|
|
275
275
|
overflow-y: scroll;
|
|
276
276
|
overflow-x: hidden;
|
|
277
|
-
`,g.className=`${_}-scroll-navigator`,g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),a=o.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(o.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(o.startWith(!1),o.switchMap(()=>o.merge(o.of(!0),o.of(!1))),o.shareReplay(1));const u=o.merge(s.element$.pipe(o.filter(k),o.switchMap(p=>K(p))),s.element$.pipe(o.filter(k),o.switchMap(p=>o.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(o.switchMap(()=>o.timer(10).pipe(o.map(()=>!1),o.startWith(!0))),o.distinctUntilChanged(),o.startWith(!1)),d=o.combineLatest([u,this.isScrolling$]).pipe(o.map(([p,g])=>p||g),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(k),o.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:g})=>g==="controlled"?o.NEVER:o.fromEvent(p,"scroll").pipe(o.withLatestFrom(d),o.filter(([,m])=>!m),o.map(([m])=>m))))),o.share()),o.merge(c,a,l).pipe(o.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.value.element;if(!e)return new $({x:0,y:0});const t=this.viewport.scaleFactor;return new $({x:e.scrollLeft/t,y:e.scrollTop/t})}}const se=(i,e,t)=>{const n=t-i,s=t*(e*i)/(t||1);return Math.max(0,Math.min(n,s))},Pe=(i,e)=>(e||0)===0||(i||0)===0?1:Math.floor(Math.max(1,i/e)),re=(i,e,t)=>{const n=Pe(t,e),s=[...Array(n)].map((r,c)=>c*e);return i>=n*e?s[s.length-1]||0:s.find(r=>i<r+e)||0},St=(i,e,t)=>{const n=[...Array(t)].map((s,r)=>r*e);return i<=0||t===0?0:i>=t*e?t-1:n.findIndex(s=>i<s+e)??0},Dn=({itemWidth:i,itemHeight:e,spineItemPosition:t})=>new M({x:Math.min(i,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),yt=({itemHeight:i,itemWidth:e,isUsingVerticalWriting:t,pageWidth:n,pageHeight:s,pageTurnDirection:r,pageTurnMode:c})=>r==="vertical"&&c==="scrollable"?1:t||r==="vertical"?Pe(i,s):Pe(e,n),bt=({itemWidth:i,itemHeight:e,position:t,isUsingVerticalWriting:n,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a,isRTL:l})=>{const d=Dn({spineItemPosition:t,itemHeight:e,itemWidth:i}).x,p=yt({isUsingVerticalWriting:n,itemHeight:e,itemWidth:i,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a});if(n)return St(t.y,r,p);const g=St(d,s,p);return l?p-1-g:g},Nn=({pageIndex:i,itemLayout:e,context:t,isUsingVerticalWriting:n})=>{if(n){const r=se(t.getPageSize().height,i,e.height);return new M({x:0,y:r})}const s=se(t.getPageSize().width,i,e.width);return t.isRTL()?new M({x:e.width-s-t.getPageSize().width,y:0}):new M({x:s,y:0})},It=({context:i,settings:e})=>{const t=(c,a,l)=>{let u;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?u=c.getBoundingClientRect().x:c&&(u=(c?zt(c,a):void 0)?.getBoundingClientRect().x||u);const d=l.layout.layoutInfo?.width||0,p=i.getPageSize().width;if(u!==void 0){const g=re(u,p,d);return new M({x:g,y:0})}};return{getSpineItemPositionFromNode:t,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:a})=>Nn({context:i,isUsingVerticalWriting:!!a.isUsingVerticalWriting(),itemLayout:a.layout.layoutInfo,pageIndex:c}),getSpineItemPageIndexFromPosition:c=>bt({...c,isRTL:i.isRTL(),pageWidth:i.getPageSize().width,pageHeight:i.getPageSize().height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,a,l)=>{const u=t(c,a,l),{height:d,width:p}=l.layout.layoutInfo;return u?bt({isUsingVerticalWriting:!!l.isUsingVerticalWriting(),position:u,itemHeight:d,itemWidth:p,isRTL:i.isRTL(),pageWidth:i.getPageSize().width,pageHeight:i.getPageSize().height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,a)=>{const{width:l,height:u}=a.layout.layoutInfo;return new M({x:re(c.x,i.getPageSize().width,l),y:re(c.y,i.getPageSize().height,u)})},getSpineItemPagePositionFromSpineItemPosition:(c,a,l)=>{const{width:u,height:d}=l.layout.layoutInfo,p=i.getPageSize().width,g=i.getPageSize().height;if(!!l.isUsingVerticalWriting()){const f=se(g,a,d);return new ee({x:c.x,y:c.y-f})}const h=se(p,a,u);if(i.isRTL()){const f=u-(a+1)*p;return new ee({x:c.x-Math.max(0,f),y:c.y})}return new ee({x:c.x-h,y:c.y})}}},On=({context:i,settings:e})=>{const t=It({context:i,settings:e});return{getNavigationForLastPage:c=>{const a=c.numberOfPages;return t.getSpineItemPositionFromPageIndex({pageIndex:a-1,spineItem:c})},getNavigationForPosition:(c,a)=>t.getSpineItemClosestPositionFromUnsafePosition(a,c),getNavigationFromNode:(c,a,l)=>t.getSpineItemPositionFromNode(a,l,c)||new M({x:0,y:0})}},N=({position:{x:i,y:e},pageSizeWidth:t,visibleAreaRectWidth:n})=>{const r=i%n!==0?i-t:i;return new $({x:r,y:e})},wt=({position:i,isRTL:e,pageSizeHeight:t,spineItemsManager:n,visibleAreaRectWidth:s,spine:r})=>{const c=n.get(n.items.length-1),a=r.getSpineItemSpineLayoutInfo(c||0),l=a.bottom-t,u=Math.min(Math.max(0,i.y),l);if(e)return new $({x:Math.max(Math.min(0,i.x),a.left),y:u});const d=a.right-s;return new $({x:Math.min(Math.max(0,i.x),d),y:u})},$e=({viewportPosition:i,spineLocator:e,context:t,spineItemNavigationResolver:n})=>{const s=e.getSpineItemFromPosition(i);if(s){const r=e.getSpineItemPositionFromSpinePosition(i,s),c=n.getNavigationForPosition(s,r),a=e.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:s});return N({position:a,pageSizeWidth:t.getPageSize().width,visibleAreaRectWidth:t.state.visibleAreaRect.width})}return new $({x:0,y:0})},kn=({pageIndex:i,spineItemsManager:e,spineItemId:t,context:n,spineLocator:s,spineItemNavigationResolver:r})=>{const c=e.get(t);if(!c){const u=i*n.getPageSize().width;return $e({viewportPosition:new $({x:u,y:0}),context:n,spineItemNavigationResolver:r,spineLocator:s})}const a=s.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:i,spineItem:c}),l=s.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:c});return N({position:l,pageSizeWidth:n.getPageSize().width,visibleAreaRectWidth:n.state.visibleAreaRect.width})},Vn=({anchor:i,spineItem:e,context:t})=>{const n=e.layout.layoutInfo?.width||0,s=t.getPageSize().width,c=e.getBoundingRectOfElementFromSelector(i)?.x||0;return re(c,s,n)},Un=({anchor:i,context:e,spineItem:t,spineLocator:n})=>{const s=Vn({anchor:i,spineItem:t,context:e});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new M({x:s,y:0}),spineItem:t})},Wn=({anchor:i,spineItem:e,spineLocator:t,context:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const c=Un({anchor:i,context:n,spineItem:e,spineLocator:t});return N({position:c,pageSizeWidth:s,visibleAreaRectWidth:r})},zn=({context:i,spineItemsManager:e,spineLocator:t,url:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{try{const c=n instanceof URL?n:new URL(n),a=`${c.origin}${c.pathname}`,l=i.manifest?.spineItems.find(u=>u.href===a);if(l){const u=e.get(l.id);if(u){const d=Wn({anchor:c.hash,spineItem:u,context:i,spineLocator:t,pageSizeWidth:s,visibleAreaRectWidth:r});return{position:N({position:d,pageSizeWidth:s,visibleAreaRectWidth:r}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},Hn=({spineItem:i,spineItemPosition:e,spineLocator:t,spineItemLocator:n,context:s})=>{const r=n.getSpineItemClosestPositionFromUnsafePosition(e,i),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:i});return N({position:c,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},Bn="spineNavigator",_n=({context:i,spineItemsManager:e,locator:t,settings:n,spine:s})=>{const r=On({context:i,settings:n});return{getNavigationForUrl:g=>zn({context:i,spineItemsManager:e,spineLocator:t,url:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),getNavigationForSpineItemPage:g=>kn({...g,context:i,spineItemsManager:e,spineItemNavigationResolver:r,spineLocator:t}),getNavigationFromSpineItemPosition:g=>Hn({...g,spineItemLocator:t.spineItemLocator,spineLocator:t,context:i}),getNavigationForCfi:g=>{const m=e.getSpineItemFromCfi(g),{node:h,offset:f=0}=be({cfi:g,spineItemsManager:e});if(!m){L.warn(Bn,`unable to detect item id from cfi ${g}`);return}const b=h?r.getNavigationFromNode(m,h,f):new M({x:0,y:0}),S=t.getSpinePositionFromSpineItemPosition({spineItemPosition:b,spineItem:m});return N({position:S,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})},getNavigationForLastPage:g=>{const m=r.getNavigationForLastPage(g),h=t.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:g});return N({position:h,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})},getNavigationForSpineIndexOrId:g=>{const m=e.get(g);if(m){const h=t.getSpinePositionFromSpineItem(m);return N({position:h,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})}return new $({x:0,y:0})},getNavigationForPosition:g=>$e({viewportPosition:g,context:i,spineItemNavigationResolver:r,spineLocator:t}),getMostPredominantNavigationForPosition:g=>{const m=n.values.computedPageTurnDirection,h=.5,f=m==="horizontal"?g.x+i.state.visibleAreaRect.width*h:0,b=m==="horizontal"?0:g.y+i.state.visibleAreaRect.height*h,S=wt({position:new $({x:f,y:b}),isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s});return $e({context:i,spineItemNavigationResolver:r,spineLocator:t,viewportPosition:S})},getAdjustedPositionWithSafeEdge:g=>wt({position:g,isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s}),isNavigationGoingForwardFrom:(g,m)=>n.values.computedPageTurnDirection==="vertical"?g.y>m.y:g.x>m.x,arePositionsDifferent:(g,m)=>g.x!==m.x||g.y!==m.y,getAdjustedPositionForSpread:g=>N({position:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),spineItemNavigator:r}},qn=({spineItemsManager:i,context:e,hookManager:t,spine:n,settings:s,viewport:r})=>{const c=new o.Subject,a=new we,l=_n({context:e,settings:s,spineItemsManager:i,locator:n.locator,spine:n}),u=new mt(s,t,e,n,r),d=new ft(r,s,t,n,e),p=new En(s,e,n,d,a,r),g=o.merge(c,p.navigation$),m=new gt(s,e,g,u,d,l,n,a.isLocked$),h=o.combineLatest([u.isNavigating$,d.isNavigating$,a.isLocked$,m.locker.isLocked$]).pipe(y.map(S=>S.some(w=>w)?"busy":"free"),y.distinctUntilChanged(),y.shareReplay(1));return{destroy:()=>{p.destroy(),u.destroy(),m.destroy()},getNavigation:()=>m.navigation,internalNavigator:m,scrollNavigationController:d,controlledNavigationController:u,locker:a,viewportState$:h,navigate:S=>{c.next(S)},lock(){return a.lock()},navigationResolver:l,navigation$:m.navigation$}};class vt extends Y{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class Pt extends E{constructor(e,t,n,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=n,this.spine=s,this.spineItemLocator=r;const c=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const l=({spineItem:u,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:u,position:d,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,u])=>{const{position:d}=u,p=this.pagination.value,{beginIndex:g,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:.5}})??{},h=this.spineItemsManager.get(g),f=this.spineItemsManager.get(m);if(!h||!f)return;const b=p.beginCfi,S=p.endCfi,{beginPageIndex:w=0}=l({spineItem:h,position:d})??{},{endPageIndex:v=0}=l({spineItem:f,position:d})??{},T=b===void 0||ne(b)||p.beginSpineItemIndex!==g,C=p.endSpineItemIndex!==m||S===void 0||ne(S),F=T?W(h.item):b,R=C?W(f.item):S,D=h.numberOfPages,U=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:D,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:R,endNumberOfPagesInSpineItem:U,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:u.id})}))})),a=c.pipe(x(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:l,endSpineItemIndex:u,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:p}=this.pagination.value;if(d===void 0||p===void 0||l===void 0||u===void 0)return;const g=this.spineItemsManager.get(l),m=this.spineItemsManager.get(u);g===void 0||m===void 0||this.pagination.update({beginCfi:ie({pageIndex:d,spineItem:g,spine:this.spine}),endCfi:ie({pageIndex:p,spineItem:m,spine:this.spine})})}));o.merge(c,a).pipe(o.takeUntil(this.destroy$)).subscribe()}}class $t extends E{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=P.shallowMergeIfDefined(this.inputSettings,e),n=this.getOutputSettings(t),s=!P.isShallowEqual(this.outputSettings,n);return{hasChanged:s,state:n,commit:()=>(this.inputSettings=t,this.outputSettings=n,s&&this.outputSettingsUpdateSubject.next(n),n)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(he(e),o.distinctUntilChanged(P.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Yn extends $t{constructor(e,t){super(e),this.context=t;const n=o.combineLatest([t.hasVerticalWriting$,t.manifest$]).pipe(y.tap(()=>{this.update(this.values)})),s=this.values$.pipe(y.tap(({forceSinglePageMode:r})=>{t.update({forceSinglePageMode:r})}));o.merge(n,s).pipe(y.takeUntil(t.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,n=this.context.state.hasVerticalWriting??!1,s={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0};return t?.renditionFlow==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),n&&s.computedPageTurnAnimation==="slide"&&(L.warn(`pageTurnAnimation ${s.computedPageTurnAnimation} incompatible with current book, switching back to default`),s.computedPageTurnAnimation="none"),s.computedPageTurnMode==="scrollable"?(s.computedPageTurnAnimationDuration=0,s.computedPageTurnAnimation="none"):s.computedPageTurnAnimationDuration=e.pageTurnAnimationDuration!==void 0?e.pageTurnAnimationDuration:300,s}getOutputSettings(e){const t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{forceSinglePageMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class xn extends E{constructor(e,t,n,s,r,c){super(),this.item=e,this.containerElement=t,this.context=n,this.hookManager=s,this.renderer=r,this.settings=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:a,minimumWidth:l})=>u=>u.pipe(o.map(d=>{const p=P.isShallowEqual(this.lastLayout?.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:g,height:m}=p??{},{width:h=g,height:f=m}=d??{},{width:b,height:S}=this.context.getPageSize(),w=this.validateDimension(h??b,b,l),v=this.settings.values.computedPageTurnMode==="scrollable"?f??S:this.validateDimension(f??S,S,S);return this.lastLayout={width:w,height:v,pageSize:this.context.getPageSize()},this.containerElement.style.width=`${w}px`,this.containerElement.style.height=`${v}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:a,item:this.item,minimumWidth:l}),{width:w,height:v}})),this.layout=a=>{const l=ke(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(a),l()},this.adjustPositionOfElement=({right:a,left:l,top:u})=>{a!==void 0?this.containerElement.style.right=`${a}px`:this.containerElement.style.removeProperty("right"),l!==void 0?this.containerElement.style.left=`${l}px`:this.containerElement.style.removeProperty("left"),u!==void 0?this.containerElement.style.top=`${u}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(a=>{const{blankPagePosition:l,minimumWidth:u,spreadPosition:d}=a;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:l,item:this.item,minimumWidth:u});const p=this.renderer.layout({blankPagePosition:l,minPageSpread:u/this.context.getPageSize().width,minimumWidth:u,spreadPosition:d});return o.merge(o.of({type:"start"}),p.pipe(this.applyDimsAfterLayout(a),o.map(g=>({type:"end",data:g}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(a=>a.type==="end"),o.map(a=>a.data),o.share())}validateDimension(e,t,n){if(e<=0)return n;const s=Math.max(e,n),c=Math.ceil(s/t)*t;return Math.max(c,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,n=e.height?parseFloat(e.height):0;return{width:t,height:n}}}class Xn extends B{onUnload(){return o.EMPTY}onCreateDocument(){return o.of(document.createElement("div"))}onLoadDocument(){return o.EMPTY}onLayout(){return o.of(void 0)}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}class Te extends E{constructor(e,t,n,s,r,c){super(),this.item=e,this.parentElement=t,this.context=n,this.settings=s,this.hookManager=r,this.index=c,this.getBoundingRectOfElementFromSelector=u=>{const d=this.renderer.getDocumentFrame();if(d&&d instanceof HTMLIFrameElement&&u)return u.startsWith("#")?d.contentDocument?.getElementById(u.replace("#",""))?.getBoundingClientRect():d.contentDocument?.querySelector(u)?.getBoundingClientRect()},this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=Zn(t,e,r),t.appendChild(this.containerElement);const a=this.settings.values.getRenderer?.(e);this.resourcesHandler=new J(e,this.settings);const l={context:n,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=a?a(l):new Xn(l),this.layout=new xn(e,this.containerElement,n,r,this.renderer,this.settings),this.isReady$=this.layout.layoutProcess$.pipe(y.withLatestFrom(this.renderer.isLoaded$),y.map(([u,d])=>!!(u.type==="end"&&d)),y.startWith(!1),y.distinctUntilChanged(),y.tap(u=>{this.containerElement.dataset.isReady=u.toString()}),y.shareReplay({refCount:!0,bufferSize:1})),this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(this.isReady$,this.layout.layout$).pipe(y.takeUntil(this.destroy$)).subscribe()}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(e=>e==="loaded"))}get unloaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(e=>e!=="idle"),y.switchMap(()=>this.renderer.state$.pipe(y.filter(e=>e==="idle"),y.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return yt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.context.getPageSize().width,pageHeight:this.context.getPageSize().height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Zn=(i,e,t)=>{const n=i.ownerDocument.createElement("div");return n.classList.add("spineItem"),n.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),n.style.cssText=`
|
|
277
|
+
`,g.className=`${_}-scroll-navigator`,g.appendChild(this.viewport.value.element),p.appendChild(g),this.update({element:g})})),a=o.combineLatest([t.watch(["computedPageTurnMode"]),this.watch("element")]).pipe(o.tap(([{computedPageTurnMode:p},g])=>{g&&(p==="scrollable"?g.style.display="block":g.style.display="contents")})),l=this.navigateSubject.pipe(o.tap(this.setViewportPosition));this.isNavigating$=this.navigateSubject.pipe(o.startWith(!1),o.switchMap(()=>o.merge(o.of(!0),o.of(!1))),o.shareReplay(1));const u=o.merge(s.element$.pipe(o.filter(k),o.switchMap(p=>K(p))),s.element$.pipe(o.filter(k),o.switchMap(p=>o.fromEvent(p,"scroll"))),s.spineItemsObserver.itemResize$).pipe(o.switchMap(()=>o.timer(10).pipe(o.map(()=>!1),o.startWith(!0))),o.distinctUntilChanged(),o.startWith(!1)),d=o.combineLatest([u,this.isScrolling$]).pipe(o.map(([p,g])=>p||g),o.shareReplay(1));this.userScroll$=this.watch("element").pipe(o.filter(k),o.switchMap(p=>t.watch(["computedPageTurnMode"]).pipe(o.switchMap(({computedPageTurnMode:g})=>g==="controlled"?o.NEVER:o.fromEvent(p,"scroll").pipe(o.withLatestFrom(d),o.filter(([,m])=>!m),o.map(([m])=>m))))),o.share()),o.merge(c,a,l).pipe(o.takeUntil(this.destroy$)).subscribe()}update(e){this.mergeCompare(e)}navigate(e){this.navigateSubject.next(e)}get viewportPosition(){const e=this.value.element;if(!e)return new $({x:0,y:0});const t=this.viewport.scaleFactor;return new $({x:e.scrollLeft/t,y:e.scrollTop/t})}}const se=(i,e,t)=>{const n=t-i,s=t*(e*i)/(t||1);return Math.max(0,Math.min(n,s))},Pe=(i,e)=>(e||0)===0||(i||0)===0?1:Math.floor(Math.max(1,i/e)),re=(i,e,t)=>{const n=Pe(t,e),s=[...Array(n)].map((r,c)=>c*e);return i>=n*e?s[s.length-1]||0:s.find(r=>i<r+e)||0},St=(i,e,t)=>{const n=[...Array(t)].map((s,r)=>r*e);return i<=0||t===0?0:i>=t*e?t-1:n.findIndex(s=>i<s+e)??0},Dn=({itemWidth:i,itemHeight:e,spineItemPosition:t})=>new M({x:Math.min(i,Math.max(0,t.x)),y:Math.min(e,Math.max(0,t.y))}),yt=({itemHeight:i,itemWidth:e,isUsingVerticalWriting:t,pageWidth:n,pageHeight:s,pageTurnDirection:r,pageTurnMode:c})=>r==="vertical"&&c==="scrollable"?1:t||r==="vertical"?Pe(i,s):Pe(e,n),bt=({itemWidth:i,itemHeight:e,position:t,isUsingVerticalWriting:n,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a,isRTL:l})=>{const d=Dn({spineItemPosition:t,itemHeight:e,itemWidth:i}).x,p=yt({isUsingVerticalWriting:n,itemHeight:e,itemWidth:i,pageWidth:s,pageHeight:r,pageTurnDirection:c,pageTurnMode:a});if(n)return St(t.y,r,p);const g=St(d,s,p);return l?p-1-g:g},Nn=({pageIndex:i,itemLayout:e,context:t,isUsingVerticalWriting:n})=>{if(n){const r=se(t.getPageSize().height,i,e.height);return new M({x:0,y:r})}const s=se(t.getPageSize().width,i,e.width);return t.isRTL()?new M({x:e.width-s-t.getPageSize().width,y:0}):new M({x:s,y:0})},It=({context:i,settings:e})=>{const t=(c,a,l)=>{let u;c?.nodeName==="img"||c?.textContent===""&&c.nodeType===Node.ELEMENT_NODE?u=c.getBoundingClientRect().x:c&&(u=(c?zt(c,a):void 0)?.getBoundingClientRect().x||u);const d=l.layout.layoutInfo?.width||0,p=i.getPageSize().width;if(u!==void 0){const g=re(u,p,d);return new M({x:g,y:0})}};return{getSpineItemPositionFromNode:t,getSpineItemPositionFromPageIndex:({pageIndex:c,spineItem:a})=>Nn({context:i,isUsingVerticalWriting:!!a.isUsingVerticalWriting(),itemLayout:a.layout.layoutInfo,pageIndex:c}),getSpineItemPageIndexFromPosition:c=>bt({...c,isRTL:i.isRTL(),pageWidth:i.getPageSize().width,pageHeight:i.getPageSize().height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}),getSpineItemPageIndexFromNode:(c,a,l)=>{const u=t(c,a,l),{height:d,width:p}=l.layout.layoutInfo;return u?bt({isUsingVerticalWriting:!!l.isUsingVerticalWriting(),position:u,itemHeight:d,itemWidth:p,isRTL:i.isRTL(),pageWidth:i.getPageSize().width,pageHeight:i.getPageSize().height,pageTurnDirection:e.values.computedPageTurnDirection,pageTurnMode:e.values.pageTurnMode}):void 0},getSpineItemClosestPositionFromUnsafePosition:(c,a)=>{const{width:l,height:u}=a.layout.layoutInfo;return new M({x:re(c.x,i.getPageSize().width,l),y:re(c.y,i.getPageSize().height,u)})},getSpineItemPagePositionFromSpineItemPosition:(c,a,l)=>{const{width:u,height:d}=l.layout.layoutInfo,p=i.getPageSize().width,g=i.getPageSize().height;if(!!l.isUsingVerticalWriting()){const f=se(g,a,d);return new ee({x:c.x,y:c.y-f})}const h=se(p,a,u);if(i.isRTL()){const f=u-(a+1)*p;return new ee({x:c.x-Math.max(0,f),y:c.y})}return new ee({x:c.x-h,y:c.y})}}},On=({context:i,settings:e})=>{const t=It({context:i,settings:e});return{getNavigationForLastPage:c=>{const a=c.numberOfPages;return t.getSpineItemPositionFromPageIndex({pageIndex:a-1,spineItem:c})},getNavigationForPosition:(c,a)=>t.getSpineItemClosestPositionFromUnsafePosition(a,c),getNavigationFromNode:(c,a,l)=>t.getSpineItemPositionFromNode(a,l,c)||new M({x:0,y:0})}},N=({position:{x:i,y:e},pageSizeWidth:t,visibleAreaRectWidth:n})=>{const r=i%n!==0?i-t:i;return new $({x:r,y:e})},wt=({position:i,isRTL:e,pageSizeHeight:t,spineItemsManager:n,visibleAreaRectWidth:s,spine:r})=>{const c=n.get(n.items.length-1),a=r.getSpineItemSpineLayoutInfo(c||0),l=a.bottom-t,u=Math.min(Math.max(0,i.y),l);if(e)return new $({x:Math.max(Math.min(0,i.x),a.left),y:u});const d=a.right-s;return new $({x:Math.min(Math.max(0,i.x),d),y:u})},$e=({viewportPosition:i,spineLocator:e,context:t,spineItemNavigationResolver:n})=>{const s=e.getSpineItemFromPosition(i);if(s){const r=e.getSpineItemPositionFromSpinePosition(i,s),c=n.getNavigationForPosition(s,r),a=e.getSpinePositionFromSpineItemPosition({spineItemPosition:c,spineItem:s});return N({position:a,pageSizeWidth:t.getPageSize().width,visibleAreaRectWidth:t.state.visibleAreaRect.width})}return new $({x:0,y:0})},kn=({pageIndex:i,spineItemsManager:e,spineItemId:t,context:n,spineLocator:s,spineItemNavigationResolver:r})=>{const c=e.get(t);if(!c){const u=i*n.getPageSize().width;return $e({viewportPosition:new $({x:u,y:0}),context:n,spineItemNavigationResolver:r,spineLocator:s})}const a=s.spineItemLocator.getSpineItemPositionFromPageIndex({pageIndex:i,spineItem:c}),l=s.getSpinePositionFromSpineItemPosition({spineItemPosition:a,spineItem:c});return N({position:l,pageSizeWidth:n.getPageSize().width,visibleAreaRectWidth:n.state.visibleAreaRect.width})},Vn=({anchor:i,spineItem:e,context:t})=>{const n=e.layout.layoutInfo?.width||0,s=t.getPageSize().width,c=e.getBoundingRectOfElementFromSelector(i)?.x||0;return re(c,s,n)},Un=({anchor:i,context:e,spineItem:t,spineLocator:n})=>{const s=Vn({anchor:i,spineItem:t,context:e});return n.getSpinePositionFromSpineItemPosition({spineItemPosition:new M({x:s,y:0}),spineItem:t})},Wn=({anchor:i,spineItem:e,spineLocator:t,context:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{const c=Un({anchor:i,context:n,spineItem:e,spineLocator:t});return N({position:c,pageSizeWidth:s,visibleAreaRectWidth:r})},zn=({context:i,spineItemsManager:e,spineLocator:t,url:n,pageSizeWidth:s,visibleAreaRectWidth:r})=>{try{const c=n instanceof URL?n:new URL(n),a=`${c.origin}${c.pathname}`,l=i.manifest?.spineItems.find(u=>u.href===a);if(l){const u=e.get(l.id);if(u){const d=Wn({anchor:c.hash,spineItem:u,context:i,spineLocator:t,pageSizeWidth:s,visibleAreaRectWidth:r});return{position:N({position:d,pageSizeWidth:s,visibleAreaRectWidth:r}),spineItemId:l.id}}}return}catch(c){console.error(c);return}},Hn=({spineItem:i,spineItemPosition:e,spineLocator:t,spineItemLocator:n,context:s})=>{const r=n.getSpineItemClosestPositionFromUnsafePosition(e,i),c=t.getSpinePositionFromSpineItemPosition({spineItemPosition:r,spineItem:i});return N({position:c,pageSizeWidth:s.getPageSize().width,visibleAreaRectWidth:s.state.visibleAreaRect.width})},Bn="spineNavigator",_n=({context:i,spineItemsManager:e,locator:t,settings:n,spine:s})=>{const r=On({context:i,settings:n});return{getNavigationForUrl:g=>zn({context:i,spineItemsManager:e,spineLocator:t,url:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),getNavigationForSpineItemPage:g=>kn({...g,context:i,spineItemsManager:e,spineItemNavigationResolver:r,spineLocator:t}),getNavigationFromSpineItemPosition:g=>Hn({...g,spineItemLocator:t.spineItemLocator,spineLocator:t,context:i}),getNavigationForCfi:g=>{const m=e.getSpineItemFromCfi(g),{node:h,offset:f=0}=be({cfi:g,spineItemsManager:e});if(!m){L.warn(Bn,`unable to detect item id from cfi ${g}`);return}const b=h?r.getNavigationFromNode(m,h,f):new M({x:0,y:0}),S=t.getSpinePositionFromSpineItemPosition({spineItemPosition:b,spineItem:m});return N({position:S,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})},getNavigationForLastPage:g=>{const m=r.getNavigationForLastPage(g),h=t.getSpinePositionFromSpineItemPosition({spineItemPosition:m,spineItem:g});return N({position:h,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})},getNavigationForSpineIndexOrId:g=>{const m=e.get(g);if(m){const h=t.getSpinePositionFromSpineItem(m);return N({position:h,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width})}return new $({x:0,y:0})},getNavigationForPosition:g=>$e({viewportPosition:g,context:i,spineItemNavigationResolver:r,spineLocator:t}),getMostPredominantNavigationForPosition:g=>{const m=n.values.computedPageTurnDirection,h=.5,f=m==="horizontal"?g.x+i.state.visibleAreaRect.width*h:0,b=m==="horizontal"?0:g.y+i.state.visibleAreaRect.height*h,S=wt({position:new $({x:f,y:b}),isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s});return $e({context:i,spineItemNavigationResolver:r,spineLocator:t,viewportPosition:S})},getAdjustedPositionWithSafeEdge:g=>wt({position:g,isRTL:i.isRTL(),pageSizeHeight:i.getPageSize().height,visibleAreaRectWidth:i.state.visibleAreaRect.width,spineItemsManager:e,spine:s}),isNavigationGoingForwardFrom:(g,m)=>n.values.computedPageTurnDirection==="vertical"?g.y>m.y:g.x>m.x,arePositionsDifferent:(g,m)=>g.x!==m.x||g.y!==m.y,getAdjustedPositionForSpread:g=>N({position:g,pageSizeWidth:i.getPageSize().width,visibleAreaRectWidth:i.state.visibleAreaRect.width}),spineItemNavigator:r}},qn=({spineItemsManager:i,context:e,hookManager:t,spine:n,settings:s,viewport:r})=>{const c=new o.Subject,a=new we,l=_n({context:e,settings:s,spineItemsManager:i,locator:n.locator,spine:n}),u=new mt(s,t,e,n,r),d=new ft(r,s,t,n,e),p=new En(s,e,n,d,a,r),g=o.merge(c,p.navigation$),m=new gt(s,e,g,u,d,l,n,a.isLocked$),h=o.combineLatest([u.isNavigating$,d.isNavigating$,a.isLocked$,m.locker.isLocked$]).pipe(y.map(S=>S.some(w=>w)?"busy":"free"),y.distinctUntilChanged(),y.shareReplay(1));return{destroy:()=>{p.destroy(),u.destroy(),m.destroy()},getNavigation:()=>m.navigation,internalNavigator:m,scrollNavigationController:d,controlledNavigationController:u,locker:a,viewportState$:h,navigate:S=>{c.next(S)},lock(){return a.lock()},navigationResolver:l,navigation$:m.navigation$}};class vt extends Y{constructor(e,t){super({beginPageIndexInSpineItem:void 0,beginNumberOfPagesInSpineItem:0,beginCfi:void 0,beginSpineItemIndex:void 0,endPageIndexInSpineItem:void 0,endNumberOfPagesInSpineItem:0,endCfi:void 0,endSpineItemIndex:void 0,navigationId:void 0}),this.context=e,this.spineItemsManager=t}update(e){this.mergeCompare(e)}}class Pt extends E{constructor(e,t,n,s,r){super(),this.context=e,this.pagination=t,this.spineItemsManager=n,this.spine=s,this.spineItemLocator=r;const c=o.merge(this.context.bridgeEvent.navigation$,s.layout$).pipe(o.switchMap(()=>{const l=({spineItem:u,position:d})=>this.spine.locator.getVisiblePagesFromViewportPosition({spineItem:u,position:d,threshold:{type:"percentage",value:.5}});return this.context.bridgeEvent.navigationUnlocked$.pipe(o.take(1),o.withLatestFrom(this.context.bridgeEvent.navigation$),o.tap(([,u])=>{const{position:d}=u,p=this.pagination.value,{beginIndex:g,endIndex:m}=this.spine.locator.getVisibleSpineItemsFromPosition({position:d,threshold:{type:"percentage",value:.5}})??{},h=this.spineItemsManager.get(g),f=this.spineItemsManager.get(m);if(!h||!f)return;const b=p.beginCfi,S=p.endCfi,{beginPageIndex:w=0}=l({spineItem:h,position:d})??{},{endPageIndex:v=0}=l({spineItem:f,position:d})??{},T=b===void 0||ne(b)||p.beginSpineItemIndex!==g,C=p.endSpineItemIndex!==m||S===void 0||ne(S),F=T?W(h.item):b,R=C?W(f.item):S,D=h.numberOfPages,U=f.numberOfPages;this.pagination.update({beginCfi:F,beginNumberOfPagesInSpineItem:D,beginPageIndexInSpineItem:w,beginSpineItemIndex:g,endCfi:R,endNumberOfPagesInSpineItem:U,endPageIndexInSpineItem:v,endSpineItemIndex:m,navigationId:u.id})}))})),a=c.pipe(x(this.context.bridgeEvent.viewportFree$),o.tap(()=>{const{beginSpineItemIndex:l,endSpineItemIndex:u,beginPageIndexInSpineItem:d,endPageIndexInSpineItem:p}=this.pagination.value;if(d===void 0||p===void 0||l===void 0||u===void 0)return;const g=this.spineItemsManager.get(l),m=this.spineItemsManager.get(u);g===void 0||m===void 0||this.pagination.update({beginCfi:ie({pageIndex:d,spineItem:g,spine:this.spine}),endCfi:ie({pageIndex:p,spineItem:m,spine:this.spine})})}));o.merge(c,a).pipe(o.takeUntil(this.destroy$)).subscribe()}}class $t extends E{constructor(e){super();const t={...this.getDefaultSettings(),...e};this.inputSettings=t,this.outputSettingsUpdateSubject=new o.Subject,this._settings$=this.outputSettingsUpdateSubject.asObservable().pipe(o.shareReplay(1)),this._settings$.subscribe()}_prepareUpdate(e){const t=P.shallowMergeIfDefined(this.inputSettings,e),n=this.getOutputSettings(t),s=!P.isShallowEqual(this.outputSettings,n);return{hasChanged:s,state:n,commit:()=>(this.inputSettings=t,this.outputSettings=n,s&&this.outputSettingsUpdateSubject.next(n),n)}}update(e){const{commit:t}=this._prepareUpdate(e);t()}get values(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);return e()}return this.outputSettings}get values$(){if(!this.outputSettings){const{commit:e}=this._prepareUpdate(this.inputSettings);e()}return this._settings$}watch(e){return this.values$.pipe(he(e),o.distinctUntilChanged(P.isShallowEqual))}destroy(){super.destroy(),this.outputSettingsUpdateSubject.complete()}}class Yn extends $t{constructor(e,t){super(e),this.context=t;const n=o.combineLatest([t.hasVerticalWriting$,t.manifest$]).pipe(y.tap(()=>{this.update(this.values)})),s=this.values$.pipe(y.tap(({forceSinglePageMode:r})=>{t.update({forceSinglePageMode:r})}));o.merge(n,s).pipe(y.takeUntil(t.destroy$)).subscribe()}getComputedSettings(e){const t=this.context.manifest,n=this.context.state.hasVerticalWriting??!1,s={computedPageTurnDirection:e.pageTurnDirection,computedPageTurnAnimation:e.pageTurnAnimation,computedPageTurnMode:e.pageTurnMode,computedPageTurnAnimationDuration:0};return t?.renditionFlow==="scrolled-continuous"&&(s.computedPageTurnMode="scrollable"),s.computedPageTurnMode==="scrollable"&&(s.computedPageTurnDirection="vertical"),n&&s.computedPageTurnAnimation==="slide"&&(L.warn(`pageTurnAnimation ${s.computedPageTurnAnimation} incompatible with current book, switching back to default`),s.computedPageTurnAnimation="none"),s.computedPageTurnMode==="scrollable"?(s.computedPageTurnAnimationDuration=0,s.computedPageTurnAnimation="none"):s.computedPageTurnAnimationDuration=e.pageTurnAnimationDuration!==void 0?e.pageTurnAnimationDuration:300,s}getOutputSettings(e){const t=this.getComputedSettings(e);return{...this.outputSettings,...e,...t}}getDefaultSettings(){return{forceSinglePageMode:!1,pageTurnAnimation:"slide",pageTurnDirection:"horizontal",pageTurnAnimationDuration:void 0,pageTurnMode:"controlled",snapAnimationDuration:300,navigationSnapThreshold:{type:"pixels",value:40},numberOfAdjacentSpineItemToPreLoad:3}}}class xn extends B{onUnload(){return o.EMPTY}onCreateDocument(){return o.of(document.createElement("div"))}onLoadDocument(){return o.EMPTY}onLayout(){return o.of(void 0)}onRenderHeadless(){return o.EMPTY}getDocumentFrame(){}}class Xn extends E{constructor(e,t,n,s,r,c){super(),this.item=e,this.containerElement=t,this.context=n,this.hookManager=s,this.renderer=r,this.settings=c,this.layoutTriggerSubject=new o.Subject,this.lastLayout=null,this.applyDimsAfterLayout=({blankPagePosition:a,minimumWidth:l})=>u=>u.pipe(o.map(d=>{const p=P.isShallowEqual(this.lastLayout?.pageSize,this.context.getPageSize())?this.lastLayout:void 0,{width:g,height:m}=p??{},{width:h=g,height:f=m}=d??{},{width:b,height:S}=this.context.getPageSize(),w=this.validateDimension(h??b,b,l),v=this.settings.values.computedPageTurnMode==="scrollable"?f??S:this.validateDimension(f??S,S,S);return this.lastLayout={width:w,height:v,pageSize:this.context.getPageSize()},this.containerElement.style.width=`${w}px`,this.containerElement.style.height=`${v}px`,this.hookManager.execute("item.onAfterLayout",void 0,{blankPagePosition:a,item:this.item,minimumWidth:l}),{width:w,height:v}})),this.layout=a=>{const l=ke(this.layout$.pipe(o.first()));return this.layoutTriggerSubject.next(a),l()},this.adjustPositionOfElement=({right:a,left:l,top:u})=>{a!==void 0?this.containerElement.style.right=`${a}px`:this.containerElement.style.removeProperty("right"),l!==void 0?this.containerElement.style.left=`${l}px`:this.containerElement.style.removeProperty("left"),u!==void 0?this.containerElement.style.top=`${u}px`:this.containerElement.style.removeProperty("top")},this.layoutProcess$=this.layoutTriggerSubject.pipe(o.switchMap(a=>{const{blankPagePosition:l,minimumWidth:u,spreadPosition:d}=a;this.hookManager.execute("item.onBeforeLayout",void 0,{blankPagePosition:l,item:this.item,minimumWidth:u});const p=this.renderer.layout({blankPagePosition:l,minPageSpread:u/this.context.getPageSize().width,minimumWidth:u,spreadPosition:d});return o.merge(o.of({type:"start"}),p.pipe(this.applyDimsAfterLayout(a),o.map(g=>({type:"end",data:g}))))}),o.share()),this.layout$=this.layoutProcess$.pipe(o.filter(a=>a.type==="end"),o.map(a=>a.data),o.share())}validateDimension(e,t,n){if(e<=0)return n;const s=Math.max(e,n),c=Math.ceil(s/t)*t;return Math.max(c,t)}get layoutInfo(){const e=this.containerElement.style,t=e.width?parseFloat(e.width):0,n=e.height?parseFloat(e.height):0;return{width:t,height:n}}}class Te extends E{constructor(e,t,n,s,r,c){super(),this.item=e,this.parentElement=t,this.context=n,this.settings=s,this.hookManager=r,this.index=c,this.getBoundingRectOfElementFromSelector=u=>{const d=this.renderer.getDocumentFrame();if(d&&d instanceof HTMLIFrameElement&&u)return u.startsWith("#")?d.contentDocument?.getElementById(u.replace("#",""))?.getBoundingClientRect():d.contentDocument?.querySelector(u)?.getBoundingClientRect()},this.load=()=>{this.renderer.load()},this.unload=()=>{this.renderer.unload()},this.destroy=()=>{super.destroy(),this.containerElement.remove(),this.renderer.destroy()},this.isUsingVerticalWriting=()=>!!this.renderer.writingMode?.startsWith("vertical"),this.containerElement=Zn(t,e,r),t.appendChild(this.containerElement);const a=this.settings.values.getRenderer?.(e);this.resourcesHandler=new J(e,this.settings);const l={context:n,settings:s,hookManager:r,item:e,containerElement:this.containerElement,resourcesHandler:this.resourcesHandler};this.renderer=a?a(l):new xn(l),this.layout=new Xn(e,this.containerElement,n,r,this.renderer,this.settings),this.isReady$=this.layout.layoutProcess$.pipe(y.withLatestFrom(this.renderer.isLoaded$),y.map(([u,d])=>!!(u.type==="end"&&d)),y.startWith(!1),y.distinctUntilChanged(),y.tap(u=>{this.containerElement.dataset.isReady=u.toString()}),y.shareReplay({refCount:!0,bufferSize:1})),this.needsLayout$=o.merge(this.unloaded$,this.loaded$),o.merge(this.isReady$,this.layout.layout$).pipe(y.takeUntil(this.destroy$)).subscribe()}get element(){return this.containerElement}get readingDirection(){return this.renderer.readingDirection}get loaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(e=>e==="loaded"))}get unloaded$(){return this.renderer.state$.pipe(y.distinctUntilChanged(),y.filter(e=>e!=="idle"),y.switchMap(()=>this.renderer.state$.pipe(y.filter(e=>e==="idle"),y.first())))}get renditionLayout(){return this.renderer.renditionLayout}get numberOfPages(){return yt({isUsingVerticalWriting:!!this.isUsingVerticalWriting(),itemHeight:this.layout.layoutInfo.height,itemWidth:this.layout.layoutInfo.width,pageWidth:this.context.getPageSize().width,pageHeight:this.context.getPageSize().height,pageTurnDirection:this.settings.values.computedPageTurnDirection,pageTurnMode:this.settings.values.pageTurnMode})}}const Zn=(i,e,t)=>{const n=i.ownerDocument.createElement("div");return n.classList.add("spineItem"),n.classList.add(`spineItem-${e.renditionLayout??"reflowable"}`),n.style.cssText=`
|
|
278
278
|
position: absolute;
|
|
279
279
|
overflow: hidden;
|
|
280
280
|
`,n.dataset.isReady="false",t.execute("item.onBeforeContainerCreated",void 0,{element:n}),n},Gn=L.namespace("spine"),Tt=({position:i,pageSize:e})=>new qe({...i,left:i.x,top:i.y,width:e.width,height:e.height,bottom:i.y+e.height,right:i.x+e.width});class Mt extends Y{constructor(e,t,n,s,r,c){super({pages:[]}),this.spineLayout=e,this.spineItemsManager=t,this.spineItemLocator=n,this.context=s,this.locator=r,this.viewport=c,this.fromSpineItemPageIndex=(a,l)=>this.value.pages.find(u=>u.itemIndex===a.index&&u.pageIndex===l),this.fromAbsolutePageIndex=a=>this.value.pages.reduce((l,u)=>l||(u.absolutePageIndex===a?u:l),void 0),this.observeFromAbsolutePageIndex=a=>this.pipe(o.map(()=>this.fromAbsolutePageIndex(a))),this.layout$=e.layout$.pipe(o.withLatestFrom(c),o.switchMap(([,{pageSize:a}])=>{const l=t.items.reduce((d,p,g)=>{const h=new Array(p.numberOfPages).fill(void 0).map((f,b)=>{const S=n.getSpineItemPositionFromPageIndex({spineItem:p,pageIndex:b}),w=r.getSpinePositionFromSpineItemPosition({spineItem:p,spineItemPosition:S});return{absoluteLayout:Tt({pageSize:a,position:w}),layout:new _e({left:S.x,right:S.x+a.width,top:S.y,bottom:S.y+a.height,width:a.width,height:a.height,x:S.x,y:S.y}),itemIndex:g,absolutePageIndex:d.length+b,spineItem:p,pageIndex:b}});return[...d,...h]},[]);return o.combineLatest(l.map(d=>{const{spineItem:p,...g}=d;return new o.Observable(m=>{const h=d.spineItem.renderer?.getDocumentFrame();let f;h&&h?.contentWindow?.document&&h.contentWindow.document.body!==null&&(f=Ut(h.contentWindow.document,d.layout)),m.next({...g,firstVisibleNode:f})})}))}),o.map(a=>(Gn.info("Pages layout",a),{pages:a})),o.share()),this.layout$.pipe(o.takeUntil(this.destroy$)).subscribe(this.next.bind(this))}}class Ft extends E{constructor(e,t){super(),this.spineItemsManager=e,this.spineLocator=t,this.itemIsReady$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>r.isReady$.pipe(o.map(c=>({item:r,isReady:c}))));return o.merge(...s)}),o.share()),this.itemResize$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>K(r.element).pipe(o.map(c=>({entries:c,item:r}))));return o.merge(...s)}),o.share()),this.itemLoaded$=this.spineItemsManager.items$.pipe(o.switchMap(n=>{const s=n.map(r=>r.loaded$.pipe(o.map(()=>r)));return o.merge(...s)}))}}const Kn=({horizontalOffset:i,verticalOffset:e,context:t,spineItemsManager:n,isGloballyPrePaginated:s,settings:r,index:c,item:a,viewport:l})=>{let u=t.getPageSize().width,d="none";const p=i%l.absoluteViewport.width===0,g=c===n.items.length-1;if(t.state.isUsingSpreadMode){!s&&a.renditionLayout==="reflowable"&&!g&&(u=t.getPageSize().width*2),!s&&a.renditionLayout==="reflowable"&&g&&p&&(u=t.getPageSize().width*2);const h=p&&g&&s;a.item.pageSpreadRight&&p&&!t.isRTL()||a.item.pageSpreadLeft&&p&&t.isRTL()?(d="before",u=t.getPageSize().width*2):h&&(t.isRTL()?d="before":d="after",u=t.getPageSize().width*2)}return a.layout.layout({minimumWidth:u,blankPagePosition:d,spreadPosition:t.state.isUsingSpreadMode?p?t.isRTL()?"right":"left":t.isRTL()?"left":"right":"none"}).pipe(o.map(({width:h,height:f})=>{if(r.values.computedPageTurnDirection==="vertical"){const w=p?e:e-t.state.visibleAreaRect.height,v=p?0:i;t.isRTL()?a.layout.adjustPositionOfElement({top:w,left:v}):a.layout.adjustPositionOfElement({top:w,left:v});const T=h+v,C=f+w,F=new te({left:v,right:T,top:w,bottom:C,height:f,width:h,x:v,y:w});return{horizontalOffset:T,verticalOffset:C,layoutPosition:F}}a.layout.adjustPositionOfElement(t.isRTL()?{right:i,top:0}:{left:i,top:0});const b=t.isRTL()?l.absoluteViewport.width-i-h:i,S=new te({right:t.isRTL()?l.absoluteViewport.width-i:i+h,left:b,x:b,top:e,bottom:f,height:f,width:h,y:e});return{horizontalOffset:i+h,verticalOffset:0,layoutPosition:S}}))};class Jn extends E{constructor(e,t,n,s){super(),this.spineItemsManager=e,this.context=t,this.settings=n,this.viewport=s,this.layoutSubject=new o.Subject,this.spineItemsRelativeLayouts=[],e.items$.pipe(o.tap(()=>{this.spineItemsRelativeLayouts=[]}),o.switchMap(c=>{const a=c.map(u=>u.needsLayout$.pipe(o.tap(()=>{this.layout()}))),l=c.map(u=>u.loaded$.pipe(o.tap(()=>{u.isUsingVerticalWriting()?this.context.update({hasVerticalWriting:!0}):this.context.update({hasVerticalWriting:!1})})));return o.merge(...a,...l)})).pipe(o.takeUntil(this.destroy$)).subscribe();const r=new o.BehaviorSubject(!1);this.layout$=this.layoutSubject.pipe(o.debounceTime(50),o.exhaustMap(()=>r.pipe(o.filter(c=>!c),o.first())),o.exhaustMap(()=>{r.next(!0);const c=this.context.manifest,a=rt(c)??!1;return o.from(this.spineItemsManager.items).pipe(o.reduce((u,d,p)=>u.pipe(o.concatMap(({horizontalOffset:g,verticalOffset:m})=>Kn({context:this.context,horizontalOffset:g,index:p,isGloballyPrePaginated:a,item:d,settings:this.settings,spineItemsManager:this.spineItemsManager,verticalOffset:m,viewport:s}).pipe(o.map(({horizontalOffset:h,verticalOffset:f,layoutPosition:b})=>(this.spineItemsRelativeLayouts[p]=b,{horizontalOffset:h,verticalOffset:f}))))),o.of({horizontalOffset:0,verticalOffset:0})),o.concatMap(u=>u),o.finalize(()=>{r.next(!1)}))}),o.share()),o.merge(this.layout$).pipe(o.takeUntil(this.destroy$)).subscribe()}layout(){this.layoutSubject.next(void 0)}getSpineItemSpineLayoutInfo(e){const t=this.spineItemsManager.getSpineItemIndex(e)??0;return this.spineItemsRelativeLayouts[t]||new te({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.layoutSubject.complete()}}class Qn extends E{constructor(e,t,n,s,r){super(),this.context=e,this.spineItemsManager=t,this.spineLocator=n,this.settings=s,this.spineLayout=r,this.forcedOpenSubject=new o.BehaviorSubject([]);const c=this.forcedOpenSubject.pipe(o.map(u=>[...new Set(u.flat())].sort()),o.distinctUntilChanged(P.arrayEqual),o.shareReplay({bufferSize:1,refCount:!0}));o.merge(this.context.bridgeEvent.navigation$,this.spineLayout.layout$,c,s.watch(["numberOfAdjacentSpineItemToPreLoad"])).pipe(o.debounceTime(100,o.animationFrameScheduler),x(this.context.bridgeEvent.viewportFree$),o.withLatestFrom(this.context.bridgeEvent.navigation$,c),o.map(([,u,d])=>{const{numberOfAdjacentSpineItemToPreLoad:p}=s.values,{beginIndex:g=0,endIndex:m=0}=n.getVisibleSpineItemsFromPosition({position:u.position,threshold:{type:"percentage",value:0},useAbsoluteViewport:!1})||{},h=p===1/0?0:g-p,f=p===1/0?t.items.length-1:m+p,b=Array.from({length:f-h+1},(w,v)=>h+v),S=[...d,...b];t.items.forEach((w,v)=>{S.includes(v)?w.load():w.unload()})})).pipe(o.takeUntil(this.destroy$)).subscribe()}forceOpen(e){const t=e.map(n=>typeof n=="number"?n:n.index);return this.forcedOpenSubject.next([...this.forcedOpenSubject.value,t]),()=>{this.isDestroyed||this.forcedOpenSubject.next(this.forcedOpenSubject.value.filter(n=>n!==t))}}destroy(){super.destroy(),this.forcedOpenSubject.complete()}}const Lt=(i,e,t)=>{const n=(t.width-e.width)/2,s=(t.height-e.height)/2;return new q({x:i.x-n,y:i.y-s})};class X extends DOMRect{constructor(){super(...arguments),this.__symbol=Symbol("ViewportPosition")}static from(e,t){if(t){const s=e;return new X(s.x,s.y,t.width,t.height)}const n=e;return new X(n.x,n.y,n.width,n.height)}}class jn{constructor({width:e,height:t}){this.__symbol=Symbol("AbsoluteViewport"),this.width=e,this.height=t}}class eo{constructor({width:e,height:t}){this.__symbol=Symbol("RelativeViewport"),this.width=e,this.height=t}}const to=({pageIndex:i,spineItemOrId:e,spineItemsManager:t})=>{const n=t.items,s=t.get(e);if(!s)return;const{currentAbsolutePage:r}=n.reduce((c,a)=>{if(c.found)return c;const l=a.numberOfPages;return s===a&&i<=l-1?{currentAbsolutePage:c.currentAbsolutePage+i,found:!0}:{...c,currentAbsolutePage:c.currentAbsolutePage+l}},{currentAbsolutePage:0,found:!1});return r},io=({itemHeight:i,itemWidth:e,visibleWidthOfItem:t,visibleHeightOfItem:n,threshold:s})=>{const r=t/e,c=n/i;return s.type==="percentage"?r>=s.value&&c>=s.value:t>=s.value&&n>=s.value},no=({visibleWidthOfItem:i,visibleHeightOfItem:e,threshold:t,viewportPosition:n})=>{const s=i/n.width,r=e/n.height;return t.type==="percentage"?r>=t.value&&s>=t.value:e>=t.value&&i>=t.value},Ct=({itemPosition:{bottom:i,left:e,right:t,top:n,width:s,height:r},threshold:c,viewportPosition:a,restrictToScreen:l})=>{const u=a.x,d=a.x+(a.width-1),p=a.y,g=Math.max(a.y+(a.height-1),0),m=Math.max(0,Math.min(t,d)-Math.max(e,u)),h=Math.max(0,Math.min(i,g)-Math.max(n,p));if(m<=0||h<=0)return{visible:!1};const b=no({threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m,viewportPosition:a});return l?{visible:b}:{visible:io({itemHeight:r,itemWidth:s,threshold:c,visibleHeightOfItem:h,visibleWidthOfItem:m})||b}},Me=({position:i,spineItemsManager:e,spineLayout:t})=>{const n=e.items.find(s=>{const{left:r,right:c,bottom:a,top:l}=t.getSpineItemSpineLayoutInfo(s),u=i.x>=r&&i.x<c,d=i.y>=l&&i.y<a;return u&&d});return i.x===0&&!n?e.items[0]:n},Fe=({spineItemPosition:i,itemLayout:{left:e,top:t}})=>new $({x:e+i.x,y:t+i.y}),oo=({position:i,threshold:e,restrictToScreen:t,spineItemsManager:n,spineLayout:s,useAbsoluteViewport:r=!0,viewport:c})=>{const a=Me({position:i,spineItemsManager:n,spineLayout:s})||n.get(0),l=n.items.reduce((m,h)=>{const f=s.getSpineItemSpineLayoutInfo(h),b=r?c.absoluteViewport:c.relativeViewport,S=Lt(i,c.absoluteViewport,b),w=X.from(S,b),{visible:v}=Ct({itemPosition:f,threshold:e,viewportPosition:w,restrictToScreen:t});return v?[...m,h]:m},[]),u=l[0]??a,d=l[l.length-1]??u;if(!u||!d)return;const p=n.getSpineItemIndex(u),g=n.getSpineItemIndex(d);return{beginIndex:p??0,endIndex:g??0}},so=({spineItemsManager:i,context:e,spineItemLocator:t,settings:n,spineLayout:s,viewport:r})=>{const c=(h,f)=>{const{left:b,top:S}=s.getSpineItemSpineLayoutInfo(f);return new M({x:Math.max(h.x-b,0),y:Math.max(h.y-S,0)})},a=h=>Fe({spineItemPosition:new M({x:0,y:0}),itemLayout:s.getSpineItemSpineLayoutInfo(h)}),l=h=>i.items.find(f=>f.renderer.getDocumentFrame()===h),u=(h,f,b)=>{if(typeof b=="number"){const S=i.get(b);return S?t.getSpineItemPageIndexFromNode(h,f||0,S):void 0}return t.getSpineItemPageIndexFromNode(h,f||0,b)},d=({position:h,threshold:f,spineItem:b,restrictToScreen:S,useAbsoluteViewport:w=!0,viewport:v})=>{const T=b.numberOfPages,F=Array.from(Array(T)).map((U,z)=>{const Le=t.getSpineItemPositionFromPageIndex({pageIndex:z,spineItem:b}),H=Fe({spineItemPosition:Le,itemLayout:s.getSpineItemSpineLayoutInfo(b)});return{index:z,absolutePosition:{width:e.getPageSize().width,height:e.getPageSize().height,left:H.x,top:H.y,bottom:H.y+e.getPageSize().height,right:H.x+e.getPageSize().width}}}).reduce((U,{absolutePosition:z,index:Le})=>{const H=w?v.absoluteViewport:v.relativeViewport,uo=Lt(h,v.absoluteViewport,H),po=X.from(uo,H),{visible:go}=Ct({viewportPosition:po,restrictToScreen:S,threshold:f,itemPosition:z});return go?[...U,Le]:U},[]),R=F[0],D=F[F.length-1]??R;if(!(R===void 0||D===void 0))return{beginPageIndex:R,endPageIndex:D}};return{getSpinePositionFromSpineItemPosition:({spineItem:h,spineItemPosition:f})=>{const b=s.getSpineItemSpineLayoutInfo(h);return Fe({itemLayout:b,spineItemPosition:f})},_getAbsolutePageIndexFromPageIndex:h=>to({...h,spineItemsManager:i}),getSpineItemPagePositionFromSpinePosition:h=>{const f=Me({position:h,spineItemsManager:i,spineLayout:s});if(!f)return;const b=c(h,f),S=t.getSpineItemPageIndexFromPosition({itemWidth:f.layout.layoutInfo.width,itemHeight:f.layout.layoutInfo.height,position:b,isUsingVerticalWriting:!!f.isUsingVerticalWriting()}),w=t.getSpineItemPagePositionFromSpineItemPosition(b,S,f);return{spineItem:f,spineItemPageIndex:S,spineItemPagePosition:w,pageSize:r.value.pageSize}},getSpinePositionFromSpineItem:a,getSpineItemPositionFromSpinePosition:c,getSpineItemFromPosition:h=>Me({position:h,spineItemsManager:i,spineLayout:s}),getSpineItemFromIframe:l,getSpineItemPageIndexFromNode:u,getVisibleSpineItemsFromPosition:h=>oo({spineItemsManager:i,spineLayout:s,viewport:r,...h}),getVisiblePagesFromViewportPosition:h=>d({...h,viewport:r}),isPositionWithinSpineItem:(h,f)=>{const{bottom:b,left:S,right:w,top:v}=s.getSpineItemSpineLayoutInfo(f);return h.x>=S&&h.x<=w&&h.y<=b&&h.y>=v},spineItemLocator:t,getSafeSpineItemPositionFromUnsafeSpineItemPosition:(h,f)=>{const{height:b,width:S}=s.getSpineItemSpineLayoutInfo(f);return new M({x:Math.min(Math.max(0,h.x),S),y:Math.min(Math.max(0,h.y),b)})}}};class Et extends E{constructor(e,t,n,s,r,c,a,l){super(),this.parentElement$=e,this.context=t,this.pagination=n,this.spineItemsManager=s,this.spineItemLocator=r,this.settings=c,this.hookManager=a,this.viewport=l,this.elementSubject=new o.BehaviorSubject(void 0),this.element$=this.elementSubject.asObservable(),this.spineLayout=new Jn(s,t,c,l),this.locator=so({context:t,spineItemsManager:s,spineItemLocator:r,settings:c,spineLayout:this.spineLayout,viewport:l}),this.spineItemsLoader=new Qn(this.context,s,this.locator,c,this.spineLayout),this.spineItemsObserver=new Ft(s,this.locator),this.pages=new Mt(this.spineLayout,this.spineItemsManager,this.spineItemLocator,this.context,this.locator,this.viewport);const u=e.pipe(y.filter(ce.isDefined),y.tap(p=>{const g=p.ownerDocument.createElement("div");g.style.cssText=`
|
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
-transform: scale(0.2);
|
|
287
287
|
height: 100%;
|
|
288
288
|
width: 100%;
|
|
289
|
-
`,t.className=`${_}-viewport`,super({element:t,pageSize:{width:1,height:1}}),this.context=e;const n=this.context.watch("visibleAreaRect").pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize()})}));o.merge(n).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(){const e=this.absoluteViewport,{isUsingSpreadMode:t}=this.context.state;return{width:t?e.width/2:e.width,height:e.height}}get absoluteViewport(){const e=this.context.state.visibleAreaRect;return new jn({width:e.width,height:e.height})}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,t=this.scaleFactor;return new eo({width:e.width/t,height:e.height/t})}}const ro=i=>{const e=new o.Subject,t=new lt,n=new at,s=new Yn(i,n),r=new ct(n,s),c=new Rt(n,s),a=new At(n),l=n.watch("rootElement"),u=It({context:n,settings:s}),d=new vt(n,c),p=new Et(l,n,d,c,u,s,t,a),g=qn({context:n,spineItemsManager:c,hookManager:t,spine:p,settings:s,viewport:a}),m=new Pt(n,d,c,p,u);g.viewportState$.subscribe(n.bridgeEvent.viewportStateSubject),g.navigation$.subscribe(n.bridgeEvent.navigationSubject),g.locker.isLocked$.subscribe(n.bridgeEvent.navigationIsLockedSubject),d.subscribe(n.bridgeEvent.paginationSubject);const h=()=>{const S=n.value.rootElement;if(!S)return;const w={width:S?.offsetWidth,height:S?.offsetHeight};S.style.setProperty("overflow","hidden");const v=S.getBoundingClientRect();n.update({visibleAreaRect:{x:v.x,y:v.y,width:w.width,height:w.height}}),p.layout()},f=S=>{const{containerElement:w,manifest:v}=S;if(n.manifest){L.warn("loading a new book is not supported yet");return}L.log("load",{options:S});const T=ao(w);n.update({manifest:v,rootElement:T,forceSinglePageMode:s.values.forceSinglePageMode}),h()},b=()=>{c.destroy(),m.destroy(),s.destroy(),d.destroy(),n.destroy(),g.destroy(),p.destroy(),r.destroy(),e.next(),e.complete(),a.destroy()};return{context:n,spine:p,hookManager:t,cfi:{generateCfiFromRange:Qe,parseCfi:oe,generateCfiForSpineItemPage:S=>ie({...S,spine:p}),resolveCfi:S=>be({...S,spineItemsManager:c})},navigation:g,spineItemsObserver:p.spineItemsObserver,spineItemsManager:c,layout:h,load:f,destroy:b,pagination:{get state(){return d.value},get state$(){return d}},settings:s,viewport:a,element$:l,viewportState$:n.bridgeEvent.viewportState$,viewportFree$:n.bridgeEvent.viewportFree$,state$:n.manifest$.pipe(y.map(S=>S?"ready":"idle")),features:r,$:{destroy$:e}}},ao=i=>(i.style.cssText=`
|
|
289
|
+
`,t.className=`${_}-viewport`,super({element:t,pageSize:{width:1,height:1}}),this.context=e;const n=this.context.watch("visibleAreaRect").pipe(o.tap(()=>{this.mergeCompare({pageSize:this.calculatePageSize()})}));o.merge(n).pipe(o.takeUntil(this.destroy$)).subscribe()}calculatePageSize(){const e=this.absoluteViewport,{isUsingSpreadMode:t}=this.context.state;return{width:t?e.width/2:e.width,height:e.height}}get absoluteViewport(){const e=this.context.state.visibleAreaRect;return new jn({width:e.width,height:e.height})}get scaleFactor(){const e=this.absoluteViewport;return(this.value.element.getBoundingClientRect()?.width??e.width)/e.width}get relativeViewport(){const e=this.absoluteViewport,t=this.scaleFactor;return new eo({width:e.width/t,height:e.height/t})}}const ro=i=>{const e=new o.Subject,t=new lt,n=new at,s=new Yn(i,n),r=new ct(n,s),c=new Rt(n,s),a=new At(n),l=n.watch("rootElement"),u=It({context:n,settings:s}),d=new vt(n,c),p=new Et(l,n,d,c,u,s,t,a),g=qn({context:n,spineItemsManager:c,hookManager:t,spine:p,settings:s,viewport:a}),m=new Pt(n,d,c,p,u);g.viewportState$.subscribe(n.bridgeEvent.viewportStateSubject),g.navigation$.subscribe(n.bridgeEvent.navigationSubject),g.locker.isLocked$.subscribe(n.bridgeEvent.navigationIsLockedSubject),d.subscribe(n.bridgeEvent.paginationSubject);const h=()=>{const S=n.value.rootElement;if(!S)return;const w={width:S?.offsetWidth,height:S?.offsetHeight};S.style.setProperty("overflow","hidden");const v=S.getBoundingClientRect();n.update({visibleAreaRect:{x:v.x,y:v.y,width:w.width,height:w.height}}),p.layout()},f=S=>{const{containerElement:w,manifest:v}=S;if(n.manifest){L.warn("loading a new book is not supported yet");return}L.log("load",{options:S});const T=ao(w);n.update({manifest:v,rootElement:T,forceSinglePageMode:s.values.forceSinglePageMode}),h()},b=()=>{c.destroy(),m.destroy(),s.destroy(),d.destroy(),n.destroy(),g.destroy(),p.destroy(),r.destroy(),e.next(),e.complete(),a.destroy()};return{context:n,spine:p,hookManager:t,cfi:{generateCfiFromRange:Qe,parseCfi:oe,generateCfiForSpineItemPage:S=>ie({...S,spine:p}),resolveCfi:S=>be({...S,spineItemsManager:c})},navigation:g,spineItemsObserver:p.spineItemsObserver,spineItemsManager:c,layout:h,load:f,destroy:b,pagination:{get state(){return d.value},get state$(){return d}},settings:s,renderHeadless:S=>c.get(S)?.renderer.renderHeadless()??o.of(void 0),viewport:a,element$:l,viewportState$:n.bridgeEvent.viewportState$,viewportFree$:n.bridgeEvent.viewportFree$,state$:n.manifest$.pipe(y.map(S=>S?"ready":"idle")),features:r,$:{destroy$:e}}},ao=i=>(i.style.cssText=`
|
|
290
290
|
${i.style.cssText}
|
|
291
291
|
background-color: white;
|
|
292
292
|
position: relative;
|