@foxycape/core 1.2.2 → 1.2.4

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.
Files changed (37) hide show
  1. package/dist/kernal/FileLoader.cjs +1 -1
  2. package/dist/kernal/FileLoader.mjs +1 -1
  3. package/dist/kernal/Reader.cjs +1 -1
  4. package/dist/kernal/Reader.mjs +1 -1
  5. package/dist/kernal/html/geometry.cjs +1 -1
  6. package/dist/kernal/html/geometry.d.ts +3 -3
  7. package/dist/kernal/html/geometry.mjs +22 -22
  8. package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.cjs +1 -1
  9. package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.mjs +9 -9
  10. package/dist/mediaTypes/html/renderer/HtmlRenderer.cjs +1 -1
  11. package/dist/mediaTypes/html/renderer/HtmlRenderer.mjs +7 -7
  12. package/dist/mediaTypes/html/renderer/document/HtmlDocument.cjs +1 -1
  13. package/dist/mediaTypes/html/renderer/document/HtmlDocument.mjs +9 -9
  14. package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.cjs +1 -1
  15. package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.mjs +13 -13
  16. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.cjs +1 -1
  17. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.mjs +39 -39
  18. package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.cjs +1 -1
  19. package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.mjs +8 -8
  20. package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.cjs +1 -1
  21. package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.mjs +8 -8
  22. package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.cjs +1 -1
  23. package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.mjs +20 -20
  24. package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.cjs +1 -1
  25. package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.mjs +10 -10
  26. package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.cjs +1 -1
  27. package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.mjs +14 -14
  28. package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.cjs +1 -1
  29. package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.d.ts +0 -1
  30. package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.mjs +6 -7
  31. package/dist/mediaTypes/html/renderer/style/html-content.cjs +4 -0
  32. package/dist/mediaTypes/html/renderer/style/html-content.mjs +1 -1
  33. package/dist/mediaTypes/pdf/renderer/PdfDocument.cjs +1 -1
  34. package/dist/mediaTypes/pdf/renderer/PdfDocument.mjs +6 -6
  35. package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.cjs +1 -1
  36. package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.mjs +7 -7
  37. package/package.json +2 -2
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/web/BrowserCapabilities.cjs"),t=require("../../../../kernal/common/text.cjs"),n=require("../../../../kernal/progress/Progress.cjs");require("../../../../kernal/Constants.cjs");const r=require("../../../../kernal/common/number.cjs"),i=require("../../../../kernal/html/finder.cjs"),a=require("../../../../kernal/html/dom.cjs"),o=require("../../../../kernal/web/scheduler.cjs"),s=require("../../../../kernal/html/style.cjs"),c=require("../../../../kernal/html/selection.cjs"),l=require("../../../../kernal/html/geometry.cjs"),u=require("../../HtmlSettings.cjs"),d=require("../../../base/renderer/BaseDocumentsProvider.cjs"),f=require("../layout/resolveLayoutRoute.cjs"),p=require("../location/scrollActivity.cjs"),m=require("../location/remapStoredPageNumber.cjs"),h=require("../document/HtmlDocument.cjs"),g=require("./HtmlDocumentsPreloader.cjs"),_=require("./HtmlDocumentsIntersectionObserver.cjs"),v=require("../location/HtmlElementLocator.cjs"),y=require("../layout/HtmlRendererViewport.cjs"),b=require("../layout/geometry/getLayoutOffsetLeft.cjs");let x=require("perfect-debounce");var S=class extends d.BaseDocumentsProvider{constructor(e,n,r,i){super(e,n),this.readerContainer=r,this.htmlOptions=i,this.isInit=!1,this.isFirstLoad=!0,this.hangTasks=[],this.resetTransformContainer=()=>{let e=this.getTransformContainer();e&&(e.style.removeProperty(`transition`),e.style.transform=`translate3d(0px,0,0)`,e.setAttribute(`data-target-transform`,`0`),e.offsetWidth)},this.removeElementTransitionEvent=async e=>{let t=e.target;for(t.style.removeProperty(`transition`),t.style.removeProperty(`will-change`),t.removeAttribute(u.HtmlSettings.PageMovingAttributeName),t.removeEventListener(`transitionend`,this.removeElementTransitionEvent);this.hangTasks.length>0;)await this.hangTasks.shift()()},this.scrollWrapperIntoView=(e,t)=>{let n=e.getWrapperContainer(),r=f.getLayoutGeometry(this.htmlOptions);if(r.flipMode==`page`){let t=this.rendererViewport.getLayoutMetrics(),i=this.getTransformContainer();if(r.pageAxis==`y`){let e=Math.max(0,n.offsetTop);i.style.transform=r.getPageTranslateCss(e),i.setAttribute(`data-target-transform`,`${e}`)}else{let n=this.getDocumentPageBox(e),a=r.getPageTransformOffset(n,1,t.pageMoveLength);i.style.transform=r.getPageTranslateCss(a),i.setAttribute(`data-target-transform`,`${a}`)}}else(!n.isVisible||t)&&r.alignWrapperToViewport({wrapper:n,scrollElement:this.getScrollElement(),rootDocument:this.owner.getRootContainer()?.ownerDocument});this.setCurrentVisibleDocument(e)},this.setDocumentVisible=(e,t)=>{e.isVisible=t},this.reload=async()=>{let e=this.owner.context.currentLocation;t.isNullOrWhiteSpace(e?.url)||await this.load(e,!0)},this.restoreReadingPosition=async()=>{let e=this.owner.context.currentLocation;if(t.isNullOrWhiteSpace(e?.url))return;let n=this.getDocument(e.url)??this.getFirstVisibleDocument();n&&await this.gotoDoc(n,e,!0)},this.delayRestoreReadingPosition=(0,x.debounce)(this.restoreReadingPosition,100),this.delayReloadTime=300,this.delayReload=(0,x.debounce)(this.reload,this.delayReloadTime),i.documentLanguage=e.context?.metadata?.language,this.logger=this.owner.loggerFactory.getLogger(this.constructor.name),this.elementLocator=new v.HtmlElementLocator(this),this.rendererViewport=new y.HtmlRendererViewport(e,this.readerContainer,this.owner.optionsProvider,i),this.documentsIntersectionObserver=new _.HtmlDocumentsIntersectionObserver(this),this.documentPreloader=new g.HtmlDocumentsPreloader(this.owner.events,this,()=>this.loadingDoc,i)}getTransformContainer(){return this.getRendererContainer().querySelector(`.`+u.HtmlSettings.TransformContainerCssName)}getRendererContainer(){return this.rendererViewport.getRendererContainer()}getScrollElement(){return this.rendererViewport.getScrollElement()}getLoadingDocument(){return this.loadingDoc}getLoadedDocuments(){return this.getDocuments().filter(e=>e.getLoadStatus()==`success`)}getVisibleDocuments(){return this.getDocuments().filter(e=>e.getWrapperContainer()?.isVisible)}getFirstVisibleDocument(e){let t=this.getVisibleDocuments();if(e){let e=t.find(e=>e.getVisibleElements(!0).length>0);if(e)return e}if(t[0])return t[0];let n=this.owner.context.currentLocation?.url;return n&&this.getDocument(n)||this.getDocuments()[0]||null}getLastVisibleDocument(e){let t=this.getVisibleDocuments();if(e){let e=[...t].reverse().find(e=>e.getVisibleElements().length>0);if(e)return e}if(t.length>0)return t[t.length-1];let n=this.owner.context.currentLocation?.url,r=this.getDocuments();return n&&this.getDocument(n)||r[r.length-1]||null}async createDocument(e,t,n){return new h.HtmlDocument(this.owner,this.rendererViewport,this.fileParser,e,t,this.htmlOptions)}async initialize(e){this.rendererViewport.applyCssVariables(),await super.initialize(e);let t=this.getDocuments();for(let e of t)e.getWrapperContainer().classList.add(u.HtmlSettings.FileContentContainerClassName,u.HtmlSettings.FileContentContainerHeightClassName)}async load(e,t){this.htmlOptions.documentLanguage=this.owner.context?.metadata?.language,this.isInit||=(await this.initialize(this.getTransformContainer()),this.documentsIntersectionObserver.register(),!0),e?.storeCurrent&&await this.owner.onBeforeRedirect?.(this),t??=!1;let r=e?.url,i=this.getDocument(r);if(!i){let t=this.getDocuments();i=t[0],(t.length>1||!e)&&(e=new n.FileLocation(i.url,1,`ratio`),e.current=0)}f.getLayoutGeometry(this.htmlOptions).flipMode==`page`?this.appendPageStyles():this.removePageStyles(),this.loadingDoc=i,this.owner.context.redirectingDocUrl=i.url,p.shouldBeginAbsoluteLocate(e?.direction,f.getLayoutGeometry(this.htmlOptions).holdsAbsoluteLocate)&&p.beginAbsoluteLocate();try{this.owner.context.setUserChangedProgress(!t,e?.from),!t&&e?.url&&(this.owner.context.currentLocation=e),await this.gotoDoc(i,e,t),this.isFirstLoad&&!t&&(await this.owner.loading?.hide(),this.isFirstLoad=!1),await this.documentPreloader.preloadDocuments(),this.shouldRealignAfterPreload(e,t)&&await this.gotoDoc(i,e,!0)}finally{setTimeout(()=>{this.loadingDoc=null,this.owner.context.redirectingDocUrl=void 0},166)}}async gotoDoc(e,t,n){if(!t)return;n??=!1;let r=f.getLayoutGeometry(this.htmlOptions).flipMode,i=e instanceof h.HtmlDocument?e:null,a=!!i&&r==`scroll`&&!n&&!t.suppressScroll&&e.getLoadStatus()!=`success`;a&&i&&(i.prepareCoveredLoad(),this.scrollWrapperIntoView(e,!0),await o.yieldToMain());try{if(await e.load(),!e.getContentContainer())return;let i=await this.findTarget(e,t),a=i?.target,o=i?.pageNumber,s=i?.isDocumentStart;if(!a&&!o)return;let c=this.resolveRedirectTarget(a,t);r==`scroll`?t.suppressScroll?this.setDocumentVisible(e.getWrapperContainer(),!0):c&&await this.gotoScroll(e,t,c,s):(o=await this.resolvePageNumber(e,t,c,o),await this.transformPage(e,o,n?void 0:t.direction))}finally{a&&i&&await i.revealCoveredLoad()}}async resolvePageNumber(e,t,n,r){let i=await e.getNumberOfPages(),a=t.unit===`page`&&t.current!=null&&t.current>0;return a&&t.total===i?m.remapStoredPageNumber(t,i):l.isDomRange(n)?e.getPageNumber(n):a?m.remapStoredPageNumber(t,i):n?e.getPageNumber(n):r}resolveRedirectTarget(e,t){if(!e||!(t?.textOffset>=0))return e;let n=e.textContent??``;if(t.textOffset>=n.length)return e;let r=t.textOffset,a=e.firstElementChild;return a&&i.compareTagName(a.tagName,`ST`)&&a.getBoundingClientRect().width==0&&(r=a.textContent?.length??0),r>=n.length?e:c.createRange(e,e,r,Math.min(r+1,n.length))??e}async gotoScroll(t,n,r,i){if(f.getLayoutGeometry(this.htmlOptions).blockAxis==`x`){await this.gotoScrollX(t,n,r,i);return}let a=l.getLocateElement(r),o=l.getLocateClientRect(r),c=0;n?.ignoreOverlayHeader||(c=this.owner.options.redirectPositionOffset,o.height==0&&(!a||a.clientHeight==0)&&(c+=50)),n.offsetTop&&(c+=n.offsetTop);let u=this.getScrollElement(),d=o.y,p=t.getContentContainer().ownerDocument.defaultView?.frameElement,m=p?.getBoundingClientRect()?.y??0,h=d+m,g=u.scrollTop;if(n.useAbsoluteScrollTop){let e=g+h-c;u.scrollTo(0,e)}else if(i)this.scrollWrapperIntoView(t,!0);else{if(e.BrowserCapabilities.isSafari()){s.scrollElementIntoView(t.getWrapperContainer(),void 0,void 0,this.owner.getRootContainer()?.ownerDocument),g=u.scrollTop;let e=p?.offsetTop??0;if(Math.abs(e+d-g)>5){let e=g+t.getWrapperContainer().getBoundingClientRect().y+d;u.scrollTo(0,e)}let n=l.getLocateClientRect(r).y;m=p?.getBoundingClientRect()?.y??0,h=n+m}c=h-c-u.getBoundingClientRect().top,c>0?u.scrollHeight-u.scrollTop-u.clientHeight>0?u.scrollBy(0,c):a&&s.scrollElementIntoView(a,void 0,n?.scrollIntoViewIfNeeded,this.owner.getRootContainer()?.ownerDocument):u.scrollBy(0,c),this.setDocumentVisible(t.getWrapperContainer(),!0)}}async gotoScrollX(e,t,n,r){let i=this.getScrollElement();if(r){this.scrollWrapperIntoView(e,!0);return}let a=l.getLocateClientRect(n),o=(e.getContentContainer().ownerDocument.defaultView?.frameElement)?.getBoundingClientRect()?.x??0,s=i.getBoundingClientRect(),c=t.offsetLeft??0,u=a.x+o-c,d=a.right+o-c,p=f.getLayoutGeometry(this.htmlOptions).getScrollLocateDelta({targetStart:u,viewportStart:s.left,targetEnd:d,viewportEnd:s.right});if(t.useAbsoluteScrollTop){i.scrollTo(i.scrollLeft+p,i.scrollTop),this.setDocumentVisible(e.getWrapperContainer(),!0);return}i.scrollBy(p,0),this.setDocumentVisible(e.getWrapperContainer(),!0)}async findTarget(e,t){return this.elementLocator.locateElement(e,t,this.htmlOptions)}async transformPage(e,t,n){if(this.setCurrentVisibleDocument(e),f.getLayoutGeometry(this.htmlOptions).pageAxis==`y`){this.transformVerticalPage(e,t,n);return}this.transformHorizontalPage(e,t,n)}transformHorizontalPage(e,t,n){let r=this.resolveRelativePageTransform(e,t,n,`x`);if(!r){this.syncPageNumberWhenTransformBlocked(e,n);return}this.applyPageTransform(r.transformContainer,r.newTransformLength,n,`x`),this.setCurrentPageNumber(e,t)}transformVerticalPage(e,t,n){let r=this.resolveRelativePageTransform(e,t,n,`y`);if(!r){this.syncPageNumberWhenTransformBlocked(e,n);return}this.applyPageTransform(r.transformContainer,r.newTransformLength,n,`y`),this.setCurrentPageNumber(e,t)}resolveRelativePageTransform(e,t,n,i){let a=this.getTransformContainer();if(!a)return null;let o=s.getTransformLength(a,i),c=a.getAttribute(`data-target-transform`),l=0;l=c?r.parseNumber(c,0,`parseFloat`):o;let u=this.rendererViewport.getLayoutMetrics(),d=Math.max(1,u.pageMoveLength);if(n==`previous`)return{transformContainer:a,newTransformLength:Math.max(0,l-d)};if(n==`next`){let e=l+d;return this.wouldExceedLastContent(e,i,a)?null:{transformContainer:a,newTransformLength:e}}let f=this.getDocumentPageStartOffset(e,i),p=f+(t-1)*u.pageMoveLength,m=i==`y`?e.getWrapperContainer()?.scrollHeight??0:this.getDocumentPageBox(e).contentWidth,h=i==`y`?u.pageHeight:u.pageWidth,g=Number.isFinite(h)&&h>0?h:u.pageMoveLength,_=Math.max(0,f+m-g);return p>_&&(p=_),p<0&&(p=0),{transformContainer:a,newTransformLength:p}}canAdvancePageTransform(e){let t=f.getLayoutGeometry(this.htmlOptions),n=this.getCurrentPageNumber(e)+1;return this.resolveRelativePageTransform(e,n,`next`,t.pageAxis)!=null}wouldExceedLastContent(e,t,n){return this.getLastContentExtent(t,n)-e<=0}getLastContentExtent(e,t){let n=this.getDocuments(),r=n[n.length-1]?.getWrapperContainer();return r?f.getLayoutGeometry(this.htmlOptions).getLastContentExtent(r,t):0}syncPageNumberWhenTransformBlocked(e,t){if(t!=`next`)return;let n=e.getContentContainer()?.ownerDocument?.documentElement,i=r.parseNumber(n?.getAttribute(u.HtmlSettings.HtmlDocumentNumperOfPagesPropertyName),this.getCurrentPageNumber(e),`parseInt`);this.setCurrentPageNumber(e,i)}getDocumentPageStartOffset(e,t){let n=e.getWrapperContainer(),r=this.getDocumentPageBox(e);return f.getLayoutGeometry(this.htmlOptions).getDocumentPageStartOffset(n,r)}getDocumentPageBox(e){let t=e.getWrapperContainer(),n=(e.getContentContainer()?.ownerDocument?.documentElement)?.ownerDocument?.defaultView?.frameElement,r=n?.offsetWidth||(t?.clientWidth??0),i=this.getTransformContainer(),a=n&&i?b.getLayoutOffsetLeft(n,i):t?.offsetLeft??0,o=i?.offsetWidth??0;return{offsetLeft:a,contentWidth:r,startOffset:f.getLayoutGeometry(this.htmlOptions).getPageStartOffset({offsetLeft:a,contentWidth:r,containerWidth:o}),containerWidth:o}}applyPageTransform(e,t,n,r=`x`){let i=f.getLayoutGeometry(this.htmlOptions),a=parseFloat(t.toFixed(10)),o=i.getPageTranslateCss(a),c=i.getSignedTranslateLength(a),l=s.getTransformLength(e,r,!0);e.setAttribute(`data-target-transform`,`${a}`),!(n&&Math.abs(c-l)<=.5)&&(!e.style.transition&&this.htmlOptions.flipPageStyle==`slide`&&(n==`next`||n==`previous`)&&(e.style.transition=`transform 0.2s ease`),e.style.transition&&e.addEventListener(`transitionend`,this.removeElementTransitionEvent),e.style.transform=o)}setCurrentPageNumber(e,t){let n=e.getContentContainer()?.ownerDocument?.documentElement;n&&n.setAttribute(u.HtmlSettings.HtmlDocumentCurrentPagePropertyName,t.toFixed(0))}getCurrentPageNumber(e){let t=e.getContentContainer()?.ownerDocument?.documentElement;if(!t)return 1;let n=t.getAttribute(u.HtmlSettings.HtmlDocumentCurrentPagePropertyName);return r.parseNumber(n,1,`parseInt`)}async syncPageState(e){(e.getContentContainer()?.ownerDocument?.documentElement)?.removeAttribute(u.HtmlSettings.HtmlDocumentNumperOfPagesPropertyName);let t=Math.max(1,await e.getNumberOfPages()),n=f.getLayoutGeometry(this.htmlOptions),i=this.rendererViewport.getLayoutMetrics(),a=Math.max(1,i.pageMoveLength),o=this.getTransformContainer(),s=r.parseNumber(o?.getAttribute(`data-target-transform`),0,`parseFloat`),c=this.getDocumentPageStartOffset(e,n.pageAxis),l=Math.min(t,Math.max(1,Math.round(Math.abs(s-c)/a)+1));return this.setCurrentPageNumber(e,l),{current:l,total:t}}setCurrentVisibleDocument(e){for(let t of this.getDocuments())this.setDocumentVisible(t.getWrapperContainer(),t===e)}shouldRealignAfterPreload(e,t){return t||e?.direction==`next`||e?.direction==`previous`?!1:f.getLayoutGeometry(this.htmlOptions).flipMode==`page`}appendPageStyles(){}clearPageTransform(){let e=this.getTransformContainer();e&&(e.style.removeProperty(`transition`),e.style.removeProperty(`transform`),e.removeAttribute(`data-target-transform`),e.offsetWidth)}removePageStyles(){this.getRendererContainer().classList.remove(u.HtmlSettings.TransformPagesClassName),this.clearPageTransform()}async dispose(){await this.documentsIntersectionObserver.dispose(),await this.documentPreloader.dispose(),await super.dispose(),this.readerContainer&&a.emptyElement(this.readerContainer),this.isInit=!1}};exports.HtmlDocumentsProvider=S;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/web/BrowserCapabilities.cjs"),t=require("../../../../kernal/common/text.cjs"),n=require("../../../../kernal/progress/Progress.cjs");require("../../../../kernal/Constants.cjs");const r=require("../../../../kernal/common/number.cjs"),i=require("../../../../kernal/html/finder.cjs"),a=require("../../../../kernal/html/dom.cjs"),o=require("../../../../kernal/web/scheduler.cjs"),s=require("../../HtmlSettings.cjs"),c=require("../../../base/renderer/BaseDocumentsProvider.cjs"),l=require("../../../../kernal/html/style.cjs"),u=require("../../../../kernal/html/selection.cjs"),d=require("../../../../kernal/html/geometry.cjs"),f=require("../layout/resolveLayoutRoute.cjs"),p=require("../location/scrollActivity.cjs"),m=require("../location/remapStoredPageNumber.cjs"),h=require("../document/HtmlDocument.cjs"),g=require("./HtmlDocumentsPreloader.cjs"),_=require("./HtmlDocumentsIntersectionObserver.cjs"),v=require("../location/HtmlElementLocator.cjs"),y=require("../layout/HtmlRendererViewport.cjs"),b=require("../layout/geometry/getLayoutOffsetLeft.cjs");let x=require("perfect-debounce");var S=class extends c.BaseDocumentsProvider{constructor(e,n,r,i){super(e,n),this.readerContainer=r,this.htmlOptions=i,this.isInit=!1,this.isFirstLoad=!0,this.hangTasks=[],this.resetTransformContainer=()=>{let e=this.getTransformContainer();e&&(e.style.removeProperty(`transition`),e.style.transform=`translate3d(0px,0,0)`,e.setAttribute(`data-target-transform`,`0`),e.offsetWidth)},this.removeElementTransitionEvent=async e=>{let t=e.target;for(t.style.removeProperty(`transition`),t.style.removeProperty(`will-change`),t.removeAttribute(s.HtmlSettings.PageMovingAttributeName),t.removeEventListener(`transitionend`,this.removeElementTransitionEvent);this.hangTasks.length>0;)await this.hangTasks.shift()()},this.scrollWrapperIntoView=(e,t)=>{let n=e.getWrapperContainer(),r=f.getLayoutGeometry(this.htmlOptions);if(r.flipMode==`page`){let t=this.rendererViewport.getLayoutMetrics(),i=this.getTransformContainer();if(r.pageAxis==`y`){let e=Math.max(0,n.offsetTop);i.style.transform=r.getPageTranslateCss(e),i.setAttribute(`data-target-transform`,`${e}`)}else{let n=this.getDocumentPageBox(e),a=r.getPageTransformOffset(n,1,t.pageMoveLength);i.style.transform=r.getPageTranslateCss(a),i.setAttribute(`data-target-transform`,`${a}`)}}else(!n.isVisible||t)&&r.alignWrapperToViewport({wrapper:n,scrollElement:this.getScrollElement(),rootDocument:this.owner.getRootContainer()?.ownerDocument});this.setCurrentVisibleDocument(e)},this.setDocumentVisible=(e,t)=>{e.isVisible=t},this.reload=async()=>{let e=this.owner.context.currentLocation;t.isNullOrWhiteSpace(e?.url)||await this.load(e,!0)},this.restoreReadingPosition=async()=>{let e=this.owner.context.currentLocation;if(t.isNullOrWhiteSpace(e?.url))return;let n=this.getDocument(e.url)??this.getFirstVisibleDocument();n&&await this.gotoDoc(n,e,!0)},this.delayRestoreReadingPosition=(0,x.debounce)(this.restoreReadingPosition,100),this.delayReloadTime=300,this.delayReload=(0,x.debounce)(this.reload,this.delayReloadTime),i.documentLanguage=e.context?.metadata?.language,this.logger=this.owner.loggerFactory.getLogger(this.constructor.name),this.elementLocator=new v.HtmlElementLocator(this),this.rendererViewport=new y.HtmlRendererViewport(e,this.readerContainer,this.owner.optionsProvider,i),this.documentsIntersectionObserver=new _.HtmlDocumentsIntersectionObserver(this),this.documentPreloader=new g.HtmlDocumentsPreloader(this.owner.events,this,()=>this.loadingDoc,i)}getTransformContainer(){return this.getRendererContainer().querySelector(`.`+s.HtmlSettings.TransformContainerCssName)}getRendererContainer(){return this.rendererViewport.getRendererContainer()}getScrollElement(){return this.rendererViewport.getScrollElement()}getLoadingDocument(){return this.loadingDoc}getLoadedDocuments(){return this.getDocuments().filter(e=>e.getLoadStatus()==`success`)}getVisibleDocuments(){return this.getDocuments().filter(e=>e.getWrapperContainer()?.isVisible)}getFirstVisibleDocument(e){let t=this.getVisibleDocuments();if(e){let e=t.find(e=>e.getVisibleElements(!0).length>0);if(e)return e}if(t[0])return t[0];let n=this.owner.context.currentLocation?.url;return n&&this.getDocument(n)||this.getDocuments()[0]||null}getLastVisibleDocument(e){let t=this.getVisibleDocuments();if(e){let e=[...t].reverse().find(e=>e.getVisibleElements().length>0);if(e)return e}if(t.length>0)return t[t.length-1];let n=this.owner.context.currentLocation?.url,r=this.getDocuments();return n&&this.getDocument(n)||r[r.length-1]||null}async createDocument(e,t,n){return new h.HtmlDocument(this.owner,this.rendererViewport,this.fileParser,e,t,this.htmlOptions)}async initialize(e){this.rendererViewport.applyCssVariables(),await super.initialize(e);let t=this.getDocuments();for(let e of t)e.getWrapperContainer().classList.add(s.HtmlSettings.FileContentContainerClassName,s.HtmlSettings.FileContentContainerHeightClassName)}async load(e,t){this.htmlOptions.documentLanguage=this.owner.context?.metadata?.language,this.isInit||=(await this.initialize(this.getTransformContainer()),this.documentsIntersectionObserver.register(),!0),e?.storeCurrent&&await this.owner.onBeforeRedirect?.(this),t??=!1;let r=e?.url,i=this.getDocument(r);if(!i){let t=this.getDocuments();i=t[0],(t.length>1||!e)&&(e=new n.FileLocation(i.url,1,`ratio`),e.current=0)}f.getLayoutGeometry(this.htmlOptions).flipMode==`page`?this.appendPageStyles():this.removePageStyles(),this.loadingDoc=i,this.owner.context.redirectingDocUrl=i.url,p.shouldBeginAbsoluteLocate(e?.direction,f.getLayoutGeometry(this.htmlOptions).holdsAbsoluteLocate)&&p.beginAbsoluteLocate();try{this.owner.context.setUserChangedProgress(!t,e?.from),!t&&e?.url&&(this.owner.context.currentLocation=e),await this.gotoDoc(i,e,t),this.isFirstLoad&&!t&&(await this.owner.loading?.hide(),this.isFirstLoad=!1),await this.documentPreloader.preloadDocuments(),this.shouldRealignAfterPreload(e,t)&&await this.gotoDoc(i,e,!0)}finally{setTimeout(()=>{this.loadingDoc=null,this.owner.context.redirectingDocUrl=void 0},166)}}async gotoDoc(e,t,n){if(!t)return;n??=!1;let r=f.getLayoutGeometry(this.htmlOptions).flipMode,i=e instanceof h.HtmlDocument?e:null,a=!!i&&r==`scroll`&&!n&&!t.suppressScroll&&e.getLoadStatus()!=`success`;a&&i&&(i.prepareCoveredLoad(),this.scrollWrapperIntoView(e,!0),await o.yieldToMain());try{if(await e.load(),!e.getContentContainer())return;let i=await this.findTarget(e,t),a=i?.target,o=i?.pageNumber,s=i?.isDocumentStart;if(!a&&!o)return;let c=this.resolveRedirectTarget(a,t);r==`scroll`?t.suppressScroll?this.setDocumentVisible(e.getWrapperContainer(),!0):c&&await this.gotoScroll(e,t,c,s):(o=await this.resolvePageNumber(e,t,c,o),await this.transformPage(e,o,n?void 0:t.direction))}finally{a&&i&&await i.revealCoveredLoad()}}async resolvePageNumber(e,t,n,r){let i=await e.getNumberOfPages(),a=t.unit===`page`&&t.current!=null&&t.current>0;return a&&t.total===i?m.remapStoredPageNumber(t,i):d.isDomRange(n)?e.getPageNumber(n):a?m.remapStoredPageNumber(t,i):n?e.getPageNumber(n):r}resolveRedirectTarget(e,t){if(!e||!(t?.textOffset>=0))return e;let n=e.textContent??``;if(t.textOffset>=n.length)return e;let r=t.textOffset,a=e.firstElementChild;return a&&i.compareTagName(a.tagName,`ST`)&&a.getBoundingClientRect().width==0&&(r=a.textContent?.length??0),r>=n.length?e:u.createRange(e,e,r,Math.min(r+1,n.length))??e}async gotoScroll(t,n,r,i){if(f.getLayoutGeometry(this.htmlOptions).blockAxis==`x`){await this.gotoScrollX(t,n,r,i);return}let a=d.getLocateElement(r),o=d.getLocateClientRect(r),s=0;n?.ignoreOverlayHeader||(s=this.owner.options.redirectPositionOffset,o.height==0&&(!a||a.clientHeight==0)&&(s+=50)),n.offsetTop&&(s+=n.offsetTop);let c=this.getScrollElement(),u=o.y,p=t.getContentContainer().ownerDocument.defaultView?.frameElement,m=p?.getBoundingClientRect()?.y??0,h=u+m,g=c.scrollTop;if(n.useAbsoluteScrollTop){let e=g+h-s;c.scrollTo(0,e)}else if(i)this.scrollWrapperIntoView(t,!0);else{if(e.BrowserCapabilities.isSafari()){l.scrollElementIntoView(t.getWrapperContainer(),void 0,void 0,this.owner.getRootContainer()?.ownerDocument),g=c.scrollTop;let e=p?.offsetTop??0;if(Math.abs(e+u-g)>5){let e=g+t.getWrapperContainer().getBoundingClientRect().y+u;c.scrollTo(0,e)}let n=d.getLocateClientRect(r).y;m=p?.getBoundingClientRect()?.y??0,h=n+m}s=h-s-c.getBoundingClientRect().top,s>0?c.scrollHeight-c.scrollTop-c.clientHeight>0?c.scrollBy(0,s):a&&l.scrollElementIntoView(a,void 0,n?.scrollIntoViewIfNeeded,this.owner.getRootContainer()?.ownerDocument):c.scrollBy(0,s),this.setDocumentVisible(t.getWrapperContainer(),!0)}}async gotoScrollX(e,t,n,r){let i=this.getScrollElement();if(r){this.scrollWrapperIntoView(e,!0);return}let a=d.getLocateClientRect(n),o=(e.getContentContainer().ownerDocument.defaultView?.frameElement)?.getBoundingClientRect()?.x??0,s=i.getBoundingClientRect(),c=t.offsetLeft??0,l=a.x+o-c,u=a.right+o-c,p=f.getLayoutGeometry(this.htmlOptions).getScrollLocateDelta({targetStart:l,viewportStart:s.left,targetEnd:u,viewportEnd:s.right});if(t.useAbsoluteScrollTop){i.scrollTo(i.scrollLeft+p,i.scrollTop),this.setDocumentVisible(e.getWrapperContainer(),!0);return}i.scrollBy(p,0),this.setDocumentVisible(e.getWrapperContainer(),!0)}async findTarget(e,t){return this.elementLocator.locateElement(e,t,this.htmlOptions)}async transformPage(e,t,n){if(this.setCurrentVisibleDocument(e),f.getLayoutGeometry(this.htmlOptions).pageAxis==`y`){this.transformVerticalPage(e,t,n);return}this.transformHorizontalPage(e,t,n)}transformHorizontalPage(e,t,n){let r=this.resolveRelativePageTransform(e,t,n,`x`);if(!r){this.syncPageNumberWhenTransformBlocked(e,n);return}this.applyPageTransform(r.transformContainer,r.newTransformLength,n,`x`),this.setCurrentPageNumber(e,t)}transformVerticalPage(e,t,n){let r=this.resolveRelativePageTransform(e,t,n,`y`);if(!r){this.syncPageNumberWhenTransformBlocked(e,n);return}this.applyPageTransform(r.transformContainer,r.newTransformLength,n,`y`),this.setCurrentPageNumber(e,t)}resolveRelativePageTransform(e,t,n,i){let a=this.getTransformContainer();if(!a)return null;let o=l.getTransformLength(a,i),s=a.getAttribute(`data-target-transform`),c=0;c=s?r.parseNumber(s,0,`parseFloat`):o;let u=this.rendererViewport.getLayoutMetrics(),d=Math.max(1,u.pageMoveLength);if(n==`previous`)return{transformContainer:a,newTransformLength:Math.max(0,c-d)};if(n==`next`){let e=c+d;return this.wouldExceedLastContent(e,i,a)?null:{transformContainer:a,newTransformLength:e}}let f=this.getDocumentPageStartOffset(e,i),p=f+(t-1)*u.pageMoveLength,m=i==`y`?e.getWrapperContainer()?.scrollHeight??0:this.getDocumentPageBox(e).contentWidth,h=i==`y`?u.pageHeight:u.pageWidth,g=Number.isFinite(h)&&h>0?h:u.pageMoveLength,_=Math.max(0,f+m-g);return p>_&&(p=_),p<0&&(p=0),{transformContainer:a,newTransformLength:p}}canAdvancePageTransform(e){let t=f.getLayoutGeometry(this.htmlOptions),n=this.getCurrentPageNumber(e)+1;return this.resolveRelativePageTransform(e,n,`next`,t.pageAxis)!=null}wouldExceedLastContent(e,t,n){return this.getLastContentExtent(t,n)-e<=0}getLastContentExtent(e,t){let n=this.getDocuments(),r=n[n.length-1]?.getWrapperContainer();return r?f.getLayoutGeometry(this.htmlOptions).getLastContentExtent(r,t):0}syncPageNumberWhenTransformBlocked(e,t){if(t!=`next`)return;let n=e.getContentContainer()?.ownerDocument?.documentElement,i=r.parseNumber(n?.getAttribute(s.HtmlSettings.HtmlDocumentNumperOfPagesPropertyName),this.getCurrentPageNumber(e),`parseInt`);this.setCurrentPageNumber(e,i)}getDocumentPageStartOffset(e,t){let n=e.getWrapperContainer(),r=this.getDocumentPageBox(e);return f.getLayoutGeometry(this.htmlOptions).getDocumentPageStartOffset(n,r)}getDocumentPageBox(e){let t=e.getWrapperContainer(),n=(e.getContentContainer()?.ownerDocument?.documentElement)?.ownerDocument?.defaultView?.frameElement,r=n?.offsetWidth||(t?.clientWidth??0),i=this.getTransformContainer(),a=n&&i?b.getLayoutOffsetLeft(n,i):t?.offsetLeft??0,o=i?.offsetWidth??0;return{offsetLeft:a,contentWidth:r,startOffset:f.getLayoutGeometry(this.htmlOptions).getPageStartOffset({offsetLeft:a,contentWidth:r,containerWidth:o}),containerWidth:o}}applyPageTransform(e,t,n,r=`x`){let i=f.getLayoutGeometry(this.htmlOptions),a=parseFloat(t.toFixed(10)),o=i.getPageTranslateCss(a),s=i.getSignedTranslateLength(a),c=l.getTransformLength(e,r,!0);e.setAttribute(`data-target-transform`,`${a}`),!(n&&Math.abs(s-c)<=.5)&&(!e.style.transition&&this.htmlOptions.flipPageStyle==`slide`&&(n==`next`||n==`previous`)&&(e.style.transition=`transform 0.2s ease`),e.style.transition&&e.addEventListener(`transitionend`,this.removeElementTransitionEvent),e.style.transform=o)}setCurrentPageNumber(e,t){let n=e.getContentContainer()?.ownerDocument?.documentElement;n&&n.setAttribute(s.HtmlSettings.HtmlDocumentCurrentPagePropertyName,t.toFixed(0))}getCurrentPageNumber(e){let t=e.getContentContainer()?.ownerDocument?.documentElement;if(!t)return 1;let n=t.getAttribute(s.HtmlSettings.HtmlDocumentCurrentPagePropertyName);return r.parseNumber(n,1,`parseInt`)}async syncPageState(e){(e.getContentContainer()?.ownerDocument?.documentElement)?.removeAttribute(s.HtmlSettings.HtmlDocumentNumperOfPagesPropertyName);let t=Math.max(1,await e.getNumberOfPages()),n=f.getLayoutGeometry(this.htmlOptions),i=this.rendererViewport.getLayoutMetrics(),a=Math.max(1,i.pageMoveLength),o=this.getTransformContainer(),c=r.parseNumber(o?.getAttribute(`data-target-transform`),0,`parseFloat`),l=this.getDocumentPageStartOffset(e,n.pageAxis),u=Math.min(t,Math.max(1,Math.round(Math.abs(c-l)/a)+1));return this.setCurrentPageNumber(e,u),{current:u,total:t}}setCurrentVisibleDocument(e){for(let t of this.getDocuments())this.setDocumentVisible(t.getWrapperContainer(),t===e)}shouldRealignAfterPreload(e,t){return t||e?.direction==`next`||e?.direction==`previous`?!1:f.getLayoutGeometry(this.htmlOptions).flipMode==`page`}appendPageStyles(){}clearPageTransform(){let e=this.getTransformContainer();e&&(e.style.removeProperty(`transition`),e.style.removeProperty(`transform`),e.removeAttribute(`data-target-transform`),e.offsetWidth)}removePageStyles(){this.getRendererContainer().classList.remove(s.HtmlSettings.TransformPagesClassName),this.clearPageTransform()}async dispose(){await this.documentsIntersectionObserver.dispose(),await this.documentPreloader.dispose(),await super.dispose(),this.readerContainer&&a.emptyElement(this.readerContainer),this.isInit=!1}};exports.HtmlDocumentsProvider=S;
@@ -7,11 +7,11 @@ import { compareTagName as i } from "../../../../kernal/html/finder.mjs";
7
7
  import { emptyElement as a } from "../../../../kernal/html/dom.mjs";
