!(function(Q) {
  var U = window.webpackHotUpdate
  window.webpackHotUpdate = function(Q, F) {
    !(function(Q, U) {
      if (!C[Q] || !o[Q]) return
      for (var F in ((o[Q] = !1), U)) Object.prototype.hasOwnProperty.call(U, F) && (d[F] = U[F])
      0 == --b && 0 === L && y()
    })(Q, F),
      U && U(Q, F)
  }
  var F,
    B = !0,
    n = '2fed7f67d2287c74cba3',
    e = {},
    s = [],
    t = []
  function l(Q) {
    var U = R[Q]
    if (!U) return V
    var B = function(B) {
        return (
          U.hot.active
            ? (R[B] ? -1 === R[B].parents.indexOf(Q) && R[B].parents.push(Q) : ((s = [Q]), (F = B)),
              -1 === U.children.indexOf(B) && U.children.push(B))
            : (console.warn('[HMR] unexpected require(' + B + ') from disposed module ' + Q),
              (s = [])),
          V(B)
        )
      },
      n = function(Q) {
        return {
          configurable: !0,
          enumerable: !0,
          get: function() {
            return V[Q]
          },
          set: function(U) {
            V[Q] = U
          }
        }
      }
    for (var e in V)
      Object.prototype.hasOwnProperty.call(V, e) &&
        'e' !== e &&
        't' !== e &&
        Object.defineProperty(B, e, n(e))
    return (
      (B.e = function(Q) {
        return (
          'ready' === g && i('prepare'),
          L++,
          V.e(Q).then(U, function(Q) {
            throw (U(), Q)
          })
        )
        function U() {
          L--, 'prepare' === g && (a[Q] || G(Q), 0 === L && 0 === b && y())
        }
      }),
      (B.t = function(Q, U) {
        return 1 & U && (Q = B(Q)), V.t(Q, -2 & U)
      }),
      B
    )
  }
  function c(Q) {
    var U = {
      _acceptedDependencies: {},
      _declinedDependencies: {},
      _selfAccepted: !1,
      _selfDeclined: !1,
      _disposeHandlers: [],
      _main: F !== Q,
      active: !0,
      accept: function(Q, F) {
        if (void 0 === Q) U._selfAccepted = !0
        else if ('function' == typeof Q) U._selfAccepted = Q
        else if ('object' == typeof Q)
          for (var B = 0; B < Q.length; B++) U._acceptedDependencies[Q[B]] = F || function() {}
        else U._acceptedDependencies[Q] = F || function() {}
      },
      decline: function(Q) {
        if (void 0 === Q) U._selfDeclined = !0
        else if ('object' == typeof Q)
          for (var F = 0; F < Q.length; F++) U._declinedDependencies[Q[F]] = !0
        else U._declinedDependencies[Q] = !0
      },
      dispose: function(Q) {
        U._disposeHandlers.push(Q)
      },
      addDisposeHandler: function(Q) {
        U._disposeHandlers.push(Q)
      },
      removeDisposeHandler: function(Q) {
        var F = U._disposeHandlers.indexOf(Q)
        F >= 0 && U._disposeHandlers.splice(F, 1)
      },
      check: S,
      apply: E,
      status: function(Q) {
        if (!Q) return g
        r.push(Q)
      },
      addStatusHandler: function(Q) {
        r.push(Q)
      },
      removeStatusHandler: function(Q) {
        var U = r.indexOf(Q)
        U >= 0 && r.splice(U, 1)
      },
      data: e[Q]
    }
    return (F = void 0), U
  }
  var r = [],
    g = 'idle'
  function i(Q) {
    g = Q
    for (var U = 0; U < r.length; U++) r[U].call(null, Q)
  }
  var x,
    d,
    I,
    b = 0,
    L = 0,
    a = {},
    o = {},
    C = {}
  function u(Q) {
    return +Q + '' === Q ? +Q : Q
  }
  function S(Q) {
    if ('idle' !== g) throw new Error('check() is only allowed in idle status')
    return (
      (B = Q),
      i('check'),
      ((U = 1e4),
      (U = U || 1e4),
      new Promise(function(Q, F) {
        if ('undefined' == typeof XMLHttpRequest) return F(new Error('No browser support'))
        try {
          var B = new XMLHttpRequest(),
            e = V.p + '' + n + '.hot-update.json'
          B.open('GET', e, !0), (B.timeout = U), B.send(null)
        } catch (Q) {
          return F(Q)
        }
        B.onreadystatechange = function() {
          if (4 === B.readyState)
            if (0 === B.status) F(new Error('Manifest request to ' + e + ' timed out.'))
            else if (404 === B.status) Q()
            else if (200 !== B.status && 304 !== B.status)
              F(new Error('Manifest request to ' + e + ' failed.'))
            else {
              try {
                var U = JSON.parse(B.responseText)
              } catch (Q) {
                return void F(Q)
              }
              Q(U)
            }
        }
      })).then(function(Q) {
        if (!Q) return i('idle'), null
        ;(o = {}), (a = {}), (C = Q.c), (I = Q.h), i('prepare')
        var U = new Promise(function(Q, U) {
          x = { resolve: Q, reject: U }
        })
        d = {}
        return G(1), 'prepare' === g && 0 === L && 0 === b && y(), U
      })
    )
    var U
  }
  function G(Q) {
    C[Q]
      ? ((o[Q] = !0),
        b++,
        (function(Q) {
          var U = document.createElement('script')
          ;(U.charset = 'utf-8'),
            (U.src = V.p + '' + Q + '.' + n + '.hot-update.js'),
            document.head.appendChild(U)
        })(Q))
      : (a[Q] = !0)
  }
  function y() {
    i('ready')
    var Q = x
    if (((x = null), Q))
      if (B)
        Promise.resolve()
          .then(function() {
            return E(B)
          })
          .then(
            function(U) {
              Q.resolve(U)
            },
            function(U) {
              Q.reject(U)
            }
          )
      else {
        var U = []
        for (var F in d) Object.prototype.hasOwnProperty.call(d, F) && U.push(u(F))
        Q.resolve(U)
      }
  }
  function E(U) {
    if ('ready' !== g) throw new Error('apply() is only allowed in ready status')
    var F, B, t, l, c
    function r(Q) {
      for (
        var U = [Q],
          F = {},
          B = U.map(function(Q) {
            return { chain: [Q], id: Q }
          });
        B.length > 0;

      ) {
        var n = B.pop(),
          e = n.id,
          s = n.chain
        if ((l = R[e]) && !l.hot._selfAccepted) {
          if (l.hot._selfDeclined) return { type: 'self-declined', chain: s, moduleId: e }
          if (l.hot._main) return { type: 'unaccepted', chain: s, moduleId: e }
          for (var t = 0; t < l.parents.length; t++) {
            var c = l.parents[t],
              r = R[c]
            if (r) {
              if (r.hot._declinedDependencies[e])
                return { type: 'declined', chain: s.concat([c]), moduleId: e, parentId: c }
              ;-1 === U.indexOf(c) &&
                (r.hot._acceptedDependencies[e]
                  ? (F[c] || (F[c] = []), x(F[c], [e]))
                  : (delete F[c], U.push(c), B.push({ chain: s.concat([c]), id: c })))
            }
          }
        }
      }
      return { type: 'accepted', moduleId: Q, outdatedModules: U, outdatedDependencies: F }
    }
    function x(Q, U) {
      for (var F = 0; F < U.length; F++) {
        var B = U[F]
        ;-1 === Q.indexOf(B) && Q.push(B)
      }
    }
    U = U || {}
    var b = {},
      L = [],
      a = {},
      o = function() {
        console.warn('[HMR] unexpected require(' + G.moduleId + ') to disposed module')
      }
    for (var S in d)
      if (Object.prototype.hasOwnProperty.call(d, S)) {
        var G
        c = u(S)
        var y = !1,
          E = !1,
          Z = !1,
          p = ''
        switch (
          ((G = d[S] ? r(c) : { type: 'disposed', moduleId: S }).chain &&
            (p = '\nUpdate propagation: ' + G.chain.join(' -> ')),
          G.type)
        ) {
          case 'self-declined':
            U.onDeclined && U.onDeclined(G),
              U.ignoreDeclined ||
                (y = new Error('Aborted because of self decline: ' + G.moduleId + p))
            break
          case 'declined':
            U.onDeclined && U.onDeclined(G),
              U.ignoreDeclined ||
                (y = new Error(
                  'Aborted because of declined dependency: ' + G.moduleId + ' in ' + G.parentId + p
                ))
            break
          case 'unaccepted':
            U.onUnaccepted && U.onUnaccepted(G),
              U.ignoreUnaccepted || (y = new Error('Aborted because ' + c + ' is not accepted' + p))
            break
          case 'accepted':
            U.onAccepted && U.onAccepted(G), (E = !0)
            break
          case 'disposed':
            U.onDisposed && U.onDisposed(G), (Z = !0)
            break
          default:
            throw new Error('Unexception type ' + G.type)
        }
        if (y) return i('abort'), Promise.reject(y)
        if (E)
          for (c in ((a[c] = d[c]), x(L, G.outdatedModules), G.outdatedDependencies))
            Object.prototype.hasOwnProperty.call(G.outdatedDependencies, c) &&
              (b[c] || (b[c] = []), x(b[c], G.outdatedDependencies[c]))
        Z && (x(L, [G.moduleId]), (a[c] = o))
      }
    var m,
      N = []
    for (B = 0; B < L.length; B++)
      (c = L[B]),
        R[c] &&
          R[c].hot._selfAccepted &&
          a[c] !== o &&
          N.push({ module: c, errorHandler: R[c].hot._selfAccepted })
    i('dispose'),
      Object.keys(C).forEach(function(Q) {
        !1 === C[Q] &&
          (function(Q) {
            delete installedChunks[Q]
          })(Q)
      })
    for (var W, D, A = L.slice(); A.length > 0; )
      if (((c = A.pop()), (l = R[c]))) {
        var h = {},
          X = l.hot._disposeHandlers
        for (t = 0; t < X.length; t++) (F = X[t])(h)
        for (
          e[c] = h, l.hot.active = !1, delete R[c], delete b[c], t = 0;
          t < l.children.length;
          t++
        ) {
          var v = R[l.children[t]]
          v && (m = v.parents.indexOf(c)) >= 0 && v.parents.splice(m, 1)
        }
      }
    for (c in b)
      if (Object.prototype.hasOwnProperty.call(b, c) && (l = R[c]))
        for (D = b[c], t = 0; t < D.length; t++)
          (W = D[t]), (m = l.children.indexOf(W)) >= 0 && l.children.splice(m, 1)
    for (c in (i('apply'), (n = I), a)) Object.prototype.hasOwnProperty.call(a, c) && (Q[c] = a[c])
    var H = null
    for (c in b)
      if (Object.prototype.hasOwnProperty.call(b, c) && (l = R[c])) {
        D = b[c]
        var J = []
        for (B = 0; B < D.length; B++)
          if (((W = D[B]), (F = l.hot._acceptedDependencies[W]))) {
            if (-1 !== J.indexOf(F)) continue
            J.push(F)
          }
        for (B = 0; B < J.length; B++) {
          F = J[B]
          try {
            F(D)
          } catch (Q) {
            U.onErrored &&
              U.onErrored({ type: 'accept-errored', moduleId: c, dependencyId: D[B], error: Q }),
              U.ignoreErrored || H || (H = Q)
          }
        }
      }
    for (B = 0; B < N.length; B++) {
      var M = N[B]
      ;(c = M.module), (s = [c])
      try {
        V(c)
      } catch (Q) {
        if ('function' == typeof M.errorHandler)
          try {
            M.errorHandler(Q)
          } catch (F) {
            U.onErrored &&
              U.onErrored({
                type: 'self-accept-error-handler-errored',
                moduleId: c,
                error: F,
                originalError: Q
              }),
              U.ignoreErrored || H || (H = F),
              H || (H = Q)
          }
        else
          U.onErrored && U.onErrored({ type: 'self-accept-errored', moduleId: c, error: Q }),
            U.ignoreErrored || H || (H = Q)
      }
    }
    return H
      ? (i('fail'), Promise.reject(H))
      : (i('idle'),
        new Promise(function(Q) {
          Q(L)
        }))
  }
  var R = {}
  function V(U) {
    if (R[U]) return R[U].exports
    var F = (R[U] = {
      i: U,
      l: !1,
      exports: {},
      hot: c(U),
      parents: ((t = s), (s = []), t),
      children: []
    })
    return Q[U].call(F.exports, F, F.exports, l(U)), (F.l = !0), F.exports
  }
  ;(V.m = Q),
    (V.c = R),
    (V.d = function(Q, U, F) {
      V.o(Q, U) || Object.defineProperty(Q, U, { enumerable: !0, get: F })
    }),
    (V.r = function(Q) {
      'undefined' != typeof Symbol &&
        Symbol.toStringTag &&
        Object.defineProperty(Q, Symbol.toStringTag, { value: 'Module' }),
        Object.defineProperty(Q, '__esModule', { value: !0 })
    }),
    (V.t = function(Q, U) {
      if ((1 & U && (Q = V(Q)), 8 & U)) return Q
      if (4 & U && 'object' == typeof Q && Q && Q.__esModule) return Q
      var F = Object.create(null)
      if (
        (V.r(F),
        Object.defineProperty(F, 'default', { enumerable: !0, value: Q }),
        2 & U && 'string' != typeof Q)
      )
        for (var B in Q)
          V.d(
            F,
            B,
            function(U) {
              return Q[U]
            }.bind(null, B)
          )
      return F
    }),
    (V.n = function(Q) {
      var U =
        Q && Q.__esModule
          ? function() {
              return Q.default
            }
          : function() {
              return Q
            }
      return V.d(U, 'a', U), U
    }),
    (V.o = function(Q, U) {
      return Object.prototype.hasOwnProperty.call(Q, U)
    }),
    (V.p = ''),
    (V.h = function() {
      return n
    }),
    l(3)((V.s = 3))
})([
  ,
  function(module, __webpack_exports__, __webpack_require__) {
    'use strict'
    eval(
      "\n// EXTERNAL MODULE: ./src/polyfills.js\nvar polyfills = __webpack_require__(4);\n\n// CONCATENATED MODULE: ./src/pointers.ts\n/**\r\n * Utilites for working with multiple pointer events\r\n */\r\nfunction findEventIndex(pointers, event) {\r\n    var i = pointers.length;\r\n    while (i--) {\r\n        if (pointers[i].pointerId === event.pointerId) {\r\n            return i;\r\n        }\r\n    }\r\n    return -1;\r\n}\r\nfunction addPointer(pointers, event) {\r\n    var i;\r\n    // Add touches if applicable\r\n    if (event.touches) {\r\n        i = 0;\r\n        for (var _i = 0, _a = event.touches; _i < _a.length; _i++) {\r\n            var touch = _a[_i];\r\n            touch.pointerId = i++;\r\n            addPointer(pointers, touch);\r\n        }\r\n        return;\r\n    }\r\n    i = findEventIndex(pointers, event);\r\n    // Update if already present\r\n    if (i > -1) {\r\n        pointers.splice(i, 1);\r\n    }\r\n    pointers.push(event);\r\n}\r\nfunction removePointer(pointers, event) {\r\n    // Add touches if applicable\r\n    if (event.touches) {\r\n        // Remove all touches\r\n        while (pointers.length) {\r\n            pointers.pop();\r\n        }\r\n        return;\r\n    }\r\n    var i = findEventIndex(pointers, event);\r\n    if (i > -1) {\r\n        pointers.splice(i, 1);\r\n    }\r\n}\r\n/**\r\n * Calculates a center point between\r\n * the given pointer events, for panning\r\n * with multiple pointers.\r\n */\r\nfunction getMiddle(pointers) {\r\n    // Copy to avoid changing by reference\r\n    pointers = pointers.slice(0);\r\n    var event1 = pointers.pop();\r\n    var event2;\r\n    while ((event2 = pointers.pop())) {\r\n        event1 = {\r\n            clientX: (event2.clientX - event1.clientX) / 2 + event1.clientX,\r\n            clientY: (event2.clientY - event1.clientY) / 2 + event1.clientY\r\n        };\r\n    }\r\n    return event1;\r\n}\r\n/**\r\n * Calculates the distance between two points\r\n * for pinch zooming.\r\n * Limits to the first 2\r\n */\r\nfunction getDistance(pointers) {\r\n    if (pointers.length < 2) {\r\n        return 0;\r\n    }\r\n    var event1 = pointers[0];\r\n    var event2 = pointers[1];\r\n    return Math.sqrt(Math.pow(Math.abs(event2.clientX - event1.clientX), 2) +\r\n        Math.pow(Math.abs(event2.clientY - event1.clientY), 2));\r\n}\r\n\n// CONCATENATED MODULE: ./src/events.ts\nvar events;\r\nif (typeof window.PointerEvent === 'function') {\r\n    events = {\r\n        down: 'pointerdown',\r\n        move: 'pointermove',\r\n        up: 'pointerup pointerleave pointercancel'\r\n    };\r\n}\r\nelse if (typeof window.TouchEvent === 'function') {\r\n    events = {\r\n        down: 'touchstart',\r\n        move: 'touchmove',\r\n        up: 'touchend touchcancel'\r\n    };\r\n}\r\nelse {\r\n    events = {\r\n        down: 'mousedown',\r\n        move: 'mousemove',\r\n        up: 'mouseup mouseleave'\r\n    };\r\n}\r\nfunction onPointer(event, elem, handler, eventOpts) {\r\n    events[event].split(' ').forEach(function (name) {\r\n        ;\r\n        elem.addEventListener(name, handler, eventOpts);\r\n    });\r\n}\r\nfunction destroyPointer(event, elem, handler) {\r\n    events[event].split(' ').forEach(function (name) {\r\n        ;\r\n        elem.removeEventListener(name, handler);\r\n    });\r\n}\r\n\n// CONCATENATED MODULE: ./src/css.ts\n/**\r\n * Proper prefixing for cross-browser compatibility\r\n */\r\nvar divStyle = document.createElement('div').style;\r\nvar prefixes = ['webkit', 'moz', 'ms'];\r\nvar prefixCache = {};\r\nfunction getPrefixedName(name) {\r\n    if (prefixCache[name]) {\r\n        return prefixCache[name];\r\n    }\r\n    if (name in divStyle) {\r\n        return (prefixCache[name] = name);\r\n    }\r\n    var capName = name[0].toUpperCase() + name.slice(1);\r\n    var i = prefixes.length;\r\n    while (i--) {\r\n        var prefixedName = \"\" + prefixes[i] + capName;\r\n        if (prefixedName in divStyle) {\r\n            return (prefixCache[name] = prefixedName);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Gets a style value expected to be a number\r\n */\r\nfunction getCSSNum(name, style) {\r\n    return parseFloat(style[getPrefixedName(name)]) || 0;\r\n}\r\nfunction getBoxStyle(elem, name, style) {\r\n    if (style === void 0) { style = window.getComputedStyle(elem); }\r\n    // Support: FF 68+\r\n    // Firefox requires specificity for border\r\n    var suffix = name === 'border' ? 'Width' : '';\r\n    return {\r\n        left: getCSSNum(name + \"Left\" + suffix, style),\r\n        right: getCSSNum(name + \"Right\" + suffix, style),\r\n        top: getCSSNum(name + \"Top\" + suffix, style),\r\n        bottom: getCSSNum(name + \"Bottom\" + suffix, style)\r\n    };\r\n}\r\n/**\r\n * Set a style using the properly prefixed name\r\n */\r\nfunction setStyle(elem, name, value) {\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    elem.style[getPrefixedName(name)] = value;\r\n}\r\n/**\r\n * Constructs the transition from panzoom options\r\n * and takes care of prefixing the transition and transform\r\n */\r\nfunction setTransition(elem, options) {\r\n    var transform = getPrefixedName('transform');\r\n    setStyle(elem, 'transition', transform + \" \" + options.duration + \"ms \" + options.easing);\r\n}\r\n/**\r\n * Set the transform using the proper prefix\r\n */\r\nfunction setTransform(elem, _a, _) {\r\n    var x = _a.x, y = _a.y, scale = _a.scale;\r\n    setStyle(elem, 'transform', \"scale(\" + scale + \") translate(\" + x + \"px, \" + y + \"px)\");\r\n}\r\n/**\r\n * Dimensions used in containment and focal point zooming\r\n */\r\nfunction getDimensions(elem) {\r\n    var parent = elem.parentElement;\r\n    var style = window.getComputedStyle(elem);\r\n    var parentStyle = window.getComputedStyle(parent);\r\n    var rectElem = elem.getBoundingClientRect();\r\n    var rectParent = parent.getBoundingClientRect();\r\n    return {\r\n        elem: {\r\n            style: style,\r\n            width: rectElem.width,\r\n            height: rectElem.height,\r\n            top: rectElem.top,\r\n            bottom: rectElem.bottom,\r\n            left: rectElem.left,\r\n            right: rectElem.right,\r\n            margin: getBoxStyle(elem, 'margin', style),\r\n            border: getBoxStyle(elem, 'border', style)\r\n        },\r\n        parent: {\r\n            style: parentStyle,\r\n            width: rectParent.width,\r\n            height: rectParent.height,\r\n            top: rectParent.top,\r\n            bottom: rectParent.bottom,\r\n            left: rectParent.left,\r\n            right: rectParent.right,\r\n            padding: getBoxStyle(parent, 'padding', parentStyle),\r\n            border: getBoxStyle(parent, 'border', parentStyle)\r\n        }\r\n    };\r\n}\r\n\n// CONCATENATED MODULE: ./src/isAttached.ts\n/**\r\n * Determine if an element is attached to the DOM\r\n * Panzoom requires this so events work properly\r\n */\r\nfunction isAttached(elem) {\r\n    var doc = elem.ownerDocument;\r\n    var parent = elem.parentElement;\r\n    return doc && parent && doc.nodeType === 9 && parent.nodeType === 1 && doc.contains(parent);\r\n}\r\n\n// CONCATENATED MODULE: ./src/isExcluded.ts\nfunction isExcluded(elem, options) {\r\n    for (var cur = elem; cur != null; cur = cur.parentElement) {\r\n        if (cur.classList.contains(options.excludeClass) || options.exclude.indexOf(cur) > -1) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\n// CONCATENATED MODULE: ./src/isSVGElement.ts\n/**\r\n * Determine if an element is SVG by checking the namespace\r\n * Exception: the <svg> element itself should be treated like HTML\r\n */\r\nvar rsvg = /^http:[\\w\\.\\/]+svg$/;\r\nfunction isSVGElement(elem) {\r\n    return rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\r\n}\r\n\n// CONCATENATED MODULE: ./src/shallowClone.ts\nfunction shallowClone(obj) {\r\n    var clone = {};\r\n    for (var key in obj) {\r\n        if (obj.hasOwnProperty(key)) {\r\n            clone[key] = obj[key];\r\n        }\r\n    }\r\n    return clone;\r\n}\r\n\n// CONCATENATED MODULE: ./src/panzoom.ts\nvar __assign = (undefined && undefined.__assign) || function () {\r\n    __assign = Object.assign || function(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n                t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n/**\r\n * Panzoom for panning and zooming elements using CSS transforms\r\n * https://github.com/timmywil/panzoom\r\n *\r\n * Copyright Timmy Willison and other contributors\r\n * Released under the MIT license\r\n * https://github.com/timmywil/panzoom/blob/master/MIT-License.txt\r\n *\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar defaultOptions = {\r\n    animate: false,\r\n    cursor: 'move',\r\n    disablePan: false,\r\n    disableZoom: false,\r\n    disableXAxis: false,\r\n    disableYAxis: false,\r\n    duration: 200,\r\n    easing: 'ease-in-out',\r\n    exclude: [],\r\n    excludeClass: 'panzoom-exclude',\r\n    handleStartEvent: function (e) {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n    },\r\n    maxScale: 4,\r\n    minScale: 0.125,\r\n    overflow: 'hidden',\r\n    panOnlyWhenZoomed: false,\r\n    relative: false,\r\n    setTransform: setTransform,\r\n    startX: 0,\r\n    startY: 0,\r\n    startScale: 1,\r\n    step: 0.3\r\n};\r\nfunction Panzoom(elem, options) {\r\n    if (!elem) {\r\n        throw new Error('Panzoom requires an element as an argument');\r\n    }\r\n    if (elem.nodeType !== 1) {\r\n        throw new Error('Panzoom requires an element with a nodeType of 1');\r\n    }\r\n    if (!isAttached(elem)) {\r\n        throw new Error('Panzoom should be called on elements that have been attached to the DOM');\r\n    }\r\n    options = __assign(__assign({}, defaultOptions), options);\r\n    var isSVG = isSVGElement(elem);\r\n    // Set overflow on the parent\r\n    var parent = elem.parentElement;\r\n    parent.style.overflow = options.overflow;\r\n    parent.style.userSelect = 'none';\r\n    // This is important for mobile to\r\n    // prevent scrolling while panning\r\n    parent.style.touchAction = 'none';\r\n    // Set some default styles on the panzoom element\r\n    elem.style.cursor = options.cursor;\r\n    elem.style.userSelect = 'none';\r\n    elem.style.touchAction = 'none';\r\n    // The default for HTML is '50% 50%'\r\n    // The default for SVG is '0 0'\r\n    // SVG can't be changed in IE\r\n    setStyle(elem, 'transformOrigin', typeof options.origin === 'string' ? options.origin : isSVG ? '0 0' : '50% 50%');\r\n    function setOptions(opts) {\r\n        if (opts === void 0) { opts = {}; }\r\n        for (var key in opts) {\r\n            if (opts.hasOwnProperty(key)) {\r\n                options[key] = opts[key];\r\n            }\r\n        }\r\n        // Handle option side-effects\r\n        if (opts.hasOwnProperty('cursor')) {\r\n            elem.style.cursor = opts.cursor;\r\n        }\r\n        if (opts.hasOwnProperty('overflow')) {\r\n            parent.style.overflow = opts.overflow;\r\n        }\r\n        if (opts.hasOwnProperty('minScale') ||\r\n            opts.hasOwnProperty('maxScale') ||\r\n            opts.hasOwnProperty('contain')) {\r\n            setMinMax();\r\n        }\r\n        if (opts.hasOwnProperty('disablePan')) {\r\n            if (opts.disablePan) {\r\n                destroy();\r\n            }\r\n            else {\r\n                bind();\r\n            }\r\n        }\r\n    }\r\n    var x = 0;\r\n    var y = 0;\r\n    var scale = 1;\r\n    var isPanning = false;\r\n    zoom(options.startScale, { animate: false });\r\n    // Wait for scale to update\r\n    // for accurate dimensions\r\n    // to constrain initial values\r\n    setTimeout(function () {\r\n        setMinMax();\r\n        pan(options.startX, options.startY, { animate: false });\r\n    });\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    function trigger(eventName, detail, opts) {\r\n        if (opts.silent) {\r\n            return;\r\n        }\r\n        var event = new CustomEvent(eventName, { detail: detail });\r\n        elem.dispatchEvent(event);\r\n    }\r\n    function setTransformWithEvent(eventName, opts) {\r\n        var value = { x: x, y: y, scale: scale };\r\n        requestAnimationFrame(function () {\r\n            if (typeof opts.animate === 'boolean') {\r\n                if (opts.animate) {\r\n                    setTransition(elem, opts);\r\n                }\r\n                else {\r\n                    setStyle(elem, 'transition', 'none');\r\n                }\r\n            }\r\n            opts.setTransform(elem, value, opts);\r\n        });\r\n        trigger(eventName, value, opts);\r\n        trigger('panzoomchange', value, opts);\r\n        return value;\r\n    }\r\n    function setMinMax() {\r\n        if (options.contain) {\r\n            var dims = getDimensions(elem);\r\n            var parentWidth = dims.parent.width - dims.parent.border.left - dims.parent.border.right;\r\n            var parentHeight = dims.parent.height - dims.parent.border.top - dims.parent.border.bottom;\r\n            var elemWidth = dims.elem.width / scale;\r\n            var elemHeight = dims.elem.height / scale;\r\n            var elemScaledWidth = parentWidth / elemWidth;\r\n            var elemScaledHeight = parentHeight / elemHeight;\r\n            if (options.contain === 'inside') {\r\n                options.maxScale = Math.min(elemScaledWidth, elemScaledHeight);\r\n            }\r\n            else if (options.contain === 'outside') {\r\n                options.minScale = Math.max(elemScaledWidth, elemScaledHeight);\r\n            }\r\n        }\r\n    }\r\n    function constrainXY(toX, toY, toScale, panOptions) {\r\n        var opts = __assign(__assign({}, options), panOptions);\r\n        var result = { x: x, y: y, opts: opts };\r\n        if (!opts.force && (opts.disablePan || (opts.panOnlyWhenZoomed && scale === opts.startScale))) {\r\n            return result;\r\n        }\r\n        toX = parseFloat(toX);\r\n        toY = parseFloat(toY);\r\n        if (!opts.disableXAxis) {\r\n            result.x = (opts.relative ? x : 0) + toX;\r\n        }\r\n        if (!opts.disableYAxis) {\r\n            result.y = (opts.relative ? y : 0) + toY;\r\n        }\r\n        if (opts.contain === 'inside') {\r\n            var dims = getDimensions(elem);\r\n            result.x = Math.max(-dims.elem.margin.left - dims.parent.padding.left, Math.min(dims.parent.width -\r\n                dims.elem.width / toScale -\r\n                dims.parent.padding.left -\r\n                dims.elem.margin.left -\r\n                dims.parent.border.left -\r\n                dims.parent.border.right, result.x));\r\n            result.y = Math.max(-dims.elem.margin.top - dims.parent.padding.top, Math.min(dims.parent.height -\r\n                dims.elem.height / toScale -\r\n                dims.parent.padding.top -\r\n                dims.elem.margin.top -\r\n                dims.parent.border.top -\r\n                dims.parent.border.bottom, result.y));\r\n        }\r\n        else if (opts.contain === 'outside') {\r\n            var dims = getDimensions(elem);\r\n            var realWidth = dims.elem.width / scale;\r\n            var realHeight = dims.elem.height / scale;\r\n            var scaledWidth = realWidth * toScale;\r\n            var scaledHeight = realHeight * toScale;\r\n            var diffHorizontal = (scaledWidth - realWidth) / 2;\r\n            var diffVertical = (scaledHeight - realHeight) / 2;\r\n            var minX = (-(scaledWidth - dims.parent.width) -\r\n                dims.parent.padding.left -\r\n                dims.parent.border.left -\r\n                dims.parent.border.right +\r\n                diffHorizontal) /\r\n                toScale;\r\n            var maxX = (diffHorizontal - dims.parent.padding.left) / toScale;\r\n            result.x = Math.max(Math.min(result.x, maxX), minX);\r\n            var minY = (-(scaledHeight - dims.parent.height) -\r\n                dims.parent.padding.top -\r\n                dims.parent.border.top -\r\n                dims.parent.border.bottom +\r\n                diffVertical) /\r\n                toScale;\r\n            var maxY = (diffVertical - dims.parent.padding.top) / toScale;\r\n            result.y = Math.max(Math.min(result.y, maxY), minY);\r\n        }\r\n        return result;\r\n    }\r\n    function constrainScale(toScale, zoomOptions) {\r\n        var opts = __assign(__assign({}, options), zoomOptions);\r\n        var result = { scale: scale, opts: opts };\r\n        if (!opts.force && opts.disableZoom) {\r\n            return result;\r\n        }\r\n        result.scale = Math.min(Math.max(toScale, opts.minScale), opts.maxScale);\r\n        return result;\r\n    }\r\n    function pan(toX, toY, panOptions) {\r\n        var result = constrainXY(toX, toY, scale, panOptions);\r\n        var opts = result.opts;\r\n        x = result.x;\r\n        y = result.y;\r\n        return setTransformWithEvent('panzoompan', opts);\r\n    }\r\n    function zoom(toScale, zoomOptions) {\r\n        var result = constrainScale(toScale, zoomOptions);\r\n        var opts = result.opts;\r\n        if (!opts.force && opts.disableZoom) {\r\n            return;\r\n        }\r\n        toScale = result.scale;\r\n        var toX = x;\r\n        var toY = y;\r\n        if (opts.focal) {\r\n            // The difference between the point after the scale and the point before the scale\r\n            // plus the current translation after the scale\r\n            // neutralized to no scale (as the transform scale will apply to the translation)\r\n            var focal = opts.focal;\r\n            toX = (focal.x / toScale - focal.x / scale + x * toScale) / toScale;\r\n            toY = (focal.y / toScale - focal.y / scale + y * toScale) / toScale;\r\n        }\r\n        var panResult = constrainXY(toX, toY, toScale, { relative: false, force: true });\r\n        x = panResult.x;\r\n        y = panResult.y;\r\n        scale = toScale;\r\n        return setTransformWithEvent('panzoomzoom', opts);\r\n    }\r\n    function zoomInOut(isIn, zoomOptions) {\r\n        var opts = __assign(__assign(__assign({}, options), { animate: true }), zoomOptions);\r\n        return zoom(scale * Math.exp((isIn ? 1 : -1) * opts.step), opts);\r\n    }\r\n    function zoomIn(zoomOptions) {\r\n        return zoomInOut(true, zoomOptions);\r\n    }\r\n    function zoomOut(zoomOptions) {\r\n        return zoomInOut(false, zoomOptions);\r\n    }\r\n    function zoomToPoint(toScale, point, zoomOptions) {\r\n        var dims = getDimensions(elem);\r\n        // Instead of thinking of operating on the panzoom element,\r\n        // think of operating on the area inside the panzoom\r\n        // element's parent\r\n        // Subtract padding and border\r\n        var effectiveArea = {\r\n            width: dims.parent.width -\r\n                dims.parent.padding.left -\r\n                dims.parent.padding.right -\r\n                dims.parent.border.left -\r\n                dims.parent.border.right,\r\n            height: dims.parent.height -\r\n                dims.parent.padding.top -\r\n                dims.parent.padding.bottom -\r\n                dims.parent.border.top -\r\n                dims.parent.border.bottom\r\n        };\r\n        // Adjust the clientX/clientY to ignore the area\r\n        // outside the effective area\r\n        var clientX = point.clientX -\r\n            dims.parent.left -\r\n            dims.parent.padding.left -\r\n            dims.parent.border.left -\r\n            dims.elem.margin.left;\r\n        var clientY = point.clientY -\r\n            dims.parent.top -\r\n            dims.parent.padding.top -\r\n            dims.parent.border.top -\r\n            dims.elem.margin.top;\r\n        // Adjust the clientX/clientY for HTML elements,\r\n        // because they have a transform-origin of 50% 50%\r\n        if (!isSVG) {\r\n            clientX -= dims.elem.width / scale / 2;\r\n            clientY -= dims.elem.height / scale / 2;\r\n        }\r\n        // Convert the mouse point from it's position over the\r\n        // effective area before the scale to the position\r\n        // over the effective area after the scale.\r\n        var focal = {\r\n            x: (clientX / effectiveArea.width) * (effectiveArea.width * toScale),\r\n            y: (clientY / effectiveArea.height) * (effectiveArea.height * toScale)\r\n        };\r\n        return zoom(toScale, __assign(__assign({ animate: false }, zoomOptions), { focal: focal }));\r\n    }\r\n    function zoomWithWheel(event, zoomOptions) {\r\n        // Need to prevent the default here\r\n        // or it conflicts with regular page scroll\r\n        event.preventDefault();\r\n        var opts = __assign(__assign({}, options), zoomOptions);\r\n        // Normalize to deltaX in case shift modifier is used on Mac\r\n        var delta = event.deltaY === 0 && event.deltaX ? event.deltaX : event.deltaY;\r\n        var wheel = delta < 0 ? 1 : -1;\r\n        var toScale = constrainScale(scale * Math.exp((wheel * opts.step) / 3), opts).scale;\r\n        return zoomToPoint(toScale, event, opts);\r\n    }\r\n    function reset(resetOptions) {\r\n        var opts = __assign(__assign(__assign({}, options), { animate: true, force: true }), resetOptions);\r\n        scale = constrainScale(opts.startScale, opts).scale;\r\n        var panResult = constrainXY(opts.startX, opts.startY, scale, opts);\r\n        x = panResult.x;\r\n        y = panResult.y;\r\n        return setTransformWithEvent('panzoomreset', opts);\r\n    }\r\n    var origX;\r\n    var origY;\r\n    var startClientX;\r\n    var startClientY;\r\n    var startScale;\r\n    var startDistance;\r\n    var pointers = [];\r\n    function handleDown(event) {\r\n        // Don't handle this event if the target is excluded\r\n        if (isExcluded(event.target, options)) {\r\n            return;\r\n        }\r\n        addPointer(pointers, event);\r\n        isPanning = true;\r\n        options.handleStartEvent(event);\r\n        origX = x;\r\n        origY = y;\r\n        trigger('panzoomstart', { x: x, y: y, scale: scale }, options);\r\n        // This works whether there are multiple\r\n        // pointers or not\r\n        var point = getMiddle(pointers);\r\n        startClientX = point.clientX;\r\n        startClientY = point.clientY;\r\n        startScale = scale;\r\n        startDistance = getDistance(pointers);\r\n    }\r\n    function move(event) {\r\n        if (!isPanning ||\r\n            origX === undefined ||\r\n            origY === undefined ||\r\n            startClientX === undefined ||\r\n            startClientY === undefined) {\r\n            return;\r\n        }\r\n        addPointer(pointers, event);\r\n        var current = getMiddle(pointers);\r\n        if (pointers.length > 1) {\r\n            // Use the distance between the first 2 pointers\r\n            // to determine the current scale\r\n            var diff = getDistance(pointers) - startDistance;\r\n            var toScale = constrainScale((diff * options.step) / 80 + startScale).scale;\r\n            zoomToPoint(toScale, current);\r\n        }\r\n        pan(origX + (current.clientX - startClientX) / scale, origY + (current.clientY - startClientY) / scale, {\r\n            animate: false\r\n        });\r\n    }\r\n    function handleUp(event) {\r\n        // Don't call panzoomend when panning with 2 touches\r\n        // until both touches end\r\n        if (pointers.length === 1) {\r\n            trigger('panzoomend', { x: x, y: y, scale: scale }, options);\r\n        }\r\n        // Note: don't remove all pointers\r\n        // Can restart without having to reinitiate all of them\r\n        // Remove the pointer regardless of the isPanning state\r\n        removePointer(pointers, event);\r\n        if (!isPanning) {\r\n            return;\r\n        }\r\n        isPanning = false;\r\n        origX = origY = startClientX = startClientY = undefined;\r\n    }\r\n    function bind() {\r\n        onPointer('down', elem, handleDown);\r\n        onPointer('move', document, move, { passive: true });\r\n        onPointer('up', document, handleUp, { passive: true });\r\n    }\r\n    function destroy() {\r\n        destroyPointer('down', elem, handleDown);\r\n        destroyPointer('move', document, move);\r\n        destroyPointer('up', document, handleUp);\r\n    }\r\n    if (!options.disablePan) {\r\n        bind();\r\n    }\r\n    return {\r\n        destroy: destroy,\r\n        getPan: function () { return ({ x: x, y: y }); },\r\n        getScale: function () { return scale; },\r\n        getOptions: function () { return shallowClone(options); },\r\n        pan: pan,\r\n        reset: reset,\r\n        setOptions: setOptions,\r\n        setStyle: function (name, value) { return setStyle(elem, name, value); },\r\n        zoom: zoom,\r\n        zoomIn: zoomIn,\r\n        zoomOut: zoomOut,\r\n        zoomToPoint: zoomToPoint,\r\n        zoomWithWheel: zoomWithWheel\r\n    };\r\n}\r\nPanzoom.defaultOptions = defaultOptions;\r\n/* harmony default export */ var panzoom = __webpack_exports__[\"a\"] = (Panzoom);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,[encoded data, 58504 characters]\n//# sourceURL=webpack-internal:///1\n"
    )
  },
  ,
  function(module, __webpack_exports__, __webpack_require__) {
    'use strict'
    eval(
      "__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _src_panzoom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);\n\r\nconsole.log('This is a demo version of Panzoom for testing.');\r\nconsole.log('It exposes a global (window.Panzoom) and should not be used in production.');\r\nwindow.Panzoom = _src_panzoom__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"];\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kZW1vL2dsb2JhbC1wYW56b29tLnRzPzdiODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFvQztBQUVwQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDO0FBQzdELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLENBQUM7QUFPekYsTUFBTSxDQUFDLE9BQU8sR0FBRyw0REFBTyIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhbnpvb20gZnJvbSAnLi4vc3JjL3Bhbnpvb20nXG5cbmNvbnNvbGUubG9nKCdUaGlzIGlzIGEgZGVtbyB2ZXJzaW9uIG9mIFBhbnpvb20gZm9yIHRlc3RpbmcuJylcbmNvbnNvbGUubG9nKCdJdCBleHBvc2VzIGEgZ2xvYmFsICh3aW5kb3cuUGFuem9vbSkgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBwcm9kdWN0aW9uLicpXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgUGFuem9vbTogdHlwZW9mIFBhbnpvb21cbiAgfVxufVxud2luZG93LlBhbnpvb20gPSBQYW56b29tXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n"
    )
  },
  function(module, exports) {
    eval(
      "/* eslint-disable no-var */\n// Support: IE11 only\nif (window.NodeList && !NodeList.prototype.forEach) {\n  NodeList.prototype.forEach = Array.prototype.forEach\n}\n// Support: IE11 only\n// CustomEvent is an object instead of a constructor\nif (typeof window.CustomEvent !== 'function') {\n  window.CustomEvent = function CustomEvent(event, params) {\n    params = params || { bubbles: false, cancelable: false, detail: null }\n    var evt = document.createEvent('CustomEvent')\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n    return evt\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcG9seWZpbGxzLmpzPzA2NzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gU3VwcG9ydDogSUUxMSBvbmx5XG5pZiAod2luZG93Lk5vZGVMaXN0ICYmICFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCkge1xuICBOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoXG59XG4vLyBTdXBwb3J0OiBJRTExIG9ubHlcbi8vIEN1c3RvbUV2ZW50IGlzIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGEgY29uc3RydWN0b3JcbmlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gIHdpbmRvdy5DdXN0b21FdmVudCA9IGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwgeyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UsIGRldGFpbDogbnVsbCB9XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKVxuICAgIHJldHVybiBldnRcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4\n"
    )
  }
])
