{"version":3,"sources":["jsdelivr-header.js","/npm/simple-panzoom@2.0.2/lib/panzoom.js"],"names":[],"mappings":"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","file":"/npm/simple-panzoom@2.0.2/lib/panzoom.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/simple-panzoom@2.0.2/lib/panzoom.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// src/pointers.ts\nfunction findEventIndex(pointers, event) {\n  let i = pointers.length;\n  while (i--) {\n    if (pointers[i].pointerId === event.pointerId) return i;\n  }\n  return -1;\n}\nfunction addPointer(pointers, event) {\n  const i = findEventIndex(pointers, event);\n  if (i > -1) pointers.splice(i, 1);\n  pointers.push(event);\n}\nfunction removePointer(pointers, event) {\n  const i = findEventIndex(pointers, event);\n  if (i > -1) pointers.splice(i, 1);\n}\nfunction getMiddle(pointers) {\n  const p = pointers.slice(0);\n  let e1 = p.pop();\n  let e2;\n  while (e2 = p.pop()) {\n    e1 = {\n      clientX: (e2.clientX - e1.clientX) / 2 + e1.clientX,\n      clientY: (e2.clientY - e1.clientY) / 2 + e1.clientY\n    };\n  }\n  return e1;\n}\n\n// src/events.ts\nvar events = {\n  down: \"pointerdown\",\n  move: \"pointermove\",\n  up: \"pointerup pointerleave pointercancel\"\n};\nfunction onPointer(event, elem, handler, eventOpts) {\n  events[event].split(\" \").forEach((name) => {\n    elem.addEventListener(name, handler, eventOpts);\n  });\n}\nfunction destroyPointer(event, elem, handler) {\n  events[event].split(\" \").forEach((name) => {\n    elem.removeEventListener(name, handler);\n  });\n}\n\n// src/css.ts\nvar prefixes = [\"webkit\", \"moz\", \"ms\"];\nvar prefixCache = {};\nfunction createStyle() {\n  return document.createElement(\"div\").style;\n}\nfunction getPrefixedName(name) {\n  if (prefixCache[name]) return prefixCache[name];\n  const divStyle = createStyle();\n  if (name in divStyle) return prefixCache[name] = name;\n  const capName = name[0].toUpperCase() + name.slice(1);\n  for (let i = prefixes.length - 1; i >= 0; i--) {\n    const prefixedName = `${prefixes[i]}${capName}`;\n    if (prefixedName in divStyle) return prefixCache[name] = prefixedName;\n  }\n  return name;\n}\nfunction setStyle(elem, name, value) {\n  elem.style[getPrefixedName(name)] = value;\n}\nfunction setTransition(elem, options) {\n  const transform = getPrefixedName(\"transform\");\n  setStyle(elem, \"transition\", `${transform} ${options.duration}ms ${options.easing}`);\n}\nfunction setTransform(elem, { x, y, scale }, _options) {\n  setStyle(elem, \"transform\", `scale(${scale}) translate(${x}px, ${y}px)`);\n}\nfunction getBoxStyle(elem, name, style = window.getComputedStyle(elem)) {\n  const suffix = name === \"border\" ? \"Width\" : \"\";\n  return {\n    left: parseFloat(style[`${name}Left${suffix}`]) || 0,\n    right: parseFloat(style[`${name}Right${suffix}`]) || 0,\n    top: parseFloat(style[`${name}Top${suffix}`]) || 0,\n    bottom: parseFloat(style[`${name}Bottom${suffix}`]) || 0\n  };\n}\nfunction getDimensionsLite(elem) {\n  const parent = elem.parentNode;\n  const rectElem = elem.getBoundingClientRect();\n  const rectParent = parent.getBoundingClientRect();\n  return {\n    elem: {\n      width: rectElem.width,\n      height: rectElem.height,\n      left: rectElem.left,\n      top: rectElem.top\n    },\n    parent: {\n      width: rectParent.width,\n      height: rectParent.height,\n      left: rectParent.left,\n      top: rectParent.top\n    }\n  };\n}\nfunction getDimensionsFull(elem) {\n  const parent = elem.parentNode;\n  const style = window.getComputedStyle(elem);\n  const parentStyle = window.getComputedStyle(parent);\n  const rectElem = elem.getBoundingClientRect();\n  const rectParent = parent.getBoundingClientRect();\n  return {\n    elem: {\n      width: rectElem.width,\n      height: rectElem.height,\n      left: rectElem.left,\n      top: rectElem.top,\n      margin: getBoxStyle(elem, \"margin\", style),\n      border: getBoxStyle(elem, \"border\", style)\n    },\n    parent: {\n      width: rectParent.width,\n      height: rectParent.height,\n      left: rectParent.left,\n      top: rectParent.top,\n      padding: getBoxStyle(parent, \"padding\", parentStyle),\n      border: getBoxStyle(parent, \"border\", parentStyle)\n    }\n  };\n}\n\n// src/isAttached.ts\nfunction isAttached(node) {\n  let currentNode = node;\n  while (currentNode && currentNode.parentNode) {\n    if (currentNode.parentNode === document) return true;\n    currentNode = currentNode.parentNode instanceof ShadowRoot ? currentNode.parentNode.host : currentNode.parentNode;\n  }\n  return false;\n}\n\n// src/shallowClone.ts\nfunction shallowClone(obj) {\n  const clone = {};\n  for (const key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) clone[key] = obj[key];\n  }\n  return clone;\n}\n\n// src/panzoom.ts\nvar defaultOptions = {\n  animate: false,\n  canvas: false,\n  cursor: \"move\",\n  disablePan: false,\n  disableZoom: false,\n  duration: 200,\n  easing: \"ease-in-out\",\n  handleStartEvent: (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n  },\n  maxScale: 4,\n  minScale: 0.125,\n  overflow: \"hidden\",\n  setTransform,\n  startX: 0,\n  startY: 0,\n  startScale: 1,\n  step: 0.3,\n  touchAction: \"none\",\n  origin: \"50% 50%\"\n};\nfunction Panzoom(elem, options) {\n  if (!elem || elem.nodeType !== 1) throw new Error(\"Panzoom requires an element\");\n  if (!isAttached(elem)) throw new Error(\"Panzoom should be called on attached elements\");\n  options = { ...defaultOptions, ...options };\n  const parent = elem.parentNode;\n  parent.style.overflow = options.overflow;\n  parent.style.userSelect = \"none\";\n  parent.style.touchAction = options.touchAction;\n  (options.canvas ? parent : elem).style.cursor = options.cursor;\n  elem.style.userSelect = \"none\";\n  elem.style.touchAction = options.touchAction;\n  setStyle(\n    elem,\n    \"transformOrigin\",\n    typeof options.origin === \"string\" ? options.origin : \"50% 50%\"\n  );\n  function resetStyle() {\n    parent.style.overflow = \"\";\n    parent.style.userSelect = \"\";\n    parent.style.touchAction = \"\";\n    parent.style.cursor = \"\";\n    elem.style.cursor = \"\";\n    elem.style.userSelect = \"\";\n    elem.style.touchAction = \"\";\n    setStyle(elem, \"transformOrigin\", \"\");\n  }\n  function setOptions(opts = {}) {\n    for (const key in opts)\n      if (Object.prototype.hasOwnProperty.call(opts, key))\n        options[key] = opts[key];\n    if (opts.hasOwnProperty(\"cursor\") || opts.hasOwnProperty(\"canvas\")) {\n      parent.style.cursor = elem.style.cursor = \"\";\n      (options.canvas ? parent : elem).style.cursor = options.cursor;\n    }\n    if (opts.hasOwnProperty(\"overflow\")) parent.style.overflow = opts.overflow;\n    if (opts.hasOwnProperty(\"touchAction\")) {\n      parent.style.touchAction = opts.touchAction;\n      elem.style.touchAction = opts.touchAction;\n    }\n  }\n  let x = 0;\n  let y = 0;\n  let scale = 1;\n  let isPanning = false;\n  zoom(options.startScale, { animate: false, force: true });\n  setTimeout(() => {\n    pan(options.startX, options.startY, { animate: false, force: true });\n  });\n  function trigger(detail, opts) {\n    if (opts.silent) return;\n    const event = new CustomEvent(\"panzoomchange\", { detail });\n    elem.dispatchEvent(event);\n  }\n  function setTransformWithEvent(opts, originalEvent) {\n    const value = { x, y, scale };\n    if (typeof opts.animate === \"boolean\") {\n      if (opts.animate) setTransition(elem, opts);\n      else setStyle(elem, \"transition\", \"none\");\n    }\n    opts.setTransform(elem, value, opts);\n    const emit = () => {\n      const dims = opts.contain && opts.contain !== \"none\" ? getDimensionsFull(elem) : getDimensionsLite(elem);\n      trigger({ x, y, scale, dimsOut: dims, originalEvent }, opts);\n    };\n    if (opts.animate) setTimeout(emit, opts.duration + 50);\n    else requestAnimationFrame(emit);\n    return value;\n  }\n  function constrainXY(toX, toY, toScale, panOptions) {\n    const opts = { ...options, ...panOptions };\n    const result = { x, y, opts };\n    if (!opts.force && opts.disablePan === true) return result;\n    toX = parseFloat(toX);\n    toY = parseFloat(toY);\n    result.x = toX;\n    result.y = toY;\n    if (opts.contain && opts.contain !== \"none\") {\n      const dims = getDimensionsFull(elem);\n      const realWidth = dims.elem.width / scale;\n      const realHeight = dims.elem.height / scale;\n      const scaledWidth = realWidth * toScale;\n      const scaledHeight = realHeight * toScale;\n      const diffHorizontal = (scaledWidth - realWidth) / 2;\n      const diffVertical = (scaledHeight - realHeight) / 2;\n      if (opts.contain === \"inside\") {\n        const minX = (-dims.elem.margin.left - dims.parent.padding.left + diffHorizontal) / toScale;\n        const maxX = (dims.parent.width - scaledWidth - dims.parent.padding.left - dims.elem.margin.left - dims.parent.border.left - dims.parent.border.right + diffHorizontal) / toScale;\n        result.x = Math.max(Math.min(result.x, maxX), minX);\n        const minY = (-dims.elem.margin.top - dims.parent.padding.top + diffVertical) / toScale;\n        const maxY = (dims.parent.height - scaledHeight - dims.parent.padding.top - dims.elem.margin.top - dims.parent.border.top - dims.parent.border.bottom + diffVertical) / toScale;\n        result.y = Math.max(Math.min(result.y, maxY), minY);\n      } else if (opts.contain === \"outside\") {\n        const minX = (-(scaledWidth - dims.parent.width) - dims.parent.padding.left - dims.parent.border.left - dims.parent.border.right + diffHorizontal) / toScale;\n        const maxX = (diffHorizontal - dims.parent.padding.left) / toScale;\n        result.x = Math.max(Math.min(result.x, maxX), minX);\n        const minY = (-(scaledHeight - dims.parent.height) - dims.parent.padding.top - dims.parent.border.top - dims.parent.border.bottom + diffVertical) / toScale;\n        const maxY = (diffVertical - dims.parent.padding.top) / toScale;\n        result.y = Math.max(Math.min(result.y, maxY), minY);\n      }\n    }\n    return result;\n  }\n  function constrainScale(toScale, zoomOptions) {\n    const opts = { ...options, ...zoomOptions };\n    const result = { scale, opts };\n    if (!opts.force && opts.disableZoom) return result;\n    let minScale = options.minScale;\n    let maxScale = options.maxScale;\n    if (opts.contain && opts.contain !== \"none\") {\n      const dims = getDimensionsFull(elem);\n      const elemWidth = dims.elem.width / scale;\n      const elemHeight = dims.elem.height / scale;\n      if (elemWidth > 1 && elemHeight > 1) {\n        const parentWidth = dims.parent.width - dims.parent.border.left - dims.parent.border.right;\n        const parentHeight = dims.parent.height - dims.parent.border.top - dims.parent.border.bottom;\n        const elemScaledWidth = parentWidth / elemWidth;\n        const elemScaledHeight = parentHeight / elemHeight;\n        if (options.contain === \"inside\")\n          maxScale = Math.min(maxScale, elemScaledWidth, elemScaledHeight);\n        else if (options.contain === \"outside\")\n          minScale = Math.max(minScale, elemScaledWidth, elemScaledHeight);\n      }\n    }\n    result.scale = Math.min(Math.max(toScale, minScale), maxScale);\n    return result;\n  }\n  function pan(toX, toY, panOptions, originalEvent) {\n    const result = constrainXY(toX, toY, scale, panOptions);\n    if (x !== result.x || y !== result.y) {\n      x = result.x;\n      y = result.y;\n      return setTransformWithEvent(result.opts, originalEvent);\n    }\n    return { x, y, scale };\n  }\n  function zoom(toScale, zoomOptions, originalEvent) {\n    const result = constrainScale(toScale, zoomOptions);\n    const opts = result.opts;\n    if (!opts.force && opts.disableZoom) return { x, y, scale };\n    toScale = result.scale;\n    let toX = x;\n    let toY = y;\n    if (opts.focal) {\n      const focal = opts.focal;\n      toX = (focal.x / toScale - focal.x / scale + x * toScale) / toScale;\n      toY = (focal.y / toScale - focal.y / scale + y * toScale) / toScale;\n    }\n    const panResult = constrainXY(toX, toY, toScale, { relative: false, force: true });\n    x = panResult.x;\n    y = panResult.y;\n    scale = toScale;\n    return setTransformWithEvent(opts, originalEvent);\n  }\n  function zoomInOut(isIn, zoomOptions) {\n    const opts = { ...options, animate: true, ...zoomOptions };\n    return zoom(scale * Math.exp((isIn ? 1 : -1) * opts.step), opts);\n  }\n  function zoomIn(zoomOptions) {\n    const opts = { ...options, animate: true, ...zoomOptions };\n    if (!opts.focal) {\n      const dims = getDimensionsFull(elem);\n      const parentWidth = dims.parent.width - dims.parent.border.left - dims.parent.border.right;\n      const parentHeight = dims.parent.height - dims.parent.border.top - dims.parent.border.bottom;\n      const clientX = dims.parent.left + dims.parent.border.left + dims.parent.padding.left + parentWidth / 2;\n      const clientY = dims.parent.top + dims.parent.border.top + dims.parent.padding.top + parentHeight / 2;\n      return zoomToPoint(scale * Math.exp(opts.step), { clientX, clientY }, opts);\n    }\n    return zoomInOut(true, zoomOptions);\n  }\n  function zoomOut(zoomOptions) {\n    const opts = { ...options, animate: true, ...zoomOptions };\n    if (!opts.focal) {\n      const dims = getDimensionsFull(elem);\n      const parentWidth = dims.parent.width - dims.parent.border.left - dims.parent.border.right;\n      const parentHeight = dims.parent.height - dims.parent.border.top - dims.parent.border.bottom;\n      const clientX = dims.parent.left + dims.parent.border.left + dims.parent.padding.left + parentWidth / 2;\n      const clientY = dims.parent.top + dims.parent.border.top + dims.parent.padding.top + parentHeight / 2;\n      return zoomToPoint(scale * Math.exp(-opts.step), { clientX, clientY }, opts);\n    }\n    return zoomInOut(false, zoomOptions);\n  }\n  function zoomToPoint(toScale, point, zoomOptions, originalEvent) {\n    const dims = getDimensionsFull(elem);\n    const effectiveArea = {\n      width: dims.parent.width - dims.parent.padding.left - dims.parent.padding.right - dims.parent.border.left - dims.parent.border.right,\n      height: dims.parent.height - dims.parent.padding.top - dims.parent.padding.bottom - dims.parent.border.top - dims.parent.border.bottom\n    };\n    let clientX = point.clientX - dims.parent.left - dims.parent.padding.left - dims.parent.border.left - dims.elem.margin.left;\n    let clientY = point.clientY - dims.parent.top - dims.parent.padding.top - dims.parent.border.top - dims.elem.margin.top;\n    if (options.origin !== \"0 0\") {\n      clientX -= dims.elem.width / scale / 2;\n      clientY -= dims.elem.height / scale / 2;\n    }\n    const focal = {\n      x: clientX / effectiveArea.width * (effectiveArea.width * toScale),\n      y: clientY / effectiveArea.height * (effectiveArea.height * toScale)\n    };\n    return zoom(toScale, { ...zoomOptions, animate: false, focal }, originalEvent);\n  }\n  function zoomWithWheel(event, zoomOptions) {\n    event.preventDefault();\n    const opts = { ...options, ...zoomOptions, animate: false };\n    const delta = event.deltaY === 0 && event.deltaX ? event.deltaX : event.deltaY;\n    const wheel = delta < 0 ? 1 : -1;\n    const toScale = constrainScale(\n      scale * Math.exp(wheel * opts.step / 3),\n      opts\n    ).scale;\n    return zoomToPoint(toScale, event, opts, event);\n  }\n  function reset(resetOptions) {\n    const opts = { ...options, animate: true, force: true, ...resetOptions };\n    scale = constrainScale(opts.startScale, opts).scale;\n    const panResult = constrainXY(opts.startX, opts.startY, scale, opts);\n    x = panResult.x;\n    y = panResult.y;\n    return setTransformWithEvent(opts);\n  }\n  let origX;\n  let origY;\n  let startClientX;\n  let startClientY;\n  const pointers = [];\n  function handleDown(event) {\n    addPointer(pointers, event);\n    isPanning = true;\n    options.handleStartEvent(event);\n    origX = x;\n    origY = y;\n    const point = getMiddle(pointers);\n    startClientX = point.clientX;\n    startClientY = point.clientY;\n  }\n  function handleMove(event) {\n    if (!isPanning || origX === void 0 || origY === void 0 || startClientX === void 0 || startClientY === void 0)\n      return;\n    addPointer(pointers, event);\n    const current = getMiddle(pointers);\n    const toScale = scale;\n    pan(\n      origX + (current.clientX - startClientX) / toScale,\n      origY + (current.clientY - startClientY) / toScale,\n      { animate: false },\n      event\n    );\n  }\n  function handleUp(event) {\n    removePointer(pointers, event);\n    if (!isPanning) return;\n    isPanning = false;\n    origX = origY = startClientX = startClientY = void 0;\n  }\n  let bound = false;\n  function bind() {\n    if (bound) return;\n    bound = true;\n    onPointer(\"down\", options.canvas ? parent : elem, handleDown);\n    onPointer(\"move\", document, handleMove, { passive: true });\n    onPointer(\"up\", document, handleUp, { passive: true });\n  }\n  function destroy() {\n    bound = false;\n    destroyPointer(\"down\", options.canvas ? parent : elem, handleDown);\n    destroyPointer(\"move\", document, handleMove);\n    destroyPointer(\"up\", document, handleUp);\n  }\n  if (!options.noBind) bind();\n  return {\n    bind,\n    destroy,\n    getPan: () => ({ x, y }),\n    getScale: () => scale,\n    getOptions: () => shallowClone(options),\n    handleDown,\n    handleMove,\n    handleUp,\n    pan,\n    reset,\n    resetStyle,\n    setOptions,\n    setStyle: (name, value) => setStyle(elem, name, value),\n    zoom,\n    zoomIn,\n    zoomOut,\n    zoomToPoint,\n    zoomWithWheel\n  };\n}\nPanzoom.defaultOptions = defaultOptions;\nvar panzoom_default = Panzoom;\n\nexport { panzoom_default as default };\n"]}