8
8
  import { yieldToMain as o } from "../../../../kernal/web/scheduler.mjs";
9
9
  import { asyncDebounce as s } from "../../../../kernal/web/debounce.mjs";
10
- import { getTransformLength as c, scrollElementIntoView as l } from "../../../../kernal/html/style.mjs";
11
- import { createRange as u } from "../../../../kernal/html/selection.mjs";
12
- import { getLocateClientRect as d, getLocateElement as f, isDomRange as p } from "../../../../kernal/html/geometry.mjs";
13
- import { HtmlSettings as m } from "../../HtmlSettings.mjs";
14
- import { BaseDocumentsProvider as h } from "../../../base/renderer/BaseDocumentsProvider.mjs";
10
+ import { HtmlSettings as c } from "../../HtmlSettings.mjs";
11
+ import { BaseDocumentsProvider as l } from "../../../base/renderer/BaseDocumentsProvider.mjs";
12
+ import { getTransformLength as u, scrollElementIntoView as d } from "../../../../kernal/html/style.mjs";
13
+ import { createRange as f } from "../../../../kernal/html/selection.mjs";
14
+ import { getLocateClientRect as p, getLocateElement as m, isDomRange as h } from "../../../../kernal/html/geometry.mjs";
15
15
  import { getLayoutGeometry as g } from "../layout/resolveLayoutRoute.mjs";
