{"version":3,"file":"planck-testbed.umd.cjs","sources":["../../../node_modules/.pnpm/stage-js@1.0.1/node_modules/stage-js/dist/stage.js","../../../node_modules/.pnpm/polymatic@0.0.12/node_modules/polymatic/dist/polymatic.js","../../src/common/Magicboard.ts","../../src/testbed/Gamepad.ts","../../src/testbed/ConsolePlugin.ts","../../src/world-view/ComputedStyle.ts","../../src/world-view/ChainComponent.ts","../../src/world-view/CircleComponent.ts","../../src/world-view/EdgeComponent.ts","../../src/world-view/PolygonComponent.ts","../../src/world-view/JointComponent.ts","../../src/world-view/PulleyComponent.ts","../../src/world-view/BodyComponent.ts","../../src/world-view/WorldView.ts","../../src/world-view/WorldPointer.ts","../../src/common/StageLoader.ts","../../../node_modules/.pnpm/hammerjs@2.0.8/node_modules/hammerjs/hammer.js","../../src/common/ZoomPan.ts","../../src/world-play/ImpulseTool.ts","../../src/world-play/PullTool.ts","../../src/common-tool/ToolSwitch.ts","../../src/testbed/TestbedContext.ts","../../src/common/LookupId.ts","../../src/testbed/Testbed.ts","../../src/common/ContainerLoader.ts","../../src/common/FrameLoop.ts","../../src/world-view/WorldStep.ts","../../src/world-play/TestbedTool.ts","../../src/testbed/TestbedMain.ts","../../src/testbed/runtime.ts"],"sourcesContent":["/**\n * Stage.js v1.0.1\n * @copyright Copyright Ali Shakiba\n * @license Licensed under the MIT (https://github.com/piqnt/stage.js/blob/main/LICENSE.md)\n */\nvar math_random = Math.random;\nvar math_sqrt = Math.sqrt;\nfunction random(min, max) {\n  if (typeof min === \"undefined\") {\n    max = 1;\n    min = 0;\n  } else if (typeof max === \"undefined\") {\n    max = min;\n    min = 0;\n  }\n  return min == max ? min : math_random() * (max - min) + min;\n}\nfunction wrap(num, min, max) {\n  if (typeof min === \"undefined\") {\n    max = 1;\n    min = 0;\n  } else if (typeof max === \"undefined\") {\n    max = min;\n    min = 0;\n  }\n  if (max > min) {\n    num = (num - min) % (max - min);\n    return num + (num < 0 ? max : min);\n  } else {\n    num = (num - max) % (min - max);\n    return num + (num <= 0 ? min : max);\n  }\n}\nfunction clamp(num, min, max) {\n  if (num < min) {\n    return min;\n  } else if (num > max) {\n    return max;\n  } else {\n    return num;\n  }\n}\nfunction length(x, y) {\n  return math_sqrt(x * x + y * y);\n}\nvar math = Object.create(Math);\nmath.random = random;\nmath.wrap = wrap;\nmath.clamp = clamp;\nmath.length = length;\nmath.rotate = wrap;\nmath.limit = clamp;\nvar Matrix = (\n  /** @class */\n  function() {\n    function Matrix2(a, b, c, d, e, f) {\n      this.a = 1;\n      this.b = 0;\n      this.c = 0;\n      this.d = 1;\n      this.e = 0;\n      this.f = 0;\n      if (typeof a === \"object\") {\n        this.reset(a);\n      } else {\n        this.reset(a, b, c, d, e, f);\n      }\n    }\n    Matrix2.prototype.toString = function() {\n      return \"[\" + this.a + \", \" + this.b + \", \" + this.c + \", \" + this.d + \", \" + this.e + \", \" + this.f + \"]\";\n    };\n    Matrix2.prototype.clone = function() {\n      return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f);\n    };\n    Matrix2.prototype.reset = function(a, b, c, d, e, f) {\n      this._dirty = true;\n      if (typeof a === \"object\") {\n        this.a = a.a;\n        this.d = a.d;\n        this.b = a.b;\n        this.c = a.c;\n        this.e = a.e;\n        this.f = a.f;\n      } else {\n        this.a = typeof a === \"number\" ? a : 1;\n        this.b = typeof b === \"number\" ? b : 0;\n        this.c = typeof c === \"number\" ? c : 0;\n        this.d = typeof d === \"number\" ? d : 1;\n        this.e = typeof e === \"number\" ? e : 0;\n        this.f = typeof f === \"number\" ? f : 0;\n      }\n      return this;\n    };\n    Matrix2.prototype.identity = function() {\n      this._dirty = true;\n      this.a = 1;\n      this.b = 0;\n      this.c = 0;\n      this.d = 1;\n      this.e = 0;\n      this.f = 0;\n      return this;\n    };\n    Matrix2.prototype.rotate = function(angle) {\n      if (!angle) {\n        return this;\n      }\n      this._dirty = true;\n      var u = angle ? Math.cos(angle) : 1;\n      var v = angle ? Math.sin(angle) : 0;\n      var a = u * this.a - v * this.b;\n      var b = u * this.b + v * this.a;\n      var c = u * this.c - v * this.d;\n      var d = u * this.d + v * this.c;\n      var e = u * this.e - v * this.f;\n      var f = u * this.f + v * this.e;\n      this.a = a;\n      this.b = b;\n      this.c = c;\n      this.d = d;\n      this.e = e;\n      this.f = f;\n      return this;\n    };\n    Matrix2.prototype.translate = function(x, y) {\n      if (!x && !y) {\n        return this;\n      }\n      this._dirty = true;\n      this.e += x;\n      this.f += y;\n      return this;\n    };\n    Matrix2.prototype.scale = function(x, y) {\n      if (!(x - 1) && !(y - 1)) {\n        return this;\n      }\n      this._dirty = true;\n      this.a *= x;\n      this.b *= y;\n      this.c *= x;\n      this.d *= y;\n      this.e *= x;\n      this.f *= y;\n      return this;\n    };\n    Matrix2.prototype.skew = function(x, y) {\n      if (!x && !y) {\n        return this;\n      }\n      this._dirty = true;\n      var a = this.a + this.b * x;\n      var b = this.b + this.a * y;\n      var c = this.c + this.d * x;\n      var d = this.d + this.c * y;\n      var e = this.e + this.f * x;\n      var f = this.f + this.e * y;\n      this.a = a;\n      this.b = b;\n      this.c = c;\n      this.d = d;\n      this.e = e;\n      this.f = f;\n      return this;\n    };\n    Matrix2.prototype.concat = function(m) {\n      this._dirty = true;\n      var a = this.a * m.a + this.b * m.c;\n      var b = this.b * m.d + this.a * m.b;\n      var c = this.c * m.a + this.d * m.c;\n      var d = this.d * m.d + this.c * m.b;\n      var e = this.e * m.a + m.e + this.f * m.c;\n      var f = this.f * m.d + m.f + this.e * m.b;\n      this.a = a;\n      this.b = b;\n      this.c = c;\n      this.d = d;\n      this.e = e;\n      this.f = f;\n      return this;\n    };\n    Matrix2.prototype.inverse = function() {\n      if (this._dirty) {\n        this._dirty = false;\n        if (!this.inverted) {\n          this.inverted = new Matrix2();\n        }\n        var z = this.a * this.d - this.b * this.c;\n        this.inverted.a = this.d / z;\n        this.inverted.b = -this.b / z;\n        this.inverted.c = -this.c / z;\n        this.inverted.d = this.a / z;\n        this.inverted.e = (this.c * this.f - this.e * this.d) / z;\n        this.inverted.f = (this.e * this.b - this.a * this.f) / z;\n      }\n      return this.inverted;\n    };\n    Matrix2.prototype.map = function(p, q) {\n      q = q || { x: 0, y: 0 };\n      q.x = this.a * p.x + this.c * p.y + this.e;\n      q.y = this.b * p.x + this.d * p.y + this.f;\n      return q;\n    };\n    Matrix2.prototype.mapX = function(x, y) {\n      if (typeof x === \"object\") {\n        y = x.y;\n        x = x.x;\n      }\n      return this.a * x + this.c * y + this.e;\n    };\n    Matrix2.prototype.mapY = function(x, y) {\n      if (typeof x === \"object\") {\n        y = x.y;\n        x = x.x;\n      }\n      return this.b * x + this.d * y + this.f;\n    };\n    return Matrix2;\n  }()\n);\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n    d2.__proto__ = b2;\n  } || function(d2, b2) {\n    for (var p in b2) if (b2.hasOwnProperty(p)) d2[p] = b2[p];\n  };\n  return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n  extendStatics(d, b);\n  function __() {\n    this.constructor = d;\n  }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function() {\n  __assign = Object.assign || function __assign2(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n    }\n    return t;\n  };\n  return __assign.apply(this, arguments);\n};\nfunction __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, [])).next());\n  });\n}\nfunction __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() {\n    if (t[0] & 1) throw t[1];\n    return t[1];\n  }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n    return this;\n  }), g;\n  function verb(n) {\n    return function(v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (_) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return { value: op[1], done: false };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\nvar objectToString = Object.prototype.toString;\nfunction isFn(value) {\n  var str = objectToString.call(value);\n  return str === \"[object Function]\" || str === \"[object GeneratorFunction]\" || str === \"[object AsyncFunction]\";\n}\nfunction isHash(value) {\n  return objectToString.call(value) === \"[object Object]\" && value.constructor === Object;\n}\nconst stats = {\n  create: 0,\n  tick: 0,\n  component: 0,\n  draw: 0,\n  fps: 0\n};\nvar uid = function() {\n  return Date.now().toString(36) + Math.random().toString(36).slice(2);\n};\nvar Texture = (\n  /** @class */\n  function() {\n    function Texture2() {\n      this.uid = \"texture:\" + uid();\n      this.sx = 0;\n      this.sy = 0;\n      this.dx = 0;\n      this.dy = 0;\n    }\n    Texture2.prototype.setSourceCoordinate = function(x, y) {\n      this.sx = x;\n      this.sy = y;\n    };\n    Texture2.prototype.setSourceDimension = function(w, h) {\n      this.sw = w;\n      this.sh = h;\n    };\n    Texture2.prototype.setDestinationCoordinate = function(x, y) {\n      this.dx = x;\n      this.dy = y;\n    };\n    Texture2.prototype.setDestinationDimension = function(w, h) {\n      this.dw = w;\n      this.dh = h;\n    };\n    Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) {\n      var sx, sy, sw, sh;\n      var dx, dy, dw, dh;\n      if (arguments.length > 5) {\n        sx = this.sx + x1;\n        sy = this.sy + y1;\n        sw = w1 !== null && w1 !== void 0 ? w1 : this.sw;\n        sh = h1 !== null && h1 !== void 0 ? h1 : this.sh;\n        dx = this.dx + x2;\n        dy = this.dy + y2;\n        dw = w2 !== null && w2 !== void 0 ? w2 : this.dw;\n        dh = h2 !== null && h2 !== void 0 ? h2 : this.dh;\n      } else if (arguments.length > 1) {\n        sx = this.sx;\n        sy = this.sy;\n        sw = this.sw;\n        sh = this.sh;\n        dx = this.dx + x1;\n        dy = this.dy + y1;\n        dw = w1 !== null && w1 !== void 0 ? w1 : this.dw;\n        dh = h1 !== null && h1 !== void 0 ? h1 : this.dh;\n      } else {\n        sx = this.sx;\n        sy = this.sy;\n        sw = this.sw;\n        sh = this.sh;\n        dx = this.dx;\n        dy = this.dy;\n        dw = this.dw;\n        dh = this.dh;\n      }\n      this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh);\n    };\n    return Texture2;\n  }()\n);\nvar ImageTexture = (\n  /** @class */\n  function(_super) {\n    __extends(ImageTexture2, _super);\n    function ImageTexture2(source, pixelRatio) {\n      var _this = _super.call(this) || this;\n      _this._pixelRatio = 1;\n      _this.padding = 0;\n      if (typeof source === \"object\") {\n        _this.setSourceImage(source, pixelRatio);\n      }\n      return _this;\n    }\n    ImageTexture2.prototype.setSourceImage = function(image, pixelRatio) {\n      if (pixelRatio === void 0) {\n        pixelRatio = 1;\n      }\n      this._source = image;\n      this._pixelRatio = pixelRatio;\n    };\n    ImageTexture2.prototype.setPadding = function(padding) {\n      this.padding = padding;\n    };\n    ImageTexture2.prototype.getWidth = function() {\n      return this._source.width / this._pixelRatio + (this.padding + this.padding);\n    };\n    ImageTexture2.prototype.getHeight = function() {\n      return this._source.height / this._pixelRatio + (this.padding + this.padding);\n    };\n    ImageTexture2.prototype.prerender = function(context) {\n      return false;\n    };\n    ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n      var image = this._source;\n      if (image === null || typeof image !== \"object\") {\n        return;\n      }\n      sw = sw !== null && sw !== void 0 ? sw : this._source.width / this._pixelRatio;\n      sh = sh !== null && sh !== void 0 ? sh : this._source.height / this._pixelRatio;\n      dw = dw !== null && dw !== void 0 ? dw : sw;\n      dh = dh !== null && dh !== void 0 ? dh : sh;\n      dx += this.padding;\n      dy += this.padding;\n      var ix = sx * this._pixelRatio;\n      var iy = sy * this._pixelRatio;\n      var iw = sw * this._pixelRatio;\n      var ih = sh * this._pixelRatio;\n      try {\n        stats.draw++;\n        context.drawImage(image, ix, iy, iw, ih, dx, dy, dw, dh);\n      } catch (ex) {\n        if (!this._draw_failed) {\n          console.log(\"Unable to draw: \", image);\n          console.log(ex);\n          this._draw_failed = true;\n        }\n      }\n    };\n    return ImageTexture2;\n  }(Texture)\n);\nvar PipeTexture = (\n  /** @class */\n  function(_super) {\n    __extends(PipeTexture2, _super);\n    function PipeTexture2(source) {\n      var _this = _super.call(this) || this;\n      _this._source = source;\n      return _this;\n    }\n    PipeTexture2.prototype.setSourceTexture = function(texture2) {\n      this._source = texture2;\n    };\n    PipeTexture2.prototype.getWidth = function() {\n      var _a, _b;\n      return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth();\n    };\n    PipeTexture2.prototype.getHeight = function() {\n      var _a, _b;\n      return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight();\n    };\n    PipeTexture2.prototype.prerender = function(context) {\n      return this._source.prerender(context);\n    };\n    PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n      var texture2 = this._source;\n      if (texture2 === null || typeof texture2 !== \"object\") {\n        return;\n      }\n      texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh);\n    };\n    return PipeTexture2;\n  }(Texture)\n);\nvar Atlas = (\n  /** @class */\n  function(_super) {\n    __extends(Atlas2, _super);\n    function Atlas2(def) {\n      if (def === void 0) {\n        def = {};\n      }\n      var _this = _super.call(this) || this;\n      _this.pipeSpriteTexture = function(def2) {\n        var map = _this._map;\n        var ppu = _this._ppu;\n        var trim = _this._trim;\n        if (!def2) {\n          return void 0;\n        }\n        def2 = Object.assign({}, def2);\n        if (isFn(map)) {\n          def2 = map(def2);\n        }\n        if (ppu != 1) {\n          def2.x *= ppu;\n          def2.y *= ppu;\n          def2.width *= ppu;\n          def2.height *= ppu;\n          def2.top *= ppu;\n          def2.bottom *= ppu;\n          def2.left *= ppu;\n          def2.right *= ppu;\n        }\n        if (trim != 0) {\n          def2.x += trim;\n          def2.y += trim;\n          def2.width -= 2 * trim;\n          def2.height -= 2 * trim;\n          def2.top -= trim;\n          def2.bottom -= trim;\n          def2.left -= trim;\n          def2.right -= trim;\n        }\n        var texture2 = new PipeTexture(_this);\n        texture2.top = def2.top;\n        texture2.bottom = def2.bottom;\n        texture2.left = def2.left;\n        texture2.right = def2.right;\n        texture2.setSourceCoordinate(def2.x, def2.y);\n        texture2.setSourceDimension(def2.width, def2.height);\n        return texture2;\n      };\n      _this.findSpriteDefinition = function(query) {\n        var textures = _this._textures;\n        if (textures) {\n          if (isFn(textures)) {\n            return textures(query);\n          } else if (isHash(textures)) {\n            return textures[query];\n          }\n        }\n      };\n      _this.select = function(query) {\n        if (!query) {\n          return new TextureSelection(new PipeTexture(_this));\n        }\n        var textureDefinition = _this.findSpriteDefinition(query);\n        if (textureDefinition) {\n          return new TextureSelection(textureDefinition, _this);\n        }\n      };\n      _this.name = def.name;\n      _this._ppu = def.ppu || def.ratio || 1;\n      _this._trim = def.trim || 0;\n      _this._map = def.map || def.filter;\n      _this._textures = def.textures;\n      if (typeof def.image === \"object\" && isHash(def.image)) {\n        if (\"src\" in def.image) {\n          _this._imageSrc = def.image.src;\n        } else if (\"url\" in def.image) {\n          _this._imageSrc = def.image.url;\n        }\n        if (typeof def.image.ratio === \"number\") {\n          _this._pixelRatio = def.image.ratio;\n        }\n      } else {\n        if (typeof def.imagePath === \"string\") {\n          _this._imageSrc = def.imagePath;\n        } else if (typeof def.image === \"string\") {\n          _this._imageSrc = def.image;\n        }\n        if (typeof def.imageRatio === \"number\") {\n          _this._pixelRatio = def.imageRatio;\n        }\n      }\n      deprecatedWarning(def);\n      return _this;\n    }\n    Atlas2.prototype.load = function() {\n      return __awaiter(this, void 0, void 0, function() {\n        var image;\n        return __generator(this, function(_a) {\n          switch (_a.label) {\n            case 0:\n              if (!this._imageSrc) return [3, 2];\n              return [4, asyncLoadImage(this._imageSrc)];\n            case 1:\n              image = _a.sent();\n              this.setSourceImage(image, this._pixelRatio);\n              _a.label = 2;\n            case 2:\n              return [\n                2\n                /*return*/\n              ];\n          }\n        });\n      });\n    };\n    return Atlas2;\n  }(ImageTexture)\n);\nfunction asyncLoadImage(src) {\n  console.debug && console.debug(\"Loading image: \" + src);\n  return new Promise(function(resolve, reject) {\n    var img = new Image();\n    img.onload = function() {\n      console.debug && console.debug(\"Image loaded: \" + src);\n      resolve(img);\n    };\n    img.onerror = function(error) {\n      console.error(\"Loading failed: \" + src);\n      reject(error);\n    };\n    img.src = src;\n  });\n}\nfunction deprecatedWarning(def) {\n  if (\"filter\" in def)\n    console.warn(\"'filter' field of atlas definition is deprecated\");\n  if (\"cutouts\" in def)\n    console.warn(\"'cutouts' field of atlas definition is deprecated\");\n  if (\"sprites\" in def)\n    console.warn(\"'sprites' field of atlas definition is deprecated\");\n  if (\"factory\" in def)\n    console.warn(\"'factory' field of atlas definition is deprecated\");\n  if (\"ratio\" in def)\n    console.warn(\"'ratio' field of atlas definition is deprecated\");\n  if (\"imagePath\" in def)\n    console.warn(\"'imagePath' field of atlas definition is deprecated\");\n  if (\"imageRatio\" in def)\n    console.warn(\"'imageRatio' field of atlas definition is deprecated\");\n  if (typeof def.image === \"object\" && \"url\" in def.image)\n    console.warn(\"'image.url' field of atlas definition is deprecated\");\n}\nfunction isAtlasSpriteDefinition(selection) {\n  return typeof selection === \"object\" && isHash(selection) && \"number\" === typeof selection.width && \"number\" === typeof selection.height;\n}\nvar TextureSelection = (\n  /** @class */\n  function() {\n    function TextureSelection2(selection, atlas2) {\n      this.selection = selection;\n      this.atlas = atlas2;\n    }\n    TextureSelection2.prototype.resolve = function(selection, subquery) {\n      if (!selection) {\n        return NO_TEXTURE;\n      } else if (Array.isArray(selection)) {\n        return this.resolve(selection[0]);\n      } else if (selection instanceof Texture) {\n        return selection;\n      } else if (isAtlasSpriteDefinition(selection)) {\n        if (!this.atlas) {\n          return NO_TEXTURE;\n        }\n        return this.atlas.pipeSpriteTexture(selection);\n      } else if (typeof selection === \"object\" && isHash(selection) && typeof subquery !== \"undefined\") {\n        return this.resolve(selection[subquery]);\n      } else if (typeof selection === \"function\" && isFn(selection)) {\n        return this.resolve(selection(subquery));\n      } else if (typeof selection === \"string\") {\n        if (!this.atlas) {\n          return NO_TEXTURE;\n        }\n        return this.resolve(this.atlas.findSpriteDefinition(selection));\n      }\n    };\n    TextureSelection2.prototype.one = function(subquery) {\n      return this.resolve(this.selection, subquery);\n    };\n    TextureSelection2.prototype.array = function(arr) {\n      var array = Array.isArray(arr) ? arr : [];\n      if (Array.isArray(this.selection)) {\n        for (var i = 0; i < this.selection.length; i++) {\n          array[i] = this.resolve(this.selection[i]);\n        }\n      } else {\n        array[0] = this.resolve(this.selection);\n      }\n      return array;\n    };\n    return TextureSelection2;\n  }()\n);\nvar NO_TEXTURE = new /** @class */\n(function(_super) {\n  __extends(class_1, _super);\n  function class_1() {\n    var _this = _super.call(this) || this;\n    _this.setSourceDimension(0, 0);\n    return _this;\n  }\n  class_1.prototype.getWidth = function() {\n    return 0;\n  };\n  class_1.prototype.getHeight = function() {\n    return 0;\n  };\n  class_1.prototype.prerender = function(context) {\n    return false;\n  };\n  class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n  };\n  class_1.prototype.setSourceCoordinate = function(x, y) {\n  };\n  class_1.prototype.setSourceDimension = function(w, h) {\n  };\n  class_1.prototype.setDestinationCoordinate = function(x, y) {\n  };\n  class_1.prototype.setDestinationDimension = function(w, h) {\n  };\n  class_1.prototype.draw = function() {\n  };\n  return class_1;\n}(Texture))();\nvar NO_SELECTION = new TextureSelection(NO_TEXTURE);\nvar ATLAS_MEMO_BY_NAME = {};\nvar ATLAS_ARRAY = [];\nvar PRELOADING = [];\nfunction atlas(def) {\n  return __awaiter(this, void 0, void 0, function() {\n    var atlas2, promise;\n    return __generator(this, function(_a) {\n      switch (_a.label) {\n        case 0:\n          if (def instanceof Atlas) {\n            atlas2 = def;\n          } else {\n            atlas2 = new Atlas(def);\n          }\n          if (atlas2.name) {\n            ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2;\n          }\n          ATLAS_ARRAY.push(atlas2);\n          promise = atlas2.load();\n          PRELOADING.push(promise);\n          return [4, promise];\n        case 1:\n          _a.sent();\n          return [2, atlas2];\n      }\n    });\n  });\n}\nvar preload = function(def) {\n  return __awaiter(void 0, void 0, void 0, function() {\n    return __generator(this, function(_a) {\n      switch (_a.label) {\n        case 0:\n          return [4, Promise.all(PRELOADING.map(function(atlas2) {\n            return Promise.resolve(atlas2).then(function(val) {\n            }).catch(function(err) {\n            });\n          }))];\n        case 1:\n          _a.sent();\n          return [\n            2\n            /*return*/\n          ];\n      }\n    });\n  });\n};\nfunction texture(query) {\n  if (\"string\" !== typeof query) {\n    return new TextureSelection(query);\n  }\n  var result = null;\n  var colonIndex = query.indexOf(\":\");\n  if (colonIndex > 0 && query.length > colonIndex + 1) {\n    var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)];\n    result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1));\n  }\n  if (!result) {\n    var atlas_2 = ATLAS_MEMO_BY_NAME[query];\n    result = atlas_2 && atlas_2.select();\n  }\n  if (!result) {\n    for (var i = 0; i < ATLAS_ARRAY.length; i++) {\n      result = ATLAS_ARRAY[i].select(query);\n      if (result) {\n        break;\n      }\n    }\n  }\n  if (!result) {\n    console.error(\"Texture not found: \" + query);\n    result = NO_SELECTION;\n  }\n  return result;\n}\nvar ResizableTexture = (\n  /** @class */\n  function(_super) {\n    __extends(ResizableTexture2, _super);\n    function ResizableTexture2(source, mode) {\n      var _this = _super.call(this) || this;\n      _this._source = source;\n      _this._resizeMode = mode;\n      return _this;\n    }\n    ResizableTexture2.prototype.getWidth = function() {\n      var _a;\n      return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth();\n    };\n    ResizableTexture2.prototype.getHeight = function() {\n      var _a;\n      return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight();\n    };\n    ResizableTexture2.prototype.prerender = function(context) {\n      return false;\n    };\n    ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n      var texture2 = this._source;\n      if (texture2 === null || typeof texture2 !== \"object\") {\n        return;\n      }\n      var outWidth = dw;\n      var outHeight = dh;\n      var left = Number.isFinite(texture2.left) ? texture2.left : 0;\n      var right = Number.isFinite(texture2.right) ? texture2.right : 0;\n      var top = Number.isFinite(texture2.top) ? texture2.top : 0;\n      var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0;\n      var width = texture2.getWidth() - left - right;\n      var height = texture2.getHeight() - top - bottom;\n      if (!this._innerSize) {\n        outWidth = Math.max(outWidth - left - right, 0);\n        outHeight = Math.max(outHeight - top - bottom, 0);\n      }\n      if (top > 0 && left > 0) {\n        texture2.draw(context, 0, 0, left, top, 0, 0, left, top);\n      }\n      if (bottom > 0 && left > 0) {\n        texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom);\n      }\n      if (top > 0 && right > 0) {\n        texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top);\n      }\n      if (bottom > 0 && right > 0) {\n        texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom);\n      }\n      if (this._resizeMode === \"stretch\") {\n        if (top > 0) {\n          texture2.draw(context, left, 0, width, top, left, 0, outWidth, top);\n        }\n        if (bottom > 0) {\n          texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom);\n        }\n        if (left > 0) {\n          texture2.draw(context, 0, top, left, height, 0, top, left, outHeight);\n        }\n        if (right > 0) {\n          texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight);\n        }\n        texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight);\n      } else if (this._resizeMode === \"tile\") {\n        var l = left;\n        var r = outWidth;\n        var w = void 0;\n        while (r > 0) {\n          w = Math.min(width, r);\n          r -= width;\n          var t = top;\n          var b = outHeight;\n          var h = void 0;\n          while (b > 0) {\n            h = Math.min(height, b);\n            b -= height;\n            texture2.draw(context, left, top, w, h, l, t, w, h);\n            if (r <= 0) {\n              if (left) {\n                texture2.draw(context, 0, top, left, h, 0, t, left, h);\n              }\n              if (right) {\n                texture2.draw(context, width + left, top, right, h, l + w, t, right, h);\n              }\n            }\n            t += h;\n          }\n          if (top) {\n            texture2.draw(context, left, 0, w, top, l, 0, w, top);\n          }\n          if (bottom) {\n            texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom);\n          }\n          l += w;\n        }\n      }\n    };\n    return ResizableTexture2;\n  }(Texture)\n);\nfunction getDevicePixelRatio() {\n  return typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n}\nfunction isValidFitMode(value) {\n  return value && (value === \"cover\" || value === \"contain\" || value === \"fill\" || value === \"in\" || value === \"in-pad\" || value === \"out\" || value === \"out-crop\");\n}\nvar iid$1 = 0;\nvar Pin = (\n  /** @class */\n  function() {\n    function Pin2(owner) {\n      this.uid = \"pin:\" + uid();\n      this._directionX = 1;\n      this._directionY = 1;\n      this._owner = owner;\n      this._parent = null;\n      this._relativeMatrix = new Matrix();\n      this._absoluteMatrix = new Matrix();\n      this.reset();\n    }\n    Pin2.prototype.reset = function() {\n      this._textureAlpha = 1;\n      this._alpha = 1;\n      this._width = 0;\n      this._height = 0;\n      this._scaleX = 1;\n      this._scaleY = 1;\n      this._skewX = 0;\n      this._skewY = 0;\n      this._rotation = 0;\n      this._pivoted = false;\n      this._pivotX = 0;\n      this._pivotY = 0;\n      this._handled = false;\n      this._handleX = 0;\n      this._handleY = 0;\n      this._aligned = false;\n      this._alignX = 0;\n      this._alignY = 0;\n      this._offsetX = 0;\n      this._offsetY = 0;\n      this._boxX = 0;\n      this._boxY = 0;\n      this._boxWidth = this._width;\n      this._boxHeight = this._height;\n      this._ts_translate = ++iid$1;\n      this._ts_transform = ++iid$1;\n      this._ts_matrix = ++iid$1;\n    };\n    Pin2.prototype._update = function() {\n      this._parent = this._owner._parent && this._owner._parent._pin;\n      if (this._handled && this._mo_handle != this._ts_transform) {\n        this._mo_handle = this._ts_transform;\n        this._ts_translate = ++iid$1;\n      }\n      if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) {\n        this._mo_align = this._parent._ts_transform;\n        this._ts_translate = ++iid$1;\n      }\n      return this;\n    };\n    Pin2.prototype.toString = function() {\n      return this._owner + \" (\" + (this._parent ? this._parent._owner : null) + \")\";\n    };\n    Pin2.prototype.absoluteMatrix = function() {\n      this._update();\n      var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0);\n      if (this._mo_abs == ts) {\n        return this._absoluteMatrix;\n      }\n      this._mo_abs = ts;\n      var abs = this._absoluteMatrix;\n      abs.reset(this.relativeMatrix());\n      this._parent && abs.concat(this._parent._absoluteMatrix);\n      this._ts_matrix = ++iid$1;\n      return abs;\n    };\n    Pin2.prototype.relativeMatrix = function() {\n      this._update();\n      var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0);\n      if (this._mo_rel == ts) {\n        return this._relativeMatrix;\n      }\n      this._mo_rel = ts;\n      var rel = this._relativeMatrix;\n      rel.identity();\n      if (this._pivoted) {\n        rel.translate(-this._pivotX * this._width, -this._pivotY * this._height);\n      }\n      rel.scale(this._scaleX * this._directionX, this._scaleY * this._directionY);\n      rel.skew(this._skewX, this._skewY);\n      rel.rotate(this._rotation);\n      if (this._pivoted) {\n        rel.translate(this._pivotX * this._width, this._pivotY * this._height);\n      }\n      if (this._pivoted) {\n        this._boxX = 0;\n        this._boxY = 0;\n        this._boxWidth = this._width;\n        this._boxHeight = this._height;\n      } else {\n        var p = void 0;\n        var q = void 0;\n        if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) {\n          p = 0;\n          q = rel.a * this._width + rel.c * this._height;\n        } else {\n          p = rel.a * this._width;\n          q = rel.c * this._height;\n        }\n        if (p > q) {\n          this._boxX = q;\n          this._boxWidth = p - q;\n        } else {\n          this._boxX = p;\n          this._boxWidth = q - p;\n        }\n        if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) {\n          p = 0;\n          q = rel.b * this._width + rel.d * this._height;\n        } else {\n          p = rel.b * this._width;\n          q = rel.d * this._height;\n        }\n        if (p > q) {\n          this._boxY = q;\n          this._boxHeight = p - q;\n        } else {\n          this._boxY = p;\n          this._boxHeight = q - p;\n        }\n      }\n      this._x = this._offsetX;\n      this._y = this._offsetY;\n      this._x -= this._boxX + this._handleX * this._boxWidth * this._directionX;\n      this._y -= this._boxY + this._handleY * this._boxHeight * this._directionY;\n      if (this._aligned && this._parent) {\n        this._parent.relativeMatrix();\n        this._x += this._alignX * this._parent._width;\n        this._y += this._alignY * this._parent._height;\n      }\n      rel.translate(this._x, this._y);\n      return this._relativeMatrix;\n    };\n    Pin2.prototype.get = function(key) {\n      if (typeof getters[key] === \"function\") {\n        return getters[key](this);\n      }\n    };\n    Pin2.prototype.set = function(a, b) {\n      if (typeof a === \"string\") {\n        if (typeof setters[a] === \"function\" && typeof b !== \"undefined\") {\n          setters[a](this, b);\n        }\n      } else if (typeof a === \"object\") {\n        for (b in a) {\n          if (typeof setters[b] === \"function\" && typeof a[b] !== \"undefined\") {\n            setters[b](this, a[b], a);\n          }\n        }\n      }\n      if (this._owner) {\n        this._owner._ts_pin = ++iid$1;\n        this._owner.touch();\n      }\n      return this;\n    };\n    Pin2.prototype.fit = function(width, height, mode) {\n      this._ts_transform = ++iid$1;\n      if (mode === \"contain\") {\n        mode = \"in-pad\";\n      }\n      if (mode === \"cover\") {\n        mode = \"out-crop\";\n      }\n      if (typeof width === \"number\") {\n        this._scaleX = width / this._unscaled_width;\n        this._width = this._unscaled_width;\n      }\n      if (typeof height === \"number\") {\n        this._scaleY = height / this._unscaled_height;\n        this._height = this._unscaled_height;\n      }\n      if (typeof width === \"number\" && typeof height === \"number\" && typeof mode === \"string\") {\n        if (mode === \"fill\") ;\n        else if (mode === \"out\" || mode === \"out-crop\") {\n          this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY);\n        } else if (mode === \"in\" || mode === \"in-pad\") {\n          this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY);\n        }\n        if (mode === \"out-crop\" || mode === \"in-pad\") {\n          this._width = width / this._scaleX;\n          this._height = height / this._scaleY;\n        }\n      }\n    };\n    return Pin2;\n  }()\n);\nvar getters = {\n  alpha: function(pin) {\n    return pin._alpha;\n  },\n  textureAlpha: function(pin) {\n    return pin._textureAlpha;\n  },\n  width: function(pin) {\n    return pin._width;\n  },\n  height: function(pin) {\n    return pin._height;\n  },\n  boxWidth: function(pin) {\n    return pin._boxWidth;\n  },\n  boxHeight: function(pin) {\n    return pin._boxHeight;\n  },\n  // scale : function(pin: Pin) {\n  // },\n  scaleX: function(pin) {\n    return pin._scaleX;\n  },\n  scaleY: function(pin) {\n    return pin._scaleY;\n  },\n  // skew : function(pin: Pin) {\n  // },\n  skewX: function(pin) {\n    return pin._skewX;\n  },\n  skewY: function(pin) {\n    return pin._skewY;\n  },\n  rotation: function(pin) {\n    return pin._rotation;\n  },\n  // pivot : function(pin: Pin) {\n  // },\n  pivotX: function(pin) {\n    return pin._pivotX;\n  },\n  pivotY: function(pin) {\n    return pin._pivotY;\n  },\n  // offset : function(pin: Pin) {\n  // },\n  offsetX: function(pin) {\n    return pin._offsetX;\n  },\n  offsetY: function(pin) {\n    return pin._offsetY;\n  },\n  // align : function(pin: Pin) {\n  // },\n  alignX: function(pin) {\n    return pin._alignX;\n  },\n  alignY: function(pin) {\n    return pin._alignY;\n  },\n  // handle : function(pin: Pin) {\n  // },\n  handleX: function(pin) {\n    return pin._handleX;\n  },\n  handleY: function(pin) {\n    return pin._handleY;\n  }\n};\nvar setters = {\n  alpha: function(pin, value) {\n    pin._alpha = value;\n  },\n  textureAlpha: function(pin, value) {\n    pin._textureAlpha = value;\n  },\n  width: function(pin, value) {\n    pin._unscaled_width = value;\n    pin._width = value;\n    pin._ts_transform = ++iid$1;\n  },\n  height: function(pin, value) {\n    pin._unscaled_height = value;\n    pin._height = value;\n    pin._ts_transform = ++iid$1;\n  },\n  scale: function(pin, value) {\n    pin._scaleX = value;\n    pin._scaleY = value;\n    pin._ts_transform = ++iid$1;\n  },\n  scaleX: function(pin, value) {\n    pin._scaleX = value;\n    pin._ts_transform = ++iid$1;\n  },\n  scaleY: function(pin, value) {\n    pin._scaleY = value;\n    pin._ts_transform = ++iid$1;\n  },\n  skew: function(pin, value) {\n    pin._skewX = value;\n    pin._skewY = value;\n    pin._ts_transform = ++iid$1;\n  },\n  skewX: function(pin, value) {\n    pin._skewX = value;\n    pin._ts_transform = ++iid$1;\n  },\n  skewY: function(pin, value) {\n    pin._skewY = value;\n    pin._ts_transform = ++iid$1;\n  },\n  rotation: function(pin, value) {\n    pin._rotation = value;\n    pin._ts_transform = ++iid$1;\n  },\n  pivot: function(pin, value) {\n    pin._pivotX = value;\n    pin._pivotY = value;\n    pin._pivoted = true;\n    pin._ts_transform = ++iid$1;\n  },\n  pivotX: function(pin, value) {\n    pin._pivotX = value;\n    pin._pivoted = true;\n    pin._ts_transform = ++iid$1;\n  },\n  pivotY: function(pin, value) {\n    pin._pivotY = value;\n    pin._pivoted = true;\n    pin._ts_transform = ++iid$1;\n  },\n  offset: function(pin, value) {\n    pin._offsetX = value;\n    pin._offsetY = value;\n    pin._ts_translate = ++iid$1;\n  },\n  offsetX: function(pin, value) {\n    pin._offsetX = value;\n    pin._ts_translate = ++iid$1;\n  },\n  offsetY: function(pin, value) {\n    pin._offsetY = value;\n    pin._ts_translate = ++iid$1;\n  },\n  align: function(pin, value) {\n    this.alignX(pin, value);\n    this.alignY(pin, value);\n  },\n  alignX: function(pin, value) {\n    pin._alignX = value;\n    pin._aligned = true;\n    pin._ts_translate = ++iid$1;\n    this.handleX(pin, value);\n  },\n  alignY: function(pin, value) {\n    pin._alignY = value;\n    pin._aligned = true;\n    pin._ts_translate = ++iid$1;\n    this.handleY(pin, value);\n  },\n  handle: function(pin, value) {\n    this.handleX(pin, value);\n    this.handleY(pin, value);\n  },\n  handleX: function(pin, value) {\n    pin._handleX = value;\n    pin._handled = true;\n    pin._ts_translate = ++iid$1;\n  },\n  handleY: function(pin, value) {\n    pin._handleY = value;\n    pin._handled = true;\n    pin._ts_translate = ++iid$1;\n  },\n  resizeMode: function(pin, value, all) {\n    if (all) {\n      if (value == \"in\") {\n        value = \"in-pad\";\n      } else if (value == \"out\") {\n        value = \"out-crop\";\n      }\n      pin.fit(all.resizeWidth, all.resizeHeight, value);\n    }\n  },\n  resizeWidth: function(pin, value, all) {\n    if (!all || !all.resizeMode) {\n      pin.fit(value, null);\n    }\n  },\n  resizeHeight: function(pin, value, all) {\n    if (!all || !all.resizeMode) {\n      pin.fit(null, value);\n    }\n  },\n  scaleMode: function(pin, value, all) {\n    if (all) {\n      pin.fit(all.scaleWidth, all.scaleHeight, value);\n    }\n  },\n  scaleWidth: function(pin, value, all) {\n    if (!all || !all.scaleMode) {\n      pin.fit(value, null);\n    }\n  },\n  scaleHeight: function(pin, value, all) {\n    if (!all || !all.scaleMode) {\n      pin.fit(null, value);\n    }\n  },\n  matrix: function(pin, value) {\n    this.scaleX(pin, value.a);\n    this.skewX(pin, value.c / value.d);\n    this.skewY(pin, value.b / value.a);\n    this.scaleY(pin, value.d);\n    this.offsetX(pin, value.e);\n    this.offsetY(pin, value.f);\n    this.rotation(pin, 0);\n  }\n};\nvar IDENTITY = function(x) {\n  return x;\n};\nvar Easing = (\n  /** @class */\n  function() {\n    function Easing2() {\n    }\n    Easing2.init = function(query, params) {\n      if (typeof query === \"function\")\n        return query;\n      if (typeof query !== \"string\")\n        return void 0;\n      var easing;\n      if (query.indexOf(\"(\") === -1) {\n        easing = initEasing(query, params);\n      } else {\n        var tokens = /^((\\w|-)+)?(\\((.*)\\))?$/i.exec(query);\n        if (tokens || tokens.length) {\n          var name2 = tokens[1];\n          var params2 = JSON.parse(\"[\" + tokens[4] + \"]\");\n          easing = initEasing(name2, params2);\n        }\n      }\n      return easing;\n    };\n    return Easing2;\n  }()\n);\nvar initEasing = function(query, params) {\n  var easing;\n  var easingFunction = EasingFunctions[query];\n  var easingFactory = EasingFactories[query];\n  if (easingFunction) {\n    easing = easingFunction;\n  } else if (easingFactory) {\n    if (params) {\n      easing = easingFactory.apply(null, params);\n    } else {\n      easing = easingFactory();\n    }\n  }\n  return easing;\n};\nvar out = function(f) {\n  return function(t) {\n    return 1 - f(1 - t);\n  };\n};\nvar inOut = function(f) {\n  return function(t) {\n    return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2;\n  };\n};\nvar outIn = function(f) {\n  return function(t) {\n    return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2;\n  };\n};\nvar linear = function(t) {\n  return t;\n};\nvar quad = function(t) {\n  return t * t;\n};\nvar cubic = function(t) {\n  return t * t * t;\n};\nvar quart = function(t) {\n  return t * t * t * t;\n};\nvar quint = function(t) {\n  return t * t * t * t * t;\n};\nvar sin = function(t) {\n  return 1 - Math.cos(t * Math.PI / 2);\n};\nvar exp = function(t) {\n  return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));\n};\nvar circle = function(t) {\n  return 1 - Math.sqrt(1 - t * t);\n};\nvar bounce = function(t) {\n  return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n};\nvar poly = function(e) {\n  return function(t) {\n    return Math.pow(t, e);\n  };\n};\nvar elastic = function(a, p) {\n  if (a === void 0) {\n    a = 1;\n  }\n  if (p === void 0) {\n    p = 0.45;\n  }\n  var s = p / (2 * Math.PI) * Math.asin(1 / a);\n  return function(t) {\n    return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p);\n  };\n};\nvar back = function(s) {\n  if (s === void 0) {\n    s = 1.70158;\n  }\n  return function(t) {\n    return t * t * ((s + 1) * t - s);\n  };\n};\nvar EasingFunctions = {\n  \"linear\": linear,\n  \"linear-in\": linear,\n  \"linear-out\": out(linear),\n  \"linear-in-out\": inOut(linear),\n  \"linear-out-in\": outIn(linear),\n  \"quad\": quad,\n  \"quad-in\": quad,\n  \"quad-out\": out(quad),\n  \"quad-in-out\": inOut(quad),\n  \"quad-out-in\": outIn(quad),\n  \"cubic\": cubic,\n  \"cubic-in\": cubic,\n  \"cubic-out\": out(cubic),\n  \"cubic-in-out\": inOut(cubic),\n  \"cubic-out-in\": outIn(cubic),\n  \"quart\": quart,\n  \"quart-in\": quart,\n  \"quart-out\": out(quart),\n  \"quart-in-out\": inOut(quart),\n  \"quart-out-in\": outIn(quart),\n  \"quint\": quint,\n  \"quint-in\": quint,\n  \"quint-out\": out(quint),\n  \"quint-in-out\": inOut(quint),\n  \"quint-out-in\": outIn(quint),\n  \"sin\": sin,\n  \"sin-in\": sin,\n  \"sin-out\": out(sin),\n  \"sin-in-out\": inOut(sin),\n  \"sin-out-in\": outIn(sin),\n  \"sine\": sin,\n  \"sine-in\": sin,\n  \"sine-out\": out(sin),\n  \"sine-in-out\": inOut(sin),\n  \"sine-out-in\": outIn(sin),\n  \"exp\": exp,\n  \"exp-in\": exp,\n  \"exp-out\": out(exp),\n  \"exp-in-out\": inOut(exp),\n  \"exp-out-in\": outIn(exp),\n  \"expo\": exp,\n  \"expo-in\": exp,\n  \"expo-out\": out(exp),\n  \"expo-in-out\": inOut(exp),\n  \"expo-out-in\": outIn(exp),\n  \"circle\": circle,\n  \"circle-in\": circle,\n  \"circle-out\": out(circle),\n  \"circle-in-out\": inOut(circle),\n  \"circle-out-in\": outIn(circle),\n  \"circ\": circle,\n  \"circ-in\": circle,\n  \"circ-out\": out(circle),\n  \"circ-in-out\": inOut(circle),\n  \"circ-out-in\": outIn(circle),\n  \"bounce\": bounce,\n  \"bounce-in\": bounce,\n  \"bounce-out\": out(bounce),\n  \"bounce-in-out\": inOut(bounce),\n  \"bounce-out-in\": outIn(bounce)\n};\nvar EasingFactories = {\n  \"poly\": poly,\n  \"poly-in\": poly,\n  \"poly-out\": function(e) {\n    return out(poly(e));\n  },\n  \"poly-in-out\": function(e) {\n    return inOut(poly(e));\n  },\n  \"poly-out-in\": function(e) {\n    return outIn(poly(e));\n  },\n  \"elastic\": elastic,\n  \"elastic-in\": elastic,\n  \"elastic-out\": function(a, p) {\n    return out(elastic(a, p));\n  },\n  \"elastic-in-out\": function(a, p) {\n    return inOut(elastic(a, p));\n  },\n  \"elastic-out-in\": function(a, p) {\n    return outIn(elastic(a, p));\n  },\n  \"back\": back,\n  \"back-in\": back,\n  \"back-out\": function(s) {\n    return out(back(s));\n  },\n  \"back-in-out\": function(s) {\n    return inOut(back(s));\n  },\n  \"back-out-in\": function(s) {\n    return outIn(back(s));\n  }\n};\nvar Transition = (\n  /** @class */\n  function() {\n    function Transition2(owner, options) {\n      if (options === void 0) {\n        options = {};\n      }\n      this.uid = \"transition:\" + uid();\n      this._ending = [];\n      this._end = {};\n      this._duration = options.duration || 400;\n      this._delay = options.delay || 0;\n      this._owner = owner;\n      this._time = 0;\n    }\n    Transition2.prototype.tick = function(component2, elapsed, now, last) {\n      this._time += elapsed;\n      if (this._time < this._delay) {\n        return;\n      }\n      var time = this._time - this._delay;\n      if (!this._start) {\n        this._start = {};\n        for (var key in this._end) {\n          this._start[key] = this._owner._pin.get(key);\n        }\n      }\n      var p = Math.min(time / this._duration, 1);\n      var ended = p >= 1;\n      if (typeof this._easing == \"function\") {\n        p = this._easing(p);\n      }\n      var q = 1 - p;\n      for (var key in this._end) {\n        this._owner._pin.set(key, this._start[key] * q + this._end[key] * p);\n      }\n      return ended;\n    };\n    Transition2.prototype.finish = function() {\n      var _this = this;\n      this._ending.forEach(function(callback) {\n        try {\n          callback.call(_this._owner);\n        } catch (e) {\n          console.error(e);\n        }\n      });\n      return this._next;\n    };\n    Transition2.prototype.tween = function(a, b) {\n      var options;\n      if (typeof a === \"object\" && a !== null) {\n        options = a;\n      } else {\n        options = {};\n        if (typeof a === \"number\") {\n          options.duration = a;\n          if (typeof b === \"number\") {\n            options.delay = b;\n          }\n        }\n      }\n      return this._next = new Transition2(this._owner, options);\n    };\n    Transition2.prototype.duration = function(duration) {\n      this._duration = duration;\n      return this;\n    };\n    Transition2.prototype.delay = function(delay) {\n      this._delay = delay;\n      return this;\n    };\n    Transition2.prototype.ease = function(easing) {\n      var _a;\n      var params = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        params[_i - 1] = arguments[_i];\n      }\n      this._easing = (_a = Easing.init(easing, params)) !== null && _a !== void 0 ? _a : IDENTITY;\n      return this;\n    };\n    Transition2.prototype.done = function(fn) {\n      this._ending.push(fn);\n      return this;\n    };\n    Transition2.prototype.hide = function() {\n      this._ending.push(function() {\n        this.hide();\n      });\n      this._hide = true;\n      return this;\n    };\n    Transition2.prototype.remove = function() {\n      this._ending.push(function() {\n        this.remove();\n      });\n      this._remove = true;\n      return this;\n    };\n    Transition2.prototype.pin = function(a, b) {\n      if (typeof a === \"object\") {\n        for (var attr in a) {\n          pinning(this._owner, this._end, attr, a[attr]);\n        }\n      } else if (typeof b !== \"undefined\") {\n        pinning(this._owner, this._end, a, b);\n      }\n      return this;\n    };\n    Transition2.prototype.then = function(fn) {\n      this.done(fn);\n      return this;\n    };\n    Transition2.prototype.clear = function(forward) {\n      return this;\n    };\n    Transition2.prototype.size = function(w, h) {\n      this.pin(\"width\", w);\n      this.pin(\"height\", h);\n      return this;\n    };\n    Transition2.prototype.width = function(w) {\n      this.pin(\"width\", w);\n      return this;\n    };\n    Transition2.prototype.height = function(h) {\n      this.pin(\"height\", h);\n      return this;\n    };\n    Transition2.prototype.offset = function(a, b) {\n      if (typeof a === \"object\") {\n        b = a.y;\n        a = a.x;\n      }\n      this.pin(\"offsetX\", a);\n      this.pin(\"offsetY\", b);\n      return this;\n    };\n    Transition2.prototype.rotate = function(a) {\n      this.pin(\"rotation\", a);\n      return this;\n    };\n    Transition2.prototype.skew = function(a, b) {\n      if (typeof a === \"object\") {\n        b = a.y;\n        a = a.x;\n      } else if (typeof b === \"undefined\") {\n        b = a;\n      }\n      this.pin(\"skewX\", a);\n      this.pin(\"skewY\", b);\n      return this;\n    };\n    Transition2.prototype.scale = function(a, b) {\n      if (typeof a === \"object\") {\n        b = a.y;\n        a = a.x;\n      } else if (typeof b === \"undefined\") {\n        b = a;\n      }\n      this.pin(\"scaleX\", a);\n      this.pin(\"scaleY\", b);\n      return this;\n    };\n    Transition2.prototype.alpha = function(a, ta) {\n      this.pin(\"alpha\", a);\n      if (typeof ta !== \"undefined\") {\n        this.pin(\"textureAlpha\", ta);\n      }\n      return this;\n    };\n    return Transition2;\n  }()\n);\nfunction pinning(component2, map, key, value) {\n  if (typeof component2._pin.get(key) === \"number\") {\n    map[key] = value;\n  } else if (typeof component2._pin.get(key + \"X\") === \"number\" && typeof component2._pin.get(key + \"Y\") === \"number\") {\n    map[key + \"X\"] = value;\n    map[key + \"Y\"] = value;\n  }\n}\nvar iid = 0;\nstats.create = 0;\nfunction assertType(obj) {\n  if (obj && obj instanceof Component) {\n    return obj;\n  }\n  throw \"Invalid component: \" + obj;\n}\nfunction create() {\n  return component();\n}\nfunction layer() {\n  return maximize();\n}\nfunction box() {\n  return minimize();\n}\nfunction layout() {\n  return component();\n}\nfunction component() {\n  return new Component();\n}\nfunction row(align) {\n  return new Component().row(align).label(\"Row\");\n}\nfunction column(align) {\n  return new Component().column(align).label(\"Column\");\n}\nfunction minimize() {\n  return new Component().minimize().label(\"Minimize\");\n}\nfunction maximize() {\n  return new Component().maximize().label(\"Maximize\");\n}\nvar Component = (\n  /** @class */\n  function() {\n    function Component2() {\n      var _this = this;\n      this.uid = \"component:\" + uid();\n      this._label = \"\";\n      this._parent = null;\n      this._next = null;\n      this._prev = null;\n      this._first = null;\n      this._last = null;\n      this._visible = true;\n      this._alpha = 1;\n      this._padding = 0;\n      this._spacing = 0;\n      this._pin = new Pin(this);\n      this._listeners = {};\n      this._attrs = {};\n      this._flags = {};\n      this._transitions = [];\n      this._tickBefore = [];\n      this._tickAfter = [];\n      this.MAX_ELAPSE = Infinity;\n      this.renderedBefore = false;\n      this._transitionTickInitied = false;\n      this._transitionTickLastTime = 0;\n      this._transitionTick = function(elapsed, now, last) {\n        if (!_this._transitions.length) {\n          return false;\n        }\n        var ignore = _this._transitionTickLastTime !== last;\n        _this._transitionTickLastTime = now;\n        if (ignore) {\n          return true;\n        }\n        var head = _this._transitions[0];\n        var ended = head.tick(_this, elapsed, now, last);\n        if (ended) {\n          if (head === _this._transitions[0]) {\n            _this._transitions.shift();\n          }\n          var next = head.finish();\n          if (next) {\n            _this._transitions.unshift(next);\n          }\n        }\n        return true;\n      };\n      stats.create++;\n      if (this instanceof Component2) {\n        this.label(this.constructor.name);\n      }\n    }\n    Component2.prototype.matrix = function(relative) {\n      if (relative === void 0) {\n        relative = false;\n      }\n      if (relative === true) {\n        return this._pin.relativeMatrix();\n      }\n      return this._pin.absoluteMatrix();\n    };\n    Component2.prototype.getPixelRatio = function() {\n      var _a;\n      var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n      var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getDevicePixelRatio();\n      return pixelRatio;\n    };\n    Component2.prototype.getDevicePixelRatio = function() {\n      var _a;\n      var parentMatrix = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n      var pixelRatio = !parentMatrix ? 1 : Math.max(Math.abs(parentMatrix.a), Math.abs(parentMatrix.b));\n      return pixelRatio;\n    };\n    Component2.prototype.getLogicalPixelRatio = function() {\n      return this.getDevicePixelRatio() / getDevicePixelRatio();\n    };\n    Component2.prototype.pin = function(a, b) {\n      if (typeof a === \"object\") {\n        this._pin.set(a);\n        return this;\n      } else if (typeof a === \"string\") {\n        if (typeof b === \"undefined\") {\n          return this._pin.get(a);\n        } else {\n          this._pin.set(a, b);\n          return this;\n        }\n      } else if (typeof a === \"undefined\") {\n        return this._pin;\n      }\n    };\n    Component2.prototype.fit = function(a, b, c) {\n      var _a, _b, _c;\n      if (typeof a === \"object\") {\n        this._pin.fit((_a = a.width) !== null && _a !== void 0 ? _a : a.x, (_b = a.height) !== null && _b !== void 0 ? _b : a.y, (_c = a.mode) !== null && _c !== void 0 ? _c : b);\n      } else {\n        this._pin.fit(a, b, c);\n      }\n      return this;\n    };\n    Component2.prototype.scaleTo = function(a, b, c) {\n      return this.fit(a, b, c);\n    };\n    Component2.prototype.toString = function() {\n      return \"[\" + this._label + \"]\";\n    };\n    Component2.prototype.id = function(label) {\n      if (typeof label === \"undefined\") {\n        return this._label;\n      }\n      this._label = label;\n      return this;\n    };\n    Component2.prototype.label = function(label) {\n      if (typeof label === \"undefined\") {\n        return this._label;\n      }\n      this._label = label;\n      return this;\n    };\n    Component2.prototype.attr = function(name, value) {\n      if (typeof value === \"undefined\") {\n        return this._attrs !== null ? this._attrs[name] : void 0;\n      }\n      (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value;\n      return this;\n    };\n    Component2.prototype.visible = function(visible) {\n      if (typeof visible === \"undefined\") {\n        return this._visible;\n      }\n      this._visible = visible;\n      this._parent && (this._parent._ts_children = ++iid);\n      this._ts_pin = ++iid;\n      this.touch();\n      return this;\n    };\n    Component2.prototype.hide = function() {\n      this.visible(false);\n      return this;\n    };\n    Component2.prototype.show = function() {\n      this.visible(true);\n      return this;\n    };\n    Component2.prototype.parent = function() {\n      return this._parent;\n    };\n    Component2.prototype.next = function(visible) {\n      var next = this._next;\n      while (next && visible && !next._visible) {\n        next = next._next;\n      }\n      return next;\n    };\n    Component2.prototype.prev = function(visible) {\n      var prev = this._prev;\n      while (prev && visible && !prev._visible) {\n        prev = prev._prev;\n      }\n      return prev;\n    };\n    Component2.prototype.first = function(visible) {\n      var next = this._first;\n      while (next && visible && !next._visible) {\n        next = next._next;\n      }\n      return next;\n    };\n    Component2.prototype.last = function(visible) {\n      var prev = this._last;\n      while (prev && visible && !prev._visible) {\n        prev = prev._prev;\n      }\n      return prev;\n    };\n    Component2.prototype.visit = function(visitor, payload) {\n      var reverse = visitor.reverse;\n      var visible = visitor.visible;\n      if (visitor.start && visitor.start(this, payload)) {\n        return;\n      }\n      var child;\n      var next = reverse ? this.last(visible) : this.first(visible);\n      while (child = next) {\n        next = reverse ? child.prev(visible) : child.next(visible);\n        if (child.visit(visitor, payload)) {\n          return true;\n        }\n      }\n      return visitor.end && visitor.end(this, payload);\n    };\n    Component2.prototype.append = function(child, more) {\n      if (Array.isArray(child)) {\n        for (var i = 0; i < child.length; i++) {\n          Component2.append(this, child[i]);\n        }\n      } else if (typeof more !== \"undefined\") {\n        for (var i = 0; i < arguments.length; i++) {\n          Component2.append(this, arguments[i]);\n        }\n      } else if (typeof child !== \"undefined\")\n        Component2.append(this, child);\n      return this;\n    };\n    Component2.prototype.prepend = function(child, more) {\n      if (Array.isArray(child)) {\n        for (var i = child.length - 1; i >= 0; i--) {\n          Component2.prepend(this, child[i]);\n        }\n      } else if (typeof more !== \"undefined\") {\n        for (var i = arguments.length - 1; i >= 0; i--) {\n          Component2.prepend(this, arguments[i]);\n        }\n      } else if (typeof child !== \"undefined\")\n        Component2.prepend(this, child);\n      return this;\n    };\n    Component2.prototype.appendTo = function(parent) {\n      Component2.append(parent, this);\n      return this;\n    };\n    Component2.prototype.prependTo = function(parent) {\n      Component2.prepend(parent, this);\n      return this;\n    };\n    Component2.prototype.insertNext = function(sibling, more) {\n      if (Array.isArray(sibling)) {\n        for (var i = 0; i < sibling.length; i++) {\n          Component2.insertAfter(sibling[i], this);\n        }\n      } else if (typeof more !== \"undefined\") {\n        for (var i = 0; i < arguments.length; i++) {\n          Component2.insertAfter(arguments[i], this);\n        }\n      } else if (typeof sibling !== \"undefined\") {\n        Component2.insertAfter(sibling, this);\n      }\n      return this;\n    };\n    Component2.prototype.insertPrev = function(sibling, more) {\n      if (Array.isArray(sibling)) {\n        for (var i = sibling.length - 1; i >= 0; i--) {\n          Component2.insertBefore(sibling[i], this);\n        }\n      } else if (typeof more !== \"undefined\") {\n        for (var i = arguments.length - 1; i >= 0; i--) {\n          Component2.insertBefore(arguments[i], this);\n        }\n      } else if (typeof sibling !== \"undefined\") {\n        Component2.insertBefore(sibling, this);\n      }\n      return this;\n    };\n    Component2.prototype.insertAfter = function(prev) {\n      Component2.insertAfter(this, prev);\n      return this;\n    };\n    Component2.prototype.insertBefore = function(next) {\n      Component2.insertBefore(this, next);\n      return this;\n    };\n    Component2.append = function(parent, child) {\n      assertType(child);\n      assertType(parent);\n      child.remove();\n      if (parent._last) {\n        parent._last._next = child;\n        child._prev = parent._last;\n      }\n      child._parent = parent;\n      parent._last = child;\n      if (!parent._first) {\n        parent._first = child;\n      }\n      child._parent._flag(child, true);\n      child._ts_parent = ++iid;\n      parent._ts_children = ++iid;\n      parent.touch();\n    };\n    Component2.prepend = function(parent, child) {\n      assertType(child);\n      assertType(parent);\n      child.remove();\n      if (parent._first) {\n        parent._first._prev = child;\n        child._next = parent._first;\n      }\n      child._parent = parent;\n      parent._first = child;\n      if (!parent._last) {\n        parent._last = child;\n      }\n      child._parent._flag(child, true);\n      child._ts_parent = ++iid;\n      parent._ts_children = ++iid;\n      parent.touch();\n    };\n    Component2.insertBefore = function(self, next) {\n      assertType(self);\n      assertType(next);\n      self.remove();\n      var parent = next._parent;\n      var prev = next._prev;\n      if (!parent) {\n        return;\n      }\n      next._prev = self;\n      prev && (prev._next = self) || parent && (parent._first = self);\n      self._parent = parent;\n      self._prev = prev;\n      self._next = next;\n      self._parent._flag(self, true);\n      self._ts_parent = ++iid;\n      self.touch();\n    };\n    Component2.insertAfter = function(self, prev) {\n      assertType(self);\n      assertType(prev);\n      self.remove();\n      var parent = prev._parent;\n      var next = prev._next;\n      if (!parent) {\n        return;\n      }\n      prev._next = self;\n      next && (next._prev = self) || parent && (parent._last = self);\n      self._parent = parent;\n      self._prev = prev;\n      self._next = next;\n      self._parent._flag(self, true);\n      self._ts_parent = ++iid;\n      self.touch();\n    };\n    Component2.prototype.remove = function(child, more) {\n      if (typeof child !== \"undefined\") {\n        if (Array.isArray(child)) {\n          for (var i = 0; i < child.length; i++) {\n            assertType(child[i]).remove();\n          }\n        } else if (typeof more !== \"undefined\") {\n          for (var i = 0; i < arguments.length; i++) {\n            assertType(arguments[i]).remove();\n          }\n        } else {\n          assertType(child).remove();\n        }\n        return this;\n      }\n      if (this._prev) {\n        this._prev._next = this._next;\n      }\n      if (this._next) {\n        this._next._prev = this._prev;\n      }\n      if (this._parent) {\n        if (this._parent._first === this) {\n          this._parent._first = this._next;\n        }\n        if (this._parent._last === this) {\n          this._parent._last = this._prev;\n        }\n        this._parent._flag(this, false);\n        this._parent._ts_children = ++iid;\n        this._parent.touch();\n      }\n      this._prev = this._next = this._parent = null;\n      this._ts_parent = ++iid;\n      return this;\n    };\n    Component2.prototype.empty = function() {\n      var child = null;\n      var next = this._first;\n      while (child = next) {\n        next = child._next;\n        child._prev = child._next = child._parent = null;\n        this._flag(child, false);\n      }\n      this._first = this._last = null;\n      this._ts_children = ++iid;\n      this.touch();\n      return this;\n    };\n    Component2.prototype.touch = function() {\n      this._ts_touch = ++iid;\n      this._parent && this._parent.touch();\n      return this;\n    };\n    Component2.prototype._flag = function(key, value) {\n      if (typeof value === \"undefined\") {\n        return this._flags !== null && this._flags[key] || 0;\n      }\n      if (typeof key === \"string\") {\n        if (value) {\n          this._flags = this._flags || {};\n          if (!this._flags[key] && this._parent) {\n            this._parent._flag(key, true);\n          }\n          this._flags[key] = (this._flags[key] || 0) + 1;\n        } else if (this._flags && this._flags[key] > 0) {\n          if (this._flags[key] == 1 && this._parent) {\n            this._parent._flag(key, false);\n          }\n          this._flags[key] = this._flags[key] - 1;\n        }\n      }\n      if (typeof key === \"object\") {\n        if (key._flags) {\n          for (var type in key._flags) {\n            if (key._flags[type] > 0) {\n              this._flag(type, value);\n            }\n          }\n        }\n      }\n      return this;\n    };\n    Component2.prototype.hitTest = function(hit) {\n      var width = this._pin._width;\n      var height = this._pin._height;\n      return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height;\n    };\n    Component2.prototype.prerender = function() {\n      if (!this._visible) {\n        return;\n      }\n      this.prerenderTexture();\n      var child;\n      var next = this._first;\n      while (child = next) {\n        next = child._next;\n        child.prerender();\n      }\n    };\n    Component2.prototype.prerenderTexture = function() {\n    };\n    Component2.prototype.render = function(context) {\n      if (!this._visible) {\n        return;\n      }\n      stats.component++;\n      var m = this.matrix();\n      context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n      this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1);\n      var alpha = this._pin._textureAlpha * this._alpha;\n      if (context.globalAlpha != alpha) {\n        context.globalAlpha = alpha;\n      }\n      if (!this.renderedBefore) {\n        this.prerenderTexture();\n      }\n      this.renderedBefore = true;\n      this.renderTexture(context);\n      if (context.globalAlpha != this._alpha) {\n        context.globalAlpha = this._alpha;\n      }\n      var child;\n      var next = this._first;\n      while (child = next) {\n        next = child._next;\n        child.render(context);\n      }\n    };\n    Component2.prototype.renderTexture = function(context) {\n    };\n    Component2.prototype._tick = function(elapsed, now, last) {\n      if (!this._visible) {\n        return;\n      }\n      if (elapsed > this.MAX_ELAPSE) {\n        elapsed = this.MAX_ELAPSE;\n      }\n      var ticked = false;\n      if (this._tickBefore !== null) {\n        for (var i = 0; i < this._tickBefore.length; i++) {\n          stats.tick++;\n          var tickFn = this._tickBefore[i];\n          ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n        }\n      }\n      var child;\n      var next = this._first;\n      while (child = next) {\n        next = child._next;\n        if (child._flag(\"_tick\")) {\n          ticked = child._tick(elapsed, now, last) === true ? true : ticked;\n        }\n      }\n      if (this._tickAfter !== null) {\n        for (var i = 0; i < this._tickAfter.length; i++) {\n          stats.tick++;\n          var tickFn = this._tickAfter[i];\n          ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n        }\n      }\n      return ticked;\n    };\n    Component2.prototype.tick = function(callback, before) {\n      var _a, _b;\n      if (before === void 0) {\n        before = false;\n      }\n      if (typeof callback !== \"function\") {\n        return;\n      }\n      if (before) {\n        if (this._tickBefore === null) {\n          this._tickBefore = [];\n        }\n        this._tickBefore.push(callback);\n      } else {\n        if (this._tickAfter === null) {\n          this._tickAfter = [];\n        }\n        this._tickAfter.push(callback);\n      }\n      var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0;\n      this._flag(\"_tick\", hasTickListener);\n    };\n    Component2.prototype.untick = function(callback) {\n      if (typeof callback !== \"function\") {\n        return;\n      }\n      var i;\n      if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) {\n        this._tickBefore.splice(i, 1);\n      }\n      if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) {\n        this._tickAfter.splice(i, 1);\n      }\n    };\n    Component2.prototype.timeout = function(callback, time) {\n      this.setTimeout(callback, time);\n    };\n    Component2.prototype.setTimeout = function(callback, time) {\n      function timer(t) {\n        if ((time -= t) < 0) {\n          this.untick(timer);\n          callback.call(this);\n        } else {\n          return true;\n        }\n      }\n      this.tick(timer);\n      return timer;\n    };\n    Component2.prototype.clearTimeout = function(timer) {\n      this.untick(timer);\n    };\n    Component2.prototype.on = function(type, listener) {\n      if (!type || !type.length || typeof listener !== \"function\") {\n        return this;\n      }\n      if (typeof type !== \"string\" && typeof type.join === \"function\") {\n        for (var i = 0; i < type.length; i++) {\n          this.on(type[i], listener);\n        }\n      } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n        type = type.match(/\\S+/g);\n        for (var i = 0; i < type.length; i++) {\n          this._on(type[i], listener);\n        }\n      } else if (typeof type === \"string\") {\n        this._on(type, listener);\n      } else ;\n      return this;\n    };\n    Component2.prototype._on = function(type, listener) {\n      if (typeof type !== \"string\" && typeof listener !== \"function\") {\n        return;\n      }\n      this._listeners[type] = this._listeners[type] || [];\n      this._listeners[type].push(listener);\n      this._flag(type, true);\n    };\n    Component2.prototype.off = function(type, listener) {\n      if (!type || !type.length || typeof listener !== \"function\") {\n        return this;\n      }\n      if (typeof type !== \"string\" && typeof type.join === \"function\") {\n        for (var i = 0; i < type.length; i++) {\n          this.off(type[i], listener);\n        }\n      } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n        type = type.match(/\\S+/g);\n        for (var i = 0; i < type.length; i++) {\n          this._off(type[i], listener);\n        }\n      } else if (typeof type === \"string\") {\n        this._off(type, listener);\n      } else ;\n      return this;\n    };\n    Component2.prototype._off = function(type, listener) {\n      if (typeof type !== \"string\" && typeof listener !== \"function\") {\n        return;\n      }\n      var listeners = this._listeners[type];\n      if (!listeners || !listeners.length) {\n        return;\n      }\n      var index = listeners.indexOf(listener);\n      if (index >= 0) {\n        listeners.splice(index, 1);\n        this._flag(type, false);\n      }\n    };\n    Component2.prototype.listeners = function(type) {\n      return this._listeners[type];\n    };\n    Component2.prototype.publish = function(name, args) {\n      var listeners = this.listeners(name);\n      if (!listeners || !listeners.length) {\n        return 0;\n      }\n      for (var l = 0; l < listeners.length; l++) {\n        listeners[l].apply(this, args);\n      }\n      return listeners.length;\n    };\n    Component2.prototype.trigger = function(name, args) {\n      this.publish(name, args);\n      return this;\n    };\n    Component2.prototype.size = function(w, h) {\n      this.pin(\"width\", w);\n      this.pin(\"height\", h);\n      return this;\n    };\n    Component2.prototype.width = function(w) {\n      if (typeof w === \"undefined\") {\n        return this.pin(\"width\");\n      }\n      this.pin(\"width\", w);\n      return this;\n    };\n    Component2.prototype.height = function(h) {\n      if (typeof h === \"undefined\") {\n        return this.pin(\"height\");\n      }\n      this.pin(\"height\", h);\n      return this;\n    };\n    Component2.prototype.offset = function(a, b) {\n      if (typeof a === \"object\") {\n        b = a.y;\n        a = a.x;\n      }\n      this.pin(\"offsetX\", a);\n      this.pin(\"offsetY\", b);\n      return this;\n    };\n    Component2.prototype.rotate = function(a) {\n      this.pin(\"rotation\", a);\n      return this;\n    };\n    Component2.prototype.skew = function(a, b) {\n      if (typeof a === \"object\") {\n        b = a.y;\n        a = a.x;\n      } else if (typeof b === \"undefined\")\n        b = a;\n      this.pin(\"skewX\", a);\n      this.pin(\"skewY\", b);\n      return this;\n    };\n    Component2.prototype.scale = function(a, b) {\n      if (typeof a === \"object\") {\n        b = a.y;\n        a = a.x;\n      } else if (typeof b === \"undefined\")\n        b = a;\n      this.pin(\"scaleX\", a);\n      this.pin(\"scaleY\", b);\n      return this;\n    };\n    Component2.prototype.alpha = function(a, ta) {\n      this.pin(\"alpha\", a);\n      if (typeof ta !== \"undefined\") {\n        this.pin(\"textureAlpha\", ta);\n      }\n      return this;\n    };\n    Component2.prototype.tween = function(a, b, c) {\n      var options;\n      if (typeof a === \"object\" && a !== null) {\n        options = a;\n      } else {\n        options = {};\n        if (typeof a === \"number\") {\n          options.duration = a;\n          if (typeof b === \"number\") {\n            options.delay = b;\n            if (typeof c === \"boolean\") {\n              options.append = c;\n            }\n          } else if (typeof b === \"boolean\") {\n            options.append = b;\n          }\n        } else if (typeof a === \"boolean\") {\n          options.append = a;\n        }\n      }\n      if (!this._transitionTickInitied) {\n        this.tick(this._transitionTick, true);\n        this._transitionTickInitied = true;\n      }\n      this.touch();\n      if (!options.append) {\n        this._transitions.length = 0;\n      }\n      var transition = new Transition(this, options);\n      this._transitions.push(transition);\n      return transition;\n    };\n    Component2.prototype.row = function(align) {\n      this.direction(\"row\", align);\n      return this;\n    };\n    Component2.prototype.column = function(align) {\n      this.direction(\"column\", align);\n      return this;\n    };\n    Component2.prototype.align = function(direction, align) {\n      if (typeof direction === \"string\") {\n        return this.direction(direction, align);\n      }\n    };\n    Component2.prototype.direction = function(direction, align) {\n      var _this = this;\n      this._padding = this._padding;\n      this._spacing = this._spacing;\n      this._layoutTicker && this.untick(this._layoutTicker);\n      this.tick(this._layoutTicker = function() {\n        if (_this._mo_seq == _this._ts_touch) {\n          return;\n        }\n        _this._mo_seq = _this._ts_touch;\n        var alignChildren = _this._mo_seqAlign != _this._ts_children;\n        _this._mo_seqAlign = _this._ts_children;\n        var width = 0;\n        var height = 0;\n        var child;\n        var next = _this.first(true);\n        var first = true;\n        while (child = next) {\n          next = child.next(true);\n          child.matrix(true);\n          var w = child.pin(\"boxWidth\");\n          var h = child.pin(\"boxHeight\");\n          if (direction == \"column\") {\n            !first && (height += _this._spacing);\n            child.pin(\"offsetY\") != height && child.pin(\"offsetY\", height);\n            width = Math.max(width, w);\n            height = height + h;\n            alignChildren && child.pin(\"alignX\", align);\n          } else if (direction == \"row\") {\n            !first && (width += _this._spacing);\n            child.pin(\"offsetX\") != width && child.pin(\"offsetX\", width);\n            width = width + w;\n            height = Math.max(height, h);\n            alignChildren && child.pin(\"alignY\", align);\n          }\n          first = false;\n        }\n        width += 2 * _this._padding;\n        height += 2 * _this._padding;\n        _this.pin(\"width\") != width && _this.pin(\"width\", width);\n        _this.pin(\"height\") != height && _this.pin(\"height\", height);\n      });\n      return this;\n    };\n    Component2.prototype.box = function() {\n      return this.minimize();\n    };\n    Component2.prototype.layer = function() {\n      return this.maximize();\n    };\n    Component2.prototype.minimize = function() {\n      var _this = this;\n      this._padding = this._padding;\n      this._layoutTicker && this.untick(this._layoutTicker);\n      this.tick(this._layoutTicker = function() {\n        if (_this._mo_box == _this._ts_touch) {\n          return;\n        }\n        _this._mo_box = _this._ts_touch;\n        var width = 0;\n        var height = 0;\n        var child;\n        var next = _this.first(true);\n        while (child = next) {\n          next = child.next(true);\n          child.matrix(true);\n          var w = child.pin(\"boxWidth\");\n          var h = child.pin(\"boxHeight\");\n          width = Math.max(width, w);\n          height = Math.max(height, h);\n        }\n        width += 2 * _this._padding;\n        height += 2 * _this._padding;\n        _this.pin(\"width\") != width && _this.pin(\"width\", width);\n        _this.pin(\"height\") != height && _this.pin(\"height\", height);\n      });\n      return this;\n    };\n    Component2.prototype.maximize = function() {\n      var _this = this;\n      this._layoutTicker && this.untick(this._layoutTicker);\n      this.tick(this._layoutTicker = function() {\n        var parent = _this.parent();\n        if (parent) {\n          var width = parent.pin(\"width\");\n          if (_this.pin(\"width\") != width) {\n            _this.pin(\"width\", width);\n          }\n          var height = parent.pin(\"height\");\n          if (_this.pin(\"height\") != height) {\n            _this.pin(\"height\", height);\n          }\n        }\n      }, true);\n      return this;\n    };\n    Component2.prototype.padding = function(pad) {\n      this._padding = pad;\n      return this;\n    };\n    Component2.prototype.spacing = function(space) {\n      this._spacing = space;\n      return this;\n    };\n    return Component2;\n  }()\n);\nfunction sprite(frame) {\n  var sprite2 = new Sprite();\n  frame && sprite2.texture(frame);\n  return sprite2;\n}\nvar Sprite = (\n  /** @class */\n  function(_super) {\n    __extends(Sprite2, _super);\n    function Sprite2() {\n      var _this = _super.call(this) || this;\n      _this._texture = null;\n      _this._image = null;\n      _this._tiled = false;\n      _this._stretched = false;\n      _this.prerenderContext = {};\n      _this.label(\"Sprite\");\n      return _this;\n    }\n    Sprite2.prototype.texture = function(frame) {\n      this._image = texture(frame).one();\n      if (this._image) {\n        this.pin(\"width\", this._image.getWidth());\n        this.pin(\"height\", this._image.getHeight());\n        if (this._tiled) {\n          this._texture = new ResizableTexture(this._image, \"tile\");\n        } else if (this._stretched) {\n          this._texture = new ResizableTexture(this._image, \"stretch\");\n        } else {\n          this._texture = new PipeTexture(this._image);\n        }\n      } else {\n        this.pin(\"width\", 0);\n        this.pin(\"height\", 0);\n        this._texture = null;\n      }\n      return this;\n    };\n    Sprite2.prototype.image = function(frame) {\n      return this.texture(frame);\n    };\n    Sprite2.prototype.tile = function(inner) {\n      this._tiled = true;\n      var texture2 = new ResizableTexture(this._image, \"tile\");\n      this._texture = texture2;\n      return this;\n    };\n    Sprite2.prototype.stretch = function(inner) {\n      this._stretched = true;\n      var texture2 = new ResizableTexture(this._image, \"stretch\");\n      this._texture = texture2;\n      return this;\n    };\n    Sprite2.prototype.prerenderTexture = function() {\n      if (!this._image)\n        return;\n      var pixelRatio = this.getDevicePixelRatio();\n      this.prerenderContext.pixelRatio = pixelRatio;\n      var updated = this._image.prerender(this.prerenderContext);\n      if (updated === true) {\n        var w = this._image.getWidth();\n        var h = this._image.getHeight();\n        this.size(w, h);\n      }\n    };\n    Sprite2.prototype.renderTexture = function(context) {\n      if (!this._texture)\n        return;\n      if (this._texture[\"_resizeMode\"]) {\n        this._texture.dw = this.pin(\"width\");\n        this._texture.dh = this.pin(\"height\");\n      }\n      this._texture.draw(context);\n    };\n    return Sprite2;\n  }(Component)\n);\nvar CanvasTexture = (\n  /** @class */\n  function(_super) {\n    __extends(CanvasTexture2, _super);\n    function CanvasTexture2() {\n      var _this = _super.call(this, document.createElement(\"canvas\")) || this;\n      _this._lastPixelRatio = 0;\n      return _this;\n    }\n    CanvasTexture2.prototype.setSize = function(destWidth, destHeight, pixelRatio) {\n      if (pixelRatio === void 0) {\n        pixelRatio = 1;\n      }\n      this._source.width = destWidth * pixelRatio;\n      this._source.height = destHeight * pixelRatio;\n      this._pixelRatio = pixelRatio;\n    };\n    CanvasTexture2.prototype.getContext = function(type, attributes) {\n      if (type === void 0) {\n        type = \"2d\";\n      }\n      return this._source.getContext(type, attributes);\n    };\n    CanvasTexture2.prototype.getDevicePixelRatio = function() {\n      return this._lastPixelRatio;\n    };\n    CanvasTexture2.prototype.getOptimalPixelRatio = function() {\n      return this.getDevicePixelRatio();\n    };\n    CanvasTexture2.prototype.setMemoizer = function(memoizer) {\n      this._memoizer = memoizer;\n    };\n    CanvasTexture2.prototype.setDrawer = function(drawer) {\n      this._drawer = drawer;\n    };\n    CanvasTexture2.prototype.prerender = function(context) {\n      var newPixelRatio = context.pixelRatio;\n      var lastPixelRatio = this._lastPixelRatio;\n      var pixelRationChange = lastPixelRatio / newPixelRatio;\n      var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8;\n      if (pixelRatioChanged) {\n        this._lastPixelRatio = newPixelRatio;\n      }\n      var newMemoKey = this._memoizer ? this._memoizer.call(this) : null;\n      var memoKeyChanged = this._lastMemoKey !== newMemoKey;\n      if (pixelRatioChanged || memoKeyChanged) {\n        this._lastMemoKey = newMemoKey;\n        this._lastPixelRatio = newPixelRatio;\n        if (typeof this._drawer === \"function\") {\n          this._drawer.call(this);\n        }\n        return true;\n      }\n    };\n    CanvasTexture2.prototype.size = function(width, height, pixelRatio) {\n      this.setSize(width, height, pixelRatio);\n      return this;\n    };\n    CanvasTexture2.prototype.context = function(type, attributes) {\n      if (type === void 0) {\n        type = \"2d\";\n      }\n      return this.getContext(type, attributes);\n    };\n    CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) {\n      if (typeof legacyTextureDrawer === \"function\") {\n        legacyTextureDrawer.call(this, this.getContext());\n      } else if (typeof legacyTextureDrawer === \"undefined\") {\n        if (typeof this._drawer === \"function\") {\n          this._drawer.call(this);\n        }\n      }\n      return this;\n    };\n    return CanvasTexture2;\n  }(ImageTexture)\n);\nfunction canvas(type, attributes, legacyTextureDrawer) {\n  if (typeof type === \"function\") {\n    var texture_1 = new CanvasTexture();\n    legacyTextureDrawer = type;\n    texture_1.setDrawer(function() {\n      legacyTextureDrawer.call(texture_1, texture_1.getContext());\n    });\n    return texture_1;\n  } else if (typeof attributes === \"function\") {\n    var texture_2 = new CanvasTexture();\n    legacyTextureDrawer = attributes;\n    texture_2.setDrawer(function() {\n      legacyTextureDrawer.call(texture_2, texture_2.getContext(type));\n    });\n    return texture_2;\n  } else if (typeof legacyTextureDrawer === \"function\") {\n    var texture_3 = new CanvasTexture();\n    texture_3.setDrawer(function() {\n      legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes));\n    });\n    return texture_3;\n  } else {\n    var texture2 = new CanvasTexture();\n    return texture2;\n  }\n}\nfunction memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) {\n  if (legacySpriteMemoizer === void 0) {\n    legacySpriteMemoizer = function() {\n      return null;\n    };\n  }\n  var sprite2 = new Sprite();\n  var texture2 = new CanvasTexture();\n  sprite2.texture(texture2);\n  texture2.setDrawer(function() {\n    legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2);\n  });\n  texture2.setMemoizer(legacySpriteMemoizer);\n  return sprite2;\n}\nvar POINTER_CLICK = \"click\";\nvar POINTER_DOWN = \"touchstart mousedown\";\nvar POINTER_MOVE = \"touchmove mousemove\";\nvar POINTER_UP = \"touchend mouseup\";\nvar POINTER_CANCEL = \"touchcancel mousecancel\";\nvar POINTER_START = \"touchstart mousedown\";\nvar POINTER_END = \"touchend mouseup\";\nvar EventPoint = (\n  /** @class */\n  function() {\n    function EventPoint2() {\n    }\n    EventPoint2.prototype.clone = function(obj) {\n      if (obj) {\n        obj.x = this.x;\n        obj.y = this.y;\n      } else {\n        obj = {\n          x: this.x,\n          y: this.y\n        };\n      }\n      return obj;\n    };\n    EventPoint2.prototype.toString = function() {\n      return (this.x | 0) + \"x\" + (this.y | 0);\n    };\n    return EventPoint2;\n  }()\n);\nvar PointerSyntheticEvent = (\n  /** @class */\n  function() {\n    function PointerSyntheticEvent2() {\n      this.abs = new EventPoint();\n    }\n    PointerSyntheticEvent2.prototype.clone = function(obj) {\n      if (obj) {\n        obj.x = this.x;\n        obj.y = this.y;\n      } else {\n        obj = {\n          x: this.x,\n          y: this.y\n        };\n      }\n      return obj;\n    };\n    PointerSyntheticEvent2.prototype.toString = function() {\n      return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n    };\n    return PointerSyntheticEvent2;\n  }()\n);\nvar VisitPayload = (\n  /** @class */\n  function() {\n    function VisitPayload2() {\n      this.type = \"\";\n      this.x = 0;\n      this.y = 0;\n      this.timeStamp = -1;\n      this.event = null;\n      this.root = null;\n      this.collected = null;\n    }\n    VisitPayload2.prototype.toString = function() {\n      return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n    };\n    return VisitPayload2;\n  }()\n);\nvar syntheticEvent = new PointerSyntheticEvent();\nvar PAYLOAD = new VisitPayload();\nvar Pointer = (\n  /** @class */\n  function() {\n    function Pointer2() {\n      var _this = this;\n      this.ratio = 1;\n      this.clickList = [];\n      this.cancelList = [];\n      this.handleStart = function(event) {\n        Pointer2.DEBUG && console.debug && console.debug(\"pointer-start\", event.type);\n        event.preventDefault();\n        _this.localPoint(event);\n        _this.dispatchEvent(event.type, event);\n        _this.findTargets(\"click\", _this.clickList);\n        _this.findTargets(\"mousecancel\", _this.cancelList);\n      };\n      this.handleMove = function(event) {\n        event.preventDefault();\n        _this.localPoint(event);\n        _this.dispatchEvent(event.type, event);\n      };\n      this.handleEnd = function(event) {\n        var _a;\n        event.preventDefault();\n        Pointer2.DEBUG && console.debug && console.debug(\"pointer-end\", event.type);\n        _this.dispatchEvent(event.type, event);\n        if (_this.clickList.length) {\n          Pointer2.DEBUG && console.debug && console.debug(\"pointer-click: \", event.type, (_a = _this.clickList) === null || _a === void 0 ? void 0 : _a.length);\n          _this.dispatchEvent(\"click\", event, _this.clickList);\n        }\n        _this.cancelList.length = 0;\n      };\n      this.handleCancel = function(event) {\n        var _a;\n        if (_this.cancelList.length) {\n          Pointer2.DEBUG && console.debug && console.debug(\"pointer-cancel\", event.type, (_a = _this.clickList) === null || _a === void 0 ? void 0 : _a.length);\n          _this.dispatchEvent(\"mousecancel\", event, _this.cancelList);\n        }\n        _this.clickList.length = 0;\n      };\n      this.visitStart = function(component2, payload) {\n        return !component2._flag(payload.type);\n      };\n      this.visitEnd = function(component2, payload) {\n        syntheticEvent.raw = payload.event;\n        syntheticEvent.type = payload.type;\n        syntheticEvent.timeStamp = payload.timeStamp;\n        syntheticEvent.abs.x = payload.x;\n        syntheticEvent.abs.y = payload.y;\n        var listeners = component2.listeners(payload.type);\n        if (!listeners) {\n          return;\n        }\n        component2.matrix().inverse().map(payload, syntheticEvent);\n        var isEventTarget = component2 === payload.root || component2.attr(\"spy\") || component2.hitTest(syntheticEvent);\n        if (!isEventTarget) {\n          return;\n        }\n        if (payload.collected) {\n          payload.collected.push(component2);\n        }\n        if (payload.event) {\n          var stop_1 = false;\n          for (var l = 0; l < listeners.length; l++) {\n            stop_1 = listeners[l].call(component2, syntheticEvent) ? true : stop_1;\n          }\n          return stop_1;\n        }\n      };\n    }\n    Pointer2.prototype.mount = function(stage, elem) {\n      var _this = this;\n      this.stage = stage;\n      this.elem = elem;\n      this.ratio = stage.viewport().ratio || 1;\n      stage.on(\"viewport\", function(viewport) {\n        var _a;\n        _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio;\n      });\n      elem.addEventListener(\"touchstart\", this.handleStart);\n      elem.addEventListener(\"touchend\", this.handleEnd);\n      elem.addEventListener(\"touchmove\", this.handleMove);\n      elem.addEventListener(\"touchcancel\", this.handleCancel);\n      elem.addEventListener(\"mousedown\", this.handleStart);\n      elem.addEventListener(\"mouseup\", this.handleEnd);\n      elem.addEventListener(\"mousemove\", this.handleMove);\n      document.addEventListener(\"mouseup\", this.handleCancel);\n      window.addEventListener(\"blur\", this.handleCancel);\n      return this;\n    };\n    Pointer2.prototype.unmount = function() {\n      var elem = this.elem;\n      elem.removeEventListener(\"touchstart\", this.handleStart);\n      elem.removeEventListener(\"touchend\", this.handleEnd);\n      elem.removeEventListener(\"touchmove\", this.handleMove);\n      elem.removeEventListener(\"touchcancel\", this.handleCancel);\n      elem.removeEventListener(\"mousedown\", this.handleStart);\n      elem.removeEventListener(\"mouseup\", this.handleEnd);\n      elem.removeEventListener(\"mousemove\", this.handleMove);\n      document.removeEventListener(\"mouseup\", this.handleCancel);\n      window.removeEventListener(\"blur\", this.handleCancel);\n      return this;\n    };\n    Pointer2.prototype.localPoint = function(event) {\n      var _a;\n      var elem = this.elem;\n      var x;\n      var y;\n      if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) {\n        x = event.touches[0].clientX;\n        y = event.touches[0].clientY;\n      } else {\n        x = event.clientX;\n        y = event.clientY;\n      }\n      var rect = elem.getBoundingClientRect();\n      x -= rect.left;\n      y -= rect.top;\n      x -= elem.clientLeft | 0;\n      y -= elem.clientTop | 0;\n      PAYLOAD.x = x * this.ratio;\n      PAYLOAD.y = y * this.ratio;\n    };\n    Pointer2.prototype.findTargets = function(type, result) {\n      var payload = PAYLOAD;\n      payload.type = type;\n      payload.root = this.stage;\n      payload.event = null;\n      payload.collected = result;\n      payload.collected.length = 0;\n      this.stage.visit({\n        reverse: true,\n        visible: true,\n        start: this.visitStart,\n        end: this.visitEnd\n      }, payload);\n    };\n    Pointer2.prototype.dispatchEvent = function(type, event, targets) {\n      var payload = PAYLOAD;\n      payload.type = type;\n      payload.root = this.stage;\n      payload.event = event;\n      payload.timeStamp = Date.now();\n      payload.collected = null;\n      if (type !== \"mousemove\" && type !== \"touchmove\") {\n        Pointer2.DEBUG && console.debug && console.debug(\"pointer:dispatchEvent\", payload, targets === null || targets === void 0 ? void 0 : targets.length);\n      }\n      if (targets) {\n        while (targets.length) {\n          var component2 = targets.shift();\n          if (this.visitEnd(component2, payload)) {\n            break;\n          }\n        }\n        targets.length = 0;\n      } else {\n        this.stage.visit({\n          reverse: true,\n          visible: true,\n          start: this.visitStart,\n          end: this.visitEnd\n        }, payload);\n      }\n    };\n    Pointer2.DEBUG = false;\n    return Pointer2;\n  }()\n);\nvar Mouse = {\n  CLICK: \"click\",\n  START: \"touchstart mousedown\",\n  MOVE: \"touchmove mousemove\",\n  END: \"touchend mouseup\",\n  CANCEL: \"touchcancel mousecancel\"\n};\nvar ROOTS = [];\nfunction pause() {\n  for (var i = ROOTS.length - 1; i >= 0; i--) {\n    ROOTS[i].pause();\n  }\n}\nfunction resume() {\n  for (var i = ROOTS.length - 1; i >= 0; i--) {\n    ROOTS[i].resume();\n  }\n}\nfunction mount(configs) {\n  if (configs === void 0) {\n    configs = {};\n  }\n  var root = new Root();\n  root.mount(configs);\n  root.pointer = new Pointer().mount(root, root.dom);\n  return root;\n}\nvar DEFAULT_CANVAS_MOUNTED = false;\nvar Root = (\n  /** @class */\n  function(_super) {\n    __extends(Root2, _super);\n    function Root2() {\n      var _this = _super.call(this) || this;\n      _this.canvas = null;\n      _this.dom = null;\n      _this.context = null;\n      _this.clientWidth = -1;\n      _this.clientHeight = -1;\n      _this.pixelRatio = 1;\n      _this.canvasWidth = 0;\n      _this.canvasHeight = 0;\n      _this.mounted = false;\n      _this.paused = false;\n      _this.sleep = false;\n      _this.mount = function(configs) {\n        if (configs === void 0) {\n          configs = {};\n        }\n        if (typeof configs.canvas === \"string\") {\n          _this.canvas = document.getElementById(configs.canvas);\n          if (!_this.canvas) {\n            console.error(\"Canvas element not found: \", configs.canvas);\n          }\n        } else if (configs.canvas instanceof HTMLCanvasElement) {\n          _this.canvas = configs.canvas;\n        } else if (configs.canvas) {\n          console.error(\"Unknown value for canvas:\", configs.canvas);\n        }\n        if (!_this.canvas) {\n          _this.canvas = document.getElementById(\"cutjs\") || document.getElementById(\"stage\");\n        }\n        if (!_this.canvas) {\n          if (DEFAULT_CANVAS_MOUNTED) {\n            throw new Error(\"Default canvas element is already mounted. Please provide a canvas element or an id of a canvas element to mount.\");\n          }\n          DEFAULT_CANVAS_MOUNTED = true;\n          console.debug && console.debug(\"Creating canvas element...\");\n          _this.canvas = document.createElement(\"canvas\");\n          Object.assign(_this.canvas.style, {\n            position: \"absolute\",\n            display: \"block\",\n            top: \"0\",\n            left: \"0\",\n            bottom: \"0\",\n            right: \"0\",\n            width: \"100%\",\n            height: \"100%\"\n          });\n          var body = document.body;\n          body.insertBefore(_this.canvas, body.firstChild);\n        }\n        if (_this.canvas[\"__STAGE_MOUNTED\"]) {\n          console.error(\"Canvas element is already mounted: \", _this.canvas);\n        }\n        _this.canvas[\"__STAGE_MOUNTED\"] = true;\n        _this.dom = _this.canvas;\n        _this.context = _this.canvas.getContext(\"2d\");\n        _this.devicePixelRatio = window.devicePixelRatio || 1;\n        _this.backingStoreRatio = _this.context[\"webkitBackingStorePixelRatio\"] || _this.context[\"mozBackingStorePixelRatio\"] || _this.context[\"msBackingStorePixelRatio\"] || _this.context[\"oBackingStorePixelRatio\"] || _this.context[\"backingStorePixelRatio\"] || 1;\n        _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio;\n        _this.mounted = true;\n        ROOTS.push(_this);\n        _this.requestFrame();\n      };\n      _this.frameRequested = false;\n      _this.requestFrame = function() {\n        if (!_this.frameRequested) {\n          _this.frameRequested = true;\n          requestAnimationFrame(_this.onFrame);\n        }\n      };\n      _this._lastFrameTime = 0;\n      _this._mo_touch = null;\n      _this.onFrame = function(now) {\n        _this.frameRequested = false;\n        if (!_this.mounted || !_this.canvas || !_this.context) {\n          return;\n        }\n        _this.requestFrame();\n        _this.resizeCanvas();\n        var last = _this._lastFrameTime || now;\n        var elapsed = now - last;\n        if (!_this.mounted || _this.paused || _this.sleep) {\n          return;\n        }\n        _this._lastFrameTime = now;\n        _this.prerender();\n        var tickRequest = _this._tick(elapsed, now, last);\n        if (_this._mo_touch != _this._ts_touch) {\n          _this._mo_touch = _this._ts_touch;\n          _this.sleep = false;\n          if (_this.canvasWidth > 0 && _this.canvasHeight > 0) {\n            _this.context.setTransform(1, 0, 0, 1, 0, 0);\n            _this.context.clearRect(0, 0, _this.canvasWidth, _this.canvasHeight);\n            if (_this.debugDrawAxis > 0) {\n              _this.renderDebug(_this.context);\n            }\n            _this.render(_this.context);\n          }\n        } else if (tickRequest) {\n          _this.sleep = false;\n        } else {\n          _this.sleep = true;\n        }\n        stats.fps = elapsed ? 1e3 / elapsed : 0;\n      };\n      _this.debugDrawAxis = 0;\n      _this.label(\"Root\");\n      return _this;\n    }\n    Root2.prototype.resizeCanvas = function() {\n      var newClientWidth = this.canvas.clientWidth;\n      var newClientHeight = this.canvas.clientHeight;\n      if (this.clientWidth === newClientWidth && this.clientHeight === newClientHeight)\n        return;\n      this.clientWidth = newClientWidth;\n      this.clientHeight = newClientHeight;\n      var notStyled = this.canvas.clientWidth === this.canvas.width && this.canvas.clientHeight === this.canvas.height;\n      var pixelRatio;\n      if (notStyled) {\n        pixelRatio = 1;\n        this.canvasWidth = this.canvas.width;\n        this.canvasHeight = this.canvas.height;\n      } else {\n        pixelRatio = this.pixelRatio;\n        this.canvasWidth = this.clientWidth * pixelRatio;\n        this.canvasHeight = this.clientHeight * pixelRatio;\n        if (this.canvas.width !== this.canvasWidth || this.canvas.height !== this.canvasHeight) {\n          this.canvas.width = this.canvasWidth;\n          this.canvas.height = this.canvasHeight;\n        }\n      }\n      console.debug && console.debug(\"Resize: [\" + this.canvasWidth + \", \" + this.canvasHeight + \"] = \" + pixelRatio + \" x [\" + this.clientWidth + \", \" + this.clientHeight + \"]\");\n      this.viewport({\n        width: this.canvasWidth,\n        height: this.canvasHeight,\n        ratio: pixelRatio\n      });\n    };\n    Root2.prototype.renderDebug = function(context) {\n      var size = typeof this.debugDrawAxis === \"number\" ? this.debugDrawAxis : 10;\n      var m = this.matrix();\n      context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n      var lineWidth = 3 / m.a;\n      context.beginPath();\n      context.moveTo(0, 0);\n      context.lineTo(0, 0.8 * size);\n      context.lineTo(-0.2 * size, 0.8 * size);\n      context.lineTo(0, size);\n      context.lineTo(0.2 * size, 0.8 * size);\n      context.lineTo(0, 0.8 * size);\n      context.strokeStyle = \"rgba(93, 173, 226)\";\n      context.lineJoin = \"round\";\n      context.lineCap = \"round\";\n      context.lineWidth = lineWidth;\n      context.stroke();\n      context.beginPath();\n      context.moveTo(0, 0);\n      context.lineTo(0.8 * size, 0);\n      context.lineTo(0.8 * size, -0.2 * size);\n      context.lineTo(size, 0);\n      context.lineTo(0.8 * size, 0.2 * size);\n      context.lineTo(0.8 * size, 0);\n      context.strokeStyle = \"rgba(236, 112, 99)\";\n      context.lineJoin = \"round\";\n      context.lineCap = \"round\";\n      context.lineWidth = lineWidth;\n      context.stroke();\n    };\n    Root2.prototype.resume = function() {\n      if (this.sleep || this.paused) {\n        this.requestFrame();\n      }\n      this.paused = false;\n      this.sleep = false;\n      this.publish(\"resume\");\n      return this;\n    };\n    Root2.prototype.pause = function() {\n      if (!this.paused) {\n        this.publish(\"pause\");\n      }\n      this.paused = true;\n      return this;\n    };\n    Root2.prototype.touch = function() {\n      if (this.sleep || this.paused) {\n        this.requestFrame();\n      }\n      this.sleep = false;\n      return _super.prototype.touch.call(this);\n    };\n    Root2.prototype.unmount = function() {\n      var _a;\n      this.mounted = false;\n      var index = ROOTS.indexOf(this);\n      if (index >= 0) {\n        ROOTS.splice(index, 1);\n      }\n      (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount();\n      return this;\n    };\n    Root2.prototype.background = function(color) {\n      if (this.dom) {\n        this.dom.style.backgroundColor = color;\n      }\n      return this;\n    };\n    Root2.prototype.viewport = function(width, height, ratio) {\n      if (typeof width === \"undefined\") {\n        return Object.assign({}, this._viewport);\n      }\n      if (typeof width === \"object\") {\n        var options = width;\n        width = options.width;\n        height = options.height;\n        ratio = options.ratio;\n      }\n      if (typeof width === \"number\" && typeof height === \"number\") {\n        this._viewport = {\n          width,\n          height,\n          ratio: typeof ratio === \"number\" ? ratio : 1\n        };\n        this.viewbox();\n        var data_1 = Object.assign({}, this._viewport);\n        this.visit({\n          start: function(component2) {\n            if (!component2._flag(\"viewport\")) {\n              return true;\n            }\n            component2.publish(\"viewport\", [data_1]);\n          }\n        });\n      }\n      return this;\n    };\n    Root2.prototype.viewbox = function(width, height, mode) {\n      if (typeof width === \"number\" && typeof height === \"number\") {\n        this._viewbox = {\n          width,\n          height,\n          mode\n        };\n      } else if (typeof width === \"object\" && width !== null) {\n        this._viewbox = __assign({}, width);\n      }\n      this.rescale();\n      return this;\n    };\n    Root2.prototype.camera = function(matrix) {\n      this._camera = matrix;\n      this.rescale();\n      return this;\n    };\n    Root2.prototype.rescale = function() {\n      var viewbox = this._viewbox;\n      var viewport = this._viewport;\n      var camera = this._camera;\n      if (viewport && viewbox) {\n        var viewportWidth = viewport.width;\n        var viewportHeight = viewport.height;\n        var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : \"in-pad\";\n        var viewboxWidth = viewbox.width;\n        var viewboxHeight = viewbox.height;\n        this.pin({\n          width: viewboxWidth,\n          height: viewboxHeight\n        });\n        this.fit(viewportWidth, viewportHeight, viewboxMode);\n        var viewboxX = viewbox.x || 0;\n        var viewboxY = viewbox.y || 0;\n        var cameraZoomX = (camera === null || camera === void 0 ? void 0 : camera.a) || 1;\n        var cameraZoomY = (camera === null || camera === void 0 ? void 0 : camera.d) || 1;\n        var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0;\n        var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0;\n        var pinScaleX = this.pin(\"scaleX\");\n        var pinScaleY = this.pin(\"scaleY\");\n        var scaleX = pinScaleX * cameraZoomX;\n        var scaleY = pinScaleY * cameraZoomY;\n        this.pin(\"scaleX\", scaleX);\n        this.pin(\"scaleY\", scaleY);\n        this.pin(\"offsetX\", cameraX - viewboxX * scaleX);\n        this.pin(\"offsetY\", cameraY - viewboxY * scaleY);\n      } else if (viewport) {\n        this.pin({\n          width: viewport.width,\n          height: viewport.height\n        });\n      }\n      return this;\n    };\n    Root2.prototype.flipX = function(x) {\n      this._pin._directionX = x ? -1 : 1;\n      return this;\n    };\n    Root2.prototype.flipY = function(y) {\n      this._pin._directionY = y ? -1 : 1;\n      return this;\n    };\n    return Root2;\n  }(Component)\n);\nfunction anim(frames, fps) {\n  var anim2 = new Anim();\n  anim2.frames(frames).gotoFrame(0);\n  fps && anim2.fps(fps);\n  return anim2;\n}\nvar FPS = 15;\nvar Anim = (\n  /** @class */\n  function(_super) {\n    __extends(Anim2, _super);\n    function Anim2() {\n      var _this = _super.call(this) || this;\n      _this._texture = null;\n      _this._frames = [];\n      _this._time = -1;\n      _this._repeat = 0;\n      _this._index = 0;\n      _this._animTickLastTime = 0;\n      _this._animTick = function(t, now, last) {\n        if (_this._time < 0 || _this._frames.length <= 1) {\n          return;\n        }\n        var ignore = _this._animTickLastTime != last;\n        _this._animTickLastTime = now;\n        if (ignore) {\n          return true;\n        }\n        _this._time += t;\n        if (_this._time < _this._ft) {\n          return true;\n        }\n        var n = _this._time / _this._ft | 0;\n        _this._time -= n * _this._ft;\n        _this.moveFrame(n);\n        if (_this._repeat > 0 && (_this._repeat -= n) <= 0) {\n          _this.stop();\n          _this._callback && _this._callback();\n          return false;\n        }\n        return true;\n      };\n      _this.label(\"Anim\");\n      _this._fps = FPS;\n      _this._ft = 1e3 / _this._fps;\n      _this.tick(_this._animTick, false);\n      return _this;\n    }\n    Anim2.prototype.renderTexture = function(context) {\n      if (!this._texture)\n        return;\n      this._texture.draw(context);\n    };\n    Anim2.prototype.fps = function(fps) {\n      if (typeof fps === \"undefined\") {\n        return this._fps;\n      }\n      this._fps = fps > 0 ? fps : FPS;\n      this._ft = 1e3 / this._fps;\n      return this;\n    };\n    Anim2.prototype.setFrames = function(frames) {\n      return this.frames(frames);\n    };\n    Anim2.prototype.frames = function(frames) {\n      this._index = 0;\n      this._frames = texture(frames).array();\n      this.touch();\n      return this;\n    };\n    Anim2.prototype.length = function() {\n      return this._frames ? this._frames.length : 0;\n    };\n    Anim2.prototype.gotoFrame = function(frame, resize) {\n      if (resize === void 0) {\n        resize = false;\n      }\n      this._index = math.wrap(frame, this._frames.length) | 0;\n      resize = resize || !this._texture;\n      this._texture = this._frames[this._index];\n      if (resize) {\n        this.pin(\"width\", this._texture.getWidth());\n        this.pin(\"height\", this._texture.getHeight());\n      }\n      this.touch();\n      return this;\n    };\n    Anim2.prototype.moveFrame = function(move) {\n      return this.gotoFrame(this._index + move);\n    };\n    Anim2.prototype.repeat = function(repeat, callback) {\n      this._repeat = repeat * this._frames.length - 1;\n      this._callback = callback;\n      this.play();\n      return this;\n    };\n    Anim2.prototype.play = function(frame) {\n      if (typeof frame !== \"undefined\") {\n        this.gotoFrame(frame);\n        this._time = 0;\n      } else if (this._time < 0) {\n        this._time = 0;\n      }\n      this.touch();\n      return this;\n    };\n    Anim2.prototype.stop = function(frame) {\n      this._time = -1;\n      if (typeof frame !== \"undefined\") {\n        this.gotoFrame(frame);\n      }\n      return this;\n    };\n    return Anim2;\n  }(Component)\n);\nfunction monotype(chars) {\n  return new Monotype().frames(chars);\n}\nvar Monotype = (\n  /** @class */\n  function(_super) {\n    __extends(Monotype2, _super);\n    function Monotype2() {\n      var _this = _super.call(this) || this;\n      _this._textures = [];\n      _this.label(\"Monotype\");\n      return _this;\n    }\n    Monotype2.prototype.renderTexture = function(context) {\n      if (!this._textures || !this._textures.length)\n        return;\n      for (var i = 0, n = this._textures.length; i < n; i++) {\n        this._textures[i].draw(context);\n      }\n    };\n    Monotype2.prototype.setFont = function(frames) {\n      return this.frames(frames);\n    };\n    Monotype2.prototype.frames = function(frames) {\n      this._textures = [];\n      if (typeof frames == \"string\") {\n        var selection_1 = texture(frames);\n        this._font = function(value) {\n          return selection_1.one(value);\n        };\n      } else if (typeof frames === \"object\") {\n        this._font = function(value) {\n          return frames[value];\n        };\n      } else if (typeof frames === \"function\") {\n        this._font = frames;\n      }\n      return this;\n    };\n    Monotype2.prototype.setValue = function(value) {\n      return this.value(value);\n    };\n    Monotype2.prototype.value = function(value) {\n      if (typeof value === \"undefined\") {\n        return this._value;\n      }\n      if (this._value === value) {\n        return this;\n      }\n      this._value = value;\n      if (value === null) {\n        value = \"\";\n      } else if (typeof value !== \"string\" && !Array.isArray(value)) {\n        value = value.toString();\n      }\n      this._spacing = this._spacing || 0;\n      var width = 0;\n      var height = 0;\n      for (var i = 0; i < value.length; i++) {\n        var v = value[i];\n        var texture_1 = this._textures[i] = this._font(typeof v === \"string\" ? v : v + \"\");\n        width += i > 0 ? this._spacing : 0;\n        texture_1.setDestinationCoordinate(width, 0);\n        width = width + texture_1.getWidth();\n        height = Math.max(height, texture_1.getHeight());\n      }\n      this.pin(\"width\", width);\n      this.pin(\"height\", height);\n      this._textures.length = value.length;\n      return this;\n    };\n    return Monotype2;\n  }(Component)\n);\nconst Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  Anim,\n  Atlas,\n  CanvasTexture,\n  Component,\n  Image: Sprite,\n  ImageTexture,\n  Math: math,\n  Matrix,\n  Monotype,\n  Mouse,\n  Node: Component,\n  POINTER_CANCEL,\n  POINTER_CLICK,\n  POINTER_DOWN,\n  POINTER_END,\n  POINTER_MOVE,\n  POINTER_START,\n  POINTER_UP,\n  Pin,\n  PipeTexture,\n  Pointer,\n  ResizableTexture,\n  Root,\n  Sprite,\n  Str: Monotype,\n  Texture,\n  TextureSelection,\n  Transition,\n  anim,\n  atlas,\n  box,\n  canvas,\n  clamp,\n  column,\n  component,\n  create,\n  image: sprite,\n  isValidFitMode,\n  layer,\n  layout,\n  length,\n  math,\n  maximize,\n  memoizeDraw,\n  minimize,\n  monotype,\n  mount,\n  pause,\n  preload,\n  random,\n  resume,\n  row,\n  sprite,\n  string: monotype,\n  texture,\n  wrap\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n  Anim,\n  Atlas,\n  CanvasTexture,\n  Component,\n  Sprite as Image,\n  ImageTexture,\n  math as Math,\n  Matrix,\n  Monotype,\n  Mouse,\n  Component as Node,\n  POINTER_CANCEL,\n  POINTER_CLICK,\n  POINTER_DOWN,\n  POINTER_END,\n  POINTER_MOVE,\n  POINTER_START,\n  POINTER_UP,\n  Pin,\n  PipeTexture,\n  Pointer,\n  ResizableTexture,\n  Root,\n  Sprite,\n  Monotype as Str,\n  Texture,\n  TextureSelection,\n  Transition,\n  anim,\n  atlas,\n  box,\n  canvas,\n  clamp,\n  column,\n  component,\n  create,\n  Stage as default,\n  sprite as image,\n  isValidFitMode,\n  layer,\n  layout,\n  length,\n  math,\n  maximize,\n  memoizeDraw,\n  minimize,\n  monotype,\n  mount,\n  pause,\n  preload,\n  random,\n  resume,\n  row,\n  sprite,\n  monotype as string,\n  texture,\n  wrap\n};\n//# sourceMappingURL=stage.js.map\n","/**\n * Polymatic v0.0.12\n * @copyright Copyright 2026 Ali Shakiba\n * @license Licensed under the MIT (https://github.com/piqnt/polymatic/blob/main/LICENSE.md)\n */\nfunction getOption(key) {\n  try {\n    const value = localStorage.getItem(key);\n    if (value)\n      return value;\n  } catch (e) {\n  }\n  try {\n    const value = sessionStorage.getItem(key);\n    if (value)\n      return value;\n  } catch (e) {\n  }\n}\nfunction isEnabled(type, namespace) {\n  let exclude = getOption(type + \"_exclude\");\n  let include = getOption(type + \"_include\");\n  try {\n    if (exclude && namespace.match(exclude))\n      return false;\n  } catch (e) {\n    console.log(e);\n  }\n  try {\n    if (include && namespace.match(include))\n      return true;\n  } catch (e) {\n    console.log(e);\n  }\n  return false;\n}\nfunction debug(namespace, filter) {\n  const isDebug = isEnabled(\"debug\", namespace);\n  const isTrace = isEnabled(\"trace\", namespace);\n  if (!isDebug) {\n    return () => {\n    };\n  }\n  return (...args) => {\n    if (filter && !filter(...args)) {\n      return;\n    }\n    console.log(namespace, ...args);\n    isTrace && console.trace();\n  };\n}\nfunction watch(namespace, target) {\n  const isWatch = isEnabled(\"watch\", namespace);\n  const isTrace = isEnabled(\"trace\", namespace);\n  if (!isWatch) {\n    return target;\n  }\n  return new Proxy(target, {\n    set(obj, prop, value, receiver) {\n      console.debug(namespace, \".\", prop.toString(), obj[prop], \"↬\", value);\n      isTrace && console.trace();\n      return Reflect.set(obj, prop, value, receiver);\n    }\n  });\n}\nconst debugEvent = debug(\"middleware.event\", (type) => {\n  return !((type === null || type === void 0 ? void 0 : type.endsWith(\"-move\")) || type === \"hotsyncWorld\");\n});\nconst debugMiddleware = debug(\"middleware.lifecycle\");\nclass Middleware {\n  constructor() {\n    this.__handlers = {};\n    this.__children = [];\n    this.__parent = null;\n    this._swap = (children) => {\n      const current = this.__children;\n      const removed = [];\n      const added = [];\n      for (const child of children) {\n        if (current.indexOf(child) === -1) {\n          added.push(child);\n        }\n      }\n      for (const child of current) {\n        if (children.indexOf(child) === -1) {\n          removed.push(child);\n        }\n      }\n      this.__children = children;\n      for (const child of removed) {\n        child.__detach();\n      }\n      for (const child of added) {\n        child.__attach(this);\n      }\n    };\n  }\n  get activated() {\n    return this.__parent && this.__parent.activated;\n  }\n  /** Add a child middleware */\n  use(middleware) {\n    const index = this.__children.indexOf(middleware);\n    if (index !== -1)\n      return;\n    if (this.activated) {\n      middleware.__attach(this);\n    }\n    this.__children.push(middleware);\n  }\n  unuse(middleware) {\n    const index = this.__children.indexOf(middleware);\n    if (index !== -1) {\n      this.__children.splice(index, 1);\n      middleware === null || middleware === void 0 ? void 0 : middleware.__detach();\n    }\n  }\n  /** @internal @hidden */\n  __attach(parent) {\n    if (this.__parent) {\n      return;\n    }\n    this.__parent = parent;\n    debugMiddleware(\"activate\", \"+\", this.constructor.name);\n    this._handle(\"activate\");\n    for (let i = 0; i < this.__children.length; i++) {\n      this.__children[i].__attach(this);\n    }\n  }\n  /** @internal @hidden */\n  __detach() {\n    if (!this.__parent) {\n      return;\n    }\n    debugMiddleware(\"deactivate\", \"-\", this.constructor.name);\n    this._handle(\"deactivate\");\n    for (let i = 0; i < this.__children.length; i++) {\n      this.__children[i].__detach();\n    }\n    this.__parent = null;\n  }\n  get context() {\n    if (this.__parent) {\n      return this.__parent.context;\n    } else {\n      return null;\n    }\n  }\n  setContext(setter) {\n    if (this.__parent) {\n      this.__parent.setContext(setter);\n    } else {\n      console.error(\"Middleware is not activated\");\n    }\n  }\n  /**\n   * Add an event handler\n   */\n  on(type, handler) {\n    if (this.__handlers[type])\n      throw Error(`Handler for ${type} already exists`);\n    this.__handlers[type] = handler;\n  }\n  /**\n   * \"capture\" an event: call handlers and pass it to children.\n   */\n  _consume(type, ev) {\n    const stop = this._handle(type, ev);\n    if (stop)\n      return true;\n    for (let i = 0; i < this.__children.length; i++) {\n      const stop2 = this.__children[i]._consume(type, ev);\n      if (stop2)\n        return true;\n    }\n    return false;\n  }\n  /**\n   * Call event handler registered on this middleware\n   */\n  _handle(type, ev) {\n    if (!this.activated)\n      return;\n    const handler = this.__handlers && this.__handlers[type];\n    if (handler) {\n      if (typeof handler === \"function\") {\n        debugEvent(type, \"→\", this.constructor.name, ev);\n        const stop = handler.call(this, ev);\n        if (stop === true)\n          return true;\n      }\n    }\n    return false;\n  }\n  /**\n   * \"bubble\" an event to parent, pass to parent until it reaches the top.\n   */\n  emit(type, ev) {\n    if (!this.activated)\n      return;\n    debugEvent(type, \"↑\", this.constructor.name, ev);\n    if (this.__parent) {\n      this.__parent.emit(type, ev);\n    } else {\n      console.error(Error(\"Not active!\"));\n    }\n  }\n  /** @hidden @deprecated */\n  static activate(middleware, context) {\n    return Runtime.activate(middleware, context);\n  }\n}\nclass Runtime extends Middleware {\n  constructor() {\n    super(...arguments);\n    this.__handlers = {};\n    this.__children = [];\n    this._activated = false;\n    this.contextUpdateEmit = () => {\n      this.emit(\"context-change\");\n    };\n  }\n  get activated() {\n    return this._activated;\n  }\n  _activate(context) {\n    if (this._activated) {\n      return;\n    }\n    context = watch(\"middleware.context\", context);\n    this._context = context;\n    this._activated = true;\n    this._handle(\"activate\");\n    for (let i = 0; i < this.__children.length; i++) {\n      this.__children[i].__attach(this);\n    }\n  }\n  _deactivate() {\n    if (!this._activated) {\n      return;\n    }\n    this._activated = false;\n    this._handle(\"deactivate\");\n    for (let i = 0; i < this.__children.length; i++) {\n      this.__children[i].__detach();\n    }\n  }\n  get context() {\n    return this._context;\n  }\n  setContext(setter) {\n    if (typeof setter !== \"function\") {\n      console.error(\"Setter is not a function: \", setter);\n      return;\n    }\n    setter(this.context);\n    clearTimeout(this.contextUpdateEmitTimeout);\n    this.contextUpdateEmitTimeout = setTimeout(this.contextUpdateEmit);\n  }\n  emit(name, ev) {\n    setTimeout(() => {\n      this._consume(name, ev);\n    });\n  }\n  static activate(middleware, context) {\n    const manager = new Runtime();\n    manager.use(middleware);\n    manager._activate(context);\n  }\n  static deactivate(middleware) {\n    if (\"_deactivate\" in middleware && typeof middleware._deactivate === \"function\") {\n      middleware._deactivate();\n      return true;\n    }\n    const parent = middleware.__parent;\n    if (parent && \"_deactivate\" in parent && typeof parent._deactivate === \"function\") {\n      parent._deactivate();\n      return true;\n    }\n    return false;\n  }\n}\nclass Driver {\n  constructor() {\n    this._componentsById = {};\n  }\n  static create(config) {\n    return new class extends Driver {\n      constructor() {\n        super(...arguments);\n        this.filter = config.filter;\n        this.enter = config.enter;\n        this.exit = config.exit;\n        this.update = config.update;\n      }\n    }();\n  }\n  ref(key) {\n    return this._componentsById[key];\n  }\n}\nclass Binder {\n  constructor() {\n    this._drivers = [];\n    this._map = {};\n    this._mapBuffer = {};\n    this._updateBuffer = [];\n    this._enterBuffer = [];\n    this._exitBuffer = [];\n  }\n  static create(config) {\n    return new class extends Binder {\n      constructor() {\n        super(...arguments);\n        this.key = config.key;\n        this._drivers = config.drivers ? [...config.drivers] : [];\n      }\n    }();\n  }\n  addDriver(driver) {\n    const isValid = driver && driver.filter && driver.enter && driver.exit && driver.update;\n    if (!isValid)\n      throw \"Invalid driver: \" + driver;\n    this._drivers.push(driver);\n    return this;\n  }\n  data(data) {\n    if (!Array.isArray(data))\n      throw \"Invalid data: \" + data;\n    this._enterBuffer.length = 0;\n    this._exitBuffer.length = 0;\n    this._updateBuffer.length = data.length;\n    for (let i = 0; i < data.length; i++) {\n      const d = data[i];\n      if (typeof d !== \"object\" || d === null)\n        continue;\n      const id = this.key(d);\n      if (!this._map[id]) {\n        this._enterBuffer.push(d);\n      } else {\n        delete this._map[id];\n      }\n      this._updateBuffer[i] = d;\n      this._mapBuffer[id] = d;\n    }\n    for (const id in this._map) {\n      this._exitBuffer.push(this._map[id]);\n      delete this._map[id];\n    }\n    const temp = this._map;\n    this._map = this._mapBuffer;\n    this._mapBuffer = temp;\n    for (let i = 0; i < this._exitBuffer.length; i++) {\n      const d = this._exitBuffer[i];\n      const key = this.key(d);\n      for (const driver of this._drivers) {\n        if (driver.filter(d)) {\n          const ref = driver._componentsById[key];\n          driver.exit(d, ref);\n        }\n        delete driver._componentsById[key];\n      }\n    }\n    for (let i = 0; i < this._enterBuffer.length; i++) {\n      const d = this._enterBuffer[i];\n      const key = this.key(d);\n      for (const driver of this._drivers) {\n        if (driver.filter(d)) {\n          const ref = driver.enter(d);\n          if (ref) {\n            driver._componentsById[key] = ref;\n          }\n        }\n      }\n    }\n    for (let i = 0; i < this._updateBuffer.length; i++) {\n      if (typeof data[i] !== \"object\" || data[i] === null)\n        continue;\n      const d = this._updateBuffer[i];\n      const key = this.key(d);\n      for (const driver of this._drivers) {\n        if (driver.filter(d)) {\n          const ref = driver._componentsById[key];\n          driver.update(d, ref);\n        }\n      }\n    }\n    this._enterBuffer.length = 0;\n    this._exitBuffer.length = 0;\n    this._updateBuffer.length = 0;\n  }\n}\nclass Memo {\n  constructor() {\n    this.memory = [];\n  }\n  static init(...args) {\n    const memo = new Memo();\n    if (args.length)\n      memo.update(...args);\n    return memo;\n  }\n  /**\n   * Returns true if args are updated.\n   */\n  update(...args) {\n    let equal = this.memory.length === args.length;\n    for (let i = 0; i < args.length; i++) {\n      equal = equal && this.memory[i] === args[i];\n      this.memory[i] = args[i];\n    }\n    this.memory.length = args.length;\n    return !equal;\n  }\n  clear() {\n    this.memory.length = 0;\n  }\n}\nexport {\n  Binder,\n  Binder as Dataset,\n  Driver,\n  Memo,\n  Middleware,\n  Runtime\n};\n//# sourceMappingURL=polymatic.js.map\n","import * as Stage from \"stage-js\";\nimport type { Vec2Value, AABBValue } from \"planck\";\nimport { Middleware, Memo } from \"polymatic\";\n\nconst math_PI = Math.PI;\n\ninterface MagicboardContext {\n  stage: Stage.Root;\n  magicboard: MagicboardInterface;\n}\n\nexport interface MagicboardInterface {\n  drawPoint(p: Vec2Value, r: number, color: string): void;\n  drawCircle(p: Vec2Value, r: number, color: string): void;\n  drawEdge(a: Vec2Value, b: Vec2Value, color: string): void;\n  drawSegment(a: Vec2Value, b: Vec2Value, color: string): void;\n  drawPolygon(points: Array<Vec2Value>, color: string): void;\n  drawChain(points: Array<Vec2Value>, color: string): void;\n  drawAABB(aabb: AABBValue, color: string): void;\n}\n\n/**\n * Memoized drawing surface.\n */\nexport class Magicboard extends Middleware<MagicboardContext> {\n  private component: Stage.Node;\n\n  private setupMemo = Memo.init();\n\n  private nextBuffer = [];\n  private lastBuffer = [];\n\n  static lineWidth = 3;\n\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleActivate);\n    this.on(\"context-change\", this.handleContextChange);\n    this.on(\"deactivate\", this.handleDeactivate);\n\n    this.on(\"frame-before\", this.handleFrameBefore);\n    this.on(\"frame-render\", this.handleFrameRender);\n\n    this.component = new Stage.Node();\n    this.component.renderTexture = (ctx: CanvasRenderingContext2D): void => {\n      const pixelRatio = this.component.getDevicePixelRatio();\n      ctx.save();\n      ctx.lineWidth = Magicboard.lineWidth / pixelRatio;\n      ctx.lineCap = \"round\";\n      drawCommands(this.nextBuffer, ctx, pixelRatio);\n      ctx.restore();\n    };\n  }\n\n  handleActivate = () => {\n    this.context.magicboard = this;\n    this.handleContextChange();\n  };\n\n  handleContextChange() {\n    if (!this.setupMemo.update(this.context.stage)) return;\n    if (!this.context.stage) {\n      this.handleDeactivate();\n    } else {\n      this.context.stage.append(this.component);\n    }\n  }\n\n  handleDeactivate() {\n    this.context.magicboard = null;\n    this.component?.remove();\n    this.component = null;\n  }\n\n  // clear buffer before each frame\n  handleFrameBefore = () => {\n    this.nextBuffer.length = 0;\n  };\n\n  // check buffer hash after all draw requests\n  handleFrameRender = () => {\n    if (!equal(this.lastBuffer, this.nextBuffer)) {\n      copy(this.lastBuffer, this.nextBuffer);\n      this.component.touch();\n    }\n    // this.newBufferHash = \"\";\n  };\n\n  drawPoint = (p: Vec2Value, r: number, color: string): void => {\n    this.nextBuffer.push(\"point\", p.x, p.y, color);\n  };\n\n  drawCircle = (p: Vec2Value, r: number, color: string): void => {\n    this.nextBuffer.push(\"circle\", p.x, p.y, r, color);\n  };\n\n  drawEdge = (a: Vec2Value, b: Vec2Value, color: string): void => {\n    this.nextBuffer.push(\"edge\", a.x, a.y, b.x, b.y, color);\n  };\n\n  drawSegment = this.drawEdge;\n\n  drawPolygon = (points: Array<Vec2Value>, color: string): void => {\n    if (!points || !points.length) {\n      return;\n    }\n    this.nextBuffer.push(\"polygon\", points.length);\n    for (let i = 0; i < points.length; i++) {\n      this.nextBuffer.push(points[i].x, points[i].y);\n    }\n    this.nextBuffer.push(color);\n  };\n\n  drawChain = (points: Array<Vec2Value>, color: string): void => {\n    if (!points || !points.length) {\n      return;\n    }\n    this.nextBuffer.push(\"chain\", points.length);\n    for (let i = 0; i < points.length; i++) {\n      this.nextBuffer.push(points[i].x, points[i].y);\n    }\n    this.nextBuffer.push(color);\n  };\n\n  drawAABB = (aabb: AABBValue, color: string): void => {\n    this.nextBuffer.push(\"polygon\", 4);\n    this.nextBuffer.push(aabb.lowerBound.x, aabb.lowerBound.y);\n    this.nextBuffer.push(aabb.upperBound.x, aabb.lowerBound.y);\n    this.nextBuffer.push(aabb.upperBound.x, aabb.upperBound.y);\n    this.nextBuffer.push(aabb.lowerBound.x, aabb.upperBound.y);\n    this.nextBuffer.push(color);\n  };\n}\n\nconst drawCommands = (commands: (string | number)[], ctx: CanvasRenderingContext2D, pixelRatio: number) => {\n  while (commands.length) {\n    const type = commands.shift() as string;\n    switch (type) {\n      case \"circle\": {\n        const x = commands.shift() as number;\n        const y = commands.shift() as number;\n        const r = commands.shift() as number;\n        const color = commands.shift() as string;\n        ctx.beginPath();\n        ctx.arc(x, y, r, 0, 2 * math_PI);\n        ctx.strokeStyle = color;\n        ctx.stroke();\n        break;\n      }\n      case \"point\": {\n        const x = commands.shift() as number;\n        const y = commands.shift() as number;\n        const color = commands.shift() as string;\n        ctx.beginPath();\n        ctx.arc(x, y, 5 / pixelRatio, 0, 2 * math_PI);\n        ctx.strokeStyle = color;\n        ctx.stroke();\n        break;\n      }\n      case \"edge\": {\n        const x1 = commands.shift() as number;\n        const y1 = commands.shift() as number;\n        const x2 = commands.shift() as number;\n        const y2 = commands.shift() as number;\n        const color = commands.shift() as string;\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.strokeStyle = color;\n        ctx.stroke();\n        break;\n      }\n      case \"polygon\": {\n        const size = commands.shift() as number;\n        const x = commands.shift() as number;\n        const y = commands.shift() as number;\n        ctx.beginPath();\n        ctx.moveTo(x, y);\n        for (let i = 1; i < size; i++) {\n          const x = commands.shift() as number;\n          const y = commands.shift() as number;\n          ctx.lineTo(x, y);\n        }\n        const color = commands.shift() as string;\n        ctx.strokeStyle = color;\n        ctx.closePath();\n        ctx.stroke();\n        break;\n      }\n      case \"chain\": {\n        const size = commands.shift() as number;\n        const x = commands.shift() as number;\n        const y = commands.shift() as number;\n        ctx.beginPath();\n        ctx.moveTo(x, y);\n        for (let i = 1; i < size; i++) {\n          const x = commands.shift() as number;\n          const y = commands.shift() as number;\n          ctx.lineTo(x, y);\n        }\n        const color = commands.shift() as string;\n        ctx.strokeStyle = color;\n        // ctx.closePath();\n        ctx.stroke();\n        break;\n      }\n    }\n  }\n};\n\nconst equal = (left: any[], right: any[]) => {\n  if (left?.length !== right?.length) return false;\n  for (let i = 0; i < left.length; i++) {\n    if (left[i] !== right[i]) return false;\n  }\n  return true;\n};\n\nconst copy = (output: any[], input: any[]) => {\n  for (let i = 0; i < input.length; i++) {\n    output[i] = input[i];\n  }\n  output.length = input.length;\n};\n\nconst copyqual = (output: any[], input: any[]) => {\n  let equal = true;\n  if (output?.length !== input?.length) equal = false;\n  for (let i = 0; i < input.length; i++) {\n    if (output[i] !== input[i]) equal = false;\n    output[i] = input[i];\n  }\n  output.length = input.length;\n  return equal;\n};\n","import { Middleware } from \"polymatic\";\nimport { ContextGamepad } from \"./TestbedContext\";\n\nconst KEY_MAP = {\n  37: \"left\",\n  38: \"up\",\n  39: \"right\",\n  40: \"down\",\n  32: \"fire\",\n  13: \"fire\",\n};\n\ninterface GamepadPluginContext {\n  gamepad: ContextGamepad;\n  activeMode: string;\n  paused: boolean;\n}\n\n// todo: do no use String.fromCharCode\n\nexport class GamepadPlugin extends Middleware<GamepadPluginContext> {\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleActivate);\n    this.on(\"deactivate\", this.handleDeactivate);\n  }\n\n  handleActivate() {\n    window.addEventListener(\"keydown\", this.handleKeydown);\n    window.addEventListener(\"keyup\", this.handleKeyup);\n  }\n\n  handleDeactivate() {\n    window.removeEventListener(\"keydown\", this.handleKeydown);\n    window.removeEventListener(\"keyup\", this.handleKeyup);\n  }\n\n  private handleKeydown = (ev: KeyboardEvent) => {\n    if (this.context.paused) return;\n    if (this.context.activeMode !== \"play\") return;\n\n    const keyCode = ev.keyCode;\n    this.updateActiveKeys(keyCode, true);\n    this.emit(\"gamepad-keydown\", ev);\n  };\n\n  private handleKeyup = (ev: KeyboardEvent) => {\n    if (this.context.paused) return;\n    if (this.context.activeMode !== \"play\") return;\n\n    const keyCode = ev.keyCode;\n    this.updateActiveKeys(keyCode, false);\n    this.emit(\"gamepad-keyup\", ev);\n  };\n\n  private downKeys: Record<number, boolean> = {};\n\n  private updateActiveKeys = (keyCode: number, down: boolean) => {\n    const activeKeys = this.context.gamepad.activeKeys;\n    this.downKeys[keyCode] = down;\n    const char = String.fromCharCode(keyCode);\n    if (/\\w/.test(char)) {\n      if (down) {\n        activeKeys[char] = true;\n        activeKeys[keyCode] = true;\n      } else {\n        delete activeKeys[char];\n        delete activeKeys[keyCode];\n      }\n    }\n    // todo: is this correct, we should probably use downKeys\n    if (KEY_MAP[keyCode]) {\n      if (down) {\n        activeKeys[KEY_MAP[keyCode]] = true;\n      } else {\n        delete activeKeys[KEY_MAP[keyCode]];\n      }\n    }\n  };\n}\n","import { Middleware } from \"polymatic\";\n\nexport interface ConsoleInterface {\n  info(text: string): void;\n  status(name: string, value: any): void;\n  status(value: object | string): void;\n}\n\ninterface ConsoleContext {\n  console: ConsoleInterface;\n}\n\nexport class ConsoleProvider extends Middleware<ConsoleContext> implements ConsoleInterface {\n  private statusElement: HTMLElement;\n  private infoElement: HTMLElement;\n\n  private lastStatus: string;\n  private lastInfo: string;\n\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleActivate);\n    this.on(\"deactivate\", this.handleDeactivate);\n  }\n\n  handleActivate() {\n    this.context.console = this;\n\n    this.statusElement = document.getElementById(\"testbed-status\");\n    this.lastStatus = \"\";\n    if (this.statusElement) {\n      this.statusElement.innerText = this.lastStatus;\n    } else {\n      console.warn(\"Element with id='testbed-status' not found!\");\n    }\n\n    this.infoElement = document.getElementById(\"testbed-info\");\n    this.lastInfo = \"\";\n    if (this.infoElement) {\n      this.infoElement.innerText = this.lastInfo;\n    } else {\n      console.warn(\"Element with id='testbed-info' not found!\");\n    }\n  }\n\n  handleDeactivate() {\n    this.context.console = null;\n  }\n\n  info(text: string): void {\n    this.updateInfo(text);\n  }\n\n  private _statusText = \"\";\n  private _statusMap: Record<string, any> = {};\n\n  status(name: string, value: any): void;\n  status(value: object | string): void;\n  status(a: any, b?: any) {\n    if (typeof b !== \"undefined\") {\n      const key = a;\n      const value = b;\n      if (typeof value !== \"function\" && typeof value !== \"object\") {\n        this._statusMap[key] = value;\n      }\n    } else if (a && typeof a === \"object\") {\n      // tslint:disable-next-line:no-for-in\n      for (const key in a) {\n        const value = a[key];\n        if (typeof value !== \"function\" && typeof value !== \"object\") {\n          this._statusMap[key] = value;\n        }\n      }\n    } else if (typeof a === \"string\") {\n      this._statusText = a;\n    }\n\n    const newline = \"\\n\";\n    let text = this._statusText || \"\";\n    for (const key in this._statusMap) {\n      const value = this._statusMap[key];\n      if (typeof value === \"function\") continue;\n      text += (text && newline) + key + \": \" + value;\n    }\n\n    this.updateStatus(text);\n  }\n\n  updateInfo(text: string): void {\n    if (this.lastInfo === text) {\n      return;\n    }\n    this.lastInfo = text;\n    if (this.infoElement) {\n      this.infoElement.innerText = text;\n    }\n  }\n\n  updateStatus(text: string) {\n    if (this.lastStatus === text) {\n      return;\n    }\n    this.lastStatus = text;\n    if (this.statusElement) {\n      this.statusElement.innerText = text;\n    }\n  }\n}\n","import type { Joint, Fixture, Body, Shape } from \"planck\";\n\nexport interface ComputedStyle {\n  stroke: string;\n  fill: string;\n  lineWidth: number;\n}\n\nexport interface ProvidedStyle {\n  stroke?: string;\n  fill?: string;\n  lineWidth?: number;\n}\n\nconst SHAPE_DEFAULTS = {\n  stroke: \"rgba(255,255,255,0.9)\",\n  fill: \"rgba(255,255,255,0.1)\",\n  lineWidth: 3,\n};\n\nconst JOINT_DEFAULTS = {\n  stroke: \"rgba(255,255,255,0.9)\",\n  fill: null,\n  lineWidth: 3,\n};\n\nfunction getStyle(obj: Body | Fixture | Joint | Shape): ProvidedStyle {\n  if (typeof obj[\"render\"] === \"object\" && (\"stroke\" in obj[\"render\"] || \"fill\" in obj[\"render\"])) {\n    // this was used in planck before v1\n    return obj[\"render\"];\n  } else if (typeof obj[\"style\"] === \"object\") {\n    return obj[\"style\"];\n  }\n}\n\nexport class ComputedShapeStyle implements ComputedStyle {\n  body: Body;\n  fixture: Fixture;\n  global?: ProvidedStyle;\n\n  constructor(body: Body, fixture: Fixture, global?: ProvidedStyle) {\n    this.body = body;\n    this.fixture = fixture;\n    this.global = global;\n  }\n\n  get stroke() {\n    const shapeStyle = getStyle(this.fixture.getShape());\n    const fixtureStyle = getStyle(this.fixture);\n    const bodyStyle = getStyle(this.body);\n\n    let stroke = SHAPE_DEFAULTS.stroke;\n    if (shapeStyle?.stroke) {\n      stroke = shapeStyle.stroke;\n    } else if (fixtureStyle?.stroke) {\n      stroke = fixtureStyle.stroke;\n    } else if (bodyStyle?.stroke) {\n      stroke = bodyStyle.stroke;\n    } else if (this.global?.stroke) {\n      stroke = this.global.stroke;\n    } else if (this.body.isDynamic()) {\n      stroke = \"rgba(255,255,255,0.9)\";\n    } else if (this.body.isKinematic()) {\n      stroke = \"rgba(255,255,255,0.8)\";\n    } else if (this.body.isStatic()) {\n      stroke = \"rgba(255,255,255,0.7)\";\n    }\n    return stroke;\n  }\n\n  get fill() {\n    const shapeStyle = getStyle(this.fixture.getShape());\n    const fixtureStyle = getStyle(this.fixture);\n    const bodyStyle = getStyle(this.body);\n    let fill = SHAPE_DEFAULTS.fill;\n    if (shapeStyle?.fill) {\n      fill = shapeStyle.fill;\n    } else if (fixtureStyle?.fill) {\n      fill = fixtureStyle.fill;\n    } else if (bodyStyle?.fill) {\n      fill = bodyStyle.fill;\n    } else if (this.global?.fill) {\n      fill = this.global.fill;\n    }\n    return fill;\n  }\n\n  get lineWidth() {\n    const shapeStyle = getStyle(this.fixture.getShape());\n    const fixtureStyle = getStyle(this.fixture);\n    const bodyStyle = getStyle(this.body);\n    let lineWidth = SHAPE_DEFAULTS.lineWidth;\n    if (shapeStyle?.lineWidth) {\n      lineWidth = shapeStyle.lineWidth;\n    } else if (fixtureStyle?.lineWidth) {\n      lineWidth = fixtureStyle.lineWidth;\n    } else if (bodyStyle?.lineWidth) {\n      lineWidth = bodyStyle.lineWidth;\n    } else if (this.global?.lineWidth) {\n      lineWidth = this.global.lineWidth;\n    }\n    return lineWidth;\n  }\n}\n\nexport class ComputedJointStyle implements ComputedStyle {\n  joint: Joint;\n  global?: ProvidedStyle;\n\n  constructor(joint: Joint, global?: ProvidedStyle) {\n    this.joint = joint;\n    this.global = global;\n  }\n\n  get stroke() {\n    const jointStyle = getStyle(this.joint);\n\n    let stroke = JOINT_DEFAULTS.stroke;\n    if (jointStyle?.stroke) {\n      stroke = jointStyle.stroke;\n    } else if (this.global?.stroke) {\n      stroke = this.global.stroke;\n    }\n    return stroke;\n  }\n\n  get fill() {\n    const jointStyle = getStyle(this.joint);\n\n    let fill = JOINT_DEFAULTS.fill;\n    if (jointStyle?.fill) {\n      fill = jointStyle.fill;\n    } else if (this.global?.fill) {\n      fill = this.global.fill;\n    }\n    return fill;\n  }\n\n  get lineWidth() {\n    const jointStyle = getStyle(this.joint);\n\n    let lineWidth = JOINT_DEFAULTS.lineWidth;\n    if (jointStyle?.lineWidth) {\n      lineWidth = jointStyle.lineWidth;\n    } else if (this.global?.lineWidth) {\n      lineWidth = this.global.lineWidth;\n    }\n    return lineWidth;\n  }\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { ChainShape } from \"planck\";\nimport { ComputedStyle } from \"./ComputedStyle\";\n\nconst math_max = Math.max;\nconst math_min = Math.min;\n\nexport class ChainShapeComponent extends Stage.Sprite {\n  style: ComputedStyle;\n  shape: ChainShape;\n\n  textureOffset = { x: 0, y: 0, a: 0 };\n\n  constructor(shape: ChainShape, style: ComputedStyle) {\n    super();\n\n    this.style = style;\n    this.shape = shape;\n\n    const textureOffset = this.textureOffset;\n\n    const texture = Stage.canvas();\n    texture.setMemoizer(() => {\n      let key = \"\";\n\n      const vertices = shape.m_vertices;\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        key += v.x + \",\" + v.y + \";\";\n      }\n      key += shape.isLoop() + \";\";\n\n      key += style.lineWidth + \";\";\n      key += style.stroke + \";\";\n      key += style.fill + \";\";\n\n      return key;\n    });\n    texture.setDrawer(function () {\n      const lineWidth = style.lineWidth;\n      const stroke = style.stroke;\n      const fill = style.fill;\n\n      const ctx = this.getContext();\n      const ratio = this.getDevicePixelRatio();\n      const lw = lineWidth / ratio;\n\n      const vertices = shape.m_vertices;\n\n      if (!vertices.length) {\n        return;\n      }\n\n      let minX = Infinity;\n      let minY = Infinity;\n      let maxX = -Infinity;\n      let maxY = -Infinity;\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        minX = math_min(minX, v.x);\n        maxX = math_max(maxX, v.x);\n        minY = math_min(minY, v.y);\n        maxY = math_max(maxY, v.y);\n      }\n\n      textureOffset.x = minX;\n      textureOffset.y = minY;\n\n      this.setSize(maxX - minX + lw, maxY - minY + lw, ratio);\n      this.setPadding(-lw / 2);\n\n      ctx.scale(ratio, ratio);\n      ctx.beginPath();\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        const x = v.x - minX + lw / 2;\n        const y = v.y - minY + lw / 2;\n        if (i == 0) ctx.moveTo(x, y);\n        else ctx.lineTo(x, y);\n      }\n\n      // last vertex of loop is the same as the first, don't need to close the path\n\n      ctx.lineCap = \"round\";\n      ctx.lineJoin = \"round\";\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = stroke ?? \"\";\n      ctx.stroke();\n    });\n\n    this.texture(texture);\n\n    this.tick(this.handleTick);\n  }\n\n  memo = Memo.init(0, 0, 0);\n  handleTick = () => {\n    const x = this.textureOffset.x;\n    const y = this.textureOffset.y;\n    const a = this.textureOffset.a;\n    if (!this.memo.update(x, y, a)) return true;\n    this.offset(x, y);\n    this.rotate(a);\n  };\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { CircleShape } from \"planck\";\nimport { ComputedStyle } from \"./ComputedStyle\";\n\nconst math_PI = Math.PI;\n\nexport class CircleShapeComponent extends Stage.Sprite {\n  style: ComputedStyle;\n  shape: CircleShape;\n\n  textureOffset = { x: 0, y: 0, a: 0 };\n\n  constructor(shape: CircleShape, style: ComputedStyle) {\n    super();\n\n    this.style = style;\n    this.shape = shape;\n\n    const textureOffset = this.textureOffset;\n\n    const texture = Stage.canvas();\n    texture.setMemoizer(() => {\n      let key = \"\";\n\n      const v = shape.getCenter();\n      key += v.x + \",\" + v.y + \";\";\n      key += shape.getRadius() + \";\";\n\n      key += style.lineWidth + \";\";\n      key += style.stroke + \";\";\n      key += style.fill + \";\";\n\n      return key;\n    });\n    texture.setDrawer(function () {\n      const lineWidth = style.lineWidth;\n      const stroke = style.stroke;\n      const fill = style.fill;\n\n      const ctx = this.getContext();\n      const ratio = this.getDevicePixelRatio();\n      const lw = lineWidth / ratio;\n\n      const r = shape.m_radius;\n\n      textureOffset.x = shape.m_p.x - r;\n      textureOffset.y = shape.m_p.y - r;\n\n      this.setSize(r * 2 + lw, r * 2 + lw, ratio);\n      this.setPadding(-lw / 2);\n\n      ctx.scale(ratio, ratio);\n      ctx.arc(r + lw / 2, r + lw / 2, r, 0, 2 * math_PI);\n      if (fill) {\n        ctx.fillStyle = fill;\n        ctx.fill();\n      }\n      ctx.lineTo(r + lw / 2, r + lw / 2);\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = stroke ?? \"\";\n      ctx.lineCap = \"round\";\n      ctx.lineJoin = \"round\";\n      ctx.stroke();\n    });\n\n    this.texture(texture);\n\n    this.tick(this.handleTick);\n  }\n\n  memo = Memo.init(0, 0, 0);\n  handleTick = () => {\n    const x = this.textureOffset.x;\n    const y = this.textureOffset.y;\n    const a = this.textureOffset.a;\n    if (!this.memo.update(x, y, a)) return true;\n    this.offset(x, y);\n    this.rotate(a);\n  };\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { EdgeShape } from \"planck\";\nimport { ComputedStyle } from \"./ComputedStyle\";\n\nconst math_atan2 = Math.atan2;\nconst math_sqrt = Math.sqrt;\nconst math_min = Math.min;\n\nexport class EdgeShapeComponent extends Stage.Sprite {\n  style: ComputedStyle;\n  shape: EdgeShape;\n\n  textureOffset = { x: 0, y: 0, a: 0 };\n\n  constructor(shape: EdgeShape, style: ComputedStyle) {\n    super();\n\n    this.style = style;\n    this.shape = shape;\n\n    const textureOffset = this.textureOffset;\n\n    const texture = Stage.canvas();\n    texture.setMemoizer(() => {\n      let key = \"\";\n\n      const v1 = shape.m_vertex1;\n      const v2 = shape.m_vertex2;\n      key += v1?.x + \",\" + v1?.y + \";\";\n      key += v2?.x + \",\" + v2?.y + \";\";\n\n      key += style.lineWidth + \";\";\n      key += style.stroke + \";\";\n      key += style.fill + \";\";\n\n      return key;\n    });\n    texture.setDrawer(function () {\n      const lineWidth = style.lineWidth;\n      const stroke = style.stroke;\n      const fill = style.fill;\n\n      const ctx = this.getContext();\n      const ratio = this.getDevicePixelRatio();\n      const lw = lineWidth / ratio;\n\n      const v1 = shape.m_vertex1;\n      const v2 = shape.m_vertex2;\n\n      const dx = v2.x - v1.x;\n      const dy = v2.y - v1.y;\n\n      const length = math_sqrt(dx * dx + dy * dy);\n\n      this.setSize(length + lw, lw, ratio);\n      this.setPadding(-lw / 2);\n\n      const minX = math_min(v1.x, v2.x);\n      const minY = math_min(v1.y, v2.y);\n\n      textureOffset.x = minX;\n      textureOffset.y = minY;\n      textureOffset.a = math_atan2(dy, dx);\n\n      ctx.scale(ratio, ratio);\n      ctx.beginPath();\n      ctx.moveTo(lw / 2, lw / 2);\n      ctx.lineTo(lw / 2 + length, lw / 2);\n\n      ctx.lineCap = \"round\";\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = stroke ?? \"\";\n      ctx.stroke();\n    });\n\n    this.texture(texture);\n\n    this.tick(this.handleTick);\n  }\n\n  memo = Memo.init(0, 0, 0);\n  handleTick = () => {\n    const x = this.textureOffset.x;\n    const y = this.textureOffset.y;\n    const a = this.textureOffset.a;\n    if (!this.memo.update(x, y, a)) return true;\n    this.offset(x, y);\n    this.rotate(a);\n  };\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { PolygonShape } from \"planck\";\nimport { ComputedStyle } from \"./ComputedStyle\";\n\nconst math_max = Math.max;\nconst math_min = Math.min;\n\nexport class PolygonShapeComponent extends Stage.Sprite {\n  style: ComputedStyle;\n  shape: PolygonShape;\n\n  textureOffset = { x: 0, y: 0, a: 0 };\n\n  constructor(shape: PolygonShape, style: ComputedStyle) {\n    super();\n\n    this.style = style;\n    this.shape = shape;\n\n    const textureOffset = this.textureOffset;\n\n    const texture = Stage.canvas();\n    texture.setMemoizer(() => {\n      let key = \"\";\n\n      const vertices = shape.m_vertices;\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        key += v.x + \",\" + v.y + \";\";\n      }\n\n      key += style.lineWidth + \";\";\n      key += style.stroke + \";\";\n      key += style.fill + \";\";\n\n      return key;\n    });\n    texture.setDrawer(function () {\n      const lineWidth = style.lineWidth;\n      const stroke = style.stroke;\n      const fill = style.fill;\n\n      const ctx = this.getContext();\n      const ratio = this.getDevicePixelRatio();\n      const lw = lineWidth / ratio;\n\n      const vertices = shape.m_vertices;\n\n      if (!vertices.length) {\n        return;\n      }\n\n      let minX = Infinity;\n      let minY = Infinity;\n      let maxX = -Infinity;\n      let maxY = -Infinity;\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        minX = math_min(minX, v.x);\n        maxX = math_max(maxX, v.x);\n        minY = math_min(minY, v.y);\n        maxY = math_max(maxY, v.y);\n      }\n\n      textureOffset.x = minX;\n      textureOffset.y = minY;\n\n      this.setSize(maxX - minX + lw, maxY - minY + lw, ratio);\n      this.setPadding(-lw / 2);\n\n      ctx.scale(ratio, ratio);\n      ctx.beginPath();\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        const x = v.x - minX + lw / 2;\n        const y = v.y - minY + lw / 2;\n        if (i == 0) ctx.moveTo(x, y);\n        else ctx.lineTo(x, y);\n      }\n\n      if (vertices.length > 2) {\n        if (fill) {\n          ctx.fillStyle = fill;\n          ctx.fill();\n        }\n        ctx.closePath();\n      }\n\n      ctx.lineCap = \"round\";\n      ctx.lineJoin = \"round\";\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = stroke ?? \"\";\n      ctx.stroke();\n    });\n\n    this.texture(texture);\n\n    this.tick(this.handleTick);\n  }\n\n  memo = Memo.init(0, 0, 0);\n  handleTick = () => {\n    const x = this.textureOffset.x;\n    const y = this.textureOffset.y;\n    const a = this.textureOffset.a;\n    if (!this.memo.update(x, y, a)) return true;\n    this.offset(x, y);\n    this.rotate(a);\n  };\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { Joint } from \"planck\";\nimport { ComputedStyle } from \"./ComputedStyle\";\n\nconst math_atan2 = Math.atan2;\nconst math_sqrt = Math.sqrt;\nconst math_min = Math.min;\n\nexport class JointComponent extends Stage.Node {\n  style: ComputedStyle;\n  joint: Joint;\n  memo = Memo.init();\n\n  constructor(joint: Joint, style: ComputedStyle) {\n    super();\n\n    this.style = style;\n    this.joint = joint;\n\n    let offsetX = 0;\n    let offsetY = 0;\n    let offsetA = 0;\n    const offsetMemo = Memo.init();\n\n    const texture = Stage.canvas();\n    texture.setMemoizer(() => {\n      const v1 = joint.getAnchorA();\n      const v2 = joint.getAnchorB();\n      const token = v1.x + \".\" + v1.y + \".\" + v2.x + \".\" + v2.y;\n      return token;\n    });\n\n    texture.setDrawer(function () {\n      const lineWidth = style.lineWidth;\n      const stroke = style.stroke;\n      const fill = style.fill;\n\n      const ctx = this.getContext();\n      const ratio = this.getDevicePixelRatio();\n      const lw = lineWidth / ratio;\n\n      const v1 = joint.getAnchorA();\n      const v2 = joint.getAnchorB();\n\n      const dx = v2.x - v1.x;\n      const dy = v2.y - v1.y;\n\n      const length = math_sqrt(dx * dx + dy * dy);\n\n      this.setSize(length + lw, lw, ratio);\n      this.setPadding(-lw / 2);\n\n      const minX = math_min(v1.x, v2.x);\n      const minY = math_min(v1.y, v2.y);\n\n      offsetX = minX;\n      offsetY = minY;\n      offsetA = math_atan2(dy, dx);\n\n      ctx.scale(ratio, ratio);\n      ctx.beginPath();\n      ctx.moveTo(lw / 2, lw / 2);\n      ctx.lineTo(lw / 2 + length, lw / 2);\n\n      ctx.lineCap = \"round\";\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = stroke ?? \"\";\n      ctx.stroke();\n    });\n\n    const sprite = Stage.sprite(texture);\n    sprite.tick(() => {\n      if (offsetMemo.update(offsetX, offsetY, offsetA)) {\n        sprite.offset(offsetX, offsetY);\n        sprite.rotate(offsetA);\n      }\n    });\n    this.append(sprite);\n  }\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { PulleyJoint } from \"planck\";\nimport { ComputedStyle } from \"./ComputedStyle\";\n\nconst math_max = Math.max;\nconst math_min = Math.min;\n\nexport class PulleyJointComponent extends Stage.Node {\n  style: ComputedStyle;\n  joint: PulleyJoint;\n  memo = Memo.init();\n\n  constructor(joint: PulleyJoint, style: ComputedStyle) {\n    super();\n\n    this.style = style;\n    this.joint = joint;\n\n    const vertices = [];\n\n    let offsetX = 0;\n    let offsetY = 0;\n    const offsetMemo = Memo.init();\n\n    const texture = Stage.canvas();\n    texture.setMemoizer(() => {\n      const v1 = joint.getAnchorA();\n      const v2 = joint.getGroundAnchorA();\n      const v3 = joint.getGroundAnchorB();\n      const v4 = joint.getAnchorB();\n      const token = v1.x + \".\" + v1.y + \".\" + v2.x + \".\" + v2.y + \".\" + v3.x + \".\" + v3.y + \".\" + v4.x + \".\" + v4.y;\n      return token;\n    });\n    texture.setDrawer(function () {\n      const lineWidth = style.lineWidth;\n      const stroke = style.stroke;\n      const fill = style.fill;\n\n      const ctx = this.getContext();\n      const ratio = this.getDevicePixelRatio();\n      const lw = lineWidth / ratio;\n\n      vertices[0] = joint.getAnchorA();\n      vertices[1] = joint.getGroundAnchorA();\n      vertices[2] = joint.getGroundAnchorB();\n      vertices[3] = joint.getAnchorB();\n\n      if (!vertices.length) {\n        return;\n      }\n\n      let minX = Infinity;\n      let minY = Infinity;\n      let maxX = -Infinity;\n      let maxY = -Infinity;\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        minX = math_min(minX, v.x);\n        maxX = math_max(maxX, v.x);\n        minY = math_min(minY, v.y);\n        maxY = math_max(maxY, v.y);\n      }\n\n      const width = maxX - minX;\n      const height = maxY - minY;\n\n      offsetX = minX;\n      offsetY = minY;\n\n      this.setSize(width + lw, height + lw, ratio);\n      this.setPadding(-lw / 2);\n\n      ctx.scale(ratio, ratio);\n      ctx.beginPath();\n      for (let i = 0; i < vertices.length; ++i) {\n        const v = vertices[i];\n        const x = v.x - minX + lw / 2;\n        const y = v.y - minY + lw / 2;\n        if (i == 0) ctx.moveTo(x, y);\n        else ctx.lineTo(x, y);\n      }\n\n      ctx.lineCap = \"round\";\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = stroke ?? \"\";\n      ctx.stroke();\n    });\n\n    const sprite = Stage.sprite(texture);\n    sprite.tick(() => {\n      if (offsetMemo.update(offsetX, offsetY)) {\n        sprite.offset(offsetX, offsetY);\n      }\n    });\n    this.append(sprite);\n  }\n}\n","import { Memo } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport type { Body } from \"planck\";\n\nexport class BodyComponent extends Stage.Sprite {\n  body: Body;\n\n  constructor(body: Body) {\n    super();\n    this.body = body;\n    this.tick(this.handleTick, false);\n  }\n\n  memo = Memo.init(0, 0, 0);\n  handleTick = () => {\n    if (!this.body) {\n      return;\n    }\n    const p = this.body.getPosition();\n    const x = p.x;\n    const y = p.y;\n    const a = this.body.getAngle();\n    if (!this.memo.update(x, y, a)) return true;\n    this.offset(x, y);\n    this.rotate(a);\n  };\n}\n","import * as Stage from \"stage-js\";\nimport { Middleware, Memo } from \"polymatic\";\n\nimport {\n  type World,\n  type Fixture,\n  type Body,\n  type EdgeShape,\n  type PolygonShape,\n  type ChainShape,\n  type Joint,\n  PulleyJoint,\n  CircleShape,\n} from \"planck\";\n\nimport { ComputedJointStyle, ComputedShapeStyle } from \"./ComputedStyle\";\nimport { ChainShapeComponent } from \"./ChainComponent\";\nimport { CircleShapeComponent } from \"./CircleComponent\";\nimport { EdgeShapeComponent } from \"./EdgeComponent\";\nimport { PolygonShapeComponent } from \"./PolygonComponent\";\nimport { JointComponent } from \"./JointComponent\";\nimport { PulleyJointComponent } from \"./PulleyComponent\";\nimport { BodyComponent } from \"./BodyComponent\";\nimport { ContextStyle } from \"../testbed/TestbedContext\";\n\ninterface WorldViewContext {\n  world: World;\n  stage: Stage.Root;\n  style?: ContextStyle;\n}\n\n/**\n * Render the world in the stage.\n */\nexport class WorldView extends Middleware<WorldViewContext> {\n  component: Stage.Node | null = null;\n  setupMemo = Memo.init();\n\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleContextChange);\n    this.on(\"context-change\", this.handleContextChange);\n    this.on(\"deactivate\", this.handleDeactivate);\n\n    this.on(\"world-edited\", this.handleWorldEdited);\n    this.on(\"frame-render\", this.handleTick);\n  }\n\n  handleContextChange = () => {\n    const stage = this.context.stage;\n    const world = this.context.world;\n\n    if (!this.setupMemo.update(stage, world)) return;\n\n    if (this.component) {\n      // todo: do we need to reset anything else?\n      this.component.remove();\n      this.component = null;\n    }\n\n    if (stage) {\n      this.component = new Stage.Node();\n      this.component.prependTo(stage);\n      if (world) {\n        this.setWorld(world);\n      }\n    }\n  };\n\n  handleDeactivate = () => {\n    if (this.component) {\n      this.component.remove();\n    }\n    this.component = null;\n    this.setupMemo.clear();\n  };\n\n  // world-edited\n  handleWorldEdited = () => {\n    if (this.component) this.rerenderWorld();\n  };\n\n  private world: World;\n\n  private bodies = new WeakMap<Body, Stage.Node>();\n  private shapes = new WeakMap<Fixture, Stage.Node>();\n  private joints = new WeakMap<Joint, Stage.Node>();\n\n  handleTick = () => {\n    this.renderWorld();\n  };\n\n  setWorld = (world: World) => {\n    if (this.world === world) {\n      return;\n    }\n\n    if (this.world) {\n      // off\n      this.world.off(\"remove-body\", this.removeBody);\n      this.world.off(\"remove-fixture\", this.removeShape);\n      this.world.off(\"remove-joint\", this.removeJoint);\n    }\n    this.world = world;\n    if (this.world) {\n      // on\n      this.world.on(\"remove-body\", this.removeBody);\n      this.world.on(\"remove-fixture\", this.removeShape);\n      this.world.on(\"remove-joint\", this.removeJoint);\n    }\n\n    this.component.empty();\n    this.bodies = new WeakMap();\n    this.shapes = new WeakMap();\n    this.joints = new WeakMap();\n    this.renderWorld();\n  };\n\n  removeShape = (obj: Fixture) => {\n    this.shapes.get(obj)?.remove();\n    this.shapes.delete(obj);\n  };\n\n  removeBody = (obj: Body) => {\n    this.bodies.get(obj)?.remove();\n    this.bodies.delete(obj);\n  };\n\n  removeJoint = (obj: Joint) => {\n    this.joints.get(obj)?.remove();\n    this.joints.delete(obj);\n  };\n\n  rerenderWorld = () => {\n    this.renderWorld(true);\n  };\n\n  renderWorld = (clearCache = false) => {\n    if (clearCache === true) {\n      this.component.empty();\n      this.shapes = new WeakMap();\n      this.bodies = new WeakMap();\n      this.joints = new WeakMap();\n    }\n\n    if (!this.world) return;\n\n    const world = this.world;\n    for (let b = world.getBodyList(); b; b = b.getNext()) {\n      this.renderBody(b);\n    }\n    for (let j = world.getJointList(); j; j = j.getNext()) {\n      this.renderJoint(j);\n    }\n  };\n\n  renderBody(body: Body) {\n    let bodyComponent = this.bodies.get(body);\n\n    if (!bodyComponent) {\n      bodyComponent = new BodyComponent(body);\n      bodyComponent.appendTo(this.component);\n      this.bodies.set(body, bodyComponent);\n    }\n\n    for (let fixture = body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n      this.renderFixture(bodyComponent, body, fixture);\n    }\n  }\n\n  renderFixture(bodyComponent: Stage.Node, body: Body, fixture: Fixture) {\n    let shapeComponent = this.shapes.get(fixture);\n\n    if (shapeComponent) {\n      return;\n    }\n\n    const type = fixture.getType();\n    const shape = fixture.getShape();\n\n    const style = new ComputedShapeStyle(body, fixture, this.context.style);\n\n    if (type == \"circle\") {\n      shapeComponent = new CircleShapeComponent(shape as CircleShape, style);\n    } else if (type == \"edge\") {\n      shapeComponent = new EdgeShapeComponent(shape as EdgeShape, style);\n    } else if (type == \"polygon\") {\n      shapeComponent = new PolygonShapeComponent(shape as PolygonShape, style);\n    } else if (type == \"chain\") {\n      shapeComponent = new ChainShapeComponent(shape as ChainShape, style);\n    } else {\n      // console.warn(\"Unknown fixture type\", type);\n      return;\n    }\n\n    shapeComponent.appendTo(bodyComponent);\n    this.shapes.set(fixture, shapeComponent);\n  }\n\n  renderJoint(joint: Joint) {\n    let component = this.joints.get(joint);\n\n    if (component) {\n      return;\n    }\n\n    const type = joint.getType();\n\n    const style = new ComputedJointStyle(joint, this.context.style);\n\n    if (type == PulleyJoint.TYPE) {\n      component = new PulleyJointComponent(joint as PulleyJoint, style);\n    } else {\n      component = new JointComponent(joint, style);\n    }\n\n    component.appendTo(this.component);\n    this.joints.set(joint, component);\n  }\n}\n","import { Middleware } from \"polymatic\";\nimport * as Stage from \"stage-js\";\nimport {\n  Vec2,\n  AABB,\n  type Vec2Value,\n  type World,\n  type Fixture,\n  DistanceInput,\n  CircleShape,\n  SimplexCache,\n  DistanceOutput,\n  Distance,\n} from \"planck\";\n\n// todo: remove this\nconst HIT_RADIUS_PIXEL = 0.1;\n\ninterface WorldPointerContext {\n  world: World;\n  stage: Stage.Root;\n}\n\n/**\n * Handles stage pointer events, and emits world-related pointer events:\n * - world-pointer-down\n * - world-pointer-move\n * - world-pointer-up\n * - world-pointer-cancel\n * - world-drag-start\n * - world-drag-move\n * - world-drag-end\n * - world-drag-cancel\n * - world-click\n */\nexport class WorldPointer extends Middleware<WorldPointerContext> {\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleActivate);\n  }\n\n  handleActivate = () => {\n    this.context.stage.on(Stage.POINTER_DOWN, this.handlePointerDown);\n    this.context.stage.on(Stage.POINTER_MOVE, this.handlePointerMove);\n    this.context.stage.on(Stage.POINTER_UP, this.handlePointerUp);\n    this.context.stage.on(Stage.POINTER_CANCEL, this.handlePointerCancel);\n  };\n\n  pointerStart = { x: 0, y: 0 };\n  pointerLast = { x: 0, y: 0 };\n  pointerDragged = false;\n  pointerDown = false;\n\n  handlePointerDown = (point: Vec2Value) => {\n    if (!this.context.world) return;\n\n    const fixture = findFixture(this.context, point);\n\n    this.emit(\"world-pointer-down\", {\n      point,\n      fixture,\n      background: !fixture,\n    });\n\n    this.pointerStart.x = point.x;\n    this.pointerStart.y = point.y;\n    this.pointerLast.x = point.x;\n    this.pointerLast.y = point.y;\n\n    this.pointerDown = true;\n    this.pointerDragged = false;\n  };\n\n  handlePointerMove = (point: Vec2Value) => {\n    if (!this.context.world) return;\n\n    this.emit(\"world-pointer-move\", {\n      point,\n    });\n\n    if (!this.pointerDown) return;\n\n    const move = {\n      x: point.x - this.pointerStart.x,\n      y: point.y - this.pointerStart.y,\n    };\n    const delta = {\n      x: point.x - this.pointerLast.x,\n      y: point.y - this.pointerLast.y,\n    };\n\n    if (this.pointerDragged) {\n      this.pointerLast.x = point.x;\n      this.pointerLast.y = point.y;\n      this.emit(\"world-drag-move\", {\n        point,\n        delta,\n        move,\n      });\n    } else if (move.x !== 0 || move.y !== 0) {\n      this.pointerDragged = true;\n\n      const fixture = findFixture(this.context, point);\n\n      this.emit(\"world-drag-start\", {\n        point,\n        fixture,\n        background: !fixture,\n      });\n    }\n  };\n\n  handlePointerUp = (point: Vec2Value) => {\n    if (!this.context.world) return;\n\n    this.emit(\"world-pointer-up\", {\n      point,\n    });\n\n    if (!this.pointerDown) return;\n\n    this.pointerDown = false;\n\n    const move = {\n      x: point.x - this.pointerStart.x,\n      y: point.y - this.pointerStart.y,\n    };\n    const delta = {\n      x: point.x - this.pointerLast.x,\n      y: point.y - this.pointerLast.y,\n    };\n    this.pointerLast.x = point.x;\n    this.pointerLast.y = point.y;\n\n    if (this.pointerDragged) {\n      this.emit(\"world-drag-end\", {\n        point,\n      });\n      return;\n    }\n\n    const fixture = findFixture(this.context, point);\n    this.emit(\"world-click\", {\n      point,\n      fixture,\n      background: !fixture,\n    });\n  };\n\n  handlePointerCancel = () => {\n    if (!this.context.world) return;\n\n    this.emit(\"world-pointer-cancel\");\n\n    if (!this.pointerDown) return;\n\n    this.pointerDown = false;\n\n    if (this.pointerDragged) {\n      this.emit(\"world-drag-cancel\");\n    }\n  };\n}\n\ninterface FindFixtureContext {\n  world: World;\n  stage: Stage.Root;\n}\n\nexport function findFixture(context: FindFixtureContext, point: Vec2Value, filter?: (fixture: Fixture) => boolean) {\n  const radius = getHitRadius(context.stage);\n\n  let bestFixture: Fixture | undefined;\n  let bestDistance = radius;\n\n  const aabb = new AABB(point, point).extend(radius);\n\n  const distanceInput = new DistanceInput();\n  distanceInput.useRadii = true;\n  distanceInput.proxyB.set(new CircleShape(0.00001), 0);\n  distanceInput.transformB.p.x = point.x;\n  distanceInput.transformB.p.y = point.y;\n  distanceInput.transformB.q.s = 0;\n  distanceInput.transformB.q.c = 1;\n\n  context.world.queryAABB(aabb, function (fixture) {\n    if (filter && !filter(fixture)) {\n      return true;\n    }\n\n    if (fixture.testPoint(point)) {\n      bestFixture = fixture;\n      bestDistance = 0;\n      return true;\n    }\n\n    for (let childIndex = fixture.getShape().getChildCount(); childIndex >= 0; childIndex--) {\n      distanceInput.proxyA.set(fixture.getShape(), childIndex);\n      const xf = fixture.getBody().getTransform();\n      distanceInput.transformA.p.x = xf.p.x;\n      distanceInput.transformA.p.y = xf.p.y;\n      distanceInput.transformA.q.s = xf.q.s;\n      distanceInput.transformA.q.c = xf.q.c;\n\n      const cache = new SimplexCache();\n      const output = new DistanceOutput();\n\n      Distance(output, cache, distanceInput);\n\n      const distance = Vec2.distance(output.pointA, output.pointB);\n\n      if (distance < bestDistance) {\n        bestFixture = fixture;\n        bestDistance = distance;\n      }\n    }\n\n    return bestDistance == 0 ? false : true;\n  });\n\n  return bestFixture;\n}\n\nexport const getHitRadius = (component: Stage.Node) => {\n  const pixelPerUnit = component.getLogicalPixelRatio();\n  const hitRadius = HIT_RADIUS_PIXEL / pixelPerUnit;\n  return hitRadius;\n};\n","import * as Stage from \"stage-js\";\nimport { Middleware, Memo } from \"polymatic\";\nimport { ContextStyle } from \"../testbed/TestbedContext\";\nimport { Camera } from \"./Viewbox\";\n\ninterface StageLoaderContext {\n  paused: boolean;\n\n  stage: Stage.Root;\n  containerElement: HTMLElement;\n\n  pointerCaptured: boolean;\n\n  style: ContextStyle;\n  camera: Camera;\n}\n\nexport class StageLoader extends Middleware<StageLoaderContext> {\n  viewboxMemo = Memo.init();\n  backgroundMemo = Memo.init();\n  flipMemo = Memo.init();\n  pausedMemo = Memo.init();\n\n  stage: Stage.Root;\n  containerElementMemo = Memo.init();\n\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleContextChange);\n    this.on(\"context-change\", this.handleContextChange);\n    this.on(\"deactivate\", this.handleDeactivate);\n\n    this.on(\"capture-pointer\", this.handleCapturePointer);\n    this.on(\"release-pointer\", this.handleReleasePointer);\n\n    this.on(\"frame-update\", this.handleUpdateState);\n  }\n\n  handleContextChange = () => {\n    const containerElement = this.context.containerElement;\n    if (!containerElement) {\n      return;\n    }\n\n    // don't need to setup again\n    if (!this.containerElementMemo.update(containerElement) && this.stage) return;\n\n    // create stage\n    const stageCanvasElement = document.createElement(\"canvas\");\n    containerElement.appendChild(stageCanvasElement);\n\n    this.stage = Stage.mount({\n      // canvas: stageCanvasElement,\n    });\n\n    this.stage.MAX_ELAPSE = 1000 / 30;\n    // todo\n    this.stage.pin(\"alignX\", -0.5);\n    this.stage.pin(\"alignY\", -0.5);\n\n    this.handleUpdateState();\n\n    this.stage.dom.addEventListener(\"mousedown\", this.focus);\n    this.stage.dom.addEventListener(\"touchstart\", this.focus);\n\n    this.setContext((context) => {\n      context.stage = this.stage;\n      // context.zoom = this.camera.a;\n    });\n\n    this.stage.on(Stage.POINTER_CANCEL, this.handleReleasePointer);\n    this.stage.on(Stage.POINTER_UP, this.handleReleasePointer);\n\n    this.emit(\"stage-ready\");\n  };\n\n  handleCapturePointer = () => {\n    this.setContext((context) => {\n      context.pointerCaptured = true;\n    });\n  };\n\n  handleReleasePointer = () => {\n    this.setContext((context) => {\n      context.pointerCaptured = false;\n    });\n  };\n\n  handleDeactivate = () => {\n    this.setContext((context) => {\n      context.stage = null;\n    });\n    this.stage.dom.removeEventListener(\"mousedown\", this.focus);\n    this.stage.dom.removeEventListener(\"touchstart\", this.focus);\n  };\n\n  handleUpdateState = () => {\n    const flipY = true;\n    if (this.flipMemo.update(flipY)) {\n      this.stage.flipY(true);\n    }\n\n    if (this.pausedMemo.update(this.context.paused)) {\n      if (!this.context.paused) {\n        this.focus();\n      }\n    }\n\n    const background = this.context.style.background;\n    if (this.backgroundMemo.update(background)) {\n      if (background) this.stage.background(background);\n    }\n\n    const camera = this.context.camera;\n    if (this.viewboxMemo.update(camera.x, camera.y, camera.width, camera.height)) {\n      this.stage.viewbox(camera);\n    }\n  };\n\n  focus = () => {\n    // todo: move this to stage-js\n    window.focus();\n    (document.activeElement as HTMLElement)?.blur?.();\n    this.stage?.dom.focus();\n  };\n}\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n  'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n    return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n    if (Array.isArray(arg)) {\n        each(arg, context[fn], context);\n        return true;\n    }\n    return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n    var i;\n\n    if (!obj) {\n        return;\n    }\n\n    if (obj.forEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length !== undefined) {\n        i = 0;\n        while (i < obj.length) {\n            iterator.call(context, obj[i], i, obj);\n            i++;\n        }\n    } else {\n        for (i in obj) {\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n        }\n    }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n    return function() {\n        var e = new Error('get-stack-trace');\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n            .replace(/^\\s+at\\s+/gm, '')\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n        var log = window.console && (window.console.warn || window.console.log);\n        if (log) {\n            log.call(window.console, deprecationMessage, stack);\n        }\n        return method.apply(this, arguments);\n    };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n    assign = function assign(target) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                for (var nextKey in source) {\n                    if (source.hasOwnProperty(nextKey)) {\n                        output[nextKey] = source[nextKey];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n} else {\n    assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n    var keys = Object.keys(src);\n    var i = 0;\n    while (i < keys.length) {\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\n            dest[keys[i]] = src[keys[i]];\n        }\n        i++;\n    }\n    return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n    return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n    var baseP = base.prototype,\n        childP;\n\n    childP = child.prototype = Object.create(baseP);\n    childP.constructor = child;\n    childP._super = baseP;\n\n    if (properties) {\n        assign(childP, properties);\n    }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n    return function boundFn() {\n        return fn.apply(context, arguments);\n    };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n    if (typeof val == TYPE_FUNCTION) {\n        return val.apply(args ? args[0] || undefined : undefined, args);\n    }\n    return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n    return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.addEventListener(type, handler, false);\n    });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.removeEventListener(type, handler, false);\n    });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n    while (node) {\n        if (node == parent) {\n            return true;\n        }\n        node = node.parentNode;\n    }\n    return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n    return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n    return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n    if (src.indexOf && !findByKey) {\n        return src.indexOf(find);\n    } else {\n        var i = 0;\n        while (i < src.length) {\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n                return i;\n            }\n            i++;\n        }\n        return -1;\n    }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n    return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n    var results = [];\n    var values = [];\n    var i = 0;\n\n    while (i < src.length) {\n        var val = key ? src[i][key] : src[i];\n        if (inArray(values, val) < 0) {\n            results.push(src[i]);\n        }\n        values[i] = val;\n        i++;\n    }\n\n    if (sort) {\n        if (!key) {\n            results = results.sort();\n        } else {\n            results = results.sort(function sortUniqueArray(a, b) {\n                return a[key] > b[key];\n            });\n        }\n    }\n\n    return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n    var prefix, prop;\n    var camelProp = property[0].toUpperCase() + property.slice(1);\n\n    var i = 0;\n    while (i < VENDOR_PREFIXES.length) {\n        prefix = VENDOR_PREFIXES[i];\n        prop = (prefix) ? prefix + camelProp : property;\n\n        if (prop in obj) {\n            return prop;\n        }\n        i++;\n    }\n    return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n    return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n    var doc = element.ownerDocument || element;\n    return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.domHandler = function(ev) {\n        if (boolOrFn(manager.options.enable, [manager])) {\n            self.handler(ev);\n        }\n    };\n\n    this.init();\n\n}\n\nInput.prototype = {\n    /**\n     * should handle the inputEvent data and trigger the callback\n     * @virtual\n     */\n    handler: function() { },\n\n    /**\n     * bind the events\n     */\n    init: function() {\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    },\n\n    /**\n     * unbind the events\n     */\n    destroy: function() {\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n    var Type;\n    var inputClass = manager.options.inputClass;\n\n    if (inputClass) {\n        Type = inputClass;\n    } else if (SUPPORT_POINTER_EVENTS) {\n        Type = PointerEventInput;\n    } else if (SUPPORT_ONLY_TOUCH) {\n        Type = TouchInput;\n    } else if (!SUPPORT_TOUCH) {\n        Type = MouseInput;\n    } else {\n        Type = TouchMouseInput;\n    }\n    return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n    var pointersLen = input.pointers.length;\n    var changedPointersLen = input.changedPointers.length;\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n    input.isFirst = !!isFirst;\n    input.isFinal = !!isFinal;\n\n    if (isFirst) {\n        manager.session = {};\n    }\n\n    // source event is the normalized value of the domEvents\n    // like 'touchstart, mouseup, pointerdown'\n    input.eventType = eventType;\n\n    // compute scale, rotation etc\n    computeInputData(manager, input);\n\n    // emit secret event\n    manager.emit('hammer.input', input);\n\n    manager.recognize(input);\n    manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n    var session = manager.session;\n    var pointers = input.pointers;\n    var pointersLength = pointers.length;\n\n    // store the first input to calculate the distance and direction\n    if (!session.firstInput) {\n        session.firstInput = simpleCloneInputData(input);\n    }\n\n    // to compute scale and rotation we need to store the multiple touches\n    if (pointersLength > 1 && !session.firstMultiple) {\n        session.firstMultiple = simpleCloneInputData(input);\n    } else if (pointersLength === 1) {\n        session.firstMultiple = false;\n    }\n\n    var firstInput = session.firstInput;\n    var firstMultiple = session.firstMultiple;\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n    var center = input.center = getCenter(pointers);\n    input.timeStamp = now();\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n    input.angle = getAngle(offsetCenter, center);\n    input.distance = getDistance(offsetCenter, center);\n\n    computeDeltaXY(session, input);\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n    input.overallVelocityX = overallVelocity.x;\n    input.overallVelocityY = overallVelocity.y;\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n    computeIntervalInputData(session, input);\n\n    // find the correct target\n    var target = manager.element;\n    if (hasParent(input.srcEvent.target, target)) {\n        target = input.srcEvent.target;\n    }\n    input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n    var center = input.center;\n    var offset = session.offsetDelta || {};\n    var prevDelta = session.prevDelta || {};\n    var prevInput = session.prevInput || {};\n\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n        prevDelta = session.prevDelta = {\n            x: prevInput.deltaX || 0,\n            y: prevInput.deltaY || 0\n        };\n\n        offset = session.offsetDelta = {\n            x: center.x,\n            y: center.y\n        };\n    }\n\n    input.deltaX = prevDelta.x + (center.x - offset.x);\n    input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n    var last = session.lastInterval || input,\n        deltaTime = input.timeStamp - last.timeStamp,\n        velocity, velocityX, velocityY, direction;\n\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n        var deltaX = input.deltaX - last.deltaX;\n        var deltaY = input.deltaY - last.deltaY;\n\n        var v = getVelocity(deltaTime, deltaX, deltaY);\n        velocityX = v.x;\n        velocityY = v.y;\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n        direction = getDirection(deltaX, deltaY);\n\n        session.lastInterval = input;\n    } else {\n        // use latest velocity info if it doesn't overtake a minimum period\n        velocity = last.velocity;\n        velocityX = last.velocityX;\n        velocityY = last.velocityY;\n        direction = last.direction;\n    }\n\n    input.velocity = velocity;\n    input.velocityX = velocityX;\n    input.velocityY = velocityY;\n    input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n    // make a simple copy of the pointers because we will get a reference if we don't\n    // we only need clientXY for the calculations\n    var pointers = [];\n    var i = 0;\n    while (i < input.pointers.length) {\n        pointers[i] = {\n            clientX: round(input.pointers[i].clientX),\n            clientY: round(input.pointers[i].clientY)\n        };\n        i++;\n    }\n\n    return {\n        timeStamp: now(),\n        pointers: pointers,\n        center: getCenter(pointers),\n        deltaX: input.deltaX,\n        deltaY: input.deltaY\n    };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n    var pointersLength = pointers.length;\n\n    // no need to loop when only one touch\n    if (pointersLength === 1) {\n        return {\n            x: round(pointers[0].clientX),\n            y: round(pointers[0].clientY)\n        };\n    }\n\n    var x = 0, y = 0, i = 0;\n    while (i < pointersLength) {\n        x += pointers[i].clientX;\n        y += pointers[i].clientY;\n        i++;\n    }\n\n    return {\n        x: round(x / pointersLength),\n        y: round(y / pointersLength)\n    };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n    return {\n        x: x / deltaTime || 0,\n        y: y / deltaTime || 0\n    };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n    if (x === y) {\n        return DIRECTION_NONE;\n    }\n\n    if (abs(x) >= abs(y)) {\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n\n    return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n    return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n    mousedown: INPUT_START,\n    mousemove: INPUT_MOVE,\n    mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n    this.evEl = MOUSE_ELEMENT_EVENTS;\n    this.evWin = MOUSE_WINDOW_EVENTS;\n\n    this.pressed = false; // mousedown state\n\n    Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function MEhandler(ev) {\n        var eventType = MOUSE_INPUT_MAP[ev.type];\n\n        // on start we want to have the left mouse button down\n        if (eventType & INPUT_START && ev.button === 0) {\n            this.pressed = true;\n        }\n\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\n            eventType = INPUT_END;\n        }\n\n        // mouse must be down\n        if (!this.pressed) {\n            return;\n        }\n\n        if (eventType & INPUT_END) {\n            this.pressed = false;\n        }\n\n        this.callback(this.manager, eventType, {\n            pointers: [ev],\n            changedPointers: [ev],\n            pointerType: INPUT_TYPE_MOUSE,\n            srcEvent: ev\n        });\n    }\n});\n\nvar POINTER_INPUT_MAP = {\n    pointerdown: INPUT_START,\n    pointermove: INPUT_MOVE,\n    pointerup: INPUT_END,\n    pointercancel: INPUT_CANCEL,\n    pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n    2: INPUT_TYPE_TOUCH,\n    3: INPUT_TYPE_PEN,\n    4: INPUT_TYPE_MOUSE,\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    Input.apply(this, arguments);\n\n    this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function PEhandler(ev) {\n        var store = this.store;\n        var removePointer = false;\n\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n        // get index of the event in the store\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n        // start and mouse must be down\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n            if (storeIndex < 0) {\n                store.push(ev);\n                storeIndex = store.length - 1;\n            }\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n            removePointer = true;\n        }\n\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\n        if (storeIndex < 0) {\n            return;\n        }\n\n        // update the event in the store\n        store[storeIndex] = ev;\n\n        this.callback(this.manager, eventType, {\n            pointers: store,\n            changedPointers: [ev],\n            pointerType: pointerType,\n            srcEvent: ev\n        });\n\n        if (removePointer) {\n            // remove from the store\n            store.splice(storeIndex, 1);\n        }\n    }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    this.started = false;\n\n    Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n    handler: function TEhandler(ev) {\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n        // should we handle the touch events?\n        if (type === INPUT_START) {\n            this.started = true;\n        }\n\n        if (!this.started) {\n            return;\n        }\n\n        var touches = normalizeSingleTouches.call(this, ev, type);\n\n        // when done, reset the started state\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n            this.started = false;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n    var all = toArray(ev.touches);\n    var changed = toArray(ev.changedTouches);\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n        all = uniqueArray(all.concat(changed), 'identifier', true);\n    }\n\n    return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n\n    Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n    handler: function MTEhandler(ev) {\n        var type = TOUCH_INPUT_MAP[ev.type];\n        var touches = getTouches.call(this, ev, type);\n        if (!touches) {\n            return;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n    var allTouches = toArray(ev.touches);\n    var targetIds = this.targetIds;\n\n    // when there is only one touch, the process can be simplified\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n        targetIds[allTouches[0].identifier] = true;\n        return [allTouches, allTouches];\n    }\n\n    var i,\n        targetTouches,\n        changedTouches = toArray(ev.changedTouches),\n        changedTargetTouches = [],\n        target = this.target;\n\n    // get target touches from touches\n    targetTouches = allTouches.filter(function(touch) {\n        return hasParent(touch.target, target);\n    });\n\n    // collect touches\n    if (type === INPUT_START) {\n        i = 0;\n        while (i < targetTouches.length) {\n            targetIds[targetTouches[i].identifier] = true;\n            i++;\n        }\n    }\n\n    // filter changed touches to only contain touches that exist in the collected target ids\n    i = 0;\n    while (i < changedTouches.length) {\n        if (targetIds[changedTouches[i].identifier]) {\n            changedTargetTouches.push(changedTouches[i]);\n        }\n\n        // cleanup removed touches\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            delete targetIds[changedTouches[i].identifier];\n        }\n        i++;\n    }\n\n    if (!changedTargetTouches.length) {\n        return;\n    }\n\n    return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n        changedTargetTouches\n    ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n    Input.apply(this, arguments);\n\n    var handler = bindFn(this.handler, this);\n    this.touch = new TouchInput(this.manager, handler);\n    this.mouse = new MouseInput(this.manager, handler);\n\n    this.primaryTouch = null;\n    this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n    /**\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n    handler: function TMEhandler(manager, inputEvent, inputData) {\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n            return;\n        }\n\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n        if (isTouch) {\n            recordTouches.call(this, inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n            return;\n        }\n\n        this.callback(manager, inputEvent, inputData);\n    },\n\n    /**\n     * remove the event listeners\n     */\n    destroy: function destroy() {\n        this.touch.destroy();\n        this.mouse.destroy();\n    }\n});\n\nfunction recordTouches(eventType, eventData) {\n    if (eventType & INPUT_START) {\n        this.primaryTouch = eventData.changedPointers[0].identifier;\n        setLastTouch.call(this, eventData);\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n        setLastTouch.call(this, eventData);\n    }\n}\n\nfunction setLastTouch(eventData) {\n    var touch = eventData.changedPointers[0];\n\n    if (touch.identifier === this.primaryTouch) {\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\n        this.lastTouches.push(lastTouch);\n        var lts = this.lastTouches;\n        var removeLastTouch = function() {\n            var i = lts.indexOf(lastTouch);\n            if (i > -1) {\n                lts.splice(i, 1);\n            }\n        };\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n    }\n}\n\nfunction isSyntheticEvent(eventData) {\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n    for (var i = 0; i < this.lastTouches.length; i++) {\n        var t = this.lastTouches[i];\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n}\n\nTouchAction.prototype = {\n    /**\n     * set the touchAction value on the element or enable the polyfill\n     * @param {String} value\n     */\n    set: function(value) {\n        // find out the touch-action by the event handlers\n        if (value == TOUCH_ACTION_COMPUTE) {\n            value = this.compute();\n        }\n\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n        }\n        this.actions = value.toLowerCase().trim();\n    },\n\n    /**\n     * just re-set the touchAction value\n     */\n    update: function() {\n        this.set(this.manager.options.touchAction);\n    },\n\n    /**\n     * compute the value for the touchAction property based on the recognizer's settings\n     * @returns {String} value\n     */\n    compute: function() {\n        var actions = [];\n        each(this.manager.recognizers, function(recognizer) {\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                actions = actions.concat(recognizer.getTouchAction());\n            }\n        });\n        return cleanTouchActions(actions.join(' '));\n    },\n\n    /**\n     * this method is called on each input cycle and provides the preventing of the browser behavior\n     * @param {Object} input\n     */\n    preventDefaults: function(input) {\n        var srcEvent = input.srcEvent;\n        var direction = input.offsetDirection;\n\n        // if the touch action did prevented once this session\n        if (this.manager.session.prevented) {\n            srcEvent.preventDefault();\n            return;\n        }\n\n        var actions = this.actions;\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n        if (hasNone) {\n            //do not prevent defaults if this is a tap gesture\n\n            var isTapPointer = input.pointers.length === 1;\n            var isTapMovement = input.distance < 2;\n            var isTapTouchTime = input.deltaTime < 250;\n\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\n                return;\n            }\n        }\n\n        if (hasPanX && hasPanY) {\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n            return;\n        }\n\n        if (hasNone ||\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\n            return this.preventSrc(srcEvent);\n        }\n    },\n\n    /**\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n     * @param {Object} srcEvent\n     */\n    preventSrc: function(srcEvent) {\n        this.manager.session.prevented = true;\n        srcEvent.preventDefault();\n    }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n    // none\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n    // if both pan-x and pan-y are set (different recognizers\n    // for different directions, e.g. horizontal pan but vertical swipe?)\n    // we need none (as otherwise with pan-x pan-y combined none of these\n    // recognizers will work, since the browser would handle all panning\n    if (hasPanX && hasPanY) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    // pan-x OR pan-y\n    if (hasPanX || hasPanY) {\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n    }\n\n    // manipulation\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n        return TOUCH_ACTION_MANIPULATION;\n    }\n\n    return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n    if (!NATIVE_TOUCH_ACTION) {\n        return false;\n    }\n    var touchMap = {};\n    var cssSupports = window.CSS && window.CSS.supports;\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n        // If css.supports is not supported but there is native touch-action assume it supports\n        // all values. This is the case for IE 10 and 11.\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n    });\n    return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n\n    this.simultaneous = {};\n    this.requireFail = [];\n}\n\nRecognizer.prototype = {\n    /**\n     * @virtual\n     * @type {Object}\n     */\n    defaults: {},\n\n    /**\n     * set options\n     * @param {Object} options\n     * @return {Recognizer}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // also update the touchAction, in case something changed about the directions/enabled state\n        this.manager && this.manager.touchAction.update();\n        return this;\n    },\n\n    /**\n     * recognize simultaneous with an other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    recognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n            return this;\n        }\n\n        var simultaneous = this.simultaneous;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (!simultaneous[otherRecognizer.id]) {\n            simultaneous[otherRecognizer.id] = otherRecognizer;\n            otherRecognizer.recognizeWith(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRecognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        delete this.simultaneous[otherRecognizer.id];\n        return this;\n    },\n\n    /**\n     * recognizer can only run when an other is failing\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    requireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n            return this;\n        }\n\n        var requireFail = this.requireFail;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (inArray(requireFail, otherRecognizer) === -1) {\n            requireFail.push(otherRecognizer);\n            otherRecognizer.requireFailure(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRequireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        var index = inArray(this.requireFail, otherRecognizer);\n        if (index > -1) {\n            this.requireFail.splice(index, 1);\n        }\n        return this;\n    },\n\n    /**\n     * has require failures boolean\n     * @returns {boolean}\n     */\n    hasRequireFailures: function() {\n        return this.requireFail.length > 0;\n    },\n\n    /**\n     * if the recognizer can recognize simultaneous with an other recognizer\n     * @param {Recognizer} otherRecognizer\n     * @returns {Boolean}\n     */\n    canRecognizeWith: function(otherRecognizer) {\n        return !!this.simultaneous[otherRecognizer.id];\n    },\n\n    /**\n     * You should use `tryEmit` instead of `emit` directly to check\n     * that all the needed recognizers has failed before emitting.\n     * @param {Object} input\n     */\n    emit: function(input) {\n        var self = this;\n        var state = this.state;\n\n        function emit(event) {\n            self.manager.emit(event, input);\n        }\n\n        // 'panstart' and 'panmove'\n        if (state < STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n\n        emit(self.options.event); // simple 'eventName' events\n\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n            emit(input.additionalEvent);\n        }\n\n        // panend and pancancel\n        if (state >= STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n    },\n\n    /**\n     * Check that all the require failure recognizers has failed,\n     * if true, it emits a gesture event,\n     * otherwise, setup the state to FAILED.\n     * @param {Object} input\n     */\n    tryEmit: function(input) {\n        if (this.canEmit()) {\n            return this.emit(input);\n        }\n        // it's failing anyway\n        this.state = STATE_FAILED;\n    },\n\n    /**\n     * can we emit?\n     * @returns {boolean}\n     */\n    canEmit: function() {\n        var i = 0;\n        while (i < this.requireFail.length) {\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                return false;\n            }\n            i++;\n        }\n        return true;\n    },\n\n    /**\n     * update the recognizer\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        // make a new copy of the inputData\n        // so we can change the inputData without messing up the other recognizers\n        var inputDataClone = assign({}, inputData);\n\n        // is is enabled and allow recognizing?\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n            this.reset();\n            this.state = STATE_FAILED;\n            return;\n        }\n\n        // reset when we've reached the end\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n            this.state = STATE_POSSIBLE;\n        }\n\n        this.state = this.process(inputDataClone);\n\n        // the recognizer has recognized a gesture\n        // so trigger an event\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n            this.tryEmit(inputDataClone);\n        }\n    },\n\n    /**\n     * return the state of the recognizer\n     * the actual recognizing happens in this method\n     * @virtual\n     * @param {Object} inputData\n     * @returns {Const} STATE\n     */\n    process: function(inputData) { }, // jshint ignore:line\n\n    /**\n     * return the preferred touch-action\n     * @virtual\n     * @returns {Array}\n     */\n    getTouchAction: function() { },\n\n    /**\n     * called when the gesture isn't allowed to recognize\n     * like when another is being recognized or it is disabled\n     * @virtual\n     */\n    reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n    if (state & STATE_CANCELLED) {\n        return 'cancel';\n    } else if (state & STATE_ENDED) {\n        return 'end';\n    } else if (state & STATE_CHANGED) {\n        return 'move';\n    } else if (state & STATE_BEGAN) {\n        return 'start';\n    }\n    return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n    if (direction == DIRECTION_DOWN) {\n        return 'down';\n    } else if (direction == DIRECTION_UP) {\n        return 'up';\n    } else if (direction == DIRECTION_LEFT) {\n        return 'left';\n    } else if (direction == DIRECTION_RIGHT) {\n        return 'right';\n    }\n    return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n    var manager = recognizer.manager;\n    if (manager) {\n        return manager.get(otherRecognizer);\n    }\n    return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n    Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof AttrRecognizer\n     */\n    defaults: {\n        /**\n         * @type {Number}\n         * @default 1\n         */\n        pointers: 1\n    },\n\n    /**\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {Boolean} recognized\n     */\n    attrTest: function(input) {\n        var optionPointers = this.options.pointers;\n        return optionPointers === 0 || input.pointers.length === optionPointers;\n    },\n\n    /**\n     * Process the input and return the state for the recognizer\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {*} State\n     */\n    process: function(input) {\n        var state = this.state;\n        var eventType = input.eventType;\n\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n        var isValid = this.attrTest(input);\n\n        // on cancel input and we've recognized before, return STATE_CANCELLED\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n            return state | STATE_CANCELLED;\n        } else if (isRecognized || isValid) {\n            if (eventType & INPUT_END) {\n                return state | STATE_ENDED;\n            } else if (!(state & STATE_BEGAN)) {\n                return STATE_BEGAN;\n            }\n            return state | STATE_CHANGED;\n        }\n        return STATE_FAILED;\n    }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n\n    this.pX = null;\n    this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PanRecognizer\n     */\n    defaults: {\n        event: 'pan',\n        threshold: 10,\n        pointers: 1,\n        direction: DIRECTION_ALL\n    },\n\n    getTouchAction: function() {\n        var direction = this.options.direction;\n        var actions = [];\n        if (direction & DIRECTION_HORIZONTAL) {\n            actions.push(TOUCH_ACTION_PAN_Y);\n        }\n        if (direction & DIRECTION_VERTICAL) {\n            actions.push(TOUCH_ACTION_PAN_X);\n        }\n        return actions;\n    },\n\n    directionTest: function(input) {\n        var options = this.options;\n        var hasMoved = true;\n        var distance = input.distance;\n        var direction = input.direction;\n        var x = input.deltaX;\n        var y = input.deltaY;\n\n        // lock to axis?\n        if (!(direction & options.direction)) {\n            if (options.direction & DIRECTION_HORIZONTAL) {\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                hasMoved = x != this.pX;\n                distance = Math.abs(input.deltaX);\n            } else {\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n                hasMoved = y != this.pY;\n                distance = Math.abs(input.deltaY);\n            }\n        }\n        input.direction = direction;\n        return hasMoved && distance > options.threshold && direction & options.direction;\n    },\n\n    attrTest: function(input) {\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n    },\n\n    emit: function(input) {\n\n        this.pX = input.deltaX;\n        this.pY = input.deltaY;\n\n        var direction = directionStr(input.direction);\n\n        if (direction) {\n            input.additionalEvent = this.options.event + direction;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'pinch',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n    },\n\n    emit: function(input) {\n        if (input.scale !== 1) {\n            var inOut = input.scale < 1 ? 'in' : 'out';\n            input.additionalEvent = this.options.event + inOut;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    this._timer = null;\n    this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PressRecognizer\n     */\n    defaults: {\n        event: 'press',\n        pointers: 1,\n        time: 251, // minimal time of the pointer to be pressed\n        threshold: 9 // a minimal movement is ok, but keep it low\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_AUTO];\n    },\n\n    process: function(input) {\n        var options = this.options;\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTime = input.deltaTime > options.time;\n\n        this._input = input;\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n            this.reset();\n        } else if (input.eventType & INPUT_START) {\n            this.reset();\n            this._timer = setTimeoutContext(function() {\n                this.state = STATE_RECOGNIZED;\n                this.tryEmit();\n            }, options.time, this);\n        } else if (input.eventType & INPUT_END) {\n            return STATE_RECOGNIZED;\n        }\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function(input) {\n        if (this.state !== STATE_RECOGNIZED) {\n            return;\n        }\n\n        if (input && (input.eventType & INPUT_END)) {\n            this.manager.emit(this.options.event + 'up', input);\n        } else {\n            this._input.timeStamp = now();\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof RotateRecognizer\n     */\n    defaults: {\n        event: 'rotate',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n    }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof SwipeRecognizer\n     */\n    defaults: {\n        event: 'swipe',\n        threshold: 10,\n        velocity: 0.3,\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n        pointers: 1\n    },\n\n    getTouchAction: function() {\n        return PanRecognizer.prototype.getTouchAction.call(this);\n    },\n\n    attrTest: function(input) {\n        var direction = this.options.direction;\n        var velocity;\n\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n            velocity = input.overallVelocity;\n        } else if (direction & DIRECTION_HORIZONTAL) {\n            velocity = input.overallVelocityX;\n        } else if (direction & DIRECTION_VERTICAL) {\n            velocity = input.overallVelocityY;\n        }\n\n        return this._super.attrTest.call(this, input) &&\n            direction & input.offsetDirection &&\n            input.distance > this.options.threshold &&\n            input.maxPointers == this.options.pointers &&\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n    },\n\n    emit: function(input) {\n        var direction = directionStr(input.offsetDirection);\n        if (direction) {\n            this.manager.emit(this.options.event + direction, input);\n        }\n\n        this.manager.emit(this.options.event, input);\n    }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'tap',\n        pointers: 1,\n        taps: 1,\n        interval: 300, // max time between the multi-tap taps\n        time: 250, // max time of the pointer to be down (like finger on the screen)\n        threshold: 9, // a minimal movement is ok, but keep it low\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_MANIPULATION];\n    },\n\n    process: function(input) {\n        var options = this.options;\n\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTouchTime = input.deltaTime < options.time;\n\n        this.reset();\n\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\n            return this.failTimeout();\n        }\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (validMovement && validTouchTime && validPointers) {\n            if (input.eventType != INPUT_END) {\n                return this.failTimeout();\n            }\n\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n            this.pTime = input.timeStamp;\n            this.pCenter = input.center;\n\n            if (!validMultiTap || !validInterval) {\n                this.count = 1;\n            } else {\n                this.count += 1;\n            }\n\n            this._input = input;\n\n            // if tap count matches we have recognized it,\n            // else it has began recognizing...\n            var tapCount = this.count % options.taps;\n            if (tapCount === 0) {\n                // no failing requirements, immediately trigger the tap event\n                // or wait as long as the multitap interval to trigger\n                if (!this.hasRequireFailures()) {\n                    return STATE_RECOGNIZED;\n                } else {\n                    this._timer = setTimeoutContext(function() {\n                        this.state = STATE_RECOGNIZED;\n                        this.tryEmit();\n                    }, options.interval, this);\n                    return STATE_BEGAN;\n                }\n            }\n        }\n        return STATE_FAILED;\n    },\n\n    failTimeout: function() {\n        this._timer = setTimeoutContext(function() {\n            this.state = STATE_FAILED;\n        }, this.options.interval, this);\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function() {\n        if (this.state == STATE_RECOGNIZED) {\n            this._input.tapCount = this.count;\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n    options = options || {};\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n    return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n    /**\n     * set if DOM events are being triggered.\n     * But this is slower and unused by simple implementations, so disabled by default.\n     * @type {Boolean}\n     * @default false\n     */\n    domEvents: false,\n\n    /**\n     * The value for the touchAction property/fallback.\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\n     * @type {String}\n     * @default compute\n     */\n    touchAction: TOUCH_ACTION_COMPUTE,\n\n    /**\n     * @type {Boolean}\n     * @default true\n     */\n    enable: true,\n\n    /**\n     * EXPERIMENTAL FEATURE -- can be removed/changed\n     * Change the parent input target element.\n     * If Null, then it is being set the to main element.\n     * @type {Null|EventTarget}\n     * @default null\n     */\n    inputTarget: null,\n\n    /**\n     * force an input class\n     * @type {Null|Function}\n     * @default null\n     */\n    inputClass: null,\n\n    /**\n     * Default recognizer setup when calling `Hammer()`\n     * When creating a new Manager these will be skipped.\n     * @type {Array}\n     */\n    preset: [\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n        [RotateRecognizer, {enable: false}],\n        [PinchRecognizer, {enable: false}, ['rotate']],\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n        [TapRecognizer],\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n        [PressRecognizer]\n    ],\n\n    /**\n     * Some CSS properties can be used to improve the working of Hammer.\n     * Add them to this method and they will be set when creating a new Manager.\n     * @namespace\n     */\n    cssProps: {\n        /**\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userSelect: 'none',\n\n        /**\n         * Disable the Windows Phone grippers when pressing an element.\n         * @type {String}\n         * @default 'none'\n         */\n        touchSelect: 'none',\n\n        /**\n         * Disables the default callout shown when you touch and hold a touch target.\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\n         * a callout containing information about the link. This property allows you to disable that callout.\n         * @type {String}\n         * @default 'none'\n         */\n        touchCallout: 'none',\n\n        /**\n         * Specifies whether zooming is enabled. Used by IE10>\n         * @type {String}\n         * @default 'none'\n         */\n        contentZooming: 'none',\n\n        /**\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userDrag: 'none',\n\n        /**\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\n         * clickable element in iOS. This property obeys the alpha value, if specified.\n         * @type {String}\n         * @default 'rgba(0,0,0,0)'\n         */\n        tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.options.inputTarget = this.options.inputTarget || element;\n\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    toggleCssProps(this, true);\n\n    each(this.options.recognizers, function(item) {\n        var recognizer = this.add(new (item[0])(item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n}\n\nManager.prototype = {\n    /**\n     * set options\n     * @param {Object} options\n     * @returns {Manager}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // Options that need a little more setup\n        if (options.touchAction) {\n            this.touchAction.update();\n        }\n        if (options.inputTarget) {\n            // Clean up existing event listeners and reinitialize\n            this.input.destroy();\n            this.input.target = options.inputTarget;\n            this.input.init();\n        }\n        return this;\n    },\n\n    /**\n     * stop recognizing for this session.\n     * This session will be discarded, when a new [input]start event is fired.\n     * When forced, the recognizer cycle is stopped immediately.\n     * @param {Boolean} [force]\n     */\n    stop: function(force) {\n        this.session.stopped = force ? FORCED_STOP : STOP;\n    },\n\n    /**\n     * run the recognizers!\n     * called by the inputHandler function on every movement of the pointers (touches)\n     * it walks through all the recognizers and tries to detect the gesture that is being made\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        var session = this.session;\n        if (session.stopped) {\n            return;\n        }\n\n        // run the touch-action polyfill\n        this.touchAction.preventDefaults(inputData);\n\n        var recognizer;\n        var recognizers = this.recognizers;\n\n        // this holds the recognizer that is being recognized.\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n        // if no recognizer is detecting a thing, it is set to `null`\n        var curRecognizer = session.curRecognizer;\n\n        // reset when the last recognizer is recognized\n        // or when we're in a new session\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n            curRecognizer = session.curRecognizer = null;\n        }\n\n        var i = 0;\n        while (i < recognizers.length) {\n            recognizer = recognizers[i];\n\n            // find out if we are allowed try to recognize the input for this one.\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n            //      that is being recognized.\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\n            if (session.stopped !== FORCED_STOP && ( // 1\n                    !curRecognizer || recognizer == curRecognizer || // 2\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\n                recognizer.recognize(inputData);\n            } else {\n                recognizer.reset();\n            }\n\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n            // current active recognizer. but only if we don't already have an active recognizer\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                curRecognizer = session.curRecognizer = recognizer;\n            }\n            i++;\n        }\n    },\n\n    /**\n     * get a recognizer by its event name.\n     * @param {Recognizer|String} recognizer\n     * @returns {Recognizer|Null}\n     */\n    get: function(recognizer) {\n        if (recognizer instanceof Recognizer) {\n            return recognizer;\n        }\n\n        var recognizers = this.recognizers;\n        for (var i = 0; i < recognizers.length; i++) {\n            if (recognizers[i].options.event == recognizer) {\n                return recognizers[i];\n            }\n        }\n        return null;\n    },\n\n    /**\n     * add a recognizer to the manager\n     * existing recognizers with the same event name will be removed\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer|Manager}\n     */\n    add: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'add', this)) {\n            return this;\n        }\n\n        // remove existing\n        var existing = this.get(recognizer.options.event);\n        if (existing) {\n            this.remove(existing);\n        }\n\n        this.recognizers.push(recognizer);\n        recognizer.manager = this;\n\n        this.touchAction.update();\n        return recognizer;\n    },\n\n    /**\n     * remove a recognizer by name or instance\n     * @param {Recognizer|String} recognizer\n     * @returns {Manager}\n     */\n    remove: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'remove', this)) {\n            return this;\n        }\n\n        recognizer = this.get(recognizer);\n\n        // let's make sure this recognizer exists\n        if (recognizer) {\n            var recognizers = this.recognizers;\n            var index = inArray(recognizers, recognizer);\n\n            if (index !== -1) {\n                recognizers.splice(index, 1);\n                this.touchAction.update();\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * bind event\n     * @param {String} events\n     * @param {Function} handler\n     * @returns {EventEmitter} this\n     */\n    on: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n        if (handler === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            handlers[event] = handlers[event] || [];\n            handlers[event].push(handler);\n        });\n        return this;\n    },\n\n    /**\n     * unbind event, leave emit blank to remove all handlers\n     * @param {String} events\n     * @param {Function} [handler]\n     * @returns {EventEmitter} this\n     */\n    off: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            if (!handler) {\n                delete handlers[event];\n            } else {\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n            }\n        });\n        return this;\n    },\n\n    /**\n     * emit event to the listeners\n     * @param {String} event\n     * @param {Object} data\n     */\n    emit: function(event, data) {\n        // we also want to trigger dom events\n        if (this.options.domEvents) {\n            triggerDomEvent(event, data);\n        }\n\n        // no handlers, so skip it all\n        var handlers = this.handlers[event] && this.handlers[event].slice();\n        if (!handlers || !handlers.length) {\n            return;\n        }\n\n        data.type = event;\n        data.preventDefault = function() {\n            data.srcEvent.preventDefault();\n        };\n\n        var i = 0;\n        while (i < handlers.length) {\n            handlers[i](data);\n            i++;\n        }\n    },\n\n    /**\n     * destroy the manager and unbinds all events\n     * it doesn't unbind dom events, that is the user own responsibility\n     */\n    destroy: function() {\n        this.element && toggleCssProps(this, false);\n\n        this.handlers = {};\n        this.session = {};\n        this.input.destroy();\n        this.element = null;\n    }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n    var element = manager.element;\n    if (!element.style) {\n        return;\n    }\n    var prop;\n    each(manager.options.cssProps, function(value, name) {\n        prop = prefixed(element.style, name);\n        if (add) {\n            manager.oldCssProps[prop] = element.style[prop];\n            element.style[prop] = value;\n        } else {\n            element.style[prop] = manager.oldCssProps[prop] || '';\n        }\n    });\n    if (!add) {\n        manager.oldCssProps = {};\n    }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n    var gestureEvent = document.createEvent('Event');\n    gestureEvent.initEvent(event, true, true);\n    gestureEvent.gesture = data;\n    data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n    INPUT_START: INPUT_START,\n    INPUT_MOVE: INPUT_MOVE,\n    INPUT_END: INPUT_END,\n    INPUT_CANCEL: INPUT_CANCEL,\n\n    STATE_POSSIBLE: STATE_POSSIBLE,\n    STATE_BEGAN: STATE_BEGAN,\n    STATE_CHANGED: STATE_CHANGED,\n    STATE_ENDED: STATE_ENDED,\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\n    STATE_CANCELLED: STATE_CANCELLED,\n    STATE_FAILED: STATE_FAILED,\n\n    DIRECTION_NONE: DIRECTION_NONE,\n    DIRECTION_LEFT: DIRECTION_LEFT,\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\n    DIRECTION_UP: DIRECTION_UP,\n    DIRECTION_DOWN: DIRECTION_DOWN,\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n    DIRECTION_ALL: DIRECTION_ALL,\n\n    Manager: Manager,\n    Input: Input,\n    TouchAction: TouchAction,\n\n    TouchInput: TouchInput,\n    MouseInput: MouseInput,\n    PointerEventInput: PointerEventInput,\n    TouchMouseInput: TouchMouseInput,\n    SingleTouchInput: SingleTouchInput,\n\n    Recognizer: Recognizer,\n    AttrRecognizer: AttrRecognizer,\n    Tap: TapRecognizer,\n    Pan: PanRecognizer,\n    Swipe: SwipeRecognizer,\n    Pinch: PinchRecognizer,\n    Rotate: RotateRecognizer,\n    Press: PressRecognizer,\n\n    on: addEventListeners,\n    off: removeEventListeners,\n    each: each,\n    merge: merge,\n    extend: extend,\n    assign: assign,\n    inherit: inherit,\n    bindFn: bindFn,\n    prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n    define(function() {\n        return Hammer;\n    });\n} else if (typeof module != 'undefined' && module.exports) {\n    module.exports = Hammer;\n} else {\n    window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","import * as Stage from \"stage-js\";\nimport Hammer from \"hammerjs\";\nimport { Middleware, Memo } from \"polymatic\";\n\ninterface ZoomPanPluginContext {\n  pointerCaptured: boolean;\n  containerElement: HTMLElement;\n  stage: Stage.Root;\n  // zoom: number;\n}\n\nexport interface ZoomEvent {\n  zoom: number;\n  center: { x: number; y: number };\n}\n\nexport interface PanEvent {\n  delta: { x: number; y: number };\n}\n\n/**\n * Zoom and pan the root component, using Hammer.js.\n */\nexport class ZoomPanProvider extends Middleware<ZoomPanPluginContext> {\n  hammer: Hammer.Manager | null = null;\n  containerElement: HTMLElement | null = null;\n\n  setupMemo = Memo.init();\n  pinchScale = 1;\n  pan = { x: 0, y: 0 };\n\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleContextChange);\n    this.on(\"context-change\", this.handleContextChange);\n    this.on(\"deactivate\", this.handleDeactivate);\n\n    this.on(\"display-zoom\", this.handleZoom);\n    this.on(\"display-pan\", this.handlePan);\n  }\n\n  handleContextChange = () => {\n    this.containerElement = this.context.containerElement;\n    if (!this.setupMemo.update(this.containerElement)) return;\n\n    // console.log('zoom', element);\n    if (!this.containerElement) {\n      return;\n    }\n\n    this.hammer = new Hammer(this.containerElement, {});\n    this.hammer.get(\"pan\").set({ direction: Hammer.DIRECTION_ALL });\n    this.hammer.get(\"pinch\").set({ enable: true });\n\n    this.hammer.on(\"pinchstart\", this.handlePinchStart);\n    this.hammer.on(\"pinchin\", this.handlePinch);\n    this.hammer.on(\"pinchout\", this.handlePinch);\n\n    this.hammer.on(\"panstart\", this.handlePanStart);\n    this.hammer.on(\"panmove\", this.handlePanMove);\n\n    this.containerElement.addEventListener(\"wheel\", this.wheelListener, false);\n  };\n\n  handleDeactivate = () => {\n    if (this.hammer) {\n      this.hammer.destroy();\n      this.hammer = null;\n    }\n\n    if (this.containerElement) {\n      this.containerElement.removeEventListener(\"wheel\", this.wheelListener);\n      this.containerElement = null;\n    }\n  };\n\n  getPoint = (ev: WheelEvent) => {\n    const rect = this.containerElement.getBoundingClientRect() as DOMRect;\n    const point = {\n      x: ev.clientX - rect.left,\n      y: ev.clientY - rect.top,\n    };\n    return point;\n  };\n\n  wheelListener = (ev: WheelEvent) => {\n    ev.preventDefault();\n    const delta = Math.max(-1, Math.min(1, -(ev.deltaX + ev.deltaY)));\n    const point = this.getPoint(ev);\n    this.emit(\"display-zoom\", {\n      zoom: 1 + delta * 0.05,\n      center: point,\n    });\n  };\n\n  handlePinchStart = () => {\n    this.pinchScale = 1;\n  };\n\n  handlePinch = ({ target, scale, center, rotation }) => {\n    const rect = target.getBoundingClientRect() as DOMRect;\n    const x = center.x - rect.left;\n    const y = center.y - rect.top;\n\n    this.emit(\"display-zoom\", {\n      zoom: scale / this.pinchScale,\n      center: { x, y },\n    });\n    this.pinchScale = scale;\n  };\n\n  handlePanStart = () => {\n    this.pan.x = 0;\n    this.pan.y = 0;\n  };\n\n  handlePanMove = ({ deltaX, deltaY }) => {\n    if (this.context.pointerCaptured) {\n      return;\n    }\n    const delta = {\n      x: this.pan.x - deltaX,\n      y: this.pan.y - deltaY,\n    };\n    this.emit(\"display-pan\", {\n      delta,\n    });\n    this.pan.x = deltaX;\n    this.pan.y = deltaY;\n  };\n\n  camera = new Stage.Matrix();\n\n  containerElementMemo = Memo.init();\n  sizeMemo = Memo.init();\n  offsetMemo = Memo.init();\n\n  handleZoom = ({ center, zoom }: ZoomEvent) => {\n    const stage = this.context.stage;\n    if (!stage) return;\n\n    const ratio = stage.viewport().ratio;\n\n    const cx = center.x * ratio;\n    const cy = center.y * ratio;\n\n    this.camera.translate(-cx, -cy).scale(zoom, zoom).translate(cx, cy);\n\n    stage.camera(this.camera);\n\n    // this.setContext((context) => {\n    //   context.zoom = this.camera.a;\n    // });\n  };\n\n  handlePan = ({ delta }: PanEvent) => {\n    const stage = this.context.stage;\n    if (!stage) return;\n\n    const ratio = stage.viewport().ratio;\n    const tx = delta.x * ratio;\n    const ty = delta.y * ratio;\n\n    this.camera.translate(-tx, -ty);\n    stage.camera(this.camera);\n  };\n}\n","import * as Stage from \"stage-js\";\nimport { Vec2, World, type Body, type Vec2Value } from \"planck\";\nimport { Memo, Middleware } from \"polymatic\";\n\nimport { WorldPointerDown, WorldPointerMove, WorldPointerUp } from \"../world-view\";\nimport { findFixture } from \"../world-view/WorldPointer\";\nimport { ToolConfig } from \"../common-tool\";\n\ninterface ImpulseToolContext {\n  stage: Stage.Root;\n  world: World;\n  activeTool: ToolConfig;\n}\n\nexport class ImpulseTool extends Middleware<ImpulseToolContext> {\n  body: Body | null = null;\n  pointer = { x: 0, y: 0 };\n\n  component = new ImpulseToolComponent(this);\n  setupMemo = Memo.init();\n\n  constructor() {\n    super();\n\n    this.on(\"activate\", this.handleContextChange);\n    this.on(\"context-change\", this.handleContextChange);\n    this.on(\"deactivate\", this.handleDeactivate);\n\n    this.on(\"world-pointer-down\", this.handlePointerDown);\n    this.on(\"world-pointer-move\", this.handlePointerMove);\n    this.on(\"world-pointer-up\", this.handlePointerUp);\n    this.on(\"world-pointer-cancel\", this.handlePointerCancel);\n  }\n\n  handleContextChange = () => {\n    if (this.setupMemo.update(this.context.stage)) {\n      this.context.stage?.append(this.component);\n    }\n  };\n\n  handleDeactivate = () => {\n    this.component?.remove();\n    this.body = null;\n    this.setupMemo.clear();\n  };\n\n  handlePointerDown = (ev: WorldPointerDown) => {\n    const config = this.context.activeTool;\n    const isActive = typeof config.impulseForce === \"number\" && config.impulseForce > 0;\n    if (!isActive) return;\n\n    if (this.body) {\n      return;\n    }\n\n    // todo: should we just use event.fixture?\n    const fixture = findFixture(this.context, ev.point, (f) => f.getBody().getType() === \"dynamic\");\n    if (!fixture) {\n      this.body = null;\n      return;\n    }\n\n    this.body = fixture.getBody();\n    this.emit(\"capture-pointer\");\n\n    this.pointer.x = ev.point.x;\n    this.pointer.y = ev.point.y;\n    this.component.touch();\n  };\n\n  handlePointerMove = (ev: WorldPointerMove) => {\n    if (!this.body) return;\n\n    this.pointer.x = ev.point.x;\n    this.pointer.y = ev.point.y;\n    this.component.touch();\n  };\n\n  handlePointerUp = (ev: WorldPointerUp) => {\n    if (!this.body) return;\n\n    const config = this.context.activeTool;\n    const impulseForce = typeof config.impulseForce === \"number\" ? config.impulseForce : 100;\n\n    const force = Vec2.sub(ev.point, this.body.getPosition());\n    force.mul(-impulseForce);\n    this.body.applyForceToCenter(force, true);\n\n    this.body = null;\n    this.component.touch();\n  };\n\n  handlePointerCancel = () => {\n    if (!this.body) return;\n\n    this.body = null;\n  };\n}\n\nclass ImpulseToolComponent extends Stage.Node {\n  mw: ImpulseTool;\n\n  static lineWidth = 3;\n\n  constructor(mw: ImpulseTool) {\n    super();\n    this.mw = mw;\n  }\n\n  renderTexture(ctx: CanvasRenderingContext2D): void {\n    if (!this.mw.body) return;\n\n    const pixelRatio = this.getDevicePixelRatio();\n    ctx.save();\n    ctx.lineWidth = ImpulseToolComponent.lineWidth / pixelRatio;\n    ctx.lineCap = \"round\";\n\n    this.drawEdge(ctx, this.mw.body.getPosition(), this.mw.pointer, \"rgba(255,255,255,0.2)\");\n\n    ctx.restore();\n  }\n\n  drawEdge = (ctx: CanvasRenderingContext2D, a: Vec2Value, b: Vec2Value, color: string): void => {\n    ctx.beginPath();\n    ctx.moveTo(a.x, a.y);\n    ctx.lineTo(b.x, b.y);\n    ctx.strokeStyle = color;\n    ctx.stroke();\n  };\n}\n","import { Body, MouseJoint, World } from \"planck\";\nimport { Middleware } from \"polymatic\";\nimport * as Stage from \"stage-js\";\n\nimport { WorldPointerDown, WorldPointerMove } from \"../world-view\";\nimport { findFixture } from \"../world-view/WorldPointer\";\nimport { ToolConfig } from \"../common-tool\";\n\ninterface PullToolContext {\n  world: World;\n  stage: Stage.Root;\n  activeTool: ToolConfig;\n}\n\nexport class PullTool extends Middleware<PullToolContext> {\n  body: Body | null = null;\n  ground: Body | null = null;\n  joint: MouseJoint | null = null;\n\n  constructor() {\n    super();\n\n    this.on(\"deactivate\", this.handleDeactivate);\n    this.on(\"world-pointer-down\", this.handlePointerDown);\n    this.on(\"world-pointer-move\", this.handlePointerMove);\n    this.on(\"world-pointer-up\", this.handlePointerUp);\n    this.on(\"world-pointer-cancel\", this.handlePointerCancel);\n  }\n\n  handleDeactivate = () => {\n    this.destroyJoint();\n    this.body = null;\n  };\n\n  handlePointerDown = (ev: WorldPointerDown) => {\n    const config = this.context.activeTool;\n\n    const isActive = config.mouseForce != 0 && +config.mouseForce > 0;\n    if (!isActive) return;\n\n    const world = this.context.world;\n\n    const fixture = findFixture(this.context, ev.point, (f) => f.getBody().getType() === \"dynamic\");\n    if (!fixture) return;\n\n    if (fixture.getBody() !== this.body) {\n      this.destroyJoint();\n    }\n\n    const mouseForce = typeof config.mouseForce === \"number\" ? config.mouseForce : 1000;\n\n    this.body = fixture.getBody();\n    this.ground = world.createBody();\n    this.joint = new MouseJoint({ maxForce: mouseForce }, this.ground, this.body, ev.point);\n\n    world.createJoint(this.joint);\n\n    this.emit(\"capture-pointer\");\n  };\n\n  handlePointerMove = (ev: WorldPointerMove) => {\n    if (!this.joint) return;\n\n    this.joint.setTarget(ev.point);\n  };\n\n  handlePointerUp = () => {\n    if (!this.joint) return;\n\n    this.body = null;\n    this.destroyJoint();\n  };\n\n  handlePointerCancel = () => {\n    if (!this.joint) return;\n\n    this.body = null;\n    this.destroyJoint();\n  };\n\n  destroyJoint = () => {\n    const world = this.context.world;\n    if (this.joint) world.destroyJoint(this.joint);\n    if (this.ground) world.destroyBody(this.ground);\n    this.joint = null;\n    this.ground = null;\n  };\n}\n","import { Middleware } from \"polymatic\";\n\nimport { ToolConfig } from \"./ToolConfig\";\n\ninterface ToolSwitchContext {\n  activeTool: ToolConfig;\n}\n\n/**\n * Handles tool-switch events, activates the provided tool if the name matches.\n */\nexport class ToolSwitch<T extends ToolSwitchContext> extends Middleware<T> {\n  name: string;\n  tool: Middleware;\n\n  constructor(name: string, tool: Middleware) {\n    super();\n    this.name = name;\n    this.tool = tool;\n    this.on(\"tool-switch\", this.handleSetActiveTool);\n  }\n\n  handleSetActiveTool(tool: ToolConfig) {\n    if (tool.name === this.name) {\n      this.context.activeTool = tool;\n      this.use(this.tool);\n    } else {\n      this.unuse(this.tool);\n    }\n  }\n}\n","import * as Stage from \"stage-js\";\nimport { TestbedInterface, type ActiveKeys, type World } from \"planck\";\n\nimport { type ToolConfig } from \"../common-tool\";\nimport { MagicboardInterface } from \"../common/Magicboard\";\nimport { ConsoleInterface } from \"./ConsolePlugin\";\nimport { Camera } from \"../common/Viewbox\";\n\nexport interface ContextSimulation {\n  speed: number;\n  hz: number;\n}\n\nexport interface ContextStyle {\n  stroke?: string;\n  fill?: string;\n  lineWidth?: number;\n  background?: string;\n}\n\nexport interface ContextGamepad {\n  activeKeys: ActiveKeys;\n}\n\nexport interface TestbedContext {\n  activeMode: string;\n  activeTool: ToolConfig;\n  paused: boolean;\n  pointerCaptured: boolean;\n\n  world: World;\n\n  gamepad: ContextGamepad;\n  style: ContextStyle;\n  simulation: ContextSimulation;\n  camera: Camera;\n\n  containerElement?: HTMLElement;\n\n  stage: Stage.Root;\n\n  magicboard: MagicboardInterface;\n  console: ConsoleInterface;\n\n  testbed?: TestbedInterface\n}\n\nexport class DefaultTestbedContext implements TestbedContext {\n  activeMode = \"play\";\n  activeTool: ToolConfig = null;\n  paused = false;\n  pointerCaptured = false;\n  world: World;\n  gamepad = {\n    activeKeys: {} as Record<string, boolean>,\n  };\n  style = {\n    background: \"#111\",\n  };\n  simulation = {\n    speed: 1,\n    hz: 60,\n  };\n  camera = {\n    x: 0,\n    y: -10,\n    width: 80,\n    height: 60,\n  };\n  containerElement?: HTMLElement;\n  stage: Stage.Root;\n  magicboard: MagicboardInterface;\n  console: ConsoleInterface;\n\n  testbed?: TestbedInterface;\n}\n","import { World, Fixture, Joint, Body } from \"planck\";\n\ntype LookupResult = Body | Fixture | Joint;\n\nexport const getLookupId = (obj: any) => {\n  if (obj.lookupId) {\n    return obj.lookupId;\n  }\n  if (obj.spaceName) {\n    return obj.spaceName;\n  }\n  return null;\n};\n\nexport const setLookupId = (obj: any, id: string) => {\n  obj.lookupId = id;\n};\n\nexport const findOne = (world: World, query: string): LookupResult | null => {\n  if (query.indexOf(\"#\")) {\n    const [type, id] = query.split(\"#\", 2);\n    if (type === \"body\") {\n      for (let body = world.getBodyList(); body; body = body.getNext()) {\n        if (getLookupId(body) === id) {\n          return body;\n        }\n      }\n    } else if (type === \"fixture\") {\n      for (let body = world.getBodyList(); body; body = body.getNext()) {\n        for (let fixture = body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n          if (getLookupId(fixture) === id) {\n            return fixture;\n          }\n        }\n      }\n    } else if (type === \"joint\") {\n      for (let joint = world.getJointList(); joint; joint = joint.getNext()) {\n        if (getLookupId(joint) === id) {\n          return joint;\n        }\n      }\n    }\n  }\n  return null;\n};\n\nexport const findAll = (world: World, query: string): LookupResult[] => {\n  const result: LookupResult[] = [];\n  if (query.indexOf(\"#\")) {\n    const [type, id] = query.split(\"#\", 2);\n    if (type === \"body\") {\n      for (let body = world.getBodyList(); body; body = body.getNext()) {\n        if (getLookupId(body) === id) {\n          result.push(body);\n        }\n      }\n    } else if (type === \"fixture\") {\n      for (let body = world.getBodyList(); body; body = body.getNext()) {\n        for (let fixture = body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n          if (getLookupId(fixture) === id) {\n            result.push(fixture);\n          }\n        }\n      }\n    } else if (type === \"joint\") {\n      for (let joint = world.getJointList(); joint; joint = joint.getNext()) {\n        if (getLookupId(joint) === id) {\n          result.push(joint);\n        }\n      }\n    }\n  }\n  return result;\n};\n","import { Memo, Middleware } from \"polymatic\";\n\nimport {\n  type TestbedInterface,\n  type Vec2Value,\n  type World,\n  type Joint,\n  type Fixture,\n  type Body,\n  type AABBValue,\n} from \"planck\";\n\nimport { findAll, findOne } from \"../common/LookupId\";\n\nimport { type TestbedContext } from \"./TestbedContext\";\nimport { type FrameLoopEvent } from \"../common/FrameLoop\";\n\n/**\n * Implements Testbed.mount() and returns a testbed instance connected to this runtime.\n */\nexport class TestbedLoader extends Middleware<TestbedContext> {\n  stageMemo = Memo.init();\n\n  constructor() {\n    super();\n\n    this.on(\"activate\", this.handleActivate);\n    this.on(\"context-change\", this.handleContextChange);\n    this.on(\"deactivate\", this.handleDeactivate);\n\n    this.on(\"gamepad-keydown\", this.handleGamepadKeydown);\n    this.on(\"gamepad-keyup\", this.handleGamepadKeyup);\n\n    this.on(\"frame-update\", this.handleFrameLoop);\n  }\n\n  handleActivate = () => {\n    this.handleContextChange();\n  };\n\n  handleContextChange = () => {\n    const stage = this.context.stage;\n    if (this.stageMemo.update(stage) && stage) {\n      // default root alignment in stage is 0, 0 (top-left origin).\n      // planck testbed root alignment needs to be -0.5, -0.5 (origin in the middle)\n      stage.pin(\"alignX\", -0.5);\n      stage.pin(\"alignY\", -0.5);\n    }\n  };\n\n  handleDeactivate() {\n    this.stageMemo.clear();\n  }\n\n  handleFrameLoop = (ev: FrameLoopEvent) => {\n    if (this.context.paused) return;\n    if (this.context.activeMode !== \"play\") return;\n    this.context.testbed?.step?.(ev.dt, ev.now);\n  };\n\n  handleGamepadKeydown = (ev: KeyboardEvent) => {\n    console.log(\"handleGamepadKeyup\", this.context.paused, this.context.activeMode);\n    if (this.context.paused) return;\n    if (this.context.activeMode !== \"play\") return;\n    const keyCode = ev.keyCode;\n    this.context.testbed?.keydown?.(keyCode, String.fromCharCode(keyCode));\n  };\n\n  handleGamepadKeyup = (ev: KeyboardEvent) => {\n    if (this.context.paused) return;\n    if (this.context.activeMode !== \"play\") return;\n    const keyCode = ev.keyCode;\n    this.context.testbed?.keyup?.(keyCode, String.fromCharCode(keyCode));\n  };\n}\n\nexport class TestbedInstance implements TestbedInterface {\n  static instance: TestbedInstance;\n  private runtime: Middleware<TestbedContext>;\n\n  constructor(runtime: Middleware<TestbedContext>) {\n    this.runtime = runtime;\n  }\n\n  get width() {\n    return this.runtime.context.camera.width;\n  }\n  set width(value: number) {\n    this.runtime.context.camera.width = value;\n  }\n\n  get height() {\n    return this.runtime.context.camera.height;\n  }\n  set height(value: number) {\n    this.runtime.context.camera.height = value;\n  }\n\n  get x() {\n    return this.runtime.context.camera.x;\n  }\n  set x(value: number) {\n    this.runtime.context.camera.x = value;\n  }\n\n  get y() {\n    return this.runtime.context.camera.y;\n  }\n  set y(value: number) {\n    this.runtime.context.camera.y = value;\n  }\n\n  get background() {\n    return this.runtime.context.style.background;\n  }\n\n  set background(value: string) {\n    this.runtime.context.style.background = value;\n  }\n\n  scaleY: number;\n  get hz() {\n    return this.runtime.context.simulation.hz;\n  }\n  set hz(value: number) {\n    this.runtime.context.simulation.hz = value;\n  }\n\n  get speed() {\n    return this.runtime.context.simulation.speed;\n  }\n  set speed(value: number) {\n    this.runtime.context.simulation.speed = value;\n  }\n\n  get mouseForce() {\n    const config = this.runtime.context.activeTool;\n    if (typeof config.mouseForce === \"number\" && config.mouseForce > 0) {\n      return config.mouseForce;\n    } else if (typeof config.impulseForce === \"number\" && config.impulseForce > 0) {\n      return -config.impulseForce;\n    } else {\n      return 0;\n    }\n  }\n  set mouseForce(value: number) {\n    const config = this.runtime.context.activeTool;\n    if (value > 0) {\n      config.mouseForce = value;\n      config.impulseForce = 0;\n    } else if (value < 0) {\n      config.mouseForce = 0;\n      config.impulseForce = -value;\n    } else {\n      config.mouseForce = 0;\n      config.impulseForce = 0;\n    }\n  }\n\n  get activeKeys() {\n    return this.runtime.context.gamepad.activeKeys;\n  }\n\n  step: (dt: number, t: number) => void;\n  keydown: (keyCode: number, label: string) => void;\n  keyup: (keyCode: number, label: string) => void;\n\n  color(red: number, green: number, blue: number, alpha = 1): string {\n    const redHex = padStart(((red * 255) | 0).toString(16), 2, \"0\");\n    const greenHex = padStart(((green * 255) | 0).toString(16), 2, \"0\");\n    const blueHex = padStart(((blue * 255) | 0).toString(16), 2, \"0\");\n    const alphaHex = alpha !== 1 ? padStart(((alpha * 255) | 0).toString(16), 2, \"0\") : \"\";\n    const hexColor = \"#\" + redHex + greenHex + blueHex + alphaHex;\n    return hexColor;\n  }\n\n  start(world: World): void {\n    if (world) {\n      this.runtime.setContext((context) => {\n        context.world = world;\n      });\n    }\n    this.resume();\n  }\n\n  // todo: how to add world to testbed api?\n  // get/set world, or get/setWorld\n  get world() {\n    return this.runtime.context.world;\n  }\n\n  set world(world: World) {\n    this.runtime.setContext((context) => {\n      context.world = world;\n    });\n  }\n\n  drawPoint(p: Vec2Value, r: number, color: string): void {\n    this.runtime.context.magicboard?.drawPoint(p, r, color);\n  }\n\n  drawCircle(p: Vec2Value, r: number, color: string): void {\n    this.runtime.context.magicboard?.drawCircle(p, r, color);\n  }\n\n  drawEdge(a: Vec2Value, b: Vec2Value, color: string): void {\n    this.runtime.context.magicboard?.drawEdge(a, b, color);\n  }\n\n  drawSegment(a: Vec2Value, b: Vec2Value, color: string): void {\n    this.runtime.context.magicboard?.drawEdge(a, b, color);\n  }\n\n  drawPolygon(points: Array<Vec2Value>, color: string): void {\n    this.runtime.context.magicboard?.drawPolygon(points, color);\n  }\n\n  drawChain(points: Array<Vec2Value>, color: string): void {\n    this.runtime.context.magicboard?.drawChain(points, color);\n  }\n\n  drawAABB(aabb: AABBValue, color: string): void {\n    this.runtime.context.magicboard?.drawAABB(aabb, color);\n  }\n\n  findOne(query: string): Body | Joint | Fixture | null {\n    return findOne(this.runtime.context.world, query);\n  }\n\n  findAll(query: string): (Body | Joint | Fixture)[] {\n    return findAll(this.runtime.context.world, query);\n  }\n\n  /** @internal pass paused to WorldComponent */\n  get paused() {\n    return this.runtime.context.paused;\n  }\n\n  isPaused() {\n    return this.runtime.context.paused;\n  }\n\n  pause() {\n    this.runtime.setContext((context) => {\n      context.paused = true;\n    });\n  }\n\n  resume() {\n    this.runtime.setContext((context) => {\n      context.paused = false;\n    });\n  }\n\n  info(text: string): void {\n    this.runtime.context.console?.info(text);\n  }\n\n  status(name: string, value: any): void;\n  status(value: object | string): void;\n  status(a: any, b?: any) {\n    this.runtime.context.console?.status(a, b);\n  }\n}\n\nconst padStart = (input: string, length: number, pad: string) => {\n  while (input.length < length) {\n    input = pad + input;\n  }\n  return input;\n};\n","import { Middleware } from \"polymatic\";\n\nexport class ContainerLoader extends Middleware<{ containerElement: HTMLElement }> {\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleActivate);\n  }\n\n  handleActivate() {\n    if (document.readyState !== \"loading\") {\n      this.handleDomReady();\n    } else {\n      document.addEventListener(\"DOMContentLoaded\", this.handleDomReady);\n    }\n  }\n\n  handleDomReady = () => {\n    const containerElement = document.getElementById(\"space\") ?? document.getElementById(\"stage\");\n    if (!containerElement) {\n      throw new Error(\"Runtime canvas element not available!\");\n    }\n    this.setContext((context) => {\n      context.containerElement = containerElement;\n    });\n  };\n}\n","import { Middleware } from \"polymatic\";\n\nexport interface FrameLoopEvent {\n  dt: number;\n  now: number;\n}\n\n/**\n * Implements variable length game loop. Sends frame-update and frame-render event to all middlewares.\n */\nexport class FrameLoop extends Middleware {\n  lastTime = 0;\n\n  // reuse object\n  event: FrameLoopEvent = {\n    dt: 0,\n    now: 0,\n  };\n\n  constructor() {\n    super();\n    this.on(\"activate\", this.handleActivate);\n  }\n\n  handleActivate() {\n    this.lastTime = performance.now();\n    this.requestFrame();\n  }\n\n  handleFrame = () => {\n    if (!this.activated) return;\n\n    const now = performance.now();\n    const delta = now - this.lastTime;\n    this.lastTime = now;\n\n    this.event.now = now;\n    this.event.dt = delta;\n\n    this.emit(\"frame-before\", this.event);\n    this.emit(\"frame-update\", this.event);\n    this.emit(\"frame-render\", this.event);\n    this.emit(\"frame-after\", this.event);\n\n    this.requestFrame();\n  };\n\n  requestFrame = () => {\n    if (!this.activated) return;\n    window.requestAnimationFrame(this.handleFrame);\n  };\n}\n","import { Middleware } from \"polymatic\";\n\nimport { type World } from \"planck\";\n\nimport { ContextSimulation } from \"../testbed/TestbedContext\";\nimport { FrameLoopEvent } from \"../common/FrameLoop\";\n\nconst math_abs = Math.abs;\n\ninterface WorldViewContext {\n  world: World;\n  simulation?: ContextSimulation;\n  paused?: boolean;\n}\n\nconst DEFAULTS = {\n  speed: 1,\n  hz: 60,\n};\n\n/**\n * Calls world.step on each frame update.\n */\nexport class WorldStep extends Middleware<WorldViewContext> {\n  constructor() {\n    super();\n    this.on(\"frame-update\", this.handleTick);\n  }\n\n  private timeBuffer = 0;\n  private stepErrored = false;\n\n  handleTick = (ev: FrameLoopEvent) => {\n    if (!this.context.world) return;\n    if (this.stepErrored) return;\n    if (this.context.paused) return;\n\n    const speed = this.context.simulation?.speed ?? DEFAULTS.speed;\n    let hz = this.context.simulation?.hz ?? DEFAULTS.hz;\n    if (math_abs(hz) < 1) {\n      hz = 1 / hz;\n    }\n\n    const timeStep = 1 / hz;\n    try {\n      const dt = ev.dt * 0.001 * speed;\n      this.timeBuffer += dt;\n      while (this.timeBuffer > timeStep) {\n        this.context.world.step(timeStep);\n        this.timeBuffer -= timeStep;\n      }\n      return;\n    } catch (error) {\n      this.stepErrored = true;\n      console.error(error);\n      return;\n    }\n  };\n}\n","import { Middleware } from \"polymatic\";\n\nimport { ImpulseTool } from \"./ImpulseTool\";\nimport { PullTool } from \"./PullTool\";\nimport { TestbedContext } from \"../testbed/TestbedContext\";\n\n/** Default tool combining pull and impulse tools */\nexport class TestbedTool extends Middleware<TestbedContext> {\n  constructor() {\n    super();\n    this.use(new PullTool());\n    this.use(new ImpulseTool());\n  }\n}\n","import { Middleware } from \"polymatic\";\n\nimport { Magicboard } from \"../common/Magicboard\";\nimport { GamepadPlugin } from \"./Gamepad\";\nimport { ConsoleProvider } from \"./ConsolePlugin\";\nimport { WorldView } from \"../world-view\";\nimport { WorldPointer } from \"../world-view/WorldPointer\";\nimport { StageLoader } from \"../common/StageLoader\";\nimport { ZoomPanProvider } from \"../common/ZoomPan\";\n\nimport { ImpulseTool } from \"../world-play/ImpulseTool\";\nimport { PullTool } from \"../world-play/PullTool\";\n\nimport { ToolSwitch } from \"../common-tool\";\n\nimport { TestbedContext } from \"./TestbedContext\";\nimport { TestbedLoader } from \"./Testbed\";\nimport { ContainerLoader } from \"../common/ContainerLoader\";\nimport { FrameLoop } from \"../common/FrameLoop\";\nimport { WorldStep } from \"../world-view/WorldStep\";\nimport { TestbedTool } from \"../world-play/TestbedTool\";\n\n/**\n * Preset middlewares for planck testbed.\n */\nexport class TestbedMain extends Middleware<TestbedContext> {\n  constructor() {\n    super();\n    this.use(new FrameLoop());\n    this.use(new ContainerLoader());\n    this.use(new GamepadPlugin());\n    this.use(new StageLoader());\n    this.use(new WorldStep());\n    this.use(new WorldView());\n    this.use(new WorldPointer());\n    this.use(new ConsoleProvider());\n    this.use(new Magicboard());\n    this.use(new TestbedLoader());\n    this.use(new ZoomPanProvider());\n\n    this.use(new ToolSwitch(\"interact-pull\", new PullTool()));\n    this.use(new ToolSwitch(\"interact-impulse\", new ImpulseTool()));\n    this.use(new ToolSwitch(\"default\", new TestbedTool()));\n  }\n}\n","import { Runtime } from \"polymatic\";\n\nimport { DefaultTestbedContext } from \"./TestbedContext\";\nimport { TestbedMain } from \"./TestbedMain\";\nimport { Testbed } from \"planck\";\nimport { TestbedInstance } from \"./Testbed\";\n\nexport * from \"./TestbedContext\";\nexport * from \"./TestbedMain\";\n\nTestbed.mount = () => {\n  const main = new TestbedMain();\n  const context = new DefaultTestbedContext();\n  // emit is async, tool-switch will happen after this function returns\n  // set activeTool early to allow changing maxForce in testbed code\n  context.activeTool = { name: \"default\" };\n  // for debugging\n  window[\"runtime\"] = main;\n  context.testbed = new TestbedInstance(main);\n  Runtime.activate(main, context);\n  main.emit(\"tool-switch\", context.activeTool);\n  return context.testbed;\n};\n"],"names":["math_sqrt","self","equal","math_PI","Stage.Node","x","y","math_max","math_min","Stage.Sprite","texture","Stage.canvas","math_atan2","length","sprite","Stage.sprite","PulleyJoint","Stage.POINTER_DOWN","Stage.POINTER_MOVE","Stage.POINTER_UP","Stage.POINTER_CANCEL","AABB","DistanceInput","CircleShape","SimplexCache","DistanceOutput","Distance","Vec2","Stage.mount","window","document","undefined","assign","extend","merge","inOut","Hammer","module","Stage.Matrix","MouseJoint","Testbed"],"mappings":"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","x_google_ignoreList":[0,1,16]}