@readium/navigator-html-injectables 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +855 -783
- package/dist/index.umd.cjs +12 -11
- package/package.json +3 -3
- package/src/helpers/color.ts +190 -99
- package/src/modules/Decorator.ts +70 -9
- package/types/src/helpers/color.d.ts +16 -6
- package/types/src/modules/Decorator.d.ts +3 -0
package/dist/index.umd.cjs
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
(function(v,k){typeof exports=="object"&&typeof module<"u"?k(exports):typeof define=="function"&&define.amd?define(["exports"],k):(v=typeof globalThis<"u"?globalThis:v||self,k(v["navigator-html-injectables"]={}))})(this,(function(v){"use strict";const k=Math.pow(2,32),we=()=>Math.round(Math.random()*k).toString(36),Ce=()=>`${Math.round(performance.now())}-${we()}-${we()}`,F=1;class Pe{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!==F){t._readium>F?this.send("error",`received comms version ${t._readium} higher than ${F}`):this.send("error",`received comms version ${t._readium} lower than ${F}`),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(l=>l.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:F,_channel:this.channelId,id:i??Ce(),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)}}}const O=class ${constructor(e){if(typeof e=="string"){if(!$.VALID_MODES.has(e.toLowerCase()))return;this.value=e.toLowerCase()}else{const t=e.filter(i=>$.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 $(e);if(!Array.isArray(e))return;const t=e.filter(i=>i?$.VALID_MODES.has(i.toLowerCase()):!1);if(t.length!==0)return new $(t)}serialize(){return this.value}};O.VALID_MODES=new Set(["auditory","tactile","textual","visual"]),O.AUDITORY=new O("auditory"),O.TACTILE=new O("tactile"),O.TEXTUAL=new O("textual"),O.VISUAL=new O("visual");class oe{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 oe({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 S{constructor(e){this.otherProperties=e}get page(){return this.otherProperties.page}static deserialize(e){if(e)return new S(e)}serialize(){return this.otherProperties}add(e){const t=Object.assign({},this.otherProperties);for(const i in e)t[i]=e[i];return new S(t)}}Object.defineProperty(S.prototype,"encryption",{get:function(){return oe.deserialize(this.otherProperties.encrypted)}});function ot(r){return r&&Array.isArray(r)?r:void 0}function Me(r){return r&&typeof r=="string"?[r]:ot(r)}function Ae(r){return typeof r=="string"?new Date(r):void 0}function Y(r){return isNaN(r)?void 0:r}function w(r){return Y(r)!==void 0&&Math.sign(r)>=0?r:void 0}function at(r){const e=new Array;return r.forEach(t=>e.push(t)),e}class a{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 p=1;p<s.length;p++){const y=s[p].split("=");if(y.length===2){const d=y[0].toLocaleLowerCase(),f=d==="charset"?y[1].toUpperCase():y[1];o[d]=f}}const l={},u=Object.keys(o);u.sort((p,y)=>p.localeCompare(y)),u.forEach(p=>l[p]=o[p]);let h="";for(const p in l){const y=l[p];h+=`;${p}=${y}`}const c=`${t}/${i}${h}`,m=l.encoding;this.string=c,this.type=t,this.subtype=i,this.parameters=l,this.encoding=m,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(([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"?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 Ne{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],l=e[o];return l?`${o}=${encodeURIComponent(l)}`:""}).join("&");return this.uri.replace(/\{(\??)([^}]+)\}/g,(...s)=>s[1]?i(s[2]):t(s[2]))}}class b{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=Y(e.progression),i=Y(e.totalProgression),s=Y(e.position),n=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position"]);return Object.entries(e).forEach(([l,u])=>{o.has(l)||n.set(l,u)}),new b({fragments:Me(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 D{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new D({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 L{constructor(e){this.href=e.href,this.type=e.type,this.title=e.title,this.locations=e.locations?e.locations:new b({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new L({href:e.href,type:e.type,title:e.title,locations:b.deserialize(e.locations),text:D.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 L({href:this.href,type:this.type,title:this.title,text:this.text,locations:new b({...this.locations,...e})})}}class U{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.size=e.size,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 U({href:e.href,templated:e.templated,type:e.type,title:e.title,rels:e.rel?Array.isArray(e.rel)?new Set(e.rel):new Set([e.rel]):void 0,properties:S.deserialize(e.properties),height:w(e.height),width:w(e.width),size:w(e.size),duration:w(e.duration),bitrate:w(e.bitrate),languages:Me(e.language),alternates:K.deserialize(e.alternate),children:K.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=at(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.size!==void 0&&(e.size=this.size),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 Ne(this.href).parameters:new Set}expandTemplate(e){return new U({href:new Ne(this.href).expand(e),templated:!1})}addProperties(e){const t=U.deserialize(this.serialize());return t.properties=t.properties?t.properties?.add(e):new S(e),t}get locator(){let e=this.href.split("#");return new L({href:e.length>0&&e[0]!==void 0?e[0]:this.href,type:this.type??"",title:this.title,locations:new b({fragments:e.length>1&&e[1]!==void 0?[e[1]]:[]})})}}class K{constructor(e){this.items=e}static deserialize(e){if(e&&Array.isArray(e))return new K(e.map(t=>U.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)}}S.prototype.getContains=function(){return new Set(this.otherProperties.contains||[])};class Z{constructor(e){this.cssSelector=e.cssSelector,this.textNodeIndex=e.textNodeIndex,this.charOffset=e.charOffset}static deserialize(e){if(!(e&&e.cssSelector))return;let t=w(e.textNodeIndex);if(t===void 0)return;let i=w(e.charOffset);return i===void 0&&(i=w(e.offset)),new Z({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 ae{constructor(e){this.start=e.start,this.end=e.end}static deserialize(e){if(!e)return;let t=Z.deserialize(e.start);if(t)return new ae({start:t,end:Z.deserialize(e.end)})}serialize(){const e={start:this.start.serialize()};return this.end&&(e.end=this.end.serialize()),e}}b.prototype.getCssSelector=function(){return this.otherLocations?.get("cssSelector")},b.prototype.getPartialCfi=function(){return this.otherLocations?.get("partialCfi")},b.prototype.getDomRange=function(){return ae.deserialize(this.otherLocations?.get("domRange"))},b.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()]))},b.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?.startsWith("#")?r.slice(1):r},b.prototype.page=function(){const r=parseInt(this.fragmentParameters().get("page"));if(!isNaN(r)&&r>=0)return r},b.prototype.time=function(){const r=parseInt(this.fragmentParameters().get("t"));if(!isNaN(r))return r},b.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 le{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=w(e.value);if(i!==void 0)return new le({currency:t,value:i})}serialize(){return{currency:this.currency,value:this.value}}}class V{constructor(e){this.type=e.type,this.children=e.children}static deserialize(e){if(e&&e.type)return new V({type:e.type,children:V.deserializeArray(e.children)})}static deserializeArray(e){if(Array.isArray(e))return e.map(t=>V.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 he{constructor(e){this.total=e.total,this.position=e.position}static deserialize(e){if(e)return new he({total:w(e.total),position:w(e.position)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.position!==void 0&&(e.position=this.position),e}}class ce{constructor(e){this.total=e.total,this.available=e.available}static deserialize(e){if(e)return new ce({total:w(e.total),available:w(e.available)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.available!==void 0&&(e.available=this.available),e}}class ue{constructor(e){this.state=e.state,this.since=e.since,this.until=e.until}static deserialize(e){if(e&&e.state)return new ue({state:e.state,since:Ae(e.since),until:Ae(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}}S.prototype.getNumberOfItems=function(){return w(this.otherProperties.numberOfItems)},S.prototype.getPrice=function(){return le.deserialize(this.otherProperties.price)},S.prototype.getIndirectAcquisitions=function(){const r=this.otherProperties.indirectAcquisition;if(r&&Array.isArray(r))return r.map(e=>V.deserialize(e)).filter(e=>e!==void 0)},S.prototype.getHolds=function(){return he.deserialize(this.otherProperties.holds)},S.prototype.getCopies=function(){return ce.deserialize(this.otherProperties.copies)},S.prototype.getAvailability=function(){return ue.deserialize(this.otherProperties.availability)},S.prototype.getAuthenticate=function(){return U.deserialize(this.otherProperties.authenticate)};const lt="CssSelectorGenerator";function Oe(r="unknown problem",...e){console.warn(`${lt}: ${r}`,...e)}function ht(r){return r instanceof RegExp}function ct(r){return r.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function ut(r){const e=r.map(t=>{if(ht(t))return i=>t.test(i);if(typeof t=="function")return i=>{const s=t(i);return typeof s!="boolean"?(Oe("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("^"+ct(t)+"$");return s=>i.test(s)}return Oe("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))}ut(["class","id","ng-*"]);class B{}function Le(r){return r.split("").reverse().join("")}function dt(r,e,t){const i=Le(e);return t.map(s=>{const n=Math.max(0,s.end-e.length-s.errors),o=Le(r.slice(n,s.end));return{start:Re(o,i,s.errors).reduce((u,h)=>s.end-h.end<u?s.end-h.end:u,s.end),end:s.end,errors:s.errors}})}function de(r){return(r|-r)>>31&1}function Ie(r,e,t,i){let s=r.P[t],n=r.M[t];const o=i>>>31,l=e[t]|o,u=l|n,h=(l&s)+s^s|l;let c=n|~(h|s),m=s&h;const p=de(c&r.lastRowMask[t])-de(m&r.lastRowMask[t]);return c<<=1,m<<=1,m|=o,c|=de(i)-o,s=m|~(u|c),n=c&u,r.P[t]=s,r.M[t]=n,p}function Re(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 l=new Uint32Array(n+1),u=new Map,h=[];for(let p=0;p<256;p++)h.push(l);for(let p=0;p<e.length;p+=1){const y=e.charCodeAt(p);if(u.has(y))continue;const d=new Uint32Array(n+1);u.set(y,d),y<h.length&&(h[y]=d);for(let f=0;f<=n;f+=1){d[f]=0;for(let g=0;g<s;g+=1){const T=f*s+g;if(T>=e.length)continue;e.charCodeAt(T)===y&&(d[f]|=1<<g)}}}let c=Math.max(0,Math.ceil(t/s)-1);const m=new Uint32Array(n+1);for(let p=0;p<=c;p+=1)m[p]=(p+1)*s;m[n]=e.length;for(let p=0;p<=c;p+=1)o.P[p]=-1,o.M[p]=0;for(let p=0;p<r.length;p+=1){const y=r.charCodeAt(p);let d;y<h.length?d=h[y]:(d=u.get(y),typeof d>"u"&&(d=l));let f=0;for(let g=0;g<=c;g+=1)f=Ie(o,d,g,f),m[g]+=f;if(m[c]-f<=t&&c<n&&(d[c+1]&1||f<0)){c+=1,o.P[c]=-1,o.M[c]=0;let g;if(c===n){const T=e.length%s;g=T===0?s:T}else g=s;m[c]=m[c-1]+g-f+Ie(o,d,c,f)}else for(;c>0&&m[c]>=t+s;)c-=1;c===n&&m[c]<=t&&(m[c]<t&&i.splice(0,i.length),i.push({start:-1,end:p+1,errors:m[c]}),t=m[c])}return i}function pt(r,e,t){const i=Re(r,e,t);return dt(r,e,i)}function ze(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:pt(r,e,t)}function De(r,e){return e.length===0||r.length===0?0:1-ze(r,e,e.length)[0].errors/e.length}function ft(r,e,t={}){if(e.length===0)return null;const i=Math.min(256,e.length/2),s=ze(r,e,i);if(s.length===0)return null;const n=l=>{const p=1-l.errors/e.length,y=t.prefix?De(r.slice(Math.max(0,l.start-t.prefix.length),l.start),t.prefix):1,d=t.suffix?De(r.slice(l.end,l.end+t.suffix.length),t.suffix):1;let f=1;return typeof t.hint=="number"&&(f=1-Math.abs(l.start-t.hint)/r.length),(50*p+20*y+20*d+2*f)/92},o=s.map(l=>({start:l.start,end:l.end,score:n(l)}));return o.sort((l,u)=>u.score-l.score),o[0]}function pe(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 We(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 l=()=>{if(n=e===1?t.nextNode():t.previousNode(),n){const u=n.textContent,h=e===1?0:u.length;o=pe(u,h,e)}};for(;n&&o===-1&&n!==s;)l();if(n&&o>=0)return{node:n,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function mt(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:pe(r.startContainer.textContent,r.startOffset,1),end:pe(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}=We(e,1);n&&o>=0&&e.setStart(n,o)}if(!i){const{node:n,offset:o}=We(e,2);n&&o>0&&e.setEnd(n,o)}return e}function Fe(r){switch(r.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return r.textContent?.length??0;default:return 0}}function Ue(r){let e=r.previousSibling,t=0;for(;e;)t+=Fe(e),e=e.previousSibling;return t}function Be(r,...e){let t=e.shift();const i=r.ownerDocument.createNodeIterator(r,NodeFilter.SHOW_TEXT),s=[];let n=i.nextNode(),o,l=0;for(;t!==void 0&&n;)o=n,l+o.data.length>t?(s.push({node:o,offset:t-l}),t=e.shift()):(n=i.nextNode(),l+=o.data.length);for(;t!==void 0&&o&&l===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+=Ue(t),t=t.parentElement;return new A(t,i)}resolve(e={}){try{return Be(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=Ue(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+=Fe(e.childNodes[s]);return new A(e,i)}default:throw new Error("Point is not in an element or text node")}}}class z{constructor(e,t){this.start=e,this.end=t}relativeTo(e){return new z(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]=Be(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 z(t,i)}static fromOffsets(e,t,i){return new z(new A(e,t),new A(e,i))}static trimmedRange(e){return mt(z.fromRange(e).toRange())}}class J{constructor(e,t,i){this.root=e,this.start=t,this.end=i}static fromRange(e,t){const i=z.fromRange(t).relativeTo(e);return new J(e,i.start.offset,i.end.offset)}static fromSelector(e,t){return new J(e,t.start,t.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return z.fromOffsets(this.root,this.start,this.end).toRange()}}class Q{constructor(e,t,i={}){this.root=e,this.exact=t,this.context=i}static fromRange(e,t){const i=e.textContent,s=z.fromRange(t).relativeTo(e),n=s.start.offset,o=s.end.offset,l=32;return new Q(e,i.slice(n,o),{prefix:i.slice(Math.max(0,n-l),n),suffix:i.slice(o,Math.min(i.length,o+l))})}static fromSelector(e,t){const{prefix:i,suffix:s}=t;return new Q(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=ft(t,this.exact,{...this.context,hint:e.hint});if(!i)throw new Error("Quote not found");return new J(this.root,i.start,i.end)}}function gt(r){const e=r.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function ee(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 Q(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||gt(s)?(n.selectNode(s),n):(n.setStartBefore(s),n.setEndAfter(s),n)}}}catch(t){console.error(t)}return null}function yt(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=He(s,i),o=bt(n,i),l=$e(o),u=4;for(let h=l.length-1;h>=0;h--){const c=l[h];if(!(c.width*c.height>u))if(l.length>1)l.splice(h,1);else break}return l}function He(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 l=M(n.top,o.top,e)&&M(n.bottom,o.bottom,e),u=M(n.left,o.left,e)&&M(n.right,o.right,e);if(l&&!u&&Ve(n,o,e)){const m=r.filter(y=>y!==n&&y!==o),p=vt(n,o);return m.push(p),He(m,e)}}return r}function vt(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 bt(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)&&Et(n,i,e)){t.delete(i);break}}return Array.from(t)}function Et(r,e,t){return te(r,e.left,e.top,t)&&te(r,e.right,e.top,t)&&te(r,e.left,e.bottom,t)&&te(r,e.right,e.bottom,t)}function te(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 $e(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&&Ve(i,s,-1)){let n=[],o;const l=ke(i,s);if(l.length===1)n=l,o=i;else{const h=ke(s,i);l.length<h.length?(n=l,o=i):(n=h,o=s)}const u=r.filter(h=>h!==o);return Array.prototype.push.apply(u,n),$e(u)}}return r}function ke(r,e){const t=xt(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 xt(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 Ve(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 fe(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 je(r,e){const t=fe(r);Object.keys(t).forEach(i=>{e.hasOwnProperty(i)||ie(r,i)}),Object.entries(e).forEach(([i,s])=>{t[i]!==s&&j(r,i,s)})}function qe(r,e){return r.document.documentElement.style.getPropertyValue(e)}function j(r,e,t){r.document.documentElement.style.setProperty(e,t)}function ie(r,e){r.document.documentElement.style.removeProperty(e)}const Tt=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}},St=r=>.2126*r.r*r.a+.7152*r.g*r.a+.0722*r.b*r.a,wt=r=>{const e=Tt(r);return St(e)<128};var Xe=(r=>(r.Wrap="wrap",r.Viewport="viewport",r.Bounds="bounds",r.Page="page",r))(Xe||{}),_e=(r=>(r.Boxes="boxes",r.Bounds="bounds",r))(_e||{});const Ct=()=>"Highlight"in window,Ge=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Pt{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,Ct()&&(this.experimentalHighlights=!0,this.notTextFlag=new Map)}get activeable(){return this.activateable}set activeable(e){this.activateable=e}add(e){const t=`${this.id}-${this.lastItemId++}`,i=ee(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&&(Ge.includes(s.nodeName.toUpperCase())&&this.notTextFlag?.set(t,!0),s.querySelector(Ge.join(", ").toLowerCase())&&this.notTextFlag?.set(t,!0),(s.textContent?.trim()||"").length===0&&this.notTextFlag?.set(t,!0));const n={decoration:e,id:t,range:i};this.items.push(n),this.layout(n),this.renderLayout([n])}remove(e){const t=this.items.findIndex(s=>s.decoration.id===e);if(t<0)return;const i=this.items[t];this.items.splice(t,1),i.clickableElements=void 0,i.container&&(i.container.remove(),i.container=void 0),this.experimentalHighlights&&!this.notTextFlag?.has(i.id)&&this.wnd.CSS.highlights.get(this.id)?.delete(i.range),this.notTextFlag?.delete(i.id)}update(e){this.remove(e.id),this.add(e)}clear(){this.clearContainer(),this.items.length=0,this.notTextFlag?.clear()}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.items.forEach(e=>this.layout(e)),this.renderLayout(this.items)}experimentalLayout(e){const[t,i]=this.requireContainer(!0);i.add(e.range),t.innerHTML=`
|
|
1
|
+
(function(v,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(v=typeof globalThis<"u"?globalThis:v||self,j(v["navigator-html-injectables"]={}))})(this,(function(v){"use strict";const j=Math.pow(2,32),ze=()=>Math.round(Math.random()*j).toString(36),De=()=>`${Math.round(performance.now())}-${ze()}-${ze()}`,F=1;class We{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!==F){t._readium>F?this.send("error",`received comms version ${t._readium} higher than ${F}`):this.send("error",`received comms version ${t._readium} lower than ${F}`),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,r=>{this.send("_ack",r,e.id)}))}register(e,t,i){Array.isArray(e)||(e=[e]),e.forEach(r=>{const n=this.registrar.get(r);if(n&&n.length>=0){if(n.find(a=>a.module===t))throw new Error(`Trying to register another callback for combination of event ${r} and module ${t}`);n.push({cb:i,module:t}),this.registrar.set(r,n)}else this.registrar.set(r,[{cb:i,module:t}])})}unregister(e,t){Array.isArray(e)||(e=[e]),e.forEach(i=>{const r=this.registrar.get(i);!r||r.length===0||r.splice(r.findIndex(n=>n.module===t),1)})}unregisterAll(e){this.registrar.forEach((t,i)=>this.registrar.set(i,t.filter(r=>r.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,r=[]){if(!this.destination)throw Error("Attempted to send comms message before destination has been initialized");const n={_readium:F,_channel:this.channelId,id:i??De(),key:e,data:t};try{this.destination.postMessage(n,{targetOrigin:this.origin,transfer:r})}catch(o){if(r.length>0)throw o;this.destination.postMessage(n,this.origin,r)}}}const O=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}};O.VALID_MODES=new Set(["auditory","tactile","textual","visual"]),O.AUDITORY=new O("auditory"),O.TACTILE=new O("tactile"),O.TEXTUAL=new O("textual"),O.VISUAL=new O("visual");class ue{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 ue({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 S{constructor(e){this.otherProperties=e}get page(){return this.otherProperties.page}static deserialize(e){if(e)return new S(e)}serialize(){return this.otherProperties}add(e){const t=Object.assign({},this.otherProperties);for(const i in e)t[i]=e[i];return new S(t)}}Object.defineProperty(S.prototype,"encryption",{get:function(){return ue.deserialize(this.otherProperties.encrypted)}});function vt(s){return s&&Array.isArray(s)?s:void 0}function Fe(s){return s&&typeof s=="string"?[s]:vt(s)}function Ue(s){return typeof s=="string"?new Date(s):void 0}function J(s){return isNaN(s)?void 0:s}function w(s){return J(s)!==void 0&&Math.sign(s)>=0?s:void 0}function bt(s){const e=new Array;return s.forEach(t=>e.push(t)),e}class l{constructor(e){let t,i,r=e.mediaType.replace(/\s/g,"").split(";");const n=r[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 d=1;d<r.length;d++){const y=r[d].split("=");if(y.length===2){const p=y[0].toLocaleLowerCase(),f=p==="charset"?y[1].toUpperCase():y[1];o[p]=f}}const a={},u=Object.keys(o);u.sort((d,y)=>d.localeCompare(y)),u.forEach(d=>a[d]=o[d]);let h="";for(const d in a){const y=a[d];h+=`;${d}=${y}`}const c=`${t}/${i}${h}`,m=a.encoding;this.string=c,this.type=t,this.subtype=i,this.parameters=a,this.encoding=m,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}`)),r=new Set(Object.entries(t.parameters).map(([n,o])=>`${n}=${o}`));for(const n of Array.from(i.values()))if(!r.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 Be{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(r=>r.trim())):new Set}expand(e){const t=r=>r.split(",").map(n=>{const o=e[n];return o?encodeURIComponent(o):""}).join(","),i=r=>"?"+r.split(",").map(n=>{const o=n.split("=")[0],a=e[o];return a?`${o}=${encodeURIComponent(a)}`:""}).join("&");return this.uri.replace(/\{(\??)([^}]+)\}/g,(...r)=>r[1]?i(r[2]):t(r[2]))}}class b{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=J(e.progression),i=J(e.totalProgression),r=J(e.position),n=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position"]);return Object.entries(e).forEach(([a,u])=>{o.has(a)||n.set(a,u)}),new b({fragments:Fe(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:r!==void 0&&r>0?r: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 D{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new D({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 L{constructor(e){this.href=e.href,this.type=e.type,this.title=e.title,this.locations=e.locations?e.locations:new b({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new L({href:e.href,type:e.type,title:e.title,locations:b.deserialize(e.locations),text:D.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 L({href:this.href,type:this.type,title:this.title,text:this.text,locations:new b({...this.locations,...e})})}}class U{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.size=e.size,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 U({href:e.href,templated:e.templated,type:e.type,title:e.title,rels:e.rel?Array.isArray(e.rel)?new Set(e.rel):new Set([e.rel]):void 0,properties:S.deserialize(e.properties),height:w(e.height),width:w(e.width),size:w(e.size),duration:w(e.duration),bitrate:w(e.bitrate),languages:Fe(e.language),alternates:Q.deserialize(e.alternate),children:Q.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=bt(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.size!==void 0&&(e.size=this.size),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 Be(this.href).parameters:new Set}expandTemplate(e){return new U({href:new Be(this.href).expand(e),templated:!1})}addProperties(e){const t=U.deserialize(this.serialize());return t.properties=t.properties?t.properties?.add(e):new S(e),t}get locator(){let e=this.href.split("#");return new L({href:e.length>0&&e[0]!==void 0?e[0]:this.href,type:this.type??"",title:this.title,locations:new b({fragments:e.length>1&&e[1]!==void 0?[e[1]]:[]})})}}class Q{constructor(e){this.items=e}static deserialize(e){if(e&&Array.isArray(e))return new Q(e.map(t=>U.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 r of e)if(i.mediaType.matches(r))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)}}S.prototype.getContains=function(){return new Set(this.otherProperties.contains||[])};class ee{constructor(e){this.cssSelector=e.cssSelector,this.textNodeIndex=e.textNodeIndex,this.charOffset=e.charOffset}static deserialize(e){if(!(e&&e.cssSelector))return;let t=w(e.textNodeIndex);if(t===void 0)return;let i=w(e.charOffset);return i===void 0&&(i=w(e.offset)),new ee({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 de{constructor(e){this.start=e.start,this.end=e.end}static deserialize(e){if(!e)return;let t=ee.deserialize(e.start);if(t)return new de({start:t,end:ee.deserialize(e.end)})}serialize(){const e={start:this.start.serialize()};return this.end&&(e.end=this.end.serialize()),e}}b.prototype.getCssSelector=function(){return this.otherLocations?.get("cssSelector")},b.prototype.getPartialCfi=function(){return this.otherLocations?.get("partialCfi")},b.prototype.getDomRange=function(){return de.deserialize(this.otherLocations?.get("domRange"))},b.prototype.fragmentParameters=function(){return new Map(this.fragments.map(s=>s.startsWith("#")?s.slice(1):s).join("&").split("&").filter(s=>!s.startsWith("#")).map(s=>s.split("=")).filter(s=>s.length===2).map(s=>[s[0].trim().toLowerCase(),s[1].trim()]))},b.prototype.htmlId=function(){if(!this.fragments.length)return;let s=this.fragments.find(e=>e.length&&!e.includes("="));if(!s){const e=this.fragmentParameters();e.has("id")?s=e.get("id"):e.has("name")&&(s=e.get("name"))}return s?.startsWith("#")?s.slice(1):s},b.prototype.page=function(){const s=parseInt(this.fragmentParameters().get("page"));if(!isNaN(s)&&s>=0)return s},b.prototype.time=function(){const s=parseInt(this.fragmentParameters().get("t"));if(!isNaN(s))return s},b.prototype.space=function(){const s=this.fragmentParameters();if(!s.has("xywh"))return;const e=s.get("xywh").split(",").map(t=>parseInt(t));if(e.length===4&&!e.some(isNaN))return e};class pe{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=w(e.value);if(i!==void 0)return new pe({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(Array.isArray(e))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 fe{constructor(e){this.total=e.total,this.position=e.position}static deserialize(e){if(e)return new fe({total:w(e.total),position:w(e.position)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.position!==void 0&&(e.position=this.position),e}}class me{constructor(e){this.total=e.total,this.available=e.available}static deserialize(e){if(e)return new me({total:w(e.total),available:w(e.available)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.available!==void 0&&(e.available=this.available),e}}class ge{constructor(e){this.state=e.state,this.since=e.since,this.until=e.until}static deserialize(e){if(e&&e.state)return new ge({state:e.state,since:Ue(e.since),until:Ue(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}}S.prototype.getNumberOfItems=function(){return w(this.otherProperties.numberOfItems)},S.prototype.getPrice=function(){return pe.deserialize(this.otherProperties.price)},S.prototype.getIndirectAcquisitions=function(){const s=this.otherProperties.indirectAcquisition;if(s&&Array.isArray(s))return s.map(e=>q.deserialize(e)).filter(e=>e!==void 0)},S.prototype.getHolds=function(){return fe.deserialize(this.otherProperties.holds)},S.prototype.getCopies=function(){return me.deserialize(this.otherProperties.copies)},S.prototype.getAvailability=function(){return ge.deserialize(this.otherProperties.availability)},S.prototype.getAuthenticate=function(){return U.deserialize(this.otherProperties.authenticate)};const Et="CssSelectorGenerator";function He(s="unknown problem",...e){console.warn(`${Et}: ${s}`,...e)}function xt(s){return s instanceof RegExp}function Tt(s){return s.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function St(s){const e=s.map(t=>{if(xt(t))return i=>t.test(i);if(typeof t=="function")return i=>{const r=t(i);return typeof r!="boolean"?(He("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",t),!1):r};if(typeof t=="string"){const i=new RegExp("^"+Tt(t)+"$");return r=>i.test(r)}return He("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))}St(["class","id","ng-*"]);class B{}function ke(s){return s.split("").reverse().join("")}function wt(s,e,t){const i=ke(e);return t.map(r=>{const n=Math.max(0,r.end-e.length-r.errors),o=ke(s.slice(n,r.end));return{start:Ve(o,i,r.errors).reduce((u,h)=>r.end-h.end<u?r.end-h.end:u,r.end),end:r.end,errors:r.errors}})}function ye(s){return(s|-s)>>31&1}function $e(s,e,t,i){let r=s.P[t],n=s.M[t];const o=i>>>31,a=e[t]|o,u=a|n,h=(a&r)+r^r|a;let c=n|~(h|r),m=r&h;const d=ye(c&s.lastRowMask[t])-ye(m&s.lastRowMask[t]);return c<<=1,m<<=1,m|=o,c|=ye(i)-o,r=m|~(u|c),n=c&u,s.P[t]=r,s.M[t]=n,d}function Ve(s,e,t){if(e.length===0)return[];t=Math.min(t,e.length);const i=[],r=32,n=Math.ceil(e.length/r)-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)%r;const a=new Uint32Array(n+1),u=new Map,h=[];for(let d=0;d<256;d++)h.push(a);for(let d=0;d<e.length;d+=1){const y=e.charCodeAt(d);if(u.has(y))continue;const p=new Uint32Array(n+1);u.set(y,p),y<h.length&&(h[y]=p);for(let f=0;f<=n;f+=1){p[f]=0;for(let g=0;g<r;g+=1){const T=f*r+g;if(T>=e.length)continue;e.charCodeAt(T)===y&&(p[f]|=1<<g)}}}let c=Math.max(0,Math.ceil(t/r)-1);const m=new Uint32Array(n+1);for(let d=0;d<=c;d+=1)m[d]=(d+1)*r;m[n]=e.length;for(let d=0;d<=c;d+=1)o.P[d]=-1,o.M[d]=0;for(let d=0;d<s.length;d+=1){const y=s.charCodeAt(d);let p;y<h.length?p=h[y]:(p=u.get(y),typeof p>"u"&&(p=a));let f=0;for(let g=0;g<=c;g+=1)f=$e(o,p,g,f),m[g]+=f;if(m[c]-f<=t&&c<n&&(p[c+1]&1||f<0)){c+=1,o.P[c]=-1,o.M[c]=0;let g;if(c===n){const T=e.length%r;g=T===0?r:T}else g=r;m[c]=m[c-1]+g-f+$e(o,p,c,f)}else for(;c>0&&m[c]>=t+r;)c-=1;c===n&&m[c]<=t&&(m[c]<t&&i.splice(0,i.length),i.push({start:-1,end:d+1,errors:m[c]}),t=m[c])}return i}function Ct(s,e,t){const i=Ve(s,e,t);return wt(s,e,i)}function je(s,e,t){let i=0;const r=[];for(;i!==-1;)i=s.indexOf(e,i),i!==-1&&(r.push({start:i,end:i+e.length,errors:0}),i+=1);return r.length>0?r:Ct(s,e,t)}function qe(s,e){return e.length===0||s.length===0?0:1-je(s,e,e.length)[0].errors/e.length}function Pt(s,e,t={}){if(e.length===0)return null;const i=Math.min(256,e.length/2),r=je(s,e,i);if(r.length===0)return null;const n=a=>{const d=1-a.errors/e.length,y=t.prefix?qe(s.slice(Math.max(0,a.start-t.prefix.length),a.start),t.prefix):1,p=t.suffix?qe(s.slice(a.end,a.end+t.suffix.length),t.suffix):1;let f=1;return typeof t.hint=="number"&&(f=1-Math.abs(a.start-t.hint)/s.length),(50*d+20*y+20*p+2*f)/92},o=r.map(a=>({start:a.start,end:a.end,score:n(a)}));return o.sort((a,u)=>u.score-a.score),o[0]}function ve(s,e,t){const i=t===1?e:e-1;if(s.charAt(i).trim()!=="")return e;let r,n;if(t===2?(r=s.substring(0,e),n=r.trimEnd()):(r=s.substring(e),n=r.trimStart()),!n.length)return-1;const o=r.length-n.length;return t===2?e-o:e+o}function _e(s,e){const t=s.commonAncestorContainer.ownerDocument.createNodeIterator(s.commonAncestorContainer,NodeFilter.SHOW_TEXT),i=e===1?s.startContainer:s.endContainer,r=e===1?s.endContainer:s.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 u=n.textContent,h=e===1?0:u.length;o=ve(u,h,e)}};for(;n&&o===-1&&n!==r;)a();if(n&&o>=0)return{node:n,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function Mt(s){if(!s.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(s.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(s.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=s.cloneRange();let t=!1,i=!1;const r={start:ve(s.startContainer.textContent,s.startOffset,1),end:ve(s.endContainer.textContent,s.endOffset,2)};if(r.start>=0&&(e.setStart(s.startContainer,r.start),t=!0),r.end>0&&(e.setEnd(s.endContainer,r.end),i=!0),t&&i)return e;if(!t){const{node:n,offset:o}=_e(e,1);n&&o>=0&&e.setStart(n,o)}if(!i){const{node:n,offset:o}=_e(e,2);n&&o>0&&e.setEnd(n,o)}return e}function Xe(s){switch(s.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return s.textContent?.length??0;default:return 0}}function Ge(s){let e=s.previousSibling,t=0;for(;e;)t+=Xe(e),e=e.previousSibling;return t}function Ye(s,...e){let t=e.shift();const i=s.ownerDocument.createNodeIterator(s,NodeFilter.SHOW_TEXT),r=[];let n=i.nextNode(),o,a=0;for(;t!==void 0&&n;)o=n,a+o.data.length>t?(r.push({node:o,offset:t-a}),t=e.shift()):(n=i.nextNode(),a+=o.data.length);for(;t!==void 0&&o&&a===t;)r.push({node:o,offset:o.data.length}),t=e.shift();if(t!==void 0)throw new RangeError("Offset exceeds text length");return r}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+=Ge(t),t=t.parentElement;return new A(t,i)}resolve(e={}){try{return Ye(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 r=e.direction===1,n=r?i.nextNode():i.previousNode();if(!n)throw t;return{node:n,offset:r?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=Ge(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 r=0;r<t;r++)i+=Xe(e.childNodes[r]);return new A(e,i)}default:throw new Error("Point is not in an element or text node")}}}class z{constructor(e,t){this.start=e,this.end=t}relativeTo(e){return new z(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]=Ye(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 z(t,i)}static fromOffsets(e,t,i){return new z(new A(e,t),new A(e,i))}static trimmedRange(e){return Mt(z.fromRange(e).toRange())}}class te{constructor(e,t,i){this.root=e,this.start=t,this.end=i}static fromRange(e,t){const i=z.fromRange(t).relativeTo(e);return new te(e,i.start.offset,i.end.offset)}static fromSelector(e,t){return new te(e,t.start,t.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return z.fromOffsets(this.root,this.start,this.end).toRange()}}class ie{constructor(e,t,i={}){this.root=e,this.exact=t,this.context=i}static fromRange(e,t){const i=e.textContent,r=z.fromRange(t).relativeTo(e),n=r.start.offset,o=r.end.offset,a=32;return new ie(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:r}=t;return new ie(e,t.exact,{prefix:i,suffix:r})}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=Pt(t,this.exact,{...this.context,hint:e.hint});if(!i)throw new Error("Quote not found");return new te(this.root,i.start,i.end)}}function At(s){const e=s.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function re(s,e){try{const t=e.locations,i=e.text;if(i&&i.highlight){let r;t&&t.getCssSelector()&&(r=s.querySelector(t.getCssSelector())),r||(r=s.body);const n=new ie(r,i.highlight,{prefix:i.before,suffix:i.after});try{return n.toRange()}catch{return console.warn("Quote not found:",n),null}}if(t){let r=null;if(!r&&t.getCssSelector()&&(r=s.querySelector(t.getCssSelector())),!r&&t.fragments){for(const n of t.fragments)if(r=s.getElementById(n),r)break}if(r){const n=s.createRange();return r.childNodes.length===0||At(r)?(n.selectNode(r),n):(n.setStartBefore(r),n.setEndAfter(r),n)}}}catch(t){console.error(t)}return null}function Nt(s,e){let t=s.getClientRects();t.length||s.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(t=s.commonAncestorContainer.getClientRects());const i=1,r=[];for(const h of t)r.push({bottom:h.bottom,height:h.height,left:h.left,right:h.right,top:h.top,width:h.width});const n=Ke(r,i),o=Lt(n,i),a=Ze(o),u=4;for(let h=a.length-1;h>=0;h--){const c=a[h];if(!(c.width*c.height>u))if(a.length>1)a.splice(h,1);else break}return a}function Ke(s,e,t){for(let i=0;i<s.length;i++)for(let r=i+1;r<s.length;r++){const n=s[i],o=s[r];if(n===o)continue;const a=M(n.top,o.top,e)&&M(n.bottom,o.bottom,e),u=M(n.left,o.left,e)&&M(n.right,o.right,e);if(a&&!u&&Qe(n,o,e)){const m=s.filter(y=>y!==n&&y!==o),d=Ot(n,o);return m.push(d),Ke(m,e)}}return s}function Ot(s,e){const t=Math.min(s.left,e.left),i=Math.max(s.right,e.right),r=Math.min(s.top,e.top),n=Math.max(s.bottom,e.bottom);return{bottom:n,height:n-r,left:t,right:i,top:r,width:i-t}}function Lt(s,e){const t=new Set(s);for(const i of s){if(!(i.width>1&&i.height>1)){t.delete(i);continue}for(const n of s)if(i!==n&&t.has(n)&&Rt(n,i,e)){t.delete(i);break}}return Array.from(t)}function Rt(s,e,t){return se(s,e.left,e.top,t)&&se(s,e.right,e.top,t)&&se(s,e.left,e.bottom,t)&&se(s,e.right,e.bottom,t)}function se(s,e,t,i){return(s.left<e||M(s.left,e,i))&&(s.right>e||M(s.right,e,i))&&(s.top<t||M(s.top,t,i))&&(s.bottom>t||M(s.bottom,t,i))}function Ze(s){for(let e=0;e<s.length;e++)for(let t=e+1;t<s.length;t++){const i=s[e],r=s[t];if(i!==r&&Qe(i,r,-1)){let n=[],o;const a=Je(i,r);if(a.length===1)n=a,o=i;else{const h=Je(r,i);a.length<h.length?(n=a,o=i):(n=h,o=r)}const u=s.filter(h=>h!==o);return Array.prototype.push.apply(u,n),Ze(u)}}return s}function Je(s,e){const t=It(e,s);if(t.height===0||t.width===0)return[s];const i=[];{const r={bottom:s.bottom,height:0,left:s.left,right:t.left,top:s.top,width:0};r.width=r.right-r.left,r.height=r.bottom-r.top,r.height!==0&&r.width!==0&&i.push(r)}{const r={bottom:t.top,height:0,left:t.left,right:t.right,top:s.top,width:0};r.width=r.right-r.left,r.height=r.bottom-r.top,r.height!==0&&r.width!==0&&i.push(r)}{const r={bottom:s.bottom,height:0,left:t.left,right:t.right,top:t.bottom,width:0};r.width=r.right-r.left,r.height=r.bottom-r.top,r.height!==0&&r.width!==0&&i.push(r)}{const r={bottom:s.bottom,height:0,left:t.right,right:s.right,top:s.top,width:0};r.width=r.right-r.left,r.height=r.bottom-r.top,r.height!==0&&r.width!==0&&i.push(r)}return i}function It(s,e){const t=Math.max(s.left,e.left),i=Math.min(s.right,e.right),r=Math.max(s.top,e.top),n=Math.min(s.bottom,e.bottom);return{bottom:n,height:Math.max(0,n-r),left:t,right:i,top:r,width:Math.max(0,i-t)}}function Qe(s,e,t){return(s.left<e.right||t>=0&&M(s.left,e.right,t))&&(e.left<s.right||t>=0&&M(e.left,s.right,t))&&(s.top<e.bottom||t>=0&&M(s.top,e.bottom,t))&&(e.top<s.bottom||t>=0&&M(e.top,s.bottom,t))}function M(s,e,t){return Math.abs(s-e)<=t}function be(s){const e={},t=s.document.documentElement.style;for(const i in s.document.documentElement.style)Object.hasOwn(t,i)&&!Number.isNaN(Number.parseInt(i))&&(e[t[i]]=t.getPropertyValue(t[i]));return e}function et(s,e){const t=be(s);Object.keys(t).forEach(i=>{e.hasOwnProperty(i)||ne(s,i)}),Object.entries(e).forEach(([i,r])=>{t[i]!==r&&_(s,i,r)})}function Ee(s,e){return s.document.documentElement.style.getPropertyValue(e)}function _(s,e,t){s.document.documentElement.style.setProperty(e,t)}function ne(s,e){s.document.documentElement.style.removeProperty(e)}let oe=null,xe=null,X=0;const H={r:255,g:255,b:255,a:1},k=new Map,zt=()=>{if(!oe)if(typeof OffscreenCanvas<"u")oe=new OffscreenCanvas(5,5),xe=oe.getContext("2d",{willReadFrequently:!0,desynchronized:!0});else{const s=document.createElement("canvas");s.width=5,s.height=5,oe=s,xe=s.getContext("2d",{willReadFrequently:!0,desynchronized:!0})}return xe},Dt=s=>{if(!s)return!0;const e=s.trim().toLowerCase();return e.startsWith("var(")||["transparent","currentcolor","inherit","initial","revert","unset","revert-layer"].includes(e)?!0:["linear-gradient","radial-gradient","conic-gradient","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient"].some(r=>e.includes(r))},ae=(s,e)=>{console.warn(`[Decorator] Could not parse color: "${s}". ${e} Falling back to ${JSON.stringify(H)} to compute contrast. Please use a CSS color value that can be computed to RGB(A).`)},Te=(s,e=null)=>{const t=e?`${s}|${e}`:s,i=k.get(t);if(i!==void 0)return i??H;if(Dt(s))return ae(s,"Unsupported color format or special value."),k.set(t,null),H;const r=zt();if(!r)return ae(s,"Could not get canvas context."),k.set(t,null),H;try{X===0&&r.clearRect(0,0,5,5);const n=X%5,o=Math.floor(X/5);r.clearRect(n,o,1,1),e&&(r.fillStyle=e,r.fillRect(n,o,1,1)),r.fillStyle=s,r.fillRect(n,o,1,1);const a=r.getImageData(n,o,1,1);X=(X+1)%25;const[u,h,c,m]=a.data;if(m===0)return ae(s,"Fully transparent color."),k.set(t,null),H;const d={r:u,g:h,b:c,a:m/255};return k.set(t,d),d}catch(n){return ae(s,`Error: ${n instanceof Error?n.message:String(n)}`),k.set(t,null),H}},Se=s=>{const e=s/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)},tt=s=>{const e=Se(s.r),t=Se(s.g),i=Se(s.b);return .2126*e+.7152*t+.0722*i},it=(s,e)=>{const t=typeof s=="string"?Te(s):s,i=typeof e=="string"?Te(e):e,r=tt(t),n=tt(i),o=Math.max(r,n),a=Math.min(r,n);return(o+.05)/(a+.05)},we=(s,e=null)=>{const t=Te(s,e),i=it(t,{r:255,g:255,b:255,a:1}),r=it(t,{r:0,g:0,b:0,a:1});return i>r},Wt=(s,e=null)=>we(s,e)?"white":"black",rt="#FFFF00";var st=(s=>(s.Wrap="wrap",s.Viewport="viewport",s.Bounds="bounds",s.Page="page",s))(st||{}),nt=(s=>(s.Boxes="boxes",s.Bounds="bounds",s))(nt||{});const Ft=()=>"Highlight"in window,ot=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Ut{constructor(e,t,i,r){this.wnd=e,this.comms=t,this.id=i,this.name=r,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){const t=`${this.id}-${this.lastItemId++}`,i=re(this.wnd.document,e.locator);if(!i){this.comms.log("Can't locate DOM range for decoration",e);return}const r=i.commonAncestorContainer;r.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&(ot.includes(r.nodeName.toUpperCase())&&this.notTextFlag?.set(t,!0),i.cloneContents().querySelector(ot.join(", ").toLowerCase())&&this.notTextFlag?.set(t,!0),(r.textContent?.trim()||"").length===0&&this.notTextFlag?.set(t,!0));const n={decoration:e,id:t,range:i};this.items.push(n),this.layout(n),this.renderLayout([n])}remove(e){const t=this.items.findIndex(r=>r.decoration.id===e);if(t<0)return;const i=this.items[t];this.items.splice(t,1),i.clickableElements=void 0,i.container&&(i.container.remove(),i.container=void 0),this.experimentalHighlights&&!this.notTextFlag?.has(i.id)&&this.wnd.CSS.highlights.get(this.id)?.delete(i.range),this.notTextFlag?.delete(i.id)}update(e){this.remove(e.id),this.add(e)}clear(){this.clearContainer(),this.items.length=0,this.notTextFlag?.clear()}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.items.forEach(e=>this.layout(e)),this.renderLayout(this.items)}experimentalLayout(e){const[t,i]=this.requireContainer(!0);i.add(e.range);const r=Ee(this.wnd,"--USER__backgroundColor")||this.wnd.getComputedStyle(this.wnd.document.documentElement).getPropertyValue("background-color"),n=e.decoration?.style?.tint??rt;t.innerHTML=`
|
|
2
2
|
::highlight(${this.id}) {
|
|
3
|
-
color:
|
|
4
|
-
background-color: ${
|
|
5
|
-
}`}layout(e){if(this.experimentalHighlights&&!this.notTextFlag?.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,
|
|
3
|
+
color: ${Wt(n,r)};
|
|
4
|
+
background-color: ${n};
|
|
5
|
+
}`}layout(e){if(this.experimentalHighlights&&!this.notTextFlag?.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,r=parseInt(getComputedStyle(this.wnd.document.documentElement).getPropertyValue("column-count")),n=i/(r||1),o=this.wnd.document.scrollingElement,a=o.scrollLeft,u=o.scrollTop,h=(p,f,g)=>{if(p.style.position="absolute",e.decoration?.style?.width==="viewport"){p.style.width=`${i}px`,p.style.height=`${f.height}px`;let T=Math.floor(f.left/i)*i;p.style.left=`${T+a}px`,p.style.top=`${f.top+u}px`}else if(e.decoration?.style?.width==="bounds")p.style.width=`${g.width}px`,p.style.height=`${f.height}px`,p.style.left=`${g.left+a}px`,p.style.top=`${f.top+u}px`;else if(e.decoration?.style?.width==="page"){p.style.width=`${n}px`,p.style.height=`${f.height}px`;let T=Math.floor(f.left/n)*n;p.style.left=`${T+a}px`,p.style.top=`${f.top+u}px`}else p.style.width=`${f.width}px`,p.style.height=`${f.height}px`,p.style.left=`${f.left+a}px`,p.style.top=`${f.top+u}px`},c=e.range.getBoundingClientRect();let m=this.wnd.document.createElement("template");const d=this.getCurrentDarkMode();m.innerHTML=`
|
|
6
6
|
<div
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
data-readium="true"
|
|
8
|
+
class="readium-highlight"
|
|
9
|
+
style="${[`background-color: ${e.decoration?.style?.tint??rt} !important`,`mix-blend-mode: ${d?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}"
|
|
9
10
|
>
|
|
10
11
|
</div>
|
|
11
|
-
`.trim();const y=m.content.firstElementChild;if(e.decoration?.style?.layout==="bounds"){const
|
|
12
|
+
`.trim();const y=m.content.firstElementChild;if(e.decoration?.style?.layout==="bounds"){const p=y.cloneNode(!0);p.style.setProperty("pointer-events","none"),h(p,c,c),t.append(p)}else{let p=Nt(e.range);p=p.sort((f,g)=>f.top<g.top?-1:f.top>g.top?1:0);for(let f of p){const g=y.cloneNode(!0);g.style.setProperty("pointer-events","none"),h(g,f,c),t.append(g)}}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=>!this.experimentalHighlights||!!this.notTextFlag?.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}getCurrentDarkMode(){return Ee(this.wnd,"--USER__appearance")==="readium-night-on"||we(Ee(this.wnd,"--USER__backgroundColor"))||we(this.wnd.getComputedStyle(this.wnd.document.documentElement).getPropertyValue("background-color"))}clearContainer(){this.experimentalHighlights&&this.wnd.CSS.highlights.delete(this.id),this.container&&(this.container.remove(),this.container=void 0)}}const Y=class Y extends B{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()}updateHighlightStyles(){this.groups.forEach(e=>{e.requestLayout()})}extractCustomProperty(e,t){if(!e)return null;const i=e.match(new RegExp(`${t}:\\s*([^;]+)`));return i?i[1].trim():null}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",Y.moduleName,(i,r)=>{const n=i;n.decoration&&n.decoration.locator&&(n.decoration.locator=L.deserialize(n.decoration.locator)),this.groups.has(n.group)||this.groups.set(n.group,new Ut(e,t,`readium-decoration-${this.lastGroupId++}`,n.group));const o=this.groups.get(n.group);switch(n.action){case"add":o?.add(n.decoration);break;case"remove":o?.remove(n.decoration.id);break;case"clear":o?.clear();break;case"update":o?.update(n.decoration);break}r(!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),this.backgroundObserver=new MutationObserver(i=>{i.some(n=>{if(n.type==="attributes"&&n.attributeName==="style"){const o=n.target,a=n.oldValue,u=o.getAttribute("style"),h=this.extractCustomProperty(a,"--USER__appearance"),c=this.extractCustomProperty(u,"--USER__appearance"),m=this.extractCustomProperty(a,"--USER__backgroundColor"),d=this.extractCustomProperty(u,"--USER__backgroundColor");return h!==c||m!==d}return!1})&&this.updateHighlightStyles()}),this.backgroundObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"],attributeOldValue:!0,subtree:!0}),t.log("Decorator Mounted"),!0}unmount(e,t){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),t.unregisterAll(Y.moduleName),this.resizeObserver.disconnect(),this.backgroundObserver.disconnect(),this.cleanup(),t.log("Decorator Unmounted"),!0}};Y.moduleName="decorator";let le=Y;const at="readium-snapper-style",K=class K extends B{constructor(){super(...arguments),this.protected=!1}buildStyles(){return`
|
|
12
13
|
html, body {
|
|
13
14
|
touch-action: manipulation;
|
|
14
15
|
user-select: ${this.protected?"none":"auto"};
|
|
15
|
-
}`}mount(e,t){const i=e.document.createElement("style");return i.dataset.readium="true",i.id=
|
|
16
|
+
}`}mount(e,t){const i=e.document.createElement("style");return i.dataset.readium="true",i.id=at,i.textContent=this.buildStyles(),e.document.head.appendChild(i),t.register("protect",K.moduleName,(r,n)=>{this.protected=!0,i.textContent=this.buildStyles(),n(!0)}),t.register("unprotect",K.moduleName,(r,n)=>{this.protected=!1,i.textContent=this.buildStyles(),n(!0)}),t.log("Snapper Mounted"),!0}unmount(e,t){return e.document.getElementById(at)?.remove(),t.log("Snapper Unmounted"),!0}};K.moduleName="snapper";let G=K;function W(s){return s.document.body.dir.toLowerCase()==="rtl"}function lt(s){return parseInt(s.getComputedStyle(s.document.documentElement).getPropertyValue("column-count"))}function ht(s){const e=getComputedStyle(s),t=parseFloat(e.paddingTop||"0"),i=parseFloat(e.paddingBottom||"0");return s.clientHeight-t-i}function ct(s){const e=lt(s);if(!e)return!1;const t=s.document.querySelectorAll("div[id^='readium-virtual-page']");for(const h of t)h.remove();const i=t.length,r=s.document.scrollingElement.scrollWidth,n=s.visualViewport.width,a=Math.round(r/n*e)%e,u=e===1||a===0?0:e-a;if(u>0)for(let h=0;h<u;h++){const c=s.document.createElement("div");c.setAttribute("id",`readium-virtual-page-${h}`),c.dataset.readium="true",CSS.supports("break-before","column")?c.style.breakBefore="column":(CSS.supports("break-inside","avoid-column")&&(c.style.breakInside="avoid-column"),c.style.height=ht(s.document.documentElement)+"px"),c.innerHTML="​",s.document.body.appendChild(c)}return i!==u}function ut(s){const e=s.document.createElement("style");e.appendChild(s.document.createTextNode("*{}")),s.document.body.appendChild(e),s.document.body.removeChild(e)}function Bt(s){return s<.5?2*s*s:-1+(4-2*s)*s}function E(s){const e=s.getSelection();e&&e.removeAllRanges()}const Ht=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"];function dt(s){return Ht.indexOf(s.nodeName.toLowerCase())!==-1||s.hasAttribute("contenteditable")&&s.getAttribute("contenteditable")?.toLowerCase()!=="false"?s:s.parentElement?dt(s.parentElement):null}function Ce(s,e){const t=pt(s,s.document.body,e),i=s._readium_cssSelectorGenerator.getCssSelector(t,{selectors:["tag","id","class","nthchild","nthoftype","attribute"]});return new L({href:"#",type:"application/xhtml+xml",locations:new b({otherLocations:new Map([["cssSelector",i]])}),text:new D({highlight:t.textContent||void 0})})}function pt(s,e,t){for(var i=0;i<e.children.length;i++){const r=e.children[i];if(!Vt(r)&&kt(s,r,t))return $t(s,r)?r:pt(s,r,t)}return e}function kt(s,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<s.innerHeight:i.right>0&&i.left<s.innerWidth}function $t(s,e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=s.innerHeight&&t.right<=s.innerWidth}function Vt(s){const e=getComputedStyle(s);if(e){const t=e.getPropertyValue("display");if(t!="block"&&t!="list-item"||e.getPropertyValue("opacity")==="0")return!0}return!1}const ft="readium-column-snapper-style",jt=200,x=class x extends G{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+(W(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)),r=Math.max(0,Math.min(1,(e+this.wnd.innerWidth)/t));this.comms.send("progress",{start:i,end:r})}shake(){if(this.overscroll!==0||this.shakeTimeout!==0)return;const e=this.doc();e.classList.add(W(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(){this.snappingCancelled=!0,this.clearTouches();const e=this.doc();this.overscroll=e.style.transform?.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,r=this.doc(),n=this.dragOffset(),o=lt(this.wnd),a=Math.min(Math.max(0,i),this.cachedScrollWidth),u=W(this.wnd)?-1:1,h=u*(this.wnd.innerWidth/3)*(u*n>0?2:1),c=this.snapOffset(a+h);if(e&&c!==this.scrollOffset()){this.snappingCancelled=!1;const m=(f,g,T,$)=>T>$?g:f+(g-f)*Bt(T/$),d=jt*o;let y;const p=f=>{if(this.snappingCancelled)return;y||(y=f);const g=f-y,T=m(this.overscroll,0,g,d),$=m(i,c,g,d);r.scrollLeft=$,this.overscroll!==0&&(r.style.transform=`translate3d(${-T}px, 0px, 0px)`),g<d?this.wnd.requestAnimationFrame(p):(this.clearTouches(),r.style.removeProperty("transform"),r.scrollLeft=c,t||this.reportProgress())};this.wnd.requestAnimationFrame(p)}else r.style.removeProperty("transform"),this.wnd.requestAnimationFrame(()=>{r.scrollLeft=c,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,E(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&&(e.navigator.epubReadingSystem.layoutStyle="paginated");const i=e.document.createElement("style");i.dataset.readium="true",i.id=ft,i.textContent=`
|
|
16
17
|
@keyframes readium-bounce-l-animation {
|
|
17
18
|
0%, 100% {transform: translate3d(0, 0, 0);}
|
|
18
19
|
50% {transform: translate3d(-50px, 0, 0);}
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
body::-webkit-scrollbar {
|
|
47
48
|
display: none; /* for Chrome, Safari, and Opera */
|
|
48
49
|
}
|
|
49
|
-
`,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{e.requestAnimationFrame(()=>{e&&
|
|
50
|
+
`,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{e.requestAnimationFrame(()=>{e&&ct(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,u=o.target.getAttribute("style"),h=/transform\s*:\s*([^;]+)/,c=a?.match(h),m=u?.match(h);(!c&&!m||c&&!m||c&&m&&c[1]!==m[1])&&(e.requestAnimationFrame(()=>{e&&ct(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 r=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",x.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 u=this.cachedScrollWidth,h=W(e)?-1:1,c=u*a*h;this.doc().scrollLeft=this.snapOffset(c),this.reportProgress(),E(this.wnd),o(!0)})}),t.register("go_id",x.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(),E(this.wnd),o(!0)})}),t.register("go_text",x.moduleName,(n,o)=>{let a;Array.isArray(n)&&(n.length>1&&(a=n[1]),n=n[0]);const u=D.deserialize(n),h=re(this.wnd.document,new L({href:e.location.href,type:"text/html",text:u,locations:a?new b({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(),E(this.wnd),o(!0)})}),t.register("go_end",x.moduleName,(n,o)=>{const a=W(e)?-1:1;this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const u=this.cachedScrollWidth*a;if(this.doc().scrollLeft===u)return o(!1);this.doc().scrollLeft=this.snapOffset(u),this.reportProgress(),E(this.wnd),o(!0)})}),t.register("go_start",x.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{if(this.doc().scrollLeft===0)return o(!1);this.doc().scrollLeft=0,this.reportProgress(),E(this.wnd),o(!0)})}),t.register("go_prev",x.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const a=e.scrollX-e.innerWidth,u=W(e)?-(this.cachedScrollWidth-e.innerWidth):0,h=r(Math.max(a,u));h&&(this.reportProgress(),E(this.wnd)),o(h)})}),t.register("go_next",x.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const a=e.scrollX+e.innerWidth,u=W(e)?0:this.cachedScrollWidth-e.innerWidth,h=r(Math.min(a,u));h&&(this.reportProgress(),E(this.wnd)),o(h)})}),t.register("unfocus",x.moduleName,(n,o)=>{this.snappingCancelled=!0,E(this.wnd),o(!0)}),t.register("shake",x.moduleName,(n,o)=>{this.shake(),o(!0)}),t.register("focus",x.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth,this.snapCurrentOffset(!1,!0),this.reportProgress(),o(!0)})}),t.register("first_visible_locator",x.moduleName,(n,o)=>{const a=Ce(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){return this.snappingCancelled=!0,t.unregisterAll(x.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),e.document.getElementById(ft)?.remove(),t.log("ColumnSnapper Unmounted"),super.unmount(e,t)}};x.moduleName="column_snapper";let Pe=x;const mt="readium-scroll-snapper-style",C=class C extends G{constructor(){super(...arguments),this.initialScrollHandled=!1,this.isScrolling=!1,this.lastScrollTop=0,this.isResizing=!1,this.resizeDebounce=null,this.handleScroll=()=>{if(this.comms.ready&&!this.isResizing){if(!this.initialScrollHandled){this.lastScrollTop=this.doc().scrollTop,this.initialScrollHandled=!0,this.reportProgress();return}this.isScrolling||(this.isScrolling=!0,this.wnd.requestAnimationFrame(()=>{this.reportProgress();const e=this.doc().scrollTop,t=e-this.lastScrollTop;this.lastScrollTop=e,this.comms.send("scroll",t),this.isScrolling=!1}))}}}doc(){return this.wnd.document.scrollingElement}reportProgress(){if(!this.comms.ready)return;const e=Math.ceil(this.doc().scrollTop),t=this.doc().scrollHeight,i=this.wnd.innerHeight,r=Math.max(0,Math.min(1,e/t)),n=Math.max(0,Math.min(1,(e+i)/t));this.comms.send("progress",{start:r,end:n})}mount(e,t){this.wnd=e,this.comms=t,this.initialScrollHandled=!1,this.lastScrollTop=0,this.isResizing=!1,this.resizeDebounce&&(this.wnd.clearTimeout(this.resizeDebounce),this.resizeDebounce=null),e.navigator.epubReadingSystem&&(e.navigator.epubReadingSystem.layoutStyle="scrolling");const i=e.document.createElement("style");return i.dataset.readium="true",i.id=mt,i.textContent=`
|
|
50
51
|
* {
|
|
51
52
|
scrollbar-width: none; /* for Firefox */
|
|
52
53
|
}
|
|
@@ -54,7 +55,7 @@
|
|
|
54
55
|
body::-webkit-scrollbar {
|
|
55
56
|
display: none; /* for Chrome, Safari, and Opera */
|
|
56
57
|
}
|
|
57
|
-
`,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{this.resizeDebounce&&this.wnd.clearTimeout(this.resizeDebounce),this.isResizing=!0,this.resizeDebounce=this.wnd.setTimeout(()=>{this.isResizing=!1,this.resizeDebounce=null,this.reportProgress()},50)}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",C.moduleName,()=>{Qe(this.wnd);const s=this.doc().scrollTop;s>1?this.doc().scrollTop=s-1:this.doc().scrollTop=s+1,this.doc().scrollTop=s}),t.register("go_progression",C.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(),E(this.wnd),n(!0)})}),t.register("go_id",C.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,this.reportProgress(),E(this.wnd),n(!0)})}),t.register("go_text",C.moduleName,(s,n)=>{let o;Array.isArray(s)&&(s.length>1&&(o=s[1]),s=s[0]);const l=D.deserialize(s),u=ee(this.wnd.document,new L({href:e.location.href,type:"text/html",text:l,locations:o?new b({otherLocations:new Map([["cssSelector",o]])}):void 0}));if(!u){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=u.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),n(!0)})}),t.register("go_start",C.moduleName,(s,n)=>{if(this.doc().scrollTop===0)return n(!1);this.doc().scrollTop=0,this.reportProgress(),n(!0)}),t.register("go_end",C.moduleName,(s,n)=>{if(this.doc().scrollTop===this.doc().scrollHeight-this.doc().offsetHeight)return n(!1);this.doc().scrollTop=this.doc().scrollHeight-this.doc().offsetHeight,this.reportProgress(),n(!0)}),t.register("unfocus",C.moduleName,(s,n)=>{E(this.wnd),n(!0)}),t.register(["go_next","go_prev"],C.moduleName,(s,n)=>n(!1)),t.register("focus",C.moduleName,(s,n)=>{this.reportProgress(),n(!0)}),t.register("first_visible_locator",C.moduleName,(s,n)=>{const o=me(e,!0);this.comms.send("first_visible_locator",o.serialize()),n(!0)}),t.log("ScrollSnapper Mounted"),!0}unmount(e,t){return t.unregisterAll(C.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),e.document.getElementById(st)?.remove(),t.log("ScrollSnapper Unmounted"),!0}};C.moduleName="scroll_snapper";let ye=C;const P=class P extends q{constructor(){super(...arguments),this.initialScrollHandled=!1,this.isScrolling=!1,this.lastScrollTop=0,this.isResizing=!1,this.resizeDebounce=null,this.handleScroll=()=>{if(this.comms.ready&&!this.isResizing){if(!this.initialScrollHandled){this.lastScrollTop=this.doc().scrollTop,this.initialScrollHandled=!0,this.reportProgress();return}this.isScrolling||(this.isScrolling=!0,this.wnd.requestAnimationFrame(()=>{this.reportProgress();const e=this.doc().scrollTop,t=e-this.lastScrollTop;this.lastScrollTop=e,this.comms.send("scroll",t),this.isScrolling=!1}))}}}doc(){return this.wnd.document.scrollingElement}reportProgress(){if(!this.comms.ready)return;const e=Math.ceil(this.doc().scrollTop),t=this.doc().scrollHeight,i=this.wnd.innerHeight,s=Math.max(0,Math.min(1,e/t)),n=Math.max(0,Math.min(1,(e+i)/t));this.comms.send("progress",{start:s,end:n})}mount(e,t){return this.wnd=e,this.comms=t,this.initialScrollHandled=!1,this.lastScrollTop=0,this.isResizing=!1,this.resizeDebounce&&(this.wnd.clearTimeout(this.resizeDebounce),this.resizeDebounce=null),this.resizeObserver=new ResizeObserver(()=>{this.resizeDebounce&&this.wnd.clearTimeout(this.resizeDebounce),this.isResizing=!0,this.resizeDebounce=this.wnd.setTimeout(()=>{this.isResizing=!1,this.resizeDebounce=null,this.reportProgress()},50)}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",P.moduleName,()=>{Qe(this.wnd);const i=this.doc().scrollTop;i>1?this.doc().scrollTop=i-1:this.doc().scrollTop=i+1,this.doc().scrollTop=i}),t.register("go_progression",P.moduleName,(i,s)=>{const n=i;if(n<0||n>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*n,this.reportProgress(),E(this.wnd),s(!0)})}),this.comms.register("go_id",P.moduleName,(i,s)=>{const n=e.document.getElementById(i);if(!n){s(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=n.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),s(!0)})}),t.register("go_text",P.moduleName,(i,s)=>{let n;Array.isArray(i)&&(i.length>1&&(n=i[1]),i=i[0]);const o=D.deserialize(i),l=ee(this.wnd.document,new L({href:e.location.href,type:"text/html",text:o,locations:n?new b({otherLocations:new Map([["cssSelector",n]])}):void 0}));if(!l){s(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=l.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),s(!0)})}),t.register("go_start",P.moduleName,(i,s)=>{if(this.doc().scrollTop===0)return s(!1);this.doc().scrollTop=0,this.reportProgress(),s(!0)}),t.register("go_end",P.moduleName,(i,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",P.moduleName,(i,s)=>{E(this.wnd),s(!0)}),t.register(["go_next","go_prev"],P.moduleName,(i,s)=>s(!1)),t.register("focus",P.moduleName,(i,s)=>{this.reportProgress(),s(!0)}),t.register("first_visible_locator",P.moduleName,(i,s)=>{const n=me(e,!0);t.send("first_visible_locator",n.serialize()),s(!0)}),t.log("WebPubSnapper Mounted"),!0}unmount(e,t){return t.unregisterAll(P.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),t.log("WebPubSnapper Unmounted"),!0}};P.moduleName="webpub_snapper";let ve=P;const Se=class Se extends B{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){const t=this.wnd.getSelection();if(t&&t.toString()?.length>0){const s=t.getRangeAt(0)?.getClientRects();if(!s||s.length===0)return;const n=s[0],o={text:t.toString(),x:n.x,y:n.y,width:n.width,height:n.height,targetFrameSrc:this.wnd?.location?.href};this.comms.send("text_selected",o)}if(this.pointerMoved){this.pointerMoved=!1;return}if(!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:et(e.target)?.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}};Se.moduleName="peripherals";let re=Se;const G=class G extends B{constructor(){super(...arguments),this.mediaPlayingCount=0,this.allAnimations=new Set}wndOnErr(e){this.comms?.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}unblock(e){for(e._readium_blockEvents=!1;e._readium_blockedEvents?.length>0;){const t=e._readium_blockedEvents.shift();switch(t[0]){case 0:Reflect.apply(t[1],t[2],t[3]);break;case 1:const i=t[1],s=t[2];e.removeEventListener(i.type,e._readium_eventBlocker,!0);const n=new Event(i.type,{bubbles:i.bubbles,cancelable:i.cancelable});s?s.dispatchEvent(n):e.dispatchEvent(n);break}}}onMediaPlayEvent(){this.mediaPlayingCount++,this.comms?.send("media_play",this.mediaPlayingCount)}onMediaPauseEvent(){this.mediaPlayingCount>0&&this.mediaPlayingCount--,this.comms?.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.2.1",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",G.moduleName,(s,n)=>{this.allAnimations.forEach(o=>{o.cancel(),o.play()}),n(!0)}),t.register("unfocus",G.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}};G.moduleName="setup";let ne=G;const rt="readium-viewport",I=class I extends ne{onViewportWidthChanged(e){const t=e.target;j(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",rt),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",I.moduleName,(s,n)=>{fe(e),n(!0)}),t.register("update_properties",I.moduleName,(s,n)=>{s["--RS__viewportWidth"]=`${e.innerWidth}px`,je(e,s),n(!0)}),t.register("set_property",I.moduleName,(s,n)=>{const o=s;j(e,o[0],o[1]),n(!0)}),t.register("remove_property",I.moduleName,(s,n)=>{ie(e,s),n(!0)}),t.register("activate",I.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("ReflowableSetup Mounted"),!0}unmount(e,t){return t.unregisterAll(I.moduleName),e.document.head.querySelector(`#${rt}`)?.remove(),e.removeEventListener("orientationchange",this.onViewportWidthChanged),t.log("ReflowableSetup Unmounted"),super.unmount(e,t)}};I.moduleName="reflowable_setup";let be=I;const nt="readium-fixed-style",N=class N extends ne{mount(e,t){if(!super.mount(e,t))return!1;e.navigator.epubReadingSystem&&(e.navigator.epubReadingSystem.layoutStyle="paginated");const i=e.document.createElement("style");return i.id=nt,i.dataset.readium="true",i.textContent=`
|
|
58
|
+
`,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{this.resizeDebounce&&this.wnd.clearTimeout(this.resizeDebounce),this.isResizing=!0,this.resizeDebounce=this.wnd.setTimeout(()=>{this.isResizing=!1,this.resizeDebounce=null,this.reportProgress()},50)}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",C.moduleName,()=>{ut(this.wnd);const r=this.doc().scrollTop;r>1?this.doc().scrollTop=r-1:this.doc().scrollTop=r+1,this.doc().scrollTop=r}),t.register("go_progression",C.moduleName,(r,n)=>{const o=r;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(),E(this.wnd),n(!0)})}),t.register("go_id",C.moduleName,(r,n)=>{const o=e.document.getElementById(r);if(!o){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=o.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),n(!0)})}),t.register("go_text",C.moduleName,(r,n)=>{let o;Array.isArray(r)&&(r.length>1&&(o=r[1]),r=r[0]);const a=D.deserialize(r),u=re(this.wnd.document,new L({href:e.location.href,type:"text/html",text:a,locations:o?new b({otherLocations:new Map([["cssSelector",o]])}):void 0}));if(!u){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=u.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),n(!0)})}),t.register("go_start",C.moduleName,(r,n)=>{if(this.doc().scrollTop===0)return n(!1);this.doc().scrollTop=0,this.reportProgress(),n(!0)}),t.register("go_end",C.moduleName,(r,n)=>{if(this.doc().scrollTop===this.doc().scrollHeight-this.doc().offsetHeight)return n(!1);this.doc().scrollTop=this.doc().scrollHeight-this.doc().offsetHeight,this.reportProgress(),n(!0)}),t.register("unfocus",C.moduleName,(r,n)=>{E(this.wnd),n(!0)}),t.register(["go_next","go_prev"],C.moduleName,(r,n)=>n(!1)),t.register("focus",C.moduleName,(r,n)=>{this.reportProgress(),n(!0)}),t.register("first_visible_locator",C.moduleName,(r,n)=>{const o=Ce(e,!0);this.comms.send("first_visible_locator",o.serialize()),n(!0)}),t.log("ScrollSnapper Mounted"),!0}unmount(e,t){return t.unregisterAll(C.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),e.document.getElementById(mt)?.remove(),t.log("ScrollSnapper Unmounted"),!0}};C.moduleName="scroll_snapper";let Me=C;const P=class P extends G{constructor(){super(...arguments),this.initialScrollHandled=!1,this.isScrolling=!1,this.lastScrollTop=0,this.isResizing=!1,this.resizeDebounce=null,this.handleScroll=()=>{if(this.comms.ready&&!this.isResizing){if(!this.initialScrollHandled){this.lastScrollTop=this.doc().scrollTop,this.initialScrollHandled=!0,this.reportProgress();return}this.isScrolling||(this.isScrolling=!0,this.wnd.requestAnimationFrame(()=>{this.reportProgress();const e=this.doc().scrollTop,t=e-this.lastScrollTop;this.lastScrollTop=e,this.comms.send("scroll",t),this.isScrolling=!1}))}}}doc(){return this.wnd.document.scrollingElement}reportProgress(){if(!this.comms.ready)return;const e=Math.ceil(this.doc().scrollTop),t=this.doc().scrollHeight,i=this.wnd.innerHeight,r=Math.max(0,Math.min(1,e/t)),n=Math.max(0,Math.min(1,(e+i)/t));this.comms.send("progress",{start:r,end:n})}mount(e,t){return this.wnd=e,this.comms=t,this.initialScrollHandled=!1,this.lastScrollTop=0,this.isResizing=!1,this.resizeDebounce&&(this.wnd.clearTimeout(this.resizeDebounce),this.resizeDebounce=null),this.resizeObserver=new ResizeObserver(()=>{this.resizeDebounce&&this.wnd.clearTimeout(this.resizeDebounce),this.isResizing=!0,this.resizeDebounce=this.wnd.setTimeout(()=>{this.isResizing=!1,this.resizeDebounce=null,this.reportProgress()},50)}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",P.moduleName,()=>{ut(this.wnd);const i=this.doc().scrollTop;i>1?this.doc().scrollTop=i-1:this.doc().scrollTop=i+1,this.doc().scrollTop=i}),t.register("go_progression",P.moduleName,(i,r)=>{const n=i;if(n<0||n>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),r(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=this.doc().offsetHeight*n,this.reportProgress(),E(this.wnd),r(!0)})}),this.comms.register("go_id",P.moduleName,(i,r)=>{const n=e.document.getElementById(i);if(!n){r(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=n.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),r(!0)})}),t.register("go_text",P.moduleName,(i,r)=>{let n;Array.isArray(i)&&(i.length>1&&(n=i[1]),i=i[0]);const o=D.deserialize(i),a=re(this.wnd.document,new L({href:e.location.href,type:"text/html",text:o,locations:n?new b({otherLocations:new Map([["cssSelector",n]])}):void 0}));if(!a){r(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=a.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),E(this.wnd),r(!0)})}),t.register("go_start",P.moduleName,(i,r)=>{if(this.doc().scrollTop===0)return r(!1);this.doc().scrollTop=0,this.reportProgress(),r(!0)}),t.register("go_end",P.moduleName,(i,r)=>{if(this.doc().scrollTop===this.doc().scrollHeight-this.doc().offsetHeight)return r(!1);this.doc().scrollTop=this.doc().scrollHeight-this.doc().offsetHeight,this.reportProgress(),r(!0)}),t.register("unfocus",P.moduleName,(i,r)=>{E(this.wnd),r(!0)}),t.register(["go_next","go_prev"],P.moduleName,(i,r)=>r(!1)),t.register("focus",P.moduleName,(i,r)=>{this.reportProgress(),r(!0)}),t.register("first_visible_locator",P.moduleName,(i,r)=>{const n=Ce(e,!0);t.send("first_visible_locator",n.serialize()),r(!0)}),t.log("WebPubSnapper Mounted"),!0}unmount(e,t){return t.unregisterAll(P.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),t.log("WebPubSnapper Unmounted"),!0}};P.moduleName="webpub_snapper";let Ae=P;const Ie=class Ie extends B{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){const t=this.wnd.getSelection();if(t&&t.toString()?.length>0){const r=t.getRangeAt(0)?.getClientRects();if(!r||r.length===0)return;const n=r[0],o={text:t.toString(),x:n.x,y:n.y,width:n.width,height:n.height,targetFrameSrc:this.wnd?.location?.href};this.comms.send("text_selected",o)}if(this.pointerMoved){this.pointerMoved=!1;return}if(!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:dt(e.target)?.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}};Ie.moduleName="peripherals";let he=Ie;const Z=class Z extends B{constructor(){super(...arguments),this.mediaPlayingCount=0,this.allAnimations=new Set}wndOnErr(e){this.comms?.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}unblock(e){for(e._readium_blockEvents=!1;e._readium_blockedEvents?.length>0;){const t=e._readium_blockedEvents.shift();switch(t[0]){case 0:Reflect.apply(t[1],t[2],t[3]);break;case 1:const i=t[1],r=t[2];e.removeEventListener(i.type,e._readium_eventBlocker,!0);const n=new Event(i.type,{bubbles:i.bubbles,cancelable:i.cancelable});r?r.dispatchEvent(n):e.dispatchEvent(n);break}}}onMediaPlayEvent(){this.mediaPlayingCount++,this.comms?.send("media_play",this.mediaPlayingCount)}onMediaPauseEvent(){this.mediaPlayingCount>0&&this.mediaPlayingCount--,this.comms?.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.2.2",hasFeature:(r,n="")=>{switch(r){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(r=>{r.cancel(),this.allAnimations.add(r)}),t.register("activate",Z.moduleName,(r,n)=>{this.allAnimations.forEach(o=>{o.cancel(),o.play()}),n(!0)}),t.register("unfocus",Z.moduleName,(r,n)=>{this.pauseAllMedia(e),this.allAnimations.forEach(o=>o.pause()),n(!0)});const i=e.document.querySelectorAll("audio,video");for(let r=0;r<i.length;r++){const n=i[r];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}};Z.moduleName="setup";let ce=Z;const gt="readium-viewport",R=class R extends ce{onViewportWidthChanged(e){const t=e.target;_(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",gt),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",R.moduleName,(r,n)=>{be(e),n(!0)}),t.register("update_properties",R.moduleName,(r,n)=>{r["--RS__viewportWidth"]=`${e.innerWidth}px`,et(e,r),n(!0)}),t.register("set_property",R.moduleName,(r,n)=>{const o=r;_(e,o[0],o[1]),n(!0)}),t.register("remove_property",R.moduleName,(r,n)=>{ne(e,r),n(!0)}),t.register("activate",R.moduleName,(r,n)=>{this.unblock(e),n(!0)}),t.log("ReflowableSetup Mounted"),!0}unmount(e,t){return t.unregisterAll(R.moduleName),e.document.head.querySelector(`#${gt}`)?.remove(),e.removeEventListener("orientationchange",this.onViewportWidthChanged),t.log("ReflowableSetup Unmounted"),super.unmount(e,t)}};R.moduleName="reflowable_setup";let Ne=R;const yt="readium-fixed-style",N=class N extends ce{mount(e,t){if(!super.mount(e,t))return!1;e.navigator.epubReadingSystem&&(e.navigator.epubReadingSystem.layoutStyle="paginated");const i=e.document.createElement("style");return i.id=yt,i.dataset.readium="true",i.textContent=`
|
|
58
59
|
html, body {
|
|
59
60
|
text-size-adjust: none;
|
|
60
61
|
-ms-text-size-adjust: none;
|
|
@@ -66,4 +67,4 @@
|
|
|
66
67
|
min-height: 100%;
|
|
67
68
|
|
|
68
69
|
/*cursor: var() TODO*/
|
|
69
|
-
}`,e.document.head.appendChild(i),t.register("set_property",N.moduleName,(
|
|
70
|
+
}`,e.document.head.appendChild(i),t.register("set_property",N.moduleName,(r,n)=>{const o=r;_(e,o[0],o[1]),n(!0)}),t.register("remove_property",N.moduleName,(r,n)=>{ne(e,r),n(!0)}),t.register("first_visible_locator",N.moduleName,(r,n)=>n(!1)),t.register("unfocus",N.moduleName,(r,n)=>{E(e),n(!0)}),t.register(["focus","go_next","go_prev","go_id","go_end","go_start","go_text","go_progression"],N.moduleName,(r,n)=>n(!0)),t.register("activate",N.moduleName,(r,n)=>{this.unblock(e),n(!0)}),t.log("FixedSetup Mounted"),!0}unmount(e,t){return t.unregisterAll(N.moduleName),e.document.getElementById(yt)?.remove(),t.log("FixedSetup Unmounted"),super.unmount(e,t)}};N.moduleName="fixed_setup";let Oe=N;const I=class I extends B{wndOnErr(e){this.comms?.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}mount(e,t){return this.comms=t,e.addEventListener("error",this.wndOnErr,!1),t.register("get_properties",I.moduleName,(i,r)=>{be(e),r(!0)}),t.register("update_properties",I.moduleName,(i,r)=>{et(e,i),r(!0)}),t.register("set_property",I.moduleName,(i,r)=>{const n=i;_(e,n[0],n[1]),r(!0)}),t.register("remove_property",I.moduleName,(i,r)=>{ne(e,i),r(!0)}),t.register("activate",I.moduleName,(i,r)=>{r(!0)}),t.log("WebPubSetup Mounted"),!0}unmount(e,t){return t.unregisterAll(I.moduleName),e.removeEventListener("error",this.wndOnErr),t.log("WebPubSetup Unmounted"),!0}};I.moduleName="webpub_setup";let Le=I;const qt=["fixed_setup","decorator","peripherals"],_t=["reflowable_setup","decorator","peripherals","column_snapper","scroll_snapper"],Xt=["webpub_setup","webpub_snapper","decorator","peripherals"],Re=new Map([Oe,Ne,Le,Ae,he,le,Pe,Me].map(s=>[s.moduleName,s]));class Gt{constructor(e=window,t=[]){this.loadedModules=[],this.wnd=e,this.comms=new We(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(r=>{const n=this.loadModule(r);if(n)return n.mount(this.wnd,this.comms),n}).filter(r=>r!==void 0)}}loadModule(e){const t=Re.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=Re.get(e);if(t===void 0)return this.comms.log(`Module "${e}" does not exist in the library`),!1;const i=this.loadedModules.findIndex(r=>r 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=[]}}v.COMMS_VERSION=F,v.Comms=We,v.Decorator=le,v.FXLModules=qt,v.Layout=nt,v.Loader=Gt,v.Module=B,v.ModuleLibrary=Re,v.Peripherals=he,v.ReflowableModules=_t,v.WebPubModules=Xt,v.Width=st,v.mid=De,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@readium/navigator-html-injectables",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "An embeddable solution for connecting frames of HTML publications with a Readium Navigator",
|
|
6
6
|
"author": "readium",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@readium/shared": "workspace:*",
|
|
52
52
|
"css-selector-generator": "^3.6.9",
|
|
53
53
|
"tslib": "^2.8.1",
|
|
54
|
-
"typescript": "^5.9.
|
|
55
|
-
"vite": "^7.
|
|
54
|
+
"typescript": "^5.9.3",
|
|
55
|
+
"vite": "^7.2.4"
|
|
56
56
|
}
|
|
57
57
|
}
|