16
16
  import { beginAbsoluteLocate as _, shouldBeginAbsoluteLocate as v } from "../location/scrollActivity.mjs";
17
17
  import { remapStoredPageNumber as y } from "../location/remapStoredPageNumber.mjs";
@@ -22,14 +22,14 @@ import { HtmlElementLocator as C } from "../location/HtmlElementLocator.mjs";
22
22
  import { HtmlRendererViewport as w } from "../layout/HtmlRendererViewport.mjs";
23
23
  import { getLayoutOffsetLeft as T } from "../layout/geometry/getLayoutOffsetLeft.mjs";
24
24
  //#region mediaTypes/html/renderer/documents/HtmlDocumentsProvider.ts
25
- var E = class extends h {
25
+ var E = class extends l {
26
26
  constructor(e, n, r, i) {
27
27
  super(e, n), this.readerContainer = r, this.htmlOptions = i, this.isInit = !1, this.isFirstLoad = !0, this.hangTasks = [], this.resetTransformContainer = () => {
28
28
  let e = this.getTransformContainer();
29
29
  e && (e.style.removeProperty("transition"), e.style.transform = "translate3d(0px,0,0)", e.setAttribute("data-target-transform", "0"), e.offsetWidth);
30
30
  }, this.removeElementTransitionEvent = async (e) => {
31
31
  let t = e.target;
32
- for (t.style.removeProperty("transition"), t.style.removeProperty("will-change"), t.removeAttribute(m.PageMovingAttributeName), t.removeEventListener("transitionend", this.removeElementTransitionEvent); this.hangTasks.length > 0;) await this.hangTasks.shift()();
32
+ for (t.style.removeProperty("transition"), t.style.removeProperty("will-change"), t.removeAttribute(c.PageMovingAttributeName), t.removeEventListener("transitionend", this.removeElementTransitionEvent); this.hangTasks.length > 0;) await this.hangTasks.shift()();
33
33
  }, this.scrollWrapperIntoView = (e, t) => {
34
34
  let n = e.getWrapperContainer(), r = g(this.htmlOptions);
35
35
  if (r.flipMode == "page") {
@@ -60,7 +60,7 @@ var E = class extends h {
60
60
  }, this.delayRestoreReadingPosition = s(this.restoreReadingPosition, 100), this.delayReloadTime = 300, this.delayReload = s(this.reload, this.delayReloadTime), i.documentLanguage = e.context?.metadata?.language, this.logger = this.owner.loggerFactory.getLogger(this.constructor.name), this.elementLocator = new C(this), this.rendererViewport = new w(e, this.readerContainer, this.owner.optionsProvider, i), this.documentsIntersectionObserver = new S(this), this.documentPreloader = new x(this.owner.events, this, () => this.loadingDoc, i);
61
61
  }
62
62
  getTransformContainer() {
63
- return this.getRendererContainer().querySelector("." + m.TransformContainerCssName);
63
+ return this.getRendererContainer().querySelector("." + c.TransformContainerCssName);
64
64
  }
65
65
  getRendererContainer() {
66
66
  return this.rendererViewport.getRendererContainer();
@@ -103,7 +103,7 @@ var E = class extends h {
103
103
  async initialize(e) {
104
104
  this.rendererViewport.applyCssVariables(), await super.initialize(e);
105
105
  let t = this.getDocuments();
106
- for (let e of t) e.getWrapperContainer().classList.add(m.FileContentContainerClassName, m.FileContentContainerHeightClassName);
106
+ for (let e of t) e.getWrapperContainer().classList.add(c.FileContentContainerClassName, c.FileContentContainerHeightClassName);
107
107
  }
108
108
  async load(e, t) {
109
109
  this.htmlOptions.documentLanguage = this.owner.context?.metadata?.language, this.isInit ||= (await this.initialize(this.getTransformContainer()), this.documentsIntersectionObserver.register(), !0), e?.storeCurrent && await this.owner.onBeforeRedirect?.(this), t ??= !1;
@@ -138,39 +138,39 @@ var E = class extends h {
138
138
  }
139
139
  async resolvePageNumber(e, t, n, r) {
140
140
  let i = await e.getNumberOfPages(), a = t.unit === "page" && t.current != null && t.current > 0;
141
- return a && t.total === i ? y(t, i) : p(n) ? e.getPageNumber(n) : a ? y(t, i) : n ? e.getPageNumber(n) : r;
141
+ return a && t.total === i ? y(t, i) : h(n) ? e.getPageNumber(n) : a ? y(t, i) : n ? e.getPageNumber(n) : r;
142
142
  }
143
143
  resolveRedirectTarget(e, t) {
144
144
  if (!e || !(t?.textOffset >= 0)) return e;
145
145
  let n = e.textContent ?? "";
146
146
  if (t.textOffset >= n.length) return e;
147
147
  let r = t.textOffset, a = e.firstElementChild;
148
- return a && i(a.tagName, "ST") && a.getBoundingClientRect().width == 0 && (r = a.textContent?.length ?? 0), r >= n.length ? e : u(e, e, r, Math.min(r + 1, n.length)) ?? e;
148
+ return a && i(a.tagName, "ST") && a.getBoundingClientRect().width == 0 && (r = a.textContent?.length ?? 0), r >= n.length ? e : f(e, e, r, Math.min(r + 1, n.length)) ?? e;
149
149
  }
150
150
  async gotoScroll(t, n, r, i) {
151
151
  if (g(this.htmlOptions).blockAxis == "x") {
152
152
  await this.gotoScrollX(t, n, r, i);
153
153
  return;
154
154
  }
155
- let a = f(r), o = d(r), s = 0;
155
+ let a = m(r), o = p(r), s = 0;
156
156
  n?.ignoreOverlayHeader || (s = this.owner.options.redirectPositionOffset, o.height == 0 && (!a || a.clientHeight == 0) && (s += 50)), n.offsetTop && (s += n.offsetTop);
157
- let c = this.getScrollElement(), u = o.y, p = t.getContentContainer().ownerDocument.defaultView?.frameElement, m = p?.getBoundingClientRect()?.y ?? 0, h = u + m, _ = c.scrollTop;
157
+ let c = this.getScrollElement(), l = o.y, u = t.getContentContainer().ownerDocument.defaultView?.frameElement, f = u?.getBoundingClientRect()?.y ?? 0, h = l + f, _ = c.scrollTop;
158
158
  if (n.useAbsoluteScrollTop) {
159
159
  let e = _ + h - s;
160
160
  c.scrollTo(0, e);
161
161
  } else if (i) this.scrollWrapperIntoView(t, !0);
162
162
  else {
163
163
  if (e.isSafari()) {
164
- l(t.getWrapperContainer(), void 0, void 0, this.owner.getRootContainer()?.ownerDocument), _ = c.scrollTop;
165
- let e = p?.offsetTop ?? 0;
166
- if (Math.abs(e + u - _) > 5) {
167
- let e = _ + t.getWrapperContainer().getBoundingClientRect().y + u;
164
+ d(t.getWrapperContainer(), void 0, void 0, this.owner.getRootContainer()?.ownerDocument), _ = c.scrollTop;
165
+ let e = u?.offsetTop ?? 0;
166
+ if (Math.abs(e + l - _) > 5) {
167
+ let e = _ + t.getWrapperContainer().getBoundingClientRect().y + l;
168
168
  c.scrollTo(0, e);
169
169
  }
170
- let n = d(r).y;
171
- m = p?.getBoundingClientRect()?.y ?? 0, h = n + m;
170
+ let n = p(r).y;
171
+ f = u?.getBoundingClientRect()?.y ?? 0, h = n + f;
172
172
  }
173
- s = h - s - c.getBoundingClientRect().top, s > 0 ? c.scrollHeight - c.scrollTop - c.clientHeight > 0 ? c.scrollBy(0, s) : a && l(a, void 0, n?.scrollIntoViewIfNeeded, this.owner.getRootContainer()?.ownerDocument) : c.scrollBy(0, s), this.setDocumentVisible(t.getWrapperContainer(), !0);
173
+ s = h - s - c.getBoundingClientRect().top, s > 0 ? c.scrollHeight - c.scrollTop - c.clientHeight > 0 ? c.scrollBy(0, s) : a && d(a, void 0, n?.scrollIntoViewIfNeeded, this.owner.getRootContainer()?.ownerDocument) : c.scrollBy(0, s), this.setDocumentVisible(t.getWrapperContainer(), !0);
174
174
  }
175
175
  }
176
176
  async gotoScrollX(e, t, n, r) {
@@ -179,17 +179,17 @@ var E = class extends h {
179
179
  this.scrollWrapperIntoView(e, !0);
180
180
  return;
181
181
  }
182
- let a = d(n), o = (e.getContentContainer().ownerDocument.defaultView?.frameElement)?.getBoundingClientRect()?.x ?? 0, s = i.getBoundingClientRect(), c = t.offsetLeft ?? 0, l = a.x + o - c, u = a.right + o - c, f = g(this.htmlOptions).getScrollLocateDelta({
182
+ let a = p(n), o = (e.getContentContainer().ownerDocument.defaultView?.frameElement)?.getBoundingClientRect()?.x ?? 0, s = i.getBoundingClientRect(), c = t.offsetLeft ?? 0, l = a.x + o - c, u = a.right + o - c, d = g(this.htmlOptions).getScrollLocateDelta({
183
183
  targetStart: l,
184
184
  viewportStart: s.left,
185
185
  targetEnd: u,
186
186
  viewportEnd: s.right
187
187
  });
188
188
  if (t.useAbsoluteScrollTop) {
189
- i.scrollTo(i.scrollLeft + f, i.scrollTop), this.setDocumentVisible(e.getWrapperContainer(), !0);
189
+ i.scrollTo(i.scrollLeft + d, i.scrollTop), this.setDocumentVisible(e.getWrapperContainer(), !0);
190
190
  return;
191
191
  }
192
- i.scrollBy(f, 0), this.setDocumentVisible(e.getWrapperContainer(), !0);
192
+ i.scrollBy(d, 0), this.setDocumentVisible(e.getWrapperContainer(), !0);
193
193
  }
194
194
  async findTarget(e, t) {
195
195
  return this.elementLocator.locateElement(e, t, this.htmlOptions);
@@ -220,21 +220,21 @@ var E = class extends h {
220
220
  resolveRelativePageTransform(e, t, n, i) {
221
221
  let a = this.getTransformContainer();
222
222
  if (!a) return null;
223
- let o = c(a, i), s = a.getAttribute("data-target-transform"), l = 0;
224
- l = s ? r(s, 0, "parseFloat") : o;
225
- let u = this.rendererViewport.getLayoutMetrics(), d = Math.max(1, u.pageMoveLength);
223
+ let o = u(a, i), s = a.getAttribute("data-target-transform"), c = 0;
224
+ c = s ? r(s, 0, "parseFloat") : o;
225
+ let l = this.rendererViewport.getLayoutMetrics(), d = Math.max(1, l.pageMoveLength);
226
226
  if (n == "previous") return {
227
227
  transformContainer: a,
228
- newTransformLength: Math.max(0, l - d)
228
+ newTransformLength: Math.max(0, c - d)
229
229
  };
230
230
  if (n == "next") {
231
- let e = l + d;
231
+ let e = c + d;
232
232
  return this.wouldExceedLastContent(e, i, a) ? null : {
233
233
  transformContainer: a,
234
234
  newTransformLength: e
235
235
  };
236
236
  }
237
- let f = this.getDocumentPageStartOffset(e, i), p = f + (t - 1) * u.pageMoveLength, m = i == "y" ? e.getWrapperContainer()?.scrollHeight ?? 0 : this.getDocumentPageBox(e).contentWidth, h = i == "y" ? u.pageHeight : u.pageWidth, g = Number.isFinite(h) && h > 0 ? h : u.pageMoveLength, _ = Math.max(0, f + m - g);
237
+ let f = this.getDocumentPageStartOffset(e, i), p = f + (t - 1) * l.pageMoveLength, m = i == "y" ? e.getWrapperContainer()?.scrollHeight ?? 0 : this.getDocumentPageBox(e).contentWidth, h = i == "y" ? l.pageHeight : l.pageWidth, g = Number.isFinite(h) && h > 0 ? h : l.pageMoveLength, _ = Math.max(0, f + m - g);
238
238
  return p > _ && (p = _), p < 0 && (p = 0), {
239
239
  transformContainer: a,
240
240
  newTransformLength: p
@@ -253,7 +253,7 @@ var E = class extends h {
253
253
  }
254
254
  syncPageNumberWhenTransformBlocked(e, t) {
255
255
  if (t != "next") return;
256
- let n = e.getContentContainer()?.ownerDocument?.documentElement, i = r(n?.getAttribute(m.HtmlDocumentNumperOfPagesPropertyName), this.getCurrentPageNumber(e), "parseInt");
256
+ let n = e.getContentContainer()?.ownerDocument?.documentElement, i = r(n?.getAttribute(c.HtmlDocumentNumperOfPagesPropertyName), this.getCurrentPageNumber(e), "parseInt");
257
257
  this.setCurrentPageNumber(e, i);
258
258
  }
259
259
  getDocumentPageStartOffset(e, t) {
@@ -274,24 +274,24 @@ var E = class extends h {
274
274
  };
275
275
  }
276
276
  applyPageTransform(e, t, n, r = "x") {
277
- let i = g(this.htmlOptions), a = parseFloat(t.toFixed(10)), o = i.getPageTranslateCss(a), s = i.getSignedTranslateLength(a), l = c(e, r, !0);
278
- e.setAttribute("data-target-transform", `${a}`), !(n && Math.abs(s - l) <= .5) && (!e.style.transition && this.htmlOptions.flipPageStyle == "slide" && (n == "next" || n == "previous") && (e.style.transition = "transform 0.2s ease"), e.style.transition && e.addEventListener("transitionend", this.removeElementTransitionEvent), e.style.transform = o);
277
+ let i = g(this.htmlOptions), a = parseFloat(t.toFixed(10)), o = i.getPageTranslateCss(a), s = i.getSignedTranslateLength(a), c = u(e, r, !0);
278
+ e.setAttribute("data-target-transform", `${a}`), !(n && Math.abs(s - c) <= .5) && (!e.style.transition && this.htmlOptions.flipPageStyle == "slide" && (n == "next" || n == "previous") && (e.style.transition = "transform 0.2s ease"), e.style.transition && e.addEventListener("transitionend", this.removeElementTransitionEvent), e.style.transform = o);
279
279
  }
280
280
  setCurrentPageNumber(e, t) {
281
281
  let n = e.getContentContainer()?.ownerDocument?.documentElement;
282
- n && n.setAttribute(m.HtmlDocumentCurrentPagePropertyName, t.toFixed(0));
282
+ n && n.setAttribute(c.HtmlDocumentCurrentPagePropertyName, t.toFixed(0));
283
283
  }
284
284
  getCurrentPageNumber(e) {
285
285
  let t = e.getContentContainer()?.ownerDocument?.documentElement;
286
286
  if (!t) return 1;
287
- let n = t.getAttribute(m.HtmlDocumentCurrentPagePropertyName);
287
+ let n = t.getAttribute(c.HtmlDocumentCurrentPagePropertyName);
288
288
  return r(n, 1, "parseInt");
289
289
  }
290
290
  async syncPageState(e) {
291
- (e.getContentContainer()?.ownerDocument?.documentElement)?.removeAttribute(m.HtmlDocumentNumperOfPagesPropertyName);
292
- let t = Math.max(1, await e.getNumberOfPages()), n = g(this.htmlOptions), i = this.rendererViewport.getLayoutMetrics(), a = Math.max(1, i.pageMoveLength), o = this.getTransformContainer(), s = r(o?.getAttribute("data-target-transform"), 0, "parseFloat"), c = this.getDocumentPageStartOffset(e, n.pageAxis), l = Math.min(t, Math.max(1, Math.round(Math.abs(s - c) / a) + 1));
293
- return this.setCurrentPageNumber(e, l), {
294
- current: l,
291
+ (e.getContentContainer()?.ownerDocument?.documentElement)?.removeAttribute(c.HtmlDocumentNumperOfPagesPropertyName);
292
+ let t = Math.max(1, await e.getNumberOfPages()), n = g(this.htmlOptions), i = this.rendererViewport.getLayoutMetrics(), a = Math.max(1, i.pageMoveLength), o = this.getTransformContainer(), s = r(o?.getAttribute("data-target-transform"), 0, "parseFloat"), l = this.getDocumentPageStartOffset(e, n.pageAxis), u = Math.min(t, Math.max(1, Math.round(Math.abs(s - l) / a) + 1));
293
+ return this.setCurrentPageNumber(e, u), {
294
+ current: u,
295
295
  total: t
296
296
  };
297
297
  }
@@ -307,7 +307,7 @@ var E = class extends h {
307
307
  e && (e.style.removeProperty("transition"), e.style.removeProperty("transform"), e.removeAttribute("data-target-transform"), e.offsetWidth);
308
308
  }
309
309
  removePageStyles() {
310
- this.getRendererContainer().classList.remove(m.TransformPagesClassName), this.clearPageTransform();
310
+ this.getRendererContainer().classList.remove(c.TransformPagesClassName), this.clearPageTransform();
311
311
  }
312
312
  async dispose() {
313
313
  await this.documentsIntersectionObserver.dispose(), await this.documentPreloader.dispose(), await super.dispose(), this.readerContainer && a(this.readerContainer), this.isInit = !1;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/common/encoding.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/common/text.cjs"),r=require("../../../../kernal/common/url.cjs"),i=require("../../../../kernal/common/path.cjs"),a=require("../../../../kernal/Constants.cjs"),o=require("../../../../kernal/html/finder.cjs"),s=require("../../../../kernal/html/injector.cjs"),c=require("../../../../kernal/html/style.cjs"),l=require("../../../../kernal/common/buffer.cjs"),u=require("../../HtmlSettings.cjs");var d=class{constructor(e){this.fileParser=e,this.childrenUrls=new Map,this.errorLinks=[],this.docBlobUrls=new Map,this.opaqueDocumentBaseUrls=[]}async preprocess(e){let t=(await e.getVirtualContentContainer())?.ownerDocument;t&&(this.format(t),this.injectBaseUrl(t,e.url),await this.resetCssHref(t,e),await this.resetScriptSrc(t,e))}format(e){let t=e.getElementsByTagName(`*`),n=!1;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.textContent.trim()||r.classList.add(`lhx-text-empty`),r.style&&(r.style.fontSize||r.style.textIndent)){let e=r.getAttribute(`style`);r.style.fontSize&&(e=c.replaceFontSize(e)),r.style.textIndent&&(e=c.removeTextIndent(e)),r.setAttribute(`style`,e)}o.compareTagName(r.tagName,`TABLE`)&&(r.style.width=`100%`,r.style.height=`auto`),n||(o.compareTagName(r.tagName,`SVG`)||r.children.length==0&&!o.compareTagName(r.parentElement.tagName,`SVG`))&&(n=!0,r.setAttribute(a.LastElementAttributeName,`true`)),r.getAttribute(`epub:type`)==`footnote`&&r.style.setProperty(`display`,`none`)}}async resetCssHref(e,r){let i=e.getElementsByTagName(`link`);for(let a=i.length-1;a>=0;a--){let o=i[a].getAttribute(`href`);if(!i[a].rel||i[a].rel.toLowerCase()!=`stylesheet`||n.isNullOrWhiteSpace(o))continue;let{href:c,cssContent:l,isHref:d}=await this.getActualCssLink(o,r);if(d&&o)i[a].href=c,i[a].setAttribute(u.HtmlSettings.LinkOriginHrefPropertyName,o);else if(l){let n=t.getRandomId(!0);s.injectCssContent(e,l,!1,n),i[a].parentElement?.removeChild(i[a])}}}async getActualCssLink(t,a){if(n.isNullOrWhiteSpace(t)||r.checkIsAbsoluteUrl(t))return{href:t,cssContent:``,isHref:!0};try{let o=await this.fileParser.getFile(t,a.url,`blob`),s=e.convertArrayBufferToString(await o.arrayBuffer()),u=s.matchAll(/url\(["']?(.*?)["']?\)/gi);for(let e of u){let o=e[1];if(this.childrenUrls.get(o))continue;let s=i.getExtension(o);if(s&&s.toLowerCase()==`.css`){if(n.isNullOrWhiteSpace(o)||r.checkIsAbsoluteUrl(o))continue;let{href:e}=await this.getActualCssLink(o,a);this.childrenUrls.set(o,e)}else{let e=r.getFullUrl(o,t);if(!n.startsWithAny(e.toString(),!0,`http://`,`https://`))continue;let i=(e.pathname+e.search).substring(1);if(this.errorLinks.indexOf(i)>=0)continue;try{let e=await this.fileParser.getFile(i,``,`blob`),t=URL.createObjectURL(e);this.childrenUrls.set(o,t)}catch(t){this.errorLinks.indexOf(i)<0&&this.errorLinks.push(i),this.logger.error(t),this.childrenUrls.set(o,e.toString())}}}let d=s.replace(/url\(["']?(.*?)["']?\)/gi,(e,t)=>r.checkIsAbsoluteUrl(t)?e:``);d=c.replaceFontSize(d),d=c.removeTextIndent(d),d=c.appendZeroTextIndentForCenterRightAlign(d);let f=e.convertStringToUint8Array(d),p=l.toBlob(f,{type:`text/css`}),m=URL.createObjectURL(p);return this.childrenUrls.set(t,m),{href:m,cssContent:d,isHref:!1}}catch(e){return this.logger.error(e),{href:t,cssContent:``,isHref:!0}}}async dispose(){this.childrenUrls.clear(),this.errorLinks&&this.errorLinks.splice(0),this.docBlobUrls.clear();for(let e of this.opaqueDocumentBaseUrls)try{URL.revokeObjectURL(e)}catch{}this.opaqueDocumentBaseUrls=[]}async resetScriptSrc(e,t){let n=t.getRoot();n||=``;let i=e.getElementsByTagName(`script`);for(let e=0;e<i.length;e++){let a=i[e].getAttribute(`src`);if(!(!a||a.startsWith(`/`))){if(!r.checkIsAbsoluteUrl(a)){let e=r.getFullUrl(a,n);r.checkIsAbsoluteUrl(n)?a=e.toString():(a=e.pathname+e.search,a=a.substring(1))}if(!r.checkIsAbsoluteUrl(a)){let o=r.getFullUrl(a,n),s=o.pathname+o.search;s=s.substring(1);let c=await this.fileParser.getFile(a,t.url,`blob`),l=URL.createObjectURL(c);i[e].src=l,i[e].setAttribute(u.HtmlSettings.LinkOriginHrefPropertyName,a)}}}}injectBaseUrl(e,t){let i=e.getElementsByTagName(`base`);for(let e=0;e<i.length;e++)if(!n.isNullOrWhiteSpace(i[e].href))return;let a=t;!n.isNullOrWhiteSpace(a)&&r.checkIsAbsoluteUrl(a)||(a=this.createOpaqueDocumentBaseUrl());let c=s.createElement(e,`base`,null,{href:a}),l=o.getDocumentHead(e);l.insertBefore(c,l.firstChild)}createOpaqueDocumentBaseUrl(){let e=URL.createObjectURL(new Blob([`<!doctype html><title></title>`],{type:`text/html`}));return this.opaqueDocumentBaseUrls.push(e),e}};exports.HtmlContentProcessor=d;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/common/encoding.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/common/text.cjs"),r=require("../../../../kernal/common/url.cjs"),i=require("../../../../kernal/common/path.cjs"),a=require("../../../../kernal/Constants.cjs"),o=require("../../../../kernal/html/finder.cjs"),s=require("../../../../kernal/html/injector.cjs"),c=require("../../HtmlSettings.cjs"),l=require("../../../../kernal/common/buffer.cjs"),u=require("../../../../kernal/html/style.cjs");var d=class{constructor(e){this.fileParser=e,this.childrenUrls=new Map,this.errorLinks=[],this.docBlobUrls=new Map,this.opaqueDocumentBaseUrls=[]}async preprocess(e){let t=(await e.getVirtualContentContainer())?.ownerDocument;t&&(this.format(t),this.injectBaseUrl(t,e.url),await this.resetCssHref(t,e),await this.resetScriptSrc(t,e))}format(e){let t=e.getElementsByTagName(`*`),n=!1;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.textContent.trim()||r.classList.add(`lhx-text-empty`),r.style&&(r.style.fontSize||r.style.textIndent)){let e=r.getAttribute(`style`);r.style.fontSize&&(e=u.replaceFontSize(e)),r.style.textIndent&&(e=u.removeTextIndent(e)),r.setAttribute(`style`,e)}o.compareTagName(r.tagName,`TABLE`)&&(r.style.width=`100%`,r.style.height=`auto`),n||(o.compareTagName(r.tagName,`SVG`)||r.children.length==0&&!o.compareTagName(r.parentElement.tagName,`SVG`))&&(n=!0,r.setAttribute(a.LastElementAttributeName,`true`)),r.getAttribute(`epub:type`)==`footnote`&&r.style.setProperty(`display`,`none`)}}async resetCssHref(e,r){let i=e.getElementsByTagName(`link`);for(let a=i.length-1;a>=0;a--){let o=i[a].getAttribute(`href`);if(!i[a].rel||i[a].rel.toLowerCase()!=`stylesheet`||n.isNullOrWhiteSpace(o))continue;let{href:l,cssContent:u,isHref:d}=await this.getActualCssLink(o,r);if(d&&o)i[a].href=l,i[a].setAttribute(c.HtmlSettings.LinkOriginHrefPropertyName,o);else if(u){let n=t.getRandomId(!0);s.injectCssContent(e,u,!1,n),i[a].parentElement?.removeChild(i[a])}}}async getActualCssLink(t,a){if(n.isNullOrWhiteSpace(t)||r.checkIsAbsoluteUrl(t))return{href:t,cssContent:``,isHref:!0};try{let o=await this.fileParser.getFile(t,a.url,`blob`),s=e.convertArrayBufferToString(await o.arrayBuffer()),c=s.matchAll(/url\(["']?(.*?)["']?\)/gi);for(let e of c){let o=e[1];if(this.childrenUrls.get(o))continue;let s=i.getExtension(o);if(s&&s.toLowerCase()==`.css`){if(n.isNullOrWhiteSpace(o)||r.checkIsAbsoluteUrl(o))continue;let{href:e}=await this.getActualCssLink(o,a);this.childrenUrls.set(o,e)}else{let e=r.getFullUrl(o,t);if(!n.startsWithAny(e.toString(),!0,`http://`,`https://`))continue;let i=(e.pathname+e.search).substring(1);if(this.errorLinks.indexOf(i)>=0)continue;try{let e=await this.fileParser.getFile(i,``,`blob`),t=URL.createObjectURL(e);this.childrenUrls.set(o,t)}catch(t){this.errorLinks.indexOf(i)<0&&this.errorLinks.push(i),this.logger.error(t),this.childrenUrls.set(o,e.toString())}}}let d=s.replace(/url\(["']?(.*?)["']?\)/gi,(e,t)=>r.checkIsAbsoluteUrl(t)?e:``);d=u.replaceFontSize(d),d=u.removeTextIndent(d),d=u.appendZeroTextIndentForCenterRightAlign(d);let f=e.convertStringToUint8Array(d),p=l.toBlob(f,{type:`text/css`}),m=URL.createObjectURL(p);return this.childrenUrls.set(t,m),{href:m,cssContent:d,isHref:!1}}catch(e){return this.logger.error(e),{href:t,cssContent:``,isHref:!0}}}async dispose(){this.childrenUrls.clear(),this.errorLinks&&this.errorLinks.splice(0),this.docBlobUrls.clear();for(let e of this.opaqueDocumentBaseUrls)try{URL.revokeObjectURL(e)}catch{}this.opaqueDocumentBaseUrls=[]}async resetScriptSrc(e,t){let n=t.getRoot();n||=``;let i=e.getElementsByTagName(`script`);for(let e=0;e<i.length;e++){let a=i[e].getAttribute(`src`);if(!(!a||a.startsWith(`/`))){if(!r.checkIsAbsoluteUrl(a)){let e=r.getFullUrl(a,n);r.checkIsAbsoluteUrl(n)?a=e.toString():(a=e.pathname+e.search,a=a.substring(1))}if(!r.checkIsAbsoluteUrl(a)){let o=r.getFullUrl(a,n),s=o.pathname+o.search;s=s.substring(1);let l=await this.fileParser.getFile(a,t.url,`blob`),u=URL.createObjectURL(l);i[e].src=u,i[e].setAttribute(c.HtmlSettings.LinkOriginHrefPropertyName,a)}}}}injectBaseUrl(e,t){let i=e.getElementsByTagName(`base`);for(let e=0;e<i.length;e++)if(!n.isNullOrWhiteSpace(i[e].href))return;let a=t;!n.isNullOrWhiteSpace(a)&&r.checkIsAbsoluteUrl(a)||(a=this.createOpaqueDocumentBaseUrl());let c=s.createElement(e,`base`,null,{href:a}),l=o.getDocumentHead(e);l.insertBefore(c,l.firstChild)}createOpaqueDocumentBaseUrl(){let e=URL.createObjectURL(new Blob([`<!doctype html><title></title>`],{type:`text/html`}));return this.opaqueDocumentBaseUrls.push(e),e}};exports.HtmlContentProcessor=d;
@@ -6,9 +6,9 @@ import { getExtension as s } from "../../../../kernal/common/path.mjs";
6
6
  import { LastElementAttributeName as c } from "../../../../kernal/Constants.mjs";
7
7
  import { compareTagName as l, getDocumentHead as u } from "../../../../kernal/html/finder.mjs";
8
8
  import { createElement as d, injectCssContent as f } from "../../../../kernal/html/injector.mjs";
9
- import { appendZeroTextIndentForCenterRightAlign as p, removeTextIndent as m, replaceFontSize as h } from "../../../../kernal/html/style.mjs";
10
- import { toBlob as g } from "../../../../kernal/common/buffer.mjs";
11
- import { HtmlSettings as _ } from "../../HtmlSettings.mjs";
9
+ import { HtmlSettings as p } from "../../HtmlSettings.mjs";
10
+ import { toBlob as m } from "../../../../kernal/common/buffer.mjs";
11
+ import { appendZeroTextIndentForCenterRightAlign as h, removeTextIndent as g, replaceFontSize as _ } from "../../../../kernal/html/style.mjs";
12
12
  //#region mediaTypes/html/renderer/html/HtmlContentProcessor.ts
13
13
  var v = class {
14
14
  constructor(e) {
@@ -24,7 +24,7 @@ var v = class {
24
24
  let r = t[e];
25
25
  if (r.textContent.trim() || r.classList.add("lhx-text-empty"), r.style && (r.style.fontSize || r.style.textIndent)) {
26
26
  let e = r.getAttribute("style");
27
- r.style.fontSize && (e = h(e)), r.style.textIndent && (e = m(e)), r.setAttribute("style", e);
27
+ r.style.fontSize && (e = _(e)), r.style.textIndent && (e = g(e)), r.setAttribute("style", e);
28
28
  }
29
29
  l(r.tagName, "TABLE") && (r.style.width = "100%", r.style.height = "auto"), n || (l(r.tagName, "SVG") || r.children.length == 0 && !l(r.parentElement.tagName, "SVG")) && (n = !0, r.setAttribute(c, "true")), r.getAttribute("epub:type") == "footnote" && r.style.setProperty("display", "none");
30
30
  }
@@ -35,7 +35,7 @@ var v = class {
35
35
  let o = i[a].getAttribute("href");
36
36
  if (!i[a].rel || i[a].rel.toLowerCase() != "stylesheet" || r(o)) continue;
37
37
  let { href: s, cssContent: c, isHref: l } = await this.getActualCssLink(o, t);
38
- if (l && o) i[a].href = s, i[a].setAttribute(_.LinkOriginHrefPropertyName, o);
38
+ if (l && o) i[a].href = s, i[a].setAttribute(p.LinkOriginHrefPropertyName, o);
39
39
  else if (c) {
40
40
  let t = n(!0);
41
41
  f(e, c, !1, t), i[a].parentElement?.removeChild(i[a]);
@@ -72,8 +72,8 @@ var v = class {
72
72
  }
73
73
  }
74
74
  let f = u.replace(/url\(["']?(.*?)["']?\)/gi, (e, t) => a(t) ? e : "");
75
- f = h(f), f = m(f), f = p(f);
76
- let _ = t(f), v = g(_, { type: "text/css" }), y = URL.createObjectURL(v);
75
+ f = _(f), f = g(f), f = h(f);
76
+ let p = t(f), v = m(p, { type: "text/css" }), y = URL.createObjectURL(v);
77
77
  return this.childrenUrls.set(n, y), {
78
78
  href: y,
79
79
  cssContent: f,
@@ -109,7 +109,7 @@ var v = class {
109
109
  let a = o(i, n), s = a.pathname + a.search;
110
110
  s = s.substring(1);
111
111
  let c = await this.fileParser.getFile(i, t.url, "blob"), l = URL.createObjectURL(c);
112
- r[e].src = l, r[e].setAttribute(_.LinkOriginHrefPropertyName, i);
112
+ r[e].src = l, r[e].setAttribute(p.LinkOriginHrefPropertyName, i);
113
113
  }
114
114
  }
115
115
  }
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/encoding.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/common/text.cjs"),i=require("../../../../kernal/common/url.cjs"),a=require("../../../../kernal/Constants.cjs"),o=require("../../../../kernal/common/number.cjs"),s=require("../../../../kernal/html/finder.cjs"),c=require("../../../../kernal/html/injector.cjs"),l=require("../../../../kernal/web/scheduler.cjs"),u=require("../../../../kernal/html/parser.cjs"),d=require("../../../../kernal/html/image.cjs"),f=require("../../HtmlSettings.cjs"),p=require("../style/ContentLayoutCssVariableNames.cjs"),m=require("./error-image.cjs"),h=require("./htmlImagePlaceholderUrl.cjs"),g=require("./htmlImageFitStyles.cjs");let _=require("perfect-debounce");var v=`lhx-svg`,y=5,b=`.${v} {max-width: var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth}) !important; width: auto !important; height: auto !important; }`,x=`*,p,div{text-align:center;margin-block:0 !important;margin-inline:auto !important;text-indent:0 !important;padding:0 !important;line-height:0 !important}`,S=e=>r.isNullOrWhiteSpace(e)?!0:h.isHtmlPlaceholderImageUrl(e),C=e=>{let t=e.querySelectorAll(`img, image`);return t.length>0?[...t]:[...e.getElementsByTagName(`img`),...e.getElementsByTagName(`image`)]},w=e=>s.compareTagName(e.tagName,`IMAGE`),T=(e,t,n=!1)=>{let r=e.style;if(!r){let r=Object.entries(t).map(([e,t])=>n?`${e}:${t} !important`:`${e}:${t}`).join(`;`);e.setAttribute(`style`,r);return}for(let[e,i]of Object.entries(t))r.setProperty(e,i,n?`important`:``)},E=class{constructor(e,t,n){this.documentsProvider=e,this.rendererViewport=t,this.htmlOptions=n,this.documentImageSizeMaps=new Map,this.blobUrls=new Map,this.isDisposed=!1,this.onDocumentDisposing=e=>{this.revokeDocumentBlobUrls(e),this.documentImageSizeMaps.delete(e)},this.onImageElementsVisible=async e=>{if(!this.isDisposed)for(let[t,n]of e.entries()){if(this.isDisposed)return;await this.loadImages(t,n)}},this.delayLoadOnImageElementsVisible=(0,_.debounce)(this.onImageElementsVisible,100),this.onLayoutChange=async()=>{await this.delayResetAllImageSize()},this.onDocumentLoad=async e=>{this.isDisposed||await this.resetImageSize(e)},this.resetAllImageSize=async()=>{if(!this.isDisposed)for(let e of this.documentsProvider.getLoadedDocuments()){if(this.isDisposed)return;await this.resetImageSize(e)}},this.delayResetAllImageSize=(0,_.debounce)(this.resetAllImageSize,100),this.events=this.documentsProvider.owner.events,this.logger=this.documentsProvider.owner.loggerFactory.getLogger(this.constructor.name),this.bindEvents()}bindEvents(){this.events.on(e.EventNames.LayoutChange,this.onLayoutChange),this.events.on(e.EventNames.DocumentLoad,this.onDocumentLoad),this.events.on(e.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.on(e.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}unbindEvents(){this.events.off(e.EventNames.LayoutChange,this.onLayoutChange),this.events.off(e.EventNames.DocumentLoad,this.onDocumentLoad),this.events.off(e.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.off(e.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}addBlobUrl(e,t){if(!i.checkIsBlobUrl(t))return;let n=this.blobUrls.get(e);if(!n){this.blobUrls.set(e,[t]);return}n.indexOf(t)<0&&n.push(t)}revokeDocumentBlobUrls(e){let t=this.blobUrls.get(e);if(t){for(let e of t)this.revokeObjectURL(e);this.blobUrls.delete(e)}}removeTrackedBlobUrl(e,t){let n=this.blobUrls.get(e);if(!n)return;let r=n.filter(e=>e!=t);if(r.length==0){this.blobUrls.delete(e);return}this.blobUrls.set(e,r)}async preprocessImages(e){let t=e,n=(await t.getVirtualContentContainer())?.ownerDocument;n&&(await this.prepareImageSize(t,n),this.setImagePreviewUrl(n),this.applyOnlyOneImageStyles(n))}setImagePreviewUrl(e){let t=C(e);for(let e of t)this.applyPreviewUrl(e,this.getImageUrl(e))}applyPreviewUrl(e,t){let n=o.parseNumber(e.getAttribute(`data-width`),0),i=o.parseNumber(e.getAttribute(`data-height`),0),a=h.createHtmlPlaceholderImageUrl(n,i),s=e.getAttribute(`data-preview-src`);if(S(s)&&(s=a,e.setAttribute(`data-preview-src`,a)),!r.isNullOrWhiteSpace(t)&&!S(t)){let n=e.getAttribute(`data-src`);(r.isNullOrWhiteSpace(n)||!S(n))&&e.setAttribute(`data-src`,t)}this.setImageSource(e,s),e.setAttribute(`data-preset-preview-url`,`true`),this.setImageStyle(e)}setImageSource(e,t){if(s.compareTagName(e.tagName,`IMG`)){e.src=t;return}if(n.BrowserCapabilities.isSafari()){e.href.baseVal=t;return}e.setAttribute(`xlink:href`,t)}setImageStyle(e){let t=e.parentElement;t&&t.children.length==1&&r.isNullOrWhiteSpace(t.innerText)&&(n.BrowserCapabilities.supportCssHas()||t.classList.add(f.HtmlSettings.BreakInsideAvoid),t.style.removeProperty(`width`),t.style.removeProperty(`height`))}async prepareImageSize(t,n){c.injectCssContent(n,b,!1,`lhx-svg-style`),this.checkIsOnlyOneImageInDocument(n)&&c.injectCssContent(n,x,!1,`only-one-image`);let i=C(n),a=this.getImageSizeMap(t),o=await this.loadImageSizes(t);if(o)for(let e of o)!r.isNullOrWhiteSpace(e.url)&&e.width>0&&a.set(e.url,e);let u=i.length>100;for(let n=0;n<i.length;n++){if(this.isDisposed)return;try{let r=i[n];r.parentElement&&s.compareTagName(r.parentElement.tagName,`SVG`)&&r.parentElement.classList.add(v);let o=this.getImageUrl(r),c=o?a.get(o):void 0;c||=await this.prefetchImageSize(t,r),c&&(this.resetImageStyles(r,c.width,c.height),this.resetInlineImageSize(r)),u&&(n%10==0||n===i.length-1)&&(this.events.emit(e.EventNames.ProcessedImageCount,{doc:t,totalImageCount:i.length,processedImageCount:n===i.length-1?i.length:n}),await l.yieldToMain())}catch(e){this.logger.error(e)}}let d=Array.from(a.values()).filter(e=>e.width>0&&!r.isNullOrWhiteSpace(e.url));if(d.length>0){if(o&&o.length>0){let e=new Set(o.map(e=>e.url)),n=d.filter(t=>!e.has(t.url));n.length>0&&await this.persistImageSizes(t,n);return}await this.persistImageSizes(t,d)}}async loadImageSizes(e){return[]}async persistImageSizes(e,t){}getImageSizeMap(e){let t=this.documentImageSizeMaps.get(e);return t||(t=new Map,this.documentImageSizeMaps.set(e,t)),t}getImageUrl(e){let t=e.getAttribute(`data-preset-preview-url`)==`true`;return w(e)?t?e.getAttribute(`data-src`)??e.getAttribute(`xlink:href`)??e.getAttribute(`href`)??``:e.getAttribute(`xlink:href`)??e.getAttribute(`href`)??``:t?e.getAttribute(`data-src`)??``:e.getAttribute(`src`)??``}async prefetchImageSize(e,t){let n=this.getImageUrl(t);if(r.isNullOrWhiteSpace(n))return;let a=t.getAttribute(`data-width`);if(a!=null){let r=o.parseNumber(a,0),i=o.parseNumber(t.getAttribute(`data-height`),0);return this.addImageDescriptor(e,n,r,i)}let s=this.getImageSizeMap(e).get(n);if(s)return s;let c=0,l=0;try{if(i.checkIsAbsoluteUrl(n)){let e=await d.getImageSize(n);c=e.width,l=e.height}else{let t=await e.fileParser.getFile(n,e.url,`blob`),r=t&&t.size>0?t:m.default;try{let e=await d.getImageSize(r);c=e.width,l=e.height}catch{}}}catch(e){this.logger.error(e)}return this.addImageDescriptor(e,n,c,l)}revokeObjectURL(e,t){if(i.checkIsBlobUrl(e)){try{URL.revokeObjectURL(e)}catch{}t&&this.removeTrackedBlobUrl(t,e)}}addImageDescriptor(e,t,n,r){let i=this.getImageSizeMap(e),a=i.get(t)??{url:t,width:n,height:r};return a.url=t,a.width=n,a.height=r,i.set(t,a),a}setWidthAndHeight(e,t,n){t>0&&n>0&&o.parseNumber(e.getAttribute(`data-width`),0,`parseInt`)<=0&&(e.setAttribute(`data-width`,`${t}`),e.setAttribute(`data-height`,`${n}`))}getColumnMetrics(){let e=this.rendererViewport.getLayoutMetrics();return{columnWidth:e.columnWidth,columnHeight:e.columnHeight}}resetImageStyles(e,t,r){if(t<=0||r<=0||!n.BrowserCapabilities.supportCssAspectRatio())return;this.setWidthAndHeight(e,t,r);let i=w(e)?e.parentElement:e;i&&(i.setAttribute(`width`,`${t}`),i.setAttribute(`height`,`${r}`),T(i,g.getImageFitStyles(t,r)))}resetImageWidthHeight(e,t,n){T(e,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,"max-height":`var(${p.ContentLayoutCssVariableNames.ColumnBoxHeight})`},!0),this.resetImageHeight(e,t,n,this.htmlOptions.maxImageHeightRatio)}async resetImageSize(e){let t=e.getContentContainer()?.ownerDocument;if(!t||!s.getDocumentBody(t))return;let{columnWidth:r,columnHeight:i}=this.getColumnMetrics(),a=this.getOnlyImageInDocument(t);if(a){this.handleOnlyOneImageInDocument(r,i,a),await this.loadSingleImage(e,a);return}let o=C(t);if(!n.BrowserCapabilities.supportCssAspectRatio())for(let e of o){if(this.isDisposed)return;this.resetImageWidthHeight(e,r,i),await l.yieldToMain()}for(let t=0;t<Math.min(y,o.length);t++){if(this.isDisposed)return;await this.loadSingleImage(e,o[t])}}resetInlineImageSize(e){let t=o.parseNumber(e.getAttribute(`data-width`),0),n=o.parseNumber(e.getAttribute(`data-height`),0);if(t<=0||n<=0||n>200&&!(e.previousSibling?.nodeType==Node.TEXT_NODE&&(e.previousSibling.textContent?.trim()?.length??0)>0||e.nextSibling?.nodeType==Node.TEXT_NODE&&(e.nextSibling.textContent?.trim()?.length??0)>0)||!this.isInlineImage(e))return;let r=s.compareTagName(e.tagName,`IMG`)?e:e.parentElement;r&&(T(e,{width:`auto`,"max-width":`100%`,height:`1em`,"margin-block-start":`0`,"margin-block-end":`0`},!0),r.style.setProperty(`vertical-align`,`-0.2em`,`important`),r.setAttribute(`data-inline-image`,`true`))}applyOnlyOneImageStyles(e){let t=this.getOnlyImageInDocument(e);if(!t)return;let{columnWidth:n,columnHeight:r}=this.getColumnMetrics();this.handleOnlyOneImageInDocument(n,r,t)}handleOnlyOneImageInDocument(e,t,n){let r=n.ownerDocument,i=s.getDocumentBody(r);if(!i)return;c.injectCssContent(r,x,!1,`only-one-image`),i.setAttribute(`data-handled-one-image`,`true`),T(i,{display:`flex`,height:`100%`,"justify-content":`center`,"align-items":`center`},!0),this.clearPercentageSizeAttributes(n);let a=n;s.compareTagName(n.parentElement?.tagName,`SVG`)&&(a=n.parentElement,this.clearPercentageSizeAttributes(a),T(n,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,"max-height":t+`px`,display:`block`},!0)),T(a,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,display:`block`},!0),a.parentElement&&(a.parentElement.style.textAlign=`center`),this.resetImageHeight(n,e,t,.95,!0)}clearPercentageSizeAttributes(e){for(let t of[`width`,`height`]){let n=e.getAttribute(t);n&&n.includes(`%`)&&e.removeAttribute(t)}}resetImageHeight(e,t,n,r,i){let a=w(e)?e.parentElement:e;if(!a)return;let{width:o,height:s}=this.getImageIntrinsicSize(e);o<=0||s<=0||(this.setWidthAndHeight(e,o,s),this.forceSetImageHeight(a,t,n,o,s,r,i))}forceSetImageHeight(e,t,r,i,a,o,s){if(n.BrowserCapabilities.supportCssMinMaxFunction()){let t=g.getImageHeightRatioExpr(o,s);e.style.setProperty(`height`,g.getImageForcedHeightCss(i,a,t),`important`);return}let c=this.calcImageHeight(t,r,i,a)*o;e.style.setProperty(`height`,c+`px`,`important`)}calcImageHeight(e,t,n,r){return t>=r&&e>=n?r:e/t<=n/r?e/n*r:t}getImageIntrinsicSize(e){let t=o.parseNumber(e.getAttribute(`data-width`),0),n=o.parseNumber(e.getAttribute(`data-height`),0);if(t>0&&n>0)return{width:t,height:n};if(!w(e)){let t=e;if(t.naturalWidth>0&&t.naturalHeight>0)return{width:t.naturalWidth,height:t.naturalHeight}}return{width:0,height:0}}hasNonImageText(e){let t=e.ownerDocument;if(!t)return!!e.textContent?.trim();let n=t.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=n.nextNode();for(;r;){if(r.textContent?.trim())return!0;r=n.nextNode()}return!1}getOnlyImageInDocument(e){let t=s.getDocumentBody(e);if(!t)return;let n=C(t);if(n.length==1&&!(!t.classList.contains(`lhx-text-empty`)&&this.hasNonImageText(t)))return n[0]}checkIsOnlyOneImageInDocument(e){return!!this.getOnlyImageInDocument(e)}checkIsInlineTag(e){let t=e.nodeName;if(r.isNullOrWhiteSpace(t))return!1;let n=t.toLowerCase();return n==`img`||n==`image`||this.htmlOptions.htmlInlineTags.indexOf(n)>=0}isInlineImage(e){if(this.hasInlineSiblings(e))return!0;let t=e.parentElement,n=e;for(;t&&!s.compareTagName(t.tagName,`BODY`);){if(t.children.length>1||t.children.length==1&&t.textContent.trim().length>0)return this.hasInlineSiblings(n);n=t,t=t.parentElement}return!1}findSiblingNodes(e){let t=e.previousSibling,n=e.nextSibling;for(;t!=null&&!(!r.isNullOrWhiteSpace(t.textContent)||t.nodeType==Node.ELEMENT_NODE);)t=t.previousSibling;for(;n!=null&&!(!r.isNullOrWhiteSpace(n.textContent)||n.nodeType==Node.ELEMENT_NODE);)n=n.nextSibling;return{previousSiblingNode:t,nextSiblingNode:n}}hasInlineSiblings(e){let{previousSiblingNode:t,nextSiblingNode:n}=this.findSiblingNodes(e);return!t&&!n?!1:t?.nodeType==Node.TEXT_NODE&&!r.isNullOrWhiteSpace(t.nodeValue)||n?.nodeType==Node.TEXT_NODE&&!r.isNullOrWhiteSpace(n.nodeValue)||t&&this.checkIsInlineTag(t)||n&&this.checkIsInlineTag(n)}async loadImages(e,t){let n=e;if(!(!n||!t?.length))for(let r of t){if(this.isDisposed||!r)return;let t=r.ownerDocument.defaultView;if(!t)continue;if(r instanceof t.window.HTMLImageElement||r instanceof t.window.SVGImageElement){let e=this.queryOriginElement(r.ownerDocument,r);e&&await this.loadSingleImage(n,e);continue}let i=r.getElementsByTagName(`img`);for(let e=0;e<i.length;e++)await this.loadSingleImage(n,i[e]);let a=this.queryOriginElement(e.getContentContainer(),r)??r,o=a==r?r.getElementsByTagName(`image`):a.getElementsByTagName(`image`);for(let e=0;e<o.length;e++)await this.loadSingleImage(n,o[e])}}queryOriginElement(e,t){let n=t.getAttribute(a.ElementInitialNumberName);return!e||r.isNullOrWhiteSpace(n)?t:e.querySelector(`[data-initial-index='${n}']`)??t}async loadSingleImage(e,t){if(!t||!e||this.isDisposed)return;let n=t.getAttribute(`data-load-state`);if(n==`loaded`||n==`loading`||n==`fail`)return;let i=this.getImageUrl(t);if(r.isNullOrWhiteSpace(i)){t.setAttribute(`data-load-state`,`fail`);return}t.setAttribute(`data-load-state`,`loading`),t.onload=()=>{t.setAttribute(`data-load-state`,`loaded`),this.applyOnlyOneImageStyles(t.ownerDocument)},t.onerror=()=>{t.setAttribute(`data-load-state`,`fail`)};let a=await this.resolveLoadUrl(e,i,t);if(this.isDisposed){this.revokeObjectURL(a,e);return}if(s.compareTagName(t.tagName,`IMG`)){let n=t;if(n.src=a,!await this.waitForImageReady(n)){this.revokeObjectURL(a,e),this.retryLoadAfterDecodeFailure(e,n,i);return}this.applyOnlyOneImageStyles(t.ownerDocument);return}this.setImageSource(t,a),this.applyOnlyOneImageStyles(t.ownerDocument)}waitForImageReady(e){return e.complete?Promise.resolve(this.isImageUsable(e)):new Promise(t=>{let n=!1,r=r=>{n||(n=!0,e.removeEventListener(`load`,i),e.removeEventListener(`error`,a),t(r))},i=()=>r(!0),a=()=>r(this.isImageUsable(e));e.addEventListener(`load`,i),e.addEventListener(`error`,a),typeof e.decode==`function`&&e.decode().then(()=>r(!0)).catch(()=>{this.isImageUsable(e)&&r(!0)})})}isImageUsable(e){return e.complete&&e.naturalWidth>0}retryLoadAfterDecodeFailure(e,t,n){setTimeout(async()=>{if(!this.isDisposed)try{let r=await e.fileParser.getFile(n,e.url,`blob`);if(this.isDisposed)return;if(r&&r.size>0){let n=URL.createObjectURL(r);this.addBlobUrl(e,n),t.src=n}else t.src=m.default}catch(e){this.logger.error(e),this.isDisposed||(t.src=m.default)}},500)}async resolveLoadUrl(e,t,n){if(i.checkIsAbsoluteUrl(t))return t;let r=await e.fileParser.getFile(t,e.url,`blob`);if(!r||r.size<=0)return m.default;if(r.type?.toLowerCase()==`image/svg+xml`)return await this.resolveSvgBlobUrl(e,r,n);let a=URL.createObjectURL(r);return this.addBlobUrl(e,a),a}async resolveSvgBlobUrl(e,n,a){let o=t.convertArrayBufferToString(await n.arrayBuffer()),s=u.getFormatDocument(o).querySelector(`image`);if(!s)return`data:image/svg+xml,`+encodeURIComponent(o);let c=s.getAttribute(`xlink:href`)??s.getAttribute(`href`)??``;if(r.isNullOrWhiteSpace(c))return`data:image/svg+xml,`+encodeURIComponent(o);let l=c,f=c;if(!i.checkIsAbsoluteUrl(c)){let t=await e.fileParser.getFile(c,e.url,`blob`);if(!t||t.size<=0)return m.default;f=URL.createObjectURL(t),this.addBlobUrl(e,f),l=t}try{let e=await d.getImageSize(l);a.setAttribute(`data-width`,e.width.toString()),a.setAttribute(`data-height`,e.height.toString());let{columnWidth:t,columnHeight:n}=this.getColumnMetrics();this.forceSetImageHeight(a,t,n,e.width,e.height,this.htmlOptions.maxImageHeightRatio)}catch(e){this.logger.error(e)}return f}async dispose(){this.isDisposed=!0,this.delayLoadOnImageElementsVisible.cancel(),this.delayResetAllImageSize.cancel(),this.unbindEvents(),this.documentImageSizeMaps.clear();for(let e of[...this.blobUrls.keys()])this.revokeDocumentBlobUrls(e);this.blobUrls.clear()}};exports.HtmlImageLoader=E;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/encoding.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/common/text.cjs"),i=require("../../../../kernal/common/url.cjs"),a=require("../../../../kernal/Constants.cjs"),o=require("../../../../kernal/common/number.cjs"),s=require("../../../../kernal/html/finder.cjs"),c=require("../../../../kernal/html/injector.cjs"),l=require("../../../../kernal/web/scheduler.cjs"),u=require("../../HtmlSettings.cjs"),d=require("../../../../kernal/html/parser.cjs"),f=require("../../../../kernal/html/image.cjs"),p=require("../style/ContentLayoutCssVariableNames.cjs"),m=require("./error-image.cjs"),h=require("./htmlImagePlaceholderUrl.cjs"),g=require("./htmlImageFitStyles.cjs");let _=require("perfect-debounce");var v=`lhx-svg`,y=5,b=`.${v} {max-width: var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth}) !important; width: auto !important; height: auto !important; }`,x=`*,p,div{text-align:center;margin-block:0 !important;margin-inline:auto !important;text-indent:0 !important;padding:0 !important;line-height:0 !important}`,S=e=>r.isNullOrWhiteSpace(e)?!0:h.isHtmlPlaceholderImageUrl(e),C=e=>{let t=e.querySelectorAll(`img, image`);return t.length>0?[...t]:[...e.getElementsByTagName(`img`),...e.getElementsByTagName(`image`)]},w=e=>s.compareTagName(e.tagName,`IMAGE`),T=(e,t,n=!1)=>{let r=e.style;if(!r){let r=Object.entries(t).map(([e,t])=>n?`${e}:${t} !important`:`${e}:${t}`).join(`;`);e.setAttribute(`style`,r);return}for(let[e,i]of Object.entries(t))r.setProperty(e,i,n?`important`:``)},E=class{constructor(e,t,n){this.documentsProvider=e,this.rendererViewport=t,this.htmlOptions=n,this.documentImageSizeMaps=new Map,this.blobUrls=new Map,this.isDisposed=!1,this.onDocumentDisposing=e=>{this.revokeDocumentBlobUrls(e),this.documentImageSizeMaps.delete(e)},this.onImageElementsVisible=async e=>{if(!this.isDisposed)for(let[t,n]of e.entries()){if(this.isDisposed)return;await this.loadImages(t,n)}},this.delayLoadOnImageElementsVisible=(0,_.debounce)(this.onImageElementsVisible,100),this.onLayoutChange=async()=>{await this.delayResetAllImageSize()},this.onDocumentLoad=async e=>{this.isDisposed||await this.resetImageSize(e)},this.resetAllImageSize=async()=>{if(!this.isDisposed)for(let e of this.documentsProvider.getLoadedDocuments()){if(this.isDisposed)return;await this.resetImageSize(e)}},this.delayResetAllImageSize=(0,_.debounce)(this.resetAllImageSize,100),this.events=this.documentsProvider.owner.events,this.logger=this.documentsProvider.owner.loggerFactory.getLogger(this.constructor.name),this.bindEvents()}bindEvents(){this.events.on(e.EventNames.LayoutChange,this.onLayoutChange),this.events.on(e.EventNames.DocumentLoad,this.onDocumentLoad),this.events.on(e.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.on(e.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}unbindEvents(){this.events.off(e.EventNames.LayoutChange,this.onLayoutChange),this.events.off(e.EventNames.DocumentLoad,this.onDocumentLoad),this.events.off(e.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.off(e.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}addBlobUrl(e,t){if(!i.checkIsBlobUrl(t))return;let n=this.blobUrls.get(e);if(!n){this.blobUrls.set(e,[t]);return}n.indexOf(t)<0&&n.push(t)}revokeDocumentBlobUrls(e){let t=this.blobUrls.get(e);if(t){for(let e of t)this.revokeObjectURL(e);this.blobUrls.delete(e)}}removeTrackedBlobUrl(e,t){let n=this.blobUrls.get(e);if(!n)return;let r=n.filter(e=>e!=t);if(r.length==0){this.blobUrls.delete(e);return}this.blobUrls.set(e,r)}async preprocessImages(e){let t=e,n=(await t.getVirtualContentContainer())?.ownerDocument;n&&(await this.prepareImageSize(t,n),this.setImagePreviewUrl(n),this.applyOnlyOneImageStyles(n))}setImagePreviewUrl(e){let t=C(e);for(let e of t)this.applyPreviewUrl(e,this.getImageUrl(e))}applyPreviewUrl(e,t){let n=o.parseNumber(e.getAttribute(`data-width`),0),i=o.parseNumber(e.getAttribute(`data-height`),0),a=h.createHtmlPlaceholderImageUrl(n,i),s=e.getAttribute(`data-preview-src`);if(S(s)&&(s=a,e.setAttribute(`data-preview-src`,a)),!r.isNullOrWhiteSpace(t)&&!S(t)){let n=e.getAttribute(`data-src`);(r.isNullOrWhiteSpace(n)||!S(n))&&e.setAttribute(`data-src`,t)}this.setImageSource(e,s),e.setAttribute(`data-preset-preview-url`,`true`),this.setImageStyle(e)}setImageSource(e,t){if(s.compareTagName(e.tagName,`IMG`)){e.src=t;return}if(n.BrowserCapabilities.isSafari()){e.href.baseVal=t;return}e.setAttribute(`xlink:href`,t)}setImageStyle(e){let t=e.parentElement;t&&t.children.length==1&&r.isNullOrWhiteSpace(t.innerText)&&(n.BrowserCapabilities.supportCssHas()||t.classList.add(u.HtmlSettings.BreakInsideAvoid),t.style.removeProperty(`width`),t.style.removeProperty(`height`))}async prepareImageSize(t,n){c.injectCssContent(n,b,!1,`lhx-svg-style`),this.checkIsOnlyOneImageInDocument(n)&&c.injectCssContent(n,x,!1,`only-one-image`);let i=C(n),a=this.getImageSizeMap(t),o=await this.loadImageSizes(t);if(o)for(let e of o)!r.isNullOrWhiteSpace(e.url)&&e.width>0&&a.set(e.url,e);let u=i.length>100;for(let n=0;n<i.length;n++){if(this.isDisposed)return;try{let r=i[n];r.parentElement&&s.compareTagName(r.parentElement.tagName,`SVG`)&&r.parentElement.classList.add(v);let o=this.getImageUrl(r),c=o?a.get(o):void 0;c||=await this.prefetchImageSize(t,r),c&&(this.resetImageStyles(r,c.width,c.height),this.resetInlineImageSize(r)),u&&(n%10==0||n===i.length-1)&&(this.events.emit(e.EventNames.ProcessedImageCount,{doc:t,totalImageCount:i.length,processedImageCount:n===i.length-1?i.length:n}),await l.yieldToMain())}catch(e){this.logger.error(e)}}let d=Array.from(a.values()).filter(e=>e.width>0&&!r.isNullOrWhiteSpace(e.url));if(d.length>0){if(o&&o.length>0){let e=new Set(o.map(e=>e.url)),n=d.filter(t=>!e.has(t.url));n.length>0&&await this.persistImageSizes(t,n);return}await this.persistImageSizes(t,d)}}async loadImageSizes(e){return[]}async persistImageSizes(e,t){}getImageSizeMap(e){let t=this.documentImageSizeMaps.get(e);return t||(t=new Map,this.documentImageSizeMaps.set(e,t)),t}getImageUrl(e){let t=e.getAttribute(`data-preset-preview-url`)==`true`;return w(e)?t?e.getAttribute(`data-src`)??e.getAttribute(`xlink:href`)??e.getAttribute(`href`)??``:e.getAttribute(`xlink:href`)??e.getAttribute(`href`)??``:t?e.getAttribute(`data-src`)??``:e.getAttribute(`src`)??``}async prefetchImageSize(e,t){let n=this.getImageUrl(t);if(r.isNullOrWhiteSpace(n))return;let a=t.getAttribute(`data-width`);if(a!=null){let r=o.parseNumber(a,0),i=o.parseNumber(t.getAttribute(`data-height`),0);return this.addImageDescriptor(e,n,r,i)}let s=this.getImageSizeMap(e).get(n);if(s)return s;let c=0,l=0;try{if(i.checkIsAbsoluteUrl(n)){let e=await f.getImageSize(n);c=e.width,l=e.height}else{let t=await e.fileParser.getFile(n,e.url,`blob`),r=t&&t.size>0?t:m.default;try{let e=await f.getImageSize(r);c=e.width,l=e.height}catch{}}}catch(e){this.logger.error(e)}return this.addImageDescriptor(e,n,c,l)}revokeObjectURL(e,t){if(i.checkIsBlobUrl(e)){try{URL.revokeObjectURL(e)}catch{}t&&this.removeTrackedBlobUrl(t,e)}}addImageDescriptor(e,t,n,r){let i=this.getImageSizeMap(e),a=i.get(t)??{url:t,width:n,height:r};return a.url=t,a.width=n,a.height=r,i.set(t,a),a}setWidthAndHeight(e,t,n){t>0&&n>0&&o.parseNumber(e.getAttribute(`data-width`),0,`parseInt`)<=0&&(e.setAttribute(`data-width`,`${t}`),e.setAttribute(`data-height`,`${n}`))}getColumnMetrics(){let e=this.rendererViewport.getLayoutMetrics();return{columnWidth:e.columnWidth,columnHeight:e.columnHeight}}resetImageStyles(e,t,r){if(t<=0||r<=0||!n.BrowserCapabilities.supportCssAspectRatio())return;this.setWidthAndHeight(e,t,r);let i=w(e)?e.parentElement:e;i&&(i.setAttribute(`width`,`${t}`),i.setAttribute(`height`,`${r}`),T(i,g.getImageFitStyles(t,r)))}resetImageWidthHeight(e,t,n){T(e,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,"max-height":`var(${p.ContentLayoutCssVariableNames.ColumnBoxHeight})`},!0),this.resetImageHeight(e,t,n,this.htmlOptions.maxImageHeightRatio)}async resetImageSize(e){let t=e.getContentContainer()?.ownerDocument;if(!t||!s.getDocumentBody(t))return;let{columnWidth:r,columnHeight:i}=this.getColumnMetrics(),a=this.getOnlyImageInDocument(t);if(a){this.handleOnlyOneImageInDocument(r,i,a),await this.loadSingleImage(e,a);return}let o=C(t);if(!n.BrowserCapabilities.supportCssAspectRatio())for(let e of o){if(this.isDisposed)return;this.resetImageWidthHeight(e,r,i),await l.yieldToMain()}for(let t=0;t<Math.min(y,o.length);t++){if(this.isDisposed)return;await this.loadSingleImage(e,o[t])}}resetInlineImageSize(e){let t=o.parseNumber(e.getAttribute(`data-width`),0),n=o.parseNumber(e.getAttribute(`data-height`),0);if(t<=0||n<=0||n>200&&!(e.previousSibling?.nodeType==Node.TEXT_NODE&&(e.previousSibling.textContent?.trim()?.length??0)>0||e.nextSibling?.nodeType==Node.TEXT_NODE&&(e.nextSibling.textContent?.trim()?.length??0)>0)||!this.isInlineImage(e))return;let r=s.compareTagName(e.tagName,`IMG`)?e:e.parentElement;r&&(T(e,{width:`auto`,"max-width":`100%`,height:`1em`,"margin-block-start":`0`,"margin-block-end":`0`},!0),r.style.setProperty(`vertical-align`,`-0.2em`,`important`),r.setAttribute(`data-inline-image`,`true`))}applyOnlyOneImageStyles(e){let t=this.getOnlyImageInDocument(e);if(!t)return;let{columnWidth:n,columnHeight:r}=this.getColumnMetrics();this.handleOnlyOneImageInDocument(n,r,t)}handleOnlyOneImageInDocument(e,t,n){let r=n.ownerDocument,i=s.getDocumentBody(r);if(!i)return;c.injectCssContent(r,x,!1,`only-one-image`),i.setAttribute(`data-handled-one-image`,`true`),T(i,{display:`flex`,height:`100%`,"justify-content":`center`,"align-items":`center`},!0),this.clearPercentageSizeAttributes(n);let a=n;s.compareTagName(n.parentElement?.tagName,`SVG`)&&(a=n.parentElement,this.clearPercentageSizeAttributes(a),T(n,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,"max-height":t+`px`,display:`block`},!0)),T(a,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,display:`block`},!0),a.parentElement&&(a.parentElement.style.textAlign=`center`),this.resetImageHeight(n,e,t,.95,!0)}clearPercentageSizeAttributes(e){for(let t of[`width`,`height`]){let n=e.getAttribute(t);n&&n.includes(`%`)&&e.removeAttribute(t)}}resetImageHeight(e,t,n,r,i){let a=w(e)?e.parentElement:e;if(!a)return;let{width:o,height:s}=this.getImageIntrinsicSize(e);o<=0||s<=0||(this.setWidthAndHeight(e,o,s),this.forceSetImageHeight(a,t,n,o,s,r,i))}forceSetImageHeight(e,t,r,i,a,o,s){if(n.BrowserCapabilities.supportCssMinMaxFunction()){let t=g.getImageHeightRatioExpr(o,s);e.style.setProperty(`height`,g.getImageForcedHeightCss(i,a,t),`important`);return}let c=this.calcImageHeight(t,r,i,a)*o;e.style.setProperty(`height`,c+`px`,`important`)}calcImageHeight(e,t,n,r){return t>=r&&e>=n?r:e/t<=n/r?e/n*r:t}getImageIntrinsicSize(e){let t=o.parseNumber(e.getAttribute(`data-width`),0),n=o.parseNumber(e.getAttribute(`data-height`),0);if(t>0&&n>0)return{width:t,height:n};if(!w(e)){let t=e;if(t.naturalWidth>0&&t.naturalHeight>0)return{width:t.naturalWidth,height:t.naturalHeight}}return{width:0,height:0}}hasNonImageText(e){let t=e.ownerDocument;if(!t)return!!e.textContent?.trim();let n=t.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=n.nextNode();for(;r;){if(r.textContent?.trim())return!0;r=n.nextNode()}return!1}getOnlyImageInDocument(e){let t=s.getDocumentBody(e);if(!t)return;let n=C(t);if(n.length==1&&!(!t.classList.contains(`lhx-text-empty`)&&this.hasNonImageText(t)))return n[0]}checkIsOnlyOneImageInDocument(e){return!!this.getOnlyImageInDocument(e)}checkIsInlineTag(e){let t=e.nodeName;if(r.isNullOrWhiteSpace(t))return!1;let n=t.toLowerCase();return n==`img`||n==`image`||this.htmlOptions.htmlInlineTags.indexOf(n)>=0}isInlineImage(e){if(this.hasInlineSiblings(e))return!0;let t=e.parentElement,n=e;for(;t&&!s.compareTagName(t.tagName,`BODY`);){if(t.children.length>1||t.children.length==1&&t.textContent.trim().length>0)return this.hasInlineSiblings(n);n=t,t=t.parentElement}return!1}findSiblingNodes(e){let t=e.previousSibling,n=e.nextSibling;for(;t!=null&&!(!r.isNullOrWhiteSpace(t.textContent)||t.nodeType==Node.ELEMENT_NODE);)t=t.previousSibling;for(;n!=null&&!(!r.isNullOrWhiteSpace(n.textContent)||n.nodeType==Node.ELEMENT_NODE);)n=n.nextSibling;return{previousSiblingNode:t,nextSiblingNode:n}}hasInlineSiblings(e){let{previousSiblingNode:t,nextSiblingNode:n}=this.findSiblingNodes(e);return!t&&!n?!1:t?.nodeType==Node.TEXT_NODE&&!r.isNullOrWhiteSpace(t.nodeValue)||n?.nodeType==Node.TEXT_NODE&&!r.isNullOrWhiteSpace(n.nodeValue)||t&&this.checkIsInlineTag(t)||n&&this.checkIsInlineTag(n)}async loadImages(e,t){let n=e;if(!(!n||!t?.length))for(let r of t){if(this.isDisposed||!r)return;let t=r.ownerDocument.defaultView;if(!t)continue;if(r instanceof t.window.HTMLImageElement||r instanceof t.window.SVGImageElement){let e=this.queryOriginElement(r.ownerDocument,r);e&&await this.loadSingleImage(n,e);continue}let i=r.getElementsByTagName(`img`);for(let e=0;e<i.length;e++)await this.loadSingleImage(n,i[e]);let a=this.queryOriginElement(e.getContentContainer(),r)??r,o=a==r?r.getElementsByTagName(`image`):a.getElementsByTagName(`image`);for(let e=0;e<o.length;e++)await this.loadSingleImage(n,o[e])}}queryOriginElement(e,t){let n=t.getAttribute(a.ElementInitialNumberName);return!e||r.isNullOrWhiteSpace(n)?t:e.querySelector(`[data-initial-index='${n}']`)??t}async loadSingleImage(e,t){if(!t||!e||this.isDisposed)return;let n=t.getAttribute(`data-load-state`);if(n==`loaded`||n==`loading`||n==`fail`)return;let i=this.getImageUrl(t);if(r.isNullOrWhiteSpace(i)){t.setAttribute(`data-load-state`,`fail`);return}t.setAttribute(`data-load-state`,`loading`),t.onload=()=>{t.setAttribute(`data-load-state`,`loaded`),this.applyOnlyOneImageStyles(t.ownerDocument)},t.onerror=()=>{t.setAttribute(`data-load-state`,`fail`)};let a=await this.resolveLoadUrl(e,i,t);if(this.isDisposed){this.revokeObjectURL(a,e);return}if(s.compareTagName(t.tagName,`IMG`)){let n=t;if(n.src=a,!await this.waitForImageReady(n)){this.revokeObjectURL(a,e),this.retryLoadAfterDecodeFailure(e,n,i);return}this.applyOnlyOneImageStyles(t.ownerDocument);return}this.setImageSource(t,a),this.applyOnlyOneImageStyles(t.ownerDocument)}waitForImageReady(e){return e.complete?Promise.resolve(this.isImageUsable(e)):new Promise(t=>{let n=!1,r=r=>{n||(n=!0,e.removeEventListener(`load`,i),e.removeEventListener(`error`,a),t(r))},i=()=>r(!0),a=()=>r(this.isImageUsable(e));e.addEventListener(`load`,i),e.addEventListener(`error`,a),typeof e.decode==`function`&&e.decode().then(()=>r(!0)).catch(()=>{this.isImageUsable(e)&&r(!0)})})}isImageUsable(e){return e.complete&&e.naturalWidth>0}retryLoadAfterDecodeFailure(e,t,n){setTimeout(async()=>{if(!this.isDisposed)try{let r=await e.fileParser.getFile(n,e.url,`blob`);if(this.isDisposed)return;if(r&&r.size>0){let n=URL.createObjectURL(r);this.addBlobUrl(e,n),t.src=n}else t.src=m.default}catch(e){this.logger.error(e),this.isDisposed||(t.src=m.default)}},500)}async resolveLoadUrl(e,t,n){if(i.checkIsAbsoluteUrl(t))return t;let r=await e.fileParser.getFile(t,e.url,`blob`);if(!r||r.size<=0)return m.default;if(r.type?.toLowerCase()==`image/svg+xml`)return await this.resolveSvgBlobUrl(e,r,n);let a=URL.createObjectURL(r);return this.addBlobUrl(e,a),a}async resolveSvgBlobUrl(e,n,a){let o=t.convertArrayBufferToString(await n.arrayBuffer()),s=d.getFormatDocument(o).querySelector(`image`);if(!s)return`data:image/svg+xml,`+encodeURIComponent(o);let c=s.getAttribute(`xlink:href`)??s.getAttribute(`href`)??``;if(r.isNullOrWhiteSpace(c))return`data:image/svg+xml,`+encodeURIComponent(o);let l=c,u=c;if(!i.checkIsAbsoluteUrl(c)){let t=await e.fileParser.getFile(c,e.url,`blob`);if(!t||t.size<=0)return m.default;u=URL.createObjectURL(t),this.addBlobUrl(e,u),l=t}try{let e=await f.getImageSize(l);a.setAttribute(`data-width`,e.width.toString()),a.setAttribute(`data-height`,e.height.toString());let{columnWidth:t,columnHeight:n}=this.getColumnMetrics();this.forceSetImageHeight(a,t,n,e.width,e.height,this.htmlOptions.maxImageHeightRatio)}catch(e){this.logger.error(e)}return u}async dispose(){this.isDisposed=!0,this.delayLoadOnImageElementsVisible.cancel(),this.delayResetAllImageSize.cancel(),this.unbindEvents(),this.documentImageSizeMaps.clear();for(let e of[...this.blobUrls.keys()])this.revokeDocumentBlobUrls(e);this.blobUrls.clear()}};exports.HtmlImageLoader=E;
@@ -9,9 +9,9 @@ import { compareTagName as c, getDocumentBody as l } from "../../../../kernal/ht
9
9
  import { injectCssContent as u } from "../../../../kernal/html/injector.mjs";
10
10
  import { yieldToMain as d } from "../../../../kernal/web/scheduler.mjs";
11
11
  import { asyncDebounce as f } from "../../../../kernal/web/debounce.mjs";
12
- import { getFormatDocument as p } from "../../../../kernal/html/parser.mjs";
13
- import { getImageSize as m } from "../../../../kernal/html/image.mjs";
14
- import { HtmlSettings as h } from "../../HtmlSettings.mjs";
12
+ import { HtmlSettings as p } from "../../HtmlSettings.mjs";
13
+ import { getFormatDocument as m } from "../../../../kernal/html/parser.mjs";
14
+ import { getImageSize as h } from "../../../../kernal/html/image.mjs";
15
15
  import { ContentLayoutCssVariableNames as g } from "../style/ContentLayoutCssVariableNames.mjs";
16
16
  import _ from "./error-image.mjs";
17
17
  import { createHtmlPlaceholderImageUrl as v, isHtmlPlaceholderImageUrl as y } from "./htmlImagePlaceholderUrl.mjs";
@@ -109,7 +109,7 @@ var C = "lhx-svg", w = 5, T = `.${C} {max-width: var(${g.ColumnBoxWidth}) !impor
109
109
  }
110
110
  setImageStyle(e) {
111
111
  let t = e.parentElement;
112
- t && t.children.length == 1 && r(t.innerText) && (n.supportCssHas() || t.classList.add(h.BreakInsideAvoid), t.style.removeProperty("width"), t.style.removeProperty("height"));
112
+ t && t.children.length == 1 && r(t.innerText) && (n.supportCssHas() || t.classList.add(p.BreakInsideAvoid), t.style.removeProperty("width"), t.style.removeProperty("height"));
113
113
  }
114
114
  async prepareImageSize(t, n) {
115
115
  u(n, T, !1, "lhx-svg-style"), this.checkIsOnlyOneImageInDocument(n) && u(n, E, !1, "only-one-image");
@@ -166,12 +166,12 @@ var C = "lhx-svg", w = 5, T = `.${C} {max-width: var(${g.ColumnBoxWidth}) !impor
166
166
  let c = 0, l = 0;
167
167
  try {
168
168
  if (i(n)) {
169
- let e = await m(n);
169
+ let e = await h(n);
170
170
  c = e.width, l = e.height;
171
171
  } else {
172
172
  let t = await e.fileParser.getFile(n, e.url, "blob"), r = t && t.size > 0 ? t : _;
173
173
  try {
174
- let e = await m(r);
174
+ let e = await h(r);
175
175
  c = e.width, l = e.height;
176
176
  } catch {}
177
177
  }
@@ -452,7 +452,7 @@ var C = "lhx-svg", w = 5, T = `.${C} {max-width: var(${g.ColumnBoxWidth}) !impor
452
452
  return this.addBlobUrl(e, a), a;
453
453
  }
454
454
  async resolveSvgBlobUrl(e, n, a) {
455
- let o = t(await n.arrayBuffer()), s = p(o).querySelector("image");
455
+ let o = t(await n.arrayBuffer()), s = m(o).querySelector("image");
456
456
  if (!s) return "data:image/svg+xml," + encodeURIComponent(o);
457
457
  let c = s.getAttribute("xlink:href") ?? s.getAttribute("href") ?? "";
458
458
  if (r(c)) return "data:image/svg+xml," + encodeURIComponent(o);
@@ -463,7 +463,7 @@ var C = "lhx-svg", w = 5, T = `.${C} {max-width: var(${g.ColumnBoxWidth}) !impor
463
463
  u = URL.createObjectURL(t), this.addBlobUrl(e, u), l = t;
464
464
  }
465
465
  try {
466
- let e = await m(l);
466
+ let e = await h(l);
467
467
  a.setAttribute("data-width", e.width.toString()), a.setAttribute("data-height", e.height.toString());
468
468
  let { columnWidth: t, columnHeight: n } = this.getColumnMetrics();
469
469
  this.forceSetImageHeight(a, t, n, e.width, e.height, this.htmlOptions.maxImageHeightRatio);
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/html/injector.cjs"),t=require("../../../../kernal/html/realm.cjs"),n=require("../../HtmlSettings.cjs"),r=require("./ViewportCssVariableNames.cjs"),i=require("./resolveLayoutRoute.cjs"),a=require("./HtmlLayoutMetrics.cjs"),o=require("../documents/HtmlContainerBuilder.cjs"),s=require("./applyLayoutClasses.cjs"),c=require("./resolveContentWrapperMinWidth.cjs");var l=class{constructor(t,r,i,a){this.owner=t,this.readerContainer=r,this.getColumnWidth=()=>this.htmlOptions.maxColumnWidth?Math.abs(this.htmlOptions.maxColumnWidth):768,this.options=this.owner.options,this.device=this.owner.device,this.optionsProvider=i,this.htmlOptions=a,this.containerBuilder=new o.HtmlContainerBuilder(a);let{rendererContainer:s,rendererCss:c,otherCss:l}=this.containerBuilder.createContainers();e.injectCssContent(this.readerContainer.ownerDocument,c+l,!0,`html-renderer-style`),this.readerContainer.appendChild(s),this.rendererContainer=s,this.scrollElement=this.rendererContainer,this.contentsShadowContainer=this.rendererContainer.querySelector(`.`+n.HtmlSettings.ContentsShadowContainerCssName),this.rendererContainer.setAttribute(n.HtmlSettings.HostViewportModeAttribute,this.owner.getHostViewport().mode)}getRendererContainer(){return this.rendererContainer}getScrollElement(){let e=this.owner.getHostViewport();return e.mode==`window`?e.scrollElement:this.rendererContainer}getLayoutMetrics(){return this.layout||=(this.internlApplyCssVariables(),this.buildLayoutMetrics()),this.layout}applyCssVariables(){this.internlApplyCssVariables(),this.layout=this.buildLayoutMetrics()}internlApplyCssVariables(){this.owner.refreshHostViewport();let e=i.getLayoutGeometry(this.htmlOptions),t=this.getScrollElement(),n=e.flipMode==`scroll`&&t?{left:t.scrollLeft,top:t.scrollTop}:void 0;this.applyFlowClasses(e),this.syncPageTransformSign(e);let a=this.prepareRendererCssVariables(),o=this.prepareOtherCssVariables(),s=new Map;a.forEach((e,t)=>{s.set(t,e)}),o.forEach((e,t)=>{s.set(t,e)});let c=this.owner.getRootContainer();c.style.setProperty(`direction`,`var(${r.ViewportCssVariableNames.ReaderViewportDirection})`),s.forEach((e,t)=>{c.style.setProperty(t,e)}),n&&t&&t.scrollTo(n.left,n.top)}syncPageTransformSign(e){let r=this.rendererContainer.querySelector(`.`+n.HtmlSettings.TransformContainerCssName);if(!t.isHtmlElement(r))return;if(e.flipMode!=`page`){r.style.removeProperty(`transition`),r.style.removeProperty(`transform`),r.removeAttribute(`data-target-transform`);return}if(r.hasAttribute(n.HtmlSettings.PageMovingAttributeName))return;let i=r.getAttribute(`data-target-transform`);if(i==null||i===``)return;let a=parseFloat(i);Number.isFinite(a)&&(r.style.removeProperty(`transition`),r.style.transform=e.getPageTranslateCss(a))}prepareRendererCssVariables(){let e=i.getLayoutGeometry(this.htmlOptions),t=e.flipMode;this.rendererContainer.setAttribute(n.HtmlSettings.HostViewportModeAttribute,this.owner.getHostViewport().mode);let a=new Map,o=e.viewport.zeroWrapperMargins?0:this.htmlOptions.contentWrapperMarginBottom??10,s=e.viewport.zeroWrapperMargins?0:this.htmlOptions.contentWrapperMarginTop??10,c=e.viewport.zeroWrapperMargins?0:this.htmlOptions.contentWrapperGap??10;a.set(r.ViewportCssVariableNames.ContentWrapperMarginTop,s+`px`),a.set(r.ViewportCssVariableNames.ContentWrapperMarginBottom,o+`px`),a.set(r.ViewportCssVariableNames.ContentWrapperGap,c+`px`);let l=this.htmlOptions.enableContentWrapperBorderRadius&&t==`scroll`?this.htmlOptions.contentWrapperBorderRadius??0:0;a.set(r.ViewportCssVariableNames.ContentWrapperBorderRadius,l+`px`);let u=this.owner.getHostViewport().mode==`window`&&t==`scroll`;return a.set(r.ViewportCssVariableNames.ScrollElementOverflow,u?`visible`:e.overflowY),a.set(r.ViewportCssVariableNames.ScrollElementOverflowX,u?`visible`:e.overflowX),a.set(r.ViewportCssVariableNames.ReaderViewportDirection,e.direction==`ltr`?`unset`:e.direction),a}applyFlowClasses(e){s.applyRootDirectionClass(this.owner.getRootContainer(),e),s.applyRendererLayoutClass(this.rendererContainer,e)}prepareOtherCssVariables(){let e=this.owner.getRootContainer(),t=i.getLayoutGeometry(this.htmlOptions),n=t.flipMode;n==`page`&&this.scrollElement?.scrollTo(0,0);let a=this.htmlOptions.columnGap??40,o=this.contentsShadowContainer,s=this.rendererContainer.clientWidth||this.owner.getHostViewport().width,l=this.getViewportHeight();this.rendererContainer.setAttribute(`data-client-width`,`${s}`),this.rendererContainer.setAttribute(`data-client-height`,`${l}`);let u=this.getContentsContainerWidth(),d=t.viewport.contentsContainerWidthMode==`max-content`?`max-content`:u+`px`,f=this.rendererContainer.offsetWidth-this.rendererContainer.clientWidth,p=this.rendererContainer.offsetHeight-this.rendererContainer.clientHeight,m=new Map;m.set(r.ViewportCssVariableNames.ScrollElementVerticalScrollBarWidth,f+`px`),m.set(r.ViewportCssVariableNames.ScrollElementHorizontalScrollBarHeight,p+`px`),m.set(r.ViewportCssVariableNames.ReaderViewportWidth,s+`px`),m.set(r.ViewportCssVariableNames.ReaderViewportHeight,l+`px`),e.style.setProperty(r.ViewportCssVariableNames.ContentsContainerWidth,d),m.set(r.ViewportCssVariableNames.ContentsContainerWidth,d);let h=0;n==`page`&&(h=0),s-u-2<2*h&&(h=0);let g=``;g=h>0?``+h+`px 0`:`0`,e.style.setProperty(r.ViewportCssVariableNames.ContentsContainerPadding,g),m.set(r.ViewportCssVariableNames.ContentsContainerPadding,g);let _=t.viewport.forceSingleColumn?1:this.calculateColumns(u);t.viewport.forceSingleColumn||(this.htmlOptions.columns=_);let{marginInline:v,marginBlock:y}=this.getContentsShadowMargin(u),{columnWidth:b}=this.getFinalColumnWidth(u-v*2,_,a),x=v,S=y;n==`scroll`&&(x=0,S=0),o.style=n==`scroll`?`margin: ${S}px ${x}px;`:`margin: ${S}px ${x}px;height: ${l-2*y}px;`;let C=o.getBoundingClientRect().width,w=_*b+Math.max(0,_-1)*a,{contentWrapperPaddingBottomNumber:T,contentWrapperPaddingTopNumber:E,contentWrapperPadding:D,contentWrapperPaddingTopBottom:O}=this.getContentWrapperPadding(u,a),k=l-E-T,A=t.getPageMoveLength(w,k,a);this.rendererContainer.setAttribute(`data-transform-length`,A.toString()),this.rendererContainer.setAttribute(`data-shadow-width`,C.toString()),this.rendererContainer.setAttribute(`data-column-width`,b.toString()),this.rendererContainer.setAttribute(`data-column-gap`,a.toString()),this.rendererContainer.setAttribute(`data-page-width`,`${w}`),this.rendererContainer.setAttribute(`data-page-height`,`${k}`),m.set(r.ViewportCssVariableNames.ContentWrapperWidth,t.viewport.contentWrapperWidthMode==`auto`?`auto`:C+`px`),m.set(r.ViewportCssVariableNames.ContentWrapperMinWidth,c.resolveContentWrapperMinWidth(t.viewport.contentWrapperMinWidthMode,{shadowWidth:C,columnWidth:b,columnGap:a,viewportWidth:s})),m.set(r.ViewportCssVariableNames.ContentWrapperHeight,this.getContentWrapperHeight()),m.set(r.ViewportCssVariableNames.ContentWrapperMinHeight,l+`px`),m.set(r.ViewportCssVariableNames.ContentWrapperMaxHeight,t.viewport.contentWrapperMaxHeightMode==`none`?`none`:l+`px`),m.set(r.ViewportCssVariableNames.ContentWrapperPadding,D),t.viewport.contentContainerWidthMode==`auto`?m.set(r.ViewportCssVariableNames.ContentContainerWidth,`auto`):t.viewport.contentContainerWidthMode==`column`?m.set(r.ViewportCssVariableNames.ContentContainerWidth,b+`px`):m.set(r.ViewportCssVariableNames.ContentContainerWidth,`100%`);let j=t.viewport.contentContainerHeightMode==`page`?k+`px`:`calc(var(${r.ViewportCssVariableNames.ContentWrapperHeight}) - ${O})`;return m.set(r.ViewportCssVariableNames.ContentContainerHeight,j),m.set(r.ViewportCssVariableNames.ContentColumnGap,a+`px`),m}buildLayoutMetrics(){let e=this.getFlipMode(),t=new a.HtmlLayoutMetrics,n=this.rendererContainer,{clientWidth:r}=n,i=parseFloat(n.getAttribute(`data-transform-length`));t.clientWidth=r||this.owner.getHostViewport().width;let o;return o=e==`scroll`?this.getViewportHeight():parseFloat(n.getAttribute(`data-page-height`)),t.clientHeight=this.getViewportHeight(),t.pageHeight=o,t.columnHeight=o,t.columnGap=parseFloat(n.getAttribute(`data-column-gap`)),t.columnWidth=parseFloat(n.getAttribute(`data-column-width`)),t.pageWidth=parseFloat(n.getAttribute(`data-page-width`)),t.pageMoveLength=i,t.shadowWidth=parseFloat(n.getAttribute(`data-shadow-width`)),t}getContentWrapperHeight(){let e=i.getLayoutGeometry(this.htmlOptions);return e.viewport.contentWrapperHeightMode==`auto`?`auto`:e.viewport.contentWrapperHeightMode==`viewport`?`${this.getViewportHeight()}px`:this.owner.inIframe?`100%`:`auto`}getContentsShadowMargin(e){let t=this.htmlOptions.contentsShadowMargin??20,n=this.getContentPaddingFactor(),r=this.device.getDeviceType()==`mobile`?Math.round(t*.6):t;return{marginBlock:r,marginInline:r+Math.min(10,e*n)}}getContentWrapperPadding(e,t){let n=this.getFlipMode(),r=n==`scroll`?30:0,{marginBlock:i,marginInline:a}=this.getContentsShadowMargin(e);n==`page`&&(r+=i);let o=r+`px`,s=n==`scroll`?30:0;n==`page`&&(s+=i);let c=s+`px`;return{contentWrapperPaddingTop:o,contentWrapperPaddingLeft:n==`scroll`?`${a}px`:`0`,contentWrapperPaddingRight:n==`scroll`?`${a}px`:`0`,contentWrapperPaddingBottom:c,contentWrapperPaddingLeftRight:n==`scroll`?`${t}px`:`0`,contentWrapperPaddingTopBottom:`${r+s}px`,contentWrapperPadding:n==`scroll`?`${r}px ${a}px ${s}px ${a}px`:`0px`,contentWrapperPaddingTopNumber:r,contentWrapperPaddingBottomNumber:s}}getContentsContainerWidth(){let{width:e}=this.rendererContainer.getBoundingClientRect(),t=e;if(this.device.getDeviceType()==`mobile`&&t<=768)return t;if(this.getFlipMode()==`scroll`)return this.htmlOptions.enableAutoFitPageWidth?t:this.htmlOptions.maxScrollContentWidth?Math.min(t,Math.abs(this.htmlOptions.maxScrollContentWidth)):Math.min(t,this.htmlOptions.columnWidth);let n=this.htmlOptions.columns,r=this.getColumnWidth();if(this.htmlOptions.autoColumns){if(!this.htmlOptions.maxColumns)return t;n=t<=r?1:this.htmlOptions.maxColumns}let i=this.getMultiColumnWidthFactor();return n>1?Math.min(t,n*r*i):Math.min(t,r)}calculateColumns(e){let t=this.htmlOptions.columns??1,n=this.getColumnWidth();if(this.htmlOptions.autoColumns){if(e<=n)t=1;else{t=Math.floor(e/n);let r=e%n;(r>n/5||r>t*50)&&(t+=1),this.htmlOptions.maxColumns&&t>this.htmlOptions.maxColumns&&(t=this.htmlOptions.maxColumns)}}return t}getFinalColumnWidth(e,t,n){let r=n*(t-1),i=(e-r)/t,a=0,o=Math.round(i);return o!=i&&(i=o,a=e-(t*o+r)),{columnWidth:i,remainder:a}}getContentPaddingFactor(){return this.device.getDeviceType()==`mobile`?.01:.05}getMultiColumnWidthFactor(){let e=this.htmlOptions.multiColumnWidthFactor;return e||=.8,e=Math.abs(e),e<.5&&(e=.5),e>1&&(e=1),e}getViewportHeight(){let e=this.owner.getHostViewport();if(e.mode==`host`){let e=this.rendererContainer.clientHeight;if(e>=80&&e<33554400)return Math.round(e)}return e.height}getFlipMode(){return i.getLayoutGeometry(this.htmlOptions).flipMode}async dispose(){this.updateCssVariablesTimeoutId&&=(clearTimeout(this.updateCssVariablesTimeoutId),null)}};exports.HtmlRendererViewport=l;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/html/injector.cjs"),t=require("../../HtmlSettings.cjs"),n=require("../../../../kernal/html/realm.cjs"),r=require("./ViewportCssVariableNames.cjs"),i=require("./resolveLayoutRoute.cjs"),a=require("./HtmlLayoutMetrics.cjs"),o=require("../documents/HtmlContainerBuilder.cjs"),s=require("./applyLayoutClasses.cjs"),c=require("./resolveContentWrapperMinWidth.cjs");var l=class{constructor(n,r,i,a){this.owner=n,this.readerContainer=r,this.getColumnWidth=()=>this.htmlOptions.maxColumnWidth?Math.abs(this.htmlOptions.maxColumnWidth):768,this.options=this.owner.options,this.device=this.owner.device,this.optionsProvider=i,this.htmlOptions=a,this.containerBuilder=new o.HtmlContainerBuilder(a);let{rendererContainer:s,rendererCss:c,otherCss:l}=this.containerBuilder.createContainers();e.injectCssContent(this.readerContainer.ownerDocument,c+l,!0,`html-renderer-style`),this.readerContainer.appendChild(s),this.rendererContainer=s,this.scrollElement=this.rendererContainer,this.contentsShadowContainer=this.rendererContainer.querySelector(`.`+t.HtmlSettings.ContentsShadowContainerCssName),this.rendererContainer.setAttribute(t.HtmlSettings.HostViewportModeAttribute,this.owner.getHostViewport().mode)}getRendererContainer(){return this.rendererContainer}getScrollElement(){let e=this.owner.getHostViewport();return e.mode==`window`?e.scrollElement:this.rendererContainer}getLayoutMetrics(){return this.layout||=(this.internlApplyCssVariables(),this.buildLayoutMetrics()),this.layout}applyCssVariables(){this.internlApplyCssVariables(),this.layout=this.buildLayoutMetrics()}internlApplyCssVariables(){this.owner.refreshHostViewport();let e=i.getLayoutGeometry(this.htmlOptions),t=this.getScrollElement(),n=e.flipMode==`scroll`&&t?{left:t.scrollLeft,top:t.scrollTop}:void 0;this.applyFlowClasses(e),this.syncPageTransformSign(e);let a=this.prepareRendererCssVariables(),o=this.prepareOtherCssVariables(),s=new Map;a.forEach((e,t)=>{s.set(t,e)}),o.forEach((e,t)=>{s.set(t,e)});let c=this.owner.getRootContainer();c.style.setProperty(`direction`,`var(${r.ViewportCssVariableNames.ReaderViewportDirection})`),s.forEach((e,t)=>{c.style.setProperty(t,e)}),n&&t&&t.scrollTo(n.left,n.top)}syncPageTransformSign(e){let r=this.rendererContainer.querySelector(`.`+t.HtmlSettings.TransformContainerCssName);if(!n.isHtmlElement(r))return;if(e.flipMode!=`page`){r.style.removeProperty(`transition`),r.style.removeProperty(`transform`),r.removeAttribute(`data-target-transform`);return}if(r.hasAttribute(t.HtmlSettings.PageMovingAttributeName))return;let i=r.getAttribute(`data-target-transform`);if(i==null||i===``)return;let a=parseFloat(i);Number.isFinite(a)&&(r.style.removeProperty(`transition`),r.style.transform=e.getPageTranslateCss(a))}prepareRendererCssVariables(){let e=i.getLayoutGeometry(this.htmlOptions),n=e.flipMode;this.rendererContainer.setAttribute(t.HtmlSettings.HostViewportModeAttribute,this.owner.getHostViewport().mode);let a=new Map,o=e.viewport.zeroWrapperMargins?0:this.htmlOptions.contentWrapperMarginBottom??10,s=e.viewport.zeroWrapperMargins?0:this.htmlOptions.contentWrapperMarginTop??10,c=e.viewport.zeroWrapperMargins?0:this.htmlOptions.contentWrapperGap??10;a.set(r.ViewportCssVariableNames.ContentWrapperMarginTop,s+`px`),a.set(r.ViewportCssVariableNames.ContentWrapperMarginBottom,o+`px`),a.set(r.ViewportCssVariableNames.ContentWrapperGap,c+`px`);let l=this.htmlOptions.enableContentWrapperBorderRadius&&n==`scroll`?this.htmlOptions.contentWrapperBorderRadius??0:0;a.set(r.ViewportCssVariableNames.ContentWrapperBorderRadius,l+`px`);let u=this.owner.getHostViewport().mode==`window`&&n==`scroll`;return a.set(r.ViewportCssVariableNames.ScrollElementOverflow,u?`visible`:e.overflowY),a.set(r.ViewportCssVariableNames.ScrollElementOverflowX,u?`visible`:e.overflowX),a.set(r.ViewportCssVariableNames.ReaderViewportDirection,e.direction==`ltr`?`unset`:e.direction),a}applyFlowClasses(e){s.applyRootDirectionClass(this.owner.getRootContainer(),e),s.applyRendererLayoutClass(this.rendererContainer,e)}prepareOtherCssVariables(){let e=this.owner.getRootContainer(),t=i.getLayoutGeometry(this.htmlOptions),n=t.flipMode;n==`page`&&this.scrollElement?.scrollTo(0,0);let a=this.htmlOptions.columnGap??40,o=this.contentsShadowContainer,s=this.rendererContainer.clientWidth||this.owner.getHostViewport().width,l=this.getViewportHeight();this.rendererContainer.setAttribute(`data-client-width`,`${s}`),this.rendererContainer.setAttribute(`data-client-height`,`${l}`);let u=this.getContentsContainerWidth(),d=t.viewport.contentsContainerWidthMode==`max-content`?`max-content`:u+`px`,f=this.rendererContainer.offsetWidth-this.rendererContainer.clientWidth,p=this.rendererContainer.offsetHeight-this.rendererContainer.clientHeight,m=new Map;m.set(r.ViewportCssVariableNames.ScrollElementVerticalScrollBarWidth,f+`px`),m.set(r.ViewportCssVariableNames.ScrollElementHorizontalScrollBarHeight,p+`px`),m.set(r.ViewportCssVariableNames.ReaderViewportWidth,s+`px`),m.set(r.ViewportCssVariableNames.ReaderViewportHeight,l+`px`),e.style.setProperty(r.ViewportCssVariableNames.ContentsContainerWidth,d),m.set(r.ViewportCssVariableNames.ContentsContainerWidth,d);let h=0;n==`page`&&(h=0),s-u-2<2*h&&(h=0);let g=``;g=h>0?``+h+`px 0`:`0`,e.style.setProperty(r.ViewportCssVariableNames.ContentsContainerPadding,g),m.set(r.ViewportCssVariableNames.ContentsContainerPadding,g);let _=t.viewport.forceSingleColumn?1:this.calculateColumns(u);t.viewport.forceSingleColumn||(this.htmlOptions.columns=_);let{marginInline:v,marginBlock:y}=this.getContentsShadowMargin(u),{columnWidth:b}=this.getFinalColumnWidth(u-v*2,_,a),x=v,S=y;n==`scroll`&&(x=0,S=0),o.style=n==`scroll`?`margin: ${S}px ${x}px;`:`margin: ${S}px ${x}px;height: ${l-2*y}px;`;let C=o.getBoundingClientRect().width,w=_*b+Math.max(0,_-1)*a,{contentWrapperPaddingBottomNumber:T,contentWrapperPaddingTopNumber:E,contentWrapperPadding:D,contentWrapperPaddingTopBottom:O}=this.getContentWrapperPadding(u,a),k=l-E-T,A=t.getPageMoveLength(w,k,a);this.rendererContainer.setAttribute(`data-transform-length`,A.toString()),this.rendererContainer.setAttribute(`data-shadow-width`,C.toString()),this.rendererContainer.setAttribute(`data-column-width`,b.toString()),this.rendererContainer.setAttribute(`data-column-gap`,a.toString()),this.rendererContainer.setAttribute(`data-page-width`,`${w}`),this.rendererContainer.setAttribute(`data-page-height`,`${k}`),m.set(r.ViewportCssVariableNames.ContentWrapperWidth,t.viewport.contentWrapperWidthMode==`auto`?`auto`:C+`px`),m.set(r.ViewportCssVariableNames.ContentWrapperMinWidth,c.resolveContentWrapperMinWidth(t.viewport.contentWrapperMinWidthMode,{shadowWidth:C,columnWidth:b,columnGap:a,viewportWidth:s})),m.set(r.ViewportCssVariableNames.ContentWrapperHeight,this.getContentWrapperHeight()),m.set(r.ViewportCssVariableNames.ContentWrapperMinHeight,l+`px`),m.set(r.ViewportCssVariableNames.ContentWrapperMaxHeight,t.viewport.contentWrapperMaxHeightMode==`none`?`none`:l+`px`),m.set(r.ViewportCssVariableNames.ContentWrapperPadding,D),t.viewport.contentContainerWidthMode==`auto`?m.set(r.ViewportCssVariableNames.ContentContainerWidth,`auto`):t.viewport.contentContainerWidthMode==`column`?m.set(r.ViewportCssVariableNames.ContentContainerWidth,b+`px`):m.set(r.ViewportCssVariableNames.ContentContainerWidth,`100%`);let j=t.viewport.contentContainerHeightMode==`page`?k+`px`:`calc(var(${r.ViewportCssVariableNames.ContentWrapperHeight}) - ${O})`;return m.set(r.ViewportCssVariableNames.ContentContainerHeight,j),m.set(r.ViewportCssVariableNames.ContentColumnGap,a+`px`),m}buildLayoutMetrics(){let e=this.getFlipMode(),t=new a.HtmlLayoutMetrics,n=this.rendererContainer,{clientWidth:r}=n,i=parseFloat(n.getAttribute(`data-transform-length`));t.clientWidth=r||this.owner.getHostViewport().width;let o;return o=e==`scroll`?this.getViewportHeight():parseFloat(n.getAttribute(`data-page-height`)),t.clientHeight=this.getViewportHeight(),t.pageHeight=o,t.columnHeight=o,t.columnGap=parseFloat(n.getAttribute(`data-column-gap`)),t.columnWidth=parseFloat(n.getAttribute(`data-column-width`)),t.pageWidth=parseFloat(n.getAttribute(`data-page-width`)),t.pageMoveLength=i,t.shadowWidth=parseFloat(n.getAttribute(`data-shadow-width`)),t}getContentWrapperHeight(){let e=i.getLayoutGeometry(this.htmlOptions);return e.viewport.contentWrapperHeightMode==`auto`?`auto`:e.viewport.contentWrapperHeightMode==`viewport`?`${this.getViewportHeight()}px`:this.owner.inIframe?`100%`:`auto`}getContentsShadowMargin(e){let t=this.htmlOptions.contentsShadowMargin??20,n=this.getContentPaddingFactor(),r=this.device.getDeviceType()==`mobile`?Math.round(t*.6):t;return{marginBlock:r,marginInline:r+Math.min(10,e*n)}}getContentWrapperPadding(e,t){let n=this.getFlipMode(),r=n==`scroll`?30:0,{marginBlock:i,marginInline:a}=this.getContentsShadowMargin(e);n==`page`&&(r+=i);let o=r+`px`,s=n==`scroll`?30:0;n==`page`&&(s+=i);let c=s+`px`;return{contentWrapperPaddingTop:o,contentWrapperPaddingLeft:n==`scroll`?`${a}px`:`0`,contentWrapperPaddingRight:n==`scroll`?`${a}px`:`0`,contentWrapperPaddingBottom:c,contentWrapperPaddingLeftRight:n==`scroll`?`${t}px`:`0`,contentWrapperPaddingTopBottom:`${r+s}px`,contentWrapperPadding:n==`scroll`?`${r}px ${a}px ${s}px ${a}px`:`0px`,contentWrapperPaddingTopNumber:r,contentWrapperPaddingBottomNumber:s}}getContentsContainerWidth(){let e=this.rendererContainer.clientWidth||this.owner.getHostViewport().width;if(this.device.getDeviceType()==`mobile`&&e<=768)return e;if(this.getFlipMode()==`scroll`)return this.htmlOptions.enableAutoFitPageWidth?e:this.htmlOptions.maxScrollContentWidth?Math.min(e,Math.abs(this.htmlOptions.maxScrollContentWidth)):Math.min(e,this.htmlOptions.columnWidth);let t=this.htmlOptions.columns,n=this.getColumnWidth();if(this.htmlOptions.autoColumns){if(!this.htmlOptions.maxColumns)return e;t=e<=n?1:this.htmlOptions.maxColumns}let r=this.getMultiColumnWidthFactor();return t>1?Math.min(e,t*n*r):Math.min(e,n)}calculateColumns(e){let t=this.htmlOptions.columns??1,n=this.getColumnWidth();if(this.htmlOptions.autoColumns){if(e<=n)t=1;else{t=Math.floor(e/n);let r=e%n;(r>n/5||r>t*50)&&(t+=1),this.htmlOptions.maxColumns&&t>this.htmlOptions.maxColumns&&(t=this.htmlOptions.maxColumns)}}return t}getFinalColumnWidth(e,t,n){let r=n*(t-1),i=(e-r)/t,a=0,o=Math.round(i);return o!=i&&(i=o,a=e-(t*o+r)),{columnWidth:i,remainder:a}}getContentPaddingFactor(){return this.device.getDeviceType()==`mobile`?.01:.05}getMultiColumnWidthFactor(){let e=this.htmlOptions.multiColumnWidthFactor;return e||=.8,e=Math.abs(e),e<.5&&(e=.5),e>1&&(e=1),e}getViewportHeight(){let e=this.owner.getHostViewport();if(e.mode==`host`){let e=this.rendererContainer.clientHeight;if(e>=80&&e<33554400)return Math.round(e)}return e.height}getFlipMode(){return i.getLayoutGeometry(this.htmlOptions).flipMode}async dispose(){this.updateCssVariablesTimeoutId&&=(clearTimeout(this.updateCssVariablesTimeoutId),null)}};exports.HtmlRendererViewport=l;