@readium/navigator 2.6.1 → 2.7.1

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 (125) hide show
  1. package/LICENSE +28 -0
  2. package/dist/Navigator.js +1 -0
  3. package/dist/_virtual/index.js +1 -0
  4. package/dist/_virtual/preload-helper.js +1 -0
  5. package/dist/audio/AudioNavigator.js +1 -0
  6. package/dist/audio/AudioPoolManager.js +1 -0
  7. package/dist/audio/engine/PreservePitchProcessor.js +215 -0
  8. package/dist/audio/engine/PreservePitchWorklet.js +1 -0
  9. package/dist/audio/engine/WebAudioEngine.js +1 -0
  10. package/dist/audio/preferences/AudioDefaults.js +1 -0
  11. package/dist/audio/preferences/AudioPreferences.js +1 -0
  12. package/dist/audio/preferences/AudioPreferencesEditor.js +1 -0
  13. package/dist/audio/preferences/AudioSettings.js +1 -0
  14. package/dist/audio/protection/AudioNavigatorProtector.js +1 -0
  15. package/dist/css/Properties.js +1 -0
  16. package/dist/dom/_readium_cssSelectorGenerator.js +1 -0
  17. package/dist/dom/_readium_executionCleanup.js +14 -0
  18. package/dist/dom/_readium_executionPrevention.js +66 -0
  19. package/dist/dom/_readium_webpubExecution.js +5 -0
  20. package/dist/epub/EpubNavigator.js +1 -0
  21. package/dist/epub/css/Properties.js +1 -0
  22. package/dist/epub/css/ReadiumCSS.js +1 -0
  23. package/dist/epub/frame/FrameBlobBuilder.js +1 -0
  24. package/dist/epub/frame/FrameComms.js +1 -0
  25. package/dist/epub/frame/FrameManager.js +1 -0
  26. package/dist/epub/frame/FramePoolManager.js +1 -0
  27. package/dist/epub/fxl/FXLCoordinator.js +1 -0
  28. package/dist/epub/fxl/FXLFrameManager.js +1 -0
  29. package/dist/epub/fxl/FXLFramePoolManager.js +1 -0
  30. package/dist/epub/fxl/FXLPeripherals.js +4 -0
  31. package/dist/epub/fxl/FXLPeripheralsDebug.js +1 -0
  32. package/dist/epub/fxl/FXLSpreader.js +1 -0
  33. package/dist/epub/preferences/EpubDefaults.js +1 -0
  34. package/dist/epub/preferences/EpubPreferences.js +1 -0
  35. package/dist/epub/preferences/EpubPreferencesEditor.js +1 -0
  36. package/dist/epub/preferences/EpubSettings.js +1 -0
  37. package/dist/helpers/dimensions.js +1 -0
  38. package/dist/helpers/dist/sML.js +1 -0
  39. package/dist/helpers/lineLength.js +1 -0
  40. package/dist/helpers/minify.js +1 -0
  41. package/dist/helpers/scriptMode.js +1 -0
  42. package/dist/index.js +1 -11006
  43. package/dist/injection/Injector.js +1 -0
  44. package/dist/injection/epubInjectables.js +1 -0
  45. package/dist/injection/webpubInjectables.js +1 -0
  46. package/dist/{ReadiumCSS-after-D7unrNI9.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/ReadiumCSS-after.css.js} +2 -5
  47. package/dist/{ReadiumCSS-before-DwBLxUVH.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/ReadiumCSS-before.css.js} +2 -5
  48. package/dist/{ReadiumCSS-default-AIAk8uwU.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/ReadiumCSS-default.css.js} +2 -5
  49. package/dist/{ReadiumCSS-ebpaj_fonts_patch-Dt2XliTg.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/ReadiumCSS-ebpaj_fonts_patch.css.js} +2 -5
  50. package/dist/{ReadiumCSS-after-XUKPAxfT.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/cjk-horizontal/ReadiumCSS-after.css.js} +2 -5
  51. package/dist/{ReadiumCSS-before-8FMq19-x.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/cjk-horizontal/ReadiumCSS-before.css.js} +2 -5
  52. package/dist/{ReadiumCSS-default-N65xNiIp.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/cjk-horizontal/ReadiumCSS-default.css.js} +2 -5
  53. package/dist/{ReadiumCSS-after-ClF4TBzj.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/cjk-vertical/ReadiumCSS-after.css.js} +2 -5
  54. package/dist/{ReadiumCSS-before-BNTwR8Qm.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/cjk-vertical/ReadiumCSS-before.css.js} +2 -5
  55. package/dist/{ReadiumCSS-default-BesyZHRU.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/cjk-vertical/ReadiumCSS-default.css.js} +2 -5
  56. package/dist/{ReadiumCSS-after-d5mC4cme.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/rtl/ReadiumCSS-after.css.js} +2 -5
  57. package/dist/{ReadiumCSS-before-CG-KmDa3.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/rtl/ReadiumCSS-before.css.js} +2 -5
  58. package/dist/{ReadiumCSS-default-BhdLiyWp.js → node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/rtl/ReadiumCSS-default.css.js} +2 -5
  59. package/dist/node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/dist/webPub/ReadiumCSS-webPub.css.js +274 -0
  60. package/dist/node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/colors.json.js +1 -0
  61. package/dist/node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/experiments.json.js +1 -0
  62. package/dist/node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/fontStacks.json.js +1 -0
  63. package/dist/node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/i18n.json.js +1 -0
  64. package/dist/node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/settings.json.js +1 -0
  65. package/dist/node_modules/.pnpm/path-browserify@1.0.1/node_modules/path-browserify/index.js +1 -0
  66. package/dist/peripherals/KeyboardConditionBridge.js +1 -0
  67. package/dist/peripherals/KeyboardPeripherals.js +1 -0
  68. package/dist/preferences/Preference.js +1 -0
  69. package/dist/preferences/Types.js +1 -0
  70. package/dist/preferences/guards.js +1 -0
  71. package/dist/protection/AutomationDetector.js +1 -0
  72. package/dist/protection/ContextMenuProtector.js +1 -0
  73. package/dist/protection/CopyProtector.js +1 -0
  74. package/dist/protection/DevToolsDetector.js +1 -0
  75. package/dist/protection/DragAndDropProtector.js +1 -0
  76. package/dist/protection/IframeEmbeddingDetector.js +1 -0
  77. package/dist/protection/NavigatorProtector.js +1 -0
  78. package/dist/protection/PrintProtector.js +15 -0
  79. package/dist/protection/utils/WorkerConsole.js +12 -0
  80. package/dist/protection/utils/console.js +1 -0
  81. package/dist/protection/utils/match.js +1 -0
  82. package/dist/protection/utils/platform.js +1 -0
  83. package/dist/webpub/WebPubBlobBuilder.js +2 -0
  84. package/dist/webpub/WebPubFrameManager.js +1 -0
  85. package/dist/webpub/WebPubFramePoolManager.js +1 -0
  86. package/dist/webpub/WebPubNavigator.js +1 -0
  87. package/dist/webpub/css/Properties.js +1 -0
  88. package/dist/webpub/css/WebPubCSS.js +1 -0
  89. package/dist/webpub/preferences/WebPubDefaults.js +1 -0
  90. package/dist/webpub/preferences/WebPubPreferences.js +1 -0
  91. package/dist/webpub/preferences/WebPubPreferencesEditor.js +1 -0
  92. package/dist/webpub/preferences/WebPubSettings.js +1 -0
  93. package/package.json +16 -14
  94. package/src/Navigator.ts +4 -1
  95. package/src/audio/AudioNavigator.ts +8 -8
  96. package/src/decorations/index.ts +24 -127
  97. package/src/epub/EpubNavigator.ts +149 -20
  98. package/src/epub/frame/FrameManager.ts +8 -3
  99. package/src/epub/frame/FramePoolManager.ts +5 -2
  100. package/src/epub/fxl/FXLCoordinator.ts +1 -1
  101. package/src/epub/fxl/FXLFrameManager.ts +1 -1
  102. package/src/epub/preferences/EpubDefaults.ts +1 -1
  103. package/src/epub/preferences/EpubSettings.ts +1 -1
  104. package/src/protection/DevToolsDetector.ts +1 -1
  105. package/src/webpub/WebPubFrameManager.ts +9 -3
  106. package/src/webpub/WebPubFramePoolManager.ts +5 -2
  107. package/src/webpub/WebPubNavigator.ts +100 -19
  108. package/src/webpub/preferences/WebPubDefaults.ts +1 -1
  109. package/src/webpub/preferences/WebPubSettings.ts +1 -1
  110. package/types/src/Navigator.d.ts +3 -1
  111. package/types/src/decorations/index.d.ts +5 -59
  112. package/types/src/epub/EpubNavigator.d.ts +13 -3
  113. package/types/src/epub/frame/FrameManager.d.ts +2 -1
  114. package/types/src/epub/frame/FramePoolManager.d.ts +2 -1
  115. package/types/src/epub/fxl/FXLFramePoolManager.d.ts +1 -1
  116. package/types/src/webpub/WebPubFrameManager.d.ts +2 -1
  117. package/types/src/webpub/WebPubFramePoolManager.d.ts +2 -1
  118. package/types/src/webpub/WebPubNavigator.d.ts +12 -3
  119. package/dist/ar-DyHX_uy2.js +0 -7
  120. package/dist/da-Dct0PS3E.js +0 -7
  121. package/dist/fr-C5HEel98.js +0 -7
  122. package/dist/index.umd.cjs +0 -5615
  123. package/dist/it-DFOBoXGy.js +0 -7
  124. package/dist/pt_PT-Di3sVjze.js +0 -7
  125. package/dist/sv-BfzAFsVN.js +0 -7
