@readium/navigator-html-injectables 2.0.0-beta.5 → 2.0.0-beta.6

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 CHANGED
@@ -727,7 +727,7 @@ class U {
727
727
  return this.after !== void 0 && (t.after = this.after), this.before !== void 0 && (t.before = this.before), this.highlight !== void 0 && (t.highlight = this.highlight), t;
728
728
  }
729
729
  }
730
- class D {
730
+ class z {
731
731
  /**
732
732
  * Creates a [Locator].
733
733
  */
@@ -739,7 +739,7 @@ class D {
739
739
  */
740
740
  static deserialize(t) {
741
741
  if (t && t.href && t.type)
742
- return new D({
742
+ return new z({
743
743
  href: t.href,
744
744
  type: t.type,
745
745
  title: t.title,
@@ -758,7 +758,7 @@ class D {
758
758
  * Shortcut to get a copy of the [Locator] with different [Locations] sub-properties.
759
759
  */
760
760
  copyWithLocations(t) {
761
- return new D({
761
+ return new z({
762
762
  href: this.href,
763
763
  type: this.type,
764
764
  title: this.title,
@@ -842,7 +842,7 @@ class B {
842
842
  */
843
843
  get locator() {
844
844
  let t = this.href.split("#");
845
- return new D({
845
+ return new z({
846
846
  href: t.length > 0 && t[0] !== void 0 ? t[0] : this.href,
847
847
  type: this.type ?? "",
848
848
  title: this.title,
@@ -946,7 +946,7 @@ class V {
946
946
  return this.items.filter((t) => t.type);
947
947
  }
948
948
  }
949
- class q {
949
+ class _ {
950
950
  /**
951
951
  * Creates a [DomRange].
952
952
  */
@@ -963,7 +963,7 @@ class q {
963
963
  if (e === void 0)
964
964
  return;
965
965
  let i = C(t.charOffset);
966
- return i === void 0 && (i = C(t.offset)), new q({
966
+ return i === void 0 && (i = C(t.offset)), new _({
967
967
  cssSelector: t.cssSelector,
968
968
  textNodeIndex: e,
969
969
  charOffset: i
@@ -993,11 +993,11 @@ class rt {
993
993
  static deserialize(t) {
994
994
  if (!t)
995
995
  return;
996
- let e = q.deserialize(t.start);
996
+ let e = _.deserialize(t.start);
997
997
  if (e)
998
998
  return new rt({
999
999
  start: e,
1000
- end: q.deserialize(t.end)
1000
+ end: _.deserialize(t.end)
1001
1001
  });
1002
1002
  }
1003
1003
  /**
@@ -1603,7 +1603,7 @@ class A {
1603
1603
  }
1604
1604
  }
1605
1605
  }
1606
- class z {
1606
+ class D {
1607
1607
  constructor(t, e) {
1608
1608
  this.start = t, this.end = e;
1609
1609
  }
@@ -1613,7 +1613,7 @@ class z {
1613
1613
  * `end.element`.
1614
1614
  */
1615
1615
  relativeTo(t) {
1616
- return new z(
1616
+ return new D(
1617
1617
  this.start.relativeTo(t),
1618
1618
  this.end.relativeTo(t)
1619
1619
  );
@@ -1651,14 +1651,14 @@ class z {
1651
1651
  t.startContainer,
1652
1652
  t.startOffset
1653
1653
  ), i = A.fromPoint(t.endContainer, t.endOffset);
1654
- return new z(e, i);
1654
+ return new D(e, i);
1655
1655
  }
1656
1656
  /**
1657
1657
  * Create a TextRange representing the `start`th to `end`th characters in
1658
1658
  * `root`
1659
1659
  */
1660
1660
  static fromOffsets(t, e, i) {
1661
- return new z(
1661
+ return new D(
1662
1662
  new A(t, e),
1663
1663
  new A(t, i)
1664
1664
  );
@@ -1668,23 +1668,23 @@ class z {
1668
1668
  * whitespace
1669
1669
  */
1670
1670
  static trimmedRange(t) {
1671
- return be(z.fromRange(t).toRange());
1671
+ return be(D.fromRange(t).toRange());
1672
1672
  }
1673
1673
  }
1674
- class _ {
1674
+ class q {
1675
1675
  constructor(t, e, i) {
1676
1676
  this.root = t, this.start = e, this.end = i;
1677
1677
  }
1678
1678
  static fromRange(t, e) {
1679
- const i = z.fromRange(e).relativeTo(t);
1680
- return new _(
1679
+ const i = D.fromRange(e).relativeTo(t);
1680
+ return new q(
1681
1681
  t,
1682
1682
  i.start.offset,
1683
1683
  i.end.offset
1684
1684
  );
1685
1685
  }
1686
1686
  static fromSelector(t, e) {
1687
- return new _(t, e.start, e.end);
1687
+ return new q(t, e.start, e.end);
1688
1688
  }
1689
1689
  toSelector() {
1690
1690
  return {
@@ -1694,7 +1694,7 @@ class _ {
1694
1694
  };
1695
1695
  }
1696
1696
  toRange() {
1697
- return z.fromOffsets(this.root, this.start, this.end).toRange();
1697
+ return D.fromOffsets(this.root, this.start, this.end).toRange();
1698
1698
  }
1699
1699
  }
1700
1700
  class X {
@@ -1710,7 +1710,7 @@ class X {
1710
1710
  * Will throw if `range` does not contain any text nodes.
1711
1711
  */
1712
1712
  static fromRange(t, e) {
1713
- const i = t.textContent, s = z.fromRange(e).relativeTo(t), n = s.start.offset, o = s.end.offset, l = 32;
1713
+ const i = t.textContent, s = D.fromRange(e).relativeTo(t), n = s.start.offset, o = s.end.offset, l = 32;
1714
1714
  return new X(t, i.slice(n, o), {
1715
1715
  prefix: i.slice(Math.max(0, n - l), n),
1716
1716
  suffix: i.slice(o, Math.min(i.length, o + l))
@@ -1738,7 +1738,7 @@ class X {
1738
1738
  });
1739
1739
  if (!i)
1740
1740
  throw new Error("Quote not found");
1741
- return new _(this.root, i.start, i.end);
1741
+ return new q(this.root, i.start, i.end);
1742
1742
  }
1743
1743
  }
1744
1744
  function xe(r) {
@@ -2000,7 +2000,7 @@ const Me = (r) => {
2000
2000
  };
2001
2001
  var Ie = /* @__PURE__ */ ((r) => (r.Wrap = "wrap", r.Viewport = "viewport", r.Bounds = "bounds", r.Page = "page", r))(Ie || {}), Le = /* @__PURE__ */ ((r) => (r.Boxes = "boxes", r.Bounds = "bounds", r))(Le || {});
2002
2002
  const Re = () => "Highlight" in window, Nt = ["IMG", "IMAGE", "AUDIO", "VIDEO", "SVG"];
2003
- class ze {
2003
+ class De {
2004
2004
  /**
2005
2005
  * Creates a DecorationGroup object
2006
2006
  * @param id Unique HTML ID-adhering name of the group
@@ -2175,7 +2175,7 @@ class ze {
2175
2175
  this.experimentalHighlights && this.wnd.CSS.highlights.delete(this.id), this.container && (this.container.remove(), this.container = void 0);
2176
2176
  }
2177
2177
  }
2178
- const qt = class Q extends Y {
2178
+ const _t = class Q extends Y {
2179
2179
  constructor() {
2180
2180
  super(...arguments), this.resizeFrame = 0, this.lastGroupId = 0, this.groups = /* @__PURE__ */ new Map(), this.handleResizer = this.handleResize.bind(this);
2181
2181
  }
@@ -2192,7 +2192,7 @@ const qt = class Q extends Y {
2192
2192
  mount(t, e) {
2193
2193
  return this.wnd = t, e.register("decorate", Q.moduleName, (i, s) => {
2194
2194
  const n = i;
2195
- n.decoration && n.decoration.locator && (n.decoration.locator = D.deserialize(n.decoration.locator)), this.groups.has(n.group) || this.groups.set(n.group, new ze(
2195
+ n.decoration && n.decoration.locator && (n.decoration.locator = z.deserialize(n.decoration.locator)), this.groups.has(n.group) || this.groups.set(n.group, new De(
2196
2196
  t,
2197
2197
  e,
2198
2198
  `readium-decoration-${this.lastGroupId++}`,
@@ -2220,9 +2220,9 @@ const qt = class Q extends Y {
2220
2220
  return t.removeEventListener("orientationchange", this.handleResizer), t.removeEventListener("resize", this.handleResizer), e.unregisterAll(Q.moduleName), this.resizeObserver.disconnect(), this.cleanup(), e.log("Decorator Unmounted"), !0;
2221
2221
  }
2222
2222
  };
2223
- qt.moduleName = "decorator";
2224
- let De = qt;
2225
- const Mt = "readium-snapper-style", _t = class tt extends Y {
2223
+ _t.moduleName = "decorator";
2224
+ let ze = _t;
2225
+ const Mt = "readium-snapper-style", qt = class tt extends Y {
2226
2226
  constructor() {
2227
2227
  super(...arguments), this.protected = !1;
2228
2228
  }
@@ -2246,8 +2246,8 @@ const Mt = "readium-snapper-style", _t = class tt extends Y {
2246
2246
  return (i = t.document.getElementById(Mt)) == null || i.remove(), e.log("Snapper Unmounted"), !0;
2247
2247
  }
2248
2248
  };
2249
- _t.moduleName = "snapper";
2250
- let Xt = _t;
2249
+ qt.moduleName = "snapper";
2250
+ let Xt = qt;
2251
2251
  function W(r) {
2252
2252
  return r.document.body.dir.toLowerCase() === "rtl";
2253
2253
  }
@@ -2310,7 +2310,7 @@ function Kt(r, t) {
2310
2310
  const e = Zt(r, r.document.body, t), i = r._readium_cssSelectorGenerator.getCssSelector(e, {
2311
2311
  selectors: ["tag", "id", "class", "nthchild", "nthoftype", "attribute"]
2312
2312
  });
2313
- return new D({
2313
+ return new z({
2314
2314
  href: "#",
2315
2315
  type: "application/xhtml+xml",
2316
2316
  locations: new x({
@@ -2535,7 +2535,7 @@ const It = "readium-column-snapper-style", He = 200, Jt = class w extends Xt {
2535
2535
  }), e.register("go_text", w.moduleName, (n, o) => {
2536
2536
  let l;
2537
2537
  Array.isArray(n) && (n.length > 1 && (l = n[1]), n = n[0]);
2538
- const c = U.deserialize(n), h = lt(this.wnd.document, new D({
2538
+ const c = U.deserialize(n), h = lt(this.wnd.document, new z({
2539
2539
  href: t.location.href,
2540
2540
  type: "text/html",
2541
2541
  text: c,
@@ -2602,10 +2602,12 @@ Jt.moduleName = "column_snapper";
2602
2602
  let je = Jt;
2603
2603
  const Lt = "readium-scroll-snapper-style", Qt = class P extends Xt {
2604
2604
  constructor() {
2605
- super(...arguments), this.isScrolling = !1, this.handleScroll = () => {
2606
- this.isScrolling || (this.isScrolling = !0, this.wnd.requestAnimationFrame(() => {
2607
- this.reportProgress(), this.isScrolling = !1;
2608
- }));
2605
+ super(...arguments), this.scrollEndTimer = null, this.SCROLL_END_DELAY = 100, this.handleScroll = () => {
2606
+ this.scrollEndTimer !== null && this.wnd.clearTimeout(this.scrollEndTimer), this.scrollEndTimer = this.wnd.setTimeout(() => {
2607
+ this.onScrollEnd();
2608
+ }, this.SCROLL_END_DELAY);
2609
+ }, this.onScrollEnd = () => {
2610
+ this.scrollEndTimer = null, this.reportProgress();
2609
2611
  };
2610
2612
  }
2611
2613
  doc() {
@@ -2660,7 +2662,7 @@ const Lt = "readium-scroll-snapper-style", Qt = class P extends Xt {
2660
2662
  }), e.register("go_text", P.moduleName, (s, n) => {
2661
2663
  let o;
2662
2664
  Array.isArray(s) && (s.length > 1 && (o = s[1]), s = s[0]);
2663
- const l = U.deserialize(s), c = lt(this.wnd.document, new D({
2665
+ const l = U.deserialize(s), c = lt(this.wnd.document, new z({
2664
2666
  href: t.location.href,
2665
2667
  type: "text/html",
2666
2668
  text: l,
@@ -2699,7 +2701,7 @@ const Lt = "readium-scroll-snapper-style", Qt = class P extends Xt {
2699
2701
  }
2700
2702
  unmount(t, e) {
2701
2703
  var i;
2702
- return e.unregisterAll(P.moduleName), this.resizeObserver.disconnect(), this.handleScroll && t.removeEventListener("scroll", this.handleScroll), (i = t.document.getElementById(Lt)) == null || i.remove(), e.log("ScrollSnapper Unmounted"), !0;
2704
+ return e.unregisterAll(P.moduleName), this.resizeObserver.disconnect(), this.handleScroll && t.removeEventListener("scroll", this.handleScroll), (i = t.document.getElementById(Lt)) == null || i.remove(), this.scrollEndTimer !== null && (clearTimeout(this.scrollEndTimer), this.scrollEndTimer = null), e.log("ScrollSnapper Unmounted"), !0;
2703
2705
  }
2704
2706
  };
2705
2707
  Qt.moduleName = "scroll_snapper";
@@ -2829,7 +2831,7 @@ const ee = class et extends Y {
2829
2831
  ), Reflect.defineProperty(t.navigator, "epubReadingSystem", {
2830
2832
  value: {
2831
2833
  name: "readium-ts-toolkit",
2832
- version: "2.0.0-beta.5",
2834
+ version: "2.0.0-beta.6",
2833
2835
  hasFeature: (s, n = "") => {
2834
2836
  switch (s) {
2835
2837
  case "dom-manipulation":
@@ -2911,14 +2913,14 @@ const Rt = "readium-viewport", re = class F extends ie {
2911
2913
  }
2912
2914
  };
2913
2915
  re.moduleName = "reflowable_setup";
2914
- let qe = re;
2915
- const zt = "readium-fixed-style", se = class L extends ie {
2916
+ let _e = re;
2917
+ const Dt = "readium-fixed-style", se = class L extends ie {
2916
2918
  mount(t, e) {
2917
2919
  if (!super.mount(t, e))
2918
2920
  return !1;
2919
2921
  t.navigator.epubReadingSystem.layoutStyle = "paginated";
2920
2922
  const i = t.document.createElement("style");
2921
- return i.id = zt, i.dataset.readium = "true", i.textContent = `
2923
+ return i.id = Dt, i.dataset.readium = "true", i.textContent = `
2922
2924
  html, body {
2923
2925
  text-size-adjust: none;
2924
2926
  -ms-text-size-adjust: none;
@@ -2952,11 +2954,11 @@ const zt = "readium-fixed-style", se = class L extends ie {
2952
2954
  }
2953
2955
  unmount(t, e) {
2954
2956
  var i;
2955
- return e.unregisterAll(L.moduleName), (i = t.document.getElementById(zt)) == null || i.remove(), e.log("FixedSetup Unmounted"), super.unmount(t, e);
2957
+ return e.unregisterAll(L.moduleName), (i = t.document.getElementById(Dt)) == null || i.remove(), e.log("FixedSetup Unmounted"), super.unmount(t, e);
2956
2958
  }
2957
2959
  };
2958
2960
  se.moduleName = "fixed_setup";
2959
- let _e = se;
2961
+ let qe = se;
2960
2962
  const Xe = [
2961
2963
  "fixed_setup",
2962
2964
  "decorator",
@@ -2967,12 +2969,12 @@ const Xe = [
2967
2969
  "peripherals",
2968
2970
  "column_snapper",
2969
2971
  "scroll_snapper"
2970
- ], Dt = new Map([
2972
+ ], zt = new Map([
2971
2973
  // All modules go here
2972
- _e,
2973
2974
  qe,
2975
+ _e,
2974
2976
  te,
2975
- De,
2977
+ ze,
2976
2978
  je,
2977
2979
  Ve
2978
2980
  ].map((r) => [r.moduleName, r]));
@@ -2995,7 +2997,7 @@ class Ye {
2995
2997
  }
2996
2998
  }
2997
2999
  loadModule(t) {
2998
- const e = Dt.get(t);
3000
+ const e = zt.get(t);
2999
3001
  return e === void 0 ? (this.comms.log(`Module "${name}" does not exist in the library`), e) : new e();
3000
3002
  }
3001
3003
  /**
@@ -3013,7 +3015,7 @@ class Ye {
3013
3015
  * @returns Success
3014
3016
  */
3015
3017
  removeModule(t) {
3016
- const e = Dt.get(t);
3018
+ const e = zt.get(t);
3017
3019
  if (e === void 0)
3018
3020
  return this.comms.log(`Module "${t}" does not exist in the library`), !1;
3019
3021
  const i = this.loadedModules.findIndex((s) => s instanceof e);
@@ -3029,12 +3031,12 @@ class Ye {
3029
3031
  export {
3030
3032
  k as COMMS_VERSION,
3031
3033
  ae as Comms,
3032
- De as Decorator,
3034
+ ze as Decorator,
3033
3035
  Xe as FXLModules,
3034
3036
  Le as Layout,
3035
3037
  Ye as Loader,
3036
3038
  Y as Module,
3037
- Dt as ModuleLibrary,
3039
+ zt as ModuleLibrary,
3038
3040
  te as Peripherals,
3039
3041
  Ge as ReflowableModules,
3040
3042
  Ie as Width,
@@ -1,18 +1,18 @@
1
- (function(E,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(E=typeof globalThis<"u"?globalThis:E||self,j(E["navigator-html-injectables"]={}))})(this,function(E){"use strict";const j=Math.pow(2,32),fe=()=>Math.round(Math.random()*j).toString(36),me=()=>`${Math.round(performance.now())}-${fe()}-${fe()}`,U=1;class ge{constructor(e){this.destination=null,this.registrar=new Map,this.origin="",this.channelId="",this.receiver=this.receive.bind(this),this.preLog=[],this.wnd=e,e.addEventListener("message",this.receiver)}receive(e){if(e.source===null)throw Error("Event source is null");if(typeof e.data!="object")return;const t=e.data;if(!(!("_readium"in t)||!t._readium||t._readium<=0)){if(t.key==="_ping"){if(!this.destination){if(this.destination=e.source,this.origin=e.origin,this.channelId=t._channel,t._readium!==U){t._readium>U?this.send("error",`received comms version ${t._readium} higher than ${U}`):this.send("error",`received comms version ${t._readium} lower than ${U}`),this.destination=null,this.origin="",this.channelId="";return}this.send("_pong",void 0),this.preLog.forEach(i=>this.send("log",i)),this.preLog=[]}return}else if(this.channelId){if(t._channel!==this.channelId||e.origin!==this.origin)return}else return;this.handle(t)}}handle(e){const t=this.registrar.get(e.key);if(!t||t.length===0){e.strict&&this.send("_unhandled",e);return}t.forEach(i=>i.cb(e.data,s=>{this.send("_ack",s,e.id)}))}register(e,t,i){Array.isArray(e)||(e=[e]),e.forEach(s=>{const n=this.registrar.get(s);if(n&&n.length>=0){if(n.find(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:U,_channel:this.channelId,id:i??me(),key:e,data:t};try{this.destination.postMessage(n,{targetOrigin:this.origin,transfer:s})}catch(o){if(s.length>0)throw o;this.destination.postMessage(n,this.origin,s)}}}class J{constructor(e){this.algorithm=e.algorithm,this.compression=e.compression,this.originalLength=e.originalLength,this.profile=e.profile,this.scheme=e.scheme}static deserialize(e){if(e&&e.algorithm)return new J({algorithm:e.algorithm,compression:e.compression,originalLength:e.originalLength,profile:e.profile,scheme:e.scheme})}serialize(){const e={algorithm:this.algorithm};return this.compression!==void 0&&(e.compression=this.compression),this.originalLength!==void 0&&(e.originalLength=this.originalLength),this.profile!==void 0&&(e.profile=this.profile),this.scheme!==void 0&&(e.scheme=this.scheme),e}}class b{constructor(e){this.otherProperties=e}static deserialize(e){if(e)return new b(e)}serialize(){return this.otherProperties}add(e){const t=Object.assign({},this.otherProperties);for(const i in e)t[i]=e[i];return new b(t)}}Object.defineProperty(b.prototype,"encryption",{get:function(){return J.deserialize(this.otherProperties.encrypted)}}),b.prototype.getContains=function(){return new Set(this.otherProperties.contains||[])},b.prototype.getLayout=function(){return this.otherProperties.layout};class 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 d=1;d<s.length;d++){const f=s[d].split("=");if(f.length===2){const g=f[0].toLocaleLowerCase(),m=g==="charset"?f[1].toUpperCase():f[1];o[g]=m}}const l={},c=Object.keys(o);c.sort((d,f)=>d.localeCompare(f)),c.forEach(d=>l[d]=o[d]);let h="";for(const d in l){const f=l[d];h+=`;${d}=${f}`}const u=`${t}/${i}${h}`,p=l.encoding;this.string=u,this.type=t,this.subtype=i,this.parameters=l,this.encoding=p,this.name=e.name,this.fileExtension=e.fileExtension}static parse(e){return new a(e)}get structuredSyntaxSuffix(){const e=this.subtype.split("+");return e.length>1?`+${e[e.length-1]}`:void 0}get charset(){return this.parameters.charset}contains(e){const t=typeof e=="string"?a.parse({mediaType:e}):e;if(!((this.type==="*"||this.type===t.type)&&(this.subtype==="*"||this.subtype===t.subtype)))return!1;const i=new Set(Object.entries(this.parameters).map(([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 ye{constructor(e){this.uri=e,this.parameters=this.getParameters(e)}getParameters(e){const t=/\{\??([^}]+)\}/g,i=e.match(t);return i?new Set(i.join(",").replace(t,"$1").split(",").map(s=>s.trim())):new Set}expand(e){const t=s=>s.split(",").map(n=>{const o=e[n];return o?encodeURIComponent(o):""}).join(","),i=s=>"?"+s.split(",").map(n=>{const o=n.split("=")[0],l=e[o];return l?`${o}=${encodeURIComponent(l)}`:""}).join("&");return this.uri.replace(/\{(\??)([^}]+)\}/g,(...s)=>s[1]?i(s[2]):t(s[2]))}}function dt(r){return r&&r instanceof Array?r:void 0}function ve(r){return r&&typeof r=="string"?[r]:dt(r)}function be(r){return typeof r=="string"?new Date(r):void 0}function q(r){return isNaN(r)?void 0:r}function C(r){return q(r)!==void 0&&Math.sign(r)>=0?r:void 0}function pt(r){const e=new Array;return r.forEach(t=>e.push(t)),e}class x{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const t=q(e.progression),i=q(e.totalProgression),s=q(e.position),n=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position"]);return Object.entries(e).forEach(([l,c])=>{o.has(l)||n.set(l,c)}),new x({fragments:ve(e.fragments||e.fragment),progression:t!==void 0&&t>=0&&t<=1?t:void 0,totalProgression:i!==void 0&&i>=0&&i<=1?i:void 0,position:s!==void 0&&s>0?s:void 0,otherLocations:n.size===0?void 0:n})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((t,i)=>e[i]=t),e}}class k{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new k({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}}class R{constructor(e){this.href=e.href,this.type=e.type,this.title=e.title,this.locations=e.locations?e.locations:new x({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new R({href:e.href,type:e.type,title:e.title,locations:x.deserialize(e.locations),text:k.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new R({href:this.href,type:this.type,title:this.title,text:this.text,locations:new x({...this.locations,...e})})}}class ${constructor(e){this.href=e.href,this.templated=e.templated,this.type=e.type,this.title=e.title,this.rels=e.rels,this.properties=e.properties,this.height=e.height,this.width=e.width,this.duration=e.duration,this.bitrate=e.bitrate,this.languages=e.languages,this.alternates=e.alternates,this.children=e.children}static deserialize(e){if(!(!e||typeof e.href!="string"))return new $({href:e.href,templated:e.templated,type:e.type,title:e.title,rels:e.rel?e.rel instanceof Array?new Set(e.rel):new Set([e.rel]):void 0,properties:b.deserialize(e.properties),height:C(e.height),width:C(e.width),duration:C(e.duration),bitrate:C(e.bitrate),languages:ve(e.language),alternates:_.deserialize(e.alternate),children:_.deserialize(e.children)})}serialize(){const e={href:this.href};return this.templated!==void 0&&(e.templated=this.templated),this.type!==void 0&&(e.type=this.type),this.title!==void 0&&(e.title=this.title),this.rels&&(e.rel=pt(this.rels)),this.properties&&(e.properties=this.properties.serialize()),this.height!==void 0&&(e.height=this.height),this.width!==void 0&&(e.width=this.width),this.duration!==void 0&&(e.duration=this.duration),this.bitrate!==void 0&&(e.bitrate=this.bitrate),this.languages&&(e.language=this.languages),this.alternates&&(e.alternate=this.alternates.serialize()),this.children&&(e.children=this.children.serialize()),e}get mediaType(){return this.type!==void 0?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 ye(this.href).parameters:new Set}expandTemplate(e){return new $({href:new ye(this.href).expand(e),templated:!1})}addProperties(e){var t;const i=$.deserialize(this.serialize());return i.properties=i.properties?(t=i.properties)==null?void 0:t.add(e):new b(e),i}get locator(){let e=this.href.split("#");return new R({href:e.length>0&&e[0]!==void 0?e[0]:this.href,type:this.type??"",title:this.title,locations:new x({fragments:e.length>1&&e[1]!==void 0?[e[1]]:[]})})}}class _{constructor(e){this.items=e}static deserialize(e){if(e&&e instanceof Array)return new _(e.map(t=>$.deserialize(t)).filter(t=>t!==void 0))}serialize(){return this.items.map(e=>e.serialize())}findWithRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.find(t)}filterByRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.filter(t)}findWithHref(e){const t=i=>i.href===e;return this.items.find(t)}findIndexWithHref(e){const t=i=>i.href===e;return this.items.findIndex(t)}findWithMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.find(t)}filterByMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.filter(t)}filterByMediaTypes(e){const t=i=>{for(const s of e)if(i.mediaType.matches(s))return!0;return!1};return this.items.filter(t)}everyIsAudio(){const e=t=>t.mediaType.isAudio;return this.items.length>0&&this.items.every(e)}everyIsBitmap(){const e=t=>t.mediaType.isBitmap;return this.items.length>0&&this.items.every(e)}everyIsHTML(){const e=t=>t.mediaType.isHTML;return this.items.length>0&&this.items.every(e)}everyIsVideo(){const e=t=>t.mediaType.isVideo;return this.items.length>0&&this.items.every(e)}everyMatchesMediaType(e){return Array.isArray(e)?this.items.length>0&&this.items.every(t=>{for(const i of e)return t.mediaType.matches(i);return!1}):this.items.length>0&&this.items.every(t=>t.mediaType.matches(e))}filterLinksHasType(){return this.items.filter(e=>e.type)}}class X{constructor(e){this.cssSelector=e.cssSelector,this.textNodeIndex=e.textNodeIndex,this.charOffset=e.charOffset}static deserialize(e){if(!(e&&e.cssSelector))return;let t=C(e.textNodeIndex);if(t===void 0)return;let i=C(e.charOffset);return i===void 0&&(i=C(e.offset)),new X({cssSelector:e.cssSelector,textNodeIndex:t,charOffset:i})}serialize(){const e={cssSelector:this.cssSelector,textNodeIndex:this.textNodeIndex};return this.charOffset!==void 0&&(e.charOffset=this.charOffset),e}}class Q{constructor(e){this.start=e.start,this.end=e.end}static deserialize(e){if(!e)return;let t=X.deserialize(e.start);if(t)return new Q({start:t,end:X.deserialize(e.end)})}serialize(){const e={start:this.start.serialize()};return this.end&&(e.end=this.end.serialize()),e}}x.prototype.getCssSelector=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("cssSelector")},x.prototype.getPartialCfi=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("partialCfi")},x.prototype.getDomRange=function(){var r;return Q.deserialize((r=this.otherLocations)==null?void 0:r.get("domRange"))},x.prototype.fragmentParameters=function(){return new Map(this.fragments.map(r=>r.startsWith("#")?r.slice(1):r).join("&").split("&").filter(r=>!r.startsWith("#")).map(r=>r.split("=")).filter(r=>r.length===2).map(r=>[r[0].trim().toLowerCase(),r[1].trim()]))},x.prototype.htmlId=function(){if(!this.fragments.length)return;let r=this.fragments.find(e=>e.length&&!e.includes("="));if(!r){const e=this.fragmentParameters();e.has("id")?r=e.get("id"):e.has("name")&&(r=e.get("name"))}return r!=null&&r.startsWith("#")?r.slice(1):r},x.prototype.page=function(){const r=parseInt(this.fragmentParameters().get("page"));if(!isNaN(r)&&r>=0)return r},x.prototype.time=function(){const r=parseInt(this.fragmentParameters().get("t"));if(!isNaN(r))return r},x.prototype.space=function(){const r=this.fragmentParameters();if(!r.has("xywh"))return;const e=r.get("xywh").split(",").map(t=>parseInt(t));if(e.length===4&&!e.some(isNaN))return e};class ee{constructor(e){this.currency=e.currency,this.value=e.value}static deserialize(e){if(!e)return;let t=e.currency;if(!(t&&typeof t=="string"&&t.length>0))return;let i=C(e.value);if(i!==void 0)return new ee({currency:t,value:i})}serialize(){return{currency:this.currency,value:this.value}}}class H{constructor(e){this.type=e.type,this.children=e.children}static deserialize(e){if(e&&e.type)return new H({type:e.type,children:H.deserializeArray(e.children)})}static deserializeArray(e){if(e instanceof Array)return e.map(t=>H.deserialize(t)).filter(t=>t!==void 0)}serialize(){const e={type:this.type};return this.children&&(e.children=this.children.map(t=>t.serialize())),e}}class te{constructor(e){this.total=e.total,this.position=e.position}static deserialize(e){if(e)return new te({total:C(e.total),position:C(e.position)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.position!==void 0&&(e.position=this.position),e}}class ie{constructor(e){this.total=e.total,this.available=e.available}static deserialize(e){if(e)return new ie({total:C(e.total),available:C(e.available)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.available!==void 0&&(e.available=this.available),e}}class re{constructor(e){this.state=e.state,this.since=e.since,this.until=e.until}static deserialize(e){if(e&&e.state)return new re({state:e.state,since:be(e.since),until:be(e.until)})}serialize(){const e={state:this.state};return this.since!==void 0&&(e.since=this.since.toISOString()),this.until!==void 0&&(e.until=this.until.toISOString()),e}}b.prototype.getNumberOfItems=function(){return C(this.otherProperties.numberOfItems)},b.prototype.getPrice=function(){return ee.deserialize(this.otherProperties.price)},b.prototype.getIndirectAcquisitions=function(){const r=this.otherProperties.indirectAcquisition;if(r&&r instanceof Array)return r.map(e=>H.deserialize(e)).filter(e=>e!==void 0)},b.prototype.getHolds=function(){return te.deserialize(this.otherProperties.holds)},b.prototype.getCopies=function(){return ie.deserialize(this.otherProperties.copies)},b.prototype.getAvailability=function(){return re.deserialize(this.otherProperties.availability)},b.prototype.getAuthenticate=function(){return $.deserialize(this.otherProperties.authenticate)},b.prototype.getClipped=function(){return this.otherProperties.clipped},b.prototype.getFit=function(){return this.otherProperties.fit},b.prototype.getOrientation=function(){return this.otherProperties.orientation},b.prototype.getOverflow=function(){return this.otherProperties.overflow},b.prototype.getPage=function(){return this.otherProperties.page||void 0},b.prototype.getSpread=function(){return this.otherProperties.spread||void 0};var z;(function(r){r.NONE="none",r.DESCENDANT="descendant",r.CHILD="child"})(z||(z={}));var M;(function(r){r.id="id",r.class="class",r.tag="tag",r.attribute="attribute",r.nthchild="nthchild",r.nthoftype="nthoftype"})(M||(M={}));const ft="CssSelectorGenerator";function Ee(r="unknown problem",...e){console.warn(`${ft}: ${r}`,...e)}M.id,M.class,M.tag,M.attribute,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY;function mt(r){return r instanceof RegExp}function gt(r){return r.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function yt(r){const e=r.map(t=>{if(mt(t))return i=>t.test(i);if(typeof t=="function")return i=>{const s=t(i);return typeof s!="boolean"?(Ee("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",t),!1):s};if(typeof t=="string"){const i=new RegExp("^"+gt(t)+"$");return s=>i.test(s)}return Ee("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1});return t=>e.some(i=>i(t))}const vt="",bt=" > ",Et=" ";z.NONE+"",z.NONE,z.DESCENDANT+"",z.DESCENDANT,z.CHILD+"",z.CHILD,M.nthoftype,M.tag,M.id,M.class,M.attribute,M.nthchild,yt(["class","id","ng-*"]);class V{}function xe(r){return r.split("").reverse().join("")}function xt(r,e,t){const i=xe(e);return t.map(s=>{const n=Math.max(0,s.end-e.length-s.errors),o=xe(r.slice(n,s.end));return{start:Te(o,i,s.errors).reduce((c,h)=>s.end-h.end<c?s.end-h.end:c,s.end),end:s.end,errors:s.errors}})}function se(r){return(r|-r)>>31&1}function Se(r,e,t,i){let s=r.P[t],n=r.M[t];const o=i>>>31,l=e[t]|o,c=l|n,h=(l&s)+s^s|l;let u=n|~(h|s),p=s&h;const d=se(u&r.lastRowMask[t])-se(p&r.lastRowMask[t]);return u<<=1,p<<=1,p|=o,u|=se(i)-o,s=p|~(c|u),n=u&c,r.P[t]=s,r.M[t]=n,d}function Te(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),c=new Map,h=[];for(let d=0;d<256;d++)h.push(l);for(let d=0;d<e.length;d+=1){const f=e.charCodeAt(d);if(c.has(f))continue;const g=new Uint32Array(n+1);c.set(f,g),f<h.length&&(h[f]=g);for(let m=0;m<=n;m+=1){g[m]=0;for(let v=0;v<s;v+=1){const T=m*s+v;if(T>=e.length)continue;e.charCodeAt(T)===f&&(g[m]|=1<<v)}}}let u=Math.max(0,Math.ceil(t/s)-1);const p=new Uint32Array(n+1);for(let d=0;d<=u;d+=1)p[d]=(d+1)*s;p[n]=e.length;for(let d=0;d<=u;d+=1)o.P[d]=-1,o.M[d]=0;for(let d=0;d<r.length;d+=1){const f=r.charCodeAt(d);let g;f<h.length?g=h[f]:(g=c.get(f),typeof g>"u"&&(g=l));let m=0;for(let v=0;v<=u;v+=1)m=Se(o,g,v,m),p[v]+=m;if(p[u]-m<=t&&u<n&&(g[u+1]&1||m<0)){u+=1,o.P[u]=-1,o.M[u]=0;let v;if(u===n){const T=e.length%s;v=T===0?s:T}else v=s;p[u]=p[u-1]+v-m+Se(o,g,u,m)}else for(;u>0&&p[u]>=t+s;)u-=1;u===n&&p[u]<=t&&(p[u]<t&&i.splice(0,i.length),i.push({start:-1,end:d+1,errors:p[u]}),t=p[u])}return i}function St(r,e,t){const i=Te(r,e,t);return xt(r,e,i)}function we(r,e,t){let i=0;const s=[];for(;i!==-1;)i=r.indexOf(e,i),i!==-1&&(s.push({start:i,end:i+e.length,errors:0}),i+=1);return s.length>0?s:St(r,e,t)}function Ce(r,e){return e.length===0||r.length===0?0:1-we(r,e,e.length)[0].errors/e.length}function Tt(r,e,t={}){if(e.length===0)return null;const i=Math.min(256,e.length/2),s=we(r,e,i);if(s.length===0)return null;const n=l=>{const d=1-l.errors/e.length,f=t.prefix?Ce(r.slice(Math.max(0,l.start-t.prefix.length),l.start),t.prefix):1,g=t.suffix?Ce(r.slice(l.end,l.end+t.suffix.length),t.suffix):1;let m=1;typeof t.hint=="number"&&(m=1-Math.abs(l.start-t.hint)/r.length);const v=50*d+20*f+20*g+2*m,T=50+20+20+2;return v/T},o=s.map(l=>({start:l.start,end:l.end,score:n(l)}));return o.sort((l,c)=>c.score-l.score),o[0]}function ne(r,e,t){const i=t===1?e:e-1;if(r.charAt(i).trim()!=="")return e;let s,n;if(t===2?(s=r.substring(0,e),n=s.trimEnd()):(s=r.substring(e),n=s.trimStart()),!n.length)return-1;const o=s.length-n.length;return t===2?e-o:e+o}function Pe(r,e){const t=r.commonAncestorContainer.ownerDocument.createNodeIterator(r.commonAncestorContainer,NodeFilter.SHOW_TEXT),i=e===1?r.startContainer:r.endContainer,s=e===1?r.endContainer:r.startContainer;let n=t.nextNode();for(;n&&n!==i;)n=t.nextNode();e===2&&(n=t.previousNode());let o=-1;const l=()=>{if(n=e===1?t.nextNode():t.previousNode(),n){const c=n.textContent,h=e===1?0:c.length;o=ne(c,h,e)}};for(;n&&o===-1&&n!==s;)l();if(n&&o>=0)return{node:n,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function wt(r){if(!r.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(r.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(r.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=r.cloneRange();let t=!1,i=!1;const s={start:ne(r.startContainer.textContent,r.startOffset,1),end:ne(r.endContainer.textContent,r.endOffset,2)};if(s.start>=0&&(e.setStart(r.startContainer,s.start),t=!0),s.end>0&&(e.setEnd(r.endContainer,s.end),i=!0),t&&i)return e;if(!t){const{node:n,offset:o}=Pe(e,1);n&&o>=0&&e.setStart(n,o)}if(!i){const{node:n,offset:o}=Pe(e,2);n&&o>0&&e.setEnd(n,o)}return e}function Me(r){var e;switch(r.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return((e=r.textContent)==null?void 0:e.length)??0;default:return 0}}function Ne(r){let e=r.previousSibling,t=0;for(;e;)t+=Me(e),e=e.previousSibling;return t}function Oe(r,...e){let t=e.shift();const i=r.ownerDocument.createNodeIterator(r,NodeFilter.SHOW_TEXT),s=[];let n=i.nextNode(),o,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+=Ne(t),t=t.parentElement;return new A(t,i)}resolve(e={}){try{return Oe(this.element,this.offset)[0]}catch(t){if(this.offset===0&&e.direction!==void 0){const i=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);i.currentNode=this.element;const s=e.direction===1,n=s?i.nextNode():i.previousNode();if(!n)throw t;return{node:n,offset:s?0:n.data.length}}else throw t}}static fromCharOffset(e,t){switch(e.nodeType){case Node.TEXT_NODE:return A.fromPoint(e,t);case Node.ELEMENT_NODE:return new A(e,t);default:throw new Error("Node is not an element or text node")}}static fromPoint(e,t){switch(e.nodeType){case Node.TEXT_NODE:{if(t<0||t>e.data.length)throw new Error("Text node offset is out of range");if(!e.parentElement)throw new Error("Text node has no parent");const i=Ne(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+=Me(e.childNodes[s]);return new A(e,i)}default:throw new Error("Point is not in an element or text node")}}}class D{constructor(e,t){this.start=e,this.end=t}relativeTo(e){return new D(this.start.relativeTo(e),this.end.relativeTo(e))}toRange(){let e,t;this.start.element===this.end.element&&this.start.offset<=this.end.offset?[e,t]=Oe(this.start.element,this.start.offset,this.end.offset):(e=this.start.resolve({direction:1}),t=this.end.resolve({direction:2}));const i=new Range;return i.setStart(e.node,e.offset),i.setEnd(t.node,t.offset),i}static fromRange(e){const t=A.fromPoint(e.startContainer,e.startOffset),i=A.fromPoint(e.endContainer,e.endOffset);return new D(t,i)}static fromOffsets(e,t,i){return new D(new A(e,t),new A(e,i))}static trimmedRange(e){return wt(D.fromRange(e).toRange())}}class G{constructor(e,t,i){this.root=e,this.start=t,this.end=i}static fromRange(e,t){const i=D.fromRange(t).relativeTo(e);return new G(e,i.start.offset,i.end.offset)}static fromSelector(e,t){return new G(e,t.start,t.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return D.fromOffsets(this.root,this.start,this.end).toRange()}}class Y{constructor(e,t,i={}){this.root=e,this.exact=t,this.context=i}static fromRange(e,t){const i=e.textContent,s=D.fromRange(t).relativeTo(e),n=s.start.offset,o=s.end.offset,l=32;return new Y(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 Y(e,t.exact,{prefix:i,suffix:s})}toSelector(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}toRange(e={}){return this.toPositionAnchor(e).toRange()}toPositionAnchor(e={}){const t=this.root.textContent,i=Tt(t,this.exact,{...this.context,hint:e.hint});if(!i)throw new Error("Quote not found");return new G(this.root,i.start,i.end)}}function Ct(r){const e=r.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function oe(r,e){try{const t=e.locations,i=e.text;if(i&&i.highlight){let s;t&&t.getCssSelector()&&(s=r.querySelector(t.getCssSelector())),s||(s=r.body);const n=new Y(s,i.highlight,{prefix:i.before,suffix:i.after});try{return n.toRange()}catch{return console.warn("Quote not found:",n),null}}if(t){let s=null;if(!s&&t.getCssSelector()&&(s=r.querySelector(t.getCssSelector())),!s&&t.fragments){for(const n of t.fragments)if(s=r.getElementById(n),s)break}if(s){const n=r.createRange();return s.childNodes.length===0||Ct(s)?(n.selectNode(s),n):(n.setStartBefore(s),n.setEndAfter(s),n)}}}catch(t){console.error(t)}return null}function Pt(r,e){let t=r.getClientRects();t.length||r.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(t=r.commonAncestorContainer.getClientRects());const i=1,s=[];for(const h of t)s.push({bottom:h.bottom,height:h.height,left:h.left,right:h.right,top:h.top,width:h.width});const n=Ae(s,i,e),o=Nt(n,i),l=Ie(o),c=2*2;for(let h=l.length-1;h>=0;h--){const u=l[h];if(!(u.width*u.height>c))if(l.length>1)l.splice(h,1);else break}return l}function Ae(r,e,t){for(let i=0;i<r.length;i++)for(let s=i+1;s<r.length;s++){const n=r[i],o=r[s];if(n===o)continue;const l=N(n.top,o.top,e)&&N(n.bottom,o.bottom,e),c=N(n.left,o.left,e)&&N(n.right,o.right,e);if((c&&!t||l&&!c)&&Re(n,o,e)){const d=r.filter(g=>g!==n&&g!==o),f=Mt(n,o);return d.push(f),Ae(d,e,t)}}return r}function Mt(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 Nt(r,e){const t=new Set(r);for(const i of r){if(!(i.width>1&&i.height>1)){t.delete(i);continue}for(const n of r)if(i!==n&&t.has(n)&&Ot(n,i,e)){t.delete(i);break}}return Array.from(t)}function Ot(r,e,t){return K(r,e.left,e.top,t)&&K(r,e.right,e.top,t)&&K(r,e.left,e.bottom,t)&&K(r,e.right,e.bottom,t)}function K(r,e,t,i){return(r.left<e||N(r.left,e,i))&&(r.right>e||N(r.right,e,i))&&(r.top<t||N(r.top,t,i))&&(r.bottom>t||N(r.bottom,t,i))}function Ie(r){for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){const i=r[e],s=r[t];if(i!==s&&Re(i,s,-1)){let n=[],o;const l=Le(i,s);if(l.length===1)n=l,o=i;else{const h=Le(s,i);l.length<h.length?(n=l,o=i):(n=h,o=s)}const c=r.filter(h=>h!==o);return Array.prototype.push.apply(c,n),Ie(c)}}return r}function Le(r,e){const t=At(e,r);if(t.height===0||t.width===0)return[r];const i=[];{const s={bottom:r.bottom,height:0,left:r.left,right:t.left,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:t.top,height:0,left:t.left,right:t.right,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:r.bottom,height:0,left:t.left,right:t.right,top:t.bottom,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:r.bottom,height:0,left:t.right,right:r.right,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}return i}function At(r,e){const t=Math.max(r.left,e.left),i=Math.min(r.right,e.right),s=Math.max(r.top,e.top),n=Math.min(r.bottom,e.bottom);return{bottom:n,height:Math.max(0,n-s),left:t,right:i,top:s,width:Math.max(0,i-t)}}function Re(r,e,t){return(r.left<e.right||t>=0&&N(r.left,e.right,t))&&(e.left<r.right||t>=0&&N(e.left,r.right,t))&&(r.top<e.bottom||t>=0&&N(r.top,e.bottom,t))&&(e.top<r.bottom||t>=0&&N(e.top,r.bottom,t))}function N(r,e,t){return Math.abs(r-e)<=t}function ze(r){const e={},t=r.document.documentElement.style;for(const i in r.document.documentElement.style)Object.hasOwn(t,i)&&!Number.isNaN(Number.parseInt(i))&&(e[t[i]]=t.getPropertyValue(t[i]));return e}function It(r,e){const t=ze(r);Object.keys(t).forEach(i=>{e.hasOwnProperty(i)||ae(r,i)}),Object.entries(e).forEach(([i,s])=>{t[i]!==s&&Z(r,i,s)})}function De(r,e){return r.document.documentElement.style.getPropertyValue(e)}function Z(r,e,t){r.document.documentElement.style.setProperty(e,t)}function ae(r,e){r.document.documentElement.style.removeProperty(e)}const Lt=r=>{if(r.startsWith("rgb")){const e=r.match(/rgb\((\d+),\s(\d+),\s(\d+)(?:,\s(\d+))?\)/);if(e)return{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10),a:e[4]?parseInt(e[4],10)/255:1}}else if(r.startsWith("#")){const e=r.slice(1);if(e.length===3||e.length===4)return{r:parseInt(e[0]+e[0],16)/255,g:parseInt(e[1]+e[1],16)/255,b:parseInt(e[2]+e[2],16)/255,a:e.length===4?parseInt(e[3]+e[3],16)/255:1};if(e.length===6||e.length===8)return{r:parseInt(e[0]+e[1],16)/255,g:parseInt(e[2]+e[3],16)/255,b:parseInt(e[4]+e[5],16)/255,a:e.length===8?parseInt(e[6]+e[7],16)/255:1}}return{r:0,g:0,b:0,a:1}},Rt=r=>.2126*r.r*r.a+.7152*r.g*r.a+.0722*r.b*r.a,zt=r=>{const e=Lt(r);return Rt(e)<128};var We=(r=>(r.Wrap="wrap",r.Viewport="viewport",r.Bounds="bounds",r.Page="page",r))(We||{}),Fe=(r=>(r.Boxes="boxes",r.Bounds="bounds",r))(Fe||{});const Dt=()=>"Highlight"in window,Be=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Wt{constructor(e,t,i,s){this.wnd=e,this.comms=t,this.id=i,this.name=s,this.items=[],this.lastItemId=0,this.container=void 0,this.activateable=!1,this.experimentalHighlights=!1,this.currentRender=0,Dt()&&(this.experimentalHighlights=!0,this.notTextFlag=new Map)}get activeable(){return this.activateable}set activeable(e){this.activateable=e}add(e){var o,l,c,h;const t=`${this.id}-${this.lastItemId++}`,i=oe(this.wnd.document,e.locator);if(!i){this.comms.log("Can't locate DOM range for decoration",e);return}const s=i.commonAncestorContainer;s.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&(Be.includes(s.nodeName.toUpperCase())&&((o=this.notTextFlag)==null||o.set(t,!0)),s.querySelector(Be.join(", ").toLowerCase())&&((l=this.notTextFlag)==null||l.set(t,!0)),(((c=s.textContent)==null?void 0:c.trim())||"").length===0&&((h=this.notTextFlag)==null||h.set(t,!0)));const n={decoration:e,id:t,range:i};this.items.push(n),this.layout(n),this.renderLayout([n])}remove(e){var s,n;const t=this.items.findIndex(o=>o.decoration.id===e);if(t<0)return;const i=this.items[t];if(this.items.splice(t,1),i.clickableElements=void 0,i.container&&(i.container.remove(),i.container=void 0),this.experimentalHighlights&&!((s=this.notTextFlag)!=null&&s.has(i.id))){const o=this.wnd.CSS.highlights.get(this.id);o==null||o.delete(i.range)}(n=this.notTextFlag)==null||n.delete(i.id)}update(e){this.remove(e.id),this.add(e)}clear(){var e;this.clearContainer(),this.items.length=0,(e=this.notTextFlag)==null||e.clear()}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.items.forEach(e=>this.layout(e)),this.renderLayout(this.items)}experimentalLayout(e){var s,n;const[t,i]=this.requireContainer(!0);i.add(e.range),t.innerHTML=`
1
+ (function(b,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(b=typeof globalThis<"u"?globalThis:b||self,j(b["navigator-html-injectables"]={}))})(this,function(b){"use strict";const j=Math.pow(2,32),fe=()=>Math.round(Math.random()*j).toString(36),me=()=>`${Math.round(performance.now())}-${fe()}-${fe()}`,U=1;class ge{constructor(e){this.destination=null,this.registrar=new Map,this.origin="",this.channelId="",this.receiver=this.receive.bind(this),this.preLog=[],this.wnd=e,e.addEventListener("message",this.receiver)}receive(e){if(e.source===null)throw Error("Event source is null");if(typeof e.data!="object")return;const t=e.data;if(!(!("_readium"in t)||!t._readium||t._readium<=0)){if(t.key==="_ping"){if(!this.destination){if(this.destination=e.source,this.origin=e.origin,this.channelId=t._channel,t._readium!==U){t._readium>U?this.send("error",`received comms version ${t._readium} higher than ${U}`):this.send("error",`received comms version ${t._readium} lower than ${U}`),this.destination=null,this.origin="",this.channelId="";return}this.send("_pong",void 0),this.preLog.forEach(i=>this.send("log",i)),this.preLog=[]}return}else if(this.channelId){if(t._channel!==this.channelId||e.origin!==this.origin)return}else return;this.handle(t)}}handle(e){const t=this.registrar.get(e.key);if(!t||t.length===0){e.strict&&this.send("_unhandled",e);return}t.forEach(i=>i.cb(e.data,s=>{this.send("_ack",s,e.id)}))}register(e,t,i){Array.isArray(e)||(e=[e]),e.forEach(s=>{const n=this.registrar.get(s);if(n&&n.length>=0){if(n.find(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:U,_channel:this.channelId,id:i??me(),key:e,data:t};try{this.destination.postMessage(n,{targetOrigin:this.origin,transfer:s})}catch(o){if(s.length>0)throw o;this.destination.postMessage(n,this.origin,s)}}}class J{constructor(e){this.algorithm=e.algorithm,this.compression=e.compression,this.originalLength=e.originalLength,this.profile=e.profile,this.scheme=e.scheme}static deserialize(e){if(e&&e.algorithm)return new J({algorithm:e.algorithm,compression:e.compression,originalLength:e.originalLength,profile:e.profile,scheme:e.scheme})}serialize(){const e={algorithm:this.algorithm};return this.compression!==void 0&&(e.compression=this.compression),this.originalLength!==void 0&&(e.originalLength=this.originalLength),this.profile!==void 0&&(e.profile=this.profile),this.scheme!==void 0&&(e.scheme=this.scheme),e}}class E{constructor(e){this.otherProperties=e}static deserialize(e){if(e)return new E(e)}serialize(){return this.otherProperties}add(e){const t=Object.assign({},this.otherProperties);for(const i in e)t[i]=e[i];return new E(t)}}Object.defineProperty(E.prototype,"encryption",{get:function(){return J.deserialize(this.otherProperties.encrypted)}}),E.prototype.getContains=function(){return new Set(this.otherProperties.contains||[])},E.prototype.getLayout=function(){return this.otherProperties.layout};class a{constructor(e){let t,i,s=e.mediaType.replace(/\s/g,"").split(";");const n=s[0].split("/");if(n.length===2){if(t=n[0].toLowerCase().trim(),i=n[1].toLowerCase().trim(),t.length===0||i.length===0)throw new Error("Invalid media type")}else throw new Error("Invalid media type");const o={};for(let u=1;u<s.length;u++){const f=s[u].split("=");if(f.length===2){const g=f[0].toLocaleLowerCase(),m=g==="charset"?f[1].toUpperCase():f[1];o[g]=m}}const l={},c=Object.keys(o);c.sort((u,f)=>u.localeCompare(f)),c.forEach(u=>l[u]=o[u]);let h="";for(const u in l){const f=l[u];h+=`;${u}=${f}`}const d=`${t}/${i}${h}`,p=l.encoding;this.string=d,this.type=t,this.subtype=i,this.parameters=l,this.encoding=p,this.name=e.name,this.fileExtension=e.fileExtension}static parse(e){return new a(e)}get structuredSyntaxSuffix(){const e=this.subtype.split("+");return e.length>1?`+${e[e.length-1]}`:void 0}get charset(){return this.parameters.charset}contains(e){const t=typeof e=="string"?a.parse({mediaType:e}):e;if(!((this.type==="*"||this.type===t.type)&&(this.subtype==="*"||this.subtype===t.subtype)))return!1;const i=new Set(Object.entries(this.parameters).map(([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 ye{constructor(e){this.uri=e,this.parameters=this.getParameters(e)}getParameters(e){const t=/\{\??([^}]+)\}/g,i=e.match(t);return i?new Set(i.join(",").replace(t,"$1").split(",").map(s=>s.trim())):new Set}expand(e){const t=s=>s.split(",").map(n=>{const o=e[n];return o?encodeURIComponent(o):""}).join(","),i=s=>"?"+s.split(",").map(n=>{const o=n.split("=")[0],l=e[o];return l?`${o}=${encodeURIComponent(l)}`:""}).join("&");return this.uri.replace(/\{(\??)([^}]+)\}/g,(...s)=>s[1]?i(s[2]):t(s[2]))}}function ut(r){return r&&r instanceof Array?r:void 0}function ve(r){return r&&typeof r=="string"?[r]:ut(r)}function Ee(r){return typeof r=="string"?new Date(r):void 0}function _(r){return isNaN(r)?void 0:r}function C(r){return _(r)!==void 0&&Math.sign(r)>=0?r:void 0}function pt(r){const e=new Array;return r.forEach(t=>e.push(t)),e}class x{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const t=_(e.progression),i=_(e.totalProgression),s=_(e.position),n=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position"]);return Object.entries(e).forEach(([l,c])=>{o.has(l)||n.set(l,c)}),new x({fragments:ve(e.fragments||e.fragment),progression:t!==void 0&&t>=0&&t<=1?t:void 0,totalProgression:i!==void 0&&i>=0&&i<=1?i:void 0,position:s!==void 0&&s>0?s:void 0,otherLocations:n.size===0?void 0:n})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((t,i)=>e[i]=t),e}}class k{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new k({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}}class R{constructor(e){this.href=e.href,this.type=e.type,this.title=e.title,this.locations=e.locations?e.locations:new x({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new R({href:e.href,type:e.type,title:e.title,locations:x.deserialize(e.locations),text:k.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new R({href:this.href,type:this.type,title:this.title,text:this.text,locations:new x({...this.locations,...e})})}}class ${constructor(e){this.href=e.href,this.templated=e.templated,this.type=e.type,this.title=e.title,this.rels=e.rels,this.properties=e.properties,this.height=e.height,this.width=e.width,this.duration=e.duration,this.bitrate=e.bitrate,this.languages=e.languages,this.alternates=e.alternates,this.children=e.children}static deserialize(e){if(!(!e||typeof e.href!="string"))return new $({href:e.href,templated:e.templated,type:e.type,title:e.title,rels:e.rel?e.rel instanceof Array?new Set(e.rel):new Set([e.rel]):void 0,properties:E.deserialize(e.properties),height:C(e.height),width:C(e.width),duration:C(e.duration),bitrate:C(e.bitrate),languages:ve(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=pt(this.rels)),this.properties&&(e.properties=this.properties.serialize()),this.height!==void 0&&(e.height=this.height),this.width!==void 0&&(e.width=this.width),this.duration!==void 0&&(e.duration=this.duration),this.bitrate!==void 0&&(e.bitrate=this.bitrate),this.languages&&(e.language=this.languages),this.alternates&&(e.alternate=this.alternates.serialize()),this.children&&(e.children=this.children.serialize()),e}get mediaType(){return this.type!==void 0?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 ye(this.href).parameters:new Set}expandTemplate(e){return new $({href:new ye(this.href).expand(e),templated:!1})}addProperties(e){var t;const i=$.deserialize(this.serialize());return i.properties=i.properties?(t=i.properties)==null?void 0:t.add(e):new E(e),i}get locator(){let e=this.href.split("#");return new R({href:e.length>0&&e[0]!==void 0?e[0]:this.href,type:this.type??"",title:this.title,locations:new x({fragments:e.length>1&&e[1]!==void 0?[e[1]]:[]})})}}class q{constructor(e){this.items=e}static deserialize(e){if(e&&e instanceof Array)return new q(e.map(t=>$.deserialize(t)).filter(t=>t!==void 0))}serialize(){return this.items.map(e=>e.serialize())}findWithRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.find(t)}filterByRel(e){const t=i=>i.rels&&i.rels.has(e);return this.items.filter(t)}findWithHref(e){const t=i=>i.href===e;return this.items.find(t)}findIndexWithHref(e){const t=i=>i.href===e;return this.items.findIndex(t)}findWithMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.find(t)}filterByMediaType(e){const t=i=>i.mediaType.matches(e);return this.items.filter(t)}filterByMediaTypes(e){const t=i=>{for(const s of e)if(i.mediaType.matches(s))return!0;return!1};return this.items.filter(t)}everyIsAudio(){const e=t=>t.mediaType.isAudio;return this.items.length>0&&this.items.every(e)}everyIsBitmap(){const e=t=>t.mediaType.isBitmap;return this.items.length>0&&this.items.every(e)}everyIsHTML(){const e=t=>t.mediaType.isHTML;return this.items.length>0&&this.items.every(e)}everyIsVideo(){const e=t=>t.mediaType.isVideo;return this.items.length>0&&this.items.every(e)}everyMatchesMediaType(e){return Array.isArray(e)?this.items.length>0&&this.items.every(t=>{for(const i of e)return t.mediaType.matches(i);return!1}):this.items.length>0&&this.items.every(t=>t.mediaType.matches(e))}filterLinksHasType(){return this.items.filter(e=>e.type)}}class X{constructor(e){this.cssSelector=e.cssSelector,this.textNodeIndex=e.textNodeIndex,this.charOffset=e.charOffset}static deserialize(e){if(!(e&&e.cssSelector))return;let t=C(e.textNodeIndex);if(t===void 0)return;let i=C(e.charOffset);return i===void 0&&(i=C(e.offset)),new X({cssSelector:e.cssSelector,textNodeIndex:t,charOffset:i})}serialize(){const e={cssSelector:this.cssSelector,textNodeIndex:this.textNodeIndex};return this.charOffset!==void 0&&(e.charOffset=this.charOffset),e}}class Q{constructor(e){this.start=e.start,this.end=e.end}static deserialize(e){if(!e)return;let t=X.deserialize(e.start);if(t)return new Q({start:t,end:X.deserialize(e.end)})}serialize(){const e={start:this.start.serialize()};return this.end&&(e.end=this.end.serialize()),e}}x.prototype.getCssSelector=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("cssSelector")},x.prototype.getPartialCfi=function(){var r;return(r=this.otherLocations)==null?void 0:r.get("partialCfi")},x.prototype.getDomRange=function(){var r;return Q.deserialize((r=this.otherLocations)==null?void 0:r.get("domRange"))},x.prototype.fragmentParameters=function(){return new Map(this.fragments.map(r=>r.startsWith("#")?r.slice(1):r).join("&").split("&").filter(r=>!r.startsWith("#")).map(r=>r.split("=")).filter(r=>r.length===2).map(r=>[r[0].trim().toLowerCase(),r[1].trim()]))},x.prototype.htmlId=function(){if(!this.fragments.length)return;let r=this.fragments.find(e=>e.length&&!e.includes("="));if(!r){const e=this.fragmentParameters();e.has("id")?r=e.get("id"):e.has("name")&&(r=e.get("name"))}return r!=null&&r.startsWith("#")?r.slice(1):r},x.prototype.page=function(){const r=parseInt(this.fragmentParameters().get("page"));if(!isNaN(r)&&r>=0)return r},x.prototype.time=function(){const r=parseInt(this.fragmentParameters().get("t"));if(!isNaN(r))return r},x.prototype.space=function(){const r=this.fragmentParameters();if(!r.has("xywh"))return;const e=r.get("xywh").split(",").map(t=>parseInt(t));if(e.length===4&&!e.some(isNaN))return e};class ee{constructor(e){this.currency=e.currency,this.value=e.value}static deserialize(e){if(!e)return;let t=e.currency;if(!(t&&typeof t=="string"&&t.length>0))return;let i=C(e.value);if(i!==void 0)return new ee({currency:t,value:i})}serialize(){return{currency:this.currency,value:this.value}}}class H{constructor(e){this.type=e.type,this.children=e.children}static deserialize(e){if(e&&e.type)return new H({type:e.type,children:H.deserializeArray(e.children)})}static deserializeArray(e){if(e instanceof Array)return e.map(t=>H.deserialize(t)).filter(t=>t!==void 0)}serialize(){const e={type:this.type};return this.children&&(e.children=this.children.map(t=>t.serialize())),e}}class te{constructor(e){this.total=e.total,this.position=e.position}static deserialize(e){if(e)return new te({total:C(e.total),position:C(e.position)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.position!==void 0&&(e.position=this.position),e}}class ie{constructor(e){this.total=e.total,this.available=e.available}static deserialize(e){if(e)return new ie({total:C(e.total),available:C(e.available)})}serialize(){const e={};return this.total!==void 0&&(e.total=this.total),this.available!==void 0&&(e.available=this.available),e}}class re{constructor(e){this.state=e.state,this.since=e.since,this.until=e.until}static deserialize(e){if(e&&e.state)return new re({state:e.state,since:Ee(e.since),until:Ee(e.until)})}serialize(){const e={state:this.state};return this.since!==void 0&&(e.since=this.since.toISOString()),this.until!==void 0&&(e.until=this.until.toISOString()),e}}E.prototype.getNumberOfItems=function(){return C(this.otherProperties.numberOfItems)},E.prototype.getPrice=function(){return ee.deserialize(this.otherProperties.price)},E.prototype.getIndirectAcquisitions=function(){const r=this.otherProperties.indirectAcquisition;if(r&&r instanceof Array)return r.map(e=>H.deserialize(e)).filter(e=>e!==void 0)},E.prototype.getHolds=function(){return te.deserialize(this.otherProperties.holds)},E.prototype.getCopies=function(){return ie.deserialize(this.otherProperties.copies)},E.prototype.getAvailability=function(){return re.deserialize(this.otherProperties.availability)},E.prototype.getAuthenticate=function(){return $.deserialize(this.otherProperties.authenticate)},E.prototype.getClipped=function(){return this.otherProperties.clipped},E.prototype.getFit=function(){return this.otherProperties.fit},E.prototype.getOrientation=function(){return this.otherProperties.orientation},E.prototype.getOverflow=function(){return this.otherProperties.overflow},E.prototype.getPage=function(){return this.otherProperties.page||void 0},E.prototype.getSpread=function(){return this.otherProperties.spread||void 0};var D;(function(r){r.NONE="none",r.DESCENDANT="descendant",r.CHILD="child"})(D||(D={}));var M;(function(r){r.id="id",r.class="class",r.tag="tag",r.attribute="attribute",r.nthchild="nthchild",r.nthoftype="nthoftype"})(M||(M={}));const ft="CssSelectorGenerator";function be(r="unknown problem",...e){console.warn(`${ft}: ${r}`,...e)}M.id,M.class,M.tag,M.attribute,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY;function mt(r){return r instanceof RegExp}function gt(r){return r.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function yt(r){const e=r.map(t=>{if(mt(t))return i=>t.test(i);if(typeof t=="function")return i=>{const s=t(i);return typeof s!="boolean"?(be("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",t),!1):s};if(typeof t=="string"){const i=new RegExp("^"+gt(t)+"$");return s=>i.test(s)}return be("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1});return t=>e.some(i=>i(t))}const vt="",Et=" > ",bt=" ";D.NONE+"",D.NONE,D.DESCENDANT+"",D.DESCENDANT,D.CHILD+"",D.CHILD,M.nthoftype,M.tag,M.id,M.class,M.attribute,M.nthchild,yt(["class","id","ng-*"]);class V{}function xe(r){return r.split("").reverse().join("")}function xt(r,e,t){const i=xe(e);return t.map(s=>{const n=Math.max(0,s.end-e.length-s.errors),o=xe(r.slice(n,s.end));return{start:Te(o,i,s.errors).reduce((c,h)=>s.end-h.end<c?s.end-h.end:c,s.end),end:s.end,errors:s.errors}})}function se(r){return(r|-r)>>31&1}function Se(r,e,t,i){let s=r.P[t],n=r.M[t];const o=i>>>31,l=e[t]|o,c=l|n,h=(l&s)+s^s|l;let d=n|~(h|s),p=s&h;const u=se(d&r.lastRowMask[t])-se(p&r.lastRowMask[t]);return d<<=1,p<<=1,p|=o,d|=se(i)-o,s=p|~(c|d),n=d&c,r.P[t]=s,r.M[t]=n,u}function Te(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),c=new Map,h=[];for(let u=0;u<256;u++)h.push(l);for(let u=0;u<e.length;u+=1){const f=e.charCodeAt(u);if(c.has(f))continue;const g=new Uint32Array(n+1);c.set(f,g),f<h.length&&(h[f]=g);for(let m=0;m<=n;m+=1){g[m]=0;for(let v=0;v<s;v+=1){const T=m*s+v;if(T>=e.length)continue;e.charCodeAt(T)===f&&(g[m]|=1<<v)}}}let d=Math.max(0,Math.ceil(t/s)-1);const p=new Uint32Array(n+1);for(let u=0;u<=d;u+=1)p[u]=(u+1)*s;p[n]=e.length;for(let u=0;u<=d;u+=1)o.P[u]=-1,o.M[u]=0;for(let u=0;u<r.length;u+=1){const f=r.charCodeAt(u);let g;f<h.length?g=h[f]:(g=c.get(f),typeof g>"u"&&(g=l));let m=0;for(let v=0;v<=d;v+=1)m=Se(o,g,v,m),p[v]+=m;if(p[d]-m<=t&&d<n&&(g[d+1]&1||m<0)){d+=1,o.P[d]=-1,o.M[d]=0;let v;if(d===n){const T=e.length%s;v=T===0?s:T}else v=s;p[d]=p[d-1]+v-m+Se(o,g,d,m)}else for(;d>0&&p[d]>=t+s;)d-=1;d===n&&p[d]<=t&&(p[d]<t&&i.splice(0,i.length),i.push({start:-1,end:u+1,errors:p[d]}),t=p[d])}return i}function St(r,e,t){const i=Te(r,e,t);return xt(r,e,i)}function we(r,e,t){let i=0;const s=[];for(;i!==-1;)i=r.indexOf(e,i),i!==-1&&(s.push({start:i,end:i+e.length,errors:0}),i+=1);return s.length>0?s:St(r,e,t)}function Ce(r,e){return e.length===0||r.length===0?0:1-we(r,e,e.length)[0].errors/e.length}function Tt(r,e,t={}){if(e.length===0)return null;const i=Math.min(256,e.length/2),s=we(r,e,i);if(s.length===0)return null;const n=l=>{const u=1-l.errors/e.length,f=t.prefix?Ce(r.slice(Math.max(0,l.start-t.prefix.length),l.start),t.prefix):1,g=t.suffix?Ce(r.slice(l.end,l.end+t.suffix.length),t.suffix):1;let m=1;typeof t.hint=="number"&&(m=1-Math.abs(l.start-t.hint)/r.length);const v=50*u+20*f+20*g+2*m,T=50+20+20+2;return v/T},o=s.map(l=>({start:l.start,end:l.end,score:n(l)}));return o.sort((l,c)=>c.score-l.score),o[0]}function ne(r,e,t){const i=t===1?e:e-1;if(r.charAt(i).trim()!=="")return e;let s,n;if(t===2?(s=r.substring(0,e),n=s.trimEnd()):(s=r.substring(e),n=s.trimStart()),!n.length)return-1;const o=s.length-n.length;return t===2?e-o:e+o}function Pe(r,e){const t=r.commonAncestorContainer.ownerDocument.createNodeIterator(r.commonAncestorContainer,NodeFilter.SHOW_TEXT),i=e===1?r.startContainer:r.endContainer,s=e===1?r.endContainer:r.startContainer;let n=t.nextNode();for(;n&&n!==i;)n=t.nextNode();e===2&&(n=t.previousNode());let o=-1;const l=()=>{if(n=e===1?t.nextNode():t.previousNode(),n){const c=n.textContent,h=e===1?0:c.length;o=ne(c,h,e)}};for(;n&&o===-1&&n!==s;)l();if(n&&o>=0)return{node:n,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function wt(r){if(!r.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(r.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(r.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=r.cloneRange();let t=!1,i=!1;const s={start:ne(r.startContainer.textContent,r.startOffset,1),end:ne(r.endContainer.textContent,r.endOffset,2)};if(s.start>=0&&(e.setStart(r.startContainer,s.start),t=!0),s.end>0&&(e.setEnd(r.endContainer,s.end),i=!0),t&&i)return e;if(!t){const{node:n,offset:o}=Pe(e,1);n&&o>=0&&e.setStart(n,o)}if(!i){const{node:n,offset:o}=Pe(e,2);n&&o>0&&e.setEnd(n,o)}return e}function Me(r){var e;switch(r.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return((e=r.textContent)==null?void 0:e.length)??0;default:return 0}}function Ne(r){let e=r.previousSibling,t=0;for(;e;)t+=Me(e),e=e.previousSibling;return t}function Oe(r,...e){let t=e.shift();const i=r.ownerDocument.createNodeIterator(r,NodeFilter.SHOW_TEXT),s=[];let n=i.nextNode(),o,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+=Ne(t),t=t.parentElement;return new A(t,i)}resolve(e={}){try{return Oe(this.element,this.offset)[0]}catch(t){if(this.offset===0&&e.direction!==void 0){const i=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);i.currentNode=this.element;const s=e.direction===1,n=s?i.nextNode():i.previousNode();if(!n)throw t;return{node:n,offset:s?0:n.data.length}}else throw t}}static fromCharOffset(e,t){switch(e.nodeType){case Node.TEXT_NODE:return A.fromPoint(e,t);case Node.ELEMENT_NODE:return new A(e,t);default:throw new Error("Node is not an element or text node")}}static fromPoint(e,t){switch(e.nodeType){case Node.TEXT_NODE:{if(t<0||t>e.data.length)throw new Error("Text node offset is out of range");if(!e.parentElement)throw new Error("Text node has no parent");const i=Ne(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+=Me(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]=Oe(this.start.element,this.start.offset,this.end.offset):(e=this.start.resolve({direction:1}),t=this.end.resolve({direction:2}));const i=new Range;return i.setStart(e.node,e.offset),i.setEnd(t.node,t.offset),i}static fromRange(e){const t=A.fromPoint(e.startContainer,e.startOffset),i=A.fromPoint(e.endContainer,e.endOffset);return new z(t,i)}static fromOffsets(e,t,i){return new z(new A(e,t),new A(e,i))}static trimmedRange(e){return wt(z.fromRange(e).toRange())}}class G{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 G(e,i.start.offset,i.end.offset)}static fromSelector(e,t){return new G(e,t.start,t.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return z.fromOffsets(this.root,this.start,this.end).toRange()}}class Y{constructor(e,t,i={}){this.root=e,this.exact=t,this.context=i}static fromRange(e,t){const i=e.textContent,s=z.fromRange(t).relativeTo(e),n=s.start.offset,o=s.end.offset,l=32;return new Y(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 Y(e,t.exact,{prefix:i,suffix:s})}toSelector(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}toRange(e={}){return this.toPositionAnchor(e).toRange()}toPositionAnchor(e={}){const t=this.root.textContent,i=Tt(t,this.exact,{...this.context,hint:e.hint});if(!i)throw new Error("Quote not found");return new G(this.root,i.start,i.end)}}function Ct(r){const e=r.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function oe(r,e){try{const t=e.locations,i=e.text;if(i&&i.highlight){let s;t&&t.getCssSelector()&&(s=r.querySelector(t.getCssSelector())),s||(s=r.body);const n=new Y(s,i.highlight,{prefix:i.before,suffix:i.after});try{return n.toRange()}catch{return console.warn("Quote not found:",n),null}}if(t){let s=null;if(!s&&t.getCssSelector()&&(s=r.querySelector(t.getCssSelector())),!s&&t.fragments){for(const n of t.fragments)if(s=r.getElementById(n),s)break}if(s){const n=r.createRange();return s.childNodes.length===0||Ct(s)?(n.selectNode(s),n):(n.setStartBefore(s),n.setEndAfter(s),n)}}}catch(t){console.error(t)}return null}function Pt(r,e){let t=r.getClientRects();t.length||r.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(t=r.commonAncestorContainer.getClientRects());const i=1,s=[];for(const h of t)s.push({bottom:h.bottom,height:h.height,left:h.left,right:h.right,top:h.top,width:h.width});const n=Ae(s,i,e),o=Nt(n,i),l=Le(o),c=2*2;for(let h=l.length-1;h>=0;h--){const d=l[h];if(!(d.width*d.height>c))if(l.length>1)l.splice(h,1);else break}return l}function Ae(r,e,t){for(let i=0;i<r.length;i++)for(let s=i+1;s<r.length;s++){const n=r[i],o=r[s];if(n===o)continue;const l=N(n.top,o.top,e)&&N(n.bottom,o.bottom,e),c=N(n.left,o.left,e)&&N(n.right,o.right,e);if((c&&!t||l&&!c)&&Re(n,o,e)){const u=r.filter(g=>g!==n&&g!==o),f=Mt(n,o);return u.push(f),Ae(u,e,t)}}return r}function Mt(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 Nt(r,e){const t=new Set(r);for(const i of r){if(!(i.width>1&&i.height>1)){t.delete(i);continue}for(const n of r)if(i!==n&&t.has(n)&&Ot(n,i,e)){t.delete(i);break}}return Array.from(t)}function Ot(r,e,t){return K(r,e.left,e.top,t)&&K(r,e.right,e.top,t)&&K(r,e.left,e.bottom,t)&&K(r,e.right,e.bottom,t)}function K(r,e,t,i){return(r.left<e||N(r.left,e,i))&&(r.right>e||N(r.right,e,i))&&(r.top<t||N(r.top,t,i))&&(r.bottom>t||N(r.bottom,t,i))}function Le(r){for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){const i=r[e],s=r[t];if(i!==s&&Re(i,s,-1)){let n=[],o;const l=Ie(i,s);if(l.length===1)n=l,o=i;else{const h=Ie(s,i);l.length<h.length?(n=l,o=i):(n=h,o=s)}const c=r.filter(h=>h!==o);return Array.prototype.push.apply(c,n),Le(c)}}return r}function Ie(r,e){const t=At(e,r);if(t.height===0||t.width===0)return[r];const i=[];{const s={bottom:r.bottom,height:0,left:r.left,right:t.left,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:t.top,height:0,left:t.left,right:t.right,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:r.bottom,height:0,left:t.left,right:t.right,top:t.bottom,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}{const s={bottom:r.bottom,height:0,left:t.right,right:r.right,top:r.top,width:0};s.width=s.right-s.left,s.height=s.bottom-s.top,s.height!==0&&s.width!==0&&i.push(s)}return i}function At(r,e){const t=Math.max(r.left,e.left),i=Math.min(r.right,e.right),s=Math.max(r.top,e.top),n=Math.min(r.bottom,e.bottom);return{bottom:n,height:Math.max(0,n-s),left:t,right:i,top:s,width:Math.max(0,i-t)}}function Re(r,e,t){return(r.left<e.right||t>=0&&N(r.left,e.right,t))&&(e.left<r.right||t>=0&&N(e.left,r.right,t))&&(r.top<e.bottom||t>=0&&N(r.top,e.bottom,t))&&(e.top<r.bottom||t>=0&&N(e.top,r.bottom,t))}function N(r,e,t){return Math.abs(r-e)<=t}function De(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 Lt(r,e){const t=De(r);Object.keys(t).forEach(i=>{e.hasOwnProperty(i)||ae(r,i)}),Object.entries(e).forEach(([i,s])=>{t[i]!==s&&Z(r,i,s)})}function ze(r,e){return r.document.documentElement.style.getPropertyValue(e)}function Z(r,e,t){r.document.documentElement.style.setProperty(e,t)}function ae(r,e){r.document.documentElement.style.removeProperty(e)}const It=r=>{if(r.startsWith("rgb")){const e=r.match(/rgb\((\d+),\s(\d+),\s(\d+)(?:,\s(\d+))?\)/);if(e)return{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10),a:e[4]?parseInt(e[4],10)/255:1}}else if(r.startsWith("#")){const e=r.slice(1);if(e.length===3||e.length===4)return{r:parseInt(e[0]+e[0],16)/255,g:parseInt(e[1]+e[1],16)/255,b:parseInt(e[2]+e[2],16)/255,a:e.length===4?parseInt(e[3]+e[3],16)/255:1};if(e.length===6||e.length===8)return{r:parseInt(e[0]+e[1],16)/255,g:parseInt(e[2]+e[3],16)/255,b:parseInt(e[4]+e[5],16)/255,a:e.length===8?parseInt(e[6]+e[7],16)/255:1}}return{r:0,g:0,b:0,a:1}},Rt=r=>.2126*r.r*r.a+.7152*r.g*r.a+.0722*r.b*r.a,Dt=r=>{const e=It(r);return Rt(e)<128};var We=(r=>(r.Wrap="wrap",r.Viewport="viewport",r.Bounds="bounds",r.Page="page",r))(We||{}),Fe=(r=>(r.Boxes="boxes",r.Bounds="bounds",r))(Fe||{});const zt=()=>"Highlight"in window,Be=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Wt{constructor(e,t,i,s){this.wnd=e,this.comms=t,this.id=i,this.name=s,this.items=[],this.lastItemId=0,this.container=void 0,this.activateable=!1,this.experimentalHighlights=!1,this.currentRender=0,zt()&&(this.experimentalHighlights=!0,this.notTextFlag=new Map)}get activeable(){return this.activateable}set activeable(e){this.activateable=e}add(e){var o,l,c,h;const t=`${this.id}-${this.lastItemId++}`,i=oe(this.wnd.document,e.locator);if(!i){this.comms.log("Can't locate DOM range for decoration",e);return}const s=i.commonAncestorContainer;s.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&(Be.includes(s.nodeName.toUpperCase())&&((o=this.notTextFlag)==null||o.set(t,!0)),s.querySelector(Be.join(", ").toLowerCase())&&((l=this.notTextFlag)==null||l.set(t,!0)),(((c=s.textContent)==null?void 0:c.trim())||"").length===0&&((h=this.notTextFlag)==null||h.set(t,!0)));const n={decoration:e,id:t,range:i};this.items.push(n),this.layout(n),this.renderLayout([n])}remove(e){var s,n;const t=this.items.findIndex(o=>o.decoration.id===e);if(t<0)return;const i=this.items[t];if(this.items.splice(t,1),i.clickableElements=void 0,i.container&&(i.container.remove(),i.container=void 0),this.experimentalHighlights&&!((s=this.notTextFlag)!=null&&s.has(i.id))){const o=this.wnd.CSS.highlights.get(this.id);o==null||o.delete(i.range)}(n=this.notTextFlag)==null||n.delete(i.id)}update(e){this.remove(e.id),this.add(e)}clear(){var e;this.clearContainer(),this.items.length=0,(e=this.notTextFlag)==null||e.clear()}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.items.forEach(e=>this.layout(e)),this.renderLayout(this.items)}experimentalLayout(e){var s,n;const[t,i]=this.requireContainer(!0);i.add(e.range),t.innerHTML=`
2
2
  ::highlight(${this.id}) {
3
3
  color: black;
4
4
  background-color: ${((n=(s=e.decoration)==null?void 0:s.style)==null?void 0:n.tint)??"yellow"};
5
- }`}layout(e){var g,m,v,T,I;if(this.experimentalHighlights&&!((g=this.notTextFlag)!=null&&g.has(e.id)))return this.experimentalLayout(e);const t=this.wnd.document.createElement("div");t.setAttribute("id",e.id),t.style.setProperty("pointer-events","none");const i=this.wnd.innerWidth,s=parseInt(getComputedStyle(this.wnd.document.documentElement).getPropertyValue("column-count")),n=i/(s||1),o=this.wnd.document.scrollingElement,l=o.scrollLeft,c=o.scrollTop,h=(y,S,L)=>{var ot,at,lt,ht,ct,ut;if(y.style.position="absolute",((at=(ot=e.decoration)==null?void 0:ot.style)==null?void 0:at.width)==="viewport"){y.style.width=`${i}px`,y.style.height=`${S.height}px`;let ce=Math.floor(S.left/i)*i;y.style.left=`${ce+l}px`,y.style.top=`${S.top+c}px`}else if(((ht=(lt=e.decoration)==null?void 0:lt.style)==null?void 0:ht.width)==="bounds")y.style.width=`${L.width}px`,y.style.height=`${S.height}px`,y.style.left=`${L.left+l}px`,y.style.top=`${S.top+c}px`;else if(((ut=(ct=e.decoration)==null?void 0:ct.style)==null?void 0:ut.width)==="page"){y.style.width=`${n}px`,y.style.height=`${S.height}px`;let ce=Math.floor(S.left/n)*n;y.style.left=`${ce+l}px`,y.style.top=`${S.top+c}px`}else y.style.width=`${S.width}px`,y.style.height=`${S.height}px`,y.style.left=`${S.left+l}px`,y.style.top=`${S.top+c}px`},u=e.range.getBoundingClientRect();let p=this.wnd.document.createElement("template");const d=De(this.wnd,"--USER__appearance")==="readium-night-on"||zt(De(this.wnd,"--USER__backgroundColor"));p.innerHTML=`
5
+ }`}layout(e){var g,m,v,T,L;if(this.experimentalHighlights&&!((g=this.notTextFlag)!=null&&g.has(e.id)))return this.experimentalLayout(e);const t=this.wnd.document.createElement("div");t.setAttribute("id",e.id),t.style.setProperty("pointer-events","none");const i=this.wnd.innerWidth,s=parseInt(getComputedStyle(this.wnd.document.documentElement).getPropertyValue("column-count")),n=i/(s||1),o=this.wnd.document.scrollingElement,l=o.scrollLeft,c=o.scrollTop,h=(y,S,I)=>{var ot,at,lt,ht,ct,dt;if(y.style.position="absolute",((at=(ot=e.decoration)==null?void 0:ot.style)==null?void 0:at.width)==="viewport"){y.style.width=`${i}px`,y.style.height=`${S.height}px`;let ce=Math.floor(S.left/i)*i;y.style.left=`${ce+l}px`,y.style.top=`${S.top+c}px`}else if(((ht=(lt=e.decoration)==null?void 0:lt.style)==null?void 0:ht.width)==="bounds")y.style.width=`${I.width}px`,y.style.height=`${S.height}px`,y.style.left=`${I.left+l}px`,y.style.top=`${S.top+c}px`;else if(((dt=(ct=e.decoration)==null?void 0:ct.style)==null?void 0:dt.width)==="page"){y.style.width=`${n}px`,y.style.height=`${S.height}px`;let ce=Math.floor(S.left/n)*n;y.style.left=`${ce+l}px`,y.style.top=`${S.top+c}px`}else y.style.width=`${S.width}px`,y.style.height=`${S.height}px`,y.style.left=`${S.left+l}px`,y.style.top=`${S.top+c}px`},d=e.range.getBoundingClientRect();let p=this.wnd.document.createElement("template");const u=ze(this.wnd,"--USER__appearance")==="readium-night-on"||Dt(ze(this.wnd,"--USER__backgroundColor"));p.innerHTML=`
6
6
  <div
7
7
  class="r2-highlight-0"
8
- style="${[`background-color: ${((v=(m=e.decoration)==null?void 0:m.style)==null?void 0:v.tint)??"yellow"} !important`,`mix-blend-mode: ${d?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}"
8
+ style="${[`background-color: ${((v=(m=e.decoration)==null?void 0:m.style)==null?void 0:v.tint)??"yellow"} !important`,`mix-blend-mode: ${u?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}"
9
9
  >
10
10
  </div>
11
- `.trim();const f=p.content.firstElementChild;if(((I=(T=e.decoration)==null?void 0:T.style)==null?void 0:I.layout)==="bounds"){const y=f.cloneNode(!0);y.style.setProperty("pointer-events","none"),h(y,u,u),t.append(y)}else{let y=Pt(e.range,!0);y=y.sort((S,L)=>S.top<L.top?-1:S.top>L.top?1:0);for(let S of y){const L=f.cloneNode(!0);L.style.setProperty("pointer-events","none"),h(L,S,u),t.append(L)}}e.container=t,e.clickableElements=Array.from(t.querySelectorAll("[data-activable='1']")),e.clickableElements.length||(e.clickableElements=Array.from(t.children))}renderLayout(e){this.wnd.cancelAnimationFrame(this.currentRender),this.currentRender=this.wnd.requestAnimationFrame(()=>{if(e=e.filter(i=>{var s;return!this.experimentalHighlights||!!((s=this.notTextFlag)!=null&&s.has(i.id))}),!e||e.length===0)return;this.requireContainer().append(...e.map(i=>i.container).filter(i=>!!i))})}requireContainer(e=!1){if(e){let t;this.wnd.document.getElementById(`${this.id}-style`)?t=this.wnd.document.getElementById(`${this.id}-style`):(t=this.wnd.document.createElement("style"),t.dataset.readium="true",t.id=`${this.id}-style`,this.wnd.document.head.appendChild(t));let i;return this.wnd.CSS.highlights.has(this.id)?i=this.wnd.CSS.highlights.get(this.id):(i=new this.wnd.Highlight,this.wnd.CSS.highlights.set(this.id,i)),[t,i]}return this.container||(this.container=this.wnd.document.createElement("div"),this.container.setAttribute("id",this.id),this.container.dataset.group=this.name,this.container.dataset.readium="true",this.container.style.setProperty("pointer-events","none"),this.container.style.display="contents",this.wnd.document.body.append(this.container)),this.container}clearContainer(){this.experimentalHighlights&&this.wnd.CSS.highlights.delete(this.id),this.container&&(this.container.remove(),this.container=void 0)}}const Ue=class ue extends V{constructor(){super(...arguments),this.resizeFrame=0,this.lastGroupId=0,this.groups=new Map,this.handleResizer=this.handleResize.bind(this)}cleanup(){this.groups.forEach(e=>e.clear()),this.groups.clear()}handleResize(){this.wnd.clearTimeout(this.resizeFrame),this.resizeFrame=this.wnd.setTimeout(()=>{this.groups.forEach(e=>{e.experimentalHighlights||e.requestLayout()})},50)}mount(e,t){return this.wnd=e,t.register("decorate",ue.moduleName,(i,s)=>{const n=i;n.decoration&&n.decoration.locator&&(n.decoration.locator=R.deserialize(n.decoration.locator)),this.groups.has(n.group)||this.groups.set(n.group,new Wt(e,t,`readium-decoration-${this.lastGroupId++}`,n.group));const o=this.groups.get(n.group);switch(n.action){case"add":o==null||o.add(n.decoration);break;case"remove":o==null||o.remove(n.decoration.id);break;case"clear":o==null||o.clear();break;case"update":o==null||o.update(n.decoration);break}s(!0)}),this.resizeObserver=new ResizeObserver(()=>e.requestAnimationFrame(()=>this.handleResize())),this.resizeObserver.observe(e.document.body),e.addEventListener("orientationchange",this.handleResizer),e.addEventListener("resize",this.handleResizer),t.log("Decorator Mounted"),!0}unmount(e,t){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),t.unregisterAll(ue.moduleName),this.resizeObserver.disconnect(),this.cleanup(),t.log("Decorator Unmounted"),!0}};Ue.moduleName="decorator";let ke=Ue;const $e="readium-snapper-style",je=class de extends V{constructor(){super(...arguments),this.protected=!1}buildStyles(){return`
11
+ `.trim();const f=p.content.firstElementChild;if(((L=(T=e.decoration)==null?void 0:T.style)==null?void 0:L.layout)==="bounds"){const y=f.cloneNode(!0);y.style.setProperty("pointer-events","none"),h(y,d,d),t.append(y)}else{let y=Pt(e.range,!0);y=y.sort((S,I)=>S.top<I.top?-1:S.top>I.top?1:0);for(let S of y){const I=f.cloneNode(!0);I.style.setProperty("pointer-events","none"),h(I,S,d),t.append(I)}}e.container=t,e.clickableElements=Array.from(t.querySelectorAll("[data-activable='1']")),e.clickableElements.length||(e.clickableElements=Array.from(t.children))}renderLayout(e){this.wnd.cancelAnimationFrame(this.currentRender),this.currentRender=this.wnd.requestAnimationFrame(()=>{if(e=e.filter(i=>{var s;return!this.experimentalHighlights||!!((s=this.notTextFlag)!=null&&s.has(i.id))}),!e||e.length===0)return;this.requireContainer().append(...e.map(i=>i.container).filter(i=>!!i))})}requireContainer(e=!1){if(e){let t;this.wnd.document.getElementById(`${this.id}-style`)?t=this.wnd.document.getElementById(`${this.id}-style`):(t=this.wnd.document.createElement("style"),t.dataset.readium="true",t.id=`${this.id}-style`,this.wnd.document.head.appendChild(t));let i;return this.wnd.CSS.highlights.has(this.id)?i=this.wnd.CSS.highlights.get(this.id):(i=new this.wnd.Highlight,this.wnd.CSS.highlights.set(this.id,i)),[t,i]}return this.container||(this.container=this.wnd.document.createElement("div"),this.container.setAttribute("id",this.id),this.container.dataset.group=this.name,this.container.dataset.readium="true",this.container.style.setProperty("pointer-events","none"),this.container.style.display="contents",this.wnd.document.body.append(this.container)),this.container}clearContainer(){this.experimentalHighlights&&this.wnd.CSS.highlights.delete(this.id),this.container&&(this.container.remove(),this.container=void 0)}}const Ue=class de extends V{constructor(){super(...arguments),this.resizeFrame=0,this.lastGroupId=0,this.groups=new Map,this.handleResizer=this.handleResize.bind(this)}cleanup(){this.groups.forEach(e=>e.clear()),this.groups.clear()}handleResize(){this.wnd.clearTimeout(this.resizeFrame),this.resizeFrame=this.wnd.setTimeout(()=>{this.groups.forEach(e=>{e.experimentalHighlights||e.requestLayout()})},50)}mount(e,t){return this.wnd=e,t.register("decorate",de.moduleName,(i,s)=>{const n=i;n.decoration&&n.decoration.locator&&(n.decoration.locator=R.deserialize(n.decoration.locator)),this.groups.has(n.group)||this.groups.set(n.group,new Wt(e,t,`readium-decoration-${this.lastGroupId++}`,n.group));const o=this.groups.get(n.group);switch(n.action){case"add":o==null||o.add(n.decoration);break;case"remove":o==null||o.remove(n.decoration.id);break;case"clear":o==null||o.clear();break;case"update":o==null||o.update(n.decoration);break}s(!0)}),this.resizeObserver=new ResizeObserver(()=>e.requestAnimationFrame(()=>this.handleResize())),this.resizeObserver.observe(e.document.body),e.addEventListener("orientationchange",this.handleResizer),e.addEventListener("resize",this.handleResizer),t.log("Decorator Mounted"),!0}unmount(e,t){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),t.unregisterAll(de.moduleName),this.resizeObserver.disconnect(),this.cleanup(),t.log("Decorator Unmounted"),!0}};Ue.moduleName="decorator";let ke=Ue;const $e="readium-snapper-style",je=class ue extends V{constructor(){super(...arguments),this.protected=!1}buildStyles(){return`
12
12
  html, body {
13
13
  touch-action: manipulation;
14
14
  user-select: ${this.protected?"none":"auto"};
15
- }`}mount(e,t){const i=e.document.createElement("style");return i.dataset.readium="true",i.id=$e,i.textContent=this.buildStyles(),e.document.head.appendChild(i),t.register("protect",de.moduleName,(s,n)=>{this.protected=!0,i.textContent=this.buildStyles(),n(!0)}),t.register("unprotect",de.moduleName,(s,n)=>{this.protected=!1,i.textContent=this.buildStyles(),n(!0)}),t.log("Snapper Mounted"),!0}unmount(e,t){var i;return(i=e.document.getElementById($e))==null||i.remove(),t.log("Snapper Unmounted"),!0}};je.moduleName="snapper";let He=je;function F(r){return r.document.body.dir.toLowerCase()==="rtl"}function Ve(r){return parseInt(r.getComputedStyle(r.document.documentElement).getPropertyValue("column-count"))}function qe(r){const e=getComputedStyle(r),t=parseFloat(e.paddingTop||"0"),i=parseFloat(e.paddingBottom||"0");return r.clientHeight-t-i}function _e(r){const e=Ve(r);if(!e)return!1;const t=r.document.querySelectorAll("div[id^='readium-virtual-page']");for(const h of t)h.remove();const i=t.length,s=r.document.scrollingElement.scrollWidth,n=r.visualViewport.width,l=Math.round(s/n*e)%e,c=e===1||l===0?0:e-l;if(c>0)for(let h=0;h<c;h++){const u=r.document.createElement("div");u.setAttribute("id",`readium-virtual-page-${h}`),u.dataset.readium="true",CSS.supports("break-before","column")?u.style.breakBefore="column":(CSS.supports("break-inside","avoid-column")&&(u.style.breakInside="avoid-column"),u.style.height=qe(r.document.documentElement)+"px"),u.innerHTML="&#8203;",r.document.body.appendChild(u)}return i!==c}function Ft(r){const e=r.document.createElement("style");e.appendChild(r.document.createTextNode("*{}")),r.document.body.appendChild(e),r.document.body.removeChild(e)}function Bt(r){return r<.5?2*r*r:-1+(4-2*r)*r}function w(r){const e=r.getSelection();e&&e.removeAllRanges()}const Ut=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"];function Xe(r){var e;return Ut.indexOf(r.nodeName.toLowerCase())!==-1||r.hasAttribute("contenteditable")&&((e=r.getAttribute("contenteditable"))==null?void 0:e.toLowerCase())!=="false"?r:r.parentElement?Xe(r.parentElement):null}function Ge(r,e){const t=Ye(r,r.document.body,e),i=r._readium_cssSelectorGenerator.getCssSelector(t,{selectors:["tag","id","class","nthchild","nthoftype","attribute"]});return new R({href:"#",type:"application/xhtml+xml",locations:new x({otherLocations:new Map([["cssSelector",i]])}),text:new k({highlight:t.textContent||void 0})})}function Ye(r,e,t){for(var i=0;i<e.children.length;i++){const s=e.children[i];if(!jt(s)&&kt(r,s,t))return $t(r,s)?s:Ye(r,s,t)}return e}function kt(r,e,t){if(e===document.body||e===document.documentElement)return!0;if(!document||!document.documentElement||!document.body)return!1;const i=e.getBoundingClientRect();return t?i.bottom>0&&i.top<r.innerHeight:i.right>0&&i.left<r.innerWidth}function $t(r,e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=r.innerHeight&&t.right<=r.innerWidth}function jt(r){const e=getComputedStyle(r);if(e){const t=e.getPropertyValue("display");if(t!="block"&&t!="list-item"||e.getPropertyValue("opacity")==="0")return!0}return!1}const Ke="readium-column-snapper-style",Ht=200,Ze=class P extends He{constructor(){super(...arguments),this.shakeTimeout=0,this.snappingCancelled=!1,this.alreadyScrollLeft=0,this.overscroll=0,this.cachedScrollWidth=0,this.touchState=0,this.startingX=void 0,this.endingX=void 0,this.onTouchStarter=this.onTouchStart.bind(this),this.onTouchEnder=this.onTouchEnd.bind(this),this.onWidthChanger=this.onWidthChange.bind(this),this.onTouchMover=this.onTouchMove.bind(this)}doc(){return this.wnd.document.scrollingElement}scrollOffset(){return this.doc().scrollLeft>0?this.doc().scrollLeft:this.alreadyScrollLeft}snapOffset(e){const t=e+(F(this.wnd)?-1:1);return t-t%this.wnd.innerWidth}reportProgress(){const e=this.wnd.scrollX,t=this.cachedScrollWidth,i=Math.max(0,Math.min(1,e/t)),s=Math.max(0,Math.min(1,(e+this.wnd.innerWidth)/t));this.comms.send("progress",{start:i,end:s})}shake(){if(this.overscroll!==0||this.shakeTimeout!==0)return;const e=this.doc();e.classList.add(F(this.wnd)?"readium-bounce-l":"readium-bounce-r");const t=this.scrollOffset();this.shakeTimeout=this.wnd.setTimeout(()=>{e.classList.remove("readium-bounce-l"),e.classList.remove("readium-bounce-r"),this.shakeTimeout=0,this.doc().scrollLeft=t},150)}takeOverSnap(){var t;this.snappingCancelled=!0,this.clearTouches();const e=this.doc();this.overscroll=((t=e.style.transform)==null?void 0:t.length)>12?parseFloat(e.style.transform.slice(12).split("px")[0]):0}snapCurrentOffset(e=!1,t=!1){const i=this.wnd.scrollX>0?this.wnd.scrollX:this.alreadyScrollLeft,s=this.doc(),n=this.dragOffset(),o=Ve(this.wnd),l=Math.min(Math.max(0,i),this.cachedScrollWidth),c=F(this.wnd)?-1:1,h=c*(this.wnd.innerWidth/3)*(c*n>0?2:1),u=this.snapOffset(l+h);if(e&&u!==this.scrollOffset()){this.snappingCancelled=!1;const p=(m,v,T,I)=>T>I?v:m+(v-m)*Bt(T/I),d=Ht*o;let f;const g=m=>{if(this.snappingCancelled)return;f||(f=m);const v=m-f,T=p(this.overscroll,0,v,d),I=p(i,u,v,d);s.scrollLeft=I,this.overscroll!==0&&(s.style.transform=`translate3d(${-T}px, 0px, 0px)`),v<d?this.wnd.requestAnimationFrame(g):(this.clearTouches(),s.style.removeProperty("transform"),s.scrollLeft=u,t||this.reportProgress())};this.wnd.requestAnimationFrame(g)}else s.style.removeProperty("transform"),this.wnd.requestAnimationFrame(()=>{s.scrollLeft=u,this.clearTouches(),t||this.reportProgress()})}dragOffset(){return(this.startingX??0)-(this.endingX??0)}clearTouches(){this.startingX=void 0,this.endingX=void 0,this.overscroll=0}onTouchStart(e){switch(e.stopPropagation(),this.takeOverSnap(),e.touches.length){case 1:break;case 2:this.onTouchEnd(e);return;default:{this.onTouchEnd(e),this.comms.send("tap_more",e.touches.length);return}}this.startingX=e.touches[0].clientX,this.alreadyScrollLeft=this.doc().scrollLeft,this.touchState=1}onTouchEnd(e){if(this.touchState===2){const t=this.dragOffset(),i=this.scrollOffset();this.cachedScrollWidth<=this.wnd.innerWidth?(this.reportProgress(),t>5&&this.comms.send("no_more",void 0),t<-5&&this.comms.send("no_less",void 0)):i<5&&t<5?(this.alreadyScrollLeft=0,this.comms.send("no_less",void 0)):this.cachedScrollWidth-i-this.wnd.innerWidth<5&&t>5&&(this.alreadyScrollLeft=this.cachedScrollWidth,this.comms.send("no_more",void 0)),this.snapCurrentOffset(!0),this.comms.send("swipe",t)}this.touchState=0}onWidthChange(){this.cachedScrollWidth=this.doc().scrollWidth,this.comms.ready&&this.snapCurrentOffset()}onTouchMove(e){if(this.touchState===0)return;this.touchState===1&&(this.touchState=2,w(this.wnd)),this.endingX=e.touches[0].clientX;const t=this.dragOffset(),i=this.alreadyScrollLeft+t;i<0?(this.overscroll=i,this.doc().style.transform=`translate3d(${-this.overscroll}px, 0px, 0px)`):i+this.wnd.innerWidth>this.cachedScrollWidth?(this.overscroll=i,this.doc().style.transform=`translate3d(${-i}px, 0px, 0px)`):(this.overscroll=0,this.doc().style.removeProperty("transform"),this.doc().scrollLeft=this.alreadyScrollLeft+t)}mount(e,t){if(this.wnd=e,this.comms=t,!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");i.dataset.readium="true",i.id=Ke,i.textContent=`
15
+ }`}mount(e,t){const i=e.document.createElement("style");return i.dataset.readium="true",i.id=$e,i.textContent=this.buildStyles(),e.document.head.appendChild(i),t.register("protect",ue.moduleName,(s,n)=>{this.protected=!0,i.textContent=this.buildStyles(),n(!0)}),t.register("unprotect",ue.moduleName,(s,n)=>{this.protected=!1,i.textContent=this.buildStyles(),n(!0)}),t.log("Snapper Mounted"),!0}unmount(e,t){var i;return(i=e.document.getElementById($e))==null||i.remove(),t.log("Snapper Unmounted"),!0}};je.moduleName="snapper";let He=je;function F(r){return r.document.body.dir.toLowerCase()==="rtl"}function Ve(r){return parseInt(r.getComputedStyle(r.document.documentElement).getPropertyValue("column-count"))}function _e(r){const e=getComputedStyle(r),t=parseFloat(e.paddingTop||"0"),i=parseFloat(e.paddingBottom||"0");return r.clientHeight-t-i}function qe(r){const e=Ve(r);if(!e)return!1;const t=r.document.querySelectorAll("div[id^='readium-virtual-page']");for(const h of t)h.remove();const i=t.length,s=r.document.scrollingElement.scrollWidth,n=r.visualViewport.width,l=Math.round(s/n*e)%e,c=e===1||l===0?0:e-l;if(c>0)for(let h=0;h<c;h++){const d=r.document.createElement("div");d.setAttribute("id",`readium-virtual-page-${h}`),d.dataset.readium="true",CSS.supports("break-before","column")?d.style.breakBefore="column":(CSS.supports("break-inside","avoid-column")&&(d.style.breakInside="avoid-column"),d.style.height=_e(r.document.documentElement)+"px"),d.innerHTML="&#8203;",r.document.body.appendChild(d)}return i!==c}function Ft(r){const e=r.document.createElement("style");e.appendChild(r.document.createTextNode("*{}")),r.document.body.appendChild(e),r.document.body.removeChild(e)}function Bt(r){return r<.5?2*r*r:-1+(4-2*r)*r}function w(r){const e=r.getSelection();e&&e.removeAllRanges()}const Ut=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"];function Xe(r){var e;return Ut.indexOf(r.nodeName.toLowerCase())!==-1||r.hasAttribute("contenteditable")&&((e=r.getAttribute("contenteditable"))==null?void 0:e.toLowerCase())!=="false"?r:r.parentElement?Xe(r.parentElement):null}function Ge(r,e){const t=Ye(r,r.document.body,e),i=r._readium_cssSelectorGenerator.getCssSelector(t,{selectors:["tag","id","class","nthchild","nthoftype","attribute"]});return new R({href:"#",type:"application/xhtml+xml",locations:new x({otherLocations:new Map([["cssSelector",i]])}),text:new k({highlight:t.textContent||void 0})})}function Ye(r,e,t){for(var i=0;i<e.children.length;i++){const s=e.children[i];if(!jt(s)&&kt(r,s,t))return $t(r,s)?s:Ye(r,s,t)}return e}function kt(r,e,t){if(e===document.body||e===document.documentElement)return!0;if(!document||!document.documentElement||!document.body)return!1;const i=e.getBoundingClientRect();return t?i.bottom>0&&i.top<r.innerHeight:i.right>0&&i.left<r.innerWidth}function $t(r,e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=r.innerHeight&&t.right<=r.innerWidth}function jt(r){const e=getComputedStyle(r);if(e){const t=e.getPropertyValue("display");if(t!="block"&&t!="list-item"||e.getPropertyValue("opacity")==="0")return!0}return!1}const Ke="readium-column-snapper-style",Ht=200,Ze=class P extends He{constructor(){super(...arguments),this.shakeTimeout=0,this.snappingCancelled=!1,this.alreadyScrollLeft=0,this.overscroll=0,this.cachedScrollWidth=0,this.touchState=0,this.startingX=void 0,this.endingX=void 0,this.onTouchStarter=this.onTouchStart.bind(this),this.onTouchEnder=this.onTouchEnd.bind(this),this.onWidthChanger=this.onWidthChange.bind(this),this.onTouchMover=this.onTouchMove.bind(this)}doc(){return this.wnd.document.scrollingElement}scrollOffset(){return this.doc().scrollLeft>0?this.doc().scrollLeft:this.alreadyScrollLeft}snapOffset(e){const t=e+(F(this.wnd)?-1:1);return t-t%this.wnd.innerWidth}reportProgress(){const e=this.wnd.scrollX,t=this.cachedScrollWidth,i=Math.max(0,Math.min(1,e/t)),s=Math.max(0,Math.min(1,(e+this.wnd.innerWidth)/t));this.comms.send("progress",{start:i,end:s})}shake(){if(this.overscroll!==0||this.shakeTimeout!==0)return;const e=this.doc();e.classList.add(F(this.wnd)?"readium-bounce-l":"readium-bounce-r");const t=this.scrollOffset();this.shakeTimeout=this.wnd.setTimeout(()=>{e.classList.remove("readium-bounce-l"),e.classList.remove("readium-bounce-r"),this.shakeTimeout=0,this.doc().scrollLeft=t},150)}takeOverSnap(){var t;this.snappingCancelled=!0,this.clearTouches();const e=this.doc();this.overscroll=((t=e.style.transform)==null?void 0:t.length)>12?parseFloat(e.style.transform.slice(12).split("px")[0]):0}snapCurrentOffset(e=!1,t=!1){const i=this.wnd.scrollX>0?this.wnd.scrollX:this.alreadyScrollLeft,s=this.doc(),n=this.dragOffset(),o=Ve(this.wnd),l=Math.min(Math.max(0,i),this.cachedScrollWidth),c=F(this.wnd)?-1:1,h=c*(this.wnd.innerWidth/3)*(c*n>0?2:1),d=this.snapOffset(l+h);if(e&&d!==this.scrollOffset()){this.snappingCancelled=!1;const p=(m,v,T,L)=>T>L?v:m+(v-m)*Bt(T/L),u=Ht*o;let f;const g=m=>{if(this.snappingCancelled)return;f||(f=m);const v=m-f,T=p(this.overscroll,0,v,u),L=p(i,d,v,u);s.scrollLeft=L,this.overscroll!==0&&(s.style.transform=`translate3d(${-T}px, 0px, 0px)`),v<u?this.wnd.requestAnimationFrame(g):(this.clearTouches(),s.style.removeProperty("transform"),s.scrollLeft=d,t||this.reportProgress())};this.wnd.requestAnimationFrame(g)}else s.style.removeProperty("transform"),this.wnd.requestAnimationFrame(()=>{s.scrollLeft=d,this.clearTouches(),t||this.reportProgress()})}dragOffset(){return(this.startingX??0)-(this.endingX??0)}clearTouches(){this.startingX=void 0,this.endingX=void 0,this.overscroll=0}onTouchStart(e){switch(e.stopPropagation(),this.takeOverSnap(),e.touches.length){case 1:break;case 2:this.onTouchEnd(e);return;default:{this.onTouchEnd(e),this.comms.send("tap_more",e.touches.length);return}}this.startingX=e.touches[0].clientX,this.alreadyScrollLeft=this.doc().scrollLeft,this.touchState=1}onTouchEnd(e){if(this.touchState===2){const t=this.dragOffset(),i=this.scrollOffset();this.cachedScrollWidth<=this.wnd.innerWidth?(this.reportProgress(),t>5&&this.comms.send("no_more",void 0),t<-5&&this.comms.send("no_less",void 0)):i<5&&t<5?(this.alreadyScrollLeft=0,this.comms.send("no_less",void 0)):this.cachedScrollWidth-i-this.wnd.innerWidth<5&&t>5&&(this.alreadyScrollLeft=this.cachedScrollWidth,this.comms.send("no_more",void 0)),this.snapCurrentOffset(!0),this.comms.send("swipe",t)}this.touchState=0}onWidthChange(){this.cachedScrollWidth=this.doc().scrollWidth,this.comms.ready&&this.snapCurrentOffset()}onTouchMove(e){if(this.touchState===0)return;this.touchState===1&&(this.touchState=2,w(this.wnd)),this.endingX=e.touches[0].clientX;const t=this.dragOffset(),i=this.alreadyScrollLeft+t;i<0?(this.overscroll=i,this.doc().style.transform=`translate3d(${-this.overscroll}px, 0px, 0px)`):i+this.wnd.innerWidth>this.cachedScrollWidth?(this.overscroll=i,this.doc().style.transform=`translate3d(${-i}px, 0px, 0px)`):(this.overscroll=0,this.doc().style.removeProperty("transform"),this.doc().scrollLeft=this.alreadyScrollLeft+t)}mount(e,t){if(this.wnd=e,this.comms=t,!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");i.dataset.readium="true",i.id=Ke,i.textContent=`
16
16
  @keyframes readium-bounce-l-animation {
17
17
  0%, 100% {transform: translate3d(0, 0, 0);}
18
18
  50% {transform: translate3d(-50px, 0, 0);}
@@ -46,7 +46,7 @@
46
46
  body::-webkit-scrollbar {
47
47
  display: none; /* for Chrome, Safari, and Opera */
48
48
  }
49
- `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{e.requestAnimationFrame(()=>{e&&_e(e)}),this.onWidthChange()}),this.resizeObserver.observe(e.document.body),this.mutationObserver=new MutationObserver(n=>{for(const o of n)if(o.target===this.wnd.document.documentElement){const l=o.oldValue,c=o.target.getAttribute("style"),h=/transform\s*:\s*([^;]+)/,u=l==null?void 0:l.match(h),p=c==null?void 0:c.match(h);(!u&&!p||u&&!p||u&&p&&u[1]!==p[1])&&(e.requestAnimationFrame(()=>{e&&_e(e)}),this.onWidthChange())}else e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth)}),e.frameElement&&this.mutationObserver.observe(e.frameElement,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"]});const s=n=>{const o=this.doc().scrollLeft;return this.doc().scrollLeft=this.snapOffset(n),o!==this.doc().scrollLeft};return e.addEventListener("orientationchange",this.onWidthChanger),e.addEventListener("resize",this.onWidthChanger),e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth),t.register("go_progression",P.moduleName,(n,o)=>{const l=n;if(l<0||l>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),o(!1);return}this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth,h=F(e)?-1:1,u=c*l*h;this.doc().scrollLeft=this.snapOffset(u),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_id",P.moduleName,(n,o)=>{const l=e.document.getElementById(n);if(!l){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(l.getBoundingClientRect().left+e.scrollX),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_text",P.moduleName,(n,o)=>{let l;Array.isArray(n)&&(n.length>1&&(l=n[1]),n=n[0]);const c=k.deserialize(n),h=oe(this.wnd.document,new R({href:e.location.href,type:"text/html",text:c,locations:l?new x({otherLocations:new Map([["cssSelector",l]])}):void 0}));if(!h){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(h.getBoundingClientRect().left+e.scrollX),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_end",P.moduleName,(n,o)=>{const l=F(e)?-1:1;this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth*l;if(this.doc().scrollLeft===c)return o(!1);this.doc().scrollLeft=this.snapOffset(c),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_start",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{if(this.doc().scrollLeft===0)return o(!1);this.doc().scrollLeft=0,this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_prev",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const l=e.scrollX-e.innerWidth,c=F(e)?-(this.cachedScrollWidth-e.innerWidth):0,h=s(Math.max(l,c));h&&(this.reportProgress(),w(this.wnd)),o(h)})}),t.register("go_next",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const l=e.scrollX+e.innerWidth,c=F(e)?0:this.cachedScrollWidth-e.innerWidth,h=s(Math.min(l,c));h&&(this.reportProgress(),w(this.wnd)),o(h)})}),t.register("unfocus",P.moduleName,(n,o)=>{this.snappingCancelled=!0,w(this.wnd),o(!0)}),t.register("shake",P.moduleName,(n,o)=>{this.shake(),o(!0)}),t.register("focus",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth,this.snapCurrentOffset(!1,!0),this.reportProgress(),o(!0)})}),t.register("first_visible_locator",P.moduleName,(n,o)=>{const l=Ge(e,!1);this.comms.send("first_visible_locator",l.serialize()),o(!0)}),e.addEventListener("touchstart",this.onTouchStarter,{passive:!0}),e.addEventListener("touchend",this.onTouchEnder,{passive:!0}),e.addEventListener("touchmove",this.onTouchMover,{passive:!0}),e.document.addEventListener("touchstart",()=>{}),t.log("ColumnSnapper Mounted"),!0}unmount(e,t){var i;return this.snappingCancelled=!0,t.unregisterAll(P.moduleName),this.resizeObserver.disconnect(),this.mutationObserver.disconnect(),e.removeEventListener("touchstart",this.onTouchStarter),e.removeEventListener("touchend",this.onTouchEnder),e.removeEventListener("touchmove",this.onTouchMover),e.removeEventListener("orientationchange",this.onWidthChanger),e.removeEventListener("resize",this.onWidthChanger),(i=e.document.getElementById(Ke))==null||i.remove(),t.log("ColumnSnapper Unmounted"),super.unmount(e,t)}};Ze.moduleName="column_snapper";let Vt=Ze;const Je="readium-scroll-snapper-style",Qe=class O extends He{constructor(){super(...arguments),this.isScrolling=!1,this.handleScroll=()=>{this.isScrolling||(this.isScrolling=!0,this.wnd.requestAnimationFrame(()=>{this.reportProgress(),this.isScrolling=!1}))}}doc(){return this.wnd.document.scrollingElement}reportProgress(){const e=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){this.wnd=e,this.comms=t,e.navigator.epubReadingSystem.layoutStyle="scrolling";const i=e.document.createElement("style");return i.dataset.readium="true",i.id=Je,i.textContent=`
49
+ `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{e.requestAnimationFrame(()=>{e&&qe(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 l=o.oldValue,c=o.target.getAttribute("style"),h=/transform\s*:\s*([^;]+)/,d=l==null?void 0:l.match(h),p=c==null?void 0:c.match(h);(!d&&!p||d&&!p||d&&p&&d[1]!==p[1])&&(e.requestAnimationFrame(()=>{e&&qe(e)}),this.onWidthChange())}else e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth)}),e.frameElement&&this.mutationObserver.observe(e.frameElement,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document,{attributes:!0,attributeFilter:["style"]}),this.mutationObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"]});const s=n=>{const o=this.doc().scrollLeft;return this.doc().scrollLeft=this.snapOffset(n),o!==this.doc().scrollLeft};return e.addEventListener("orientationchange",this.onWidthChanger),e.addEventListener("resize",this.onWidthChanger),e.requestAnimationFrame(()=>this.cachedScrollWidth=this.doc().scrollWidth),t.register("go_progression",P.moduleName,(n,o)=>{const l=n;if(l<0||l>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),o(!1);return}this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth,h=F(e)?-1:1,d=c*l*h;this.doc().scrollLeft=this.snapOffset(d),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_id",P.moduleName,(n,o)=>{const l=e.document.getElementById(n);if(!l){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(l.getBoundingClientRect().left+e.scrollX),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_text",P.moduleName,(n,o)=>{let l;Array.isArray(n)&&(n.length>1&&(l=n[1]),n=n[0]);const c=k.deserialize(n),h=oe(this.wnd.document,new R({href:e.location.href,type:"text/html",text:c,locations:l?new x({otherLocations:new Map([["cssSelector",l]])}):void 0}));if(!h){o(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollLeft=this.snapOffset(h.getBoundingClientRect().left+e.scrollX),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_end",P.moduleName,(n,o)=>{const l=F(e)?-1:1;this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const c=this.cachedScrollWidth*l;if(this.doc().scrollLeft===c)return o(!1);this.doc().scrollLeft=this.snapOffset(c),this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_start",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{if(this.doc().scrollLeft===0)return o(!1);this.doc().scrollLeft=0,this.reportProgress(),w(this.wnd),o(!0)})}),t.register("go_prev",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const l=e.scrollX-e.innerWidth,c=F(e)?-(this.cachedScrollWidth-e.innerWidth):0,h=s(Math.max(l,c));h&&(this.reportProgress(),w(this.wnd)),o(h)})}),t.register("go_next",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth;const l=e.scrollX+e.innerWidth,c=F(e)?0:this.cachedScrollWidth-e.innerWidth,h=s(Math.min(l,c));h&&(this.reportProgress(),w(this.wnd)),o(h)})}),t.register("unfocus",P.moduleName,(n,o)=>{this.snappingCancelled=!0,w(this.wnd),o(!0)}),t.register("shake",P.moduleName,(n,o)=>{this.shake(),o(!0)}),t.register("focus",P.moduleName,(n,o)=>{this.wnd.requestAnimationFrame(()=>{this.cachedScrollWidth=this.doc().scrollWidth,this.snapCurrentOffset(!1,!0),this.reportProgress(),o(!0)})}),t.register("first_visible_locator",P.moduleName,(n,o)=>{const l=Ge(e,!1);this.comms.send("first_visible_locator",l.serialize()),o(!0)}),e.addEventListener("touchstart",this.onTouchStarter,{passive:!0}),e.addEventListener("touchend",this.onTouchEnder,{passive:!0}),e.addEventListener("touchmove",this.onTouchMover,{passive:!0}),e.document.addEventListener("touchstart",()=>{}),t.log("ColumnSnapper Mounted"),!0}unmount(e,t){var i;return this.snappingCancelled=!0,t.unregisterAll(P.moduleName),this.resizeObserver.disconnect(),this.mutationObserver.disconnect(),e.removeEventListener("touchstart",this.onTouchStarter),e.removeEventListener("touchend",this.onTouchEnder),e.removeEventListener("touchmove",this.onTouchMover),e.removeEventListener("orientationchange",this.onWidthChanger),e.removeEventListener("resize",this.onWidthChanger),(i=e.document.getElementById(Ke))==null||i.remove(),t.log("ColumnSnapper Unmounted"),super.unmount(e,t)}};Ze.moduleName="column_snapper";let Vt=Ze;const Je="readium-scroll-snapper-style",Qe=class O extends He{constructor(){super(...arguments),this.scrollEndTimer=null,this.SCROLL_END_DELAY=100,this.handleScroll=()=>{this.scrollEndTimer!==null&&this.wnd.clearTimeout(this.scrollEndTimer),this.scrollEndTimer=this.wnd.setTimeout(()=>{this.onScrollEnd()},this.SCROLL_END_DELAY)},this.onScrollEnd=()=>{this.scrollEndTimer=null,this.reportProgress()}}doc(){return this.wnd.document.scrollingElement}reportProgress(){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){this.wnd=e,this.comms=t,e.navigator.epubReadingSystem.layoutStyle="scrolling";const i=e.document.createElement("style");return i.dataset.readium="true",i.id=Je,i.textContent=`
50
50
  * {
51
51
  scrollbar-width: none; /* for Firefox */
52
52
  }
@@ -54,7 +54,7 @@
54
54
  body::-webkit-scrollbar {
55
55
  display: none; /* for Chrome, Safari, and Opera */
56
56
  }
57
- `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{this.comms.ready&&this.handleScroll()}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",O.moduleName,()=>{Ft(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",O.moduleName,(s,n)=>{const o=s;if(o<0||o>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=this.doc().offsetHeight*o,this.reportProgress(),w(this.wnd),n(!0)})}),t.register("go_id",O.moduleName,(s,n)=>{const o=e.document.getElementById(s);if(!o){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=o.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),w(this.wnd),n(!0)})}),t.register("go_text",O.moduleName,(s,n)=>{let o;Array.isArray(s)&&(s.length>1&&(o=s[1]),s=s[0]);const l=k.deserialize(s),c=oe(this.wnd.document,new R({href:e.location.href,type:"text/html",text:l,locations:o?new x({otherLocations:new Map([["cssSelector",o]])}):void 0}));if(!c){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=c.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),w(this.wnd),n(!0)})}),t.register("go_start",O.moduleName,(s,n)=>{if(this.doc().scrollTop===0)return n(!1);this.doc().scrollTop=0,this.reportProgress(),n(!0)}),t.register("go_end",O.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",O.moduleName,(s,n)=>{w(this.wnd),n(!0)}),t.register(["go_next","go_prev"],O.moduleName,(s,n)=>n(!1)),t.register("focus",O.moduleName,(s,n)=>{this.reportProgress(),n(!0)}),t.register("first_visible_locator",O.moduleName,(s,n)=>{const o=Ge(e,!0);this.comms.send("first_visible_locator",o.serialize()),n(!0)}),t.log("ScrollSnapper Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(O.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),(i=e.document.getElementById(Je))==null||i.remove(),t.log("ScrollSnapper Unmounted"),!0}};Qe.moduleName="scroll_snapper";let qt=Qe;class le extends V{constructor(){super(...arguments),this.pointerMoved=!1,this.onPointerUp=this.onPointUp.bind(this),this.onPointerMove=this.onPointMove.bind(this),this.onPointerDown=this.onPointDown.bind(this),this.onContextMenu=this.onContext.bind(this),this.onClicker=this.onClick.bind(this)}onPointUp(e){var s,n,o,l,c;const t=this.wnd.getSelection();if(t&&((s=t.toString())==null?void 0:s.length)>0){const h=(n=t.getRangeAt(0))==null?void 0:n.getClientRects();if(!h||h.length===0)return;const u=h[0],p={text:t.toString(),x:u.x,y:u.y,width:u.width,height:u.height,targetFrameSrc:(l=(o=this.wnd)==null?void 0:o.location)==null?void 0:l.href};this.comms.send("text_selected",p)}if(this.pointerMoved){this.pointerMoved=!1;return}if(!(t!=null&&t.isCollapsed)||!e.isPrimary)return;const i=this.wnd.devicePixelRatio;e.preventDefault(),this.comms.send(e.pointerType==="touch"?"tap":"click",{defaultPrevented:e.defaultPrevented,x:e.clientX*i,y:e.clientY*i,targetFrameSrc:this.wnd.location.href,targetElement:e.target.outerHTML,interactiveElement:(c=Xe(e.target))==null?void 0:c.outerHTML,cssSelector:this.wnd._readium_cssSelectorGenerator.getCssSelector(e.target)}),this.pointerMoved=!1}onPointMove(e){if(e.movementY!==void 0&&e.movementX!==void 0){(Math.abs(e.movementX)>1||Math.abs(e.movementY)>1)&&(this.pointerMoved=!0);return}this.pointerMoved=!0}onPointDown(){this.pointerMoved=!1}onContext(e){this.onPointUp(e),this.pointerMoved=!1}onClick(e){if(e.preventDefault(),!e.isTrusted){const t=new PointerEvent("pointerup",{isPrimary:!0,pointerType:"mouse",clientX:e.clientX,clientY:e.clientY});Object.defineProperty(t,"target",{writable:!1,value:e.target}),Object.defineProperty(t,"defaultPrevented",{writable:!1,value:e.defaultPrevented}),this.onPointUp(t)}}mount(e,t){return this.wnd=e,this.comms=t,e.document.addEventListener("pointerdown",this.onPointerDown),e.document.addEventListener("pointerup",this.onPointerUp),e.document.addEventListener("contextmenu",this.onContextMenu),e.document.addEventListener("pointermove",this.onPointerMove),e.document.addEventListener("click",this.onClicker),t.log("Peripherals Mounted"),!0}unmount(e,t){return e.document.removeEventListener("pointerdown",this.onPointerDown),e.document.removeEventListener("pointerup",this.onPointerUp),e.document.removeEventListener("contextmenu",this.onContextMenu),e.document.removeEventListener("pointermove",this.onPointerMove),e.document.removeEventListener("click",this.onClicker),t.log("Peripherals Unmounted"),!0}}le.moduleName="peripherals";const et=class pe extends V{constructor(){super(...arguments),this.mediaPlayingCount=0,this.allAnimations=new Set}wndOnErr(e){var t;(t=this.comms)==null||t.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}unblock(e){var t;for(e._readium_blockEvents=!1;((t=e._readium_blockedEvents)==null?void 0:t.length)>0;){const i=e._readium_blockedEvents.shift();switch(i[0]){case 0:Reflect.apply(i[1],i[2],i[3]);break;case 1:const s=i[1],n=i[2];e.removeEventListener(s.type,e._readium_eventBlocker,!0);const o=new Event(s.type,{bubbles:s.bubbles,cancelable:s.cancelable});n?n.dispatchEvent(o):e.dispatchEvent(o);break}}}onMediaPlayEvent(){var e;this.mediaPlayingCount++,(e=this.comms)==null||e.send("media_play",this.mediaPlayingCount)}onMediaPauseEvent(){var e;this.mediaPlayingCount>0&&this.mediaPlayingCount--,(e=this.comms)==null||e.send("media_pause",this.mediaPlayingCount)}pauseAllMedia(e){const t=e.document.querySelectorAll("audio,video");for(let i=0;i<t.length;i++)t[i].pause()}mount(e,t){this.comms=t,e.addEventListener("error",this.wndOnErr,!1),Reflect.defineProperty(e.navigator,"epubReadingSystem",{value:{name:"readium-ts-toolkit",version:"2.0.0-beta.5",hasFeature:(s,n="")=>{switch(s){case"dom-manipulation":return!0;case"layout-changes":return!0;case"touch-events":return!0;case"mouse-events":return!0;case"keyboard-events":return!0;case"spine-scripting":return!0;case"embedded-web-content":return!0;default:return!1}}},writable:!1}),"getAnimations"in e.document&&e.document.getAnimations().forEach(s=>{s.cancel(),this.allAnimations.add(s)}),t.register("activate",pe.moduleName,(s,n)=>{this.allAnimations.forEach(o=>{o.cancel(),o.play()}),n(!0)}),t.register("unfocus",pe.moduleName,(s,n)=>{this.pauseAllMedia(e),this.allAnimations.forEach(o=>o.pause()),n(!0)});const i=e.document.querySelectorAll("audio,video");for(let s=0;s<i.length;s++){const n=i[s];n.addEventListener("play",this.onMediaPlayEvent,{passive:!0}),n.addEventListener("pause",this.onMediaPauseEvent,{passive:!0})}return t.log("Setup Mounted"),!0}unmount(e,t){return e.removeEventListener("error",this.wndOnErr),e.removeEventListener("play",this.onMediaPlayEvent),e.removeEventListener("pause",this.onMediaPauseEvent),this.allAnimations.forEach(i=>i.cancel()),this.allAnimations.clear(),t.log("Setup Unmounted"),!0}};et.moduleName="setup";let tt=et;const it="readium-viewport",rt=class B extends tt{onViewportWidthChanged(e){const t=e.target;Z(t,"--RS__viewportWidth",`${t.innerWidth}px`)}mount(e,t){if(!super.mount(e,t))return!1;const i=e.document.createElement("meta");return i.dataset.readium="true",i.setAttribute("name","viewport"),i.setAttribute("id",it),i.setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no"),e.document.head.appendChild(i),e.addEventListener("orientationchange",this.onViewportWidthChanged),e.addEventListener("resize",this.onViewportWidthChanged),this.onViewportWidthChanged({target:e}),t.register("get_properties",B.moduleName,(s,n)=>{ze(e),n(!0)}),t.register("update_properties",B.moduleName,(s,n)=>{s["--RS__viewportWidth"]=`${e.innerWidth}px`,It(e,s),n(!0)}),t.register("set_property",B.moduleName,(s,n)=>{const o=s;Z(e,o[0],o[1]),n(!0)}),t.register("remove_property",B.moduleName,(s,n)=>{ae(e,s),n(!0)}),t.register("activate",B.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("ReflowableSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(B.moduleName),(i=e.document.head.querySelector(`#${it}`))==null||i.remove(),e.removeEventListener("orientationchange",this.onViewportWidthChanged),t.log("ReflowableSetup Unmounted"),super.unmount(e,t)}};rt.moduleName="reflowable_setup";let _t=rt;const st="readium-fixed-style",nt=class W extends tt{mount(e,t){if(!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");return i.id=st,i.dataset.readium="true",i.textContent=`
57
+ `,e.document.head.appendChild(i),this.resizeObserver=new ResizeObserver(()=>{this.comms.ready&&this.handleScroll()}),this.resizeObserver.observe(e.document.body),e.addEventListener("scroll",this.handleScroll,{passive:!0}),t.register("force_webkit_recalc",O.moduleName,()=>{Ft(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",O.moduleName,(s,n)=>{const o=s;if(o<0||o>1){t.send("error",{message:"go_progression must be given a position from 0.0 to 1.0"}),n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=this.doc().offsetHeight*o,this.reportProgress(),w(this.wnd),n(!0)})}),t.register("go_id",O.moduleName,(s,n)=>{const o=e.document.getElementById(s);if(!o){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=o.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),w(this.wnd),n(!0)})}),t.register("go_text",O.moduleName,(s,n)=>{let o;Array.isArray(s)&&(s.length>1&&(o=s[1]),s=s[0]);const l=k.deserialize(s),c=oe(this.wnd.document,new R({href:e.location.href,type:"text/html",text:l,locations:o?new x({otherLocations:new Map([["cssSelector",o]])}):void 0}));if(!c){n(!1);return}this.wnd.requestAnimationFrame(()=>{this.doc().scrollTop=c.getBoundingClientRect().top+e.scrollY-e.innerHeight/2,this.reportProgress(),w(this.wnd),n(!0)})}),t.register("go_start",O.moduleName,(s,n)=>{if(this.doc().scrollTop===0)return n(!1);this.doc().scrollTop=0,this.reportProgress(),n(!0)}),t.register("go_end",O.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",O.moduleName,(s,n)=>{w(this.wnd),n(!0)}),t.register(["go_next","go_prev"],O.moduleName,(s,n)=>n(!1)),t.register("focus",O.moduleName,(s,n)=>{this.reportProgress(),n(!0)}),t.register("first_visible_locator",O.moduleName,(s,n)=>{const o=Ge(e,!0);this.comms.send("first_visible_locator",o.serialize()),n(!0)}),t.log("ScrollSnapper Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(O.moduleName),this.resizeObserver.disconnect(),this.handleScroll&&e.removeEventListener("scroll",this.handleScroll),(i=e.document.getElementById(Je))==null||i.remove(),this.scrollEndTimer!==null&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=null),t.log("ScrollSnapper Unmounted"),!0}};Qe.moduleName="scroll_snapper";let _t=Qe;class le extends V{constructor(){super(...arguments),this.pointerMoved=!1,this.onPointerUp=this.onPointUp.bind(this),this.onPointerMove=this.onPointMove.bind(this),this.onPointerDown=this.onPointDown.bind(this),this.onContextMenu=this.onContext.bind(this),this.onClicker=this.onClick.bind(this)}onPointUp(e){var s,n,o,l,c;const t=this.wnd.getSelection();if(t&&((s=t.toString())==null?void 0:s.length)>0){const h=(n=t.getRangeAt(0))==null?void 0:n.getClientRects();if(!h||h.length===0)return;const d=h[0],p={text:t.toString(),x:d.x,y:d.y,width:d.width,height:d.height,targetFrameSrc:(l=(o=this.wnd)==null?void 0:o.location)==null?void 0:l.href};this.comms.send("text_selected",p)}if(this.pointerMoved){this.pointerMoved=!1;return}if(!(t!=null&&t.isCollapsed)||!e.isPrimary)return;const i=this.wnd.devicePixelRatio;e.preventDefault(),this.comms.send(e.pointerType==="touch"?"tap":"click",{defaultPrevented:e.defaultPrevented,x:e.clientX*i,y:e.clientY*i,targetFrameSrc:this.wnd.location.href,targetElement:e.target.outerHTML,interactiveElement:(c=Xe(e.target))==null?void 0:c.outerHTML,cssSelector:this.wnd._readium_cssSelectorGenerator.getCssSelector(e.target)}),this.pointerMoved=!1}onPointMove(e){if(e.movementY!==void 0&&e.movementX!==void 0){(Math.abs(e.movementX)>1||Math.abs(e.movementY)>1)&&(this.pointerMoved=!0);return}this.pointerMoved=!0}onPointDown(){this.pointerMoved=!1}onContext(e){this.onPointUp(e),this.pointerMoved=!1}onClick(e){if(e.preventDefault(),!e.isTrusted){const t=new PointerEvent("pointerup",{isPrimary:!0,pointerType:"mouse",clientX:e.clientX,clientY:e.clientY});Object.defineProperty(t,"target",{writable:!1,value:e.target}),Object.defineProperty(t,"defaultPrevented",{writable:!1,value:e.defaultPrevented}),this.onPointUp(t)}}mount(e,t){return this.wnd=e,this.comms=t,e.document.addEventListener("pointerdown",this.onPointerDown),e.document.addEventListener("pointerup",this.onPointerUp),e.document.addEventListener("contextmenu",this.onContextMenu),e.document.addEventListener("pointermove",this.onPointerMove),e.document.addEventListener("click",this.onClicker),t.log("Peripherals Mounted"),!0}unmount(e,t){return e.document.removeEventListener("pointerdown",this.onPointerDown),e.document.removeEventListener("pointerup",this.onPointerUp),e.document.removeEventListener("contextmenu",this.onContextMenu),e.document.removeEventListener("pointermove",this.onPointerMove),e.document.removeEventListener("click",this.onClicker),t.log("Peripherals Unmounted"),!0}}le.moduleName="peripherals";const et=class pe extends V{constructor(){super(...arguments),this.mediaPlayingCount=0,this.allAnimations=new Set}wndOnErr(e){var t;(t=this.comms)==null||t.send("error",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno})}unblock(e){var t;for(e._readium_blockEvents=!1;((t=e._readium_blockedEvents)==null?void 0:t.length)>0;){const i=e._readium_blockedEvents.shift();switch(i[0]){case 0:Reflect.apply(i[1],i[2],i[3]);break;case 1:const s=i[1],n=i[2];e.removeEventListener(s.type,e._readium_eventBlocker,!0);const o=new Event(s.type,{bubbles:s.bubbles,cancelable:s.cancelable});n?n.dispatchEvent(o):e.dispatchEvent(o);break}}}onMediaPlayEvent(){var e;this.mediaPlayingCount++,(e=this.comms)==null||e.send("media_play",this.mediaPlayingCount)}onMediaPauseEvent(){var e;this.mediaPlayingCount>0&&this.mediaPlayingCount--,(e=this.comms)==null||e.send("media_pause",this.mediaPlayingCount)}pauseAllMedia(e){const t=e.document.querySelectorAll("audio,video");for(let i=0;i<t.length;i++)t[i].pause()}mount(e,t){this.comms=t,e.addEventListener("error",this.wndOnErr,!1),Reflect.defineProperty(e.navigator,"epubReadingSystem",{value:{name:"readium-ts-toolkit",version:"2.0.0-beta.6",hasFeature:(s,n="")=>{switch(s){case"dom-manipulation":return!0;case"layout-changes":return!0;case"touch-events":return!0;case"mouse-events":return!0;case"keyboard-events":return!0;case"spine-scripting":return!0;case"embedded-web-content":return!0;default:return!1}}},writable:!1}),"getAnimations"in e.document&&e.document.getAnimations().forEach(s=>{s.cancel(),this.allAnimations.add(s)}),t.register("activate",pe.moduleName,(s,n)=>{this.allAnimations.forEach(o=>{o.cancel(),o.play()}),n(!0)}),t.register("unfocus",pe.moduleName,(s,n)=>{this.pauseAllMedia(e),this.allAnimations.forEach(o=>o.pause()),n(!0)});const i=e.document.querySelectorAll("audio,video");for(let s=0;s<i.length;s++){const n=i[s];n.addEventListener("play",this.onMediaPlayEvent,{passive:!0}),n.addEventListener("pause",this.onMediaPauseEvent,{passive:!0})}return t.log("Setup Mounted"),!0}unmount(e,t){return e.removeEventListener("error",this.wndOnErr),e.removeEventListener("play",this.onMediaPlayEvent),e.removeEventListener("pause",this.onMediaPauseEvent),this.allAnimations.forEach(i=>i.cancel()),this.allAnimations.clear(),t.log("Setup Unmounted"),!0}};et.moduleName="setup";let tt=et;const it="readium-viewport",rt=class B extends tt{onViewportWidthChanged(e){const t=e.target;Z(t,"--RS__viewportWidth",`${t.innerWidth}px`)}mount(e,t){if(!super.mount(e,t))return!1;const i=e.document.createElement("meta");return i.dataset.readium="true",i.setAttribute("name","viewport"),i.setAttribute("id",it),i.setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no"),e.document.head.appendChild(i),e.addEventListener("orientationchange",this.onViewportWidthChanged),e.addEventListener("resize",this.onViewportWidthChanged),this.onViewportWidthChanged({target:e}),t.register("get_properties",B.moduleName,(s,n)=>{De(e),n(!0)}),t.register("update_properties",B.moduleName,(s,n)=>{s["--RS__viewportWidth"]=`${e.innerWidth}px`,Lt(e,s),n(!0)}),t.register("set_property",B.moduleName,(s,n)=>{const o=s;Z(e,o[0],o[1]),n(!0)}),t.register("remove_property",B.moduleName,(s,n)=>{ae(e,s),n(!0)}),t.register("activate",B.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("ReflowableSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(B.moduleName),(i=e.document.head.querySelector(`#${it}`))==null||i.remove(),e.removeEventListener("orientationchange",this.onViewportWidthChanged),t.log("ReflowableSetup Unmounted"),super.unmount(e,t)}};rt.moduleName="reflowable_setup";let qt=rt;const st="readium-fixed-style",nt=class W extends tt{mount(e,t){if(!super.mount(e,t))return!1;e.navigator.epubReadingSystem.layoutStyle="paginated";const i=e.document.createElement("style");return i.id=st,i.dataset.readium="true",i.textContent=`
58
58
  html, body {
59
59
  text-size-adjust: none;
60
60
  -ms-text-size-adjust: none;
@@ -66,4 +66,4 @@
66
66
  min-height: 100%;
67
67
 
68
68
  /*cursor: var() TODO*/
69
- }`,e.document.head.appendChild(i),t.register("set_property",W.moduleName,(s,n)=>{const o=s;Z(e,o[0],o[1]),n(!0)}),t.register("remove_property",W.moduleName,(s,n)=>{ae(e,s),n(!0)}),t.register("first_visible_locator",W.moduleName,(s,n)=>n(!1)),t.register("unfocus",W.moduleName,(s,n)=>{w(e),n(!0)}),t.register(["focus","go_next","go_prev","go_id","go_end","go_start","go_text","go_progression"],W.moduleName,(s,n)=>n(!0)),t.register("activate",W.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("FixedSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(W.moduleName),(i=e.document.getElementById(st))==null||i.remove(),t.log("FixedSetup Unmounted"),super.unmount(e,t)}};nt.moduleName="fixed_setup";let Xt=nt;const Gt=["fixed_setup","decorator","peripherals"],Yt=["reflowable_setup","decorator","peripherals","column_snapper","scroll_snapper"],he=new Map([Xt,_t,le,ke,Vt,qt].map(r=>[r.moduleName,r]));class Kt{constructor(e=window,t=[]){this.loadedModules=[],this.wnd=e,this.comms=new ge(e);const i=[...new Set(t)];if(i.length){if(typeof e>"u")throw Error("Loader is not in a web browser");e.parent!==e&&this.comms.log("Loader is probably in a frame"),this.loadedModules=i.map(s=>{const n=this.loadModule(s);if(n)return n.mount(this.wnd,this.comms),n}).filter(s=>s!==void 0)}}loadModule(e){const t=he.get(e);return t===void 0?(this.comms.log(`Module "${name}" does not exist in the library`),t):new t}addModule(e){const t=this.loadModule(e);return!t||!t.mount(this.wnd,this.comms)?!1:(this.loadedModules.push(t),!0)}removeModule(e){const t=he.get(e);if(t===void 0)return this.comms.log(`Module "${e}" does not exist in the library`),!1;const i=this.loadedModules.findIndex(s=>s instanceof t);return i<0?!1:(this.loadedModules[i].unmount(this.wnd,this.comms),this.loadedModules.splice(i,1),!0)}destroy(){this.comms.destroy(),this.loadedModules.forEach(e=>e.unmount(this.wnd,this.comms)),this.loadedModules=[]}}E.COMMS_VERSION=U,E.Comms=ge,E.Decorator=ke,E.FXLModules=Gt,E.Layout=Fe,E.Loader=Kt,E.Module=V,E.ModuleLibrary=he,E.Peripherals=le,E.ReflowableModules=Yt,E.Width=We,E.mid=me,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
69
+ }`,e.document.head.appendChild(i),t.register("set_property",W.moduleName,(s,n)=>{const o=s;Z(e,o[0],o[1]),n(!0)}),t.register("remove_property",W.moduleName,(s,n)=>{ae(e,s),n(!0)}),t.register("first_visible_locator",W.moduleName,(s,n)=>n(!1)),t.register("unfocus",W.moduleName,(s,n)=>{w(e),n(!0)}),t.register(["focus","go_next","go_prev","go_id","go_end","go_start","go_text","go_progression"],W.moduleName,(s,n)=>n(!0)),t.register("activate",W.moduleName,(s,n)=>{this.unblock(e),n(!0)}),t.log("FixedSetup Mounted"),!0}unmount(e,t){var i;return t.unregisterAll(W.moduleName),(i=e.document.getElementById(st))==null||i.remove(),t.log("FixedSetup Unmounted"),super.unmount(e,t)}};nt.moduleName="fixed_setup";let Xt=nt;const Gt=["fixed_setup","decorator","peripherals"],Yt=["reflowable_setup","decorator","peripherals","column_snapper","scroll_snapper"],he=new Map([Xt,qt,le,ke,Vt,_t].map(r=>[r.moduleName,r]));class Kt{constructor(e=window,t=[]){this.loadedModules=[],this.wnd=e,this.comms=new ge(e);const i=[...new Set(t)];if(i.length){if(typeof e>"u")throw Error("Loader is not in a web browser");e.parent!==e&&this.comms.log("Loader is probably in a frame"),this.loadedModules=i.map(s=>{const n=this.loadModule(s);if(n)return n.mount(this.wnd,this.comms),n}).filter(s=>s!==void 0)}}loadModule(e){const t=he.get(e);return t===void 0?(this.comms.log(`Module "${name}" does not exist in the library`),t):new t}addModule(e){const t=this.loadModule(e);return!t||!t.mount(this.wnd,this.comms)?!1:(this.loadedModules.push(t),!0)}removeModule(e){const t=he.get(e);if(t===void 0)return this.comms.log(`Module "${e}" does not exist in the library`),!1;const i=this.loadedModules.findIndex(s=>s instanceof t);return i<0?!1:(this.loadedModules[i].unmount(this.wnd,this.comms),this.loadedModules.splice(i,1),!0)}destroy(){this.comms.destroy(),this.loadedModules.forEach(e=>e.unmount(this.wnd,this.comms)),this.loadedModules=[]}}b.COMMS_VERSION=U,b.Comms=ge,b.Decorator=ke,b.FXLModules=Gt,b.Layout=Fe,b.Loader=Kt,b.Module=V,b.ModuleLibrary=he,b.Peripherals=le,b.ReflowableModules=Yt,b.Width=We,b.mid=me,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@readium/navigator-html-injectables",
3
- "version": "2.0.0-beta.5",
3
+ "version": "2.0.0-beta.6",
4
4
  "type": "module",
5
5
  "description": "An embeddable solution for connecting frames of HTML publications with a Readium Navigator",
6
6
  "author": "readium",
@@ -13,7 +13,8 @@ export class ScrollSnapper extends Snapper {
13
13
  private wnd!: ReadiumWindow;
14
14
  private comms!: Comms;
15
15
  private resizeObserver!: ResizeObserver;
16
- private isScrolling = false;
16
+ private scrollEndTimer: number | null = null;
17
+ private readonly SCROLL_END_DELAY = 100;
17
18
 
18
19
  private doc() {
19
20
  return this.wnd.document.scrollingElement as HTMLElement;
@@ -35,14 +36,23 @@ export class ScrollSnapper extends Snapper {
35
36
  });
36
37
  }
37
38
 
39
+ // scrollEnd not available in Safari yet so
40
+ // we are using the old school timeout method
38
41
  private handleScroll = () => {
39
- if (!this.isScrolling) {
40
- this.isScrolling = true;
41
- this.wnd.requestAnimationFrame(() => {
42
- this.reportProgress();
43
- this.isScrolling = false;
44
- });
42
+ // Clear any existing timeout
43
+ if (this.scrollEndTimer !== null) {
44
+ this.wnd.clearTimeout(this.scrollEndTimer);
45
45
  }
46
+
47
+ // Set a new timeout
48
+ this.scrollEndTimer = this.wnd.setTimeout(() => {
49
+ this.onScrollEnd();
50
+ }, this.SCROLL_END_DELAY);
51
+ };
52
+
53
+ private onScrollEnd = () => {
54
+ this.scrollEndTimer = null;
55
+ this.reportProgress();
46
56
  };
47
57
 
48
58
  mount(wnd: ReadiumWindow, comms: Comms): boolean {
@@ -89,7 +99,6 @@ export class ScrollSnapper extends Snapper {
89
99
  this.doc().scrollTop = currentScroll + 1;
90
100
  }
91
101
  this.doc().scrollTop = currentScroll;
92
-
93
102
  });
94
103
 
95
104
  comms.register("go_progression", ScrollSnapper.moduleName, (data, ack) => {
@@ -200,6 +209,13 @@ export class ScrollSnapper extends Snapper {
200
209
  this.resizeObserver.disconnect();
201
210
  if (this.handleScroll) wnd.removeEventListener("scroll", this.handleScroll);
202
211
  wnd.document.getElementById(SCROLL_SNAPPER_STYLE_ID)?.remove();
212
+
213
+ // Clean up scroll end timer
214
+ if (this.scrollEndTimer !== null) {
215
+ clearTimeout(this.scrollEndTimer);
216
+ this.scrollEndTimer = null;
217
+ }
218
+
203
219
  comms.log("ScrollSnapper Unmounted");
204
220
  return true;
205
221
  }
@@ -7,10 +7,12 @@ export declare class ScrollSnapper extends Snapper {
7
7
  private wnd;
8
8
  private comms;
9
9
  private resizeObserver;
10
- private isScrolling;
10
+ private scrollEndTimer;
11
+ private readonly SCROLL_END_DELAY;
11
12
  private doc;
12
13
  private reportProgress;
13
14
  private handleScroll;
15
+ private onScrollEnd;
14
16
  mount(wnd: ReadiumWindow, comms: Comms): boolean;
15
17
  unmount(wnd: ReadiumWindow, comms: Comms): boolean;
16
18
  }