@readium/navigator-html-injectables 2.0.0-beta.2 → 2.0.0-beta.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.
@@ -1,18 +1,18 @@
1
- (function(E,$){typeof exports=="object"&&typeof module<"u"?$(exports):typeof define=="function"&&define.amd?define(["exports"],$):(E=typeof globalThis<"u"?globalThis:E||self,$(E["navigator-html-injectables"]={}))})(this,function(E){"use strict";const $=Math.pow(2,32),fe=()=>Math.round(Math.random()*$).toString(36),me=()=>`${Math.round(performance.now())}-${fe()}-${fe()}`,U=1;class ge{constructor(e){this.destination=null,this.registrar=new Map,this.origin="",this.channelId="",this.receiver=this.receive.bind(this),this.preLog=[],this.wnd=e,e.addEventListener("message",this.receiver)}receive(e){if(e.source===null)throw Error("Event source is null");if(typeof e.data!="object")return;const t=e.data;if(!(!("_readium"in t)||!t._readium||t._readium<=0)){if(t.key==="_ping"){if(!this.destination){if(this.destination=e.source,this.origin=e.origin,this.channelId=t._channel,t._readium!==U){t._readium>U?this.send("error",`received comms version ${t._readium} higher than ${U}`):this.send("error",`received comms version ${t._readium} lower than ${U}`),this.destination=null,this.origin="",this.channelId="";return}this.send("_pong",void 0),this.preLog.forEach(i=>this.send("log",i)),this.preLog=[]}return}else if(this.channelId){if(t._channel!==this.channelId||e.origin!==this.origin)return}else return;this.handle(t)}}handle(e){const t=this.registrar.get(e.key);if(!t||t.length===0){e.strict&&this.send("_unhandled",e);return}t.forEach(i=>i.cb(e.data,s=>{this.send("_ack",s,e.id)}))}register(e,t,i){Array.isArray(e)||(e=[e]),e.forEach(s=>{const n=this.registrar.get(s);if(n&&n.length>=0){if(n.find(a=>a.module===t))throw new Error(`Trying to register another callback for combination of event ${s} and module ${t}`);n.push({cb:i,module:t}),this.registrar.set(s,n)}else this.registrar.set(s,[{cb:i,module:t}])})}unregister(e,t){Array.isArray(e)||(e=[e]),e.forEach(i=>{const s=this.registrar.get(i);!s||s.length===0||s.splice(s.findIndex(n=>n.module===t),1)})}unregisterAll(e){this.registrar.forEach((t,i)=>this.registrar.set(i,t.filter(s=>s.module!==e)))}log(...e){this.destination?this.send("log",e):this.preLog.push(e)}get ready(){return!!this.destination}destroy(){this.destination=null,this.channelId="",this.preLog=[],this.registrar.clear(),this.wnd.removeEventListener("message",this.receiver)}send(e,t,i=void 0,s=[]){if(!this.destination)throw Error("Attempted to send comms message before destination has been initialized");const n={_readium:U,_channel:this.channelId,id:i??me(),key:e,data:t};try{this.destination.postMessage(n,{targetOrigin:this.origin,transfer:s})}catch(o){if(s.length>0)throw o;this.destination.postMessage(n,this.origin,s)}}}class J{constructor(e){this.algorithm=e.algorithm,this.compression=e.compression,this.originalLength=e.originalLength,this.profile=e.profile,this.scheme=e.scheme}static deserialize(e){if(e&&e.algorithm)return new J({algorithm:e.algorithm,compression:e.compression,originalLength:e.originalLength,profile:e.profile,scheme:e.scheme})}serialize(){const e={algorithm:this.algorithm};return this.compression!==void 0&&(e.compression=this.compression),this.originalLength!==void 0&&(e.originalLength=this.originalLength),this.profile!==void 0&&(e.profile=this.profile),this.scheme!==void 0&&(e.scheme=this.scheme),e}}class b{constructor(e){this.otherProperties=e}static deserialize(e){if(e)return new b(e)}serialize(){return this.otherProperties}add(e){const t=Object.assign({},this.otherProperties);for(const i in e)t[i]=e[i];return new b(t)}}Object.defineProperty(b.prototype,"encryption",{get:function(){return J.deserialize(this.otherProperties.encrypted)}}),b.prototype.getContains=function(){return new Set(this.otherProperties.contains||[])},b.prototype.getLayout=function(){return this.otherProperties.layout};class l{constructor(e){let t,i,s=e.mediaType.replace(/\s/g,"").split(";");const n=s[0].split("/");if(n.length===2){if(t=n[0].toLowerCase().trim(),i=n[1].toLowerCase().trim(),t.length===0||i.length===0)throw new Error("Invalid media type")}else throw new Error("Invalid media type");const o={};for(let u=1;u<s.length;u++){const f=s[u].split("=");if(f.length===2){const g=f[0].toLocaleLowerCase(),m=g==="charset"?f[1].toUpperCase():f[1];o[g]=m}}const a={},c=Object.keys(o);c.sort((u,f)=>u.localeCompare(f)),c.forEach(u=>a[u]=o[u]);let h="";for(const u in a){const f=a[u];h+=`;${u}=${f}`}const d=`${t}/${i}${h}`,p=a.encoding;this.string=d,this.type=t,this.subtype=i,this.parameters=a,this.encoding=p,this.name=e.name,this.fileExtension=e.fileExtension}static parse(e){return new l(e)}get structuredSyntaxSuffix(){const e=this.subtype.split("+");return e.length>1?`+${e[e.length-1]}`:void 0}get charset(){return this.parameters.charset}contains(e){const t=typeof e=="string"?l.parse({mediaType:e}):e;if(!((this.type==="*"||this.type===t.type)&&(this.subtype==="*"||this.subtype===t.subtype)))return!1;const i=new Set(Object.entries(this.parameters).map(([n,o])=>`${n}=${o}`)),s=new Set(Object.entries(t.parameters).map(([n,o])=>`${n}=${o}`));for(const n of Array.from(i.values()))if(!s.has(n))return!1;return!0}matches(e){const t=typeof e=="string"?l.parse({mediaType:e}):e;return this.contains(t)||t.contains(this)}matchesAny(...e){for(const t of e)if(this.matches(t))return!0;return!1}equals(e){return this.string===e.string}get isZIP(){return this.matchesAny(l.ZIP,l.LCP_PROTECTED_AUDIOBOOK,l.LCP_PROTECTED_PDF)||this.structuredSyntaxSuffix==="+zip"}get isJSON(){return this.matchesAny(l.JSON)||this.structuredSyntaxSuffix==="+json"}get isOPDS(){return this.matchesAny(l.OPDS1,l.OPDS1_ENTRY,l.OPDS2,l.OPDS2_PUBLICATION,l.OPDS_AUTHENTICATION)||this.structuredSyntaxSuffix==="+json"}get isHTML(){return this.matchesAny(l.HTML,l.XHTML)}get isBitmap(){return this.matchesAny(l.BMP,l.GIF,l.JPEG,l.PNG,l.TIFF,l.WEBP)}get isAudio(){return this.type==="audio"}get isVideo(){return this.type==="video"}get isRWPM(){return this.matchesAny(l.READIUM_AUDIOBOOK_MANIFEST,l.DIVINA_MANIFEST,l.READIUM_WEBPUB_MANIFEST)}get isPublication(){return this.matchesAny(l.READIUM_AUDIOBOOK,l.READIUM_AUDIOBOOK_MANIFEST,l.CBZ,l.DIVINA,l.DIVINA_MANIFEST,l.EPUB,l.LCP_PROTECTED_AUDIOBOOK,l.LCP_PROTECTED_PDF,l.LPF,l.PDF,l.W3C_WPUB_MANIFEST,l.READIUM_WEBPUB,l.READIUM_WEBPUB_MANIFEST,l.ZAB)}static get AAC(){return l.parse({mediaType:"audio/aac",fileExtension:"aac"})}static get ACSM(){return l.parse({mediaType:"application/vnd.adobe.adept+xml",name:"Adobe Content Server Message",fileExtension:"acsm"})}static get AIFF(){return l.parse({mediaType:"audio/aiff",fileExtension:"aiff"})}static get AVI(){return l.parse({mediaType:"video/x-msvideo",fileExtension:"avi"})}static get BINARY(){return l.parse({mediaType:"application/octet-stream"})}static get BMP(){return l.parse({mediaType:"image/bmp",fileExtension:"bmp"})}static get CBZ(){return l.parse({mediaType:"application/vnd.comicbook+zip",name:"Comic Book Archive",fileExtension:"cbz"})}static get CSS(){return l.parse({mediaType:"text/css",fileExtension:"css"})}static get DIVINA(){return l.parse({mediaType:"application/divina+zip",name:"Digital Visual Narratives",fileExtension:"divina"})}static get DIVINA_MANIFEST(){return l.parse({mediaType:"application/divina+json",name:"Digital Visual Narratives",fileExtension:"json"})}static get EPUB(){return l.parse({mediaType:"application/epub+zip",name:"EPUB",fileExtension:"epub"})}static get GIF(){return l.parse({mediaType:"image/gif",fileExtension:"gif"})}static get GZ(){return l.parse({mediaType:"application/gzip",fileExtension:"gz"})}static get HTML(){return l.parse({mediaType:"text/html",fileExtension:"html"})}static get JAVASCRIPT(){return l.parse({mediaType:"text/javascript",fileExtension:"js"})}static get JPEG(){return l.parse({mediaType:"image/jpeg",fileExtension:"jpeg"})}static get JSON(){return l.parse({mediaType:"application/json"})}static get LCP_LICENSE_DOCUMENT(){return l.parse({mediaType:"application/vnd.readium.lcp.license.v1.0+json",name:"LCP License",fileExtension:"lcpl"})}static get LCP_PROTECTED_AUDIOBOOK(){return l.parse({mediaType:"application/audiobook+lcp",name:"LCP Protected Audiobook",fileExtension:"lcpa"})}static get LCP_PROTECTED_PDF(){return l.parse({mediaType:"application/pdf+lcp",name:"LCP Protected PDF",fileExtension:"lcpdf"})}static get LCP_STATUS_DOCUMENT(){return l.parse({mediaType:"application/vnd.readium.license.status.v1.0+json"})}static get LPF(){return l.parse({mediaType:"application/lpf+zip",fileExtension:"lpf"})}static get MP3(){return l.parse({mediaType:"audio/mpeg",fileExtension:"mp3"})}static get MPEG(){return l.parse({mediaType:"video/mpeg",fileExtension:"mpeg"})}static get NCX(){return l.parse({mediaType:"application/x-dtbncx+xml",fileExtension:"ncx"})}static get OGG(){return l.parse({mediaType:"audio/ogg",fileExtension:"oga"})}static get OGV(){return l.parse({mediaType:"video/ogg",fileExtension:"ogv"})}static get OPDS1(){return l.parse({mediaType:"application/atom+xml;profile=opds-catalog"})}static get OPDS1_ENTRY(){return l.parse({mediaType:"application/atom+xml;type=entry;profile=opds-catalog"})}static get OPDS2(){return l.parse({mediaType:"application/opds+json"})}static get OPDS2_PUBLICATION(){return l.parse({mediaType:"application/opds-publication+json"})}static get OPDS_AUTHENTICATION(){return l.parse({mediaType:"application/opds-authentication+json"})}static get OPUS(){return l.parse({mediaType:"audio/opus",fileExtension:"opus"})}static get OTF(){return l.parse({mediaType:"font/otf",fileExtension:"otf"})}static get PDF(){return l.parse({mediaType:"application/pdf",name:"PDF",fileExtension:"pdf"})}static get PNG(){return l.parse({mediaType:"image/png",fileExtension:"png"})}static get READIUM_AUDIOBOOK(){return l.parse({mediaType:"application/audiobook+zip",name:"Readium Audiobook",fileExtension:"audiobook"})}static get READIUM_AUDIOBOOK_MANIFEST(){return l.parse({mediaType:"application/audiobook+json",name:"Readium Audiobook",fileExtension:"json"})}static get READIUM_CONTENT_DOCUMENT(){return l.parse({mediaType:"application/vnd.readium.content+json",name:"Readium Content Document",fileExtension:"json"})}static get READIUM_GUIDED_NAVIGATION_DOCUMENT(){return l.parse({mediaType:"application/guided-navigation+json",name:"Readium Guided Navigation Document",fileExtension:"json"})}static get READIUM_POSITION_LIST(){return l.parse({mediaType:"application/vnd.readium.position-list+json",name:"Readium Position List",fileExtension:"json"})}static get READIUM_WEBPUB(){return l.parse({mediaType:"application/webpub+zip",name:"Readium Web Publication",fileExtension:"webpub"})}static get READIUM_WEBPUB_MANIFEST(){return l.parse({mediaType:"application/webpub+json",name:"Readium Web Publication",fileExtension:"json"})}static get SMIL(){return l.parse({mediaType:"application/smil+xml",fileExtension:"smil"})}static get SVG(){return l.parse({mediaType:"image/svg+xml",fileExtension:"svg"})}static get TEXT(){return l.parse({mediaType:"text/plain",fileExtension:"txt"})}static get TIFF(){return l.parse({mediaType:"image/tiff",fileExtension:"tiff"})}static get TTF(){return l.parse({mediaType:"font/ttf",fileExtension:"ttf"})}static get W3C_WPUB_MANIFEST(){return l.parse({mediaType:"application/x.readium.w3c.wpub+json",name:"Web Publication",fileExtension:"json"})}static get WAV(){return l.parse({mediaType:"audio/wav",fileExtension:"wav"})}static get WEBM_AUDIO(){return l.parse({mediaType:"audio/webm",fileExtension:"webm"})}static get WEBM_VIDEO(){return l.parse({mediaType:"video/webm",fileExtension:"webm"})}static get WEBP(){return l.parse({mediaType:"image/webp",fileExtension:"webp"})}static get WOFF(){return l.parse({mediaType:"font/woff",fileExtension:"woff"})}static get WOFF2(){return l.parse({mediaType:"font/woff2",fileExtension:"woff2"})}static get XHTML(){return l.parse({mediaType:"application/xhtml+xml",fileExtension:"xhtml"})}static get XML(){return l.parse({mediaType:"application/xml",fileExtension:"xml"})}static get ZAB(){return l.parse({mediaType:"application/x.readium.zab+zip",name:"Zipped Audio Book",fileExtension:"zab"})}static get ZIP(){return l.parse({mediaType:"application/zip",fileExtension:"zip"})}}class ye{constructor(e){this.uri=e,this.parameters=this.getParameters(e)}getParameters(e){const t=/\{\??([^}]+)\}/g,i=e.match(t);return i?new Set(i.join(",").replace(t,"$1").split(",").map(s=>s.trim())):new Set}expand(e){const t=s=>s.split(",").map(n=>{const o=e[n];return o?encodeURIComponent(o):""}).join(","),i=s=>"?"+s.split(",").map(n=>{const o=n.split("=")[0],a=e[o];return a?`${o}=${encodeURIComponent(a)}`:""}).join("&");return this.uri.replace(/\{(\??)([^}]+)\}/g,(...s)=>s[1]?i(s[2]):t(s[2]))}}function ut(r){return r&&r instanceof Array?r:void 0}function ve(r){return r&&typeof r=="string"?[r]:ut(r)}function be(r){return typeof r=="string"?new Date(r):void 0}function q(r){return isNaN(r)?void 0:r}function C(r){return q(r)!==void 0&&Math.sign(r)>=0?r:void 0}function pt(r){const e=new Array;return r.forEach(t=>e.push(t)),e}class x{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const t=q(e.progression),i=q(e.totalProgression),s=q(e.position),n=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position"]);return Object.entries(e).forEach(([a,c])=>{o.has(a)||n.set(a,c)}),new x({fragments:ve(e.fragments||e.fragment),progression:t!==void 0&&t>=0&&t<=1?t:void 0,totalProgression:i!==void 0&&i>=0&&i<=1?i:void 0,position:s!==void 0&&s>0?s:void 0,otherLocations:n.size===0?void 0:n})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((t,i)=>e[i]=t),e}}class k{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new k({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}}class R{constructor(e){this.href=e.href,this.type=e.type,this.title=e.title,this.locations=e.locations?e.locations:new x({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new R({href:e.href,type:e.type,title:e.title,locations:x.deserialize(e.locations),text:k.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new R({href:this.href,type:this.type,title:this.title,text:this.text,locations:new x({...this.locations,...e})})}}class H{constructor(e){this.href=e.href,this.templated=e.templated,this.type=e.type,this.title=e.title,this.rels=e.rels,this.properties=e.properties,this.height=e.height,this.width=e.width,this.duration=e.duration,this.bitrate=e.bitrate,this.languages=e.languages,this.alternates=e.alternates,this.children=e.children}static deserialize(e){if(e&&e.href&&typeof e.href=="string")return new H({href:e.href,templated:e.templated,type:e.type,title:e.title,rels:e.rel?e.rel instanceof Array?new Set(e.rel):new Set([e.rel]):void 0,properties:b.deserialize(e.properties),height:C(e.height),width:C(e.width),duration:C(e.duration),bitrate:C(e.bitrate),languages:ve(e.language),alternates:_.deserialize(e.alternate),children:_.deserialize(e.children)})}serialize(){const e={href:this.href};return this.templated!==void 0&&(e.templated=this.templated),this.type!==void 0&&(e.type=this.type),this.title!==void 0&&(e.title=this.title),this.rels&&(e.rel=pt(this.rels)),this.properties&&(e.properties=this.properties.serialize()),this.height!==void 0&&(e.height=this.height),this.width!==void 0&&(e.width=this.width),this.duration!==void 0&&(e.duration=this.duration),this.bitrate!==void 0&&(e.bitrate=this.bitrate),this.languages&&(e.language=this.languages),this.alternates&&(e.alternate=this.alternates.serialize()),this.children&&(e.children=this.children.serialize()),e}get mediaType(){return this.type!==void 0?l.parse({mediaType:this.type}):l.BINARY}toURL(e){const t=this.href.replace(/^(\/)/,"");if(t.length===0)return;let i=e||"/";return i.startsWith("/")&&(i="file://"+i),new URL(t,i).href.replace(/^(file:\/\/)/,"")}get templateParameters(){return this.templated?new ye(this.href).parameters:new Set}expandTemplate(e){return new H({href:new ye(this.href).expand(e),templated:!1})}addProperties(e){var t;const i=H.deserialize(this.serialize());return i.properties=i.properties?(t=i.properties)==null?void 0:t.add(e):new b(e),i}get locator(){let e=this.href.split("#");return new R({href:e.length>0&&e[0]!==void 0?e[0]:this.href,type:this.type??"",title:this.title,locations:new x({fragments:e.length>1&&e[1]!==void 0?[e[1]]:[]})})}}class _{constructor(e){this.items=e}static deserialize(e){if(e&&e instanceof Array)return new _(e.map(t=>H.deserialize(t)).filter(t=>t!==void 0))}serialize(){return this.items.map(e=>e.serialize())}findWithRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.find(t)}filterByRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.filter(t)}findWithHref(e){const t=i=>i.href===e;return this.items.find(t)}findIndexWithHref(e){const t=i=>i.href===e;return this.items.findIndex(t)}findWithMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.find(t)}filterByMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.filter(t)}filterByMediaTypes(e){const t=i=>{for(const s of e)if(i.mediaType.matches(s))return!0;return!1};return this.items.filter(t)}everyIsAudio(){const e=t=>t.mediaType.isAudio;return this.items.length>0&&this.items.every(e)}everyIsBitmap(){const e=t=>t.mediaType.isBitmap;return this.items.length>0&&this.items.every(e)}everyIsHTML(){const e=t=>t.mediaType.isHTML;return this.items.length>0&&this.items.every(e)}everyIsVideo(){const e=t=>t.mediaType.isVideo;return this.items.length>0&&this.items.every(e)}everyMatchesMediaType(e){return Array.isArray(e)?this.items.length>0&&this.items.every(t=>{for(const i of e)return t.mediaType.matches(i);return!1}):this.items.length>0&&this.items.every(t=>t.mediaType.matches(e))}filterLinksHasType(){return this.items.filter(e=>e.type)}}class X{constructor(e){this.cssSelector=e.cssSelector,this.textNodeIndex=e.textNodeIndex,this.charOffset=e.charOffset}static deserialize(e){if(!(e&&e.cssSelector))return;let t=C(e.textNodeIndex);if(t===void 0)return;let i=C(e.charOffset);return i===void 0&&(i=C(e.offset)),new X({cssSelector:e.cssSelector,textNodeIndex:t,charOffset:i})}serialize(){const e={cssSelector:this.cssSelector,textNodeIndex:this.textNodeIndex};return this.charOffset!==void 0&&(e.charOffset=this.charOffset),e}}class Q{constructor(e){this.start=e.start,this.end=e.end}static deserialize(e){if(!e)return;let t=X.deserialize(e.start);if(t)return new Q({start:t,end:X.deserialize(e.end)})}serialize(){const e={start:this.start.serialize()};return this.end&&(e.end=this.end.serialize()),e}}x.prototype.getCssSelector=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("cssSelector")},x.prototype.getPartialCfi=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("partialCfi")},x.prototype.getDomRange=function(){var r;return Q.deserialize((r=this.otherLocations)==null?void 0:r.get("domRange"))},x.prototype.fragmentParameters=function(){return new Map(this.fragments.map(r=>r.startsWith("#")?r.slice(1):r).join("&").split("&").filter(r=>!r.startsWith("#")).map(r=>r.split("=")).filter(r=>r.length===2).map(r=>[r[0].trim().toLowerCase(),r[1].trim()]))},x.prototype.htmlId=function(){if(!this.fragments.length)return;let r=this.fragments.find(e=>e.length&&!e.includes("="));if(!r){const e=this.fragmentParameters();e.has("id")?r=e.get("id"):e.has("name")&&(r=e.get("name"))}return r!=null&&r.startsWith("#")?r.slice(1):r},x.prototype.page=function(){const r=parseInt(this.fragmentParameters().get("page"));if(!isNaN(r)&&r>=0)return r},x.prototype.time=function(){const r=parseInt(this.fragmentParameters().get("t"));if(!isNaN(r))return r},x.prototype.space=function(){const r=this.fragmentParameters();if(!r.has("xywh"))return;const e=r.get("xywh").split(",").map(t=>parseInt(t));if(e.length===4&&!e.some(isNaN))return e};class ee{constructor(e){this.currency=e.currency,this.value=e.value}static deserialize(e){if(!e)return;let t=e.currency;if(!(t&&typeof t=="string"&&t.length>0))return;let i=C(e.value);if(i!==void 0)return new ee({currency:t,value:i})}serialize(){return{currency:this.currency,value:this.value}}}class j{constructor(e){this.type=e.type,this.children=e.children}static deserialize(e){if(e&&e.type)return new j({type:e.type,children:j.deserializeArray(e.children)})}static deserializeArray(e){if(e instanceof Array)return e.map(t=>j.deserialize(t)).filter(t=>t!==void 0)}serialize(){const e={type:this.type};return this.children&&(e.children=this.children.map(t=>t.serialize())),e}}class te{constructor(e){this.total=e.total,this.position=e.position}static deserialize(e){if(e)return new te({total:C(e.total),position:C(e.position)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.position!==void 0&&(e.position=this.position),e}}class ie{constructor(e){this.total=e.total,this.available=e.available}static deserialize(e){if(e)return new ie({total:C(e.total),available:C(e.available)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.available!==void 0&&(e.available=this.available),e}}class re{constructor(e){this.state=e.state,this.since=e.since,this.until=e.until}static deserialize(e){if(e&&e.state)return new re({state:e.state,since:be(e.since),until:be(e.until)})}serialize(){const e={state:this.state};return this.since!==void 0&&(e.since=this.since.toISOString()),this.until!==void 0&&(e.until=this.until.toISOString()),e}}b.prototype.getNumberOfItems=function(){return C(this.otherProperties.numberOfItems)},b.prototype.getPrice=function(){return ee.deserialize(this.otherProperties.price)},b.prototype.getIndirectAcquisitions=function(){const r=this.otherProperties.indirectAcquisition;if(r&&r instanceof Array)return r.map(e=>j.deserialize(e)).filter(e=>e!==void 0)},b.prototype.getHolds=function(){return te.deserialize(this.otherProperties.holds)},b.prototype.getCopies=function(){return ie.deserialize(this.otherProperties.copies)},b.prototype.getAvailability=function(){return re.deserialize(this.otherProperties.availability)},b.prototype.getAuthenticate=function(){return H.deserialize(this.otherProperties.authenticate)},b.prototype.getClipped=function(){return this.otherProperties.clipped},b.prototype.getFit=function(){return this.otherProperties.fit},b.prototype.getOrientation=function(){return this.otherProperties.orientation},b.prototype.getOverflow=function(){return this.otherProperties.overflow},b.prototype.getPage=function(){return this.otherProperties.page||void 0},b.prototype.getSpread=function(){return this.otherProperties.spread||void 0};var z;(function(r){r.NONE="none",r.DESCENDANT="descendant",r.CHILD="child"})(z||(z={}));var N;(function(r){r.id="id",r.class="class",r.tag="tag",r.attribute="attribute",r.nthchild="nthchild",r.nthoftype="nthoftype"})(N||(N={}));const ft="CssSelectorGenerator";function Ee(r="unknown problem",...e){console.warn(`${ft}: ${r}`,...e)}N.id,N.class,N.tag,N.attribute,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY;function mt(r){return r instanceof RegExp}function gt(r){return r.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function yt(r){const e=r.map(t=>{if(mt(t))return i=>t.test(i);if(typeof t=="function")return i=>{const s=t(i);return typeof s!="boolean"?(Ee("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",t),!1):s};if(typeof t=="string"){const i=new RegExp("^"+gt(t)+"$");return s=>i.test(s)}return Ee("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1});return t=>e.some(i=>i(t))}const vt="",bt=" > ",Et=" ";z.NONE+"",z.NONE,z.DESCENDANT+"",z.DESCENDANT,z.CHILD+"",z.CHILD,N.nthoftype,N.tag,N.id,N.class,N.attribute,N.nthchild,yt(["class","id","ng-*"]);class V{}function xe(r){return r.split("").reverse().join("")}function xt(r,e,t){const i=xe(e);return t.map(s=>{const n=Math.max(0,s.end-e.length-s.errors),o=xe(r.slice(n,s.end));return{start:we(o,i,s.errors).reduce((c,h)=>s.end-h.end<c?s.end-h.end:c,s.end),end:s.end,errors:s.errors}})}function se(r){return(r|-r)>>31&1}function Se(r,e,t,i){let s=r.P[t],n=r.M[t];const o=i>>>31,a=e[t]|o,c=a|n,h=(a&s)+s^s|a;let d=n|~(h|s),p=s&h;const u=se(d&r.lastRowMask[t])-se(p&r.lastRowMask[t]);return d<<=1,p<<=1,p|=o,d|=se(i)-o,s=p|~(c|d),n=d&c,r.P[t]=s,r.M[t]=n,u}function we(r,e,t){if(e.length===0)return[];t=Math.min(t,e.length);const i=[],s=32,n=Math.ceil(e.length/s)-1,o={P:new Uint32Array(n+1),M:new Uint32Array(n+1),lastRowMask:new Uint32Array(n+1)};o.lastRowMask.fill(1<<31),o.lastRowMask[n]=1<<(e.length-1)%s;const a=new Uint32Array(n+1),c=new Map,h=[];for(let u=0;u<256;u++)h.push(a);for(let u=0;u<e.length;u+=1){const f=e.charCodeAt(u);if(c.has(f))continue;const g=new Uint32Array(n+1);c.set(f,g),f<h.length&&(h[f]=g);for(let m=0;m<=n;m+=1){g[m]=0;for(let v=0;v<s;v+=1){const w=m*s+v;if(w>=e.length)continue;e.charCodeAt(w)===f&&(g[m]|=1<<v)}}}let d=Math.max(0,Math.ceil(t/s)-1);const p=new Uint32Array(n+1);for(let u=0;u<=d;u+=1)p[u]=(u+1)*s;p[n]=e.length;for(let u=0;u<=d;u+=1)o.P[u]=-1,o.M[u]=0;for(let u=0;u<r.length;u+=1){const f=r.charCodeAt(u);let g;f<h.length?g=h[f]:(g=c.get(f),typeof g>"u"&&(g=a));let m=0;for(let v=0;v<=d;v+=1)m=Se(o,g,v,m),p[v]+=m;if(p[d]-m<=t&&d<n&&(g[d+1]&1||m<0)){d+=1,o.P[d]=-1,o.M[d]=0;let v;if(d===n){const w=e.length%s;v=w===0?s:w}else v=s;p[d]=p[d-1]+v-m+Se(o,g,d,m)}else for(;d>0&&p[d]>=t+s;)d-=1;d===n&&p[d]<=t&&(p[d]<t&&i.splice(0,i.length),i.push({start:-1,end:u+1,errors:p[d]}),t=p[d])}return i}function St(r,e,t){const i=we(r,e,t);return xt(r,e,i)}function Te(r,e,t){let i=0;const s=[];for(;i!==-1;)i=r.indexOf(e,i),i!==-1&&(s.push({start:i,end:i+e.length,errors:0}),i+=1);return s.length>0?s:St(r,e,t)}function Ce(r,e){return e.length===0||r.length===0?0:1-Te(r,e,e.length)[0].errors/e.length}function wt(r,e,t={}){if(e.length===0)return null;const i=Math.min(256,e.length/2),s=Te(r,e,i);if(s.length===0)return null;const n=a=>{const u=1-a.errors/e.length,f=t.prefix?Ce(r.slice(Math.max(0,a.start-t.prefix.length),a.start),t.prefix):1,g=t.suffix?Ce(r.slice(a.end,a.end+t.suffix.length),t.suffix):1;let m=1;typeof t.hint=="number"&&(m=1-Math.abs(a.start-t.hint)/r.length);const v=50*u+20*f+20*g+2*m,w=50+20+20+2;return v/w},o=s.map(a=>({start:a.start,end:a.end,score:n(a)}));return o.sort((a,c)=>c.score-a.score),o[0]}function ne(r,e,t){const i=t===1?e:e-1;if(r.charAt(i).trim()!=="")return e;let s,n;if(t===2?(s=r.substring(0,e),n=s.trimEnd()):(s=r.substring(e),n=s.trimStart()),!n.length)return-1;const o=s.length-n.length;return t===2?e-o:e+o}function Pe(r,e){const t=r.commonAncestorContainer.ownerDocument.createNodeIterator(r.commonAncestorContainer,NodeFilter.SHOW_TEXT),i=e===1?r.startContainer:r.endContainer,s=e===1?r.endContainer:r.startContainer;let n=t.nextNode();for(;n&&n!==i;)n=t.nextNode();e===2&&(n=t.previousNode());let o=-1;const a=()=>{if(n=e===1?t.nextNode():t.previousNode(),n){const c=n.textContent,h=e===1?0:c.length;o=ne(c,h,e)}};for(;n&&o===-1&&n!==s;)a();if(n&&o>=0)return{node:n,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function Tt(r){if(!r.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(r.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(r.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=r.cloneRange();let t=!1,i=!1;const s={start:ne(r.startContainer.textContent,r.startOffset,1),end:ne(r.endContainer.textContent,r.endOffset,2)};if(s.start>=0&&(e.setStart(r.startContainer,s.start),t=!0),s.end>0&&(e.setEnd(r.endContainer,s.end),i=!0),t&&i)return e;if(!t){const{node:n,offset:o}=Pe(e,1);n&&o>=0&&e.setStart(n,o)}if(!i){const{node:n,offset:o}=Pe(e,2);n&&o>0&&e.setEnd(n,o)}return e}function Ne(r){var e;switch(r.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return((e=r.textContent)==null?void 0:e.length)??0;default:return 0}}function Me(r){let e=r.previousSibling,t=0;for(;e;)t+=Ne(e),e=e.previousSibling;return t}function Oe(r,...e){let t=e.shift();const i=r.ownerDocument.createNodeIterator(r,NodeFilter.SHOW_TEXT),s=[];let n=i.nextNode(),o,a=0;for(;t!==void 0&&n;)o=n,a+o.data.length>t?(s.push({node:o,offset:t-a}),t=e.shift()):(n=i.nextNode(),a+=o.data.length);for(;t!==void 0&&o&&a===t;)s.push({node:o,offset:o.data.length}),t=e.shift();if(t!==void 0)throw new RangeError("Offset exceeds text length");return s}class A{constructor(e,t){if(t<0)throw new Error("Offset is invalid");this.element=e,this.offset=t}relativeTo(e){if(!e.contains(this.element))throw new Error("Parent is not an ancestor of current element");let t=this.element,i=this.offset;for(;t!==e;)i+=Me(t),t=t.parentElement;return new A(t,i)}resolve(e={}){try{return Oe(this.element,this.offset)[0]}catch(t){if(this.offset===0&&e.direction!==void 0){const i=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);i.currentNode=this.element;const s=e.direction===1,n=s?i.nextNode():i.previousNode();if(!n)throw t;return{node:n,offset:s?0:n.data.length}}else throw t}}static fromCharOffset(e,t){switch(e.nodeType){case Node.TEXT_NODE:return A.fromPoint(e,t);case Node.ELEMENT_NODE:return new A(e,t);default:throw new Error("Node is not an element or text node")}}static fromPoint(e,t){switch(e.nodeType){case Node.TEXT_NODE:{if(t<0||t>e.data.length)throw new Error("Text node offset is out of range");if(!e.parentElement)throw new Error("Text node has no parent");const i=Me(e)+t;return new A(e.parentElement,i)}case Node.ELEMENT_NODE:{if(t<0||t>e.childNodes.length)throw new Error("Child node offset is out of range");let i=0;for(let s=0;s<t;s++)i+=Ne(e.childNodes[s]);return new A(e,i)}default:throw new Error("Point is not in an element or text node")}}}class D{constructor(e,t){this.start=e,this.end=t}relativeTo(e){return new D(this.start.relativeTo(e),this.end.relativeTo(e))}toRange(){let e,t;this.start.element===this.end.element&&this.start.offset<=this.end.offset?[e,t]=Oe(this.start.element,this.start.offset,this.end.offset):(e=this.start.resolve({direction:1}),t=this.end.resolve({direction:2}));const i=new Range;return i.setStart(e.node,e.offset),i.setEnd(t.node,t.offset),i}static fromRange(e){const t=A.fromPoint(e.startContainer,e.startOffset),i=A.fromPoint(e.endContainer,e.endOffset);return new D(t,i)}static fromOffsets(e,t,i){return new D(new A(e,t),new A(e,i))}static trimmedRange(e){return Tt(D.fromRange(e).toRange())}}class G{constructor(e,t,i){this.root=e,this.start=t,this.end=i}static fromRange(e,t){const i=D.fromRange(t).relativeTo(e);return new G(e,i.start.offset,i.end.offset)}static fromSelector(e,t){return new G(e,t.start,t.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return D.fromOffsets(this.root,this.start,this.end).toRange()}}class Y{constructor(e,t,i={}){this.root=e,this.exact=t,this.context=i}static fromRange(e,t){const i=e.textContent,s=D.fromRange(t).relativeTo(e),n=s.start.offset,o=s.end.offset,a=32;return new Y(e,i.slice(n,o),{prefix:i.slice(Math.max(0,n-a),n),suffix:i.slice(o,Math.min(i.length,o+a))})}static fromSelector(e,t){const{prefix:i,suffix:s}=t;return new Y(e,t.exact,{prefix:i,suffix:s})}toSelector(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}toRange(e={}){return this.toPositionAnchor(e).toRange()}toPositionAnchor(e={}){const t=this.root.textContent,i=wt(t,this.exact,{...this.context,hint:e.hint});if(!i)throw new Error("Quote not found");return new G(this.root,i.start,i.end)}}function Ct(r){const e=r.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function oe(r,e){try{const t=e.locations,i=e.text;if(i&&i.highlight){let s;t&&t.getCssSelector()&&(s=r.querySelector(t.getCssSelector())),s||(s=r.body);const n=new Y(s,i.highlight,{prefix:i.before,suffix:i.after});try{return n.toRange()}catch{return console.warn("Quote not found:",n),null}}if(t){let s=null;if(!s&&t.getCssSelector()&&(s=r.querySelector(t.getCssSelector())),!s&&t.fragments){for(const n of t.fragments)if(s=r.getElementById(n),s)break}if(s){const n=r.createRange();return s.childNodes.length===0||Ct(s)?(n.selectNode(s),n):(n.setStartBefore(s),n.setEndAfter(s),n)}}}catch(t){console.error(t)}return null}function Pt(r,e){let t=r.getClientRects();t.length||r.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(t=r.commonAncestorContainer.getClientRects());const i=1,s=[];for(const h of t)s.push({bottom:h.bottom,height:h.height,left:h.left,right:h.right,top:h.top,width:h.width});const n=Ae(s,i,e),o=Mt(n,i),a=Ie(o),c=2*2;for(let h=a.length-1;h>=0;h--){const d=a[h];if(!(d.width*d.height>c))if(a.length>1)a.splice(h,1);else break}return a}function Ae(r,e,t){for(let i=0;i<r.length;i++)for(let s=i+1;s<r.length;s++){const n=r[i],o=r[s];if(n===o)continue;const a=M(n.top,o.top,e)&&M(n.bottom,o.bottom,e),c=M(n.left,o.left,e)&&M(n.right,o.right,e);if((c&&!t||a&&!c)&&Re(n,o,e)){const u=r.filter(g=>g!==n&&g!==o),f=Nt(n,o);return u.push(f),Ae(u,e,t)}}return r}function Nt(r,e){const t=Math.min(r.left,e.left),i=Math.max(r.right,e.right),s=Math.min(r.top,e.top),n=Math.max(r.bottom,e.bottom);return{bottom:n,height:n-s,left:t,right:i,top:s,width:i-t}}function Mt(r,e){const t=new Set(r);for(const i of r){if(!(i.width>1&&i.height>1)){t.delete(i);continue}for(const n of r)if(i!==n&&t.has(n)&&Ot(n,i,e)){t.delete(i);break}}return Array.from(t)}function Ot(r,e,t){return K(r,e.left,e.top,t)&&K(r,e.right,e.top,t)&&K(r,e.left,e.bottom,t)&&K(r,e.right,e.bottom,t)}function K(r,e,t,i){return(r.left<e||M(r.left,e,i))&&(r.right>e||M(r.right,e,i))&&(r.top<t||M(r.top,t,i))&&(r.bottom>t||M(r.bottom,t,i))}function Ie(r){for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){const i=r[e],s=r[t];if(i!==s&&Re(i,s,-1)){let n=[],o;const a=Le(i,s);if(a.length===1)n=a,o=i;else{const h=Le(s,i);a.length<h.length?(n=a,o=i):(n=h,o=s)}const c=r.filter(h=>h!==o);return Array.prototype.push.apply(c,n),Ie(c)}}return r}function Le(r,e){const t=At(e,r);if(t.height===0||t.width===0)return[r];const i=[];{const s={bottom:r.bottom,height:0,left:r.left,right:t.left,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:t.top,height:0,left:t.left,right:t.right,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:r.bottom,height:0,left:t.left,right:t.right,top:t.bottom,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:r.bottom,height:0,left:t.right,right:r.right,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}return i}function At(r,e){const t=Math.max(r.left,e.left),i=Math.min(r.right,e.right),s=Math.max(r.top,e.top),n=Math.min(r.bottom,e.bottom);return{bottom:n,height:Math.max(0,n-s),left:t,right:i,top:s,width:Math.max(0,i-t)}}function Re(r,e,t){return(r.left<e.right||t>=0&&M(r.left,e.right,t))&&(e.left<r.right||t>=0&&M(e.left,r.right,t))&&(r.top<e.bottom||t>=0&&M(r.top,e.bottom,t))&&(e.top<r.bottom||t>=0&&M(e.top,r.bottom,t))}function M(r,e,t){return Math.abs(r-e)<=t}function ze(r){const e={},t=r.document.documentElement.style;for(const i in r.document.documentElement.style)Object.hasOwn(t,i)&&!Number.isNaN(Number.parseInt(i))&&(e[t[i]]=t.getPropertyValue(t[i]));return e}function It(r,e){const t=ze(r);Object.keys(t).forEach(i=>{e.hasOwnProperty(i)||ae(r,i)}),Object.entries(e).forEach(([i,s])=>{t[i]!==s&&Z(r,i,s)})}function De(r,e){return r.document.documentElement.style.getPropertyValue(e)}function Z(r,e,t){r.document.documentElement.style.setProperty(e,t)}function ae(r,e){r.document.documentElement.style.removeProperty(e)}const Lt=r=>{if(r.startsWith("rgb")){const e=r.match(/rgb\((\d+),\s(\d+),\s(\d+)(?:,\s(\d+))?\)/);if(e)return{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10),a:e[4]?parseInt(e[4],10)/255:1}}else if(r.startsWith("#")){const e=r.slice(1);if(e.length===3||e.length===4)return{r:parseInt(e[0]+e[0],16)/255,g:parseInt(e[1]+e[1],16)/255,b:parseInt(e[2]+e[2],16)/255,a:e.length===4?parseInt(e[3]+e[3],16)/255:1};if(e.length===6||e.length===8)return{r:parseInt(e[0]+e[1],16)/255,g:parseInt(e[2]+e[3],16)/255,b:parseInt(e[4]+e[5],16)/255,a:e.length===8?parseInt(e[6]+e[7],16)/255:1}}return{r:0,g:0,b:0,a:1}},Rt=r=>.2126*r.r*r.a+.7152*r.g*r.a+.0722*r.b*r.a,zt=r=>{const e=Lt(r);return Rt(e)<128};var We=(r=>(r.Wrap="wrap",r.Viewport="viewport",r.Bounds="bounds",r.Page="page",r))(We||{}),Fe=(r=>(r.Boxes="boxes",r.Bounds="bounds",r))(Fe||{});const Dt="Highlight"in window,Be=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Wt{constructor(e,t,i,s){this.wnd=e,this.comms=t,this.id=i,this.name=s,this.items=[],this.lastItemId=0,this.container=void 0,this.activateable=!1,this.experimentalHighlights=!1,this.currentRender=0,Dt&&(this.experimentalHighlights=!0,this.notTextFlag=new Map)}get activeable(){return this.activateable}set activeable(e){this.activateable=e}add(e){var o,a,c,h;const t=`${this.id}-${this.lastItemId++}`,i=oe(this.wnd.document,e.locator);if(!i){this.comms.log("Can't locate DOM range for decoration",e);return}const s=i.commonAncestorContainer;s.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&(Be.includes(s.nodeName.toUpperCase())&&((o=this.notTextFlag)==null||o.set(t,!0)),s.querySelector(Be.join(", ").toLowerCase())&&((a=this.notTextFlag)==null||a.set(t,!0)),(((c=s.textContent)==null?void 0:c.trim())||"").length===0&&((h=this.notTextFlag)==null||h.set(t,!0)));const n={decoration:e,id:t,range:i};this.items.push(n),this.layout(n),this.renderLayout([n])}remove(e){var s,n;const t=this.items.findIndex(o=>o.decoration.id===e);if(t<0)return;const i=this.items[t];if(this.items.splice(t,1),i.clickableElements=void 0,i.container&&(i.container.remove(),i.container=void 0),this.experimentalHighlights&&!((s=this.notTextFlag)!=null&&s.has(i.id))){const o=this.wnd.CSS.highlights.get(this.id);o==null||o.delete(i.range)}(n=this.notTextFlag)==null||n.delete(i.id)}update(e){this.remove(e.id),this.add(e)}clear(){var e;this.clearContainer(),this.items.length=0,(e=this.notTextFlag)==null||e.clear()}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.items.forEach(e=>this.layout(e)),this.renderLayout(this.items)}experimentalLayout(e){var s,n;const[t,i]=this.requireContainer(!0);i.add(e.range),t.innerHTML=`
1
+ (function(b,H){typeof exports=="object"&&typeof module<"u"?H(exports):typeof define=="function"&&define.amd?define(["exports"],H):(b=typeof globalThis<"u"?globalThis:b||self,H(b["navigator-html-injectables"]={}))})(this,function(b){"use strict";const H=Math.pow(2,32),ge=()=>Math.round(Math.random()*H).toString(36),ye=()=>`${Math.round(performance.now())}-${ge()}-${ge()}`,$=1;class ve{constructor(e){this.destination=null,this.registrar=new Map,this.origin="",this.channelId="",this.receiver=this.receive.bind(this),this.preLog=[],this.wnd=e,e.addEventListener("message",this.receiver)}receive(e){if(e.source===null)throw Error("Event source is null");if(typeof e.data!="object")return;const t=e.data;if(!(!("_readium"in t)||!t._readium||t._readium<=0)){if(t.key==="_ping"){if(!this.destination){if(this.destination=e.source,this.origin=e.origin,this.channelId=t._channel,t._readium!==$){t._readium>$?this.send("error",`received comms version ${t._readium} higher than ${$}`):this.send("error",`received comms version ${t._readium} lower than ${$}`),this.destination=null,this.origin="",this.channelId="";return}this.send("_pong",void 0),this.preLog.forEach(i=>this.send("log",i)),this.preLog=[]}return}else if(this.channelId){if(t._channel!==this.channelId||e.origin!==this.origin)return}else return;this.handle(t)}}handle(e){const t=this.registrar.get(e.key);if(!t||t.length===0){e.strict&&this.send("_unhandled",e);return}t.forEach(i=>i.cb(e.data,n=>{this.send("_ack",n,e.id)}))}register(e,t,i){Array.isArray(e)||(e=[e]),e.forEach(n=>{const s=this.registrar.get(n);if(s&&s.length>=0){if(s.find(l=>l.module===t))throw new Error(`Trying to register another callback for combination of event ${n} and module ${t}`);s.push({cb:i,module:t}),this.registrar.set(n,s)}else this.registrar.set(n,[{cb:i,module:t}])})}unregister(e,t){Array.isArray(e)||(e=[e]),e.forEach(i=>{const n=this.registrar.get(i);!n||n.length===0||n.splice(n.findIndex(s=>s.module===t),1)})}unregisterAll(e){this.registrar.forEach((t,i)=>this.registrar.set(i,t.filter(n=>n.module!==e)))}log(...e){this.destination?this.send("log",e):this.preLog.push(e)}get ready(){return!!this.destination}destroy(){this.destination=null,this.channelId="",this.preLog=[],this.registrar.clear(),this.wnd.removeEventListener("message",this.receiver)}send(e,t,i=void 0,n=[]){if(!this.destination)throw Error("Attempted to send comms message before destination has been initialized");const s={_readium:$,_channel:this.channelId,id:i??ye(),key:e,data:t};try{this.destination.postMessage(s,{targetOrigin:this.origin,transfer:n})}catch(o){if(n.length>0)throw o;this.destination.postMessage(s,this.origin,n)}}}const I=class V{constructor(e){if(typeof e=="string"){if(!V.VALID_MODES.has(e.toLowerCase()))return;this.value=e.toLowerCase()}else{const t=e.filter(i=>V.VALID_MODES.has(i.toLowerCase()));if(t.length===0)return;this.value=Array.from(new Set(t))}}static deserialize(e){if(!e)return;if(typeof e=="string")return new V(e);if(!Array.isArray(e))return;const t=e.filter(i=>i?V.VALID_MODES.has(i.toLowerCase()):!1);if(t.length!==0)return new V(t)}serialize(){return this.value}};I.VALID_MODES=new Set(["auditory","tactile","textual","visual"]),I.AUDITORY=new I("auditory"),I.TACTILE=new I("tactile"),I.TEXTUAL=new I("textual"),I.VISUAL=new I("visual");class E{constructor(e){this.otherProperties=e}static deserialize(e){if(e)return new E(e)}serialize(){return this.otherProperties}add(e){const t=Object.assign({},this.otherProperties);for(const i in e)t[i]=e[i];return new E(t)}}E.prototype.getContains=function(){return new Set(this.otherProperties.contains||[])},E.prototype.getLayout=function(){return this.otherProperties.layout};class a{constructor(e){let t,i,n=e.mediaType.replace(/\s/g,"").split(";");const s=n[0].split("/");if(s.length===2){if(t=s[0].toLowerCase().trim(),i=s[1].toLowerCase().trim(),t.length===0||i.length===0)throw new Error("Invalid media type")}else throw new Error("Invalid media type");const o={};for(let d=1;d<n.length;d++){const f=n[d].split("=");if(f.length===2){const g=f[0].toLocaleLowerCase(),m=g==="charset"?f[1].toUpperCase():f[1];o[g]=m}}const l={},c=Object.keys(o);c.sort((d,f)=>d.localeCompare(f)),c.forEach(d=>l[d]=o[d]);let h="";for(const d in l){const f=l[d];h+=`;${d}=${f}`}const u=`${t}/${i}${h}`,p=l.encoding;this.string=u,this.type=t,this.subtype=i,this.parameters=l,this.encoding=p,this.name=e.name,this.fileExtension=e.fileExtension}static parse(e){return new a(e)}get structuredSyntaxSuffix(){const e=this.subtype.split("+");return e.length>1?`+${e[e.length-1]}`:void 0}get charset(){return this.parameters.charset}contains(e){const t=typeof e=="string"?a.parse({mediaType:e}):e;if(!((this.type==="*"||this.type===t.type)&&(this.subtype==="*"||this.subtype===t.subtype)))return!1;const i=new Set(Object.entries(this.parameters).map(([s,o])=>`${s}=${o}`)),n=new Set(Object.entries(t.parameters).map(([s,o])=>`${s}=${o}`));for(const s of Array.from(i.values()))if(!n.has(s))return!1;return!0}matches(e){const t=typeof e=="string"?a.parse({mediaType:e}):e;return this.contains(t)||t.contains(this)}matchesAny(...e){for(const t of e)if(this.matches(t))return!0;return!1}equals(e){return this.string===e.string}get isZIP(){return this.matchesAny(a.ZIP,a.LCP_PROTECTED_AUDIOBOOK,a.LCP_PROTECTED_PDF)||this.structuredSyntaxSuffix==="+zip"}get isJSON(){return this.matchesAny(a.JSON)||this.structuredSyntaxSuffix==="+json"}get isOPDS(){return this.matchesAny(a.OPDS1,a.OPDS1_ENTRY,a.OPDS2,a.OPDS2_PUBLICATION,a.OPDS_AUTHENTICATION)||this.structuredSyntaxSuffix==="+json"}get isHTML(){return this.matchesAny(a.HTML,a.XHTML)}get isBitmap(){return this.matchesAny(a.BMP,a.GIF,a.JPEG,a.PNG,a.TIFF,a.WEBP)}get isAudio(){return this.type==="audio"}get isVideo(){return this.type==="video"}get isRWPM(){return this.matchesAny(a.READIUM_AUDIOBOOK_MANIFEST,a.DIVINA_MANIFEST,a.READIUM_WEBPUB_MANIFEST)}get isPublication(){return this.matchesAny(a.READIUM_AUDIOBOOK,a.READIUM_AUDIOBOOK_MANIFEST,a.CBZ,a.DIVINA,a.DIVINA_MANIFEST,a.EPUB,a.LCP_PROTECTED_AUDIOBOOK,a.LCP_PROTECTED_PDF,a.LPF,a.PDF,a.W3C_WPUB_MANIFEST,a.READIUM_WEBPUB,a.READIUM_WEBPUB_MANIFEST,a.ZAB)}static get AAC(){return a.parse({mediaType:"audio/aac",fileExtension:"aac"})}static get ACSM(){return a.parse({mediaType:"application/vnd.adobe.adept+xml",name:"Adobe Content Server Message",fileExtension:"acsm"})}static get AIFF(){return a.parse({mediaType:"audio/aiff",fileExtension:"aiff"})}static get AVI(){return a.parse({mediaType:"video/x-msvideo",fileExtension:"avi"})}static get BINARY(){return a.parse({mediaType:"application/octet-stream"})}static get BMP(){return a.parse({mediaType:"image/bmp",fileExtension:"bmp"})}static get CBZ(){return a.parse({mediaType:"application/vnd.comicbook+zip",name:"Comic Book Archive",fileExtension:"cbz"})}static get CSS(){return a.parse({mediaType:"text/css",fileExtension:"css"})}static get DIVINA(){return a.parse({mediaType:"application/divina+zip",name:"Digital Visual Narratives",fileExtension:"divina"})}static get DIVINA_MANIFEST(){return a.parse({mediaType:"application/divina+json",name:"Digital Visual Narratives",fileExtension:"json"})}static get EPUB(){return a.parse({mediaType:"application/epub+zip",name:"EPUB",fileExtension:"epub"})}static get GIF(){return a.parse({mediaType:"image/gif",fileExtension:"gif"})}static get GZ(){return a.parse({mediaType:"application/gzip",fileExtension:"gz"})}static get HTML(){return a.parse({mediaType:"text/html",fileExtension:"html"})}static get JAVASCRIPT(){return a.parse({mediaType:"text/javascript",fileExtension:"js"})}static get JPEG(){return a.parse({mediaType:"image/jpeg",fileExtension:"jpeg"})}static get JSON(){return a.parse({mediaType:"application/json"})}static get LCP_LICENSE_DOCUMENT(){return a.parse({mediaType:"application/vnd.readium.lcp.license.v1.0+json",name:"LCP License",fileExtension:"lcpl"})}static get LCP_PROTECTED_AUDIOBOOK(){return a.parse({mediaType:"application/audiobook+lcp",name:"LCP Protected Audiobook",fileExtension:"lcpa"})}static get LCP_PROTECTED_PDF(){return a.parse({mediaType:"application/pdf+lcp",name:"LCP Protected PDF",fileExtension:"lcpdf"})}static get LCP_STATUS_DOCUMENT(){return a.parse({mediaType:"application/vnd.readium.license.status.v1.0+json"})}static get LPF(){return a.parse({mediaType:"application/lpf+zip",fileExtension:"lpf"})}static get MP3(){return a.parse({mediaType:"audio/mpeg",fileExtension:"mp3"})}static get MPEG(){return a.parse({mediaType:"video/mpeg",fileExtension:"mpeg"})}static get NCX(){return a.parse({mediaType:"application/x-dtbncx+xml",fileExtension:"ncx"})}static get OGG(){return a.parse({mediaType:"audio/ogg",fileExtension:"oga"})}static get OGV(){return a.parse({mediaType:"video/ogg",fileExtension:"ogv"})}static get OPDS1(){return a.parse({mediaType:"application/atom+xml;profile=opds-catalog"})}static get OPDS1_ENTRY(){return a.parse({mediaType:"application/atom+xml;type=entry;profile=opds-catalog"})}static get OPDS2(){return a.parse({mediaType:"application/opds+json"})}static get OPDS2_PUBLICATION(){return a.parse({mediaType:"application/opds-publication+json"})}static get OPDS_AUTHENTICATION(){return a.parse({mediaType:"application/opds-authentication+json"})}static get OPUS(){return a.parse({mediaType:"audio/opus",fileExtension:"opus"})}static get OTF(){return a.parse({mediaType:"font/otf",fileExtension:"otf"})}static get PDF(){return a.parse({mediaType:"application/pdf",name:"PDF",fileExtension:"pdf"})}static get PNG(){return a.parse({mediaType:"image/png",fileExtension:"png"})}static get READIUM_AUDIOBOOK(){return a.parse({mediaType:"application/audiobook+zip",name:"Readium Audiobook",fileExtension:"audiobook"})}static get READIUM_AUDIOBOOK_MANIFEST(){return a.parse({mediaType:"application/audiobook+json",name:"Readium Audiobook",fileExtension:"json"})}static get READIUM_CONTENT_DOCUMENT(){return a.parse({mediaType:"application/vnd.readium.content+json",name:"Readium Content Document",fileExtension:"json"})}static get READIUM_GUIDED_NAVIGATION_DOCUMENT(){return a.parse({mediaType:"application/guided-navigation+json",name:"Readium Guided Navigation Document",fileExtension:"json"})}static get READIUM_POSITION_LIST(){return a.parse({mediaType:"application/vnd.readium.position-list+json",name:"Readium Position List",fileExtension:"json"})}static get READIUM_WEBPUB(){return a.parse({mediaType:"application/webpub+zip",name:"Readium Web Publication",fileExtension:"webpub"})}static get READIUM_WEBPUB_MANIFEST(){return a.parse({mediaType:"application/webpub+json",name:"Readium Web Publication",fileExtension:"json"})}static get SMIL(){return a.parse({mediaType:"application/smil+xml",fileExtension:"smil"})}static get SVG(){return a.parse({mediaType:"image/svg+xml",fileExtension:"svg"})}static get TEXT(){return a.parse({mediaType:"text/plain",fileExtension:"txt"})}static get TIFF(){return a.parse({mediaType:"image/tiff",fileExtension:"tiff"})}static get TTF(){return a.parse({mediaType:"font/ttf",fileExtension:"ttf"})}static get W3C_WPUB_MANIFEST(){return a.parse({mediaType:"application/x.readium.w3c.wpub+json",name:"Web Publication",fileExtension:"json"})}static get WAV(){return a.parse({mediaType:"audio/wav",fileExtension:"wav"})}static get WEBM_AUDIO(){return a.parse({mediaType:"audio/webm",fileExtension:"webm"})}static get WEBM_VIDEO(){return a.parse({mediaType:"video/webm",fileExtension:"webm"})}static get WEBP(){return a.parse({mediaType:"image/webp",fileExtension:"webp"})}static get WOFF(){return a.parse({mediaType:"font/woff",fileExtension:"woff"})}static get WOFF2(){return a.parse({mediaType:"font/woff2",fileExtension:"woff2"})}static get XHTML(){return a.parse({mediaType:"application/xhtml+xml",fileExtension:"xhtml"})}static get XML(){return a.parse({mediaType:"application/xml",fileExtension:"xml"})}static get ZAB(){return a.parse({mediaType:"application/x.readium.zab+zip",name:"Zipped Audio Book",fileExtension:"zab"})}static get ZIP(){return a.parse({mediaType:"application/zip",fileExtension:"zip"})}}class Ee{constructor(e){this.uri=e,this.parameters=this.getParameters(e)}getParameters(e){const t=/\{\??([^}]+)\}/g,i=e.match(t);return i?new Set(i.join(",").replace(t,"$1").split(",").map(n=>n.trim())):new Set}expand(e){const t=n=>n.split(",").map(s=>{const o=e[s];return o?encodeURIComponent(o):""}).join(","),i=n=>"?"+n.split(",").map(s=>{const o=s.split("=")[0],l=e[o];return l?`${o}=${encodeURIComponent(l)}`:""}).join("&");return this.uri.replace(/\{(\??)([^}]+)\}/g,(...n)=>n[1]?i(n[2]):t(n[2]))}}function ft(r){return r&&r instanceof Array?r:void 0}function be(r){return r&&typeof r=="string"?[r]:ft(r)}function xe(r){return typeof r=="string"?new Date(r):void 0}function X(r){return isNaN(r)?void 0:r}function C(r){return X(r)!==void 0&&Math.sign(r)>=0?r:void 0}function mt(r){const e=new Array;return r.forEach(t=>e.push(t)),e}class x{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const t=X(e.progression),i=X(e.totalProgression),n=X(e.position),s=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position"]);return Object.entries(e).forEach(([l,c])=>{o.has(l)||s.set(l,c)}),new x({fragments:be(e.fragments||e.fragment),progression:t!==void 0&&t>=0&&t<=1?t:void 0,totalProgression:i!==void 0&&i>=0&&i<=1?i:void 0,position:n!==void 0&&n>0?n:void 0,otherLocations:s.size===0?void 0:s})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((t,i)=>e[i]=t),e}}class k{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new k({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}}class D{constructor(e){this.href=e.href,this.type=e.type,this.title=e.title,this.locations=e.locations?e.locations:new x({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new D({href:e.href,type:e.type,title:e.title,locations:x.deserialize(e.locations),text:k.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new D({href:this.href,type:this.type,title:this.title,text:this.text,locations:new x({...this.locations,...e})})}}class j{constructor(e){this.href=e.href,this.templated=e.templated,this.type=e.type,this.title=e.title,this.rels=e.rels,this.properties=e.properties,this.height=e.height,this.width=e.width,this.duration=e.duration,this.bitrate=e.bitrate,this.languages=e.languages,this.alternates=e.alternates,this.children=e.children}static deserialize(e){if(!(!e||typeof e.href!="string"))return new j({href:e.href,templated:e.templated,type:e.type,title:e.title,rels:e.rel?e.rel instanceof Array?new Set(e.rel):new Set([e.rel]):void 0,properties:E.deserialize(e.properties),height:C(e.height),width:C(e.width),duration:C(e.duration),bitrate:C(e.bitrate),languages:be(e.language),alternates:G.deserialize(e.alternate),children:G.deserialize(e.children)})}serialize(){const e={href:this.href};return this.templated!==void 0&&(e.templated=this.templated),this.type!==void 0&&(e.type=this.type),this.title!==void 0&&(e.title=this.title),this.rels&&(e.rel=mt(this.rels)),this.properties&&(e.properties=this.properties.serialize()),this.height!==void 0&&(e.height=this.height),this.width!==void 0&&(e.width=this.width),this.duration!==void 0&&(e.duration=this.duration),this.bitrate!==void 0&&(e.bitrate=this.bitrate),this.languages&&(e.language=this.languages),this.alternates&&(e.alternate=this.alternates.serialize()),this.children&&(e.children=this.children.serialize()),e}get mediaType(){return this.type!==void 0?a.parse({mediaType:this.type}):a.BINARY}toURL(e){const t=this.href.replace(/^(\/)/,"");if(t.length===0)return;let i=e||"/";return i.startsWith("/")&&(i="file://"+i),new URL(t,i).href.replace(/^(file:\/\/)/,"")}get templateParameters(){return this.templated?new Ee(this.href).parameters:new Set}expandTemplate(e){return new j({href:new Ee(this.href).expand(e),templated:!1})}addProperties(e){var t;const i=j.deserialize(this.serialize());return i.properties=i.properties?(t=i.properties)==null?void 0:t.add(e):new E(e),i}get locator(){let e=this.href.split("#");return new D({href:e.length>0&&e[0]!==void 0?e[0]:this.href,type:this.type??"",title:this.title,locations:new x({fragments:e.length>1&&e[1]!==void 0?[e[1]]:[]})})}}class G{constructor(e){this.items=e}static deserialize(e){if(e&&e instanceof Array)return new G(e.map(t=>j.deserialize(t)).filter(t=>t!==void 0))}serialize(){return this.items.map(e=>e.serialize())}findWithRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.find(t)}filterByRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.filter(t)}findWithHref(e){const t=i=>i.href===e;return this.items.find(t)}findIndexWithHref(e){const t=i=>i.href===e;return this.items.findIndex(t)}findWithMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.find(t)}filterByMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.filter(t)}filterByMediaTypes(e){const t=i=>{for(const n of e)if(i.mediaType.matches(n))return!0;return!1};return this.items.filter(t)}everyIsAudio(){const e=t=>t.mediaType.isAudio;return this.items.length>0&&this.items.every(e)}everyIsBitmap(){const e=t=>t.mediaType.isBitmap;return this.items.length>0&&this.items.every(e)}everyIsHTML(){const e=t=>t.mediaType.isHTML;return this.items.length>0&&this.items.every(e)}everyIsVideo(){const e=t=>t.mediaType.isVideo;return this.items.length>0&&this.items.every(e)}everyMatchesMediaType(e){return Array.isArray(e)?this.items.length>0&&this.items.every(t=>{for(const i of e)return t.mediaType.matches(i);return!1}):this.items.length>0&&this.items.every(t=>t.mediaType.matches(e))}filterLinksHasType(){return this.items.filter(e=>e.type)}}class ee{constructor(e){this.algorithm=e.algorithm,this.compression=e.compression,this.originalLength=e.originalLength,this.profile=e.profile,this.scheme=e.scheme}static deserialize(e){if(e&&e.algorithm)return new ee({algorithm:e.algorithm,compression:e.compression,originalLength:e.originalLength,profile:e.profile,scheme:e.scheme})}serialize(){const e={algorithm:this.algorithm};return this.compression!==void 0&&(e.compression=this.compression),this.originalLength!==void 0&&(e.originalLength=this.originalLength),this.profile!==void 0&&(e.profile=this.profile),this.scheme!==void 0&&(e.scheme=this.scheme),e}}Object.defineProperty(E.prototype,"encryption",{get:function(){return ee.deserialize(this.otherProperties.encrypted)}});class Y{constructor(e){this.cssSelector=e.cssSelector,this.textNodeIndex=e.textNodeIndex,this.charOffset=e.charOffset}static deserialize(e){if(!(e&&e.cssSelector))return;let t=C(e.textNodeIndex);if(t===void 0)return;let i=C(e.charOffset);return i===void 0&&(i=C(e.offset)),new Y({cssSelector:e.cssSelector,textNodeIndex:t,charOffset:i})}serialize(){const e={cssSelector:this.cssSelector,textNodeIndex:this.textNodeIndex};return this.charOffset!==void 0&&(e.charOffset=this.charOffset),e}}class te{constructor(e){this.start=e.start,this.end=e.end}static deserialize(e){if(!e)return;let t=Y.deserialize(e.start);if(t)return new te({start:t,end:Y.deserialize(e.end)})}serialize(){const e={start:this.start.serialize()};return this.end&&(e.end=this.end.serialize()),e}}x.prototype.getCssSelector=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("cssSelector")},x.prototype.getPartialCfi=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("partialCfi")},x.prototype.getDomRange=function(){var r;return te.deserialize((r=this.otherLocations)==null?void 0:r.get("domRange"))},x.prototype.fragmentParameters=function(){return new Map(this.fragments.map(r=>r.startsWith("#")?r.slice(1):r).join("&").split("&").filter(r=>!r.startsWith("#")).map(r=>r.split("=")).filter(r=>r.length===2).map(r=>[r[0].trim().toLowerCase(),r[1].trim()]))},x.prototype.htmlId=function(){if(!this.fragments.length)return;let r=this.fragments.find(e=>e.length&&!e.includes("="));if(!r){const e=this.fragmentParameters();e.has("id")?r=e.get("id"):e.has("name")&&(r=e.get("name"))}return r!=null&&r.startsWith("#")?r.slice(1):r},x.prototype.page=function(){const r=parseInt(this.fragmentParameters().get("page"));if(!isNaN(r)&&r>=0)return r},x.prototype.time=function(){const r=parseInt(this.fragmentParameters().get("t"));if(!isNaN(r))return r},x.prototype.space=function(){const r=this.fragmentParameters();if(!r.has("xywh"))return;const e=r.get("xywh").split(",").map(t=>parseInt(t));if(e.length===4&&!e.some(isNaN))return e};class ie{constructor(e){this.currency=e.currency,this.value=e.value}static deserialize(e){if(!e)return;let t=e.currency;if(!(t&&typeof t=="string"&&t.length>0))return;let i=C(e.value);if(i!==void 0)return new ie({currency:t,value:i})}serialize(){return{currency:this.currency,value:this.value}}}class q{constructor(e){this.type=e.type,this.children=e.children}static deserialize(e){if(e&&e.type)return new q({type:e.type,children:q.deserializeArray(e.children)})}static deserializeArray(e){if(e instanceof Array)return e.map(t=>q.deserialize(t)).filter(t=>t!==void 0)}serialize(){const e={type:this.type};return this.children&&(e.children=this.children.map(t=>t.serialize())),e}}class re{constructor(e){this.total=e.total,this.position=e.position}static deserialize(e){if(e)return new re({total:C(e.total),position:C(e.position)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.position!==void 0&&(e.position=this.position),e}}class ne{constructor(e){this.total=e.total,this.available=e.available}static deserialize(e){if(e)return new ne({total:C(e.total),available:C(e.available)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.available!==void 0&&(e.available=this.available),e}}class se{constructor(e){this.state=e.state,this.since=e.since,this.until=e.until}static deserialize(e){if(e&&e.state)return new se({state:e.state,since:xe(e.since),until:xe(e.until)})}serialize(){const e={state:this.state};return this.since!==void 0&&(e.since=this.since.toISOString()),this.until!==void 0&&(e.until=this.until.toISOString()),e}}E.prototype.getNumberOfItems=function(){return C(this.otherProperties.numberOfItems)},E.prototype.getPrice=function(){return ie.deserialize(this.otherProperties.price)},E.prototype.getIndirectAcquisitions=function(){const r=this.otherProperties.indirectAcquisition;if(r&&r instanceof Array)return r.map(e=>q.deserialize(e)).filter(e=>e!==void 0)},E.prototype.getHolds=function(){return re.deserialize(this.otherProperties.holds)},E.prototype.getCopies=function(){return ne.deserialize(this.otherProperties.copies)},E.prototype.getAvailability=function(){return se.deserialize(this.otherProperties.availability)},E.prototype.getAuthenticate=function(){return j.deserialize(this.otherProperties.authenticate)},E.prototype.getClipped=function(){return this.otherProperties.clipped},E.prototype.getFit=function(){return this.otherProperties.fit},E.prototype.getOrientation=function(){return this.otherProperties.orientation},E.prototype.getOverflow=function(){return this.otherProperties.overflow},E.prototype.getPage=function(){return this.otherProperties.page||void 0},E.prototype.getSpread=function(){return this.otherProperties.spread||void 0};var z;(function(r){r.NONE="none",r.DESCENDANT="descendant",r.CHILD="child"})(z||(z={}));var M;(function(r){r.id="id",r.class="class",r.tag="tag",r.attribute="attribute",r.nthchild="nthchild",r.nthoftype="nthoftype"})(M||(M={}));const gt="CssSelectorGenerator";function Se(r="unknown problem",...e){console.warn(`${gt}: ${r}`,...e)}M.id,M.class,M.tag,M.attribute,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY;function yt(r){return r instanceof RegExp}function vt(r){return r.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function Et(r){const e=r.map(t=>{if(yt(t))return i=>t.test(i);if(typeof t=="function")return i=>{const n=t(i);return typeof n!="boolean"?(Se("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",t),!1):n};if(typeof t=="string"){const i=new RegExp("^"+vt(t)+"$");return n=>i.test(n)}return Se("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1});return t=>e.some(i=>i(t))}const bt="",xt=" > ",St=" ";z.NONE+"",z.NONE,z.DESCENDANT+"",z.DESCENDANT,z.CHILD+"",z.CHILD,M.nthoftype,M.tag,M.id,M.class,M.attribute,M.nthchild,Et(["class","id","ng-*"]);class _{}function we(r){return r.split("").reverse().join("")}function wt(r,e,t){const i=we(e);return t.map(n=>{const s=Math.max(0,n.end-e.length-n.errors),o=we(r.slice(s,n.end));return{start:Ce(o,i,n.errors).reduce((c,h)=>n.end-h.end<c?n.end-h.end:c,n.end),end:n.end,errors:n.errors}})}function oe(r){return(r|-r)>>31&1}function Te(r,e,t,i){let n=r.P[t],s=r.M[t];const o=i>>>31,l=e[t]|o,c=l|s,h=(l&n)+n^n|l;let u=s|~(h|n),p=n&h;const d=oe(u&r.lastRowMask[t])-oe(p&r.lastRowMask[t]);return u<<=1,p<<=1,p|=o,u|=oe(i)-o,n=p|~(c|u),s=u&c,r.P[t]=n,r.M[t]=s,d}function Ce(r,e,t){if(e.length===0)return[];t=Math.min(t,e.length);const i=[],n=32,s=Math.ceil(e.length/n)-1,o={P:new Uint32Array(s+1),M:new Uint32Array(s+1),lastRowMask:new Uint32Array(s+1)};o.lastRowMask.fill(1<<31),o.lastRowMask[s]=1<<(e.length-1)%n;const l=new Uint32Array(s+1),c=new Map,h=[];for(let d=0;d<256;d++)h.push(l);for(let d=0;d<e.length;d+=1){const f=e.charCodeAt(d);if(c.has(f))continue;const g=new Uint32Array(s+1);c.set(f,g),f<h.length&&(h[f]=g);for(let m=0;m<=s;m+=1){g[m]=0;for(let v=0;v<n;v+=1){const w=m*n+v;if(w>=e.length)continue;e.charCodeAt(w)===f&&(g[m]|=1<<v)}}}let u=Math.max(0,Math.ceil(t/n)-1);const p=new Uint32Array(s+1);for(let d=0;d<=u;d+=1)p[d]=(d+1)*n;p[s]=e.length;for(let d=0;d<=u;d+=1)o.P[d]=-1,o.M[d]=0;for(let d=0;d<r.length;d+=1){const f=r.charCodeAt(d);let g;f<h.length?g=h[f]:(g=c.get(f),typeof g>"u"&&(g=l));let m=0;for(let v=0;v<=u;v+=1)m=Te(o,g,v,m),p[v]+=m;if(p[u]-m<=t&&u<s&&(g[u+1]&1||m<0)){u+=1,o.P[u]=-1,o.M[u]=0;let v;if(u===s){const w=e.length%n;v=w===0?n:w}else v=n;p[u]=p[u-1]+v-m+Te(o,g,u,m)}else for(;u>0&&p[u]>=t+n;)u-=1;u===s&&p[u]<=t&&(p[u]<t&&i.splice(0,i.length),i.push({start:-1,end:d+1,errors:p[u]}),t=p[u])}return i}function Tt(r,e,t){const i=Ce(r,e,t);return wt(r,e,i)}function Pe(r,e,t){let i=0;const n=[];for(;i!==-1;)i=r.indexOf(e,i),i!==-1&&(n.push({start:i,end:i+e.length,errors:0}),i+=1);return n.length>0?n:Tt(r,e,t)}function Me(r,e){return e.length===0||r.length===0?0:1-Pe(r,e,e.length)[0].errors/e.length}function Ct(r,e,t={}){if(e.length===0)return null;const i=Math.min(256,e.length/2),n=Pe(r,e,i);if(n.length===0)return null;const s=l=>{const d=1-l.errors/e.length,f=t.prefix?Me(r.slice(Math.max(0,l.start-t.prefix.length),l.start),t.prefix):1,g=t.suffix?Me(r.slice(l.end,l.end+t.suffix.length),t.suffix):1;let m=1;typeof t.hint=="number"&&(m=1-Math.abs(l.start-t.hint)/r.length);const v=50*d+20*f+20*g+2*m,w=50+20+20+2;return v/w},o=n.map(l=>({start:l.start,end:l.end,score:s(l)}));return o.sort((l,c)=>c.score-l.score),o[0]}function ae(r,e,t){const i=t===1?e:e-1;if(r.charAt(i).trim()!=="")return e;let n,s;if(t===2?(n=r.substring(0,e),s=n.trimEnd()):(n=r.substring(e),s=n.trimStart()),!s.length)return-1;const o=n.length-s.length;return t===2?e-o:e+o}function Ae(r,e){const t=r.commonAncestorContainer.ownerDocument.createNodeIterator(r.commonAncestorContainer,NodeFilter.SHOW_TEXT),i=e===1?r.startContainer:r.endContainer,n=e===1?r.endContainer:r.startContainer;let s=t.nextNode();for(;s&&s!==i;)s=t.nextNode();e===2&&(s=t.previousNode());let o=-1;const l=()=>{if(s=e===1?t.nextNode():t.previousNode(),s){const c=s.textContent,h=e===1?0:c.length;o=ae(c,h,e)}};for(;s&&o===-1&&s!==n;)l();if(s&&o>=0)return{node:s,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function Pt(r){if(!r.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(r.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(r.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=r.cloneRange();let t=!1,i=!1;const n={start:ae(r.startContainer.textContent,r.startOffset,1),end:ae(r.endContainer.textContent,r.endOffset,2)};if(n.start>=0&&(e.setStart(r.startContainer,n.start),t=!0),n.end>0&&(e.setEnd(r.endContainer,n.end),i=!0),t&&i)return e;if(!t){const{node:s,offset:o}=Ae(e,1);s&&o>=0&&e.setStart(s,o)}if(!i){const{node:s,offset:o}=Ae(e,2);s&&o>0&&e.setEnd(s,o)}return e}function Ne(r){var e;switch(r.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return((e=r.textContent)==null?void 0:e.length)??0;default:return 0}}function Oe(r){let e=r.previousSibling,t=0;for(;e;)t+=Ne(e),e=e.previousSibling;return t}function Ie(r,...e){let t=e.shift();const i=r.ownerDocument.createNodeIterator(r,NodeFilter.SHOW_TEXT),n=[];let s=i.nextNode(),o,l=0;for(;t!==void 0&&s;)o=s,l+o.data.length>t?(n.push({node:o,offset:t-l}),t=e.shift()):(s=i.nextNode(),l+=o.data.length);for(;t!==void 0&&o&&l===t;)n.push({node:o,offset:o.data.length}),t=e.shift();if(t!==void 0)throw new RangeError("Offset exceeds text length");return n}class O{constructor(e,t){if(t<0)throw new Error("Offset is invalid");this.element=e,this.offset=t}relativeTo(e){if(!e.contains(this.element))throw new Error("Parent is not an ancestor of current element");let t=this.element,i=this.offset;for(;t!==e;)i+=Oe(t),t=t.parentElement;return new O(t,i)}resolve(e={}){try{return Ie(this.element,this.offset)[0]}catch(t){if(this.offset===0&&e.direction!==void 0){const i=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);i.currentNode=this.element;const n=e.direction===1,s=n?i.nextNode():i.previousNode();if(!s)throw t;return{node:s,offset:n?0:s.data.length}}else throw t}}static fromCharOffset(e,t){switch(e.nodeType){case Node.TEXT_NODE:return O.fromPoint(e,t);case Node.ELEMENT_NODE:return new O(e,t);default:throw new Error("Node is not an element or text node")}}static fromPoint(e,t){switch(e.nodeType){case Node.TEXT_NODE:{if(t<0||t>e.data.length)throw new Error("Text node offset is out of range");if(!e.parentElement)throw new Error("Text node has no parent");const i=Oe(e)+t;return new O(e.parentElement,i)}case Node.ELEMENT_NODE:{if(t<0||t>e.childNodes.length)throw new Error("Child node offset is out of range");let i=0;for(let n=0;n<t;n++)i+=Ne(e.childNodes[n]);return new O(e,i)}default:throw new Error("Point is not in an element or text node")}}}class W{constructor(e,t){this.start=e,this.end=t}relativeTo(e){return new W(this.start.relativeTo(e),this.end.relativeTo(e))}toRange(){let e,t;this.start.element===this.end.element&&this.start.offset<=this.end.offset?[e,t]=Ie(this.start.element,this.start.offset,this.end.offset):(e=this.start.resolve({direction:1}),t=this.end.resolve({direction:2}));const i=new Range;return i.setStart(e.node,e.offset),i.setEnd(t.node,t.offset),i}static fromRange(e){const t=O.fromPoint(e.startContainer,e.startOffset),i=O.fromPoint(e.endContainer,e.endOffset);return new W(t,i)}static fromOffsets(e,t,i){return new W(new O(e,t),new O(e,i))}static trimmedRange(e){return Pt(W.fromRange(e).toRange())}}class Z{constructor(e,t,i){this.root=e,this.start=t,this.end=i}static fromRange(e,t){const i=W.fromRange(t).relativeTo(e);return new Z(e,i.start.offset,i.end.offset)}static fromSelector(e,t){return new Z(e,t.start,t.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return W.fromOffsets(this.root,this.start,this.end).toRange()}}class K{constructor(e,t,i={}){this.root=e,this.exact=t,this.context=i}static fromRange(e,t){const i=e.textContent,n=W.fromRange(t).relativeTo(e),s=n.start.offset,o=n.end.offset,l=32;return new K(e,i.slice(s,o),{prefix:i.slice(Math.max(0,s-l),s),suffix:i.slice(o,Math.min(i.length,o+l))})}static fromSelector(e,t){const{prefix:i,suffix:n}=t;return new K(e,t.exact,{prefix:i,suffix:n})}toSelector(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}toRange(e={}){return this.toPositionAnchor(e).toRange()}toPositionAnchor(e={}){const t=this.root.textContent,i=Ct(t,this.exact,{...this.context,hint:e.hint});if(!i)throw new Error("Quote not found");return new Z(this.root,i.start,i.end)}}function Mt(r){const e=r.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function le(r,e){try{const t=e.locations,i=e.text;if(i&&i.highlight){let n;t&&t.getCssSelector()&&(n=r.querySelector(t.getCssSelector())),n||(n=r.body);const s=new K(n,i.highlight,{prefix:i.before,suffix:i.after});try{return s.toRange()}catch{return console.warn("Quote not found:",s),null}}if(t){let n=null;if(!n&&t.getCssSelector()&&(n=r.querySelector(t.getCssSelector())),!n&&t.fragments){for(const s of t.fragments)if(n=r.getElementById(s),n)break}if(n){const s=r.createRange();return n.childNodes.length===0||Mt(n)?(s.selectNode(n),s):(s.setStartBefore(n),s.setEndAfter(n),s)}}}catch(t){console.error(t)}return null}function At(r,e){let t=r.getClientRects();t.length||r.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(t=r.commonAncestorContainer.getClientRects());const i=1,n=[];for(const h of t)n.push({bottom:h.bottom,height:h.height,left:h.left,right:h.right,top:h.top,width:h.width});const s=Le(n,i,e),o=Ot(s,i),l=Re(o),c=2*2;for(let h=l.length-1;h>=0;h--){const u=l[h];if(!(u.width*u.height>c))if(l.length>1)l.splice(h,1);else break}return l}function Le(r,e,t){for(let i=0;i<r.length;i++)for(let n=i+1;n<r.length;n++){const s=r[i],o=r[n];if(s===o)continue;const l=A(s.top,o.top,e)&&A(s.bottom,o.bottom,e),c=A(s.left,o.left,e)&&A(s.right,o.right,e);if((c&&!t||l&&!c)&&ze(s,o,e)){const d=r.filter(g=>g!==s&&g!==o),f=Nt(s,o);return d.push(f),Le(d,e,t)}}return r}function Nt(r,e){const t=Math.min(r.left,e.left),i=Math.max(r.right,e.right),n=Math.min(r.top,e.top),s=Math.max(r.bottom,e.bottom);return{bottom:s,height:s-n,left:t,right:i,top:n,width:i-t}}function Ot(r,e){const t=new Set(r);for(const i of r){if(!(i.width>1&&i.height>1)){t.delete(i);continue}for(const s of r)if(i!==s&&t.has(s)&&It(s,i,e)){t.delete(i);break}}return Array.from(t)}function It(r,e,t){return J(r,e.left,e.top,t)&&J(r,e.right,e.top,t)&&J(r,e.left,e.bottom,t)&&J(r,e.right,e.bottom,t)}function J(r,e,t,i){return(r.left<e||A(r.left,e,i))&&(r.right>e||A(r.right,e,i))&&(r.top<t||A(r.top,t,i))&&(r.bottom>t||A(r.bottom,t,i))}function Re(r){for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){const i=r[e],n=r[t];if(i!==n&&ze(i,n,-1)){let s=[],o;const l=De(i,n);if(l.length===1)s=l,o=i;else{const h=De(n,i);l.length<h.length?(s=l,o=i):(s=h,o=n)}const c=r.filter(h=>h!==o);return Array.prototype.push.apply(c,s),Re(c)}}return r}function De(r,e){const t=Lt(e,r);if(t.height===0||t.width===0)return[r];const i=[];{const n={bottom:r.bottom,height:0,left:r.left,right:t.left,top:r.top,width:0};n.width=n.right-n.left,n.height=n.bottom-n.top,n.height!==0&&n.width!==0&&i.push(n)}{const n={bottom:t.top,height:0,left:t.left,right:t.right,top:r.top,width:0};n.width=n.right-n.left,n.height=n.bottom-n.top,n.height!==0&&n.width!==0&&i.push(n)}{const n={bottom:r.bottom,height:0,left:t.left,right:t.right,top:t.bottom,width:0};n.width=n.right-n.left,n.height=n.bottom-n.top,n.height!==0&&n.width!==0&&i.push(n)}{const n={bottom:r.bottom,height:0,left:t.right,right:r.right,top:r.top,width:0};n.width=n.right-n.left,n.height=n.bottom-n.top,n.height!==0&&n.width!==0&&i.push(n)}return i}function Lt(r,e){const t=Math.max(r.left,e.left),i=Math.min(r.right,e.right),n=Math.max(r.top,e.top),s=Math.min(r.bottom,e.bottom);return{bottom:s,height:Math.max(0,s-n),left:t,right:i,top:n,width:Math.max(0,i-t)}}function ze(r,e,t){return(r.left<e.right||t>=0&&A(r.left,e.right,t))&&(e.left<r.right||t>=0&&A(e.left,r.right,t))&&(r.top<e.bottom||t>=0&&A(r.top,e.bottom,t))&&(e.top<r.bottom||t>=0&&A(e.top,r.bottom,t))}function A(r,e,t){return Math.abs(r-e)<=t}function We(r){const e={},t=r.document.documentElement.style;for(const i in r.document.documentElement.style)Object.hasOwn(t,i)&&!Number.isNaN(Number.parseInt(i))&&(e[t[i]]=t.getPropertyValue(t[i]));return e}function Rt(r,e){const t=We(r);Object.keys(t).forEach(i=>{e.hasOwnProperty(i)||he(r,i)}),Object.entries(e).forEach(([i,n])=>{t[i]!==n&&Q(r,i,n)})}function Fe(r,e){return r.document.documentElement.style.getPropertyValue(e)}function Q(r,e,t){r.document.documentElement.style.setProperty(e,t)}function he(r,e){r.document.documentElement.style.removeProperty(e)}const Dt=r=>{if(r.startsWith("rgb")){const e=r.match(/rgb\((\d+),\s(\d+),\s(\d+)(?:,\s(\d+))?\)/);if(e)return{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10),a:e[4]?parseInt(e[4],10)/255:1}}else if(r.startsWith("#")){const e=r.slice(1);if(e.length===3||e.length===4)return{r:parseInt(e[0]+e[0],16)/255,g:parseInt(e[1]+e[1],16)/255,b:parseInt(e[2]+e[2],16)/255,a:e.length===4?parseInt(e[3]+e[3],16)/255:1};if(e.length===6||e.length===8)return{r:parseInt(e[0]+e[1],16)/255,g:parseInt(e[2]+e[3],16)/255,b:parseInt(e[4]+e[5],16)/255,a:e.length===8?parseInt(e[6]+e[7],16)/255:1}}return{r:0,g:0,b:0,a:1}},zt=r=>.2126*r.r*r.a+.7152*r.g*r.a+.0722*r.b*r.a,Wt=r=>{const e=Dt(r);return zt(e)<128};var Ue=(r=>(r.Wrap="wrap",r.Viewport="viewport",r.Bounds="bounds",r.Page="page",r))(Ue||{}),Be=(r=>(r.Boxes="boxes",r.Bounds="bounds",r))(Be||{});const Ft=()=>"Highlight"in window,$e=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Ut{constructor(e,t,i,n){this.wnd=e,this.comms=t,this.id=i,this.name=n,this.items=[],this.lastItemId=0,this.container=void 0,this.activateable=!1,this.experimentalHighlights=!1,this.currentRender=0,Ft()&&(this.experimentalHighlights=!0,this.notTextFlag=new Map)}get activeable(){return this.activateable}set activeable(e){this.activateable=e}add(e){var o,l,c,h;const t=`${this.id}-${this.lastItemId++}`,i=le(this.wnd.document,e.locator);if(!i){this.comms.log("Can't locate DOM range for decoration",e);return}const n=i.commonAncestorContainer;n.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&($e.includes(n.nodeName.toUpperCase())&&((o=this.notTextFlag)==null||o.set(t,!0)),n.querySelector($e.join(", ").toLowerCase())&&((l=this.notTextFlag)==null||l.set(t,!0)),(((c=n.textContent)==null?void 0:c.trim())||"").length===0&&((h=this.notTextFlag)==null||h.set(t,!0)));const s={decoration:e,id:t,range:i};this.items.push(s),this.layout(s),this.renderLayout([s])}remove(e){var n,s;const t=this.items.findIndex(o=>o.decoration.id===e);if(t<0)return;const i=this.items[t];if(this.items.splice(t,1),i.clickableElements=void 0,i.container&&(i.container.remove(),i.container=void 0),this.experimentalHighlights&&!((n=this.notTextFlag)!=null&&n.has(i.id))){const o=this.wnd.CSS.highlights.get(this.id);o==null||o.delete(i.range)}(s=this.notTextFlag)==null||s.delete(i.id)}update(e){this.remove(e.id),this.add(e)}clear(){var e;this.clearContainer(),this.items.length=0,(e=this.notTextFlag)==null||e.clear()}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.items.forEach(e=>this.layout(e)),this.renderLayout(this.items)}experimentalLayout(e){var n,s;const[t,i]=this.requireContainer(!0);i.add(e.range),t.innerHTML=`
2
2
  ::highlight(${this.id}) {
3
3
  color: black;
4
- background-color: ${((n=(s=e.decoration)==null?void 0:s.style)==null?void 0:n.tint)??"yellow"};
5
- }`}layout(e){var g,m,v,w,I;if(this.experimentalHighlights&&!((g=this.notTextFlag)!=null&&g.has(e.id)))return this.experimentalLayout(e);const t=this.wnd.document.createElement("div");t.setAttribute("id",e.id),t.style.setProperty("pointer-events","none");const i=this.wnd.innerWidth,s=parseInt(getComputedStyle(this.wnd.document.documentElement).getPropertyValue("column-count")),n=i/(s||1),o=this.wnd.document.scrollingElement,a=o.scrollLeft,c=o.scrollTop,h=(y,S,L)=>{var ot,at,lt,ht,ct,dt;if(y.style.position="absolute",((at=(ot=e.decoration)==null?void 0:ot.style)==null?void 0:at.width)==="viewport"){y.style.width=`${i}px`,y.style.height=`${S.height}px`;let ce=Math.floor(S.left/i)*i;y.style.left=`${ce+a}px`,y.style.top=`${S.top+c}px`}else if(((ht=(lt=e.decoration)==null?void 0:lt.style)==null?void 0:ht.width)==="bounds")y.style.width=`${L.width}px`,y.style.height=`${S.height}px`,y.style.left=`${L.left+a}px`,y.style.top=`${S.top+c}px`;else if(((dt=(ct=e.decoration)==null?void 0:ct.style)==null?void 0:dt.width)==="page"){y.style.width=`${n}px`,y.style.height=`${S.height}px`;let ce=Math.floor(S.left/n)*n;y.style.left=`${ce+a}px`,y.style.top=`${S.top+c}px`}else y.style.width=`${S.width}px`,y.style.height=`${S.height}px`,y.style.left=`${S.left+a}px`,y.style.top=`${S.top+c}px`},d=e.range.getBoundingClientRect();let p=this.wnd.document.createElement("template");const u=De(this.wnd,"--USER__appearance")==="readium-night-on"||zt(De(this.wnd,"--USER__backgroundColor"));p.innerHTML=`
4
+ background-color: ${((s=(n=e.decoration)==null?void 0:n.style)==null?void 0:s.tint)??"yellow"};
5
+ }`}layout(e){var g,m,v,w,L;if(this.experimentalHighlights&&!((g=this.notTextFlag)!=null&&g.has(e.id)))return this.experimentalLayout(e);const t=this.wnd.document.createElement("div");t.setAttribute("id",e.id),t.style.setProperty("pointer-events","none");const i=this.wnd.innerWidth,n=parseInt(getComputedStyle(this.wnd.document.documentElement).getPropertyValue("column-count")),s=i/(n||1),o=this.wnd.document.scrollingElement,l=o.scrollLeft,c=o.scrollTop,h=(y,S,R)=>{var lt,ht,ct,ut,dt,pt;if(y.style.position="absolute",((ht=(lt=e.decoration)==null?void 0:lt.style)==null?void 0:ht.width)==="viewport"){y.style.width=`${i}px`,y.style.height=`${S.height}px`;let de=Math.floor(S.left/i)*i;y.style.left=`${de+l}px`,y.style.top=`${S.top+c}px`}else if(((ut=(ct=e.decoration)==null?void 0:ct.style)==null?void 0:ut.width)==="bounds")y.style.width=`${R.width}px`,y.style.height=`${S.height}px`,y.style.left=`${R.left+l}px`,y.style.top=`${S.top+c}px`;else if(((pt=(dt=e.decoration)==null?void 0:dt.style)==null?void 0:pt.width)==="page"){y.style.width=`${s}px`,y.style.height=`${S.height}px`;let de=Math.floor(S.left/s)*s;y.style.left=`${de+l}px`,y.style.top=`${S.top+c}px`}else y.style.width=`${S.width}px`,y.style.height=`${S.height}px`,y.style.left=`${S.left+l}px`,y.style.top=`${S.top+c}px`},u=e.range.getBoundingClientRect();let p=this.wnd.document.createElement("template");const d=Fe(this.wnd,"--USER__appearance")==="readium-night-on"||Wt(Fe(this.wnd,"--USER__backgroundColor"));p.innerHTML=`
6
6
  <div
7
7
  class="r2-highlight-0"
8
- style="${[`background-color: ${((v=(m=e.decoration)==null?void 0:m.style)==null?void 0:v.tint)??"yellow"} !important`,`mix-blend-mode: ${u?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}"
8
+ style="${[`background-color: ${((v=(m=e.decoration)==null?void 0:m.style)==null?void 0:v.tint)??"yellow"} !important`,`mix-blend-mode: ${d?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}"
9
9
  >
10
10
  </div>
11
- `.trim();const f=p.content.firstElementChild;if(((I=(w=e.decoration)==null?void 0:w.style)==null?void 0:I.layout)==="bounds"){const y=f.cloneNode(!0);y.style.setProperty("pointer-events","none"),h(y,d,d),t.append(y)}else{let y=Pt(e.range,!0);y=y.sort((S,L)=>S.top<L.top?-1:S.top>L.top?1:0);for(let S of y){const L=f.cloneNode(!0);L.style.setProperty("pointer-events","none"),h(L,S,d),t.append(L)}}e.container=t,e.clickableElements=Array.from(t.querySelectorAll("[data-activable='1']")),e.clickableElements.length||(e.clickableElements=Array.from(t.children))}renderLayout(e){this.wnd.cancelAnimationFrame(this.currentRender),this.currentRender=this.wnd.requestAnimationFrame(()=>{if(e=e.filter(i=>{var s;return!this.experimentalHighlights||!!((s=this.notTextFlag)!=null&&s.has(i.id))}),!e||e.length===0)return;this.requireContainer().append(...e.map(i=>i.container).filter(i=>!!i))})}requireContainer(e=!1){if(e){let t;this.wnd.document.getElementById(`${this.id}-style`)?t=this.wnd.document.getElementById(`${this.id}-style`):(t=this.wnd.document.createElement("style"),t.dataset.readium="true",t.id=`${this.id}-style`,this.wnd.document.head.appendChild(t));let i;return this.wnd.CSS.highlights.has(this.id)?i=this.wnd.CSS.highlights.get(this.id):(i=new this.wnd.Highlight,this.wnd.CSS.highlights.set(this.id,i)),[t,i]}return this.container||(this.container=this.wnd.document.createElement("div"),this.container.setAttribute("id",this.id),this.container.dataset.group=this.name,this.container.dataset.readium="true",this.container.style.setProperty("pointer-events","none"),this.container.style.display="contents",this.wnd.document.body.append(this.container)),this.container}clearContainer(){this.experimentalHighlights&&this.wnd.CSS.highlights.delete(this.id),this.container&&(this.container.remove(),this.container=void 0)}}const Ue=class de extends V{constructor(){super(...arguments),this.resizeFrame=0,this.lastGroupId=0,this.groups=new Map,this.handleResizer=this.handleResize.bind(this)}cleanup(){this.groups.forEach(e=>e.clear()),this.groups.clear()}handleResize(){this.wnd.clearTimeout(this.resizeFrame),this.resizeFrame=this.wnd.setTimeout(()=>{this.groups.forEach(e=>{e.experimentalHighlights||e.requestLayout()})},50)}mount(e,t){return this.wnd=e,t.register("decorate",de.moduleName,(i,s)=>{const n=i;n.decoration&&n.decoration.locator&&(n.decoration.locator=R.deserialize(n.decoration.locator)),this.groups.has(n.group)||this.groups.set(n.group,new Wt(e,t,`readium-decoration-${this.lastGroupId++}`,n.group));const o=this.groups.get(n.group);switch(n.action){case"add":o==null||o.add(n.decoration);break;case"remove":o==null||o.remove(n.decoration.id);break;case"clear":o==null||o.clear();break;case"update":o==null||o.update(n.decoration);break}s(!0)}),this.resizeObserver=new ResizeObserver(()=>e.requestAnimationFrame(()=>this.handleResize())),this.resizeObserver.observe(e.document.body),e.addEventListener("orientationchange",this.handleResizer),e.addEventListener("resize",this.handleResizer),t.log("Decorator Mounted"),!0}unmount(e,t){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),t.unregisterAll(de.moduleName),this.resizeObserver.disconnect(),this.cleanup(),t.log("Decorator Unmounted"),!0}};Ue.moduleName="decorator";let ke=Ue;const He="readium-snapper-style",$e=class ue extends V{constructor(){super(...arguments),this.protected=!1}buildStyles(){return`
11
+ `.trim();const f=p.content.firstElementChild;if(((L=(w=e.decoration)==null?void 0:w.style)==null?void 0:L.layout)==="bounds"){const y=f.cloneNode(!0);y.style.setProperty("pointer-events","none"),h(y,u,u),t.append(y)}else{let y=At(e.range,!0);y=y.sort((S,R)=>S.top<R.top?-1:S.top>R.top?1:0);for(let S of y){const R=f.cloneNode(!0);R.style.setProperty("pointer-events","none"),h(R,S,u),t.append(R)}}e.container=t,e.clickableElements=Array.from(t.querySelectorAll("[data-activable='1']")),e.clickableElements.length||(e.clickableElements=Array.from(t.children))}renderLayout(e){this.wnd.cancelAnimationFrame(this.currentRender),this.currentRender=this.wnd.requestAnimationFrame(()=>{if(e=e.filter(i=>{var n;return!this.experimentalHighlights||!!((n=this.notTextFlag)!=null&&n.has(i.id))}),!e||e.length===0)return;this.requireContainer().append(...e.map(i=>i.container).filter(i=>!!i))})}requireContainer(e=!1){if(e){let t;this.wnd.document.getElementById(`${this.id}-style`)?t=this.wnd.document.getElementById(`${this.id}-style`):(t=this.wnd.document.createElement("style"),t.dataset.readium="true",t.id=`${this.id}-style`,this.wnd.document.head.appendChild(t));let i;return this.wnd.CSS.highlights.has(this.id)?i=this.wnd.CSS.highlights.get(this.id):(i=new this.wnd.Highlight,this.wnd.CSS.highlights.set(this.id,i)),[t,i]}return this.container||(this.container=this.wnd.document.createElement("div"),this.container.setAttribute("id",this.id),this.container.dataset.group=this.name,this.container.dataset.readium="true",this.container.style.setProperty("pointer-events","none"),this.container.style.display="contents",this.wnd.document.body.append(this.container)),this.container}clearContainer(){this.experimentalHighlights&&this.wnd.CSS.highlights.delete(this.id),this.container&&(this.container.remove(),this.container=void 0)}}const ke=class pe extends _{constructor(){super(...arguments),this.resizeFrame=0,this.lastGroupId=0,this.groups=new Map,this.handleResizer=this.handleResize.bind(this)}cleanup(){this.groups.forEach(e=>e.clear()),this.groups.clear()}handleResize(){this.wnd.clearTimeout(this.resizeFrame),this.resizeFrame=this.wnd.setTimeout(()=>{this.groups.forEach(e=>{e.experimentalHighlights||e.requestLayout()})},50)}mount(e,t){return this.wnd=e,t.register("decorate",pe.moduleName,(i,n)=>{const s=i;s.decoration&&s.decoration.locator&&(s.decoration.locator=D.deserialize(s.decoration.locator)),this.groups.has(s.group)||this.groups.set(s.group,new Ut(e,t,`readium-decoration-${this.lastGroupId++}`,s.group));const o=this.groups.get(s.group);switch(s.action){case"add":o==null||o.add(s.decoration);break;case"remove":o==null||o.remove(s.decoration.id);break;case"clear":o==null||o.clear();break;case"update":o==null||o.update(s.decoration);break}n(!0)}),this.resizeObserver=new ResizeObserver(()=>e.requestAnimationFrame(()=>this.handleResize())),this.resizeObserver.observe(e.document.body),e.addEventListener("orientationchange",this.handleResizer),e.addEventListener("resize",this.handleResizer),t.log("Decorator Mounted"),!0}unmount(e,t){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),t.unregisterAll(pe.moduleName),this.resizeObserver.disconnect(),this.cleanup(),t.log("Decorator Unmounted"),!0}};ke.moduleName="decorator";let je=ke;const Ve="readium-snapper-style",He=class fe extends _{constructor(){super(...arguments),this.protected=!1}buildStyles(){return`
12
12
  html, body {
13
13
  touch-action: manipulation;
14
14
  user-select: ${this.protected?"none":"auto"};
15
- }`}mount(e,t){const i=e.document.createElement("style");return i.dataset.readium="true",i.id=He,i.textContent=this.buildStyles(),e.document.head.appendChild(i),t.register("protect",ue.moduleName,(s,n)=>{this.protected=!0,i.textContent=this.buildStyles(),n(!0)}),t.register("unprotect",ue.moduleName,(s,n)=>{this.protected=!1,i.textContent=this.buildStyles(),n(!0)}),t.log("Snapper Mounted"),!0}unmount(e,t){var i;return(i=e.document.getElementById(He))==null||i.remove(),t.log("Snapper Unmounted"),!0}};$e.moduleName="snapper";let je=$e;function F(r){return r.document.body.dir.toLowerCase()==="rtl"}function Ve(r){return parseInt(r.getComputedStyle(r.document.documentElement).getPropertyValue("column-count"))}function qe(r){const e=getComputedStyle(r),t=parseFloat(e.paddingTop||"0"),i=parseFloat(e.paddingBottom||"0");return r.clientHeight-t-i}function _e(r){const e=Ve(r);if(!e)return!1;const t=r.document.querySelectorAll("div[id^='readium-virtual-page']");for(const h of t)h.remove();const i=t.length,s=r.document.scrollingElement.scrollWidth,n=r.visualViewport.width,a=Math.round(s/n*e)%e,c=e===1||a===0?0:e-a;if(c>0)for(let h=0;h<c;h++){const d=r.document.createElement("div");d.setAttribute("id",`readium-virtual-page-${h}`),d.dataset.readium="true",CSS.supports("break-before","column")?d.style.breakBefore="column":(CSS.supports("break-inside","avoid-column")&&(d.style.breakInside="avoid-column"),d.style.height=qe(r.document.documentElement)+"px"),d.innerHTML="&#8203;",r.document.body.appendChild(d)}return i!==c}function Ft(r){return r<.5?2*r*r:-1+(4-2*r)*r}function T(r){const e=r.getSelection();e&&e.removeAllRanges()}const Bt=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"];function Xe(r){var e;return Bt.indexOf(r.nodeName.toLowerCase())!==-1||r.hasAttribute("contenteditable")&&((e=r.getAttribute("contenteditable"))==null?void 0:e.toLowerCase())!=="false"?r:r.parentElement?Xe(r.parentElement):null}function Ge(r,e){const t=Ye(r,r.document.body,e),i=r._readium_cssSelectorGenerator.getCssSelector(t,{selectors:["tag","id","class","nthchild","nthoftype","attribute"]});return new R({href:"#",type:"application/xhtml+xml",locations:new x({otherLocations:new Map([["cssSelector",i]])}),text:new k({highlight:t.textContent||void 0})})}function Ye(r,e,t){for(var i=0;i<e.children.length;i++){const s=e.children[i];if(!Ht(s)&&Ut(r,s,t))return kt(r,s)?s:Ye(r,s,t)}return e}function Ut(r,e,t){if(e===document.body||e===document.documentElement)return!0;if(!document||!document.documentElement||!document.body)return!1;const i=e.getBoundingClientRect();return t?i.bottom>0&&i.top<r.innerHeight:i.right>0&&i.left<r.innerWidth}function kt(r,e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=r.innerHeight&&t.right<=r.innerWidth}function Ht(r){const e=getComputedStyle(r);if(e){const t=e.getPropertyValue("display");if(t!="block"&&t!="list-item"||e.getPropertyValue("opacity")==="0")return!0}return!1}const Ke="readium-column-snapper-style",$t=200,Ze=class P extends je{constructor(){super(...arguments),this.shakeTimeout=0,this.snappingCancelled=!1,this.alreadyScrollLeft=0,this.overscroll=0,this.cachedScrollWidth=0,this.touchState=0,this.startingX=void 0,this.endingX=void 0,this.onTouchStarter=this.onTouchStart.bind(this),this.onTouchEnder=this.onTouchEnd.bind(this),this.onWidthChanger=this.onWidthChange.bind(this),this.onTouchMover=this.onTouchMove.bind(this)}doc(){return this.wnd.document.scrollingElement}scrollOffset(){return this.doc().scrollLeft>0?this.doc().scrollLeft:this.alreadyScrollLeft}snapOffset(e){const t=e+(F(this.wnd)?-1:1);return t-t%this.wnd.innerWidth}reportProgress(){this.comms.send("progress",{progress:this.wnd.scrollX/this.cachedScrollWidth,reference:this.wnd.innerWidth/this.doc().scrollWidth})}shake(){if(this.overscroll!==0||this.shakeTimeout!==0)return;const e=this.doc();e.classList.add(F(this.wnd)?"readium-bounce-l":"readium-bounce-r");const t=this.scrollOffset();this.shakeTimeout=this.wnd.setTimeout(()=>{e.classList.remove("readium-bounce-l"),e.classList.remove("readium-bounce-r"),this.shakeTimeout=0,this.doc().scrollLeft=t},150)}takeOverSnap(){var t;this.snappingCancelled=!0,this.clearTouches();const e=this.doc();this.overscroll=((t=e.style.transform)==null?void 0:t.length)>12?parseFloat(e.style.transform.slice(12).split("px")[0]):0}snapCurrentOffset(e=!1,t=!1){const i=this.wnd.scrollX>0?this.wnd.scrollX:this.alreadyScrollLeft,s=this.doc(),n=this.dragOffset(),o=Ve(this.wnd),a=Math.min(Math.max(0,i),this.cachedScrollWidth),c=F(this.wnd)?-1:1,h=c*(this.wnd.innerWidth/3)*(c*n>0?2:1),d=this.snapOffset(a+h);if(e&&d!==this.scrollOffset()){this.snappingCancelled=!1;const p=(m,v,w,I)=>w>I?v:m+(v-m)*Ft(w/I),u=$t*o;let f;const g=m=>{if(this.snappingCancelled)return;f||(f=m);const v=m-f,w=p(this.overscroll,0,v,u),I=p(i,d,v,u);s.scrollLeft=I,this.overscroll!==0&&(s.style.transform=`translate3d(${-w}px, 0px, 0px)`),v<u?this.wnd.requestAnimationFrame(g):(this.clearTouches(),s.style.removeProperty("transform"),s.scrollLeft=d,t||this.reportProgress())};this.wnd.requestAnimationFrame(g)}else s.style.removeProperty("transform"),this.wnd.requestAnimationFrame(()=>{s.scrollLeft=d,this.clearTouches(),t||this.reportProgress()})}dragOffset(){return(this.startingX??0)-(this.endingX??0)}clearTouches(){this.startingX=void 0,this.endingX=void 0,this.overscroll=0}onTouchStart(e){switch(e.stopPropagation(),this.takeOverSnap(),e.touches.length){case 1:break;case 2:this.onTouchEnd(e);return;default:{this.onTouchEnd(e),this.comms.send("tap_more",e.touches.length);return}}this.startingX=e.touches[0].clientX,this.alreadyScrollLeft=this.doc().scrollLeft,this.touchState=1}onTouchEnd(e){if(this.touchState===2){const t=this.dragOffset(),i=this.scrollOffset();this.cachedScrollWidth<=this.wnd.innerWidth?(this.reportProgress(),t>5&&this.comms.send("no_more",void 0),t<-5&&this.comms.send("no_less",void 0)):i<5&&t<5?(this.alreadyScrollLeft=0,this.comms.send("no_less",void 0)):this.cachedScrollWidth-i-this.wnd.innerWidth<5&&t>5&&(this.alreadyScrollLeft=this.cachedScrollWidth,this.comms.send("no_more",void 0)),this.snapCurrentOffset(!0),this.comms.send("swipe",t)}this.touchState=0}onWidthChange(){this.cachedScrollWidth=this.doc().scrollWidth,this.comms.ready&&this.snapCurrentOffset()}onTouchMove(e){if(this.touchState===0)return;this.touchState===1&&(this.touchState=2,T(this.wnd)),this.endingX=e.touches[0].clientX;const t=this.dragOffset(),i=this.alreadyScrollLeft+t;i<0?(this.overscroll=i,this.doc().style.transform=`translate3d(${-this.overscroll}px, 0px, 0px)`):i+this.wnd.innerWidth>this.cachedScrollWidth?(this.overscroll=i,this.doc().style.transform=`translate3d(${-i}px, 0px, 0px)`):(this.overscroll=0,this.doc().style.removeProperty("transform"),this.doc().scrollLeft=this.alreadyScrollLeft+t)}mount(e,t){if(this.wnd=e,this.comms=t,!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");i.dataset.readium="true",i.id=Ke,i.textContent=`
15
+ }`}mount(e,t){const i=e.document.createElement("style");return i.dataset.readium="true",i.id=Ve,i.textContent=this.buildStyles(),e.document.head.appendChild(i),t.register("protect",fe.moduleName,(n,s)=>{this.protected=!0,i.textContent=this.buildStyles(),s(!0)}),t.register("unprotect",fe.moduleName,(n,s)=>{this.protected=!1,i.textContent=this.buildStyles(),s(!0)}),t.log("Snapper Mounted"),!0}unmount(e,t){var i;return(i=e.document.getElementById(Ve))==null||i.remove(),t.log("Snapper Unmounted"),!0}};He.moduleName="snapper";let qe=He;function U(r){return r.document.body.dir.toLowerCase()==="rtl"}function _e(r){return parseInt(r.getComputedStyle(r.document.documentElement).getPropertyValue("column-count"))}function Xe(r){const e=getComputedStyle(r),t=parseFloat(e.paddingTop||"0"),i=parseFloat(e.paddingBottom||"0");return r.clientHeight-t-i}function Ge(r){const e=_e(r);if(!e)return!1;const t=r.document.querySelectorAll("div[id^='readium-virtual-page']");for(const h of t)h.remove();const i=t.length,n=r.document.scrollingElement.scrollWidth,s=r.visualViewport.width,l=Math.round(n/s*e)%e,c=e===1||l===0?0:e-l;if(c>0)for(let h=0;h<c;h++){const u=r.document.createElement("div");u.setAttribute("id",`readium-virtual-page-${h}`),u.dataset.readium="true",CSS.supports("break-before","column")?u.style.breakBefore="column":(CSS.supports("break-inside","avoid-column")&&(u.style.breakInside="avoid-column"),u.style.height=Xe(r.document.documentElement)+"px"),u.innerHTML="&#8203;",r.document.body.appendChild(u)}return i!==c}function Bt(r){const e=r.document.createElement("style");e.appendChild(r.document.createTextNode("*{}")),r.document.body.appendChild(e),r.document.body.removeChild(e)}function $t(r){return r<.5?2*r*r:-1+(4-2*r)*r}function T(r){const e=r.getSelection();e&&e.removeAllRanges()}const kt=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"];function Ye(r){var e;return kt.indexOf(r.nodeName.toLowerCase())!==-1||r.hasAttribute("contenteditable")&&((e=r.getAttribute("contenteditable"))==null?void 0:e.toLowerCase())!=="false"?r:r.parentElement?Ye(r.parentElement):null}function Ze(r,e){const t=Ke(r,r.document.body,e),i=r._readium_cssSelectorGenerator.getCssSelector(t,{selectors:["tag","id","class","nthchild","nthoftype","attribute"]});return new D({href:"#",type:"application/xhtml+xml",locations:new x({otherLocations:new Map([["cssSelector",i]])}),text:new k({highlight:t.textContent||void 0})})}function Ke(r,e,t){for(var i=0;i<e.children.length;i++){const n=e.children[i];if(!Ht(n)&&jt(r,n,t))return Vt(r,n)?n:Ke(r,n,t)}return e}function jt(r,e,t){if(e===document.body||e===document.documentElement)return!0;if(!document||!document.documentElement||!document.body)return!1;const i=e.getBoundingClientRect();return t?i.bottom>0&&i.top<r.innerHeight:i.right>0&&i.left<r.innerWidth}function Vt(r,e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=r.innerHeight&&t.right<=r.innerWidth}function Ht(r){const e=getComputedStyle(r);if(e){const t=e.getPropertyValue("display");if(t!="block"&&t!="list-item"||e.getPropertyValue("opacity")==="0")return!0}return!1}const Je="readium-column-snapper-style",qt=200,Qe=class P extends qe{constructor(){super(...arguments),this.shakeTimeout=0,this.snappingCancelled=!1,this.alreadyScrollLeft=0,this.overscroll=0,this.cachedScrollWidth=0,this.touchState=0,this.startingX=void 0,this.endingX=void 0,this.onTouchStarter=this.onTouchStart.bind(this),this.onTouchEnder=this.onTouchEnd.bind(this),this.onWidthChanger=this.onWidthChange.bind(this),this.onTouchMover=this.onTouchMove.bind(this)}doc(){return this.wnd.document.scrollingElement}scrollOffset(){return this.doc().scrollLeft>0?this.doc().scrollLeft:this.alreadyScrollLeft}snapOffset(e){const t=e+(U(this.wnd)?-1:1);return t-t%this.wnd.innerWidth}reportProgress(){const e=this.wnd.scrollX,t=this.cachedScrollWidth,i=Math.max(0,Math.min(1,e/t)),n=Math.max(0,Math.min(1,(e+this.wnd.innerWidth)/t));this.comms.send("progress",{start:i,end:n})}shake(){if(this.overscroll!==0||this.shakeTimeout!==0)return;const e=this.doc();e.classList.add(U(this.wnd)?"readium-bounce-l":"readium-bounce-r");const t=this.scrollOffset();this.shakeTimeout=this.wnd.setTimeout(()=>{e.classList.remove("readium-bounce-l"),e.classList.remove("readium-bounce-r"),this.shakeTimeout=0,this.doc().scrollLeft=t},150)}takeOverSnap(){var t;this.snappingCancelled=!0,this.clearTouches();const e=this.doc();this.overscroll=((t=e.style.transform)==null?void 0:t.length)>12?parseFloat(e.style.transform.slice(12).split("px")[0]):0}snapCurrentOffset(e=!1,t=!1){const i=this.wnd.scrollX>0?this.wnd.scrollX:this.alreadyScrollLeft,n=this.doc(),s=this.dragOffset(),o=_e(this.wnd),l=Math.min(Math.max(0,i),this.cachedScrollWidth),c=U(this.wnd)?-1:1,h=c*(this.wnd.innerWidth/3)*(c*s>0?2:1),u=this.snapOffset(l+h);if(e&&u!==this.scrollOffset()){this.snappingCancelled=!1;const p=(m,v,w,L)=>w>L?v:m+(v-m)*$t(w/L),d=qt*o;let f;const g=m=>{if(this.snappingCancelled)return;f||(f=m);const v=m-f,w=p(this.overscroll,0,v,d),L=p(i,u,v,d);n.scrollLeft=L,this.overscroll!==0&&(n.style.transform=`translate3d(${-w}px, 0px, 0px)`),v<d?this.wnd.requestAnimationFrame(g):(this.clearTouches(),n.style.removeProperty("transform"),n.scrollLeft=u,t||this.reportProgress())};this.wnd.requestAnimationFrame(g)}else n.style.removeProperty("transform"),this.wnd.requestAnimationFrame(()=>{n.scrollLeft=u,this.clearTouches(),t||this.reportProgress()})}dragOffset(){return(this.startingX??0)-(this.endingX??0)}clearTouches(){this.startingX=void 0,this.endingX=void 0,this.overscroll=0}onTouchStart(e){switch(e.stopPropagation(),this.takeOverSnap(),e.touches.length){case 1:break;case 2:this.onTouchEnd(e);return;default:{this.onTouchEnd(e),this.comms.send("tap_more",e.touches.length);return}}this.startingX=e.touches[0].clientX,this.alreadyScrollLeft=this.doc().scrollLeft,this.touchState=1}onTouchEnd(e){if(this.touchState===2){const t=this.dragOffset(),i=this.scrollOffset();this.cachedScrollWidth<=this.wnd.innerWidth?(this.reportProgress(),t>5&&this.comms.send("no_more",void 0),t<-5&&this.comms.send("no_less",void 0)):i<5&&t<5?(this.alreadyScrollLeft=0,this.comms.send("no_less",void 0)):this.cachedScrollWidth-i-this.wnd.innerWidth<5&&t>5&&(this.alreadyScrollLeft=this.cachedScrollWidth,this.comms.send("no_more",void 0)),this.snapCurrentOffset(!0),this.comms.send("swipe",t)}this.touchState=0}onWidthChange(){this.cachedScrollWidth=this.doc().scrollWidth,this.comms.ready&&this.snapCurrentOffset()}onTouchMove(e){if(this.touchState===0)return;this.touchState===1&&(this.touchState=2,T(this.wnd)),this.endingX=e.touches[0].clientX;const t=this.dragOffset(),i=this.alreadyScrollLeft+t;i<0?(this.overscroll=i,this.doc().style.transform=`translate3d(${-this.overscroll}px, 0px, 0px)`):i+this.wnd.innerWidth>this.cachedScrollWidth?(this.overscroll=i,this.doc().style.transform=`translate3d(${-i}px, 0px, 0px)`):(this.overscroll=0,this.doc().style.removeProperty("transform"),this.doc().scrollLeft=this.alreadyScrollLeft+t)}mount(e,t){if(this.wnd=e,this.comms=t,!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");i.dataset.readium="true",i.id=Je,i.textContent=`
16
16
  @keyframes readium-bounce-l-animation {
17
17
  0%, 100% {transform: translate3d(0, 0, 0);}
18
18
  50% {transform: translate3d(-50px, 0, 0);}
@@ -46,7 +46,7 @@
46
46
  body::-webkit-scrollbar {
47
47
  display: none; /* for Chrome, Safari, and Opera */
48
48
  }
49
- `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{e.requestAnimationFrame(()=>{e&&_e(e)}),this.onWidthChange()}),this.resizeObserver.observe(e.document.body),this.mutationObserver=new MutationObserver(n=>{for(const o of n)if(o.target===this.wnd.document.documentElement){const a=o.oldValue,c=o.target.getAttribute("style"),h=/transform\s*:\s*([^;]+)/,d=a==null?void 0:a.match(h),p=c==null?void 0:c.match(h);(!d&&!p||d&&!p||d&&p&&d[1]!==p[1])&&(e.requestAnimationFrame(()=>{e&&_e(e)}),this.onWidthChange())}else e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth)}),e.frameElement&&this.mutationObserver.observe(e.frameElement,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"]});const s=n=>{const o=this.doc().scrollLeft;return this.doc().scrollLeft=this.snapOffset(n),o!==this.doc().scrollLeft};return e.addEventListener("orientationchange",this.onWidthChanger),e.addEventListener("resize",this.onWidthChanger),e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth),t.register("go_progression",P.moduleName,(n,o)=>{const a=n;if(a<0||a>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),o(!1);return}this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth,h=F(e)?-1:1,d=c*a*h;this.doc().scrollLeft=this.snapOffset(d),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_id",P.moduleName,(n,o)=>{const a=e.document.getElementById(n);if(!a){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(a.getBoundingClientRect().left+e.scrollX),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_text",P.moduleName,(n,o)=>{let a;Array.isArray(n)&&(n.length>1&&(a=n[1]),n=n[0]);const c=k.deserialize(n),h=oe(this.wnd.document,new R({href:e.location.href,type:"text/html",text:c,locations:a?new x({otherLocations:new Map([["cssSelector",a]])}):void 0}));if(!h){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(h.getBoundingClientRect().left+e.scrollX),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_end",P.moduleName,(n,o)=>{const a=F(e)?-1:1;this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth*a;if(this.doc().scrollLeft===c)return o(!1);this.doc().scrollLeft=this.snapOffset(c),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_start",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{if(this.doc().scrollLeft===0)return o(!1);this.doc().scrollLeft=0,this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_prev",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const a=e.scrollX-e.innerWidth,c=F(e)?-(this.cachedScrollWidth-e.innerWidth):0,h=s(Math.max(a,c));h&&(this.reportProgress(),T(this.wnd)),o(h)})}),t.register("go_next",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const a=e.scrollX+e.innerWidth,c=F(e)?0:this.cachedScrollWidth-e.innerWidth,h=s(Math.min(a,c));h&&(this.reportProgress(),T(this.wnd)),o(h)})}),t.register("unfocus",P.moduleName,(n,o)=>{this.snappingCancelled=!0,T(this.wnd),o(!0)}),t.register("shake",P.moduleName,(n,o)=>{this.shake(),o(!0)}),t.register("focus",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth,this.snapCurrentOffset(!1,!0),this.reportProgress(),o(!0)})}),t.register("first_visible_locator",P.moduleName,(n,o)=>{const a=Ge(e,!1);this.comms.send("first_visible_locator",a.serialize()),o(!0)}),e.addEventListener("touchstart",this.onTouchStarter,{passive:!0}),e.addEventListener("touchend",this.onTouchEnder,{passive:!0}),e.addEventListener("touchmove",this.onTouchMover,{passive:!0}),e.document.addEventListener("touchstart",()=>{}),t.log("ColumnSnapper Mounted"),!0}unmount(e,t){var i;return this.snappingCancelled=!0,t.unregisterAll(P.moduleName),this.resizeObserver.disconnect(),this.mutationObserver.disconnect(),e.removeEventListener("touchstart",this.onTouchStarter),e.removeEventListener("touchend",this.onTouchEnder),e.removeEventListener("touchmove",this.onTouchMover),e.removeEventListener("orientationchange",this.onWidthChanger),e.removeEventListener("resize",this.onWidthChanger),(i=e.document.getElementById(Ke))==null||i.remove(),t.log("ColumnSnapper Unmounted"),super.unmount(e,t)}};Ze.moduleName="column_snapper";let jt=Ze;const Je="readium-scroll-snapper-style",Qe=class O extends je{constructor(){super(...arguments),this.isScrolling=!1,this.handleScroll=()=>{this.isScrolling||(this.isScrolling=!0,this.wnd.requestAnimationFrame(()=>{const e=this.doc().scrollTop/this.doc().offsetHeight;this.reportProgress({progress:e,reference:this.wnd.innerHeight/this.doc().scrollHeight}),this.isScrolling=!1}))}}doc(){return this.wnd.document.scrollingElement}reportProgress(e){this.comms.send("progress",e)}mount(e,t){this.wnd=e,this.comms=t,e.navigator.epubReadingSystem.layoutStyle="scrolling";const i=e.document.createElement("style");return i.dataset.readium="true",i.id=Je,i.textContent=`
49
+ `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{e.requestAnimationFrame(()=>{e&&Ge(e)}),this.onWidthChange()}),this.resizeObserver.observe(e.document.body),this.mutationObserver=new MutationObserver(s=>{for(const o of s)if(o.target===this.wnd.document.documentElement){const l=o.oldValue,c=o.target.getAttribute("style"),h=/transform\s*:\s*([^;]+)/,u=l==null?void 0:l.match(h),p=c==null?void 0:c.match(h);(!u&&!p||u&&!p||u&&p&&u[1]!==p[1])&&(e.requestAnimationFrame(()=>{e&&Ge(e)}),this.onWidthChange())}else e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth)}),e.frameElement&&this.mutationObserver.observe(e.frameElement,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"]});const n=s=>{const o=this.doc().scrollLeft;return this.doc().scrollLeft=this.snapOffset(s),o!==this.doc().scrollLeft};return e.addEventListener("orientationchange",this.onWidthChanger),e.addEventListener("resize",this.onWidthChanger),e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth),t.register("go_progression",P.moduleName,(s,o)=>{const l=s;if(l<0||l>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),o(!1);return}this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth,h=U(e)?-1:1,u=c*l*h;this.doc().scrollLeft=this.snapOffset(u),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_id",P.moduleName,(s,o)=>{const l=e.document.getElementById(s);if(!l){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(l.getBoundingClientRect().left+e.scrollX),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_text",P.moduleName,(s,o)=>{let l;Array.isArray(s)&&(s.length>1&&(l=s[1]),s=s[0]);const c=k.deserialize(s),h=le(this.wnd.document,new D({href:e.location.href,type:"text/html",text:c,locations:l?new x({otherLocations:new Map([["cssSelector",l]])}):void 0}));if(!h){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(h.getBoundingClientRect().left+e.scrollX),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_end",P.moduleName,(s,o)=>{const l=U(e)?-1:1;this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth*l;if(this.doc().scrollLeft===c)return o(!1);this.doc().scrollLeft=this.snapOffset(c),this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_start",P.moduleName,(s,o)=>{this.wnd.requestAnimationFrame(()=>{if(this.doc().scrollLeft===0)return o(!1);this.doc().scrollLeft=0,this.reportProgress(),T(this.wnd),o(!0)})}),t.register("go_prev",P.moduleName,(s,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const l=e.scrollX-e.innerWidth,c=U(e)?-(this.cachedScrollWidth-e.innerWidth):0,h=n(Math.max(l,c));h&&(this.reportProgress(),T(this.wnd)),o(h)})}),t.register("go_next",P.moduleName,(s,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const l=e.scrollX+e.innerWidth,c=U(e)?0:this.cachedScrollWidth-e.innerWidth,h=n(Math.min(l,c));h&&(this.reportProgress(),T(this.wnd)),o(h)})}),t.register("unfocus",P.moduleName,(s,o)=>{this.snappingCancelled=!0,T(this.wnd),o(!0)}),t.register("shake",P.moduleName,(s,o)=>{this.shake(),o(!0)}),t.register("focus",P.moduleName,(s,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth,this.snapCurrentOffset(!1,!0),this.reportProgress(),o(!0)})}),t.register("first_visible_locator",P.moduleName,(s,o)=>{const l=Ze(e,!1);this.comms.send("first_visible_locator",l.serialize()),o(!0)}),e.addEventListener("touchstart",this.onTouchStarter,{passive:!0}),e.addEventListener("touchend",this.onTouchEnder,{passive:!0}),e.addEventListener("touchmove",this.onTouchMover,{passive:!0}),e.document.addEventListener("touchstart",()=>{}),t.log("ColumnSnapper Mounted"),!0}unmount(e,t){var i;return this.snappingCancelled=!0,t.unregisterAll(P.moduleName),this.resizeObserver.disconnect(),this.mutationObserver.disconnect(),e.removeEventListener("touchstart",this.onTouchStarter),e.removeEventListener("touchend",this.onTouchEnder),e.removeEventListener("touchmove",this.onTouchMover),e.removeEventListener("orientationchange",this.onWidthChanger),e.removeEventListener("resize",this.onWidthChanger),(i=e.document.getElementById(Je))==null||i.remove(),t.log("ColumnSnapper Unmounted"),super.unmount(e,t)}};Qe.moduleName="column_snapper";let _t=Qe;const et="readium-scroll-snapper-style",tt=class N extends qe{constructor(){super(...arguments),this.isScrolling=!1,this.handleScroll=()=>{this.isScrolling||(this.isScrolling=!0,this.wnd.requestAnimationFrame(()=>{this.reportProgress(),this.isScrolling=!1}))}}doc(){return this.wnd.document.scrollingElement}reportProgress(){const e=this.doc().scrollTop,t=this.doc().scrollHeight,i=Math.max(0,Math.min(1,e/t)),n=Math.max(0,Math.min(1,(e+this.wnd.innerHeight)/t));this.comms.send("progress",{start:i,end:n})}mount(e,t){this.wnd=e,this.comms=t,e.navigator.epubReadingSystem.layoutStyle="scrolling";const i=e.document.createElement("style");return i.dataset.readium="true",i.id=et,i.textContent=`
50
50
  * {
51
51
  scrollbar-width: none; /* for Firefox */
52
52
  }
@@ -54,7 +54,7 @@
54
54
  body::-webkit-scrollbar {
55
55
  display: none; /* for Chrome, Safari, and Opera */
56
56
  }
57
- `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{this.comms.ready&&this.handleScroll()}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("go_progression",O.moduleName,(s,n)=>{const o=s;if(o<0||o>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=this.doc().offsetHeight*o,this.reportProgress({progress:o,reference:this.wnd.innerHeight/this.doc().scrollHeight}),T(this.wnd),n(!0)})}),t.register("go_id",O.moduleName,(s,n)=>{const o=e.document.getElementById(s);if(!o){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=o.getBoundingClientRect().top+e.scrollY-e.innerHeight/2;const a=this.doc().scrollTop/this.doc().offsetHeight;this.reportProgress({progress:a,reference:this.wnd.innerHeight/this.doc().scrollHeight}),T(this.wnd),n(!0)})}),t.register("go_text",O.moduleName,(s,n)=>{let o;Array.isArray(s)&&(s.length>1&&(o=s[1]),s=s[0]);const a=k.deserialize(s),c=oe(this.wnd.document,new R({href:e.location.href,type:"text/html",text:a,locations:o?new x({otherLocations:new Map([["cssSelector",o]])}):void 0}));if(!c){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=c.getBoundingClientRect().top+e.scrollY-e.innerHeight/2;const h=this.doc().scrollTop/this.doc().offsetHeight;this.reportProgress({progress:h,reference:this.wnd.innerHeight/this.doc().scrollHeight}),T(this.wnd),n(!0)})}),t.register("go_start",O.moduleName,(s,n)=>{if(this.doc().scrollTop===0)return n(!1);this.doc().scrollTop=0,this.reportProgress({progress:0,reference:this.wnd.innerHeight/this.doc().scrollHeight}),n(!0)}),t.register("go_end",O.moduleName,(s,n)=>{if(this.doc().scrollTop===0)return n(!1);this.doc().scrollTop=0,this.reportProgress({progress:0,reference:this.wnd.innerHeight/this.doc().scrollHeight}),n(!0)}),t.register("unfocus",O.moduleName,(s,n)=>{T(this.wnd),n(!0)}),t.register(["go_next","go_prev"],O.moduleName,(s,n)=>n(!1)),t.register("focus",O.moduleName,(s,n)=>{const o=this.doc().scrollTop/this.doc().offsetHeight;this.reportProgress({progress:o,reference:this.wnd.innerHeight/this.doc().scrollHeight}),n(!0)}),t.register("first_visible_locator",O.moduleName,(s,n)=>{const o=Ge(e,!0);this.comms.send("first_visible_locator",o.serialize()),n(!0)}),t.log("ScrollSnapper Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(O.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),(i=e.document.getElementById(Je))==null||i.remove(),t.log("ScrollSnapper Unmounted"),!0}};Qe.moduleName="scroll_snapper";let Vt=Qe;class le extends V{constructor(){super(...arguments),this.pointerMoved=!1,this.onPointerUp=this.onPointUp.bind(this),this.onPointerMove=this.onPointMove.bind(this),this.onPointerDown=this.onPointDown.bind(this),this.onContextMenu=this.onContext.bind(this),this.onClicker=this.onClick.bind(this)}onPointUp(e){var s,n,o,a,c;const t=this.wnd.getSelection();if(t&&((s=t.toString())==null?void 0:s.length)>0){const h=(n=t.getRangeAt(0))==null?void 0:n.getClientRects();if(!h||h.length===0)return;const d=h[0],p={text:t.toString(),x:d.x,y:d.y,width:d.width,height:d.height,targetFrameSrc:(a=(o=this.wnd)==null?void 0:o.location)==null?void 0:a.href};this.comms.send("text_selected",p)}if(this.pointerMoved){this.pointerMoved=!1;return}if(!(t!=null&&t.isCollapsed)||!e.isPrimary)return;const i=this.wnd.devicePixelRatio;e.preventDefault(),this.comms.send(e.pointerType==="touch"?"tap":"click",{defaultPrevented:e.defaultPrevented,x:e.clientX*i,y:e.clientY*i,targetFrameSrc:this.wnd.location.href,targetElement:e.target.outerHTML,interactiveElement:(c=Xe(e.target))==null?void 0:c.outerHTML,cssSelector:this.wnd._readium_cssSelectorGenerator.getCssSelector(e.target)}),this.pointerMoved=!1}onPointMove(e){if(e.movementY!==void 0&&e.movementX!==void 0){(Math.abs(e.movementX)>1||Math.abs(e.movementY)>1)&&(this.pointerMoved=!0);return}this.pointerMoved=!0}onPointDown(){this.pointerMoved=!1}onContext(e){this.onPointUp(e),this.pointerMoved=!1}onClick(e){if(e.preventDefault(),!e.isTrusted){const t=new PointerEvent("pointerup",{isPrimary:!0,pointerType:"mouse",clientX:e.clientX,clientY:e.clientY});Object.defineProperty(t,"target",{writable:!1,value:e.target}),Object.defineProperty(t,"defaultPrevented",{writable:!1,value:e.defaultPrevented}),this.onPointUp(t)}}mount(e,t){return this.wnd=e,this.comms=t,e.document.addEventListener("pointerdown",this.onPointerDown),e.document.addEventListener("pointerup",this.onPointerUp),e.document.addEventListener("contextmenu",this.onContextMenu),e.document.addEventListener("pointermove",this.onPointerMove),e.document.addEventListener("click",this.onClicker),t.log("Peripherals Mounted"),!0}unmount(e,t){return e.document.removeEventListener("pointerdown",this.onPointerDown),e.document.removeEventListener("pointerup",this.onPointerUp),e.document.removeEventListener("contextmenu",this.onContextMenu),e.document.removeEventListener("pointermove",this.onPointerMove),e.document.removeEventListener("click",this.onClicker),t.log("Peripherals Unmounted"),!0}}le.moduleName="peripherals";const et=class pe extends V{constructor(){super(...arguments),this.mediaPlayingCount=0,this.allAnimations=new Set}wndOnErr(e){var t;(t=this.comms)==null||t.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}unblock(e){var t;for(e._readium_blockEvents=!1;((t=e._readium_blockedEvents)==null?void 0:t.length)>0;){const i=e._readium_blockedEvents.shift();switch(i[0]){case 0:Reflect.apply(i[1],i[2],i[3]);break;case 1:const s=i[1],n=i[2];e.removeEventListener(s.type,e._readium_eventBlocker,!0);const o=new Event(s.type,{bubbles:s.bubbles,cancelable:s.cancelable});n?n.dispatchEvent(o):e.dispatchEvent(o);break}}}onMediaPlayEvent(){var e;this.mediaPlayingCount++,(e=this.comms)==null||e.send("media_play",this.mediaPlayingCount)}onMediaPauseEvent(){var e;this.mediaPlayingCount>0&&this.mediaPlayingCount--,(e=this.comms)==null||e.send("media_pause",this.mediaPlayingCount)}pauseAllMedia(e){const t=e.document.querySelectorAll("audio,video");for(let i=0;i<t.length;i++)t[i].pause()}mount(e,t){this.comms=t,e.addEventListener("error",this.wndOnErr,!1),Reflect.defineProperty(e.navigator,"epubReadingSystem",{value:{name:"readium-ts-toolkit",version:"2.0.0-beta.2",hasFeature:(s,n="")=>{switch(s){case"dom-manipulation":return!0;case"layout-changes":return!0;case"touch-events":return!0;case"mouse-events":return!0;case"keyboard-events":return!0;case"spine-scripting":return!0;case"embedded-web-content":return!0;default:return!1}}},writable:!1}),"getAnimations"in e.document&&e.document.getAnimations().forEach(s=>{s.cancel(),this.allAnimations.add(s)}),t.register("activate",pe.moduleName,(s,n)=>{this.allAnimations.forEach(o=>{o.cancel(),o.play()}),n(!0)}),t.register("unfocus",pe.moduleName,(s,n)=>{this.pauseAllMedia(e),this.allAnimations.forEach(o=>o.pause()),n(!0)});const i=e.document.querySelectorAll("audio,video");for(let s=0;s<i.length;s++){const n=i[s];n.addEventListener("play",this.onMediaPlayEvent,{passive:!0}),n.addEventListener("pause",this.onMediaPauseEvent,{passive:!0})}return t.log("Setup Mounted"),!0}unmount(e,t){return e.removeEventListener("error",this.wndOnErr),e.removeEventListener("play",this.onMediaPlayEvent),e.removeEventListener("pause",this.onMediaPauseEvent),this.allAnimations.forEach(i=>i.cancel()),this.allAnimations.clear(),t.log("Setup Unmounted"),!0}};et.moduleName="setup";let tt=et;const it="readium-viewport",rt=class B extends tt{onViewportWidthChanged(e){const t=e.target;Z(t,"--RS__viewportWidth",`${t.innerWidth}px`)}mount(e,t){if(!super.mount(e,t))return!1;const i=e.document.createElement("meta");return i.dataset.readium="true",i.setAttribute("name","viewport"),i.setAttribute("id",it),i.setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no"),e.document.head.appendChild(i),e.addEventListener("orientationchange",this.onViewportWidthChanged),e.addEventListener("resize",this.onViewportWidthChanged),this.onViewportWidthChanged({target:e}),t.register("get_properties",B.moduleName,(s,n)=>{ze(e),n(!0)}),t.register("update_properties",B.moduleName,(s,n)=>{s["--RS__viewportWidth"]=`${e.innerWidth}px`,It(e,s),n(!0)}),t.register("set_property",B.moduleName,(s,n)=>{const o=s;Z(e,o[0],o[1]),n(!0)}),t.register("remove_property",B.moduleName,(s,n)=>{ae(e,s),n(!0)}),t.register("activate",B.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("ReflowableSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(B.moduleName),(i=e.document.head.querySelector(`#${it}`))==null||i.remove(),e.removeEventListener("orientationchange",this.onViewportWidthChanged),t.log("ReflowableSetup Unmounted"),super.unmount(e,t)}};rt.moduleName="reflowable_setup";let qt=rt;const st="readium-fixed-style",nt=class W extends tt{mount(e,t){if(!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");return i.id=st,i.dataset.readium="true",i.textContent=`
57
+ `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{this.comms.ready&&this.handleScroll()}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",N.moduleName,()=>{Bt(this.wnd);const n=this.doc().scrollTop;this.doc().scrollTop=n+1,this.doc().scrollTop=n}),t.register("go_progression",N.moduleName,(n,s)=>{const o=n;if(o<0||o>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),s(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=this.doc().offsetHeight*o,this.reportProgress(),T(this.wnd),s(!0)})}),t.register("go_id",N.moduleName,(n,s)=>{const o=e.document.getElementById(n);if(!o){s(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=o.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),T(this.wnd),s(!0)})}),t.register("go_text",N.moduleName,(n,s)=>{let o;Array.isArray(n)&&(n.length>1&&(o=n[1]),n=n[0]);const l=k.deserialize(n),c=le(this.wnd.document,new D({href:e.location.href,type:"text/html",text:l,locations:o?new x({otherLocations:new Map([["cssSelector",o]])}):void 0}));if(!c){s(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=c.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),T(this.wnd),s(!0)})}),t.register("go_start",N.moduleName,(n,s)=>{if(this.doc().scrollTop===0)return s(!1);this.doc().scrollTop=0,this.reportProgress(),s(!0)}),t.register("go_end",N.moduleName,(n,s)=>{if(this.doc().scrollTop===this.doc().scrollHeight-this.doc().offsetHeight)return s(!1);this.doc().scrollTop=this.doc().scrollHeight-this.doc().offsetHeight,this.reportProgress(),s(!0)}),t.register("unfocus",N.moduleName,(n,s)=>{T(this.wnd),s(!0)}),t.register(["go_next","go_prev"],N.moduleName,(n,s)=>s(!1)),t.register("focus",N.moduleName,(n,s)=>{this.reportProgress(),s(!0)}),t.register("first_visible_locator",N.moduleName,(n,s)=>{const o=Ze(e,!0);this.comms.send("first_visible_locator",o.serialize()),s(!0)}),t.log("ScrollSnapper Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(N.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),(i=e.document.getElementById(et))==null||i.remove(),t.log("ScrollSnapper Unmounted"),!0}};tt.moduleName="scroll_snapper";let Xt=tt;class ce extends _{constructor(){super(...arguments),this.pointerMoved=!1,this.onPointerUp=this.onPointUp.bind(this),this.onPointerMove=this.onPointMove.bind(this),this.onPointerDown=this.onPointDown.bind(this),this.onContextMenu=this.onContext.bind(this),this.onClicker=this.onClick.bind(this)}onPointUp(e){var n,s,o,l,c;const t=this.wnd.getSelection();if(t&&((n=t.toString())==null?void 0:n.length)>0){const h=(s=t.getRangeAt(0))==null?void 0:s.getClientRects();if(!h||h.length===0)return;const u=h[0],p={text:t.toString(),x:u.x,y:u.y,width:u.width,height:u.height,targetFrameSrc:(l=(o=this.wnd)==null?void 0:o.location)==null?void 0:l.href};this.comms.send("text_selected",p)}if(this.pointerMoved){this.pointerMoved=!1;return}if(!(t!=null&&t.isCollapsed)||!e.isPrimary)return;const i=this.wnd.devicePixelRatio;e.preventDefault(),this.comms.send(e.pointerType==="touch"?"tap":"click",{defaultPrevented:e.defaultPrevented,x:e.clientX*i,y:e.clientY*i,targetFrameSrc:this.wnd.location.href,targetElement:e.target.outerHTML,interactiveElement:(c=Ye(e.target))==null?void 0:c.outerHTML,cssSelector:this.wnd._readium_cssSelectorGenerator.getCssSelector(e.target)}),this.pointerMoved=!1}onPointMove(e){if(e.movementY!==void 0&&e.movementX!==void 0){(Math.abs(e.movementX)>1||Math.abs(e.movementY)>1)&&(this.pointerMoved=!0);return}this.pointerMoved=!0}onPointDown(){this.pointerMoved=!1}onContext(e){this.onPointUp(e),this.pointerMoved=!1}onClick(e){if(e.preventDefault(),!e.isTrusted){const t=new PointerEvent("pointerup",{isPrimary:!0,pointerType:"mouse",clientX:e.clientX,clientY:e.clientY});Object.defineProperty(t,"target",{writable:!1,value:e.target}),Object.defineProperty(t,"defaultPrevented",{writable:!1,value:e.defaultPrevented}),this.onPointUp(t)}}mount(e,t){return this.wnd=e,this.comms=t,e.document.addEventListener("pointerdown",this.onPointerDown),e.document.addEventListener("pointerup",this.onPointerUp),e.document.addEventListener("contextmenu",this.onContextMenu),e.document.addEventListener("pointermove",this.onPointerMove),e.document.addEventListener("click",this.onClicker),t.log("Peripherals Mounted"),!0}unmount(e,t){return e.document.removeEventListener("pointerdown",this.onPointerDown),e.document.removeEventListener("pointerup",this.onPointerUp),e.document.removeEventListener("contextmenu",this.onContextMenu),e.document.removeEventListener("pointermove",this.onPointerMove),e.document.removeEventListener("click",this.onClicker),t.log("Peripherals Unmounted"),!0}}ce.moduleName="peripherals";const it=class me extends _{constructor(){super(...arguments),this.mediaPlayingCount=0,this.allAnimations=new Set}wndOnErr(e){var t;(t=this.comms)==null||t.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}unblock(e){var t;for(e._readium_blockEvents=!1;((t=e._readium_blockedEvents)==null?void 0:t.length)>0;){const i=e._readium_blockedEvents.shift();switch(i[0]){case 0:Reflect.apply(i[1],i[2],i[3]);break;case 1:const n=i[1],s=i[2];e.removeEventListener(n.type,e._readium_eventBlocker,!0);const o=new Event(n.type,{bubbles:n.bubbles,cancelable:n.cancelable});s?s.dispatchEvent(o):e.dispatchEvent(o);break}}}onMediaPlayEvent(){var e;this.mediaPlayingCount++,(e=this.comms)==null||e.send("media_play",this.mediaPlayingCount)}onMediaPauseEvent(){var e;this.mediaPlayingCount>0&&this.mediaPlayingCount--,(e=this.comms)==null||e.send("media_pause",this.mediaPlayingCount)}pauseAllMedia(e){const t=e.document.querySelectorAll("audio,video");for(let i=0;i<t.length;i++)t[i].pause()}mount(e,t){this.comms=t,e.addEventListener("error",this.wndOnErr,!1),Reflect.defineProperty(e.navigator,"epubReadingSystem",{value:{name:"readium-ts-toolkit",version:"2.0.0-beta.4",hasFeature:(n,s="")=>{switch(n){case"dom-manipulation":return!0;case"layout-changes":return!0;case"touch-events":return!0;case"mouse-events":return!0;case"keyboard-events":return!0;case"spine-scripting":return!0;case"embedded-web-content":return!0;default:return!1}}},writable:!1}),"getAnimations"in e.document&&e.document.getAnimations().forEach(n=>{n.cancel(),this.allAnimations.add(n)}),t.register("activate",me.moduleName,(n,s)=>{this.allAnimations.forEach(o=>{o.cancel(),o.play()}),s(!0)}),t.register("unfocus",me.moduleName,(n,s)=>{this.pauseAllMedia(e),this.allAnimations.forEach(o=>o.pause()),s(!0)});const i=e.document.querySelectorAll("audio,video");for(let n=0;n<i.length;n++){const s=i[n];s.addEventListener("play",this.onMediaPlayEvent,{passive:!0}),s.addEventListener("pause",this.onMediaPauseEvent,{passive:!0})}return t.log("Setup Mounted"),!0}unmount(e,t){return e.removeEventListener("error",this.wndOnErr),e.removeEventListener("play",this.onMediaPlayEvent),e.removeEventListener("pause",this.onMediaPauseEvent),this.allAnimations.forEach(i=>i.cancel()),this.allAnimations.clear(),t.log("Setup Unmounted"),!0}};it.moduleName="setup";let rt=it;const nt="readium-viewport",st=class B extends rt{onViewportWidthChanged(e){const t=e.target;Q(t,"--RS__viewportWidth",`${t.innerWidth}px`)}mount(e,t){if(!super.mount(e,t))return!1;const i=e.document.createElement("meta");return i.dataset.readium="true",i.setAttribute("name","viewport"),i.setAttribute("id",nt),i.setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no"),e.document.head.appendChild(i),e.addEventListener("orientationchange",this.onViewportWidthChanged),e.addEventListener("resize",this.onViewportWidthChanged),this.onViewportWidthChanged({target:e}),t.register("get_properties",B.moduleName,(n,s)=>{We(e),s(!0)}),t.register("update_properties",B.moduleName,(n,s)=>{n["--RS__viewportWidth"]=`${e.innerWidth}px`,Rt(e,n),s(!0)}),t.register("set_property",B.moduleName,(n,s)=>{const o=n;Q(e,o[0],o[1]),s(!0)}),t.register("remove_property",B.moduleName,(n,s)=>{he(e,n),s(!0)}),t.register("activate",B.moduleName,(n,s)=>{this.unblock(e),s(!0)}),t.log("ReflowableSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(B.moduleName),(i=e.document.head.querySelector(`#${nt}`))==null||i.remove(),e.removeEventListener("orientationchange",this.onViewportWidthChanged),t.log("ReflowableSetup Unmounted"),super.unmount(e,t)}};st.moduleName="reflowable_setup";let Gt=st;const ot="readium-fixed-style",at=class F extends rt{mount(e,t){if(!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");return i.id=ot,i.dataset.readium="true",i.textContent=`
58
58
  html, body {
59
59
  text-size-adjust: none;
60
60
  -ms-text-size-adjust: none;
@@ -66,4 +66,4 @@
66
66
  min-height: 100%;
67
67
 
68
68
  /*cursor: var() TODO*/
69
- }`,e.document.head.appendChild(i),t.register("set_property",W.moduleName,(s,n)=>{const o=s;Z(e,o[0],o[1]),n(!0)}),t.register("remove_property",W.moduleName,(s,n)=>{ae(e,s),n(!0)}),t.register("first_visible_locator",W.moduleName,(s,n)=>n(!1)),t.register("unfocus",W.moduleName,(s,n)=>{T(e),n(!0)}),t.register(["focus","go_next","go_prev","go_id","go_end","go_start","go_text","go_progression"],W.moduleName,(s,n)=>n(!0)),t.register("activate",W.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("FixedSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(W.moduleName),(i=e.document.getElementById(st))==null||i.remove(),t.log("FixedSetup Unmounted"),super.unmount(e,t)}};nt.moduleName="fixed_setup";let _t=nt;const Xt=["fixed_setup","decorator","peripherals"],Gt=["reflowable_setup","decorator","peripherals","column_snapper","scroll_snapper"],he=new Map([_t,qt,le,ke,jt,Vt].map(r=>[r.moduleName,r]));class Yt{constructor(e=window,t=[]){this.loadedModules=[],this.wnd=e,this.comms=new ge(e);const i=[...new Set(t)];if(i.length){if(typeof e>"u")throw Error("Loader is not in a web browser");e.parent!==e&&this.comms.log("Loader is probably in a frame"),this.loadedModules=i.map(s=>{const n=this.loadModule(s);if(n)return n.mount(this.wnd,this.comms),n}).filter(s=>s!==void 0)}}loadModule(e){const t=he.get(e);return t===void 0?(this.comms.log(`Module "${name}" does not exist in the library`),t):new t}addModule(e){const t=this.loadModule(e);return!t||!t.mount(this.wnd,this.comms)?!1:(this.loadedModules.push(t),!0)}removeModule(e){const t=he.get(e);if(t===void 0)return this.comms.log(`Module "${e}" does not exist in the library`),!1;const i=this.loadedModules.findIndex(s=>s instanceof t);return i<0?!1:(this.loadedModules[i].unmount(this.wnd,this.comms),this.loadedModules.splice(i,1),!0)}destroy(){this.comms.destroy(),this.loadedModules.forEach(e=>e.unmount(this.wnd,this.comms)),this.loadedModules=[]}}E.COMMS_VERSION=U,E.Comms=ge,E.Decorator=ke,E.FXLModules=Xt,E.Layout=Fe,E.Loader=Yt,E.Module=V,E.ModuleLibrary=he,E.Peripherals=le,E.ReflowableModules=Gt,E.Width=We,E.mid=me,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
69
+ }`,e.document.head.appendChild(i),t.register("set_property",F.moduleName,(n,s)=>{const o=n;Q(e,o[0],o[1]),s(!0)}),t.register("remove_property",F.moduleName,(n,s)=>{he(e,n),s(!0)}),t.register("first_visible_locator",F.moduleName,(n,s)=>s(!1)),t.register("unfocus",F.moduleName,(n,s)=>{T(e),s(!0)}),t.register(["focus","go_next","go_prev","go_id","go_end","go_start","go_text","go_progression"],F.moduleName,(n,s)=>s(!0)),t.register("activate",F.moduleName,(n,s)=>{this.unblock(e),s(!0)}),t.log("FixedSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(F.moduleName),(i=e.document.getElementById(ot))==null||i.remove(),t.log("FixedSetup Unmounted"),super.unmount(e,t)}};at.moduleName="fixed_setup";let Yt=at;const Zt=["fixed_setup","decorator","peripherals"],Kt=["reflowable_setup","decorator","peripherals","column_snapper","scroll_snapper"],ue=new Map([Yt,Gt,ce,je,_t,Xt].map(r=>[r.moduleName,r]));class Jt{constructor(e=window,t=[]){this.loadedModules=[],this.wnd=e,this.comms=new ve(e);const i=[...new Set(t)];if(i.length){if(typeof e>"u")throw Error("Loader is not in a web browser");e.parent!==e&&this.comms.log("Loader is probably in a frame"),this.loadedModules=i.map(n=>{const s=this.loadModule(n);if(s)return s.mount(this.wnd,this.comms),s}).filter(n=>n!==void 0)}}loadModule(e){const t=ue.get(e);return t===void 0?(this.comms.log(`Module "${name}" does not exist in the library`),t):new t}addModule(e){const t=this.loadModule(e);return!t||!t.mount(this.wnd,this.comms)?!1:(this.loadedModules.push(t),!0)}removeModule(e){const t=ue.get(e);if(t===void 0)return this.comms.log(`Module "${e}" does not exist in the library`),!1;const i=this.loadedModules.findIndex(n=>n instanceof t);return i<0?!1:(this.loadedModules[i].unmount(this.wnd,this.comms),this.loadedModules.splice(i,1),!0)}destroy(){this.comms.destroy(),this.loadedModules.forEach(e=>e.unmount(this.wnd,this.comms)),this.loadedModules=[]}}b.COMMS_VERSION=$,b.Comms=ve,b.Decorator=je,b.FXLModules=Zt,b.Layout=Be,b.Loader=Jt,b.Module=_,b.ModuleLibrary=ue,b.Peripherals=ce,b.ReflowableModules=Kt,b.Width=Ue,b.mid=ye,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@readium/navigator-html-injectables",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.0-beta.4",
4
4
  "type": "module",
5
5
  "description": "An embeddable solution for connecting frames of HTML publications with a Readium Navigator",
6
6
  "author": "readium",
package/src/comms/keys.ts CHANGED
@@ -40,5 +40,6 @@ export type CommsCommandKey =
40
40
  "unfocus" |
41
41
  "focus" |
42
42
  "activate" |
43
- "shake";
43
+ "shake" |
44
+ "force_webkit_recalc";
44
45
  ;
@@ -78,4 +78,20 @@ export function appendVirtualColumnIfNeeded(wnd: ReadiumWindow): boolean {
78
78
  }
79
79
 
80
80
  return virtualColsCount !== needed;
81
+ }
82
+
83
+ /**
84
+ * This forces a recalculation in WebKit browsers.
85
+ * It is needed in scroll mode to ensure that the content is scrollable.
86
+ * Webkit seems to find itself in some kind of limbo if we do not do that.
87
+ * It has everything correct but the scroll listener is non-functional,
88
+ * unless you force a recalc or reflow.
89
+ * It is not needed in paginated mode.
90
+ */
91
+ export function forceWebkitRecalc(wnd: ReadiumWindow) {
92
+ // Borrowed from APB themselves…
93
+ const styleElement = wnd.document.createElement("style");
94
+ styleElement.appendChild(wnd.document.createTextNode("*{}"));
95
+ wnd.document.body.appendChild(styleElement);
96
+ wnd.document.body.removeChild(styleElement);
81
97
  }
@@ -49,7 +49,7 @@ interface DecorationItem {
49
49
  container: HTMLElement | undefined;
50
50
  }
51
51
 
52
- const canNativeHighlight = "Highlight" in window;
52
+ const canNativeHighlight = () => ("Highlight" in window);
53
53
  const cannotNativeHighlight = ["IMG", "IMAGE", "AUDIO", "VIDEO", "SVG"];
54
54
 
55
55
  class DecorationGroup {
@@ -71,7 +71,7 @@ class DecorationGroup {
71
71
  private readonly id: string,
72
72
  private readonly name: string
73
73
  ) {
74
- if (canNativeHighlight) {
74
+ if (canNativeHighlight()) {
75
75
  this.experimentalHighlights = true;
76
76
  this.notTextFlag = new Map<string, boolean>();
77
77
  }
@@ -39,7 +39,14 @@ export class ColumnSnapper extends Snapper {
39
39
  }
40
40
 
41
41
  reportProgress() {
42
- this.comms.send("progress", { progress: this.wnd.scrollX / this.cachedScrollWidth, reference: this.wnd.innerWidth / this.doc().scrollWidth });
42
+ const scrollX = this.wnd.scrollX;
43
+ const scrollWidth = this.cachedScrollWidth;
44
+ const progress = Math.max(0, Math.min(1, scrollX / scrollWidth));
45
+ const viewportEnd = Math.max(0, Math.min(1, (scrollX + this.wnd.innerWidth) / scrollWidth));
46
+ this.comms.send("progress", {
47
+ start: progress,
48
+ end: viewportEnd
49
+ });
43
50
  }
44
51
 
45
52
  private shakeTimeout = 0;
@@ -4,6 +4,7 @@ import { ReadiumWindow, deselect, findFirstVisibleLocator } from "../../helpers/
4
4
  import { ModuleName } from "../ModuleLibrary";
5
5
  import { Snapper } from "./Snapper";
6
6
  import { rangeFromLocator } from "../../helpers/locator";
7
+ import { forceWebkitRecalc } from "../../helpers/document";
7
8
 
8
9
  const SCROLL_SNAPPER_STYLE_ID = "readium-scroll-snapper-style";
9
10
 
@@ -18,16 +19,22 @@ export class ScrollSnapper extends Snapper {
18
19
  return this.wnd.document.scrollingElement as HTMLElement;
19
20
  }
20
21
 
21
- private reportProgress(data: { progress: number, reference: number }) {
22
- this.comms.send("progress", data);
22
+ private reportProgress() {
23
+ const scrollTop = this.doc().scrollTop;
24
+ const scrollHeight = this.doc().scrollHeight;
25
+ const progress = Math.max(0, Math.min(1, scrollTop / scrollHeight));
26
+ const viewportEnd = Math.max(0, Math.min(1, (scrollTop + this.wnd.innerHeight) / scrollHeight));
27
+ this.comms.send("progress", {
28
+ start: progress,
29
+ end: viewportEnd
30
+ });
23
31
  }
24
32
 
25
33
  private handleScroll = () => {
26
34
  if (!this.isScrolling) {
27
35
  this.isScrolling = true;
28
36
  this.wnd.requestAnimationFrame(() => {
29
- const progress = this.doc().scrollTop / this.doc().offsetHeight;
30
- this.reportProgress({ progress: progress, reference: this.wnd.innerHeight / this.doc().scrollHeight });
37
+ this.reportProgress();
31
38
  this.isScrolling = false;
32
39
  });
33
40
  }
@@ -63,6 +70,18 @@ export class ScrollSnapper extends Snapper {
63
70
  passive: true
64
71
  });
65
72
 
73
+ comms.register("force_webkit_recalc", ScrollSnapper.moduleName, () => {
74
+ forceWebkitRecalc(this.wnd);
75
+
76
+ // We absolutely must do this because overflown content
77
+ // won’t be rendered if we do not trigger scroll…
78
+ // Only the content at the start of the document,
79
+ // whose height is the viewport height, will be rendered.
80
+ const currentScroll = this.doc().scrollTop;
81
+ this.doc().scrollTop = currentScroll + 1;
82
+ this.doc().scrollTop = currentScroll;
83
+ });
84
+
66
85
  comms.register("go_progression", ScrollSnapper.moduleName, (data, ack) => {
67
86
  const position = data as number;
68
87
 
@@ -76,7 +95,7 @@ export class ScrollSnapper extends Snapper {
76
95
 
77
96
  this.wnd.requestAnimationFrame(() => {
78
97
  this.doc().scrollTop = this.doc().offsetHeight * position;
79
- this.reportProgress({ progress: position, reference: this.wnd.innerHeight / this.doc().scrollHeight });
98
+ this.reportProgress();
80
99
  deselect(this.wnd);
81
100
  ack(true);
82
101
  });
@@ -90,8 +109,7 @@ export class ScrollSnapper extends Snapper {
90
109
  }
91
110
  this.wnd.requestAnimationFrame(() => {
92
111
  this.doc().scrollTop = element.getBoundingClientRect().top + wnd.scrollY - wnd.innerHeight / 2;
93
- const progress = this.doc().scrollTop / this.doc().offsetHeight;
94
- this.reportProgress({ progress: progress, reference: this.wnd.innerHeight / this.doc().scrollHeight });
112
+ this.reportProgress();
95
113
  deselect(this.wnd);
96
114
  ack(true);
97
115
  });
@@ -122,8 +140,7 @@ export class ScrollSnapper extends Snapper {
122
140
  }
123
141
  this.wnd.requestAnimationFrame(() => {
124
142
  this.doc().scrollTop = r.getBoundingClientRect().top + wnd.scrollY - wnd.innerHeight / 2;
125
- const progress = this.doc().scrollTop / this.doc().offsetHeight
126
- this.reportProgress({ progress: progress, reference: this.wnd.innerHeight / this.doc().scrollHeight });
143
+ this.reportProgress();
127
144
  deselect(this.wnd);
128
145
  ack(true);
129
146
  });
@@ -132,14 +149,14 @@ export class ScrollSnapper extends Snapper {
132
149
  comms.register("go_start", ScrollSnapper.moduleName, (_, ack) => {
133
150
  if (this.doc().scrollTop === 0) return ack(false);
134
151
  this.doc().scrollTop = 0;
135
- this.reportProgress({ progress: 0, reference: this.wnd.innerHeight / this.doc().scrollHeight });
152
+ this.reportProgress();
136
153
  ack(true);
137
154
  });
138
155
 
139
156
  comms.register("go_end", ScrollSnapper.moduleName, (_, ack) => {
140
- if (this.doc().scrollTop === 0) return ack(false);
141
- this.doc().scrollTop = 0;
142
- this.reportProgress({ progress: 0, reference: this.wnd.innerHeight / this.doc().scrollHeight });
157
+ if (this.doc().scrollTop === this.doc().scrollHeight - this.doc().offsetHeight) return ack(false);
158
+ this.doc().scrollTop = this.doc().scrollHeight - this.doc().offsetHeight;
159
+ this.reportProgress();
143
160
  ack(true);
144
161
  })
145
162
 
@@ -154,8 +171,7 @@ export class ScrollSnapper extends Snapper {
154
171
  ], ScrollSnapper.moduleName, (_, ack) => ack(false));
155
172
 
156
173
  comms.register("focus", ScrollSnapper.moduleName, (_, ack) => {
157
- const progress = this.doc().scrollTop / this.doc().offsetHeight
158
- this.reportProgress({ progress: progress, reference: this.wnd.innerHeight / this.doc().scrollHeight });
174
+ this.reportProgress();
159
175
  ack(true);
160
176
  });
161
177
 
@@ -1,2 +1,2 @@
1
1
  export type CommsEventKey = "_pong" | "_unhandled" | "_ack" | "log" | "error" | "click" | "tap" | "tap_more" | "no_more" | "no_less" | "swipe" | "progress" | "first_visible_locator" | "text_selected" | "media_play" | "media_pause";
2
- export type CommsCommandKey = "_ping" | "go_prev" | "go_next" | "go_id" | "go_text" | "go_end" | "go_start" | "go_progression" | "get_properties" | "update_properties" | "set_property" | "remove_property" | "first_visible_locator" | "decorate" | "protect" | "unprotect" | "unfocus" | "focus" | "activate" | "shake";
2
+ export type CommsCommandKey = "_ping" | "go_prev" | "go_next" | "go_id" | "go_text" | "go_end" | "go_start" | "go_progression" | "get_properties" | "update_properties" | "set_property" | "remove_property" | "first_visible_locator" | "decorate" | "protect" | "unprotect" | "unfocus" | "focus" | "activate" | "shake" | "force_webkit_recalc";