@@ -0,0 +1 @@
1
+ import{sML as c}from"../../helpers/dist/sML.js";var l=(o=>(o[o.Left=0]="Left",o[o.Center=1]="Center",o[o.Right=2]="Right",o))(l||{}),g=(o=>(o[o.Top=0]="Top",o[o.Middle=1]="Middle",o[o.Bottom=2]="Bottom",o))(g||{});class X{constructor(){this.outerWidth=0,this.outerHeight=0,this.HTML=document.documentElement,this.Head=document.head,this.Body=document.body}refreshOuterPixels(t){c.OS.iOS||(this.outerHeight=window.outerHeight-window.innerHeight,c.OS.Android&&c.UA.Chrome&&window.screen.height>window.innerHeight&&(this.outerHeight=(window.screen.height-window.innerHeight)/1.5),this.outerWidth=window.outerWidth-window.innerWidth)}getBibiEventCoord(t,s=0){const e={X:0,Y:0};return/^touch/.test(t.type)?(e.X=t.touches[s].screenX,e.Y=t.touches[s].screenY):(e.X=t.screenX,e.Y=t.screenY),(t.target.ownerDocument?.documentElement||t.target.documentElement)===this.HTML&&(e.X-=this.HTML.scrollLeft+this.Body.scrollLeft,e.Y-=this.HTML.scrollTop+this.Body.scrollTop),e.X-=this.outerWidth,e.Y-=this.outerHeight,e}getTouchDistance(t){if(t.touches.length!==2)return 0;const s=t.touches[0].screenX-this.outerWidth,e=t.touches[0].screenY-this.outerHeight,i=t.touches[1].screenX-this.outerWidth,r=t.touches[1].screenY-this.outerHeight;return Math.sqrt(Math.pow(i-s,2)+Math.pow(r-e,2))}getTouchCenter(t){if(t.touches.length!==2)return null;const s=this.HTML.scrollLeft+this.Body.scrollLeft,e=this.HTML.scrollTop+this.Body.scrollTop,i=t.touches[0].screenX-this.outerWidth-s,r=t.touches[0].screenY-this.outerHeight-e,h=t.touches[1].screenX-this.outerWidth-s,u=t.touches[1].screenY-this.outerHeight-e;return{X:(i+h)/2,Y:(r+u)/2}}getBibiEvent(t){if(!t)return{Coord:null,Division:null,Ratio:null,Target:null};const s=this.getBibiEventCoord(t);let e=.3;const i={X:s.X/window.innerWidth,Y:s.Y/window.innerHeight};let r,h,u,d;u=r=e,d=h=1-e;const n={X:null,Y:null};return i.X<u?n.X=0:d<i.X?n.X=2:n.X=1,i.Y<r?n.Y=0:h<i.Y?n.Y=2:n.Y=1,{Target:t.target,Coord:s,Ratio:i,Division:n}}}export{X as FXLCoordinator,l as HorizontalThird,g as VerticalThird};
@@ -0,0 +1 @@
1
+ import{Loader as n}from"@readium/navigator-html-injectables";import{ReadingProgression as a,Page as h}from"@readium/shared";import{FrameComms as d}from"../frame/FrameComms.js";import{KeyboardConditionBridge as l}from"../../peripherals/KeyboardConditionBridge.js";class u{constructor(t,e,r,s={},i=[]){this.currModules=[],this.cachedPage=void 0,this.peripherals=t,this.debugHref=r,this.contentProtectionConfig={...s},this.keyboardPeripheralsConfig=[...i],this.frame=document.createElement("iframe"),this.frame.sandbox.value="allow-same-origin allow-scripts",this.frame.classList.add("readium-navigator-iframe"),this.frame.classList.add("blank"),this.frame.scrolling="no",this.frame.style.visibility="hidden",this.frame.style.setProperty("aria-hidden","true"),this.frame.style.display="none",this.frame.style.position="absolute",this.frame.style.pointerEvents="none",this.frame.style.transformOrigin="0 0",this.frame.style.transform="scale(1)",this.frame.style.background="#fff",this.frame.style.touchAction="none",this.frame.dataset.originalHref=r,this.source="about:blank",this.wrapper=document.createElement("div"),this.wrapper.style.position="relative",this.wrapper.style.float=this.wrapper.style.cssFloat=e===a.rtl?"right":"left",this.wrapper.appendChild(this.frame)}async load(t,e){return this.source===e&&this.loadPromise&&[...this.currModules].sort().join("|")===[...t].sort().join("|")?this.loadPromise:(this.loaded&&this.source!==e&&this.window.stop(),this.source=e,this.loadPromise=new Promise((r,s)=>{if(this.loader&&this.loaded){const i=this.frame.contentWindow;if([...this.currModules].sort().join("|")===[...t].sort().join("|")){try{r(i),this.loadPromise=void 0}catch{}return}this.comms?.halt(),this.loader.destroy(),this.loader=new n(i,t),this.currModules=t,this.comms=void 0;try{r(i),this.loadPromise=void 0}catch{}return}this.frame.addEventListener("load",()=>{const i=this.frame.contentWindow;this.loader=new n(i,t),this.currModules=t,this.peripherals.observe(this.wrapper),this.peripherals.observe(i);try{r(i)}catch{}},{once:!0}),this.frame.addEventListener("error",i=>{try{s(i.error),this.loadPromise=void 0}catch{}},{once:!0}),this.frame.style.removeProperty("display"),this.frame.contentWindow.location.replace(this.source)}),this.loadPromise)}loadPageSize(){const t=this.frame.contentWindow,e=t.document.head.querySelector("meta[name=viewport]");if(e){const r=/(\w+) *= *([^\s,]+)/g;let s,i=0,o=0;for(;s=r.exec(e.content);)s[1]==="width"?i=Number.parseFloat(s[2]):s[1]==="height"&&(o=Number.parseFloat(s[2]));if(i>0&&o>0)return{width:i,height:o}}return{width:t.document.body.scrollWidth,height:t.document.body.scrollHeight}}update(t){if(!this.loaded)return;const e=this.loadPageSize();this.frame.style.height=`${e.height}px`,this.frame.style.width=`${e.width}px`;const r=Math.min(this.wrapper.clientWidth/e.width,this.wrapper.clientHeight/e.height);this.frame.style.transform=`scale(${r})`;const s=this.frame.getBoundingClientRect(),i=this.wrapper.clientHeight-s.height;if(this.frame.style.top=`${i/2}px`,t===h.left){const o=this.wrapper.clientWidth-s.width;this.frame.style.left=`${o}px`}else if(t===h.center){const o=this.wrapper.clientWidth-s.width;this.frame.style.left=`${o/2}px`}else this.frame.style.left="0px";this.frame.style.removeProperty("visibility"),this.frame.style.removeProperty("aria-hidden"),this.frame.style.removeProperty("pointer-events"),this.frame.classList.remove("blank"),this.frame.classList.add("loaded")}async destroy(){this.conditionBridge?.destroy(),await this.unfocus(),this.loader?.destroy(),this.wrapper.remove()}async unload(){if(this.loaded)return this.deselect(),this.frame.style.visibility="hidden",this.frame.style.setProperty("aria-hidden","true"),this.frame.style.pointerEvents="none",this.frame.classList.add("blank"),this.frame.classList.remove("loaded"),this.comms?.halt(),this.loader?.destroy(),this.comms=void 0,this.frame.blur(),new Promise((t,e)=>{this.frame.addEventListener("load",()=>{try{this.showPromise=void 0,t()}catch{}},{once:!0}),this.frame.addEventListener("error",r=>{try{this.showPromise=void 0,e(r.error)}catch{}},{once:!0}),this.source="about:blank",this.frame.contentWindow.location.replace("about:blank"),this.frame.style.display="none"})}deselect(){this.frame.contentWindow?.getSelection()?.removeAllRanges()}async unfocus(){if(this.frame.parentElement)return this.comms===void 0?void 0:(this.frame.blur(),new Promise((t,e)=>{this.comms?.send("unfocus",void 0,r=>{this.comms?.halt(),this.showPromise=void 0,t()})}));this.comms?.halt()}applyContentProtection(){this.comms||this.comms.resume(),this.comms.send("peripherals_protection",this.contentProtectionConfig),this.keyboardPeripheralsConfig&&this.keyboardPeripheralsConfig.length>0&&(this.conditionBridge?.destroy(),this.conditionBridge=new l(this.keyboardPeripheralsConfig,t=>{t.length>0&&this.comms.send("keyboard_peripherals",t)}),this.conditionBridge.setup()),this.contentProtectionConfig.protectPrinting?.disable&&this.comms.send("print_protection",this.contentProtectionConfig.protectPrinting)}async show(t){if(!this.frame.parentElement){console.warn("Trying to show frame that is not attached to the DOM");return}if(!this.loaded){this.showPromise=void 0;return}return this.showPromise?(this.cachedPage!==t&&(this.update(t),this.cachedPage=t),this.showPromise):(this.cachedPage=t,this.comms?this.comms.resume():this.comms=new d(this.frame.contentWindow,this.source),this.showPromise=new Promise((e,r)=>{this.comms.send("focus",void 0,s=>{this.update(this.cachedPage),this.applyContentProtection(),e()})}),this.showPromise)}async activate(){return new Promise((t,e)=>{if(!this.comms)return t();this.comms?.send("activate",void 0,()=>{t()})})}get element(){return this.wrapper}get iframe(){return this.frame}get realSize(){return this.frame.getBoundingClientRect()}get loaded(){return this.frame.contentWindow&&this.frame.contentWindow.location.href!=="about:blank"}set width(t){const e=`${t}%`;this.wrapper.style.width!==e&&(this.wrapper.style.width=e)}set height(t){const e=`${t}px`;this.wrapper.style.height!==e&&(this.wrapper.style.height=e)}get window(){if(!this.frame.contentWindow)throw Error("Trying to use frame window when it doesn't exist");return this.frame.contentWindow}get atLeft(){return this.window.scrollX<5}get atRight(){return this.window.scrollX>this.window.document.scrollingElement.scrollWidth-this.window.innerWidth-5}get msg(){return this.comms}get ldr(){return this.loader}}export{u as FXLFrameManager};
@@ -0,0 +1 @@
1
+ import{ReadingProgression as S,Page as p}from"@readium/shared";import k from"../frame/FrameBlobBuilder.js";import{FXLFrameManager as M}from"./FXLFrameManager.js";import{FXLPeripherals as x}from"./FXLPeripherals.js";import{Spread as y,FXLSpreader as B,Orientation as E}from"./FXLSpreader.js";const T=8,O=5,U=300,A=15e3,D=250,I=150,N=500;class z{constructor(e,t,r,a,n,s){if(this.pool=new Map,this.blobs=new Map,this.inprogress=new Map,this.delayedShow=new Map,this.delayedTimeout=new Map,this.previousFrames=[],this.injector=null,this.width=0,this.height=0,this.transform="",this.currentSlide=0,this.spread=!0,this.orientationInternal=-1,this.container=e,this.positions=t,this.pub=r,this.injector=a??null,this.contentProtectionConfig=n||{},this.keyboardPeripheralsConfig=s||[],this.spreadPresentation=r.metadata.otherMetadata?.spread||y.auto,this.pub.metadata.effectiveReadingProgression!==S.rtl&&this.pub.metadata.effectiveReadingProgression!==S.ltr)throw Error("Unsupported reading progression for EPUB");this.spreader=new B(this.pub),this.containerHeightCached=e.clientHeight,this.bookElement=document.createElement("div"),this.bookElement.ariaLabel="Book",this.bookElement.tabIndex=-1,this.updateBookStyle(!0),this.spineElement=document.createElement("div"),this.spineElement.ariaLabel="Spine",this.bookElement.appendChild(this.spineElement),this.container.appendChild(this.bookElement),this.updateSpineStyle(!0),this.peripherals=new x(this),this.pub.readingOrder.items.forEach(l=>{const h=new M(this.peripherals,this.pub.metadata.effectiveReadingProgression,l.href,this.contentProtectionConfig,this.keyboardPeripheralsConfig);this.spineElement.appendChild(h.element),this.pool.set(l.href,h),h.width=100/this.length*(l.properties?.otherProperties.orientation===E.landscape||l.properties?.otherProperties.addBlank?this.perPage:1),h.height=this.height})}set listener(e){this._listener=e}get listener(){return this._listener}get doNotDisturb(){return this.peripherals.pan.touchID>0}resizeHandler(e=!0,t=!0){this.currentSlide+this.perPage>this.length&&(this.currentSlide=this.length<=this.perPage?0:this.length-1),this.containerHeightCached=this.container.clientHeight,this.orientationInternal=-1,this.updateSpineStyle(!0),e&&(this.currentSlide=this.reAlign(),this.slideToCurrent(!t,t)),clearTimeout(this.resizeTimeout),this.resizeTimeout=window.setTimeout(()=>{this.pool.forEach((r,a)=>{let n=this.pub.readingOrder.items.findIndex(h=>h.href===a);const s=this.pub.readingOrder.items[n];if(r.width=100/this.length*(s.properties?.otherProperties.orientation===E.landscape||s.properties?.otherProperties.addBlank?this.perPage:1),r.height=this.height,!r.loaded)return;const l=this.spreader.findByLink(s);r.update(this.spreadPosition(l,s))})},D)}updateDimensions(){this.width=this.bookElement.clientWidth,this.height=this.bookElement.clientHeight}get rtl(){return this.pub.metadata.effectiveReadingProgression===S.rtl}get single(){return!this.spread||this.portrait}get perPage(){return this.spread&&!this.portrait?2:1}get threshold(){return 50}get portrait(){return this.spreadPresentation===y.none?!0:(this.orientationInternal===-1&&(this.orientationInternal=this.containerHeightCached>this.container.clientWidth?1:0),this.orientationInternal===1)}updateSpineStyle(e,t=!0){let r="0";this.updateDimensions(),this.perPage>1&&(r=`${this.width/2}px`);const a={transition:e?`all ${t?I:N}ms ease-out`:"all 0ms ease-out",marginRight:this.rtl?r:"0",marginLeft:this.rtl?"0":r,width:`${this.width/this.perPage*this.length}px`,transform:this.transform,contain:"content"};Object.assign(this.spineElement.style,a)}updateBookStyle(e=!1){if(e){const t={overflow:"hidden",direction:this.pub.metadata.effectiveReadingProgression,cursor:"",height:"100%",width:"100%",position:"relative",outline:"none",transition:this.peripherals?.dragState?"none":"transform .15s ease-in-out",touchAction:"none"};Object.assign(this.bookElement.style,t)}this.bookElement.style.transform=`scale(${this.peripherals?.scale||1})`+(this.peripherals?` translate3d(${this.peripherals.pan.translateX}px, ${this.peripherals.pan.translateY}px, 0px)`:"")}goTo(e){if(this.slength<=this.perPage)return;e=this.reAlign(e);const t=this.currentSlide;this.currentSlide=Math.min(Math.max(e,0),this.length-1),t!==this.currentSlide&&this.slideToCurrent(!1)}onChange(){this.peripherals.scale=1,this.updateBookStyle()}get offset(){return(this.rtl?1:-1)*this.currentSlide*(this.width/this.perPage)}get length(){if(this.single)return this.slength;const e=this.slength+this.nLandscape;return this.shift&&e%2===0?e+1:e}get slength(){return this.pub.readingOrder.items.length||0}get shift(){return this.spreader.shift}get nLandscape(){return this.spreader.nLandscape}setPerPage(e){e===null?this.spread=!0:e===1?this.spread=!1:this.spread=!0,requestAnimationFrame(()=>this.resizeHandler(!0))}slideToCurrent(e,t=!0){if(this.updateDimensions(),e)requestAnimationFrame(()=>{requestAnimationFrame(()=>{const r=`translate3d(${this.offset}px, 0, 0)`;this.spineElement.style.transform!==r&&(this.transform=r,this.updateSpineStyle(!0,t),this.deselect())})});else{const r=`translate3d(${this.offset}px, 0, 0)`;if(this.spineElement.style.transform===r)return;this.transform=r,this.updateSpineStyle(!1),this.deselect()}}bounce(e=!1){requestAnimationFrame(()=>{this.transform=`translate3d(${this.offset+50*(e?1:-1)}px, 0, 0)`,this.updateSpineStyle(!0,!0),setTimeout(()=>{this.transform=`translate3d(${this.offset}px, 0, 0)`,this.updateSpineStyle(!0,!0)},100)})}next(e=1){if(this.slength<=this.perPage)return!1;const t=this.currentSlide;return this.currentSlide=Math.min(this.currentSlide+e,this.length-1),this.perPage>1&&this.currentSlide%2&&this.currentSlide--,this.currentSlide===t&&(this.currentSlide+1,this.length),t!==this.currentSlide?(this.slideToCurrent(!0),this.onChange(),!0):(this.bounce(this.rtl),!1)}prev(e=1){if(this.slength<=this.perPage)return!1;const t=this.currentSlide;return this.currentSlide=Math.max(this.currentSlide-e,0),this.perPage>1&&this.currentSlide%2&&this.currentSlide++,t!==this.currentSlide?(this.slideToCurrent(!0),this.onChange(),!0):(this.bounce(!this.rtl),!1)}get ownerWindow(){return this.container.ownerDocument.defaultView||window}async destroy(){let e=this.inprogress.values(),t=e.next();const r=[];for(;t.value;)r.push(t.value),t=e.next();r.length>0&&await Promise.allSettled(r),this.inprogress.clear();let a=this.pool.values(),n=a.next();for(;n.value;)await n.value.destroy(),n=a.next();this.pool.clear(),this.blobs.forEach(s=>URL.revokeObjectURL(s)),this.injector?.dispose(),this.container.childNodes.forEach(s=>{(s.nodeType===Node.ELEMENT_NODE||s.nodeType===Node.TEXT_NODE)&&s.remove()})}makeSpread(e){return this.perPage<2?[this.pub.readingOrder.items[e]]:this.spreader.currentSpread(e,this.perPage)}reAlign(e=this.currentSlide){return e%2&&!this.single&&e++,e}spreadPosition(e,t){return this.perPage<2?p.center:e.length<2?p.center:t.href===e[0].href?this.rtl?p.right:p.left:this.rtl?p.left:p.right}async waitForItem(e){if(this.inprogress.has(e)&&await this.inprogress.get(e),this.delayedShow.has(e)){const t=this.delayedTimeout.get(e);t>0?clearTimeout(t):await this.delayedShow.get(e),this.delayedTimeout.set(e,0),this.delayedShow.delete(e)}}async cancelShowing(e){if(this.delayedShow.has(e)){const t=this.delayedTimeout.get(e);t>0&&clearTimeout(t),this.delayedShow.delete(e)}}async update(e,t,r,a=!1){let n=this.pub.readingOrder.items.findIndex(h=>h.href===t.href);if(n<0)throw Error("Href not found in reading order");this.currentSlide!==n&&(this.currentSlide=this.reAlign(n),this.slideToCurrent(!0));const s=this.makeSpread(this.currentSlide);this.perPage>1&&n++;for(const h of s)await this.waitForItem(h.href);const l=new Promise(async(h,L)=>{const g=[],c=[];this.positions.forEach((i,o)=>{(o>n+T||o<n-T)&&(g.includes(i.href)||g.push(i.href)),o<n+O&&o>n-O&&(c.includes(i.href)||c.push(i.href))}),g.forEach(async i=>{c.includes(i)||this.pool.has(i)&&(this.cancelShowing(i),await this.pool.get(i)?.unload())}),this.currentBaseURL!==void 0&&e.baseURL!==this.currentBaseURL&&(this.blobs.forEach(i=>URL.revokeObjectURL(i)),this.blobs.clear()),this.currentBaseURL=e.baseURL;const v=async i=>{const o=e.readingOrder.findIndexWithHref(i),d=e.readingOrder.items[o];if(d){if(!this.blobs.has(i)){const m=await new k(e,this.currentBaseURL||"",d,{injector:this.injector}).build(!0);this.blobs.set(i,m)}this.delayedShow.has(i)||this.delayedShow.set(i,new Promise((w,m)=>{let b=!1;const F=window.setTimeout(async()=>{this.delayedTimeout.set(i,0);const C=this.makeSpread(this.reAlign(o)),R=this.spreadPosition(C,d),P=this.pool.get(i);await P.load(r,this.blobs.get(i)),this.peripherals.isScaled||await P.show(R),this.delayedShow.delete(i),b=!0,w()},U);setTimeout(()=>{!b&&this.delayedShow.has(i)&&m(`Offscreen load timeout: ${i}`)},A),this.delayedTimeout.set(i,F)}))}};try{await Promise.all(c.map(i=>v(i)))}catch(i){L(i)}const u=[];for(const i of s){const o=this.pool.get(i.href),d=this.blobs.get(i.href);d&&(this.cancelShowing(i.href),await o.load(r,d),await o.show(this.spreadPosition(s,i)),this.previousFrames.push(o),await o.activate(),u.push(o))}for(;this.previousFrames.length>0;){const i=this.previousFrames.shift();i&&!u.includes(i)&&await i.unfocus()}this.previousFrames=u;const f=this.container.ownerDocument.activeElement;f&&f.tagName==="IFRAME"&&!u.some(i=>i.iframe===f)&&u[0]?.iframe.focus({preventScroll:!0}),h()});for(const h of s)this.inprogress.set(h.href,l);await l;for(const h of s)this.inprogress.delete(h.href)}get currentFrames(){if(this.perPage<2){const t=this.pub.readingOrder.items[this.currentSlide];return[this.pool.get(t.href)]}return this.spreader.currentSpread(this.currentSlide,this.perPage).map(t=>this.pool.get(t.href))}get currentBounds(){const e={x:0,y:0,width:0,height:0,top:0,right:0,bottom:0,left:0,toJSON(){return this}};return this.currentFrames.forEach(t=>{if(!t)return;const r=t.realSize;e.x=Math.min(e.x,r.x),e.y=Math.min(e.y,r.y),e.width+=r.width,e.height=Math.max(e.height,r.height),e.top=Math.min(e.top,r.top),e.right=Math.min(e.right,r.right),e.bottom=Math.min(e.bottom,r.bottom),e.left=Math.min(e.left,r.left)}),e}get viewport(){const e={readingOrder:[],progressions:new Map,positions:null};return(this.perPage<2?[this.pub.readingOrder.items[this.currentSlide]]:this.spreader.currentSpread(this.currentSlide,this.perPage)).forEach(r=>{e.readingOrder.push(r.href),e.progressions.set(r.href,{start:0,end:1})}),e.positions=this.getCurrentNumbers(),e}getCurrentNumbers(){if(this.perPage<2)return[this.pub.readingOrder.items[this.currentSlide].properties?.otherProperties.number];const e=this.spreader.currentSpread(this.currentSlide,this.perPage);return e.length>1?[e[0].properties?.otherProperties.number,e[e.length-1].properties?.otherProperties.number]:[e[0].properties?.otherProperties.number]}deselect(){this.currentFrames?.forEach(e=>e?.deselect())}}export{z as FXLFramePoolManager};
@@ -0,0 +1,4 @@
1
+ import{FXLCoordinator as X}from"./FXLCoordinator.js";import{FXLPeripheralsDebug as f}from"./FXLPeripheralsDebug.js";const g=6,l=1.02,p=50;class v{constructor(t,e=!1){this.dragState=0,this.minimumMoved=!1,this.pan={startX:0,endX:0,startY:0,overscrollX:0,overscrollY:0,letItGo:!1,preventClick:!1,translateX:0,translateY:0,touchID:0},this.pinch={startDistance:0,startScale:0,target:{X:0,Y:0},touchN:0,startTranslate:{X:0,Y:0}},this._scale=1,this.scaleDebouncer=0,this.frameBounds=null,this.debugger=null,this.btouchstartHandler=this.touchstartHandler.bind(this),this.btouchendHandler=this.touchendHandler.bind(this),this.btouchmoveHandler=this.touchmoveHandler.bind(this),this.bdblclickHandler=this.dblclickHandler.bind(this),this.bmousedownHandler=this.mousedownHandler.bind(this),this.bmouseupHandler=this.mouseupHandler.bind(this),this.bmousemoveHandler=this.mousemoveHandler.bind(this),this.moveFrame=0,this.manager=t,this.coordinator=new X,this.attachEvents(),e&&(this.debugger=new f)}get scale(){return this._scale}set scale(t){isNaN(t)&&(t=1),window.clearTimeout(this.scaleDebouncer),this.scaleDebouncer=window.setTimeout(()=>{this.dragState===0&&this.scale<l&&(this.pan.translateX=0,this.pan.translateY=0,this.clearPan(),this.manager.updateBookStyle()),this.manager.listener("zoom",t)},100),this._scale=t}attachEvents(){this.observe(this.manager.spineElement),this.pan={startX:0,startY:0,endX:0,overscrollX:0,overscrollY:0,letItGo:!1,preventClick:!1,translateX:0,translateY:0,touchID:0},this.pinch={startDistance:0,startScale:0,target:{X:0,Y:0},startTranslate:{X:0,Y:0},touchN:0}}clearPan(){this.pan.letItGo=!1,this.pan.touchID=0,this.pan.endX=0,this.pan.overscrollX=0,this.pan.overscrollY=0}clearPinch(){this.pinch={startDistance:0,startScale:this.pinch.startScale,target:{X:0,Y:0},touchN:0,startTranslate:{X:0,Y:0}}}observe(t){t.addEventListener("touchstart",this.btouchstartHandler),t.addEventListener("touchend",this.btouchendHandler),t.addEventListener("touchmove",this.btouchmoveHandler,{passive:!0}),t.addEventListener("dblclick",this.bdblclickHandler,{passive:!0}),t.addEventListener("mousedown",this.bmousedownHandler),t.addEventListener("mouseup",this.bmouseupHandler),t.addEventListener("mousemove",this.bmousemoveHandler)}clickHandler(t){}touchstartHandler(t){if(["TEXTAREA","OPTION","INPUT","SELECT"].indexOf(t.target.nodeName)!==-1)return;switch(t.stopPropagation(),this.frameBounds=this.manager.currentBounds,this.coordinator.refreshOuterPixels(this.frameBounds),t.touches.length){case 3:return;case 2:{t.preventDefault(),this.pinch.startDistance=this.coordinator.getTouchDistance(t);const r=this.startTouch(t);this.pan.startX=r.X,this.pan.startY=r.Y,this.dragState=2,this.manager.updateBookStyle(!0),this.isScaled?(this.pinch.target.X-=this.pan.translateX*(this.pinch.startScale/this.scale),this.pinch.target.Y-=this.pan.translateY*(this.pinch.startScale/this.scale),this.pinch.target={X:0,Y:0},this.pinch.startScale=1/this.scale):(this.pinch.target={X:0,Y:0},this.pinch.startScale=this.scale),this.pinch.startTranslate={X:this.pan.translateX,Y:this.pan.translateY},this.debugger?.show&&(this.debugger.DOM.touch2.style.display="",this.debugger.DOM.center.style.display="",this.debugger.DOM.pinchTarget.style.display="");return}case 1:this.pan.touchID=t.touches[0].identifier,this.debugger?.show&&(this.debugger.DOM.touch1.style.display="");default:this.dragState<1&&(this.dragState=1),this.manager.updateBookStyle(!0)}this.manager.updateSpineStyle(!1);const h=this.startTouch(t);this.pan.startX=h.X,this.pan.startY=h.Y}startTouch(t){const e=this.coordinator.getTouchCenter(t)||this.coordinator.getBibiEventCoord(t);return{X:e.X-this.manager.width/2-this.pan.translateX*this.scale+this.manager.width/2,Y:e.Y-this.manager.height/2-this.pan.translateY*this.scale+this.manager.height/2}}touchendHandler(t){if(t.stopPropagation(),!t.touches||t.touches.length===0)this.pan.endX&&!this.isScaled?(this.pinch.touchN&&(this.pan.endX=this.pan.startX),this.updateAfterDrag()):!this.pinch.touchN&&Math.abs(this.pan.overscrollX)>p&&Math.abs(this.pan.overscrollY)<p/2&&(this.pan.startX=0,this.pan.endX=-this.pan.overscrollX,this.updateAfterDrag()),this.dragState=0,this.minimumMoved=!1,this.clearPinch(),this.debugger?.show&&(this.debugger.DOM.center.style.display="none",this.debugger.DOM.touch1.style.display="none",this.debugger.DOM.touch2.style.display="none");else if(t.touches.length===1){this.dragState=1,t.touches[0].identifier!==this.pan.touchID&&(this.pan.touchID=t.touches[0].identifier),this.debugger?.show&&(this.debugger.DOM.center.style.display="none",this.debugger.DOM.touch2.style.display="none",this.debugger.DOM.pinchTarget.style.display="none");const e=this.startTouch(t);this.pan.startX=e.X,this.pan.startY=e.Y}window.setTimeout(()=>{this.manager.updateBookStyle(!0),this.dragState===0&&(this.scale<l&&(this.pan.translateX=0,this.pan.translateY=0),this.clearPan()),this.manager.updateBookStyle(!0)},50)}touchmoveHandler(t){t.stopPropagation();const e=this.coordinator.getBibiEventCoord(t);Math.abs(this.pan.startY-e.Y)+Math.abs(this.pan.startX-e.X)>5&&(this.minimumMoved||(this.manager.deselect(),this.minimumMoved=!0),this.dragState<1&&(this.dragState=1));const h=this.coordinator?.getTouchDistance(t);let r=!1;const c=this.scale;if(this.dragState===2&&h){if(this.pinch.touchN++,this.pinch.touchN<4)return;let a=h/this.pinch.startDistance*this.scale;a>=g&&(a=g),a<=l&&(a=1),this.scale=a,this.pinch.startDistance=h,r=!0}if(this.pan.letItGo===!1&&(this.pan.letItGo=Math.abs(this.pan.startY-e.Y)<Math.abs(this.pan.startX-e.X)),this.debugger?.show&&(this.debugger.DOM.touch1.style.top=`${e.Y-10}px`,this.debugger.DOM.touch1.style.left=`${e.X-10}px`,this.debugger.DOM.touch1.innerText=`${e.X.toFixed(2)},${e.Y.toFixed(2)}`),this.dragState>0&&this.isScaled||this.dragState>1){if(this.dragState===1){const s={X:e.X-this.manager.width/2,Y:e.Y-this.manager.height/2};this.pan.translateX=(s.X-(this.pan.startX-this.manager.width/2))*1/this.scale,this.pan.translateY=(s.Y-(this.pan.startY-this.manager.height/2))*1/this.scale}else if(this.dragState===2){const s=this.coordinator.getTouchCenter(t);if(this.debugger?.show){this.debugger.DOM.center.style.top=`${s.Y-5}px`,this.debugger.DOM.center.style.left=`${s.X-5}px`,this.debugger.DOM.center.innerText=`${s.X.toFixed(2)},${s.Y.toFixed(2)}`;const o=this.coordinator.getBibiEventCoord(t,1);this.debugger.DOM.touch2.style.top=`${o.Y-10}px`,this.debugger.DOM.touch2.style.left=`${o.X-10}px`,this.debugger.DOM.touch2.innerText=`${o.X.toFixed(2)},${o.Y.toFixed(2)}`}s.X-=this.manager.width/2,s.Y-=this.manager.height/2;let n=-s.X/c;n+=s.X/this.scale,this.pinch.target.X+=n,s.X+=this.pinch.target.X*this.scale/this.pinch.startScale;let d=-s.Y/c;d+=s.Y/this.scale,this.pinch.target.Y+=d,s.Y+=this.pinch.target.Y*this.scale/this.pinch.startScale;let u=(s.X-(this.pan.startX-this.manager.width/2))*1/this.scale,m=(s.Y-(this.pan.startY-this.manager.height/2))*1/this.scale;this.pan.translateX=u,this.pan.translateY=m,this.debugger?.show&&(this.debugger.DOM.pinchTarget.style.left=`${this.pinch.target.X*this.scale/this.pinch.startScale-5+this.manager.width/2}px`,this.debugger.DOM.pinchTarget.style.top=`${this.pinch.target.Y*this.scale/this.pinch.startScale-5+this.manager.height/2}px`,this.debugger.DOM.pinchTarget.innerText=`${(this.pinch.target.X*this.scale/this.pinch.startScale).toFixed(2)},${(this.pinch.target.Y*this.scale/this.pinch.startScale).toFixed(2)}`)}const a=this.frameBounds.width/6,i=this.frameBounds.height/6;this.pan.translateX<-a&&(this.pan.overscrollX=-(a+this.pan.translateX),this.pan.translateX=-a),this.pan.translateY<-i&&(this.pan.overscrollY=-(i+this.pan.translateY),this.pan.translateY=-i),this.pan.translateX>a&&(this.pan.overscrollX=a-this.pan.translateX,this.pan.translateX=a),this.pan.translateY>i&&(this.pan.overscrollY=i-this.pan.translateY,this.pan.translateY=i),r=!0,this.debugger?.show&&(this.debugger.DOM.stats.innerText=`TX: ${this.pan.translateX.toFixed(2)}
2
+ TY: ${this.pan.translateY.toFixed(2)}
3
+ Zoom: ${this.scale.toFixed(2)}
4
+ Overscroll: ${this.pan.overscrollX.toFixed(2)},${this.pan.overscrollY.toFixed(2)}`)}if(r){this.manager.updateBookStyle();return}if(this.dragState>0&&this.pan.letItGo){this.pan.endX=e.X;const i=this.manager.currentSlide*(this.manager.width/this.manager.perPage),s=this.pan.endX-this.pan.startX,n=this.manager.rtl?i+s:i-s;cancelAnimationFrame(this.moveFrame),this.moveFrame=requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.manager.spineElement.style.transform=`translate3d(${(this.manager.rtl?1:-1)*n}px, 0, 0)`})})}}dblclickHandler(t){clearTimeout(this.dtimer),this.pdblclick=!0,this.dtimer=window.setTimeout(()=>this.pdblclick=!1,200),!this.disableDblClick&&this.isScaled&&(this.scale=1)}get isScaled(){return this.scale>1}addTouch(t){t.touches=[{pageX:t.pageX,pageY:t.pageY}]}mousedownHandler(t){this.isScaled&&(this.addTouch(t),this.touchstartHandler(t))}mouseupHandler(t){this.isScaled&&this.touchendHandler(t)}mousemoveHandler(t){this.isScaled&&t.buttons>0&&(t.preventDefault(),this.addTouch(t),this.touchmoveHandler(t))}updateAfterDrag(){const t=(this.manager.rtl?-1:1)*(this.pan.endX-this.pan.startX),e=Math.abs(t);t>0&&e>this.manager.threshold&&this.manager.slength>this.manager.perPage?this.manager.listener("no_less",void 0):t<0&&e>this.manager.threshold&&this.manager.slength>this.manager.perPage&&this.manager.listener("no_more",void 0),this.manager.slideToCurrent(!0,!0)}}export{v as FXLPeripherals};
@@ -0,0 +1 @@
1
+ class e{constructor(){this._DOM={show:!1,pinchTarget:document.createElement("div"),touch1:document.createElement("div"),touch2:document.createElement("div"),center:document.createElement("div"),stats:document.createElement("div")},this._DOM.show=!0,this._DOM.pinchTarget.style.zIndex=this._DOM.stats.style.zIndex=this._DOM.center.style.zIndex=this._DOM.touch1.style.zIndex=this._DOM.touch2.style.zIndex="100000",this._DOM.pinchTarget.style.position=this._DOM.stats.style.position=this._DOM.center.style.position=this._DOM.touch1.style.position=this._DOM.touch2.style.position="absolute",this._DOM.pinchTarget.style.borderRadius=this._DOM.center.style.borderRadius=this._DOM.touch1.style.borderRadius=this._DOM.touch2.style.borderRadius="50%",this._DOM.pinchTarget.style.pointerEvents=this._DOM.stats.style.pointerEvents=this._DOM.center.style.pointerEvents=this._DOM.touch1.style.pointerEvents=this._DOM.touch2.style.pointerEvents="none",this._DOM.pinchTarget.style.display=this._DOM.center.style.display=this._DOM.touch1.style.display=this._DOM.touch2.style.display="none",this._DOM.pinchTarget.style.paddingTop=this._DOM.center.style.paddingTop="10px",this._DOM.pinchTarget.style.width=this._DOM.pinchTarget.style.height=this._DOM.center.style.width=this._DOM.center.style.height="10px",this._DOM.pinchTarget.style.backgroundColor="green",this._DOM.center.style.backgroundColor="red",this._DOM.touch1.style.backgroundColor=this._DOM.touch2.style.backgroundColor="blue",this._DOM.touch1.style.height=this._DOM.touch2.style.height="20px",this._DOM.touch1.style.width=this._DOM.touch2.style.width="20px",this._DOM.touch1.style.paddingTop=this._DOM.touch2.style.paddingTop="20px",this._DOM.touch1.textContent="1",this._DOM.touch2.textContent="2",this._DOM.stats.style.padding="20px",this._DOM.stats.style.backgroundColor="rgba(0,0,0,0.5)",this._DOM.stats.style.color="white",this._DOM.stats.textContent="[stats]",document.body.appendChild(this._DOM.stats),document.body.appendChild(this._DOM.center),document.body.appendChild(this._DOM.touch1),document.body.appendChild(this._DOM.touch2),document.body.appendChild(this._DOM.pinchTarget)}get show(){return this.DOM.show}get DOM(){return this._DOM}}export{e as FXLPeripheralsDebug};
@@ -0,0 +1 @@
1
+ import{ReadingProgression as h,Page as n}from"@readium/shared";var d=(t=>(t.auto="auto",t.landscape="landscape",t.portrait="portrait",t))(d||{}),o=(t=>(t.auto="auto",t.both="both",t.none="none",t.landscape="landscape",t))(o||{});class l{constructor(s){this.shift=!0,this.spreads=[],this.nLandscape=0,this.index(s),this.testShift(s),console.log(`Indexed ${this.spreads.length} spreads for ${s.readingOrder.items.length} items`)}index(s,e=!1){this.nLandscape=0,s.readingOrder.items.forEach((r,i)=>{e||(s.readingOrder.items[i]=r.addProperties({number:i+1,isImage:r.type?.indexOf("image/")===0}));const a=r.properties?.otherProperties.orientation==="landscape";(!r.properties?.page||e)&&(r.properties=r.properties?.add({page:a?"center":((this.shift?0:1)+i-this.nLandscape)%2?s.metadata.readingProgression===h.rtl?"right":"left":s.metadata.readingProgression===h.rtl?"left":"right"})),(a||r.properties?.otherProperties.addBlank)&&this.nLandscape++}),e&&(this.spreads=[]),this.buildSpreads(s.readingOrder)}testShift(s){let e=!1;this.spreads.forEach((r,i)=>{if(r.length>1)return;const a=r[0],p=a.properties?.otherProperties.orientation;i===0&&(p==="landscape"||p!=="portrait"&&((a.width||0)>(a.height||0)||a.properties?.otherProperties.spread==="both"))&&(this.shift=!1),e&&a.properties?.page===n.center&&this.spreads[i-1][0].addProperties({addBlank:!0}),p==="portrait"&&a.properties?.page!=="center"&&a.properties?.otherProperties.number>1?e=!0:e=!1}),this.shift||this.index(s,!0)}buildSpreads(s){let e=[];s.items.forEach((r,i)=>{!i&&this.shift?this.spreads.push([r]):r.properties?.page===n.center?(e.length>0&&this.spreads.push(e),this.spreads.push([r]),e=[]):e.length>=2?(this.spreads.push(e),e=[r]):e.push(r)}),e.length>0&&this.spreads.push(e)}currentSpread(s,e){return this.spreads[Math.min(Math.floor(s/e),this.spreads.length-1)]}findByLink(s){return this.spreads.find(e=>e.includes(s))||void 0}}export{l as FXLSpreader,d as Orientation,o as Spread};
@@ -0,0 +1 @@
1
+ import{fontSizeRangeConfig as a,fontWeightRangeConfig as s,fontWidthRangeConfig as g,TextAlignment as c}from"../../preferences/Types.js";import{ensureString as e,ensureBoolean as t,ensureNonNegative as n,ensureFilter as o,ensureValueInRange as r,withFallback as h,ensureEnumValue as p,ensureMoreThanOrEqual as m,ensureLessThanOrEqual as S,ensureExperiment as u}from"../../preferences/guards.js";import{sMLWithRequest as l}from"../../helpers/dist/sML.js";class O{constructor(i){this.backgroundColor=e(i.backgroundColor)||null,this.blendFilter=t(i.blendFilter)??!1,this.constraint=n(i.constraint)||0,this.columnCount=n(i.columnCount)||null,this.darkenFilter=o(i.darkenFilter)??!1,this.deprecatedFontSize=t(i.deprecatedFontSize),(this.deprecatedFontSize===!1||this.deprecatedFontSize===null)&&(this.deprecatedFontSize=!CSS.supports("zoom","1")),this.fontFamily=e(i.fontFamily)||null,this.fontSize=r(i.fontSize,a.range)||1,this.fontSizeNormalize=t(i.fontSizeNormalize)??!1,this.fontOpticalSizing=t(i.fontOpticalSizing)??null,this.fontWeight=r(i.fontWeight,s.range)||null,this.fontWidth=r(i.fontWidth,g.range)||null,this.hyphens=t(i.hyphens)??null,this.invertFilter=o(i.invertFilter)??!1,this.invertGaijiFilter=o(i.invertGaijiFilter)??!1,this.iOSPatch=i.iOSPatch===!1?!1:(l.OS.iOS||l.OS.iPadOS)&&l.iOSRequest==="mobile",this.iPadOSPatch=i.iPadOSPatch===!1?!1:l.OS.iPadOS&&l.iOSRequest==="desktop",this.letterSpacing=n(i.letterSpacing)||null,this.ligatures=t(i.ligatures)??null,this.lineHeight=n(i.lineHeight)||null,this.linkColor=e(i.linkColor)||null,this.noRuby=t(i.noRuby)??!1,this.pageGutter=h(n(i.pageGutter),20),this.paragraphIndent=n(i.paragraphIndent)??null,this.paragraphSpacing=n(i.paragraphSpacing)??null,this.scroll=t(i.scroll)??!1,this.scrollPaddingTop=n(i.scrollPaddingTop)??null,this.scrollPaddingBottom=n(i.scrollPaddingBottom)??null,this.scrollPaddingLeft=n(i.scrollPaddingLeft)??null,this.scrollPaddingRight=n(i.scrollPaddingRight)??null,this.selectionBackgroundColor=e(i.selectionBackgroundColor)||null,this.selectionTextColor=e(i.selectionTextColor)||null,this.textAlign=p(i.textAlign,c)||null,this.textColor=e(i.textColor)||null,this.textNormalization=t(i.textNormalization)??!1,this.visitedColor=e(i.visitedColor)||null,this.wordSpacing=n(i.wordSpacing)||null,this.optimalLineLength=n(i.optimalLineLength)||65,this.maximalLineLength=h(m(i.maximalLineLength,this.optimalLineLength),80),this.minimalLineLength=h(S(i.minimalLineLength,this.optimalLineLength),40),this.experiments=u(i.experiments)||null}}export{O as EpubDefaults};
@@ -0,0 +1 @@
1
+ import{fontSizeRangeConfig as d,fontWeightRangeConfig as m,fontWidthRangeConfig as u,TextAlignment as L}from"../../preferences/Types.js";import{ensureString as a,ensureBoolean as o,ensureNonNegative as t,ensureFilter as h,ensureValueInRange as g,ensureEnumValue as r}from"../../preferences/guards.js";class s{constructor(i={}){this.backgroundColor=a(i.backgroundColor),this.blendFilter=o(i.blendFilter),this.constraint=t(i.constraint),this.columnCount=t(i.columnCount),this.darkenFilter=h(i.darkenFilter),this.deprecatedFontSize=o(i.deprecatedFontSize),this.fontFamily=a(i.fontFamily),this.fontSize=g(i.fontSize,d.range),this.fontSizeNormalize=o(i.fontSizeNormalize),this.fontOpticalSizing=o(i.fontOpticalSizing),this.fontWeight=g(i.fontWeight,m.range),this.fontWidth=g(i.fontWidth,u.range),this.hyphens=o(i.hyphens),this.invertFilter=h(i.invertFilter),this.invertGaijiFilter=h(i.invertGaijiFilter),this.iOSPatch=o(i.iOSPatch),this.iPadOSPatch=o(i.iPadOSPatch),this.letterSpacing=t(i.letterSpacing),this.ligatures=o(i.ligatures),this.lineHeight=t(i.lineHeight),this.linkColor=a(i.linkColor),this.noRuby=o(i.noRuby),this.pageGutter=t(i.pageGutter),this.paragraphIndent=t(i.paragraphIndent),this.paragraphSpacing=t(i.paragraphSpacing),this.scroll=o(i.scroll),this.scrollPaddingTop=t(i.scrollPaddingTop),this.scrollPaddingBottom=t(i.scrollPaddingBottom),this.scrollPaddingLeft=t(i.scrollPaddingLeft),this.scrollPaddingRight=t(i.scrollPaddingRight),this.selectionBackgroundColor=a(i.selectionBackgroundColor),this.selectionTextColor=a(i.selectionTextColor),this.textAlign=r(i.textAlign,L),this.textColor=a(i.textColor),this.textNormalization=o(i.textNormalization),this.visitedColor=a(i.visitedColor),this.wordSpacing=t(i.wordSpacing),this.optimalLineLength=t(i.optimalLineLength),this.maximalLineLength=t(i.maximalLineLength),this.minimalLineLength=t(i.minimalLineLength)}static serialize(i){const{...n}=i;return JSON.stringify(n)}static deserialize(i){try{const n=JSON.parse(i);return new s(n)}catch(n){return console.error("Failed to deserialize preferences:",n),null}}merging(i){const n={...this};for(const l of Object.keys(i))i[l]!==void 0&&(l!=="maximalLineLength"||i[l]===null||i[l]>=(i.optimalLineLength??n.optimalLineLength??65))&&(l!=="minimalLineLength"||i[l]===null||i[l]<=(i.optimalLineLength??n.optimalLineLength??65))&&(n[l]=i[l]);return new s(n)}}export{s as EpubPreferences};
@@ -0,0 +1 @@
1
+ import{Layout as t,ReadingProgression as V}from"@readium/shared";import{EpubPreferences as m}from"./EpubPreferences.js";import{Preference as i,BooleanPreference as r,RangePreference as n,EnumPreference as x}from"../../preferences/Preference.js";import{filterRangeConfig as s,fontSizeRangeConfig as o,fontWeightRangeConfig as u,fontWidthRangeConfig as h,letterSpacingRangeConfig as c,lineHeightRangeConfig as g,lineLengthRangeConfig as l,paragraphIndentRangeConfig as p,paragraphSpacingRangeConfig as d,TextAlignment as v,wordSpacingRangeConfig as C}from"../../preferences/Types.js";import a from"../../node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/colors.json.js";class F{constructor(e,f,P){this.preferences=e,this.settings=f,this.metadata=P,this.layout=this.metadata?.effectiveLayout||t.reflowable}clear(){this.preferences=new m({optimalLineLength:65})}updatePreference(e,f){this.preferences[e]=f}get backgroundColor(){return new i({initialValue:this.preferences.backgroundColor,effectiveValue:this.settings.backgroundColor||a.backgroundColor,isEffective:this.preferences.backgroundColor!==null,onChange:e=>{this.updatePreference("backgroundColor",e??null)}})}get blendFilter(){return new r({initialValue:this.preferences.blendFilter,effectiveValue:this.settings.blendFilter||!1,isEffective:this.preferences.blendFilter!==null,onChange:e=>{this.updatePreference("blendFilter",e??null)}})}get columnCount(){return new i({initialValue:this.preferences.columnCount,effectiveValue:this.settings.columnCount||null,isEffective:this.layout!==t.fixed&&!this.settings.scroll,onChange:e=>{this.updatePreference("columnCount",e??null)}})}get constraint(){return new i({initialValue:this.preferences.constraint,effectiveValue:this.preferences.constraint||0,isEffective:!0,onChange:e=>{this.updatePreference("constraint",e??null)}})}get darkenFilter(){return new n({initialValue:typeof this.preferences.darkenFilter=="boolean"?100:this.preferences.darkenFilter,effectiveValue:typeof this.settings.darkenFilter=="boolean"?100:this.settings.darkenFilter||0,isEffective:this.settings.darkenFilter!==null,onChange:e=>{this.updatePreference("darkenFilter",e??null)},supportedRange:s.range,step:s.step})}get deprecatedFontSize(){return new r({initialValue:this.preferences.deprecatedFontSize,effectiveValue:CSS.supports("zoom","1")?this.settings.deprecatedFontSize||!1:!0,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("deprecatedFontSize",e??null)}})}get fontFamily(){return new i({initialValue:this.preferences.fontFamily,effectiveValue:this.settings.fontFamily||null,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("fontFamily",e??null)}})}get fontSize(){return new n({initialValue:this.preferences.fontSize,effectiveValue:this.settings.fontSize||1,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("fontSize",e??null)},supportedRange:o.range,step:o.step})}get fontSizeNormalize(){return new r({initialValue:this.preferences.fontSizeNormalize,effectiveValue:this.settings.fontSizeNormalize||!1,isEffective:this.layout!==t.fixed&&this.preferences.fontSizeNormalize!==null,onChange:e=>{this.updatePreference("fontSizeNormalize",e??null)}})}get fontOpticalSizing(){return new r({initialValue:this.preferences.fontOpticalSizing,effectiveValue:this.settings.fontOpticalSizing||!0,isEffective:this.layout!==t.fixed&&this.preferences.fontOpticalSizing!==null,onChange:e=>{this.updatePreference("fontOpticalSizing",e??null)}})}get fontWeight(){return new n({initialValue:this.preferences.fontWeight,effectiveValue:this.settings.fontWeight||400,isEffective:this.layout!==t.fixed&&this.preferences.fontWeight!==null,onChange:e=>{this.updatePreference("fontWeight",e??null)},supportedRange:u.range,step:u.step})}get fontWidth(){return new n({initialValue:this.preferences.fontWidth,effectiveValue:this.settings.fontWidth||100,isEffective:this.layout!==t.fixed&&this.preferences.fontWidth!==null,onChange:e=>{this.updatePreference("fontWidth",e??null)},supportedRange:h.range,step:h.step})}get hyphens(){return new r({initialValue:this.preferences.hyphens,effectiveValue:this.settings.hyphens||!1,isEffective:this.layout!==t.fixed&&this.metadata?.effectiveReadingProgression===V.ltr&&this.preferences.hyphens!==null,onChange:e=>{this.updatePreference("hyphens",e??null)}})}get invertFilter(){return new n({initialValue:typeof this.preferences.invertFilter=="boolean"?100:this.preferences.invertFilter,effectiveValue:typeof this.settings.invertFilter=="boolean"?100:this.settings.invertFilter||0,isEffective:this.settings.invertFilter!==null,onChange:e=>{this.updatePreference("invertFilter",e??null)},supportedRange:s.range,step:s.step})}get invertGaijiFilter(){return new n({initialValue:typeof this.preferences.invertGaijiFilter=="boolean"?100:this.preferences.invertGaijiFilter,effectiveValue:typeof this.settings.invertGaijiFilter=="boolean"?100:this.settings.invertGaijiFilter||0,isEffective:this.preferences.invertGaijiFilter!==null,onChange:e=>{this.updatePreference("invertGaijiFilter",e??null)},supportedRange:s.range,step:s.step})}get iOSPatch(){return new r({initialValue:this.preferences.iOSPatch,effectiveValue:this.settings.iOSPatch||!1,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("iOSPatch",e??null)}})}get iPadOSPatch(){return new r({initialValue:this.preferences.iPadOSPatch,effectiveValue:this.settings.iPadOSPatch||!1,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("iPadOSPatch",e??null)}})}get letterSpacing(){return new n({initialValue:this.preferences.letterSpacing,effectiveValue:this.settings.letterSpacing||0,isEffective:this.layout!==t.fixed&&this.preferences.letterSpacing!==null,onChange:e=>{this.updatePreference("letterSpacing",e??null)},supportedRange:c.range,step:c.step})}get ligatures(){return new r({initialValue:this.preferences.ligatures,effectiveValue:this.settings.ligatures||!0,isEffective:(()=>{if(this.preferences.ligatures===null||this.layout===t.fixed)return!1;const e=this.metadata?.languages?.[0]?.toLowerCase();return!(e&&["zh","ja","ko","mn-mong"].some(f=>e.startsWith(f)))})(),onChange:e=>{this.updatePreference("ligatures",e??null)}})}get lineHeight(){return new n({initialValue:this.preferences.lineHeight,effectiveValue:this.settings.lineHeight,isEffective:this.layout!==t.fixed&&this.preferences.lineHeight!==null,onChange:e=>{this.updatePreference("lineHeight",e??null)},supportedRange:g.range,step:g.step})}get linkColor(){return new i({initialValue:this.preferences.linkColor,effectiveValue:this.settings.linkColor||a.linkColor,isEffective:this.layout!==t.fixed&&this.preferences.linkColor!==null,onChange:e=>{this.updatePreference("linkColor",e??null)}})}get maximalLineLength(){return new n({initialValue:this.preferences.maximalLineLength,effectiveValue:this.settings.maximalLineLength,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("maximalLineLength",e)},supportedRange:l.range,step:l.step})}get minimalLineLength(){return new n({initialValue:this.preferences.minimalLineLength,effectiveValue:this.settings.minimalLineLength,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("minimalLineLength",e)},supportedRange:l.range,step:l.step})}get noRuby(){return new r({initialValue:this.preferences.noRuby,effectiveValue:this.settings.noRuby||!1,isEffective:this.layout!==t.fixed&&this.metadata?.languages?.includes("ja")||!1,onChange:e=>{this.updatePreference("noRuby",e??null)}})}get optimalLineLength(){return new n({initialValue:this.preferences.optimalLineLength,effectiveValue:this.settings.optimalLineLength,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("optimalLineLength",e)},supportedRange:l.range,step:l.step})}get pageGutter(){return new i({initialValue:this.preferences.pageGutter,effectiveValue:this.settings.pageGutter,isEffective:this.layout!==t.fixed&&!this.settings.scroll,onChange:e=>{this.updatePreference("pageGutter",e??null)}})}get paragraphIndent(){return new n({initialValue:this.preferences.paragraphIndent,effectiveValue:this.settings.paragraphIndent||0,isEffective:this.layout!==t.fixed&&this.preferences.paragraphIndent!==null,onChange:e=>{this.updatePreference("paragraphIndent",e??null)},supportedRange:p.range,step:p.step})}get paragraphSpacing(){return new n({initialValue:this.preferences.paragraphSpacing,effectiveValue:this.settings.paragraphSpacing||0,isEffective:this.layout!==t.fixed&&this.preferences.paragraphSpacing!==null,onChange:e=>{this.updatePreference("paragraphSpacing",e??null)},supportedRange:d.range,step:d.step})}get scroll(){return new r({initialValue:this.preferences.scroll,effectiveValue:this.settings.scroll||!1,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("scroll",e??null)}})}get scrollPaddingTop(){return new i({initialValue:this.preferences.scrollPaddingTop,effectiveValue:this.settings.scrollPaddingTop||0,isEffective:this.layout!==t.fixed&&!!this.settings.scroll&&this.preferences.scrollPaddingTop!==null,onChange:e=>{this.updatePreference("scrollPaddingTop",e??null)}})}get scrollPaddingBottom(){return new i({initialValue:this.preferences.scrollPaddingBottom,effectiveValue:this.settings.scrollPaddingBottom||0,isEffective:this.layout!==t.fixed&&!!this.settings.scroll&&this.preferences.scrollPaddingBottom!==null,onChange:e=>{this.updatePreference("scrollPaddingBottom",e??null)}})}get scrollPaddingLeft(){return new i({initialValue:this.preferences.scrollPaddingLeft,effectiveValue:this.settings.scrollPaddingLeft||0,isEffective:this.layout!==t.fixed&&!!this.settings.scroll&&this.preferences.scrollPaddingLeft!==null,onChange:e=>{this.updatePreference("scrollPaddingLeft",e??null)}})}get scrollPaddingRight(){return new i({initialValue:this.preferences.scrollPaddingRight,effectiveValue:this.settings.scrollPaddingRight||0,isEffective:this.layout!==t.fixed&&!!this.settings.scroll&&this.preferences.scrollPaddingRight!==null,onChange:e=>{this.updatePreference("scrollPaddingRight",e??null)}})}get selectionBackgroundColor(){return new i({initialValue:this.preferences.selectionBackgroundColor,effectiveValue:this.settings.selectionBackgroundColor||a.selectionBackgroundColor,isEffective:this.layout!==t.fixed&&this.preferences.selectionBackgroundColor!==null,onChange:e=>{this.updatePreference("selectionBackgroundColor",e??null)}})}get selectionTextColor(){return new i({initialValue:this.preferences.selectionTextColor,effectiveValue:this.settings.selectionTextColor||a.selectionTextColor,isEffective:this.layout!==t.fixed&&this.preferences.selectionTextColor!==null,onChange:e=>{this.updatePreference("selectionTextColor",e??null)}})}get textAlign(){return new x({initialValue:this.preferences.textAlign,effectiveValue:this.settings.textAlign||v.start,isEffective:this.layout!==t.fixed&&this.preferences.textAlign!==null,onChange:e=>{this.updatePreference("textAlign",e??null)},supportedValues:Object.values(v)})}get textColor(){return new i({initialValue:this.preferences.textColor,effectiveValue:this.settings.textColor||a.textColor,isEffective:this.layout!==t.fixed&&this.preferences.textColor!==null,onChange:e=>{this.updatePreference("textColor",e??null)}})}get textNormalization(){return new r({initialValue:this.preferences.textNormalization,effectiveValue:this.settings.textNormalization||!1,isEffective:this.layout!==t.fixed,onChange:e=>{this.updatePreference("textNormalization",e??null)}})}get visitedColor(){return new i({initialValue:this.preferences.visitedColor,effectiveValue:this.settings.visitedColor||a.visitedColor,isEffective:this.layout!==t.fixed&&this.preferences.visitedColor!==null,onChange:e=>{this.updatePreference("visitedColor",e??null)}})}get wordSpacing(){return new n({initialValue:this.preferences.wordSpacing,effectiveValue:this.settings.wordSpacing||0,isEffective:this.layout!==t.fixed&&this.preferences.wordSpacing!==null,onChange:e=>{this.updatePreference("wordSpacing",e??null)},supportedRange:C.range,step:C.step})}}export{F as EpubPreferencesEditor};
@@ -0,0 +1 @@
1
+ import{sMLWithRequest as t}from"../../helpers/dist/sML.js";class a{constructor(i,o){this.backgroundColor=i.backgroundColor||o.backgroundColor||null,this.blendFilter=typeof i.blendFilter=="boolean"?i.blendFilter:o.blendFilter??null,this.columnCount=i.columnCount!==void 0?i.columnCount:o.columnCount!==void 0?o.columnCount:null,this.constraint=i.constraint||o.constraint,this.darkenFilter=typeof i.darkenFilter=="boolean"?i.darkenFilter:o.darkenFilter??null,this.deprecatedFontSize=typeof i.deprecatedFontSize=="boolean"?i.deprecatedFontSize:o.deprecatedFontSize??null,this.fontFamily=i.fontFamily||o.fontFamily||null,this.fontSize=i.fontSize!==void 0?i.fontSize:o.fontSize!==void 0?o.fontSize:null,this.fontSizeNormalize=typeof i.fontSizeNormalize=="boolean"?i.fontSizeNormalize:o.fontSizeNormalize??null,this.fontOpticalSizing=typeof i.fontOpticalSizing=="boolean"?i.fontOpticalSizing:o.fontOpticalSizing??null,this.fontWeight=i.fontWeight!==void 0?i.fontWeight:o.fontWeight!==void 0?o.fontWeight:null,this.fontWidth=i.fontWidth!==void 0?i.fontWidth:o.fontWidth!==void 0?o.fontWidth:null,this.hyphens=typeof i.hyphens=="boolean"?i.hyphens:o.hyphens??null,this.invertFilter=typeof i.invertFilter=="boolean"?i.invertFilter:o.invertFilter??null,this.invertGaijiFilter=typeof i.invertGaijiFilter=="boolean"?i.invertGaijiFilter:o.invertGaijiFilter??null,this.iOSPatch=this.deprecatedFontSize||i.iOSPatch===!1?!1:i.iOSPatch===!0?(t.OS.iOS||t.OS.iPadOS)&&t.iOSRequest==="mobile":o.iOSPatch,this.iPadOSPatch=this.deprecatedFontSize||i.iPadOSPatch===!1?!1:i.iPadOSPatch===!0?t.OS.iPadOS&&t.iOSRequest==="desktop":o.iPadOSPatch,this.letterSpacing=i.letterSpacing!==void 0?i.letterSpacing:o.letterSpacing!==void 0?o.letterSpacing:null,this.ligatures=typeof i.ligatures=="boolean"?i.ligatures:o.ligatures??null,this.lineHeight=i.lineHeight!==void 0?i.lineHeight:o.lineHeight!==void 0?o.lineHeight:null,this.linkColor=i.linkColor||o.linkColor||null,this.maximalLineLength=i.maximalLineLength===null?null:i.maximalLineLength||o.maximalLineLength||null,this.minimalLineLength=i.minimalLineLength===null?null:i.minimalLineLength||o.minimalLineLength||null,this.noRuby=typeof i.noRuby=="boolean"?i.noRuby:o.noRuby??null,this.optimalLineLength=i.optimalLineLength||o.optimalLineLength,this.pageGutter=i.pageGutter!==void 0?i.pageGutter:o.pageGutter!==void 0?o.pageGutter:null,this.paragraphIndent=i.paragraphIndent!==void 0?i.paragraphIndent:o.paragraphIndent!==void 0?o.paragraphIndent:null,this.paragraphSpacing=i.paragraphSpacing!==void 0?i.paragraphSpacing:o.paragraphSpacing!==void 0?o.paragraphSpacing:null,this.scroll=typeof i.scroll=="boolean"?i.scroll:o.scroll??null,this.scrollPaddingTop=i.scrollPaddingTop!==void 0?i.scrollPaddingTop:o.scrollPaddingTop!==void 0?o.scrollPaddingTop:null,this.scrollPaddingBottom=i.scrollPaddingBottom!==void 0?i.scrollPaddingBottom:o.scrollPaddingBottom!==void 0?o.scrollPaddingBottom:null,this.scrollPaddingLeft=i.scrollPaddingLeft!==void 0?i.scrollPaddingLeft:o.scrollPaddingLeft!==void 0?o.scrollPaddingLeft:null,this.scrollPaddingRight=i.scrollPaddingRight!==void 0?i.scrollPaddingRight:o.scrollPaddingRight!==void 0?o.scrollPaddingRight:null,this.selectionBackgroundColor=i.selectionBackgroundColor||o.selectionBackgroundColor||null,this.selectionTextColor=i.selectionTextColor||o.selectionTextColor||null,this.textAlign=i.textAlign||o.textAlign||null,this.textColor=i.textColor||o.textColor||null,this.textNormalization=typeof i.textNormalization=="boolean"?i.textNormalization:o.textNormalization??null,this.visitedColor=i.visitedColor||o.visitedColor||null,this.wordSpacing=i.wordSpacing!==void 0?i.wordSpacing:o.wordSpacing!==void 0?o.wordSpacing:null,this.experiments=o.experiments||null}}export{a as EpubSettings};
@@ -0,0 +1 @@
1
+ function d(t){const n=getComputedStyle(t),e=parseFloat(n.paddingLeft||"0"),o=parseFloat(n.paddingRight||"0");return t.clientWidth-e-o}function i(t){const n=getComputedStyle(t),e=parseFloat(n.paddingTop||"0"),o=parseFloat(n.paddingBottom||"0");return t.clientHeight-e-o}export{i as getContentHeight,d as getContentWidth};
@@ -0,0 +1 @@
1
+ const O=()=>typeof navigator>"u"?"":navigator.userAgent||"",S=()=>typeof navigator>"u"?void 0:navigator.userAgentData||void 0;class h{constructor(){const n=S(),o=O(),d=t=>(typeof t=="string"||typeof t=="number")&&t?String(t).replace(/_/g,".").split(".").map(s=>parseInt(s)||0):[],i=(t="")=>{if(!t)return[];const s=new RegExp("^.*"+t+"[ :\\/]?(\\d+([\\._]\\d+)*).*$");return s.test(o)?d(o.replace(s,"$1")):[]};this.OS=(t=>(/(macOS|Mac OS X)/.test(o)?(/\(iP(hone|od touch);/.test(o)&&(t.iOS=i("CPU (?:iPhone )?OS ")),/\(iPad;/.test(o)?t.iOS=t.iPadOS=i("CPU (?:iPhone )?OS "):/(macOS|Mac OS X) \d/.test(o)&&(document.ontouchend!==void 0?t.iOS=t.iPadOS=i():t.macOS=i("(?:macOS|Mac OS X) "))):/Windows( NT)? \d/.test(o)?t.Windows=(s=>s[0]!==6||!s[1]?s:s[1]===1?[7]:s[1]===2?[8]:[8,1])(i("Windows(?: NT)?")):/Android \d/.test(o)?t.Android=i("Android"):/CrOS/.test(o)?t.ChromeOS=i():/X11;/.test(o)&&(t.Linux=i()),t))({}),n&&n.getHighEntropyValues(["architecture","model","platform","platformVersion","uaFullVersion"]).then(t=>(s=>{const e=t.platform,r=t.platformVersion;if(!(!e||!r)){if(/^i(OS|P(hone|od touch))$/.test(e))s.iOS=d(r);else if(/^iPad(OS)?$/.test(e))s.iOS=s.iPadOS=d(r);else if(/^(macOS|(Mac )?OS X|Mac(Intel)?)$/.test(e))document.ontouchend!==void 0?s.iOS=s.iPadOS=d():s.macOS=d(r);else if(/^(Microsoft )?Windows$/.test(e))s.Windows=d(r);else if(/^(Google )?Android$/.test(e))s.Android=d(r);else if(/^((Google )?Chrome OS|CrOS)$/.test(e))s.ChromeOS=d(r);else if(/^(Linux|Ubuntu|X11)$/.test(e))s.Linux=d(r);else return;Object.keys(this.OS).forEach(a=>delete this.OS[a]),Object.assign(this.OS,s)}})({})),this.UA=(t=>{let s=!1;if(n&&Array.isArray(n.brands)){const e=n.brands.reduce((r,a)=>(r[a.brand]=[a.version*1],r),{});e["Google Chrome"]?(s=!0,t.Blink=t.Chromium=e.Chromium||[],t.Chrome=e["Google Chrome"]):e["Microsoft Edge"]?(s=!0,t.Blink=t.Chromium=e.Chromium||[],t.Edge=e["Microsoft Edge"]):e.Opera&&(s=!0,t.Blink=t.Chromium=e.Chromium||[],t.Opera=e.Opera)}return s||(/ Gecko\/\d/.test(o)?(t.Gecko=i("rv"),/ Waterfox\/\d/.test(o)?t.Waterfox=i("Waterfox"):/ Firefox\/\d/.test(o)&&(t.Firefox=i("Firefox"))):/ Edge\/\d/.test(o)?(t.EdgeHTML=i("Edge"),t.Edge=t.EdgeHTML):/ Chrom(ium|e)\/\d/.test(o)?(t.Blink=t.Chromium=(e=>e[0]?e:i("Chrome"))(i("Chromium")),/ EdgA?\/\d/.test(o)?t.Edge=(e=>e[0]?e:i("Edg"))(i("EdgA")):/ OPR\/\d/.test(o)?t.Opera=i("OPR"):/ Vivaldi\/\d/.test(o)?t.Vivaldi=i("Vivaldi"):/ Silk\/\d/.test(o)?t.Silk=i("Silk"):/ UCBrowser\/\d/.test(o)?t.UCBrowser=i("UCBrowser"):/ Phoebe\/\d/.test(o)?t.Phoebe=i("Phoebe"):t.Chrome=(e=>e[0]?e:t.Chromium)(i("Chrome"))):/ AppleWebKit\/\d/.test(o)?(t.WebKit=i("AppleWebKit"),/ CriOS \d/.test(o)?t.Chrome=i("CriOS"):/ FxiOS \d/.test(o)?t.Firefox=i("FxiOS"):/ EdgiOS\/\d/.test(o)?t.Edge=i("EdgiOS"):/ Version\/\d/.test(o)&&(t.Safari=i("Version"))):/ Trident\/\d/.test(o)&&(t.Trident=i("Trident"),t.InternetExplorer=(e=>e[0]?e:i("MSIE"))(i("rv")))),/[\[; ]FB(AN|_IAB)\//.test(o)&&(t.Facebook=i("FBAV")),/ Line\/\d/.test(o)&&(t.LINE=i("Line")),t})({}),this.Env={get:()=>[this.OS,this.UA].reduce((t,s)=>{for(const e in s)s[e]&&t.push(e);return t},[])}}}class u extends h{get iOSRequest(){const n=S(),o=O();if(this.OS.iOS&&!this.OS.iPadOS)return"mobile";if(this.OS.iPadOS)return/\(iPad;/.test(o)||n&&/^iPad(OS)?$/.test(n.platform)?"mobile":"desktop"}}const l=new h,c=new u;export{l as sML,c as sMLWithRequest};
@@ -0,0 +1 @@
1
+ import l from"../node_modules/.pnpm/@readium_css@2.0.5/node_modules/@readium/css/css/vars/fontStacks.json.js";const r=16,h=l.oldStyleTf;class s{constructor(t){this._optimalLineLength=null,this._canvas=document.createElement("canvas"),this._optimalChars=t.optimalChars,this._minChars=t.minChars,this._maxChars=t.maxChars,this._baseFontSize=t.baseFontSize||r,this._fontFace=t.fontFace||h,this._sample=t.sample||null,this._padding=t.padding??0,this._letterSpacing=t.letterSpacing?Math.round(t.letterSpacing*this._baseFontSize):0,this._wordSpacing=t.wordSpacing?Math.round(t.wordSpacing*this._baseFontSize):0,this._isCJK=t.isCJK||!1,this._getRelative=t.getRelative||!1,this._minDivider=this._minChars&&this._minChars<this._optimalChars?this._optimalChars/this._minChars:this._minChars===null?null:1,this._maxMultiplier=this._maxChars&&this._maxChars>this._optimalChars?this._maxChars/this._optimalChars:this._maxChars===null?null:1,this._approximatedWordSpaces=s.approximateWordSpaces(this._optimalChars,this._sample)}updateMultipliers(){this._minDivider=this._minChars&&this._minChars<this._optimalChars?this._optimalChars/this._minChars:this._minChars===null?null:1,this._maxMultiplier=this._maxChars&&this._maxChars>this._optimalChars?this._maxChars/this._optimalChars:this._maxChars===null?null:1}update(t){t.optimalChars&&(this._optimalChars=t.optimalChars),t.minChars!==void 0&&(this._minChars=t.minChars),t.maxChars!==void 0&&(this._maxChars=t.maxChars),t.baseFontSize&&(this._baseFontSize=t.baseFontSize),t.fontFace!==void 0&&(this._fontFace=t.fontFace||h),t.letterSpacing&&(this._letterSpacing=t.letterSpacing),t.wordSpacing&&(this._wordSpacing=t.wordSpacing),t.isCJK!=null&&(this._isCJK=t.isCJK),t.padding!==void 0&&(this._padding=t.padding??0),t.getRelative&&(this._getRelative=t.getRelative),t.sample&&(this._sample=t.sample,this._approximatedWordSpaces=s.approximateWordSpaces(this._optimalChars,this._sample)),this.updateMultipliers(),this._optimalLineLength=this.getOptimalLineLength()}get baseFontSize(){return this._baseFontSize}get minimalLineLength(){return this._optimalLineLength||(this._optimalLineLength=this.getOptimalLineLength()),this._minDivider!==null?Math.round(this._optimalLineLength/this._minDivider+this._padding)/(this._getRelative?this._baseFontSize:1):null}get maximalLineLength(){return this._optimalLineLength||(this._optimalLineLength=this.getOptimalLineLength()),this._maxMultiplier!==null?Math.round(this._optimalLineLength*this._maxMultiplier+this._padding)/(this._getRelative?this._baseFontSize:1):null}get optimalLineLength(){return this._optimalLineLength||(this._optimalLineLength=this.getOptimalLineLength()),Math.round(this._optimalLineLength+this._padding)/(this._getRelative?this._baseFontSize:1)}get all(){return this._optimalLineLength||(this._optimalLineLength=this.getOptimalLineLength()),{min:this.minimalLineLength,max:this.maximalLineLength,optimal:this.optimalLineLength,baseFontSize:this._baseFontSize}}static approximateWordSpaces(t,i){let e=0;if(i&&i.length>=t){const a=i.match(/([\s]+)/gi);e=(a?a.length:0)*(t/i.length)}return e}getLineLengthFallback(){const t=this._letterSpacing*(this._optimalChars-1),i=this._wordSpacing*this._approximatedWordSpaces;return this._optimalChars*(this._baseFontSize*.5)+t+i}getOptimalLineLength(){if(this._fontFace){if(typeof this._fontFace=="string")return this.measureText(this._fontFace);{const t=new FontFace(this._fontFace.name,`url(${this._fontFace.url})`);t.load().then(()=>(document.fonts.add(t),this.measureText(t.family)),i=>{})}}return this.getLineLengthFallback()}measureText(t){const i=this._canvas.getContext("2d");if(i&&t){let e=this._isCJK?"水".repeat(this._optimalChars):"0".repeat(this._optimalChars);if(i.font=`${this._baseFontSize}px ${t}`,this._sample&&this._sample.length>=this._optimalChars&&(e=this._sample.slice(0,this._optimalChars)),Object.hasOwn(i,"letterSpacing")&&Object.hasOwn(i,"wordSpacing"))return i.letterSpacing=this._letterSpacing.toString()+"px",i.wordSpacing=this._wordSpacing.toString()+"px",i.measureText(e).width;{const a=this._letterSpacing*(this._optimalChars-1),n=this._wordSpacing*s.approximateWordSpaces(this._optimalChars,this._sample);return i.measureText(e).width+a+n}}else return this.getLineLengthFallback()}}export{s as LineLengths};
@@ -0,0 +1 @@
1
+ const r=e=>e.replace(/\/\/.*/g,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\n/g,"").replace(/\s+/g," "),p=e=>e.replace(/\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g,"").replace(/ {2,}/g," ");export{p as stripCSS,r as stripJS};
@@ -0,0 +1 @@
1
+ import{ReadingProgression as s}from"@readium/shared";function e(r){const t=r.languages?.[0]?.toLowerCase(),i=r.readingProgression;if(t){if(t.startsWith("zh")||t.startsWith("ja")||t.startsWith("ko"))return i===s.rtl?"cjk-vertical":"cjk-horizontal";if(t.startsWith("mn-mong"))return"mongolian-vertical";if(t.startsWith("ar")||t.startsWith("fa")||t.startsWith("he"))return"rtl"}return"ltr"}export{e as getScriptMode};