@readium/navigator-html-injectables
Version:
An embeddable solution for connecting frames of HTML publications with a Readium Navigator
16 lines • 76.3 kB
JavaScript
(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=`
::highlight(${this.id}) {
color: ${Wt(n,r)};
background-color: ${n};
}`}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=`
<div
data-readium="true"
class="readium-highlight"
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("; ")}"
>
</div>
`.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`
html, body {
touch-action: manipulation;
user-select: ${this.protected?"none":"auto"};
}`}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.