{"version":3,"file":"pixi-spine-3.8.mjs","sources":["../../../packages/base/lib/core/AttachmentType.mjs","../../../packages/base/lib/core/BinaryInput.mjs","../../../packages/base/lib/core/IAnimation.mjs","../../../packages/base/lib/core/IConstraint.mjs","../../../packages/base/lib/core/ISkeleton.mjs","../../../packages/base/lib/core/TextureRegion.mjs","../../../packages/base/lib/core/TextureAtlas.mjs","../../../packages/base/lib/core/Utils.mjs","../../../packages/base/lib/core/SkeletonBoundsBase.mjs","../../../packages/base/lib/settings.mjs","../../../packages/base/lib/SpineBase.mjs","../../../packages/base/lib/SpineDebugRenderer.mjs","../../../packages/loader-base/lib/atlasLoader.mjs","../../../packages/loader-base/lib/SpineLoaderAbstract.mjs","../../../packages/runtime-3.8/lib/core/attachments/Attachment.mjs","../../../packages/runtime-3.8/lib/core/attachments/BoundingBoxAttachment.mjs","../../../packages/runtime-3.8/lib/core/attachments/ClippingAttachment.mjs","../../../packages/runtime-3.8/lib/core/attachments/MeshAttachment.mjs","../../../packages/runtime-3.8/lib/core/attachments/PathAttachment.mjs","../../../packages/runtime-3.8/lib/core/attachments/PointAttachment.mjs","../../../packages/runtime-3.8/lib/core/Slot.mjs","../../../packages/runtime-3.8/lib/core/attachments/RegionAttachment.mjs","../../../packages/runtime-3.8/lib/core/vertexeffects/JitterEffect.mjs","../../../packages/runtime-3.8/lib/core/vertexeffects/SwirlEffect.mjs","../../../packages/runtime-3.8/lib/core/Animation.mjs","../../../packages/runtime-3.8/lib/core/AnimationState.mjs","../../../packages/runtime-3.8/lib/core/AnimationStateData.mjs","../../../packages/runtime-3.8/lib/core/AtlasAttachmentLoader.mjs","../../../packages/runtime-3.8/lib/core/Bone.mjs","../../../packages/runtime-3.8/lib/core/BoneData.mjs","../../../packages/runtime-3.8/lib/core/Constraint.mjs","../../../packages/runtime-3.8/lib/core/Event.mjs","../../../packages/runtime-3.8/lib/core/EventData.mjs","../../../packages/runtime-3.8/lib/core/IkConstraint.mjs","../../../packages/runtime-3.8/lib/core/IkConstraintData.mjs","../../../packages/runtime-3.8/lib/core/PathConstraintData.mjs","../../../packages/runtime-3.8/lib/core/PathConstraint.mjs","../../../packages/runtime-3.8/lib/core/TransformConstraint.mjs","../../../packages/runtime-3.8/lib/core/Skeleton.mjs","../../../packages/runtime-3.8/lib/core/SkeletonData.mjs","../../../packages/runtime-3.8/lib/core/SlotData.mjs","../../../packages/runtime-3.8/lib/core/TransformConstraintData.mjs","../../../packages/runtime-3.8/lib/core/Skin.mjs","../../../packages/runtime-3.8/lib/core/SkeletonBinary.mjs","../../../packages/runtime-3.8/lib/core/SkeletonBounds.mjs","../../../packages/runtime-3.8/lib/core/SkeletonJson.mjs","../../../packages/runtime-3.8/lib/Spine.mjs","../../../packages/loader-3.8/lib/index.mjs"],"sourcesContent":["var AttachmentType = /* @__PURE__ */ ((AttachmentType2) => {\n  AttachmentType2[AttachmentType2[\"Region\"] = 0] = \"Region\";\n  AttachmentType2[AttachmentType2[\"BoundingBox\"] = 1] = \"BoundingBox\";\n  AttachmentType2[AttachmentType2[\"Mesh\"] = 2] = \"Mesh\";\n  AttachmentType2[AttachmentType2[\"LinkedMesh\"] = 3] = \"LinkedMesh\";\n  AttachmentType2[AttachmentType2[\"Path\"] = 4] = \"Path\";\n  AttachmentType2[AttachmentType2[\"Point\"] = 5] = \"Point\";\n  AttachmentType2[AttachmentType2[\"Clipping\"] = 6] = \"Clipping\";\n  return AttachmentType2;\n})(AttachmentType || {});\n\nexport { AttachmentType };\n//# sourceMappingURL=AttachmentType.mjs.map\n","class BinaryInput {\n  constructor(data, strings = new Array(), index = 0, buffer = new DataView(data.buffer)) {\n    this.strings = strings;\n    this.index = index;\n    this.buffer = buffer;\n  }\n  readByte() {\n    return this.buffer.getInt8(this.index++);\n  }\n  readUnsignedByte() {\n    return this.buffer.getUint8(this.index++);\n  }\n  readShort() {\n    const value = this.buffer.getInt16(this.index);\n    this.index += 2;\n    return value;\n  }\n  readInt32() {\n    const value = this.buffer.getInt32(this.index);\n    this.index += 4;\n    return value;\n  }\n  readInt(optimizePositive) {\n    let b = this.readByte();\n    let result = b & 127;\n    if ((b & 128) != 0) {\n      b = this.readByte();\n      result |= (b & 127) << 7;\n      if ((b & 128) != 0) {\n        b = this.readByte();\n        result |= (b & 127) << 14;\n        if ((b & 128) != 0) {\n          b = this.readByte();\n          result |= (b & 127) << 21;\n          if ((b & 128) != 0) {\n            b = this.readByte();\n            result |= (b & 127) << 28;\n          }\n        }\n      }\n    }\n    return optimizePositive ? result : result >>> 1 ^ -(result & 1);\n  }\n  readStringRef() {\n    const index = this.readInt(true);\n    return index == 0 ? null : this.strings[index - 1];\n  }\n  readString() {\n    let byteCount = this.readInt(true);\n    switch (byteCount) {\n      case 0:\n        return null;\n      case 1:\n        return \"\";\n    }\n    byteCount--;\n    let chars = \"\";\n    for (let i = 0; i < byteCount; ) {\n      const b = this.readUnsignedByte();\n      switch (b >> 4) {\n        case 12:\n        case 13:\n          chars += String.fromCharCode((b & 31) << 6 | this.readByte() & 63);\n          i += 2;\n          break;\n        case 14:\n          chars += String.fromCharCode((b & 15) << 12 | (this.readByte() & 63) << 6 | this.readByte() & 63);\n          i += 3;\n          break;\n        default:\n          chars += String.fromCharCode(b);\n          i++;\n      }\n    }\n    return chars;\n  }\n  readFloat() {\n    const value = this.buffer.getFloat32(this.index);\n    this.index += 4;\n    return value;\n  }\n  readBoolean() {\n    return this.readByte() != 0;\n  }\n}\n\nexport { BinaryInput };\n//# sourceMappingURL=BinaryInput.mjs.map\n","var MixBlend = /* @__PURE__ */ ((MixBlend2) => {\n  MixBlend2[MixBlend2[\"setup\"] = 0] = \"setup\";\n  MixBlend2[MixBlend2[\"first\"] = 1] = \"first\";\n  MixBlend2[MixBlend2[\"replace\"] = 2] = \"replace\";\n  MixBlend2[MixBlend2[\"add\"] = 3] = \"add\";\n  return MixBlend2;\n})(MixBlend || {});\nvar MixDirection = /* @__PURE__ */ ((MixDirection2) => {\n  MixDirection2[MixDirection2[\"mixIn\"] = 0] = \"mixIn\";\n  MixDirection2[MixDirection2[\"mixOut\"] = 1] = \"mixOut\";\n  return MixDirection2;\n})(MixDirection || {});\n\nexport { MixBlend, MixDirection };\n//# sourceMappingURL=IAnimation.mjs.map\n","var PositionMode = /* @__PURE__ */ ((PositionMode2) => {\n  PositionMode2[PositionMode2[\"Fixed\"] = 0] = \"Fixed\";\n  PositionMode2[PositionMode2[\"Percent\"] = 1] = \"Percent\";\n  return PositionMode2;\n})(PositionMode || {});\nvar RotateMode = /* @__PURE__ */ ((RotateMode2) => {\n  RotateMode2[RotateMode2[\"Tangent\"] = 0] = \"Tangent\";\n  RotateMode2[RotateMode2[\"Chain\"] = 1] = \"Chain\";\n  RotateMode2[RotateMode2[\"ChainScale\"] = 2] = \"ChainScale\";\n  return RotateMode2;\n})(RotateMode || {});\n\nexport { PositionMode, RotateMode };\n//# sourceMappingURL=IConstraint.mjs.map\n","var TransformMode = /* @__PURE__ */ ((TransformMode2) => {\n  TransformMode2[TransformMode2[\"Normal\"] = 0] = \"Normal\";\n  TransformMode2[TransformMode2[\"OnlyTranslation\"] = 1] = \"OnlyTranslation\";\n  TransformMode2[TransformMode2[\"NoRotationOrReflection\"] = 2] = \"NoRotationOrReflection\";\n  TransformMode2[TransformMode2[\"NoScale\"] = 3] = \"NoScale\";\n  TransformMode2[TransformMode2[\"NoScaleOrReflection\"] = 4] = \"NoScaleOrReflection\";\n  return TransformMode2;\n})(TransformMode || {});\n\nexport { TransformMode };\n//# sourceMappingURL=ISkeleton.mjs.map\n","function filterFromString(text) {\n  switch (text.toLowerCase()) {\n    case \"nearest\":\n      return TextureFilter.Nearest;\n    case \"linear\":\n      return TextureFilter.Linear;\n    case \"mipmap\":\n      return TextureFilter.MipMap;\n    case \"mipmapnearestnearest\":\n      return TextureFilter.MipMapNearestNearest;\n    case \"mipmaplinearnearest\":\n      return TextureFilter.MipMapLinearNearest;\n    case \"mipmapnearestlinear\":\n      return TextureFilter.MipMapNearestLinear;\n    case \"mipmaplinearlinear\":\n      return TextureFilter.MipMapLinearLinear;\n    default:\n      throw new Error(`Unknown texture filter ${text}`);\n  }\n}\nfunction wrapFromString(text) {\n  switch (text.toLowerCase()) {\n    case \"mirroredtepeat\":\n      return TextureWrap.MirroredRepeat;\n    case \"clamptoedge\":\n      return TextureWrap.ClampToEdge;\n    case \"repeat\":\n      return TextureWrap.Repeat;\n    default:\n      throw new Error(`Unknown texture wrap ${text}`);\n  }\n}\nvar TextureFilter = /* @__PURE__ */ ((TextureFilter2) => {\n  TextureFilter2[TextureFilter2[\"Nearest\"] = 9728] = \"Nearest\";\n  TextureFilter2[TextureFilter2[\"Linear\"] = 9729] = \"Linear\";\n  TextureFilter2[TextureFilter2[\"MipMap\"] = 9987] = \"MipMap\";\n  TextureFilter2[TextureFilter2[\"MipMapNearestNearest\"] = 9984] = \"MipMapNearestNearest\";\n  TextureFilter2[TextureFilter2[\"MipMapLinearNearest\"] = 9985] = \"MipMapLinearNearest\";\n  TextureFilter2[TextureFilter2[\"MipMapNearestLinear\"] = 9986] = \"MipMapNearestLinear\";\n  TextureFilter2[TextureFilter2[\"MipMapLinearLinear\"] = 9987] = \"MipMapLinearLinear\";\n  return TextureFilter2;\n})(TextureFilter || {});\nvar TextureWrap = /* @__PURE__ */ ((TextureWrap2) => {\n  TextureWrap2[TextureWrap2[\"MirroredRepeat\"] = 33648] = \"MirroredRepeat\";\n  TextureWrap2[TextureWrap2[\"ClampToEdge\"] = 33071] = \"ClampToEdge\";\n  TextureWrap2[TextureWrap2[\"Repeat\"] = 10497] = \"Repeat\";\n  return TextureWrap2;\n})(TextureWrap || {});\nclass TextureRegion {\n  constructor() {\n    // thats for overrides\n    this.size = null;\n    this.names = null;\n    this.values = null;\n    this.renderObject = null;\n  }\n  get width() {\n    const tex = this.texture;\n    if (tex.trim) {\n      return tex.trim.width;\n    }\n    return tex.orig.width;\n  }\n  get height() {\n    const tex = this.texture;\n    if (tex.trim) {\n      return tex.trim.height;\n    }\n    return tex.orig.height;\n  }\n  get u() {\n    return this.texture._uvs.x0;\n  }\n  get v() {\n    return this.texture._uvs.y0;\n  }\n  get u2() {\n    return this.texture._uvs.x2;\n  }\n  get v2() {\n    return this.texture._uvs.y2;\n  }\n  get offsetX() {\n    const tex = this.texture;\n    return tex.trim ? tex.trim.x : 0;\n  }\n  get offsetY() {\n    return this.spineOffsetY;\n  }\n  get pixiOffsetY() {\n    const tex = this.texture;\n    return tex.trim ? tex.trim.y : 0;\n  }\n  get spineOffsetY() {\n    const tex = this.texture;\n    return this.originalHeight - this.height - (tex.trim ? tex.trim.y : 0);\n  }\n  get originalWidth() {\n    return this.texture.orig.width;\n  }\n  get originalHeight() {\n    return this.texture.orig.height;\n  }\n  get x() {\n    return this.texture.frame.x;\n  }\n  get y() {\n    return this.texture.frame.y;\n  }\n  get rotate() {\n    return this.texture.rotate !== 0;\n  }\n  get degrees() {\n    return (360 - this.texture.rotate * 45) % 360;\n  }\n}\n\nexport { TextureFilter, TextureRegion, TextureWrap, filterFromString, wrapFromString };\n//# sourceMappingURL=TextureRegion.mjs.map\n","import { SCALE_MODES, MIPMAP_MODES, ALPHA_MODES, Rectangle, Texture } from '@pixi/core';\nimport { TextureFilter, TextureWrap, TextureRegion, filterFromString } from './TextureRegion.mjs';\n\nclass RegionFields {\n  constructor() {\n    this.x = 0;\n    this.y = 0;\n    this.width = 0;\n    this.height = 0;\n    this.offsetX = 0;\n    this.offsetY = 0;\n    this.originalWidth = 0;\n    this.originalHeight = 0;\n    this.rotate = 0;\n    this.index = 0;\n  }\n}\nclass TextureAtlas {\n  constructor(atlasText, textureLoader, callback) {\n    this.pages = new Array();\n    this.regions = new Array();\n    if (atlasText) {\n      this.addSpineAtlas(atlasText, textureLoader, callback);\n    }\n  }\n  addTexture(name, texture) {\n    const pages = this.pages;\n    let page = null;\n    for (let i = 0; i < pages.length; i++) {\n      if (pages[i].baseTexture === texture.baseTexture) {\n        page = pages[i];\n        break;\n      }\n    }\n    if (page === null) {\n      page = new TextureAtlasPage();\n      page.name = \"texturePage\";\n      const baseTexture = texture.baseTexture;\n      page.width = baseTexture.realWidth;\n      page.height = baseTexture.realHeight;\n      page.baseTexture = baseTexture;\n      page.minFilter = page.magFilter = TextureFilter.Nearest;\n      page.uWrap = TextureWrap.ClampToEdge;\n      page.vWrap = TextureWrap.ClampToEdge;\n      pages.push(page);\n    }\n    const region = new TextureAtlasRegion();\n    region.name = name;\n    region.page = page;\n    region.texture = texture;\n    region.index = -1;\n    this.regions.push(region);\n    return region;\n  }\n  addTextureHash(textures, stripExtension) {\n    for (const key in textures) {\n      if (textures.hasOwnProperty(key)) {\n        this.addTexture(stripExtension && key.indexOf(\".\") !== -1 ? key.substr(0, key.lastIndexOf(\".\")) : key, textures[key]);\n      }\n    }\n  }\n  addSpineAtlas(atlasText, textureLoader, callback) {\n    return this.load(atlasText, textureLoader, callback);\n  }\n  load(atlasText, textureLoader, callback) {\n    if (textureLoader == null) {\n      throw new Error(\"textureLoader cannot be null.\");\n    }\n    const reader = new TextureAtlasReader(atlasText);\n    const entry = new Array(4);\n    let page = null;\n    const pageFields = {};\n    let region = null;\n    pageFields.size = () => {\n      page.width = parseInt(entry[1]);\n      page.height = parseInt(entry[2]);\n    };\n    pageFields.format = () => {\n    };\n    pageFields.filter = () => {\n      page.minFilter = filterFromString(entry[1]);\n      page.magFilter = filterFromString(entry[2]);\n    };\n    pageFields.repeat = () => {\n      if (entry[1].indexOf(\"x\") != -1)\n        page.uWrap = TextureWrap.Repeat;\n      if (entry[1].indexOf(\"y\") != -1)\n        page.vWrap = TextureWrap.Repeat;\n    };\n    pageFields.pma = () => {\n      page.pma = entry[1] == \"true\";\n    };\n    const regionFields = {};\n    regionFields.xy = () => {\n      region.x = parseInt(entry[1]);\n      region.y = parseInt(entry[2]);\n    };\n    regionFields.size = () => {\n      region.width = parseInt(entry[1]);\n      region.height = parseInt(entry[2]);\n    };\n    regionFields.bounds = () => {\n      region.x = parseInt(entry[1]);\n      region.y = parseInt(entry[2]);\n      region.width = parseInt(entry[3]);\n      region.height = parseInt(entry[4]);\n    };\n    regionFields.offset = () => {\n      region.offsetX = parseInt(entry[1]);\n      region.offsetY = parseInt(entry[2]);\n    };\n    regionFields.orig = () => {\n      region.originalWidth = parseInt(entry[1]);\n      region.originalHeight = parseInt(entry[2]);\n    };\n    regionFields.offsets = () => {\n      region.offsetX = parseInt(entry[1]);\n      region.offsetY = parseInt(entry[2]);\n      region.originalWidth = parseInt(entry[3]);\n      region.originalHeight = parseInt(entry[4]);\n    };\n    regionFields.rotate = () => {\n      const rotateValue = entry[1];\n      let rotate = 0;\n      if (rotateValue.toLocaleLowerCase() == \"true\") {\n        rotate = 6;\n      } else if (rotateValue.toLocaleLowerCase() == \"false\") {\n        rotate = 0;\n      } else {\n        rotate = (720 - parseFloat(rotateValue)) % 360 / 45;\n      }\n      region.rotate = rotate;\n    };\n    regionFields.index = () => {\n      region.index = parseInt(entry[1]);\n    };\n    let line = reader.readLine();\n    while (line != null && line.trim().length == 0) {\n      line = reader.readLine();\n    }\n    while (true) {\n      if (line == null || line.trim().length == 0)\n        break;\n      if (reader.readEntry(entry, line) == 0)\n        break;\n      line = reader.readLine();\n    }\n    const iterateParser = () => {\n      while (true) {\n        if (line == null) {\n          return callback && callback(this);\n        }\n        if (line.trim().length == 0) {\n          page = null;\n          line = reader.readLine();\n        } else if (page === null) {\n          page = new TextureAtlasPage();\n          page.name = line.trim();\n          while (true) {\n            if (reader.readEntry(entry, line = reader.readLine()) == 0)\n              break;\n            const field = pageFields[entry[0]];\n            if (field)\n              field();\n          }\n          this.pages.push(page);\n          textureLoader(page.name, (texture) => {\n            if (texture === null) {\n              this.pages.splice(this.pages.indexOf(page), 1);\n              return callback && callback(null);\n            }\n            page.baseTexture = texture;\n            if (page.pma) {\n              texture.alphaMode = ALPHA_MODES.PMA;\n            }\n            if (!texture.valid) {\n              texture.setSize(page.width, page.height);\n            }\n            page.setFilters();\n            if (!page.width || !page.height) {\n              page.width = texture.realWidth;\n              page.height = texture.realHeight;\n              if (!page.width || !page.height) {\n                console.log(\n                  `ERROR spine atlas page ${page.name}: meshes wont work if you dont specify size in atlas (http://www.html5gamedevs.com/topic/18888-pixi-spines-and-meshes/?p=107121)`\n                );\n              }\n            }\n            iterateParser();\n          });\n          break;\n        } else {\n          region = new RegionFields();\n          const atlasRegion = new TextureAtlasRegion();\n          atlasRegion.name = line;\n          atlasRegion.page = page;\n          let names = null;\n          let values = null;\n          while (true) {\n            const count = reader.readEntry(entry, line = reader.readLine());\n            if (count == 0)\n              break;\n            const field = regionFields[entry[0]];\n            if (field) {\n              field();\n            } else {\n              if (names == null) {\n                names = [];\n                values = [];\n              }\n              names.push(entry[0]);\n              const entryValues = [];\n              for (let i = 0; i < count; i++) {\n                entryValues.push(parseInt(entry[i + 1]));\n              }\n              values.push(entryValues);\n            }\n          }\n          if (region.originalWidth == 0 && region.originalHeight == 0) {\n            region.originalWidth = region.width;\n            region.originalHeight = region.height;\n          }\n          const resolution = page.baseTexture.resolution;\n          region.x /= resolution;\n          region.y /= resolution;\n          region.width /= resolution;\n          region.height /= resolution;\n          region.originalWidth /= resolution;\n          region.originalHeight /= resolution;\n          region.offsetX /= resolution;\n          region.offsetY /= resolution;\n          const swapWH = region.rotate % 4 !== 0;\n          const frame = new Rectangle(region.x, region.y, swapWH ? region.height : region.width, swapWH ? region.width : region.height);\n          const orig = new Rectangle(0, 0, region.originalWidth, region.originalHeight);\n          const trim = new Rectangle(region.offsetX, region.originalHeight - region.height - region.offsetY, region.width, region.height);\n          atlasRegion.texture = new Texture(atlasRegion.page.baseTexture, frame, orig, trim, region.rotate);\n          atlasRegion.index = region.index;\n          atlasRegion.texture.updateUvs();\n          this.regions.push(atlasRegion);\n        }\n      }\n    };\n    iterateParser();\n  }\n  findRegion(name) {\n    for (let i = 0; i < this.regions.length; i++) {\n      if (this.regions[i].name == name) {\n        return this.regions[i];\n      }\n    }\n    return null;\n  }\n  dispose() {\n    for (let i = 0; i < this.pages.length; i++) {\n      this.pages[i].baseTexture.dispose();\n    }\n  }\n}\nclass TextureAtlasReader {\n  constructor(text) {\n    this.index = 0;\n    this.lines = text.split(/\\r\\n|\\r|\\n/);\n  }\n  readLine() {\n    if (this.index >= this.lines.length) {\n      return null;\n    }\n    return this.lines[this.index++];\n  }\n  readEntry(entry, line) {\n    if (line == null)\n      return 0;\n    line = line.trim();\n    if (line.length == 0)\n      return 0;\n    const colon = line.indexOf(\":\");\n    if (colon == -1)\n      return 0;\n    entry[0] = line.substr(0, colon).trim();\n    for (let i = 1, lastMatch = colon + 1; ; i++) {\n      const comma = line.indexOf(\",\", lastMatch);\n      if (comma == -1) {\n        entry[i] = line.substr(lastMatch).trim();\n        return i;\n      }\n      entry[i] = line.substr(lastMatch, comma - lastMatch).trim();\n      lastMatch = comma + 1;\n      if (i == 4)\n        return 4;\n    }\n  }\n}\nclass TextureAtlasPage {\n  constructor() {\n    this.minFilter = TextureFilter.Nearest;\n    this.magFilter = TextureFilter.Nearest;\n    this.uWrap = TextureWrap.ClampToEdge;\n    this.vWrap = TextureWrap.ClampToEdge;\n  }\n  setFilters() {\n    const tex = this.baseTexture;\n    const filter = this.minFilter;\n    if (filter == TextureFilter.Linear) {\n      tex.scaleMode = SCALE_MODES.LINEAR;\n    } else if (this.minFilter == TextureFilter.Nearest) {\n      tex.scaleMode = SCALE_MODES.NEAREST;\n    } else {\n      tex.mipmap = MIPMAP_MODES.POW2;\n      if (filter == TextureFilter.MipMapNearestNearest) {\n        tex.scaleMode = SCALE_MODES.NEAREST;\n      } else {\n        tex.scaleMode = SCALE_MODES.LINEAR;\n      }\n    }\n  }\n}\nclass TextureAtlasRegion extends TextureRegion {\n}\n\nexport { TextureAtlas, TextureAtlasPage, TextureAtlasRegion };\n//# sourceMappingURL=TextureAtlas.mjs.map\n","class IntSet {\n  constructor() {\n    this.array = new Array();\n  }\n  add(value) {\n    const contains = this.contains(value);\n    this.array[value | 0] = value | 0;\n    return !contains;\n  }\n  contains(value) {\n    return this.array[value | 0] != void 0;\n  }\n  remove(value) {\n    this.array[value | 0] = void 0;\n  }\n  clear() {\n    this.array.length = 0;\n  }\n}\nclass StringSet {\n  constructor() {\n    this.entries = {};\n    this.size = 0;\n  }\n  add(value) {\n    const contains = this.entries[value];\n    this.entries[value] = true;\n    if (!contains) {\n      this.size++;\n      return true;\n    }\n    return false;\n  }\n  addAll(values) {\n    const oldSize = this.size;\n    for (let i = 0, n = values.length; i < n; i++) {\n      this.add(values[i]);\n    }\n    return oldSize != this.size;\n  }\n  contains(value) {\n    return this.entries[value];\n  }\n  clear() {\n    this.entries = {};\n    this.size = 0;\n  }\n}\nconst _Color = class {\n  constructor(r = 0, g = 0, b = 0, a = 0) {\n    this.r = r;\n    this.g = g;\n    this.b = b;\n    this.a = a;\n  }\n  set(r, g, b, a) {\n    this.r = r;\n    this.g = g;\n    this.b = b;\n    this.a = a;\n    return this.clamp();\n  }\n  setFromColor(c) {\n    this.r = c.r;\n    this.g = c.g;\n    this.b = c.b;\n    this.a = c.a;\n    return this;\n  }\n  setFromString(hex) {\n    hex = hex.charAt(0) == \"#\" ? hex.substr(1) : hex;\n    this.r = parseInt(hex.substr(0, 2), 16) / 255;\n    this.g = parseInt(hex.substr(2, 2), 16) / 255;\n    this.b = parseInt(hex.substr(4, 2), 16) / 255;\n    this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255;\n    return this;\n  }\n  add(r, g, b, a) {\n    this.r += r;\n    this.g += g;\n    this.b += b;\n    this.a += a;\n    return this.clamp();\n  }\n  clamp() {\n    if (this.r < 0)\n      this.r = 0;\n    else if (this.r > 1)\n      this.r = 1;\n    if (this.g < 0)\n      this.g = 0;\n    else if (this.g > 1)\n      this.g = 1;\n    if (this.b < 0)\n      this.b = 0;\n    else if (this.b > 1)\n      this.b = 1;\n    if (this.a < 0)\n      this.a = 0;\n    else if (this.a > 1)\n      this.a = 1;\n    return this;\n  }\n  static rgba8888ToColor(color, value) {\n    color.r = ((value & 4278190080) >>> 24) / 255;\n    color.g = ((value & 16711680) >>> 16) / 255;\n    color.b = ((value & 65280) >>> 8) / 255;\n    color.a = (value & 255) / 255;\n  }\n  static rgb888ToColor(color, value) {\n    color.r = ((value & 16711680) >>> 16) / 255;\n    color.g = ((value & 65280) >>> 8) / 255;\n    color.b = (value & 255) / 255;\n  }\n  static fromString(hex) {\n    return new _Color().setFromString(hex);\n  }\n};\nlet Color = _Color;\nColor.WHITE = new _Color(1, 1, 1, 1);\nColor.RED = new _Color(1, 0, 0, 1);\nColor.GREEN = new _Color(0, 1, 0, 1);\nColor.BLUE = new _Color(0, 0, 1, 1);\nColor.MAGENTA = new _Color(1, 0, 1, 1);\nconst _MathUtils = class {\n  static clamp(value, min, max) {\n    if (value < min)\n      return min;\n    if (value > max)\n      return max;\n    return value;\n  }\n  static cosDeg(degrees) {\n    return Math.cos(degrees * _MathUtils.degRad);\n  }\n  static sinDeg(degrees) {\n    return Math.sin(degrees * _MathUtils.degRad);\n  }\n  static signum(value) {\n    return Math.sign(value);\n  }\n  static toInt(x) {\n    return x > 0 ? Math.floor(x) : Math.ceil(x);\n  }\n  static cbrt(x) {\n    const y = Math.pow(Math.abs(x), 1 / 3);\n    return x < 0 ? -y : y;\n  }\n  static randomTriangular(min, max) {\n    return _MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n  }\n  static randomTriangularWith(min, max, mode) {\n    const u = Math.random();\n    const d = max - min;\n    if (u <= (mode - min) / d)\n      return min + Math.sqrt(u * d * (mode - min));\n    return max - Math.sqrt((1 - u) * d * (max - mode));\n  }\n  static isPowerOfTwo(value) {\n    return value && (value & value - 1) === 0;\n  }\n};\nlet MathUtils = _MathUtils;\nMathUtils.PI = 3.1415927;\nMathUtils.PI2 = _MathUtils.PI * 2;\nMathUtils.radiansToDegrees = 180 / _MathUtils.PI;\nMathUtils.radDeg = _MathUtils.radiansToDegrees;\nMathUtils.degreesToRadians = _MathUtils.PI / 180;\nMathUtils.degRad = _MathUtils.degreesToRadians;\nclass Interpolation {\n  apply(start, end, a) {\n    return start + (end - start) * this.applyInternal(a);\n  }\n}\nclass Pow extends Interpolation {\n  constructor(power) {\n    super();\n    this.power = 2;\n    this.power = power;\n  }\n  applyInternal(a) {\n    if (a <= 0.5)\n      return Math.pow(a * 2, this.power) / 2;\n    return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n  }\n}\nclass PowOut extends Pow {\n  applyInternal(a) {\n    return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n  }\n}\nconst _Utils = class {\n  static arrayCopy(source, sourceStart, dest, destStart, numElements) {\n    for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n      dest[j] = source[i];\n    }\n  }\n  static arrayFill(array, fromIndex, toIndex, value) {\n    for (let i = fromIndex; i < toIndex; i++) {\n      array[i] = value;\n    }\n  }\n  static setArraySize(array, size, value = 0) {\n    const oldSize = array.length;\n    if (oldSize == size)\n      return array;\n    array.length = size;\n    if (oldSize < size) {\n      for (let i = oldSize; i < size; i++)\n        array[i] = value;\n    }\n    return array;\n  }\n  static ensureArrayCapacity(array, size, value = 0) {\n    if (array.length >= size)\n      return array;\n    return _Utils.setArraySize(array, size, value);\n  }\n  static newArray(size, defaultValue) {\n    const array = new Array(size);\n    for (let i = 0; i < size; i++)\n      array[i] = defaultValue;\n    return array;\n  }\n  static newFloatArray(size) {\n    if (_Utils.SUPPORTS_TYPED_ARRAYS) {\n      return new Float32Array(size);\n    }\n    const array = new Array(size);\n    for (let i = 0; i < array.length; i++)\n      array[i] = 0;\n    return array;\n  }\n  static newShortArray(size) {\n    if (_Utils.SUPPORTS_TYPED_ARRAYS) {\n      return new Int16Array(size);\n    }\n    const array = new Array(size);\n    for (let i = 0; i < array.length; i++)\n      array[i] = 0;\n    return array;\n  }\n  static toFloatArray(array) {\n    return _Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n  }\n  static toSinglePrecision(value) {\n    return _Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n  }\n  // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n  static webkit602BugfixHelper(alpha, blend) {\n  }\n  static contains(array, element, identity = true) {\n    for (let i = 0; i < array.length; i++) {\n      if (array[i] == element)\n        return true;\n    }\n    return false;\n  }\n  static enumValue(type, name) {\n    return type[name[0].toUpperCase() + name.slice(1)];\n  }\n};\nlet Utils = _Utils;\nUtils.SUPPORTS_TYPED_ARRAYS = typeof Float32Array !== \"undefined\";\nclass DebugUtils {\n  static logBones(skeleton) {\n    for (let i = 0; i < skeleton.bones.length; i++) {\n      const bone = skeleton.bones[i];\n      const mat = bone.matrix;\n      console.log(`${bone.data.name}, ${mat.a}, ${mat.b}, ${mat.c}, ${mat.d}, ${mat.tx}, ${mat.ty}`);\n    }\n  }\n}\nclass Pool {\n  constructor(instantiator) {\n    this.items = new Array();\n    this.instantiator = instantiator;\n  }\n  obtain() {\n    return this.items.length > 0 ? this.items.pop() : this.instantiator();\n  }\n  free(item) {\n    if (item.reset)\n      item.reset();\n    this.items.push(item);\n  }\n  freeAll(items) {\n    for (let i = 0; i < items.length; i++) {\n      this.free(items[i]);\n    }\n  }\n  clear() {\n    this.items.length = 0;\n  }\n}\nclass Vector2 {\n  constructor(x = 0, y = 0) {\n    this.x = x;\n    this.y = y;\n  }\n  set(x, y) {\n    this.x = x;\n    this.y = y;\n    return this;\n  }\n  length() {\n    const x = this.x;\n    const y = this.y;\n    return Math.sqrt(x * x + y * y);\n  }\n  normalize() {\n    const len = this.length();\n    if (len != 0) {\n      this.x /= len;\n      this.y /= len;\n    }\n    return this;\n  }\n}\nclass TimeKeeper {\n  constructor() {\n    this.maxDelta = 0.064;\n    this.framesPerSecond = 0;\n    this.delta = 0;\n    this.totalTime = 0;\n    this.lastTime = Date.now() / 1e3;\n    this.frameCount = 0;\n    this.frameTime = 0;\n  }\n  update() {\n    const now = Date.now() / 1e3;\n    this.delta = now - this.lastTime;\n    this.frameTime += this.delta;\n    this.totalTime += this.delta;\n    if (this.delta > this.maxDelta)\n      this.delta = this.maxDelta;\n    this.lastTime = now;\n    this.frameCount++;\n    if (this.frameTime > 1) {\n      this.framesPerSecond = this.frameCount / this.frameTime;\n      this.frameTime = 0;\n      this.frameCount = 0;\n    }\n  }\n}\nclass WindowedMean {\n  constructor(windowSize = 32) {\n    this.addedValues = 0;\n    this.lastValue = 0;\n    this.mean = 0;\n    this.dirty = true;\n    this.values = new Array(windowSize);\n  }\n  hasEnoughData() {\n    return this.addedValues >= this.values.length;\n  }\n  addValue(value) {\n    if (this.addedValues < this.values.length)\n      this.addedValues++;\n    this.values[this.lastValue++] = value;\n    if (this.lastValue > this.values.length - 1)\n      this.lastValue = 0;\n    this.dirty = true;\n  }\n  getMean() {\n    if (this.hasEnoughData()) {\n      if (this.dirty) {\n        let mean = 0;\n        for (let i = 0; i < this.values.length; i++) {\n          mean += this.values[i];\n        }\n        this.mean = mean / this.values.length;\n        this.dirty = false;\n      }\n      return this.mean;\n    }\n    return 0;\n  }\n}\n\nexport { Color, DebugUtils, IntSet, Interpolation, MathUtils, Pool, Pow, PowOut, StringSet, TimeKeeper, Utils, Vector2, WindowedMean };\n//# sourceMappingURL=Utils.mjs.map\n","import { AttachmentType } from './AttachmentType.mjs';\nimport { Pool, Utils } from './Utils.mjs';\n\nclass SkeletonBoundsBase {\n  constructor() {\n    /** The left edge of the axis aligned bounding box. */\n    this.minX = 0;\n    /** The bottom edge of the axis aligned bounding box. */\n    this.minY = 0;\n    /** The right edge of the axis aligned bounding box. */\n    this.maxX = 0;\n    /** The top edge of the axis aligned bounding box. */\n    this.maxY = 0;\n    /** The visible bounding boxes. */\n    this.boundingBoxes = new Array();\n    /** The world vertices for the bounding box polygons. */\n    this.polygons = new Array();\n    this.polygonPool = new Pool(() => Utils.newFloatArray(16));\n  }\n  /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding\n   * box's polygon.\n   * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the\n   *           SkeletonBounds AABB methods will always return true. */\n  update(skeleton, updateAabb) {\n    if (!skeleton)\n      throw new Error(\"skeleton cannot be null.\");\n    const boundingBoxes = this.boundingBoxes;\n    const polygons = this.polygons;\n    const polygonPool = this.polygonPool;\n    const slots = skeleton.slots;\n    const slotCount = slots.length;\n    boundingBoxes.length = 0;\n    polygonPool.freeAll(polygons);\n    polygons.length = 0;\n    for (let i = 0; i < slotCount; i++) {\n      const slot = slots[i];\n      if (!slot.bone.active)\n        continue;\n      const attachment = slot.getAttachment();\n      if (attachment != null && attachment.type === AttachmentType.BoundingBox) {\n        const boundingBox = attachment;\n        boundingBoxes.push(boundingBox);\n        let polygon = polygonPool.obtain();\n        if (polygon.length != boundingBox.worldVerticesLength) {\n          polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);\n        }\n        polygons.push(polygon);\n        boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n      }\n    }\n    if (updateAabb) {\n      this.aabbCompute();\n    } else {\n      this.minX = Number.POSITIVE_INFINITY;\n      this.minY = Number.POSITIVE_INFINITY;\n      this.maxX = Number.NEGATIVE_INFINITY;\n      this.maxY = Number.NEGATIVE_INFINITY;\n    }\n  }\n  aabbCompute() {\n    let minX = Number.POSITIVE_INFINITY;\n    let minY = Number.POSITIVE_INFINITY;\n    let maxX = Number.NEGATIVE_INFINITY;\n    let maxY = Number.NEGATIVE_INFINITY;\n    const polygons = this.polygons;\n    for (let i = 0, n = polygons.length; i < n; i++) {\n      const polygon = polygons[i];\n      const vertices = polygon;\n      for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n        const x = vertices[ii];\n        const y = vertices[ii + 1];\n        minX = Math.min(minX, x);\n        minY = Math.min(minY, y);\n        maxX = Math.max(maxX, x);\n        maxY = Math.max(maxY, y);\n      }\n    }\n    this.minX = minX;\n    this.minY = minY;\n    this.maxX = maxX;\n    this.maxY = maxY;\n  }\n  /** Returns true if the axis aligned bounding box contains the point. */\n  aabbContainsPoint(x, y) {\n    return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n  }\n  /** Returns true if the axis aligned bounding box intersects the line segment. */\n  aabbIntersectsSegment(x1, y1, x2, y2) {\n    const minX = this.minX;\n    const minY = this.minY;\n    const maxX = this.maxX;\n    const maxY = this.maxY;\n    if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY) {\n      return false;\n    }\n    const m = (y2 - y1) / (x2 - x1);\n    let y = m * (minX - x1) + y1;\n    if (y > minY && y < maxY)\n      return true;\n    y = m * (maxX - x1) + y1;\n    if (y > minY && y < maxY)\n      return true;\n    let x = (minY - y1) / m + x1;\n    if (x > minX && x < maxX)\n      return true;\n    x = (maxY - y1) / m + x1;\n    if (x > minX && x < maxX)\n      return true;\n    return false;\n  }\n  /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */\n  aabbIntersectsSkeleton(bounds) {\n    return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n  }\n  /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more\n   * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true.\n   * Cannot be done here because BoundingBoxAttachment is not a thing yet*/\n  containsPoint(x, y) {\n    const polygons = this.polygons;\n    for (let i = 0, n = polygons.length; i < n; i++) {\n      if (this.containsPointPolygon(polygons[i], x, y))\n        return this.boundingBoxes[i];\n    }\n    return null;\n  }\n  /** Returns true if the polygon contains the point. */\n  containsPointPolygon(polygon, x, y) {\n    const vertices = polygon;\n    const nn = polygon.length;\n    let prevIndex = nn - 2;\n    let inside = false;\n    for (let ii = 0; ii < nn; ii += 2) {\n      const vertexY = vertices[ii + 1];\n      const prevY = vertices[prevIndex + 1];\n      if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) {\n        const vertexX = vertices[ii];\n        if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)\n          inside = !inside;\n      }\n      prevIndex = ii;\n    }\n    return inside;\n  }\n  /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it\n   * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns\n   * true. */\n  intersectsSegment(x1, y1, x2, y2) {\n    const polygons = this.polygons;\n    for (let i = 0, n = polygons.length; i < n; i++) {\n      if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))\n        return this.boundingBoxes[i];\n    }\n    return null;\n  }\n  /** Returns true if the polygon contains any part of the line segment. */\n  intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {\n    const vertices = polygon;\n    const nn = polygon.length;\n    const width12 = x1 - x2;\n    const height12 = y1 - y2;\n    const det1 = x1 * y2 - y1 * x2;\n    let x3 = vertices[nn - 2];\n    let y3 = vertices[nn - 1];\n    for (let ii = 0; ii < nn; ii += 2) {\n      const x4 = vertices[ii];\n      const y4 = vertices[ii + 1];\n      const det2 = x3 * y4 - y3 * x4;\n      const width34 = x3 - x4;\n      const height34 = y3 - y4;\n      const det3 = width12 * height34 - height12 * width34;\n      const x = (det1 * width34 - width12 * det2) / det3;\n      if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) {\n        const y = (det1 * height34 - height12 * det2) / det3;\n        if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1))\n          return true;\n      }\n      x3 = x4;\n      y3 = y4;\n    }\n    return false;\n  }\n  /** Returns the polygon for the specified bounding box, or null. */\n  getPolygon(boundingBox) {\n    if (!boundingBox)\n      throw new Error(\"boundingBox cannot be null.\");\n    const index = this.boundingBoxes.indexOf(boundingBox);\n    return index == -1 ? null : this.polygons[index];\n  }\n  /** The width of the axis aligned bounding box. */\n  getWidth() {\n    return this.maxX - this.minX;\n  }\n  /** The height of the axis aligned bounding box. */\n  getHeight() {\n    return this.maxY - this.minY;\n  }\n}\n\nexport { SkeletonBoundsBase };\n//# sourceMappingURL=SkeletonBoundsBase.mjs.map\n","const settings = {\n  yDown: true,\n  /**\n   * pixi-spine gives option to not fail at certain parsing errors\n   * spine-ts fails here\n   */\n  FAIL_ON_NON_EXISTING_SKIN: false,\n  /**\n   * past Spine.globalAutoUpdate\n   */\n  GLOBAL_AUTO_UPDATE: true,\n  /**\n   * past Spine.globalDelayLimit\n   */\n  GLOBAL_DELAY_LIMIT: 0,\n  /**\n   * shows error in console if atlas page loading somehow failed\n   */\n  REPORT_TEXTURE_LOADER_ERROR: true\n};\n\nexport { settings };\n//# sourceMappingURL=settings.mjs.map\n","import { AttachmentType } from './core/AttachmentType.mjs';\nimport { TextureRegion } from './core/TextureRegion.mjs';\nimport { MathUtils } from './core/Utils.mjs';\nimport { utils, Transform, DRAW_MODES, Polygon } from '@pixi/core';\nimport { Container } from '@pixi/display';\nimport { Sprite } from '@pixi/sprite';\nimport { SimpleMesh } from '@pixi/mesh-extras';\nimport { Graphics } from '@pixi/graphics';\nimport { settings } from './settings.mjs';\n\nconst tempRgb = [0, 0, 0];\nclass SpineSprite extends Sprite {\n  constructor() {\n    super(...arguments);\n    this.region = null;\n    this.attachment = null;\n  }\n}\nclass SpineMesh extends SimpleMesh {\n  constructor(texture, vertices, uvs, indices, drawMode) {\n    super(texture, vertices, uvs, indices, drawMode);\n    this.region = null;\n    this.attachment = null;\n  }\n}\nconst _SpineBase = class extends Container {\n  constructor(spineData) {\n    super();\n    if (!spineData) {\n      throw new Error(\"The spineData param is required.\");\n    }\n    if (typeof spineData === \"string\") {\n      throw new Error('spineData param cant be string. Please use spine.Spine.fromAtlas(\"YOUR_RESOURCE_NAME\") from now on.');\n    }\n    this.spineData = spineData;\n    this.createSkeleton(spineData);\n    this.slotContainers = [];\n    this.tempClipContainers = [];\n    for (let i = 0, n = this.skeleton.slots.length; i < n; i++) {\n      const slot = this.skeleton.slots[i];\n      const attachment = slot.getAttachment();\n      const slotContainer = this.newContainer();\n      this.slotContainers.push(slotContainer);\n      this.addChild(slotContainer);\n      this.tempClipContainers.push(null);\n      if (!attachment) {\n        continue;\n      }\n      if (attachment.type === AttachmentType.Region) {\n        const spriteName = attachment.name;\n        const sprite = this.createSprite(slot, attachment, spriteName);\n        slot.currentSprite = sprite;\n        slot.currentSpriteName = spriteName;\n        slotContainer.addChild(sprite);\n      } else if (attachment.type === AttachmentType.Mesh) {\n        const mesh = this.createMesh(slot, attachment);\n        slot.currentMesh = mesh;\n        slot.currentMeshId = attachment.id;\n        slot.currentMeshName = attachment.name;\n        slotContainer.addChild(mesh);\n      } else if (attachment.type === AttachmentType.Clipping) {\n        this.createGraphics(slot, attachment);\n        slotContainer.addChild(slot.clippingContainer);\n        slotContainer.addChild(slot.currentGraphics);\n      }\n    }\n    this.tintRgb = new Float32Array([1, 1, 1]);\n    this.autoUpdate = true;\n    this.visible = true;\n  }\n  get debug() {\n    return this._debug;\n  }\n  set debug(value) {\n    if (value == this._debug) {\n      return;\n    }\n    this._debug?.unregisterSpine(this);\n    value?.registerSpine(this);\n    this._debug = value;\n  }\n  /**\n   * If this flag is set to true, the spine animation will be automatically updated every\n   * time the object id drawn. The down side of this approach is that the delta time is\n   * automatically calculated and you could miss out on cool effects like slow motion,\n   * pause, skip ahead and the sorts. Most of these effects can be achieved even with\n   * autoUpdate enabled but are harder to achieve.\n   *\n   * @member {boolean}\n   * @memberof spine.Spine#\n   * @default true\n   */\n  get autoUpdate() {\n    return this._autoUpdate;\n  }\n  set autoUpdate(value) {\n    if (value !== this._autoUpdate) {\n      this._autoUpdate = value;\n      this.updateTransform = value ? _SpineBase.prototype.autoUpdateTransform : Container.prototype.updateTransform;\n    }\n  }\n  /**\n   * The tint applied to the spine object. This is a hex value. A value of 0xFFFFFF will remove any tint effect.\n   *\n   * @member {number}\n   * @memberof spine.Spine#\n   * @default 0xFFFFFF\n   */\n  get tint() {\n    return utils.rgb2hex(this.tintRgb);\n  }\n  set tint(value) {\n    this.tintRgb = utils.hex2rgb(value, this.tintRgb);\n  }\n  /**\n   * Limit value for the update dt with Spine.globalDelayLimit\n   * that can be overridden with localDelayLimit\n   * @return {number} - Maximum processed dt value for the update\n   */\n  get delayLimit() {\n    const limit = typeof this.localDelayLimit !== \"undefined\" ? this.localDelayLimit : settings.GLOBAL_DELAY_LIMIT;\n    return limit || Number.MAX_VALUE;\n  }\n  /**\n   * Update the spine skeleton and its animations by delta time (dt)\n   *\n   * @param dt {number} Delta time. Time by which the animation should be updated\n   */\n  update(dt) {\n    const delayLimit = this.delayLimit;\n    if (dt > delayLimit)\n      dt = delayLimit;\n    this.state.update(dt);\n    this.state.apply(this.skeleton);\n    if (!this.skeleton) {\n      return;\n    }\n    this.skeleton.updateWorldTransform();\n    const slots = this.skeleton.slots;\n    const globalClr = this.color;\n    let light = null;\n    let dark = null;\n    if (globalClr) {\n      light = globalClr.light;\n      dark = globalClr.dark;\n    } else {\n      light = this.tintRgb;\n    }\n    for (let i = 0, n = slots.length; i < n; i++) {\n      const slot = slots[i];\n      const attachment = slot.getAttachment();\n      const slotContainer = this.slotContainers[i];\n      if (!attachment) {\n        slotContainer.visible = false;\n        continue;\n      }\n      let spriteColor = null;\n      if (attachment.sequence) {\n        attachment.sequence.apply(slot, attachment);\n      }\n      let region = attachment.region;\n      const attColor = attachment.color;\n      switch (attachment != null && attachment.type) {\n        case AttachmentType.Region:\n          const transform = slotContainer.transform;\n          transform.setFromMatrix(slot.bone.matrix);\n          region = attachment.region;\n          if (slot.currentMesh) {\n            slot.currentMesh.visible = false;\n            slot.currentMesh = null;\n            slot.currentMeshId = void 0;\n            slot.currentMeshName = void 0;\n          }\n          if (!region) {\n            if (slot.currentSprite) {\n              slot.currentSprite.renderable = false;\n            }\n            break;\n          }\n          if (!slot.currentSpriteName || slot.currentSpriteName !== attachment.name) {\n            const spriteName = attachment.name;\n            if (slot.currentSprite) {\n              slot.currentSprite.visible = false;\n            }\n            slot.sprites = slot.sprites || {};\n            if (slot.sprites[spriteName] !== void 0) {\n              slot.sprites[spriteName].visible = true;\n            } else {\n              const sprite = this.createSprite(slot, attachment, spriteName);\n              slotContainer.addChild(sprite);\n            }\n            slot.currentSprite = slot.sprites[spriteName];\n            slot.currentSpriteName = spriteName;\n          }\n          slot.currentSprite.renderable = true;\n          if (!slot.hackRegion) {\n            this.setSpriteRegion(attachment, slot.currentSprite, region);\n          }\n          if (slot.currentSprite.color) {\n            spriteColor = slot.currentSprite.color;\n          } else {\n            tempRgb[0] = light[0] * slot.color.r * attColor.r;\n            tempRgb[1] = light[1] * slot.color.g * attColor.g;\n            tempRgb[2] = light[2] * slot.color.b * attColor.b;\n            slot.currentSprite.tint = utils.rgb2hex(tempRgb);\n          }\n          slot.currentSprite.blendMode = slot.blendMode;\n          break;\n        case AttachmentType.Mesh:\n          if (slot.currentSprite) {\n            slot.currentSprite.visible = false;\n            slot.currentSprite = null;\n            slot.currentSpriteName = void 0;\n            const transform2 = new Transform();\n            transform2._parentID = -1;\n            transform2._worldID = slotContainer.transform._worldID;\n            slotContainer.transform = transform2;\n          }\n          if (!region) {\n            if (slot.currentMesh) {\n              slot.currentMesh.renderable = false;\n            }\n            break;\n          }\n          const id = attachment.id;\n          if (slot.currentMeshId === void 0 || slot.currentMeshId !== id) {\n            const meshId = id;\n            if (slot.currentMesh) {\n              slot.currentMesh.visible = false;\n            }\n            slot.meshes = slot.meshes || {};\n            if (slot.meshes[meshId] !== void 0) {\n              slot.meshes[meshId].visible = true;\n            } else {\n              const mesh = this.createMesh(slot, attachment);\n              slotContainer.addChild(mesh);\n            }\n            slot.currentMesh = slot.meshes[meshId];\n            slot.currentMeshName = attachment.name;\n            slot.currentMeshId = meshId;\n          }\n          slot.currentMesh.renderable = true;\n          attachment.computeWorldVerticesOld(slot, slot.currentMesh.vertices);\n          if (slot.currentMesh.color) {\n            spriteColor = slot.currentMesh.color;\n          } else {\n            tempRgb[0] = light[0] * slot.color.r * attColor.r;\n            tempRgb[1] = light[1] * slot.color.g * attColor.g;\n            tempRgb[2] = light[2] * slot.color.b * attColor.b;\n            slot.currentMesh.tint = utils.rgb2hex(tempRgb);\n          }\n          slot.currentMesh.blendMode = slot.blendMode;\n          if (!slot.hackRegion) {\n            this.setMeshRegion(attachment, slot.currentMesh, region);\n          }\n          break;\n        case AttachmentType.Clipping:\n          if (!slot.currentGraphics) {\n            this.createGraphics(slot, attachment);\n            slotContainer.addChild(slot.clippingContainer);\n            slotContainer.addChild(slot.currentGraphics);\n          }\n          this.updateGraphics(slot, attachment);\n          slotContainer.alpha = 1;\n          slotContainer.visible = true;\n          continue;\n        default:\n          slotContainer.visible = false;\n          continue;\n      }\n      slotContainer.visible = true;\n      if (spriteColor) {\n        let r0 = slot.color.r * attColor.r;\n        let g0 = slot.color.g * attColor.g;\n        let b0 = slot.color.b * attColor.b;\n        spriteColor.setLight(light[0] * r0 + dark[0] * (1 - r0), light[1] * g0 + dark[1] * (1 - g0), light[2] * b0 + dark[2] * (1 - b0));\n        if (slot.darkColor) {\n          r0 = slot.darkColor.r;\n          g0 = slot.darkColor.g;\n          b0 = slot.darkColor.b;\n        } else {\n          r0 = 0;\n          g0 = 0;\n          b0 = 0;\n        }\n        spriteColor.setDark(light[0] * r0 + dark[0] * (1 - r0), light[1] * g0 + dark[1] * (1 - g0), light[2] * b0 + dark[2] * (1 - b0));\n      }\n      slotContainer.alpha = slot.color.a;\n    }\n    const drawOrder = this.skeleton.drawOrder;\n    let clippingAttachment = null;\n    let clippingContainer = null;\n    for (let i = 0, n = drawOrder.length; i < n; i++) {\n      const slot = slots[drawOrder[i].data.index];\n      const slotContainer = this.slotContainers[drawOrder[i].data.index];\n      if (!clippingContainer) {\n        if (slotContainer.parent !== null && slotContainer.parent !== this) {\n          slotContainer.parent.removeChild(slotContainer);\n          slotContainer.parent = this;\n        }\n      }\n      if (slot.currentGraphics && slot.getAttachment()) {\n        clippingContainer = slot.clippingContainer;\n        clippingAttachment = slot.getAttachment();\n        clippingContainer.children.length = 0;\n        this.children[i] = slotContainer;\n        if (clippingAttachment.endSlot === slot.data) {\n          clippingAttachment.endSlot = null;\n        }\n      } else if (clippingContainer) {\n        let c = this.tempClipContainers[i];\n        if (!c) {\n          c = this.tempClipContainers[i] = this.newContainer();\n          c.visible = false;\n        }\n        this.children[i] = c;\n        slotContainer.parent = null;\n        clippingContainer.addChild(slotContainer);\n        if (clippingAttachment.endSlot == slot.data) {\n          clippingContainer.renderable = true;\n          clippingContainer = null;\n          clippingAttachment = null;\n        }\n      } else {\n        this.children[i] = slotContainer;\n      }\n    }\n    this._debug?.renderDebug(this);\n  }\n  setSpriteRegion(attachment, sprite, region) {\n    if (sprite.attachment === attachment && sprite.region === region) {\n      return;\n    }\n    sprite.region = region;\n    sprite.attachment = attachment;\n    sprite.texture = region.texture;\n    sprite.rotation = attachment.rotation * MathUtils.degRad;\n    sprite.position.x = attachment.x;\n    sprite.position.y = attachment.y;\n    sprite.alpha = attachment.color.a;\n    if (!region.size) {\n      sprite.scale.x = attachment.scaleX * attachment.width / region.originalWidth;\n      sprite.scale.y = -attachment.scaleY * attachment.height / region.originalHeight;\n    } else {\n      sprite.scale.x = region.size.width / region.originalWidth;\n      sprite.scale.y = -region.size.height / region.originalHeight;\n    }\n  }\n  setMeshRegion(attachment, mesh, region) {\n    if (mesh.attachment === attachment && mesh.region === region) {\n      return;\n    }\n    mesh.region = region;\n    mesh.attachment = attachment;\n    mesh.texture = region.texture;\n    region.texture.updateUvs();\n    mesh.uvBuffer.update(attachment.regionUVs);\n  }\n  /**\n   * When autoupdate is set to yes this function is used as pixi's updateTransform function\n   *\n   * @private\n   */\n  autoUpdateTransform() {\n    if (settings.GLOBAL_AUTO_UPDATE) {\n      this.lastTime = this.lastTime || Date.now();\n      const timeDelta = (Date.now() - this.lastTime) * 1e-3;\n      this.lastTime = Date.now();\n      this.update(timeDelta);\n    } else {\n      this.lastTime = 0;\n    }\n    Container.prototype.updateTransform.call(this);\n  }\n  /**\n   * Create a new sprite to be used with core.RegionAttachment\n   *\n   * @param slot {spine.Slot} The slot to which the attachment is parented\n   * @param attachment {spine.RegionAttachment} The attachment that the sprite will represent\n   * @private\n   */\n  createSprite(slot, attachment, defName) {\n    let region = attachment.region;\n    if (slot.hackAttachment === attachment) {\n      region = slot.hackRegion;\n    }\n    const texture = region ? region.texture : null;\n    const sprite = this.newSprite(texture);\n    sprite.anchor.set(0.5);\n    if (region) {\n      this.setSpriteRegion(attachment, sprite, attachment.region);\n    }\n    slot.sprites = slot.sprites || {};\n    slot.sprites[defName] = sprite;\n    return sprite;\n  }\n  /**\n   * Creates a Strip from the spine data\n   * @param slot {spine.Slot} The slot to which the attachment is parented\n   * @param attachment {spine.RegionAttachment} The attachment that the sprite will represent\n   * @private\n   */\n  createMesh(slot, attachment) {\n    if (!attachment.region && attachment.sequence) {\n      attachment.sequence.apply(slot, attachment);\n    }\n    let region = attachment.region;\n    if (slot.hackAttachment === attachment) {\n      region = slot.hackRegion;\n      slot.hackAttachment = null;\n      slot.hackRegion = null;\n    }\n    const strip = this.newMesh(\n      region ? region.texture : null,\n      new Float32Array(attachment.regionUVs.length),\n      attachment.regionUVs,\n      new Uint16Array(attachment.triangles),\n      DRAW_MODES.TRIANGLES\n    );\n    if (typeof strip._canvasPadding !== \"undefined\") {\n      strip._canvasPadding = 1.5;\n    }\n    strip.alpha = attachment.color.a;\n    strip.region = attachment.region;\n    if (region) {\n      this.setMeshRegion(attachment, strip, region);\n    }\n    slot.meshes = slot.meshes || {};\n    slot.meshes[attachment.id] = strip;\n    return strip;\n  }\n  // @ts-ignore\n  createGraphics(slot, clip) {\n    const graphics = this.newGraphics();\n    const poly = new Polygon([]);\n    graphics.clear();\n    graphics.beginFill(16777215, 1);\n    graphics.drawPolygon(poly);\n    graphics.renderable = false;\n    slot.currentGraphics = graphics;\n    slot.clippingContainer = this.newContainer();\n    slot.clippingContainer.mask = slot.currentGraphics;\n    return graphics;\n  }\n  updateGraphics(slot, clip) {\n    const geom = slot.currentGraphics.geometry;\n    const vertices = geom.graphicsData[0].shape.points;\n    const n = clip.worldVerticesLength;\n    vertices.length = n;\n    clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n    geom.invalidate();\n  }\n  /**\n   * Changes texture in attachment in specific slot.\n   *\n   * PIXI runtime feature, it was made to satisfy our users.\n   *\n   * @param slotIndex {number}\n   * @param [texture = null] {PIXI.Texture} If null, take default (original) texture\n   * @param [size = null] {PIXI.Point} sometimes we need new size for region attachment, you can pass 'texture.orig' there\n   * @returns {boolean} Success flag\n   */\n  hackTextureBySlotIndex(slotIndex, texture = null, size = null) {\n    const slot = this.skeleton.slots[slotIndex];\n    if (!slot) {\n      return false;\n    }\n    const attachment = slot.getAttachment();\n    let region = attachment.region;\n    if (texture) {\n      region = new TextureRegion();\n      region.texture = texture;\n      region.size = size;\n      slot.hackRegion = region;\n      slot.hackAttachment = attachment;\n    } else {\n      slot.hackRegion = null;\n      slot.hackAttachment = null;\n    }\n    if (slot.currentSprite) {\n      this.setSpriteRegion(attachment, slot.currentSprite, region);\n    } else if (slot.currentMesh) {\n      this.setMeshRegion(attachment, slot.currentMesh, region);\n    }\n    return true;\n  }\n  /**\n   * Changes texture in attachment in specific slot.\n   *\n   * PIXI runtime feature, it was made to satisfy our users.\n   *\n   * @param slotName {string}\n   * @param [texture = null] {PIXI.Texture} If null, take default (original) texture\n   * @param [size = null] {PIXI.Point} sometimes we need new size for region attachment, you can pass 'texture.orig' there\n   * @returns {boolean} Success flag\n   */\n  hackTextureBySlotName(slotName, texture = null, size = null) {\n    const index = this.skeleton.findSlotIndex(slotName);\n    if (index == -1) {\n      return false;\n    }\n    return this.hackTextureBySlotIndex(index, texture, size);\n  }\n  /**\n   * Changes texture of an attachment\n   *\n   * PIXI runtime feature, it was made to satisfy our users.\n   *\n   * @param slotName {string}\n   * @param attachmentName {string}\n   * @param [texture = null] {PIXI.Texture} If null, take default (original) texture\n   * @param [size = null] {PIXI.Point} sometimes we need new size for region attachment, you can pass 'texture.orig' there\n   * @returns {boolean} Success flag\n   */\n  hackTextureAttachment(slotName, attachmentName, texture, size = null) {\n    const slotIndex = this.skeleton.findSlotIndex(slotName);\n    const attachment = this.skeleton.getAttachmentByName(slotName, attachmentName);\n    attachment.region.texture = texture;\n    const slot = this.skeleton.slots[slotIndex];\n    if (!slot) {\n      return false;\n    }\n    const currentAttachment = slot.getAttachment();\n    if (attachmentName === currentAttachment.name) {\n      let region = attachment.region;\n      if (texture) {\n        region = new TextureRegion();\n        region.texture = texture;\n        region.size = size;\n        slot.hackRegion = region;\n        slot.hackAttachment = currentAttachment;\n      } else {\n        slot.hackRegion = null;\n        slot.hackAttachment = null;\n      }\n      if (slot.currentSprite && slot.currentSprite.region != region) {\n        this.setSpriteRegion(currentAttachment, slot.currentSprite, region);\n        slot.currentSprite.region = region;\n      } else if (slot.currentMesh && slot.currentMesh.region != region) {\n        this.setMeshRegion(currentAttachment, slot.currentMesh, region);\n      }\n      return true;\n    }\n    return false;\n  }\n  // those methods can be overriden to spawn different classes\n  newContainer() {\n    return new Container();\n  }\n  newSprite(tex) {\n    return new SpineSprite(tex);\n  }\n  newGraphics() {\n    return new Graphics();\n  }\n  newMesh(texture, vertices, uvs, indices, drawMode) {\n    return new SpineMesh(texture, vertices, uvs, indices, drawMode);\n  }\n  transformHack() {\n    return 1;\n  }\n  /**\n   * Hack for pixi-display and pixi-lights. Every attachment name ending with a suffix will be added to different layer\n   * @param nameSuffix\n   * @param group\n   * @param outGroup\n   */\n  hackAttachmentGroups(nameSuffix, group, outGroup) {\n    if (!nameSuffix) {\n      return void 0;\n    }\n    const list_d = [];\n    const list_n = [];\n    for (let i = 0, len = this.skeleton.slots.length; i < len; i++) {\n      const slot = this.skeleton.slots[i];\n      const name = slot.currentSpriteName || slot.currentMeshName || \"\";\n      const target = slot.currentSprite || slot.currentMesh;\n      if (name.endsWith(nameSuffix)) {\n        target.parentGroup = group;\n        list_n.push(target);\n      } else if (outGroup && target) {\n        target.parentGroup = outGroup;\n        list_d.push(target);\n      }\n    }\n    return [list_d, list_n];\n  }\n  destroy(options) {\n    this.debug = null;\n    for (let i = 0, n = this.skeleton.slots.length; i < n; i++) {\n      const slot = this.skeleton.slots[i];\n      for (const name in slot.meshes) {\n        slot.meshes[name].destroy(options);\n      }\n      slot.meshes = null;\n      for (const name in slot.sprites) {\n        slot.sprites[name].destroy(options);\n      }\n      slot.sprites = null;\n    }\n    for (let i = 0, n = this.slotContainers.length; i < n; i++) {\n      this.slotContainers[i].destroy(options);\n    }\n    this.spineData = null;\n    this.skeleton = null;\n    this.slotContainers = null;\n    this.stateData = null;\n    this.state = null;\n    this.tempClipContainers = null;\n    super.destroy(options);\n  }\n};\nlet SpineBase = _SpineBase;\nSpineBase.clippingPolygon = [];\nObject.defineProperty(SpineBase.prototype, \"visible\", {\n  get() {\n    return this._visible;\n  },\n  set(value) {\n    if (value !== this._visible) {\n      this._visible = value;\n      if (value) {\n        this.lastTime = 0;\n      }\n    }\n  }\n});\n\nexport { SpineBase, SpineMesh, SpineSprite };\n//# sourceMappingURL=SpineBase.mjs.map\n","import { Container } from '@pixi/display';\nimport { Graphics } from '@pixi/graphics';\nimport { AttachmentType } from './core/AttachmentType.mjs';\nimport { SkeletonBoundsBase } from './core/SkeletonBoundsBase.mjs';\n\nclass SpineDebugRenderer {\n  constructor() {\n    this.registeredSpines = /* @__PURE__ */ new Map();\n    this.drawDebug = true;\n    this.drawMeshHull = true;\n    this.drawMeshTriangles = true;\n    this.drawBones = true;\n    this.drawPaths = true;\n    this.drawBoundingBoxes = true;\n    this.drawClipping = true;\n    this.drawRegionAttachments = true;\n    this.lineWidth = 1;\n    this.regionAttachmentsColor = 30975;\n    this.meshHullColor = 30975;\n    this.meshTrianglesColor = 16763904;\n    this.clippingPolygonColor = 16711935;\n    this.boundingBoxesRectColor = 65280;\n    this.boundingBoxesPolygonColor = 65280;\n    this.boundingBoxesCircleColor = 65280;\n    this.pathsCurveColor = 16711680;\n    this.pathsLineColor = 16711935;\n    this.skeletonXYColor = 16711680;\n    this.bonesColor = 61132;\n  }\n  /**\n   * The debug is attached by force to each spine object. So we need to create it inside the spine when we get the first update\n   */\n  registerSpine(spine) {\n    if (this.registeredSpines.has(spine)) {\n      console.warn(\"SpineDebugRenderer.registerSpine() - this spine is already registered!\", spine);\n    }\n    const debugDisplayObjects = {\n      parentDebugContainer: new Container(),\n      bones: new Container(),\n      skeletonXY: new Graphics(),\n      regionAttachmentsShape: new Graphics(),\n      meshTrianglesLine: new Graphics(),\n      meshHullLine: new Graphics(),\n      clippingPolygon: new Graphics(),\n      boundingBoxesRect: new Graphics(),\n      boundingBoxesCircle: new Graphics(),\n      boundingBoxesPolygon: new Graphics(),\n      pathsCurve: new Graphics(),\n      pathsLine: new Graphics()\n    };\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve);\n    debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine);\n    spine.addChild(debugDisplayObjects.parentDebugContainer);\n    this.registeredSpines.set(spine, debugDisplayObjects);\n  }\n  renderDebug(spine) {\n    if (!this.registeredSpines.has(spine)) {\n      this.registerSpine(spine);\n    }\n    const debugDisplayObjects = this.registeredSpines.get(spine);\n    debugDisplayObjects.skeletonXY.clear();\n    debugDisplayObjects.regionAttachmentsShape.clear();\n    debugDisplayObjects.meshTrianglesLine.clear();\n    debugDisplayObjects.meshHullLine.clear();\n    debugDisplayObjects.clippingPolygon.clear();\n    debugDisplayObjects.boundingBoxesRect.clear();\n    debugDisplayObjects.boundingBoxesCircle.clear();\n    debugDisplayObjects.boundingBoxesPolygon.clear();\n    debugDisplayObjects.pathsCurve.clear();\n    debugDisplayObjects.pathsLine.clear();\n    for (let len = debugDisplayObjects.bones.children.length; len > 0; len--) {\n      debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, baseTexture: true });\n    }\n    const scale = spine.scale.x || spine.scale.y || 1;\n    const lineWidth = this.lineWidth / scale;\n    if (this.drawBones) {\n      this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale);\n    }\n    if (this.drawPaths) {\n      this.drawPathsFunc(spine, debugDisplayObjects, lineWidth);\n    }\n    if (this.drawBoundingBoxes) {\n      this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth);\n    }\n    if (this.drawClipping) {\n      this.drawClippingFunc(spine, debugDisplayObjects, lineWidth);\n    }\n    if (this.drawMeshHull || this.drawMeshTriangles) {\n      this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth);\n    }\n    if (this.drawRegionAttachments) {\n      this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth);\n    }\n  }\n  drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale) {\n    const skeleton = spine.skeleton;\n    const skeletonX = skeleton.x;\n    const skeletonY = skeleton.y;\n    const bones = skeleton.bones;\n    debugDisplayObjects.skeletonXY.lineStyle(lineWidth, this.skeletonXYColor, 1);\n    for (let i = 0, len = bones.length; i < len; i++) {\n      const bone = bones[i];\n      const boneLen = bone.data.length;\n      const starX = skeletonX + bone.matrix.tx;\n      const starY = skeletonY + bone.matrix.ty;\n      const endX = skeletonX + boneLen * bone.matrix.a + bone.matrix.tx;\n      const endY = skeletonY + boneLen * bone.matrix.b + bone.matrix.ty;\n      if (bone.data.name === \"root\" || bone.data.parent === null) {\n        continue;\n      }\n      const w = Math.abs(starX - endX);\n      const h = Math.abs(starY - endY);\n      const a2 = Math.pow(w, 2);\n      const b = h;\n      const b2 = Math.pow(h, 2);\n      const c = Math.sqrt(a2 + b2);\n      const c2 = Math.pow(c, 2);\n      const rad = Math.PI / 180;\n      const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0;\n      if (c === 0) {\n        continue;\n      }\n      const gp = new Graphics();\n      debugDisplayObjects.bones.addChild(gp);\n      const refRation = c / 50 / scale;\n      gp.beginFill(this.bonesColor, 1);\n      gp.drawPolygon(0, 0, 0 - refRation, c - refRation * 3, 0, c - refRation, 0 + refRation, c - refRation * 3);\n      gp.endFill();\n      gp.x = starX;\n      gp.y = starY;\n      gp.pivot.y = c;\n      let rotation = 0;\n      if (starX < endX && starY < endY) {\n        rotation = -B + 180 * rad;\n      } else if (starX > endX && starY < endY) {\n        rotation = 180 * rad + B;\n      } else if (starX > endX && starY > endY) {\n        rotation = -B;\n      } else if (starX < endX && starY > endY) {\n        rotation = B;\n      } else if (starY === endY && starX < endX) {\n        rotation = 90 * rad;\n      } else if (starY === endY && starX > endX) {\n        rotation = -90 * rad;\n      } else if (starX === endX && starY < endY) {\n        rotation = 180 * rad;\n      } else if (starX === endX && starY > endY) {\n        rotation = 0;\n      }\n      gp.rotation = rotation;\n      gp.lineStyle(lineWidth + refRation / 2.4, this.bonesColor, 1);\n      gp.beginFill(0, 0.6);\n      gp.drawCircle(0, c, refRation * 1.2);\n      gp.endFill();\n    }\n    const startDotSize = lineWidth * 3;\n    debugDisplayObjects.skeletonXY.moveTo(skeletonX - startDotSize, skeletonY - startDotSize);\n    debugDisplayObjects.skeletonXY.lineTo(skeletonX + startDotSize, skeletonY + startDotSize);\n    debugDisplayObjects.skeletonXY.moveTo(skeletonX + startDotSize, skeletonY - startDotSize);\n    debugDisplayObjects.skeletonXY.lineTo(skeletonX - startDotSize, skeletonY + startDotSize);\n  }\n  drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth) {\n    const skeleton = spine.skeleton;\n    const slots = skeleton.slots;\n    debugDisplayObjects.regionAttachmentsShape.lineStyle(lineWidth, this.regionAttachmentsColor, 1);\n    for (let i = 0, len = slots.length; i < len; i++) {\n      const slot = slots[i];\n      const attachment = slot.getAttachment();\n      if (attachment == null || attachment.type !== AttachmentType.Region) {\n        continue;\n      }\n      const regionAttachment = attachment;\n      const vertices = new Float32Array(8);\n      if (regionAttachment.updateOffset)\n        regionAttachment.updateOffset();\n      regionAttachment.computeWorldVertices(slot, vertices, 0, 2);\n      debugDisplayObjects.regionAttachmentsShape.drawPolygon(Array.from(vertices.slice(0, 8)));\n    }\n  }\n  drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth) {\n    const skeleton = spine.skeleton;\n    const slots = skeleton.slots;\n    debugDisplayObjects.meshHullLine.lineStyle(lineWidth, this.meshHullColor, 1);\n    debugDisplayObjects.meshTrianglesLine.lineStyle(lineWidth, this.meshTrianglesColor, 1);\n    for (let i = 0, len = slots.length; i < len; i++) {\n      const slot = slots[i];\n      if (!slot.bone.active) {\n        continue;\n      }\n      const attachment = slot.getAttachment();\n      if (attachment == null || attachment.type !== AttachmentType.Mesh) {\n        continue;\n      }\n      const meshAttachment = attachment;\n      const vertices = new Float32Array(meshAttachment.worldVerticesLength);\n      const triangles = meshAttachment.triangles;\n      let hullLength = meshAttachment.hullLength;\n      meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2);\n      if (this.drawMeshTriangles) {\n        for (let i2 = 0, len2 = triangles.length; i2 < len2; i2 += 3) {\n          const v1 = triangles[i2] * 2;\n          const v2 = triangles[i2 + 1] * 2;\n          const v3 = triangles[i2 + 2] * 2;\n          debugDisplayObjects.meshTrianglesLine.moveTo(vertices[v1], vertices[v1 + 1]);\n          debugDisplayObjects.meshTrianglesLine.lineTo(vertices[v2], vertices[v2 + 1]);\n          debugDisplayObjects.meshTrianglesLine.lineTo(vertices[v3], vertices[v3 + 1]);\n        }\n      }\n      if (this.drawMeshHull && hullLength > 0) {\n        hullLength = (hullLength >> 1) * 2;\n        let lastX = vertices[hullLength - 2];\n        let lastY = vertices[hullLength - 1];\n        for (let i2 = 0, len2 = hullLength; i2 < len2; i2 += 2) {\n          const x = vertices[i2];\n          const y = vertices[i2 + 1];\n          debugDisplayObjects.meshHullLine.moveTo(x, y);\n          debugDisplayObjects.meshHullLine.lineTo(lastX, lastY);\n          lastX = x;\n          lastY = y;\n        }\n      }\n    }\n  }\n  drawClippingFunc(spine, debugDisplayObjects, lineWidth) {\n    const skeleton = spine.skeleton;\n    const slots = skeleton.slots;\n    debugDisplayObjects.clippingPolygon.lineStyle(lineWidth, this.clippingPolygonColor, 1);\n    for (let i = 0, len = slots.length; i < len; i++) {\n      const slot = slots[i];\n      if (!slot.bone.active) {\n        continue;\n      }\n      const attachment = slot.getAttachment();\n      if (attachment == null || attachment.type !== AttachmentType.Clipping) {\n        continue;\n      }\n      const clippingAttachment = attachment;\n      const nn = clippingAttachment.worldVerticesLength;\n      const world = new Float32Array(nn);\n      clippingAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n      debugDisplayObjects.clippingPolygon.drawPolygon(Array.from(world));\n    }\n  }\n  drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth) {\n    debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5);\n    const bounds = new SkeletonBoundsBase();\n    bounds.update(spine.skeleton, true);\n    debugDisplayObjects.boundingBoxesRect.drawRect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight());\n    const polygons = bounds.polygons;\n    const drawPolygon = (polygonVertices, _offset, count) => {\n      debugDisplayObjects.boundingBoxesPolygon.lineStyle(lineWidth, this.boundingBoxesPolygonColor, 1);\n      debugDisplayObjects.boundingBoxesPolygon.beginFill(this.boundingBoxesPolygonColor, 0.1);\n      if (count < 3) {\n        throw new Error(\"Polygon must contain at least 3 vertices\");\n      }\n      const paths = [];\n      const dotSize = lineWidth * 2;\n      for (let i = 0, len = polygonVertices.length; i < len; i += 2) {\n        const x1 = polygonVertices[i];\n        const y1 = polygonVertices[i + 1];\n        debugDisplayObjects.boundingBoxesCircle.lineStyle(0);\n        debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor);\n        debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize);\n        debugDisplayObjects.boundingBoxesCircle.endFill();\n        paths.push(x1, y1);\n      }\n      debugDisplayObjects.boundingBoxesPolygon.drawPolygon(paths);\n      debugDisplayObjects.boundingBoxesPolygon.endFill();\n    };\n    for (let i = 0, len = polygons.length; i < len; i++) {\n      const polygon = polygons[i];\n      drawPolygon(polygon, 0, polygon.length);\n    }\n  }\n  drawPathsFunc(spine, debugDisplayObjects, lineWidth) {\n    const skeleton = spine.skeleton;\n    const slots = skeleton.slots;\n    debugDisplayObjects.pathsCurve.lineStyle(lineWidth, this.pathsCurveColor, 1);\n    debugDisplayObjects.pathsLine.lineStyle(lineWidth, this.pathsLineColor, 1);\n    for (let i = 0, len = slots.length; i < len; i++) {\n      const slot = slots[i];\n      if (!slot.bone.active) {\n        continue;\n      }\n      const attachment = slot.getAttachment();\n      if (attachment == null || attachment.type !== AttachmentType.Path) {\n        continue;\n      }\n      const pathAttachment = attachment;\n      let nn = pathAttachment.worldVerticesLength;\n      const world = new Float32Array(nn);\n      pathAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n      let x1 = world[2];\n      let y1 = world[3];\n      let x2 = 0;\n      let y2 = 0;\n      if (pathAttachment.closed) {\n        const cx1 = world[0];\n        const cy1 = world[1];\n        const cx2 = world[nn - 2];\n        const cy2 = world[nn - 1];\n        x2 = world[nn - 4];\n        y2 = world[nn - 3];\n        debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n        debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n        debugDisplayObjects.pathsLine.moveTo(x1, y1);\n        debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n        debugDisplayObjects.pathsLine.moveTo(x2, y2);\n        debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n      }\n      nn -= 4;\n      for (let ii = 4; ii < nn; ii += 6) {\n        const cx1 = world[ii];\n        const cy1 = world[ii + 1];\n        const cx2 = world[ii + 2];\n        const cy2 = world[ii + 3];\n        x2 = world[ii + 4];\n        y2 = world[ii + 5];\n        debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n        debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n        debugDisplayObjects.pathsLine.moveTo(x1, y1);\n        debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n        debugDisplayObjects.pathsLine.moveTo(x2, y2);\n        debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n        x1 = x2;\n        y1 = y2;\n      }\n    }\n  }\n  unregisterSpine(spine) {\n    if (!this.registeredSpines.has(spine)) {\n      console.warn(\"SpineDebugRenderer.unregisterSpine() - spine is not registered, can't unregister!\", spine);\n    }\n    const debugDisplayObjects = this.registeredSpines.get(spine);\n    debugDisplayObjects.parentDebugContainer.destroy({ baseTexture: true, children: true, texture: true });\n    this.registeredSpines.delete(spine);\n  }\n}\n\nexport { SpineDebugRenderer };\n//# sourceMappingURL=SpineDebugRenderer.mjs.map\n","import { TextureAtlas, settings as settings$1 } from '@pixi-spine/base';\nimport { LoaderParserPriority, checkExtension } from '@pixi/assets';\nimport { ExtensionType, settings, utils, extensions } from '@pixi/core';\n\nconst spineTextureAtlasLoader = {\n  extension: ExtensionType.Asset,\n  // cache: {\n  //     test: (asset: RawAtlas | TextureAtlas) => asset instanceof TextureAtlas,\n  //     getCacheableAssets: (keys: string[], asset: RawAtlas | TextureAtlas) => getCacheableAssets(keys, asset),\n  // },\n  loader: {\n    extension: {\n      type: ExtensionType.LoadParser,\n      priority: LoaderParserPriority.Normal\n    },\n    test(url) {\n      return checkExtension(url, \".atlas\");\n    },\n    async load(url) {\n      const response = await settings.ADAPTER.fetch(url);\n      const txt = await response.text();\n      return txt;\n    },\n    testParse(asset, options) {\n      const isExtensionRight = checkExtension(options.src, \".atlas\");\n      const isString = typeof asset === \"string\";\n      return Promise.resolve(isExtensionRight && isString);\n    },\n    async parse(asset, options, loader) {\n      const metadata = options.data;\n      let basePath = utils.path.dirname(options.src);\n      if (basePath && basePath.lastIndexOf(\"/\") !== basePath.length - 1) {\n        basePath += \"/\";\n      }\n      let resolve = null;\n      let reject = null;\n      const retPromise = new Promise((res, rej) => {\n        resolve = res;\n        reject = rej;\n      });\n      let retval;\n      const resolveCallback = (newAtlas) => {\n        if (!newAtlas) {\n          reject(\"Something went terribly wrong loading a spine .atlas file\\nMost likely your texture failed to load.\");\n        }\n        resolve(retval);\n      };\n      if (metadata.image || metadata.images) {\n        const pages = Object.assign(metadata.image ? { default: metadata.image } : {}, metadata.images);\n        retval = new TextureAtlas(\n          asset,\n          (line, callback) => {\n            const page = pages[line] || pages.default;\n            if (page && page.baseTexture)\n              callback(page.baseTexture);\n            else\n              callback(page);\n          },\n          resolveCallback\n        );\n      } else {\n        retval = new TextureAtlas(asset, makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject(loader, basePath, metadata.imageMetadata), resolveCallback);\n      }\n      return await retPromise;\n    },\n    unload(atlas) {\n      atlas.dispose();\n    }\n  }\n};\nconst makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject = (loader, atlasBasePath, imageMetadata) => {\n  return async (pageName, textureLoadedCallback) => {\n    try {\n      const url = utils.path.normalize([...atlasBasePath.split(utils.path.sep), pageName].join(utils.path.sep));\n      const texture = await loader.load({ src: url, data: imageMetadata });\n      textureLoadedCallback(texture.baseTexture);\n    } catch (e) {\n      if (settings$1.REPORT_TEXTURE_LOADER_ERROR) {\n        console.error(\"Spine: error in texture loader\", e);\n      }\n      textureLoadedCallback(null);\n    }\n  };\n};\nextensions.add(spineTextureAtlasLoader);\n\nexport { makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject };\n//# sourceMappingURL=atlasLoader.mjs.map\n","import { TextureAtlas } from '@pixi-spine/base';\nimport { LoaderParserPriority, checkExtension } from '@pixi/assets';\nimport { ExtensionType, settings, utils, extensions } from '@pixi/core';\nimport { makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject } from './atlasLoader.mjs';\n\nfunction isJson(resource) {\n  return resource.hasOwnProperty(\"bones\");\n}\nfunction isBuffer(resource) {\n  return resource instanceof ArrayBuffer;\n}\nclass SpineLoaderAbstract {\n  constructor() {\n  }\n  installLoader() {\n    const spineAdapter = this;\n    const spineLoaderExtension = {\n      extension: ExtensionType.Asset,\n      loader: {\n        extension: {\n          type: ExtensionType.LoadParser,\n          priority: LoaderParserPriority.Normal\n        },\n        // #region Downloading skel buffer data\n        test(url) {\n          return checkExtension(url, \".skel\");\n        },\n        async load(url) {\n          const response = await settings.ADAPTER.fetch(url);\n          const buffer = await response.arrayBuffer();\n          return buffer;\n        },\n        // #endregion\n        // #region Parsing spine data\n        testParse(asset, options) {\n          const isJsonSpineModel = checkExtension(options.src, \".json\") && isJson(asset);\n          const isBinarySpineModel = checkExtension(options.src, \".skel\") && isBuffer(asset);\n          const isMetadataAngry = options.data?.spineAtlas === false;\n          return Promise.resolve(isJsonSpineModel && !isMetadataAngry || isBinarySpineModel);\n        },\n        async parse(asset, loadAsset, loader) {\n          const fileExt = utils.path.extname(loadAsset.src).toLowerCase();\n          const fileName = utils.path.basename(loadAsset.src, fileExt);\n          let basePath = utils.path.dirname(loadAsset.src);\n          if (basePath && basePath.lastIndexOf(\"/\") !== basePath.length - 1) {\n            basePath += \"/\";\n          }\n          const isJsonSpineModel = checkExtension(loadAsset.src, \".json\") && isJson(asset);\n          let parser = null;\n          let dataToParse = asset;\n          if (isJsonSpineModel) {\n            parser = spineAdapter.createJsonParser();\n          } else {\n            parser = spineAdapter.createBinaryParser();\n            dataToParse = new Uint8Array(asset);\n          }\n          const metadata = loadAsset.data || {};\n          const metadataSkeletonScale = metadata?.spineSkeletonScale ?? null;\n          if (metadataSkeletonScale) {\n            parser.scale = metadataSkeletonScale;\n          }\n          const metadataAtlas = metadata.spineAtlas;\n          if (metadataAtlas && metadataAtlas.pages) {\n            return spineAdapter.parseData(parser, metadataAtlas, dataToParse);\n          }\n          const textAtlas = metadata.atlasRawData;\n          if (textAtlas) {\n            let auxResolve = null;\n            let auxReject = null;\n            const atlasPromise = new Promise((resolve, reject) => {\n              auxResolve = resolve;\n              auxReject = reject;\n            });\n            const atlas = new TextureAtlas(textAtlas, makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject(loader, basePath, metadata.imageMetadata), (newAtlas) => {\n              if (!newAtlas) {\n                auxReject(\"Something went terribly wrong loading a spine .atlas file\\nMost likely your texture failed to load.\");\n              }\n              auxResolve(atlas);\n            });\n            const textureAtlas2 = await atlasPromise;\n            return spineAdapter.parseData(parser, textureAtlas2, dataToParse);\n          }\n          let atlasPath = metadata.spineAtlasFile;\n          if (!atlasPath) {\n            atlasPath = `${basePath + fileName}.atlas`;\n          }\n          const textureAtlas = await loader.load({ src: atlasPath, data: metadata, alias: metadata.spineAtlasAlias });\n          return spineAdapter.parseData(parser, textureAtlas, dataToParse);\n        }\n        // #endregion\n        // unload(asset: ISpineResource<SKD>, loadAsset, loader) {\n        // \t???\n        // },\n      }\n    };\n    extensions.add(spineLoaderExtension);\n    return spineLoaderExtension;\n  }\n}\n\nexport { SpineLoaderAbstract };\n//# sourceMappingURL=SpineLoaderAbstract.mjs.map\n","import { Utils } from '@pixi-spine/base';\n\nclass Attachment {\n  constructor(name) {\n    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    this.name = name;\n  }\n}\nconst _VertexAttachment = class extends Attachment {\n  constructor(name) {\n    super(name);\n    this.id = (_VertexAttachment.nextID++ & 65535) << 11;\n    this.worldVerticesLength = 0;\n    this.deformAttachment = this;\n  }\n  computeWorldVerticesOld(slot, worldVertices) {\n    this.computeWorldVertices(slot, 0, this.worldVerticesLength, worldVertices, 0, 2);\n  }\n  /** Transforms local vertices to world coordinates.\n   * @param start The index of the first local vertex value to transform. Each vertex has 2 values, x and y.\n   * @param count The number of world vertex values to output. Must be <= {@link #getWorldVerticesLength()} - start.\n   * @param worldVertices The output world vertices. Must have a length >= offset + count.\n   * @param offset The worldVertices index to begin writing values. */\n  computeWorldVertices(slot, start, count, worldVertices, offset, stride) {\n    count = offset + (count >> 1) * stride;\n    const skeleton = slot.bone.skeleton;\n    const deformArray = slot.deform;\n    let vertices = this.vertices;\n    const bones = this.bones;\n    if (bones == null) {\n      if (deformArray.length > 0)\n        vertices = deformArray;\n      const mat = slot.bone.matrix;\n      const x = mat.tx;\n      const y = mat.ty;\n      const a = mat.a;\n      const b = mat.c;\n      const c = mat.b;\n      const d = mat.d;\n      for (let v2 = start, w = offset; w < count; v2 += 2, w += stride) {\n        const vx = vertices[v2];\n        const vy = vertices[v2 + 1];\n        worldVertices[w] = vx * a + vy * b + x;\n        worldVertices[w + 1] = vx * c + vy * d + y;\n      }\n      return;\n    }\n    let v = 0;\n    let skip = 0;\n    for (let i = 0; i < start; i += 2) {\n      const n = bones[v];\n      v += n + 1;\n      skip += n;\n    }\n    const skeletonBones = skeleton.bones;\n    if (deformArray.length == 0) {\n      for (let w = offset, b = skip * 3; w < count; w += stride) {\n        let wx = 0;\n        let wy = 0;\n        let n = bones[v++];\n        n += v;\n        for (; v < n; v++, b += 3) {\n          const mat = skeletonBones[bones[v]].matrix;\n          const vx = vertices[b];\n          const vy = vertices[b + 1];\n          const weight = vertices[b + 2];\n          wx += (vx * mat.a + vy * mat.c + mat.tx) * weight;\n          wy += (vx * mat.b + vy * mat.d + mat.ty) * weight;\n        }\n        worldVertices[w] = wx;\n        worldVertices[w + 1] = wy;\n      }\n    } else {\n      const deform = deformArray;\n      for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n        let wx = 0;\n        let wy = 0;\n        let n = bones[v++];\n        n += v;\n        for (; v < n; v++, b += 3, f += 2) {\n          const mat = skeletonBones[bones[v]].matrix;\n          const vx = vertices[b] + deform[f];\n          const vy = vertices[b + 1] + deform[f + 1];\n          const weight = vertices[b + 2];\n          wx += (vx * mat.a + vy * mat.c + mat.tx) * weight;\n          wy += (vx * mat.b + vy * mat.d + mat.ty) * weight;\n        }\n        worldVertices[w] = wx;\n        worldVertices[w + 1] = wy;\n      }\n    }\n  }\n  copyTo(attachment) {\n    if (this.bones != null) {\n      attachment.bones = new Array(this.bones.length);\n      Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n    } else\n      attachment.bones = null;\n    if (this.vertices != null) {\n      attachment.vertices = Utils.newFloatArray(this.vertices.length);\n      Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n    } else\n      attachment.vertices = null;\n    attachment.worldVerticesLength = this.worldVerticesLength;\n    attachment.deformAttachment = this.deformAttachment;\n  }\n};\nlet VertexAttachment = _VertexAttachment;\nVertexAttachment.nextID = 0;\n\nexport { Attachment, VertexAttachment };\n//# sourceMappingURL=Attachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color } from '@pixi-spine/base';\n\nclass BoundingBoxAttachment extends VertexAttachment {\n  constructor(name) {\n    super(name);\n    this.type = AttachmentType.BoundingBox;\n    this.color = new Color(1, 1, 1, 1);\n  }\n  copy() {\n    const copy = new BoundingBoxAttachment(this.name);\n    this.copyTo(copy);\n    copy.color.setFromColor(this.color);\n    return copy;\n  }\n}\n\nexport { BoundingBoxAttachment };\n//# sourceMappingURL=BoundingBoxAttachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color } from '@pixi-spine/base';\n\nclass ClippingAttachment extends VertexAttachment {\n  // ce3a3aff\n  constructor(name) {\n    super(name);\n    this.type = AttachmentType.Clipping;\n    // Nonessential.\n    this.color = new Color(0.2275, 0.2275, 0.8078, 1);\n  }\n  copy() {\n    const copy = new ClippingAttachment(this.name);\n    this.copyTo(copy);\n    copy.endSlot = this.endSlot;\n    copy.color.setFromColor(this.color);\n    return copy;\n  }\n}\n\nexport { ClippingAttachment };\n//# sourceMappingURL=ClippingAttachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color, Utils } from '@pixi-spine/base';\n\nclass MeshAttachment extends VertexAttachment {\n  constructor(name) {\n    super(name);\n    this.type = AttachmentType.Mesh;\n    this.color = new Color(1, 1, 1, 1);\n    this.tempColor = new Color(0, 0, 0, 0);\n  }\n  getParentMesh() {\n    return this.parentMesh;\n  }\n  /** @param parentMesh May be null. */\n  setParentMesh(parentMesh) {\n    this.parentMesh = parentMesh;\n    if (parentMesh != null) {\n      this.bones = parentMesh.bones;\n      this.vertices = parentMesh.vertices;\n      this.worldVerticesLength = parentMesh.worldVerticesLength;\n      this.regionUVs = parentMesh.regionUVs;\n      this.triangles = parentMesh.triangles;\n      this.hullLength = parentMesh.hullLength;\n      this.worldVerticesLength = parentMesh.worldVerticesLength;\n    }\n  }\n  copy() {\n    if (this.parentMesh != null)\n      return this.newLinkedMesh();\n    const copy = new MeshAttachment(this.name);\n    copy.region = this.region;\n    copy.path = this.path;\n    copy.color.setFromColor(this.color);\n    this.copyTo(copy);\n    copy.regionUVs = new Float32Array(this.regionUVs.length);\n    Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n    copy.triangles = new Array(this.triangles.length);\n    Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n    copy.hullLength = this.hullLength;\n    if (this.edges != null) {\n      copy.edges = new Array(this.edges.length);\n      Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n    }\n    copy.width = this.width;\n    copy.height = this.height;\n    return copy;\n  }\n  newLinkedMesh() {\n    const copy = new MeshAttachment(this.name);\n    copy.region = this.region;\n    copy.path = this.path;\n    copy.color.setFromColor(this.color);\n    copy.deformAttachment = this.deformAttachment;\n    copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this);\n    return copy;\n  }\n}\n\nexport { MeshAttachment };\n//# sourceMappingURL=MeshAttachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color, Utils } from '@pixi-spine/base';\n\nclass PathAttachment extends VertexAttachment {\n  constructor(name) {\n    super(name);\n    this.type = AttachmentType.Path;\n    this.closed = false;\n    this.constantSpeed = false;\n    this.color = new Color(1, 1, 1, 1);\n  }\n  copy() {\n    const copy = new PathAttachment(this.name);\n    this.copyTo(copy);\n    copy.lengths = new Array(this.lengths.length);\n    Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n    copy.closed = closed;\n    copy.constantSpeed = this.constantSpeed;\n    copy.color.setFromColor(this.color);\n    return copy;\n  }\n}\n\nexport { PathAttachment };\n//# sourceMappingURL=PathAttachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color, MathUtils } from '@pixi-spine/base';\n\nclass PointAttachment extends VertexAttachment {\n  constructor(name) {\n    super(name);\n    this.type = AttachmentType.Point;\n    this.color = new Color(0.38, 0.94, 0, 1);\n  }\n  computeWorldPosition(bone, point) {\n    const mat = bone.matrix;\n    point.x = this.x * mat.a + this.y * mat.c + bone.worldX;\n    point.y = this.x * mat.b + this.y * mat.d + bone.worldY;\n    return point;\n  }\n  computeWorldRotation(bone) {\n    const mat = bone.matrix;\n    const cos = MathUtils.cosDeg(this.rotation);\n    const sin = MathUtils.sinDeg(this.rotation);\n    const x = cos * mat.a + sin * mat.c;\n    const y = cos * mat.b + sin * mat.d;\n    return Math.atan2(y, x) * MathUtils.radDeg;\n  }\n  copy() {\n    const copy = new PointAttachment(this.name);\n    copy.x = this.x;\n    copy.y = this.y;\n    copy.rotation = this.rotation;\n    copy.color.setFromColor(this.color);\n    return copy;\n  }\n}\n\nexport { PointAttachment };\n//# sourceMappingURL=PointAttachment.mjs.map\n","import { Color } from '@pixi-spine/base';\n\nclass Slot {\n  constructor(data, bone) {\n    this.deform = new Array();\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    if (bone == null)\n      throw new Error(\"bone cannot be null.\");\n    this.data = data;\n    this.bone = bone;\n    this.color = new Color();\n    this.darkColor = data.darkColor == null ? null : new Color();\n    this.setToSetupPose();\n    this.blendMode = this.data.blendMode;\n  }\n  /** @return May be null. */\n  getAttachment() {\n    return this.attachment;\n  }\n  /** Sets the attachment and if it changed, resets {@link #getAttachmentTime()} and clears {@link #getAttachmentVertices()}.\n   * @param attachment May be null. */\n  setAttachment(attachment) {\n    if (this.attachment == attachment)\n      return;\n    this.attachment = attachment;\n    this.attachmentTime = this.bone.skeleton.time;\n    this.deform.length = 0;\n  }\n  setAttachmentTime(time) {\n    this.attachmentTime = this.bone.skeleton.time - time;\n  }\n  /** Returns the time since the attachment was set. */\n  getAttachmentTime() {\n    return this.bone.skeleton.time - this.attachmentTime;\n  }\n  setToSetupPose() {\n    this.color.setFromColor(this.data.color);\n    if (this.darkColor != null)\n      this.darkColor.setFromColor(this.data.darkColor);\n    if (this.data.attachmentName == null)\n      this.attachment = null;\n    else {\n      this.attachment = null;\n      this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n    }\n  }\n}\n\nexport { Slot };\n//# sourceMappingURL=Slot.mjs.map\n","import { Attachment } from './Attachment.mjs';\nimport { AttachmentType, Color, Utils } from '@pixi-spine/base';\nimport { Slot } from '../Slot.mjs';\n\nconst _RegionAttachment = class extends Attachment {\n  constructor(name) {\n    super(name);\n    this.type = AttachmentType.Region;\n    this.x = 0;\n    this.y = 0;\n    this.scaleX = 1;\n    this.scaleY = 1;\n    this.rotation = 0;\n    this.width = 0;\n    this.height = 0;\n    this.color = new Color(1, 1, 1, 1);\n    this.offset = Utils.newFloatArray(8);\n    this.uvs = Utils.newFloatArray(8);\n    this.tempColor = new Color(1, 1, 1, 1);\n  }\n  updateOffset() {\n    const regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n    const regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n    const localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n    const localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n    const localX2 = localX + this.region.width * regionScaleX;\n    const localY2 = localY + this.region.height * regionScaleY;\n    const radians = this.rotation * Math.PI / 180;\n    const cos = Math.cos(radians);\n    const sin = Math.sin(radians);\n    const localXCos = localX * cos + this.x;\n    const localXSin = localX * sin;\n    const localYCos = localY * cos + this.y;\n    const localYSin = localY * sin;\n    const localX2Cos = localX2 * cos + this.x;\n    const localX2Sin = localX2 * sin;\n    const localY2Cos = localY2 * cos + this.y;\n    const localY2Sin = localY2 * sin;\n    const offset = this.offset;\n    offset[_RegionAttachment.OX1] = localXCos - localYSin;\n    offset[_RegionAttachment.OY1] = localYCos + localXSin;\n    offset[_RegionAttachment.OX2] = localXCos - localY2Sin;\n    offset[_RegionAttachment.OY2] = localY2Cos + localXSin;\n    offset[_RegionAttachment.OX3] = localX2Cos - localY2Sin;\n    offset[_RegionAttachment.OY3] = localY2Cos + localX2Sin;\n    offset[_RegionAttachment.OX4] = localX2Cos - localYSin;\n    offset[_RegionAttachment.OY4] = localYCos + localX2Sin;\n  }\n  setRegion(region) {\n    this.region = region;\n    const uvs = this.uvs;\n    if (region.rotate) {\n      uvs[2] = region.u;\n      uvs[3] = region.v2;\n      uvs[4] = region.u;\n      uvs[5] = region.v;\n      uvs[6] = region.u2;\n      uvs[7] = region.v;\n      uvs[0] = region.u2;\n      uvs[1] = region.v2;\n    } else {\n      uvs[0] = region.u;\n      uvs[1] = region.v2;\n      uvs[2] = region.u;\n      uvs[3] = region.v;\n      uvs[4] = region.u2;\n      uvs[5] = region.v;\n      uvs[6] = region.u2;\n      uvs[7] = region.v2;\n    }\n  }\n  computeWorldVertices(bone, worldVertices, offset, stride) {\n    const vertexOffset = this.offset;\n    const mat = bone instanceof Slot ? bone.bone.matrix : bone.matrix;\n    const x = mat.tx;\n    const y = mat.ty;\n    const a = mat.a;\n    const b = mat.c;\n    const c = mat.b;\n    const d = mat.d;\n    let offsetX = 0;\n    let offsetY = 0;\n    offsetX = vertexOffset[_RegionAttachment.OX1];\n    offsetY = vertexOffset[_RegionAttachment.OY1];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n    offset += stride;\n    offsetX = vertexOffset[_RegionAttachment.OX2];\n    offsetY = vertexOffset[_RegionAttachment.OY2];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n    offset += stride;\n    offsetX = vertexOffset[_RegionAttachment.OX3];\n    offsetY = vertexOffset[_RegionAttachment.OY3];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n    offset += stride;\n    offsetX = vertexOffset[_RegionAttachment.OX4];\n    offsetY = vertexOffset[_RegionAttachment.OY4];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n  }\n  copy() {\n    const copy = new _RegionAttachment(this.name);\n    copy.region = this.region;\n    copy.rendererObject = this.rendererObject;\n    copy.path = this.path;\n    copy.x = this.x;\n    copy.y = this.y;\n    copy.scaleX = this.scaleX;\n    copy.scaleY = this.scaleY;\n    copy.rotation = this.rotation;\n    copy.width = this.width;\n    copy.height = this.height;\n    Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);\n    Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);\n    copy.color.setFromColor(this.color);\n    return copy;\n  }\n};\nlet RegionAttachment = _RegionAttachment;\nRegionAttachment.OX1 = 0;\nRegionAttachment.OY1 = 1;\nRegionAttachment.OX2 = 2;\nRegionAttachment.OY2 = 3;\nRegionAttachment.OX3 = 4;\nRegionAttachment.OY3 = 5;\nRegionAttachment.OX4 = 6;\nRegionAttachment.OY4 = 7;\nRegionAttachment.X1 = 0;\nRegionAttachment.Y1 = 1;\nRegionAttachment.C1R = 2;\nRegionAttachment.C1G = 3;\nRegionAttachment.C1B = 4;\nRegionAttachment.C1A = 5;\nRegionAttachment.U1 = 6;\nRegionAttachment.V1 = 7;\nRegionAttachment.X2 = 8;\nRegionAttachment.Y2 = 9;\nRegionAttachment.C2R = 10;\nRegionAttachment.C2G = 11;\nRegionAttachment.C2B = 12;\nRegionAttachment.C2A = 13;\nRegionAttachment.U2 = 14;\nRegionAttachment.V2 = 15;\nRegionAttachment.X3 = 16;\nRegionAttachment.Y3 = 17;\nRegionAttachment.C3R = 18;\nRegionAttachment.C3G = 19;\nRegionAttachment.C3B = 20;\nRegionAttachment.C3A = 21;\nRegionAttachment.U3 = 22;\nRegionAttachment.V3 = 23;\nRegionAttachment.X4 = 24;\nRegionAttachment.Y4 = 25;\nRegionAttachment.C4R = 26;\nRegionAttachment.C4G = 27;\nRegionAttachment.C4B = 28;\nRegionAttachment.C4A = 29;\nRegionAttachment.U4 = 30;\nRegionAttachment.V4 = 31;\n\nexport { RegionAttachment };\n//# sourceMappingURL=RegionAttachment.mjs.map\n","import { MathUtils } from '@pixi-spine/base';\n\nclass JitterEffect {\n  constructor(jitterX, jitterY) {\n    this.jitterX = 0;\n    this.jitterY = 0;\n    this.jitterX = jitterX;\n    this.jitterY = jitterY;\n  }\n  begin(skeleton) {\n  }\n  transform(position, uv, light, dark) {\n    position.x += MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n    position.y += MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n  }\n  end() {\n  }\n}\n\nexport { JitterEffect };\n//# sourceMappingURL=JitterEffect.mjs.map\n","import { PowOut, MathUtils } from '@pixi-spine/base';\n\nconst _SwirlEffect = class {\n  constructor(radius) {\n    this.centerX = 0;\n    this.centerY = 0;\n    this.radius = 0;\n    this.angle = 0;\n    this.worldX = 0;\n    this.worldY = 0;\n    this.radius = radius;\n  }\n  begin(skeleton) {\n    this.worldX = skeleton.x + this.centerX;\n    this.worldY = skeleton.y + this.centerY;\n  }\n  transform(position, uv, light, dark) {\n    const radAngle = this.angle * MathUtils.degreesToRadians;\n    const x = position.x - this.worldX;\n    const y = position.y - this.worldY;\n    const dist = Math.sqrt(x * x + y * y);\n    if (dist < this.radius) {\n      const theta = _SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);\n      const cos = Math.cos(theta);\n      const sin = Math.sin(theta);\n      position.x = cos * x - sin * y + this.worldX;\n      position.y = sin * x + cos * y + this.worldY;\n    }\n  }\n  end() {\n  }\n};\nlet SwirlEffect = _SwirlEffect;\nSwirlEffect.interpolation = new PowOut(2);\n\nexport { SwirlEffect };\n//# sourceMappingURL=SwirlEffect.mjs.map\n","import { VertexAttachment } from './attachments/Attachment.mjs';\nimport { MixBlend, MixDirection, MathUtils, Utils } from '@pixi-spine/base';\nimport './attachments/RegionAttachment.mjs';\n\nclass Animation {\n  constructor(name, timelines, duration) {\n    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    if (timelines == null)\n      throw new Error(\"timelines cannot be null.\");\n    this.name = name;\n    this.timelines = timelines;\n    this.timelineIds = [];\n    for (let i = 0; i < timelines.length; i++)\n      this.timelineIds[timelines[i].getPropertyId()] = true;\n    this.duration = duration;\n  }\n  hasTimeline(id) {\n    return this.timelineIds[id] == true;\n  }\n  /** Applies all the animation's timelines to the specified skeleton.\n   *\n   * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}.\n   * @param loop If true, the animation repeats after {@link #getDuration()}.\n   * @param events May be null to ignore fired events. */\n  apply(skeleton, lastTime, time, loop, events, alpha, blend, direction) {\n    if (skeleton == null)\n      throw new Error(\"skeleton cannot be null.\");\n    if (loop && this.duration != 0) {\n      time %= this.duration;\n      if (lastTime > 0)\n        lastTime %= this.duration;\n    }\n    const timelines = this.timelines;\n    for (let i = 0, n = timelines.length; i < n; i++)\n      timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\n  }\n  /** @param target After the first and before the last value.\n   * @returns index of first value greater than the target. */\n  static binarySearch(values, target, step = 1) {\n    let low = 0;\n    let high = values.length / step - 2;\n    if (high == 0)\n      return step;\n    let current = high >>> 1;\n    while (true) {\n      if (values[(current + 1) * step] <= target)\n        low = current + 1;\n      else\n        high = current;\n      if (low == high)\n        return (low + 1) * step;\n      current = low + high >>> 1;\n    }\n  }\n  static linearSearch(values, target, step) {\n    for (let i = 0, last = values.length - step; i <= last; i += step)\n      if (values[i] > target)\n        return i;\n    return -1;\n  }\n}\nvar TimelineType = /* @__PURE__ */ ((TimelineType2) => {\n  TimelineType2[TimelineType2[\"rotate\"] = 0] = \"rotate\";\n  TimelineType2[TimelineType2[\"translate\"] = 1] = \"translate\";\n  TimelineType2[TimelineType2[\"scale\"] = 2] = \"scale\";\n  TimelineType2[TimelineType2[\"shear\"] = 3] = \"shear\";\n  TimelineType2[TimelineType2[\"attachment\"] = 4] = \"attachment\";\n  TimelineType2[TimelineType2[\"color\"] = 5] = \"color\";\n  TimelineType2[TimelineType2[\"deform\"] = 6] = \"deform\";\n  TimelineType2[TimelineType2[\"event\"] = 7] = \"event\";\n  TimelineType2[TimelineType2[\"drawOrder\"] = 8] = \"drawOrder\";\n  TimelineType2[TimelineType2[\"ikConstraint\"] = 9] = \"ikConstraint\";\n  TimelineType2[TimelineType2[\"transformConstraint\"] = 10] = \"transformConstraint\";\n  TimelineType2[TimelineType2[\"pathConstraintPosition\"] = 11] = \"pathConstraintPosition\";\n  TimelineType2[TimelineType2[\"pathConstraintSpacing\"] = 12] = \"pathConstraintSpacing\";\n  TimelineType2[TimelineType2[\"pathConstraintMix\"] = 13] = \"pathConstraintMix\";\n  TimelineType2[TimelineType2[\"twoColor\"] = 14] = \"twoColor\";\n  return TimelineType2;\n})(TimelineType || {});\nconst _CurveTimeline = class {\n  constructor(frameCount) {\n    if (frameCount <= 0)\n      throw new Error(`frameCount must be > 0: ${frameCount}`);\n    this.curves = Utils.newFloatArray((frameCount - 1) * _CurveTimeline.BEZIER_SIZE);\n  }\n  /** The number of key frames for this timeline. */\n  getFrameCount() {\n    return this.curves.length / _CurveTimeline.BEZIER_SIZE + 1;\n  }\n  /** Sets the specified key frame to linear interpolation. */\n  setLinear(frameIndex) {\n    this.curves[frameIndex * _CurveTimeline.BEZIER_SIZE] = _CurveTimeline.LINEAR;\n  }\n  /** Sets the specified key frame to stepped interpolation. */\n  setStepped(frameIndex) {\n    this.curves[frameIndex * _CurveTimeline.BEZIER_SIZE] = _CurveTimeline.STEPPED;\n  }\n  /** Returns the interpolation type for the specified key frame.\n   * @returns Linear is 0, stepped is 1, Bezier is 2. */\n  getCurveType(frameIndex) {\n    const index = frameIndex * _CurveTimeline.BEZIER_SIZE;\n    if (index == this.curves.length)\n      return _CurveTimeline.LINEAR;\n    const type = this.curves[index];\n    if (type == _CurveTimeline.LINEAR)\n      return _CurveTimeline.LINEAR;\n    if (type == _CurveTimeline.STEPPED)\n      return _CurveTimeline.STEPPED;\n    return _CurveTimeline.BEZIER;\n  }\n  /** Sets the specified key frame to Bezier interpolation. `cx1` and `cx2` are from 0 to 1,\n   * representing the percent of time between the two key frames. `cy1` and `cy2` are the percent of the\n   * difference between the key frame's values. */\n  setCurve(frameIndex, cx1, cy1, cx2, cy2) {\n    const tmpx = (-cx1 * 2 + cx2) * 0.03;\n    const tmpy = (-cy1 * 2 + cy2) * 0.03;\n    const dddfx = ((cx1 - cx2) * 3 + 1) * 6e-3;\n    const dddfy = ((cy1 - cy2) * 3 + 1) * 6e-3;\n    let ddfx = tmpx * 2 + dddfx;\n    let ddfy = tmpy * 2 + dddfy;\n    let dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667;\n    let dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667;\n    let i = frameIndex * _CurveTimeline.BEZIER_SIZE;\n    const curves = this.curves;\n    curves[i++] = _CurveTimeline.BEZIER;\n    let x = dfx;\n    let y = dfy;\n    for (let n = i + _CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n      curves[i] = x;\n      curves[i + 1] = y;\n      dfx += ddfx;\n      dfy += ddfy;\n      ddfx += dddfx;\n      ddfy += dddfy;\n      x += dfx;\n      y += dfy;\n    }\n  }\n  /** Returns the interpolated percentage for the specified key frame and linear percentage. */\n  getCurvePercent(frameIndex, percent) {\n    percent = MathUtils.clamp(percent, 0, 1);\n    const curves = this.curves;\n    let i = frameIndex * _CurveTimeline.BEZIER_SIZE;\n    const type = curves[i];\n    if (type == _CurveTimeline.LINEAR)\n      return percent;\n    if (type == _CurveTimeline.STEPPED)\n      return 0;\n    i++;\n    let x = 0;\n    for (let start = i, n = i + _CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n      x = curves[i];\n      if (x >= percent) {\n        let prevX;\n        let prevY;\n        if (i == start) {\n          prevX = 0;\n          prevY = 0;\n        } else {\n          prevX = curves[i - 2];\n          prevY = curves[i - 1];\n        }\n        return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX);\n      }\n    }\n    const y = curves[i - 1];\n    return y + (1 - y) * (percent - x) / (1 - x);\n  }\n};\nlet CurveTimeline = _CurveTimeline;\nCurveTimeline.LINEAR = 0;\nCurveTimeline.STEPPED = 1;\nCurveTimeline.BEZIER = 2;\nCurveTimeline.BEZIER_SIZE = 10 * 2 - 1;\nconst _RotateTimeline = class extends CurveTimeline {\n  // time, degrees, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount << 1);\n  }\n  getPropertyId() {\n    return (0 /* rotate */ << 24) + this.boneIndex;\n  }\n  /** Sets the time and angle of the specified keyframe. */\n  setFrame(frameIndex, time, degrees) {\n    frameIndex <<= 1;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _RotateTimeline.ROTATION] = degrees;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const frames = this.frames;\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.rotation = bone.data.rotation;\n          return;\n        case MixBlend.first:\n          const r2 = bone.data.rotation - bone.rotation;\n          bone.rotation += (r2 - (16384 - (16384.499999999996 - r2 / 360 | 0)) * 360) * alpha;\n      }\n      return;\n    }\n    if (time >= frames[frames.length - _RotateTimeline.ENTRIES]) {\n      let r2 = frames[frames.length + _RotateTimeline.PREV_ROTATION];\n      switch (blend) {\n        case MixBlend.setup:\n          bone.rotation = bone.data.rotation + r2 * alpha;\n          break;\n        case MixBlend.first:\n        case MixBlend.replace:\n          r2 += bone.data.rotation - bone.rotation;\n          r2 -= (16384 - (16384.499999999996 - r2 / 360 | 0)) * 360;\n        case MixBlend.add:\n          bone.rotation += r2 * alpha;\n      }\n      return;\n    }\n    const frame = Animation.binarySearch(frames, time, _RotateTimeline.ENTRIES);\n    const prevRotation = frames[frame + _RotateTimeline.PREV_ROTATION];\n    const frameTime = frames[frame];\n    const percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + _RotateTimeline.PREV_TIME] - frameTime));\n    let r = frames[frame + _RotateTimeline.ROTATION] - prevRotation;\n    r = prevRotation + (r - (16384 - (16384.499999999996 - r / 360 | 0)) * 360) * percent;\n    switch (blend) {\n      case MixBlend.setup:\n        bone.rotation = bone.data.rotation + (r - (16384 - (16384.499999999996 - r / 360 | 0)) * 360) * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        r += bone.data.rotation - bone.rotation;\n      case MixBlend.add:\n        bone.rotation += (r - (16384 - (16384.499999999996 - r / 360 | 0)) * 360) * alpha;\n    }\n  }\n};\nlet RotateTimeline = _RotateTimeline;\nRotateTimeline.ENTRIES = 2;\nRotateTimeline.PREV_TIME = -2;\nRotateTimeline.PREV_ROTATION = -1;\nRotateTimeline.ROTATION = 1;\nconst _TranslateTimeline = class extends CurveTimeline {\n  // time, x, y, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _TranslateTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (1 /* translate */ << 24) + this.boneIndex;\n  }\n  /** Sets the time in seconds, x, and y values for the specified key frame. */\n  setFrame(frameIndex, time, x, y) {\n    frameIndex *= _TranslateTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _TranslateTimeline.X] = x;\n    this.frames[frameIndex + _TranslateTimeline.Y] = y;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const frames = this.frames;\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.x = bone.data.x;\n          bone.y = bone.data.y;\n          return;\n        case MixBlend.first:\n          bone.x += (bone.data.x - bone.x) * alpha;\n          bone.y += (bone.data.y - bone.y) * alpha;\n      }\n      return;\n    }\n    let x = 0;\n    let y = 0;\n    if (time >= frames[frames.length - _TranslateTimeline.ENTRIES]) {\n      x = frames[frames.length + _TranslateTimeline.PREV_X];\n      y = frames[frames.length + _TranslateTimeline.PREV_Y];\n    } else {\n      const frame = Animation.binarySearch(frames, time, _TranslateTimeline.ENTRIES);\n      x = frames[frame + _TranslateTimeline.PREV_X];\n      y = frames[frame + _TranslateTimeline.PREV_Y];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(frame / _TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + _TranslateTimeline.PREV_TIME] - frameTime));\n      x += (frames[frame + _TranslateTimeline.X] - x) * percent;\n      y += (frames[frame + _TranslateTimeline.Y] - y) * percent;\n    }\n    switch (blend) {\n      case MixBlend.setup:\n        bone.x = bone.data.x + x * alpha;\n        bone.y = bone.data.y + y * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        bone.x += (bone.data.x + x - bone.x) * alpha;\n        bone.y += (bone.data.y + y - bone.y) * alpha;\n        break;\n      case MixBlend.add:\n        bone.x += x * alpha;\n        bone.y += y * alpha;\n    }\n  }\n};\nlet TranslateTimeline = _TranslateTimeline;\nTranslateTimeline.ENTRIES = 3;\nTranslateTimeline.PREV_TIME = -3;\nTranslateTimeline.PREV_X = -2;\nTranslateTimeline.PREV_Y = -1;\nTranslateTimeline.X = 1;\nTranslateTimeline.Y = 2;\nclass ScaleTimeline extends TranslateTimeline {\n  constructor(frameCount) {\n    super(frameCount);\n  }\n  getPropertyId() {\n    return (2 /* scale */ << 24) + this.boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const frames = this.frames;\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.scaleX = bone.data.scaleX;\n          bone.scaleY = bone.data.scaleY;\n          return;\n        case MixBlend.first:\n          bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n          bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n      }\n      return;\n    }\n    let x = 0;\n    let y = 0;\n    if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) {\n      x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX;\n      y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY;\n    } else {\n      const frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES);\n      x = frames[frame + ScaleTimeline.PREV_X];\n      y = frames[frame + ScaleTimeline.PREV_Y];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime));\n      x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX;\n      y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY;\n    }\n    if (alpha == 1) {\n      if (blend == MixBlend.add) {\n        bone.scaleX += x - bone.data.scaleX;\n        bone.scaleY += y - bone.data.scaleY;\n      } else {\n        bone.scaleX = x;\n        bone.scaleY = y;\n      }\n    } else {\n      let bx = 0;\n      let by = 0;\n      if (direction == MixDirection.mixOut) {\n        switch (blend) {\n          case MixBlend.setup:\n            bx = bone.data.scaleX;\n            by = bone.data.scaleY;\n            bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n            bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n            break;\n          case MixBlend.first:\n          case MixBlend.replace:\n            bx = bone.scaleX;\n            by = bone.scaleY;\n            bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n            bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n            break;\n          case MixBlend.add:\n            bx = bone.scaleX;\n            by = bone.scaleY;\n            bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;\n            bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;\n        }\n      } else {\n        switch (blend) {\n          case MixBlend.setup:\n            bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n            by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n            bone.scaleX = bx + (x - bx) * alpha;\n            bone.scaleY = by + (y - by) * alpha;\n            break;\n          case MixBlend.first:\n          case MixBlend.replace:\n            bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n            by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n            bone.scaleX = bx + (x - bx) * alpha;\n            bone.scaleY = by + (y - by) * alpha;\n            break;\n          case MixBlend.add:\n            bx = MathUtils.signum(x);\n            by = MathUtils.signum(y);\n            bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;\n            bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;\n        }\n      }\n    }\n  }\n}\nclass ShearTimeline extends TranslateTimeline {\n  constructor(frameCount) {\n    super(frameCount);\n  }\n  getPropertyId() {\n    return (3 /* shear */ << 24) + this.boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const frames = this.frames;\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.shearX = bone.data.shearX;\n          bone.shearY = bone.data.shearY;\n          return;\n        case MixBlend.first:\n          bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n          bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n      }\n      return;\n    }\n    let x = 0;\n    let y = 0;\n    if (time >= frames[frames.length - ShearTimeline.ENTRIES]) {\n      x = frames[frames.length + ShearTimeline.PREV_X];\n      y = frames[frames.length + ShearTimeline.PREV_Y];\n    } else {\n      const frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES);\n      x = frames[frame + ShearTimeline.PREV_X];\n      y = frames[frame + ShearTimeline.PREV_Y];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime));\n      x = x + (frames[frame + ShearTimeline.X] - x) * percent;\n      y = y + (frames[frame + ShearTimeline.Y] - y) * percent;\n    }\n    switch (blend) {\n      case MixBlend.setup:\n        bone.shearX = bone.data.shearX + x * alpha;\n        bone.shearY = bone.data.shearY + y * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n        bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n        break;\n      case MixBlend.add:\n        bone.shearX += x * alpha;\n        bone.shearY += y * alpha;\n    }\n  }\n}\nconst _ColorTimeline = class extends CurveTimeline {\n  // time, r, g, b, a, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _ColorTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (5 /* color */ << 24) + this.slotIndex;\n  }\n  /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n  setFrame(frameIndex, time, r, g, b, a) {\n    frameIndex *= _ColorTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _ColorTimeline.R] = r;\n    this.frames[frameIndex + _ColorTimeline.G] = g;\n    this.frames[frameIndex + _ColorTimeline.B] = b;\n    this.frames[frameIndex + _ColorTimeline.A] = a;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const slot = skeleton.slots[this.slotIndex];\n    if (!slot.bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          slot.color.setFromColor(slot.data.color);\n          return;\n        case MixBlend.first:\n          const color = slot.color;\n          const setup = slot.data.color;\n          color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n      }\n      return;\n    }\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    let a = 0;\n    if (time >= frames[frames.length - _ColorTimeline.ENTRIES]) {\n      const i = frames.length;\n      r = frames[i + _ColorTimeline.PREV_R];\n      g = frames[i + _ColorTimeline.PREV_G];\n      b = frames[i + _ColorTimeline.PREV_B];\n      a = frames[i + _ColorTimeline.PREV_A];\n    } else {\n      const frame = Animation.binarySearch(frames, time, _ColorTimeline.ENTRIES);\n      r = frames[frame + _ColorTimeline.PREV_R];\n      g = frames[frame + _ColorTimeline.PREV_G];\n      b = frames[frame + _ColorTimeline.PREV_B];\n      a = frames[frame + _ColorTimeline.PREV_A];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(frame / _ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + _ColorTimeline.PREV_TIME] - frameTime));\n      r += (frames[frame + _ColorTimeline.R] - r) * percent;\n      g += (frames[frame + _ColorTimeline.G] - g) * percent;\n      b += (frames[frame + _ColorTimeline.B] - b) * percent;\n      a += (frames[frame + _ColorTimeline.A] - a) * percent;\n    }\n    if (alpha == 1)\n      slot.color.set(r, g, b, a);\n    else {\n      const color = slot.color;\n      if (blend == MixBlend.setup)\n        color.setFromColor(slot.data.color);\n      color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n    }\n  }\n};\nlet ColorTimeline = _ColorTimeline;\nColorTimeline.ENTRIES = 5;\nColorTimeline.PREV_TIME = -5;\nColorTimeline.PREV_R = -4;\nColorTimeline.PREV_G = -3;\nColorTimeline.PREV_B = -2;\nColorTimeline.PREV_A = -1;\nColorTimeline.R = 1;\nColorTimeline.G = 2;\nColorTimeline.B = 3;\nColorTimeline.A = 4;\nconst _TwoColorTimeline = class extends CurveTimeline {\n  // time, r, g, b, a, r2, g2, b2, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _TwoColorTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (14 /* twoColor */ << 24) + this.slotIndex;\n  }\n  /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n  setFrame(frameIndex, time, r, g, b, a, r2, g2, b2) {\n    frameIndex *= _TwoColorTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _TwoColorTimeline.R] = r;\n    this.frames[frameIndex + _TwoColorTimeline.G] = g;\n    this.frames[frameIndex + _TwoColorTimeline.B] = b;\n    this.frames[frameIndex + _TwoColorTimeline.A] = a;\n    this.frames[frameIndex + _TwoColorTimeline.R2] = r2;\n    this.frames[frameIndex + _TwoColorTimeline.G2] = g2;\n    this.frames[frameIndex + _TwoColorTimeline.B2] = b2;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const slot = skeleton.slots[this.slotIndex];\n    if (!slot.bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          slot.color.setFromColor(slot.data.color);\n          slot.darkColor.setFromColor(slot.data.darkColor);\n          return;\n        case MixBlend.first:\n          const light = slot.color;\n          const dark = slot.darkColor;\n          const setupLight = slot.data.color;\n          const setupDark = slot.data.darkColor;\n          light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n          dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0);\n      }\n      return;\n    }\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    let a = 0;\n    let r2 = 0;\n    let g2 = 0;\n    let b2 = 0;\n    if (time >= frames[frames.length - _TwoColorTimeline.ENTRIES]) {\n      const i = frames.length;\n      r = frames[i + _TwoColorTimeline.PREV_R];\n      g = frames[i + _TwoColorTimeline.PREV_G];\n      b = frames[i + _TwoColorTimeline.PREV_B];\n      a = frames[i + _TwoColorTimeline.PREV_A];\n      r2 = frames[i + _TwoColorTimeline.PREV_R2];\n      g2 = frames[i + _TwoColorTimeline.PREV_G2];\n      b2 = frames[i + _TwoColorTimeline.PREV_B2];\n    } else {\n      const frame = Animation.binarySearch(frames, time, _TwoColorTimeline.ENTRIES);\n      r = frames[frame + _TwoColorTimeline.PREV_R];\n      g = frames[frame + _TwoColorTimeline.PREV_G];\n      b = frames[frame + _TwoColorTimeline.PREV_B];\n      a = frames[frame + _TwoColorTimeline.PREV_A];\n      r2 = frames[frame + _TwoColorTimeline.PREV_R2];\n      g2 = frames[frame + _TwoColorTimeline.PREV_G2];\n      b2 = frames[frame + _TwoColorTimeline.PREV_B2];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(frame / _TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + _TwoColorTimeline.PREV_TIME] - frameTime));\n      r += (frames[frame + _TwoColorTimeline.R] - r) * percent;\n      g += (frames[frame + _TwoColorTimeline.G] - g) * percent;\n      b += (frames[frame + _TwoColorTimeline.B] - b) * percent;\n      a += (frames[frame + _TwoColorTimeline.A] - a) * percent;\n      r2 += (frames[frame + _TwoColorTimeline.R2] - r2) * percent;\n      g2 += (frames[frame + _TwoColorTimeline.G2] - g2) * percent;\n      b2 += (frames[frame + _TwoColorTimeline.B2] - b2) * percent;\n    }\n    if (alpha == 1) {\n      slot.color.set(r, g, b, a);\n      slot.darkColor.set(r2, g2, b2, 1);\n    } else {\n      const light = slot.color;\n      const dark = slot.darkColor;\n      if (blend == MixBlend.setup) {\n        light.setFromColor(slot.data.color);\n        dark.setFromColor(slot.data.darkColor);\n      }\n      light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n      dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0);\n    }\n  }\n};\nlet TwoColorTimeline = _TwoColorTimeline;\nTwoColorTimeline.ENTRIES = 8;\nTwoColorTimeline.PREV_TIME = -8;\nTwoColorTimeline.PREV_R = -7;\nTwoColorTimeline.PREV_G = -6;\nTwoColorTimeline.PREV_B = -5;\nTwoColorTimeline.PREV_A = -4;\nTwoColorTimeline.PREV_R2 = -3;\nTwoColorTimeline.PREV_G2 = -2;\nTwoColorTimeline.PREV_B2 = -1;\nTwoColorTimeline.R = 1;\nTwoColorTimeline.G = 2;\nTwoColorTimeline.B = 3;\nTwoColorTimeline.A = 4;\nTwoColorTimeline.R2 = 5;\nTwoColorTimeline.G2 = 6;\nTwoColorTimeline.B2 = 7;\nclass AttachmentTimeline {\n  constructor(frameCount) {\n    this.frames = Utils.newFloatArray(frameCount);\n    this.attachmentNames = new Array(frameCount);\n  }\n  getPropertyId() {\n    return (4 /* attachment */ << 24) + this.slotIndex;\n  }\n  /** The number of key frames for this timeline. */\n  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time in seconds and the attachment name for the specified key frame. */\n  setFrame(frameIndex, time, attachmentName) {\n    this.frames[frameIndex] = time;\n    this.attachmentNames[frameIndex] = attachmentName;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const slot = skeleton.slots[this.slotIndex];\n    if (!slot.bone.active)\n      return;\n    if (direction == MixDirection.mixOut) {\n      if (blend == MixBlend.setup)\n        this.setAttachment(skeleton, slot, slot.data.attachmentName);\n      return;\n    }\n    const frames = this.frames;\n    if (time < frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first)\n        this.setAttachment(skeleton, slot, slot.data.attachmentName);\n      return;\n    }\n    let frameIndex = 0;\n    if (time >= frames[frames.length - 1])\n      frameIndex = frames.length - 1;\n    else\n      frameIndex = Animation.binarySearch(frames, time, 1) - 1;\n    const attachmentName = this.attachmentNames[frameIndex];\n    skeleton.slots[this.slotIndex].setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n  }\n  setAttachment(skeleton, slot, attachmentName) {\n    slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n  }\n}\nlet zeros = null;\nclass DeformTimeline extends CurveTimeline {\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount);\n    this.frameVertices = new Array(frameCount);\n    if (zeros == null)\n      zeros = Utils.newFloatArray(64);\n  }\n  getPropertyId() {\n    return (6 /* deform */ << 27) + Number(this.attachment.id) + this.slotIndex;\n  }\n  /** Sets the time in seconds and the vertices for the specified key frame.\n   * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */\n  setFrame(frameIndex, time, vertices) {\n    this.frames[frameIndex] = time;\n    this.frameVertices[frameIndex] = vertices;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const slot = skeleton.slots[this.slotIndex];\n    if (!slot.bone.active)\n      return;\n    const slotAttachment = slot.getAttachment();\n    if (!(slotAttachment instanceof VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment))\n      return;\n    const deformArray = slot.deform;\n    if (deformArray.length == 0)\n      blend = MixBlend.setup;\n    const frameVertices = this.frameVertices;\n    const vertexCount = frameVertices[0].length;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      const vertexAttachment = slotAttachment;\n      switch (blend) {\n        case MixBlend.setup:\n          deformArray.length = 0;\n          return;\n        case MixBlend.first:\n          if (alpha == 1) {\n            deformArray.length = 0;\n            break;\n          }\n          const deform2 = Utils.setArraySize(deformArray, vertexCount);\n          if (vertexAttachment.bones == null) {\n            const setupVertices = vertexAttachment.vertices;\n            for (let i = 0; i < vertexCount; i++)\n              deform2[i] += (setupVertices[i] - deform2[i]) * alpha;\n          } else {\n            alpha = 1 - alpha;\n            for (let i = 0; i < vertexCount; i++)\n              deform2[i] *= alpha;\n          }\n      }\n      return;\n    }\n    const deform = Utils.setArraySize(deformArray, vertexCount);\n    if (time >= frames[frames.length - 1]) {\n      const lastVertices = frameVertices[frames.length - 1];\n      if (alpha == 1) {\n        if (blend == MixBlend.add) {\n          const vertexAttachment = slotAttachment;\n          if (vertexAttachment.bones == null) {\n            const setupVertices = vertexAttachment.vertices;\n            for (let i = 0; i < vertexCount; i++) {\n              deform[i] += lastVertices[i] - setupVertices[i];\n            }\n          } else {\n            for (let i = 0; i < vertexCount; i++)\n              deform[i] += lastVertices[i];\n          }\n        } else {\n          Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n        }\n      } else {\n        switch (blend) {\n          case MixBlend.setup: {\n            const vertexAttachment2 = slotAttachment;\n            if (vertexAttachment2.bones == null) {\n              const setupVertices = vertexAttachment2.vertices;\n              for (let i = 0; i < vertexCount; i++) {\n                const setup = setupVertices[i];\n                deform[i] = setup + (lastVertices[i] - setup) * alpha;\n              }\n            } else {\n              for (let i = 0; i < vertexCount; i++)\n                deform[i] = lastVertices[i] * alpha;\n            }\n            break;\n          }\n          case MixBlend.first:\n          case MixBlend.replace:\n            for (let i = 0; i < vertexCount; i++)\n              deform[i] += (lastVertices[i] - deform[i]) * alpha;\n            break;\n          case MixBlend.add:\n            const vertexAttachment = slotAttachment;\n            if (vertexAttachment.bones == null) {\n              const setupVertices = vertexAttachment.vertices;\n              for (let i = 0; i < vertexCount; i++) {\n                deform[i] += (lastVertices[i] - setupVertices[i]) * alpha;\n              }\n            } else {\n              for (let i = 0; i < vertexCount; i++)\n                deform[i] += lastVertices[i] * alpha;\n            }\n        }\n      }\n      return;\n    }\n    const frame = Animation.binarySearch(frames, time);\n    const prevVertices = frameVertices[frame - 1];\n    const nextVertices = frameVertices[frame];\n    const frameTime = frames[frame];\n    const percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime));\n    if (alpha == 1) {\n      if (blend == MixBlend.add) {\n        const vertexAttachment = slotAttachment;\n        if (vertexAttachment.bones == null) {\n          const setupVertices = vertexAttachment.vertices;\n          for (let i = 0; i < vertexCount; i++) {\n            const prev = prevVertices[i];\n            deform[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i];\n          }\n        } else {\n          for (let i = 0; i < vertexCount; i++) {\n            const prev = prevVertices[i];\n            deform[i] += prev + (nextVertices[i] - prev) * percent;\n          }\n        }\n      } else {\n        for (let i = 0; i < vertexCount; i++) {\n          const prev = prevVertices[i];\n          deform[i] = prev + (nextVertices[i] - prev) * percent;\n        }\n      }\n    } else {\n      switch (blend) {\n        case MixBlend.setup: {\n          const vertexAttachment2 = slotAttachment;\n          if (vertexAttachment2.bones == null) {\n            const setupVertices = vertexAttachment2.vertices;\n            for (let i = 0; i < vertexCount; i++) {\n              const prev = prevVertices[i];\n              const setup = setupVertices[i];\n              deform[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha;\n            }\n          } else {\n            for (let i = 0; i < vertexCount; i++) {\n              const prev = prevVertices[i];\n              deform[i] = (prev + (nextVertices[i] - prev) * percent) * alpha;\n            }\n          }\n          break;\n        }\n        case MixBlend.first:\n        case MixBlend.replace:\n          for (let i = 0; i < vertexCount; i++) {\n            const prev = prevVertices[i];\n            deform[i] += (prev + (nextVertices[i] - prev) * percent - deform[i]) * alpha;\n          }\n          break;\n        case MixBlend.add:\n          const vertexAttachment = slotAttachment;\n          if (vertexAttachment.bones == null) {\n            const setupVertices = vertexAttachment.vertices;\n            for (let i = 0; i < vertexCount; i++) {\n              const prev = prevVertices[i];\n              deform[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha;\n            }\n          } else {\n            for (let i = 0; i < vertexCount; i++) {\n              const prev = prevVertices[i];\n              deform[i] += (prev + (nextVertices[i] - prev) * percent) * alpha;\n            }\n          }\n      }\n    }\n  }\n}\nclass EventTimeline {\n  constructor(frameCount) {\n    this.frames = Utils.newFloatArray(frameCount);\n    this.events = new Array(frameCount);\n  }\n  getPropertyId() {\n    return 7 /* event */ << 24;\n  }\n  /** The number of key frames for this timeline. */\n  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time in seconds and the event for the specified key frame. */\n  setFrame(frameIndex, event) {\n    this.frames[frameIndex] = event.time;\n    this.events[frameIndex] = event;\n  }\n  /** Fires events for frames > `lastTime` and <= `time`. */\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    if (firedEvents == null)\n      return;\n    const frames = this.frames;\n    const frameCount = this.frames.length;\n    if (lastTime > time) {\n      this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n      lastTime = -1;\n    } else if (lastTime >= frames[frameCount - 1])\n      return;\n    if (time < frames[0])\n      return;\n    let frame = 0;\n    if (lastTime < frames[0])\n      frame = 0;\n    else {\n      frame = Animation.binarySearch(frames, lastTime);\n      const frameTime = frames[frame];\n      while (frame > 0) {\n        if (frames[frame - 1] != frameTime)\n          break;\n        frame--;\n      }\n    }\n    for (; frame < frameCount && time >= frames[frame]; frame++)\n      firedEvents.push(this.events[frame]);\n  }\n}\nclass DrawOrderTimeline {\n  constructor(frameCount) {\n    this.frames = Utils.newFloatArray(frameCount);\n    this.drawOrders = new Array(frameCount);\n  }\n  getPropertyId() {\n    return 8 /* drawOrder */ << 24;\n  }\n  /** The number of key frames for this timeline. */\n  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time in seconds and the draw order for the specified key frame.\n   * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose\n   *           draw order. */\n  setFrame(frameIndex, time, drawOrder) {\n    this.frames[frameIndex] = time;\n    this.drawOrders[frameIndex] = drawOrder;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const drawOrder = skeleton.drawOrder;\n    const slots = skeleton.slots;\n    if (direction == MixDirection.mixOut && blend == MixBlend.setup) {\n      Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n      return;\n    }\n    const frames = this.frames;\n    if (time < frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first)\n        Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n      return;\n    }\n    let frame = 0;\n    if (time >= frames[frames.length - 1])\n      frame = frames.length - 1;\n    else\n      frame = Animation.binarySearch(frames, time) - 1;\n    const drawOrderToSetupIndex = this.drawOrders[frame];\n    if (drawOrderToSetupIndex == null)\n      Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length);\n    else {\n      for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n        drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n    }\n  }\n}\nconst _IkConstraintTimeline = class extends CurveTimeline {\n  // time, mix, softness, bendDirection, compress, stretch, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _IkConstraintTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (9 /* ikConstraint */ << 24) + this.ikConstraintIndex;\n  }\n  /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */\n  setFrame(frameIndex, time, mix, softness, bendDirection, compress, stretch) {\n    frameIndex *= _IkConstraintTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _IkConstraintTimeline.MIX] = mix;\n    this.frames[frameIndex + _IkConstraintTimeline.SOFTNESS] = softness;\n    this.frames[frameIndex + _IkConstraintTimeline.BEND_DIRECTION] = bendDirection;\n    this.frames[frameIndex + _IkConstraintTimeline.COMPRESS] = compress ? 1 : 0;\n    this.frames[frameIndex + _IkConstraintTimeline.STRETCH] = stretch ? 1 : 0;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const frames = this.frames;\n    const constraint = skeleton.ikConstraints[this.ikConstraintIndex];\n    if (!constraint.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.mix = constraint.data.mix;\n          constraint.softness = constraint.data.softness;\n          constraint.bendDirection = constraint.data.bendDirection;\n          constraint.compress = constraint.data.compress;\n          constraint.stretch = constraint.data.stretch;\n          return;\n        case MixBlend.first:\n          constraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n          constraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n          constraint.bendDirection = constraint.data.bendDirection;\n          constraint.compress = constraint.data.compress;\n          constraint.stretch = constraint.data.stretch;\n      }\n      return;\n    }\n    if (time >= frames[frames.length - _IkConstraintTimeline.ENTRIES]) {\n      if (blend == MixBlend.setup) {\n        constraint.mix = constraint.data.mix + (frames[frames.length + _IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha;\n        constraint.softness = constraint.data.softness + (frames[frames.length + _IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha;\n        if (direction == MixDirection.mixOut) {\n          constraint.bendDirection = constraint.data.bendDirection;\n          constraint.compress = constraint.data.compress;\n          constraint.stretch = constraint.data.stretch;\n        } else {\n          constraint.bendDirection = frames[frames.length + _IkConstraintTimeline.PREV_BEND_DIRECTION];\n          constraint.compress = frames[frames.length + _IkConstraintTimeline.PREV_COMPRESS] != 0;\n          constraint.stretch = frames[frames.length + _IkConstraintTimeline.PREV_STRETCH] != 0;\n        }\n      } else {\n        constraint.mix += (frames[frames.length + _IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha;\n        constraint.softness += (frames[frames.length + _IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha;\n        if (direction == MixDirection.mixIn) {\n          constraint.bendDirection = frames[frames.length + _IkConstraintTimeline.PREV_BEND_DIRECTION];\n          constraint.compress = frames[frames.length + _IkConstraintTimeline.PREV_COMPRESS] != 0;\n          constraint.stretch = frames[frames.length + _IkConstraintTimeline.PREV_STRETCH] != 0;\n        }\n      }\n      return;\n    }\n    const frame = Animation.binarySearch(frames, time, _IkConstraintTimeline.ENTRIES);\n    const mix = frames[frame + _IkConstraintTimeline.PREV_MIX];\n    const softness = frames[frame + _IkConstraintTimeline.PREV_SOFTNESS];\n    const frameTime = frames[frame];\n    const percent = this.getCurvePercent(frame / _IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + _IkConstraintTimeline.PREV_TIME] - frameTime));\n    if (blend == MixBlend.setup) {\n      constraint.mix = constraint.data.mix + (mix + (frames[frame + _IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha;\n      constraint.softness = constraint.data.softness + (softness + (frames[frame + _IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha;\n      if (direction == MixDirection.mixOut) {\n        constraint.bendDirection = constraint.data.bendDirection;\n        constraint.compress = constraint.data.compress;\n        constraint.stretch = constraint.data.stretch;\n      } else {\n        constraint.bendDirection = frames[frame + _IkConstraintTimeline.PREV_BEND_DIRECTION];\n        constraint.compress = frames[frame + _IkConstraintTimeline.PREV_COMPRESS] != 0;\n        constraint.stretch = frames[frame + _IkConstraintTimeline.PREV_STRETCH] != 0;\n      }\n    } else {\n      constraint.mix += (mix + (frames[frame + _IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha;\n      constraint.softness += (softness + (frames[frame + _IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha;\n      if (direction == MixDirection.mixIn) {\n        constraint.bendDirection = frames[frame + _IkConstraintTimeline.PREV_BEND_DIRECTION];\n        constraint.compress = frames[frame + _IkConstraintTimeline.PREV_COMPRESS] != 0;\n        constraint.stretch = frames[frame + _IkConstraintTimeline.PREV_STRETCH] != 0;\n      }\n    }\n  }\n};\nlet IkConstraintTimeline = _IkConstraintTimeline;\nIkConstraintTimeline.ENTRIES = 6;\nIkConstraintTimeline.PREV_TIME = -6;\nIkConstraintTimeline.PREV_MIX = -5;\nIkConstraintTimeline.PREV_SOFTNESS = -4;\nIkConstraintTimeline.PREV_BEND_DIRECTION = -3;\nIkConstraintTimeline.PREV_COMPRESS = -2;\nIkConstraintTimeline.PREV_STRETCH = -1;\nIkConstraintTimeline.MIX = 1;\nIkConstraintTimeline.SOFTNESS = 2;\nIkConstraintTimeline.BEND_DIRECTION = 3;\nIkConstraintTimeline.COMPRESS = 4;\nIkConstraintTimeline.STRETCH = 5;\nconst _TransformConstraintTimeline = class extends CurveTimeline {\n  // time, rotate mix, translate mix, scale mix, shear mix, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _TransformConstraintTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (10 /* transformConstraint */ << 24) + this.transformConstraintIndex;\n  }\n  /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */\n  setFrame(frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) {\n    frameIndex *= _TransformConstraintTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _TransformConstraintTimeline.ROTATE] = rotateMix;\n    this.frames[frameIndex + _TransformConstraintTimeline.TRANSLATE] = translateMix;\n    this.frames[frameIndex + _TransformConstraintTimeline.SCALE] = scaleMix;\n    this.frames[frameIndex + _TransformConstraintTimeline.SHEAR] = shearMix;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const frames = this.frames;\n    const constraint = skeleton.transformConstraints[this.transformConstraintIndex];\n    if (!constraint.active)\n      return;\n    if (time < frames[0]) {\n      const data = constraint.data;\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.rotateMix = data.rotateMix;\n          constraint.translateMix = data.translateMix;\n          constraint.scaleMix = data.scaleMix;\n          constraint.shearMix = data.shearMix;\n          return;\n        case MixBlend.first:\n          constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha;\n          constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha;\n          constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha;\n          constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha;\n      }\n      return;\n    }\n    let rotate = 0;\n    let translate = 0;\n    let scale = 0;\n    let shear = 0;\n    if (time >= frames[frames.length - _TransformConstraintTimeline.ENTRIES]) {\n      const i = frames.length;\n      rotate = frames[i + _TransformConstraintTimeline.PREV_ROTATE];\n      translate = frames[i + _TransformConstraintTimeline.PREV_TRANSLATE];\n      scale = frames[i + _TransformConstraintTimeline.PREV_SCALE];\n      shear = frames[i + _TransformConstraintTimeline.PREV_SHEAR];\n    } else {\n      const frame = Animation.binarySearch(frames, time, _TransformConstraintTimeline.ENTRIES);\n      rotate = frames[frame + _TransformConstraintTimeline.PREV_ROTATE];\n      translate = frames[frame + _TransformConstraintTimeline.PREV_TRANSLATE];\n      scale = frames[frame + _TransformConstraintTimeline.PREV_SCALE];\n      shear = frames[frame + _TransformConstraintTimeline.PREV_SHEAR];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(\n        frame / _TransformConstraintTimeline.ENTRIES - 1,\n        1 - (time - frameTime) / (frames[frame + _TransformConstraintTimeline.PREV_TIME] - frameTime)\n      );\n      rotate += (frames[frame + _TransformConstraintTimeline.ROTATE] - rotate) * percent;\n      translate += (frames[frame + _TransformConstraintTimeline.TRANSLATE] - translate) * percent;\n      scale += (frames[frame + _TransformConstraintTimeline.SCALE] - scale) * percent;\n      shear += (frames[frame + _TransformConstraintTimeline.SHEAR] - shear) * percent;\n    }\n    if (blend == MixBlend.setup) {\n      const data = constraint.data;\n      constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha;\n      constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha;\n      constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha;\n      constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha;\n    } else {\n      constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n      constraint.translateMix += (translate - constraint.translateMix) * alpha;\n      constraint.scaleMix += (scale - constraint.scaleMix) * alpha;\n      constraint.shearMix += (shear - constraint.shearMix) * alpha;\n    }\n  }\n};\nlet TransformConstraintTimeline = _TransformConstraintTimeline;\nTransformConstraintTimeline.ENTRIES = 5;\nTransformConstraintTimeline.PREV_TIME = -5;\nTransformConstraintTimeline.PREV_ROTATE = -4;\nTransformConstraintTimeline.PREV_TRANSLATE = -3;\nTransformConstraintTimeline.PREV_SCALE = -2;\nTransformConstraintTimeline.PREV_SHEAR = -1;\nTransformConstraintTimeline.ROTATE = 1;\nTransformConstraintTimeline.TRANSLATE = 2;\nTransformConstraintTimeline.SCALE = 3;\nTransformConstraintTimeline.SHEAR = 4;\nconst _PathConstraintPositionTimeline = class extends CurveTimeline {\n  // time, position, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _PathConstraintPositionTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (11 /* pathConstraintPosition */ << 24) + this.pathConstraintIndex;\n  }\n  /** Sets the time in seconds and path constraint position for the specified key frame. */\n  setFrame(frameIndex, time, value) {\n    frameIndex *= _PathConstraintPositionTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _PathConstraintPositionTimeline.VALUE] = value;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const frames = this.frames;\n    const constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n    if (!constraint.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.position = constraint.data.position;\n          return;\n        case MixBlend.first:\n          constraint.position += (constraint.data.position - constraint.position) * alpha;\n      }\n      return;\n    }\n    let position = 0;\n    if (time >= frames[frames.length - _PathConstraintPositionTimeline.ENTRIES])\n      position = frames[frames.length + _PathConstraintPositionTimeline.PREV_VALUE];\n    else {\n      const frame = Animation.binarySearch(frames, time, _PathConstraintPositionTimeline.ENTRIES);\n      position = frames[frame + _PathConstraintPositionTimeline.PREV_VALUE];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(\n        frame / _PathConstraintPositionTimeline.ENTRIES - 1,\n        1 - (time - frameTime) / (frames[frame + _PathConstraintPositionTimeline.PREV_TIME] - frameTime)\n      );\n      position += (frames[frame + _PathConstraintPositionTimeline.VALUE] - position) * percent;\n    }\n    if (blend == MixBlend.setup)\n      constraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n    else\n      constraint.position += (position - constraint.position) * alpha;\n  }\n};\nlet PathConstraintPositionTimeline = _PathConstraintPositionTimeline;\nPathConstraintPositionTimeline.ENTRIES = 2;\nPathConstraintPositionTimeline.PREV_TIME = -2;\nPathConstraintPositionTimeline.PREV_VALUE = -1;\nPathConstraintPositionTimeline.VALUE = 1;\nclass PathConstraintSpacingTimeline extends PathConstraintPositionTimeline {\n  constructor(frameCount) {\n    super(frameCount);\n  }\n  getPropertyId() {\n    return (12 /* pathConstraintSpacing */ << 24) + this.pathConstraintIndex;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const frames = this.frames;\n    const constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n    if (!constraint.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.spacing = constraint.data.spacing;\n          return;\n        case MixBlend.first:\n          constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n      }\n      return;\n    }\n    let spacing = 0;\n    if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES])\n      spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE];\n    else {\n      const frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES);\n      spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(\n        frame / PathConstraintSpacingTimeline.ENTRIES - 1,\n        1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)\n      );\n      spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent;\n    }\n    if (blend == MixBlend.setup)\n      constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n    else\n      constraint.spacing += (spacing - constraint.spacing) * alpha;\n  }\n}\nconst _PathConstraintMixTimeline = class extends CurveTimeline {\n  // time, rotate mix, translate mix, ...\n  constructor(frameCount) {\n    super(frameCount);\n    this.frames = Utils.newFloatArray(frameCount * _PathConstraintMixTimeline.ENTRIES);\n  }\n  getPropertyId() {\n    return (13 /* pathConstraintMix */ << 24) + this.pathConstraintIndex;\n  }\n  /** The time in seconds, rotate mix, and translate mix for the specified key frame. */\n  setFrame(frameIndex, time, rotateMix, translateMix) {\n    frameIndex *= _PathConstraintMixTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _PathConstraintMixTimeline.ROTATE] = rotateMix;\n    this.frames[frameIndex + _PathConstraintMixTimeline.TRANSLATE] = translateMix;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const frames = this.frames;\n    const constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n    if (!constraint.active)\n      return;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.rotateMix = constraint.data.rotateMix;\n          constraint.translateMix = constraint.data.translateMix;\n          return;\n        case MixBlend.first:\n          constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha;\n          constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha;\n      }\n      return;\n    }\n    let rotate = 0;\n    let translate = 0;\n    if (time >= frames[frames.length - _PathConstraintMixTimeline.ENTRIES]) {\n      rotate = frames[frames.length + _PathConstraintMixTimeline.PREV_ROTATE];\n      translate = frames[frames.length + _PathConstraintMixTimeline.PREV_TRANSLATE];\n    } else {\n      const frame = Animation.binarySearch(frames, time, _PathConstraintMixTimeline.ENTRIES);\n      rotate = frames[frame + _PathConstraintMixTimeline.PREV_ROTATE];\n      translate = frames[frame + _PathConstraintMixTimeline.PREV_TRANSLATE];\n      const frameTime = frames[frame];\n      const percent = this.getCurvePercent(\n        frame / _PathConstraintMixTimeline.ENTRIES - 1,\n        1 - (time - frameTime) / (frames[frame + _PathConstraintMixTimeline.PREV_TIME] - frameTime)\n      );\n      rotate += (frames[frame + _PathConstraintMixTimeline.ROTATE] - rotate) * percent;\n      translate += (frames[frame + _PathConstraintMixTimeline.TRANSLATE] - translate) * percent;\n    }\n    if (blend == MixBlend.setup) {\n      constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha;\n      constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha;\n    } else {\n      constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n      constraint.translateMix += (translate - constraint.translateMix) * alpha;\n    }\n  }\n};\nlet PathConstraintMixTimeline = _PathConstraintMixTimeline;\nPathConstraintMixTimeline.ENTRIES = 3;\nPathConstraintMixTimeline.PREV_TIME = -3;\nPathConstraintMixTimeline.PREV_ROTATE = -2;\nPathConstraintMixTimeline.PREV_TRANSLATE = -1;\nPathConstraintMixTimeline.ROTATE = 1;\nPathConstraintMixTimeline.TRANSLATE = 2;\n\nexport { Animation, AttachmentTimeline, ColorTimeline, CurveTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, RotateTimeline, ScaleTimeline, ShearTimeline, TimelineType, TransformConstraintTimeline, TranslateTimeline, TwoColorTimeline };\n//# sourceMappingURL=Animation.mjs.map\n","import { IntSet, Pool, MixBlend, Utils, MixDirection, MathUtils } from '@pixi-spine/base';\nimport { Animation, AttachmentTimeline, RotateTimeline, DrawOrderTimeline, EventTimeline } from './Animation.mjs';\n\nconst _AnimationState = class {\n  constructor(data) {\n    /** The list of tracks that currently have animations, which may contain null entries. */\n    this.tracks = new Array();\n    /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower\n     * or faster. Defaults to 1.\n     *\n     * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */\n    this.timeScale = 1;\n    this.unkeyedState = 0;\n    this.events = new Array();\n    this.listeners = new Array();\n    this.queue = new EventQueue(this);\n    this.propertyIDs = new IntSet();\n    this.animationsChanged = false;\n    this.trackEntryPool = new Pool(() => new TrackEntry());\n    this.data = data;\n  }\n  /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */\n  update(delta) {\n    delta *= this.timeScale;\n    const tracks = this.tracks;\n    for (let i = 0, n = tracks.length; i < n; i++) {\n      const current = tracks[i];\n      if (current == null)\n        continue;\n      current.animationLast = current.nextAnimationLast;\n      current.trackLast = current.nextTrackLast;\n      let currentDelta = delta * current.timeScale;\n      if (current.delay > 0) {\n        current.delay -= currentDelta;\n        if (current.delay > 0)\n          continue;\n        currentDelta = -current.delay;\n        current.delay = 0;\n      }\n      let next = current.next;\n      if (next != null) {\n        const nextTime = current.trackLast - next.delay;\n        if (nextTime >= 0) {\n          next.delay = 0;\n          next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n          current.trackTime += currentDelta;\n          this.setCurrent(i, next, true);\n          while (next.mixingFrom != null) {\n            next.mixTime += delta;\n            next = next.mixingFrom;\n          }\n          continue;\n        }\n      } else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) {\n        tracks[i] = null;\n        this.queue.end(current);\n        this.disposeNext(current);\n        continue;\n      }\n      if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) {\n        let from = current.mixingFrom;\n        current.mixingFrom = null;\n        if (from != null)\n          from.mixingTo = null;\n        while (from != null) {\n          this.queue.end(from);\n          from = from.mixingFrom;\n        }\n      }\n      current.trackTime += currentDelta;\n    }\n    this.queue.drain();\n  }\n  /** Returns true when all mixing from entries are complete. */\n  updateMixingFrom(to, delta) {\n    const from = to.mixingFrom;\n    if (from == null)\n      return true;\n    const finished = this.updateMixingFrom(from, delta);\n    from.animationLast = from.nextAnimationLast;\n    from.trackLast = from.nextTrackLast;\n    if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {\n      if (from.totalAlpha == 0 || to.mixDuration == 0) {\n        to.mixingFrom = from.mixingFrom;\n        if (from.mixingFrom != null)\n          from.mixingFrom.mixingTo = to;\n        to.interruptAlpha = from.interruptAlpha;\n        this.queue.end(from);\n      }\n      return finished;\n    }\n    from.trackTime += delta * from.timeScale;\n    to.mixTime += delta;\n    return false;\n  }\n  /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the\n   * animation state can be applied to multiple skeletons to pose them identically.\n   * @returns True if any animations were applied. */\n  apply(skeleton) {\n    if (skeleton == null)\n      throw new Error(\"skeleton cannot be null.\");\n    if (this.animationsChanged)\n      this._animationsChanged();\n    const events = this.events;\n    const tracks = this.tracks;\n    let applied = false;\n    for (let i = 0, n = tracks.length; i < n; i++) {\n      const current = tracks[i];\n      if (current == null || current.delay > 0)\n        continue;\n      applied = true;\n      const blend = i == 0 ? MixBlend.first : current.mixBlend;\n      let mix = current.alpha;\n      if (current.mixingFrom != null)\n        mix *= this.applyMixingFrom(current, skeleton, blend);\n      else if (current.trackTime >= current.trackEnd && current.next == null)\n        mix = 0;\n      const animationLast = current.animationLast;\n      const animationTime = current.getAnimationTime();\n      const timelineCount = current.animation.timelines.length;\n      const timelines = current.animation.timelines;\n      if (i == 0 && mix == 1 || blend == MixBlend.add) {\n        for (let ii = 0; ii < timelineCount; ii++) {\n          Utils.webkit602BugfixHelper(mix, blend);\n          const timeline = timelines[ii];\n          if (timeline instanceof AttachmentTimeline)\n            this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true);\n          else\n            timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, MixDirection.mixIn);\n        }\n      } else {\n        const timelineMode = current.timelineMode;\n        const firstFrame = current.timelinesRotation.length == 0;\n        if (firstFrame)\n          Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null);\n        const timelinesRotation = current.timelinesRotation;\n        for (let ii = 0; ii < timelineCount; ii++) {\n          const timeline = timelines[ii];\n          const timelineBlend = timelineMode[ii] == _AnimationState.SUBSEQUENT ? blend : MixBlend.setup;\n          if (timeline instanceof RotateTimeline) {\n            this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame);\n          } else if (timeline instanceof AttachmentTimeline) {\n            this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true);\n          } else {\n            Utils.webkit602BugfixHelper(mix, blend);\n            timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, MixDirection.mixIn);\n          }\n        }\n      }\n      this.queueEvents(current, animationTime);\n      events.length = 0;\n      current.nextAnimationLast = animationTime;\n      current.nextTrackLast = current.trackTime;\n    }\n    const setupState = this.unkeyedState + _AnimationState.SETUP;\n    const slots = skeleton.slots;\n    for (let i = 0, n = skeleton.slots.length; i < n; i++) {\n      const slot = slots[i];\n      if (slot.attachmentState == setupState) {\n        const attachmentName = slot.data.attachmentName;\n        slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n      }\n    }\n    this.unkeyedState += 2;\n    this.queue.drain();\n    return applied;\n  }\n  applyMixingFrom(to, skeleton, blend) {\n    const from = to.mixingFrom;\n    if (from.mixingFrom != null)\n      this.applyMixingFrom(from, skeleton, blend);\n    let mix = 0;\n    if (to.mixDuration == 0) {\n      mix = 1;\n      if (blend == MixBlend.first)\n        blend = MixBlend.setup;\n    } else {\n      mix = to.mixTime / to.mixDuration;\n      if (mix > 1)\n        mix = 1;\n      if (blend != MixBlend.first)\n        blend = from.mixBlend;\n    }\n    const events = mix < from.eventThreshold ? this.events : null;\n    const attachments = mix < from.attachmentThreshold;\n    const drawOrder = mix < from.drawOrderThreshold;\n    const animationLast = from.animationLast;\n    const animationTime = from.getAnimationTime();\n    const timelineCount = from.animation.timelines.length;\n    const timelines = from.animation.timelines;\n    const alphaHold = from.alpha * to.interruptAlpha;\n    const alphaMix = alphaHold * (1 - mix);\n    if (blend == MixBlend.add) {\n      for (let i = 0; i < timelineCount; i++)\n        timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, MixDirection.mixOut);\n    } else {\n      const timelineMode = from.timelineMode;\n      const timelineHoldMix = from.timelineHoldMix;\n      const firstFrame = from.timelinesRotation.length == 0;\n      if (firstFrame)\n        Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null);\n      const timelinesRotation = from.timelinesRotation;\n      from.totalAlpha = 0;\n      for (let i = 0; i < timelineCount; i++) {\n        const timeline = timelines[i];\n        let direction = MixDirection.mixOut;\n        let timelineBlend;\n        let alpha = 0;\n        switch (timelineMode[i]) {\n          case _AnimationState.SUBSEQUENT:\n            if (!drawOrder && timeline instanceof DrawOrderTimeline)\n              continue;\n            timelineBlend = blend;\n            alpha = alphaMix;\n            break;\n          case _AnimationState.FIRST:\n            timelineBlend = MixBlend.setup;\n            alpha = alphaMix;\n            break;\n          case _AnimationState.HOLD_SUBSEQUENT:\n            timelineBlend = blend;\n            alpha = alphaHold;\n            break;\n          case _AnimationState.HOLD_FIRST:\n            timelineBlend = MixBlend.setup;\n            alpha = alphaHold;\n            break;\n          default:\n            timelineBlend = MixBlend.setup;\n            const holdMix = timelineHoldMix[i];\n            alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);\n            break;\n        }\n        from.totalAlpha += alpha;\n        if (timeline instanceof RotateTimeline)\n          this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame);\n        else if (timeline instanceof AttachmentTimeline)\n          this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments);\n        else {\n          Utils.webkit602BugfixHelper(alpha, blend);\n          if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup)\n            direction = MixDirection.mixIn;\n          timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction);\n        }\n      }\n    }\n    if (to.mixDuration > 0)\n      this.queueEvents(from, animationTime);\n    this.events.length = 0;\n    from.nextAnimationLast = animationTime;\n    from.nextTrackLast = from.trackTime;\n    return mix;\n  }\n  applyAttachmentTimeline(timeline, skeleton, time, blend, attachments) {\n    const slot = skeleton.slots[timeline.slotIndex];\n    if (!slot.bone.active)\n      return;\n    const frames = timeline.frames;\n    if (time < frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first)\n        this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments);\n    } else {\n      let frameIndex;\n      if (time >= frames[frames.length - 1])\n        frameIndex = frames.length - 1;\n      else\n        frameIndex = Animation.binarySearch(frames, time) - 1;\n      this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments);\n    }\n    if (slot.attachmentState <= this.unkeyedState)\n      slot.attachmentState = this.unkeyedState + _AnimationState.SETUP;\n  }\n  setAttachment(skeleton, slot, attachmentName, attachments) {\n    slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n    if (attachments)\n      slot.attachmentState = this.unkeyedState + _AnimationState.CURRENT;\n  }\n  applyRotateTimeline(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {\n    if (firstFrame)\n      timelinesRotation[i] = 0;\n    if (alpha == 1) {\n      timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn);\n      return;\n    }\n    const rotateTimeline = timeline;\n    const frames = rotateTimeline.frames;\n    const bone = skeleton.bones[rotateTimeline.boneIndex];\n    if (!bone.active)\n      return;\n    let r1 = 0;\n    let r2 = 0;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.rotation = bone.data.rotation;\n        default:\n          return;\n        case MixBlend.first:\n          r1 = bone.rotation;\n          r2 = bone.data.rotation;\n      }\n    } else {\n      r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation;\n      if (time >= frames[frames.length - RotateTimeline.ENTRIES])\n        r2 = bone.data.rotation + frames[frames.length + RotateTimeline.PREV_ROTATION];\n      else {\n        const frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);\n        const prevRotation = frames[frame + RotateTimeline.PREV_ROTATION];\n        const frameTime = frames[frame];\n        const percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));\n        r2 = frames[frame + RotateTimeline.ROTATION] - prevRotation;\n        r2 -= (16384 - (16384.499999999996 - r2 / 360 | 0)) * 360;\n        r2 = prevRotation + r2 * percent + bone.data.rotation;\n        r2 -= (16384 - (16384.499999999996 - r2 / 360 | 0)) * 360;\n      }\n    }\n    let total = 0;\n    let diff = r2 - r1;\n    diff -= (16384 - (16384.499999999996 - diff / 360 | 0)) * 360;\n    if (diff == 0) {\n      total = timelinesRotation[i];\n    } else {\n      let lastTotal = 0;\n      let lastDiff = 0;\n      if (firstFrame) {\n        lastTotal = 0;\n        lastDiff = diff;\n      } else {\n        lastTotal = timelinesRotation[i];\n        lastDiff = timelinesRotation[i + 1];\n      }\n      const current = diff > 0;\n      let dir = lastTotal >= 0;\n      if (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {\n        if (Math.abs(lastTotal) > 180)\n          lastTotal += 360 * MathUtils.signum(lastTotal);\n        dir = current;\n      }\n      total = diff + lastTotal - lastTotal % 360;\n      if (dir != current)\n        total += 360 * MathUtils.signum(lastTotal);\n      timelinesRotation[i] = total;\n    }\n    timelinesRotation[i + 1] = diff;\n    r1 += total * alpha;\n    bone.rotation = r1 - (16384 - (16384.499999999996 - r1 / 360 | 0)) * 360;\n  }\n  queueEvents(entry, animationTime) {\n    const animationStart = entry.animationStart;\n    const animationEnd = entry.animationEnd;\n    const duration = animationEnd - animationStart;\n    const trackLastWrapped = entry.trackLast % duration;\n    const events = this.events;\n    let i = 0;\n    const n = events.length;\n    for (; i < n; i++) {\n      const event = events[i];\n      if (event.time < trackLastWrapped)\n        break;\n      if (event.time > animationEnd)\n        continue;\n      this.queue.event(entry, event);\n    }\n    let complete = false;\n    if (entry.loop)\n      complete = duration == 0 || trackLastWrapped > entry.trackTime % duration;\n    else\n      complete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n    if (complete)\n      this.queue.complete(entry);\n    for (; i < n; i++) {\n      const event = events[i];\n      if (event.time < animationStart)\n        continue;\n      this.queue.event(entry, events[i]);\n    }\n  }\n  /** Removes all animations from all tracks, leaving skeletons in their current pose.\n   *\n   * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n   * rather than leaving them in their current pose. */\n  clearTracks() {\n    const oldDrainDisabled = this.queue.drainDisabled;\n    this.queue.drainDisabled = true;\n    for (let i = 0, n = this.tracks.length; i < n; i++)\n      this.clearTrack(i);\n    this.tracks.length = 0;\n    this.queue.drainDisabled = oldDrainDisabled;\n    this.queue.drain();\n  }\n  /** Removes all animations from the track, leaving skeletons in their current pose.\n   *\n   * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n   * rather than leaving them in their current pose. */\n  clearTrack(trackIndex) {\n    if (trackIndex >= this.tracks.length)\n      return;\n    const current = this.tracks[trackIndex];\n    if (current == null)\n      return;\n    this.queue.end(current);\n    this.disposeNext(current);\n    let entry = current;\n    while (true) {\n      const from = entry.mixingFrom;\n      if (from == null)\n        break;\n      this.queue.end(from);\n      entry.mixingFrom = null;\n      entry.mixingTo = null;\n      entry = from;\n    }\n    this.tracks[current.trackIndex] = null;\n    this.queue.drain();\n  }\n  setCurrent(index, current, interrupt) {\n    const from = this.expandToIndex(index);\n    this.tracks[index] = current;\n    if (from != null) {\n      if (interrupt)\n        this.queue.interrupt(from);\n      current.mixingFrom = from;\n      from.mixingTo = current;\n      current.mixTime = 0;\n      if (from.mixingFrom != null && from.mixDuration > 0)\n        current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n      from.timelinesRotation.length = 0;\n    }\n    this.queue.start(current);\n  }\n  /** Sets an animation by name.\n   *\n   * {@link #setAnimationWith(}. */\n  setAnimation(trackIndex, animationName, loop) {\n    const animation = this.data.skeletonData.findAnimation(animationName);\n    if (animation == null)\n      throw new Error(`Animation not found: ${animationName}`);\n    return this.setAnimationWith(trackIndex, animation, loop);\n  }\n  /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never\n   * applied to a skeleton, it is replaced (not mixed from).\n   * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n   *           duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared.\n   * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n   *         after the {@link AnimationStateListener#dispose()} event occurs. */\n  setAnimationWith(trackIndex, animation, loop) {\n    if (animation == null)\n      throw new Error(\"animation cannot be null.\");\n    let interrupt = true;\n    let current = this.expandToIndex(trackIndex);\n    if (current != null) {\n      if (current.nextTrackLast == -1) {\n        this.tracks[trackIndex] = current.mixingFrom;\n        this.queue.interrupt(current);\n        this.queue.end(current);\n        this.disposeNext(current);\n        current = current.mixingFrom;\n        interrupt = false;\n      } else\n        this.disposeNext(current);\n    }\n    const entry = this.trackEntry(trackIndex, animation, loop, current);\n    this.setCurrent(trackIndex, entry, interrupt);\n    this.queue.drain();\n    return entry;\n  }\n  /** Queues an animation by name.\n   *\n   * See {@link #addAnimationWith()}. */\n  addAnimation(trackIndex, animationName, loop, delay) {\n    const animation = this.data.skeletonData.findAnimation(animationName);\n    if (animation == null)\n      throw new Error(`Animation not found: ${animationName}`);\n    return this.addAnimationWith(trackIndex, animation, loop, delay);\n  }\n  /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is\n   * equivalent to calling {@link #setAnimationWith()}.\n   * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n   *           minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix\n   *           ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the\n   *           previous entry is looping, its next loop completion is used instead of its duration.\n   * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n   *         after the {@link AnimationStateListener#dispose()} event occurs. */\n  addAnimationWith(trackIndex, animation, loop, delay) {\n    if (animation == null)\n      throw new Error(\"animation cannot be null.\");\n    let last = this.expandToIndex(trackIndex);\n    if (last != null) {\n      while (last.next != null)\n        last = last.next;\n    }\n    const entry = this.trackEntry(trackIndex, animation, loop, last);\n    if (last == null) {\n      this.setCurrent(trackIndex, entry, true);\n      this.queue.drain();\n    } else {\n      last.next = entry;\n      if (delay <= 0) {\n        const duration = last.animationEnd - last.animationStart;\n        if (duration != 0) {\n          if (last.loop)\n            delay += duration * (1 + (last.trackTime / duration | 0));\n          else\n            delay += Math.max(duration, last.trackTime);\n          delay -= this.data.getMix(last.animation, animation);\n        } else\n          delay = last.trackTime;\n      }\n    }\n    entry.delay = delay;\n    return entry;\n  }\n  /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's\n   * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out.\n   *\n   * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()},\n   * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes\n   * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation\n   * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of\n   * 0 still mixes out over one frame.\n   *\n   * Mixing in is done by first setting an empty animation, then adding an animation using\n   * {@link #addAnimation()} and on the returned track entry, set the\n   * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and\n   * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the\n   * setup pose value if no lower tracks key the property to the value keyed in the new animation. */\n  setEmptyAnimation(trackIndex, mixDuration) {\n    const entry = this.setAnimationWith(trackIndex, _AnimationState.emptyAnimation, false);\n    entry.mixDuration = mixDuration;\n    entry.trackEnd = mixDuration;\n    return entry;\n  }\n  /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's\n   * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling\n   * {@link #setEmptyAnimation()}.\n   *\n   * See {@link #setEmptyAnimation()}.\n   * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n   *           minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or\n   *           before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next\n   *           loop completion is used instead of its duration.\n   * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n   *         after the {@link AnimationStateListener#dispose()} event occurs. */\n  addEmptyAnimation(trackIndex, mixDuration, delay) {\n    if (delay <= 0)\n      delay -= mixDuration;\n    const entry = this.addAnimationWith(trackIndex, _AnimationState.emptyAnimation, false, delay);\n    entry.mixDuration = mixDuration;\n    entry.trackEnd = mixDuration;\n    return entry;\n  }\n  /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix\n   * duration. */\n  setEmptyAnimations(mixDuration) {\n    const oldDrainDisabled = this.queue.drainDisabled;\n    this.queue.drainDisabled = true;\n    for (let i = 0, n = this.tracks.length; i < n; i++) {\n      const current = this.tracks[i];\n      if (current != null)\n        this.setEmptyAnimation(current.trackIndex, mixDuration);\n    }\n    this.queue.drainDisabled = oldDrainDisabled;\n    this.queue.drain();\n  }\n  expandToIndex(index) {\n    if (index < this.tracks.length)\n      return this.tracks[index];\n    Utils.ensureArrayCapacity(this.tracks, index + 1, null);\n    this.tracks.length = index + 1;\n    return null;\n  }\n  /** @param last May be null. */\n  trackEntry(trackIndex, animation, loop, last) {\n    const entry = this.trackEntryPool.obtain();\n    entry.trackIndex = trackIndex;\n    entry.animation = animation;\n    entry.loop = loop;\n    entry.holdPrevious = false;\n    entry.eventThreshold = 0;\n    entry.attachmentThreshold = 0;\n    entry.drawOrderThreshold = 0;\n    entry.animationStart = 0;\n    entry.animationEnd = animation.duration;\n    entry.animationLast = -1;\n    entry.nextAnimationLast = -1;\n    entry.delay = 0;\n    entry.trackTime = 0;\n    entry.trackLast = -1;\n    entry.nextTrackLast = -1;\n    entry.trackEnd = Number.MAX_VALUE;\n    entry.timeScale = 1;\n    entry.alpha = 1;\n    entry.interruptAlpha = 1;\n    entry.mixTime = 0;\n    entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation);\n    entry.mixBlend = MixBlend.replace;\n    return entry;\n  }\n  disposeNext(entry) {\n    let next = entry.next;\n    while (next != null) {\n      this.queue.dispose(next);\n      next = next.next;\n    }\n    entry.next = null;\n  }\n  _animationsChanged() {\n    this.animationsChanged = false;\n    this.propertyIDs.clear();\n    for (let i = 0, n = this.tracks.length; i < n; i++) {\n      let entry = this.tracks[i];\n      if (entry == null)\n        continue;\n      while (entry.mixingFrom != null)\n        entry = entry.mixingFrom;\n      do {\n        if (entry.mixingFrom == null || entry.mixBlend != MixBlend.add)\n          this.computeHold(entry);\n        entry = entry.mixingTo;\n      } while (entry != null);\n    }\n  }\n  computeHold(entry) {\n    const to = entry.mixingTo;\n    const timelines = entry.animation.timelines;\n    const timelinesCount = entry.animation.timelines.length;\n    const timelineMode = Utils.setArraySize(entry.timelineMode, timelinesCount);\n    entry.timelineHoldMix.length = 0;\n    const timelineDipMix = Utils.setArraySize(entry.timelineHoldMix, timelinesCount);\n    const propertyIDs = this.propertyIDs;\n    if (to != null && to.holdPrevious) {\n      for (let i = 0; i < timelinesCount; i++) {\n        timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? _AnimationState.HOLD_FIRST : _AnimationState.HOLD_SUBSEQUENT;\n      }\n      return;\n    }\n    outer:\n      for (let i = 0; i < timelinesCount; i++) {\n        const timeline = timelines[i];\n        const id = timeline.getPropertyId();\n        if (!propertyIDs.add(id))\n          timelineMode[i] = _AnimationState.SUBSEQUENT;\n        else if (to == null || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline || timeline instanceof EventTimeline || !to.animation.hasTimeline(id)) {\n          timelineMode[i] = _AnimationState.FIRST;\n        } else {\n          for (let next = to.mixingTo; next != null; next = next.mixingTo) {\n            if (next.animation.hasTimeline(id))\n              continue;\n            if (entry.mixDuration > 0) {\n              timelineMode[i] = _AnimationState.HOLD_MIX;\n              timelineDipMix[i] = next;\n              continue outer;\n            }\n            break;\n          }\n          timelineMode[i] = _AnimationState.HOLD_FIRST;\n        }\n      }\n  }\n  /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */\n  getCurrent(trackIndex) {\n    if (trackIndex >= this.tracks.length)\n      return null;\n    return this.tracks[trackIndex];\n  }\n  /** Adds a listener to receive events for all track entries. */\n  addListener(listener) {\n    if (listener == null)\n      throw new Error(\"listener cannot be null.\");\n    this.listeners.push(listener);\n  }\n  /** Removes the listener added with {@link #addListener()}. */\n  removeListener(listener) {\n    const index = this.listeners.indexOf(listener);\n    if (index >= 0)\n      this.listeners.splice(index, 1);\n  }\n  /** Removes all listeners added with {@link #addListener()}. */\n  clearListeners() {\n    this.listeners.length = 0;\n  }\n  /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an\n   * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery\n   * are not wanted because new animations are being set. */\n  clearListenerNotifications() {\n    this.queue.clear();\n  }\n  setAnimationByName(trackIndex, animationName, loop) {\n    if (!_AnimationState.deprecatedWarning1) {\n      _AnimationState.deprecatedWarning1 = true;\n      console.warn(\"Spine Deprecation Warning: AnimationState.setAnimationByName is deprecated, please use setAnimation from now on.\");\n    }\n    this.setAnimation(trackIndex, animationName, loop);\n  }\n  addAnimationByName(trackIndex, animationName, loop, delay) {\n    if (!_AnimationState.deprecatedWarning2) {\n      _AnimationState.deprecatedWarning2 = true;\n      console.warn(\"Spine Deprecation Warning: AnimationState.addAnimationByName is deprecated, please use addAnimation from now on.\");\n    }\n    this.addAnimation(trackIndex, animationName, loop, delay);\n  }\n  hasAnimation(animationName) {\n    const animation = this.data.skeletonData.findAnimation(animationName);\n    return animation !== null;\n  }\n  hasAnimationByName(animationName) {\n    if (!_AnimationState.deprecatedWarning3) {\n      _AnimationState.deprecatedWarning3 = true;\n      console.warn(\"Spine Deprecation Warning: AnimationState.hasAnimationByName is deprecated, please use hasAnimation from now on.\");\n    }\n    return this.hasAnimation(animationName);\n  }\n};\nlet AnimationState = _AnimationState;\nAnimationState.emptyAnimation = new Animation(\"<empty>\", [], 0);\n/** 1. A previously applied timeline has set this property.\n *\n * Result: Mix from the current pose to the timeline pose. */\nAnimationState.SUBSEQUENT = 0;\n/** 1. This is the first timeline to set this property.\n * 2. The next track entry applied after this one does not have a timeline to set this property.\n *\n * Result: Mix from the setup pose to the timeline pose. */\nAnimationState.FIRST = 1;\n/** 1) A previously applied timeline has set this property.<br>\n * 2) The next track entry to be applied does have a timeline to set this property.<br>\n * 3) The next track entry after that one does not have a timeline to set this property.<br>\n * Result: Mix from the current pose to the timeline pose, but do not mix out. This avoids \"dipping\" when crossfading\n * animations that key the same property. A subsequent timeline will set this property using a mix. */\nAnimationState.HOLD_SUBSEQUENT = 2;\n/** 1) This is the first timeline to set this property.<br>\n * 2) The next track entry to be applied does have a timeline to set this property.<br>\n * 3) The next track entry after that one does not have a timeline to set this property.<br>\n * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids \"dipping\" when crossfading animations\n * that key the same property. A subsequent timeline will set this property using a mix. */\nAnimationState.HOLD_FIRST = 3;\n/** 1. This is the first timeline to set this property.\n * 2. The next track entry to be applied does have a timeline to set this property.\n * 3. The next track entry after that one does have a timeline to set this property.\n * 4. timelineHoldMix stores the first subsequent track entry that does not have a timeline to set this property.\n *\n * Result: The same as HOLD except the mix percentage from the timelineHoldMix track entry is used. This handles when more than\n * 2 track entries in a row have a timeline that sets the same property.\n *\n * Eg, A -> B -> C -> D where A, B, and C have a timeline setting same property, but D does not. When A is applied, to avoid\n * \"dipping\" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A\n * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into\n * place. */\nAnimationState.HOLD_MIX = 4;\nAnimationState.SETUP = 1;\nAnimationState.CURRENT = 2;\nAnimationState.deprecatedWarning1 = false;\nAnimationState.deprecatedWarning2 = false;\nAnimationState.deprecatedWarning3 = false;\nconst _TrackEntry = class {\n  constructor() {\n    /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which\n     * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to\n     * the values from the lower tracks.\n     *\n     * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first\n     * called. */\n    this.mixBlend = MixBlend.replace;\n    this.timelineMode = new Array();\n    this.timelineHoldMix = new Array();\n    this.timelinesRotation = new Array();\n  }\n  reset() {\n    this.next = null;\n    this.mixingFrom = null;\n    this.mixingTo = null;\n    this.animation = null;\n    this.listener = null;\n    this.timelineMode.length = 0;\n    this.timelineHoldMix.length = 0;\n    this.timelinesRotation.length = 0;\n  }\n  /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart}\n   * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the\n   * `animationStart` time. */\n  getAnimationTime() {\n    if (this.loop) {\n      const duration = this.animationEnd - this.animationStart;\n      if (duration == 0)\n        return this.animationStart;\n      return this.trackTime % duration + this.animationStart;\n    }\n    return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n  }\n  setAnimationLast(animationLast) {\n    this.animationLast = animationLast;\n    this.nextAnimationLast = animationLast;\n  }\n  /** Returns true if at least one loop has been completed.\n   *\n   * See {@link AnimationStateListener#complete()}. */\n  isComplete() {\n    return this.trackTime >= this.animationEnd - this.animationStart;\n  }\n  /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the\n   * long way around when using {@link #alpha} and starting animations on other tracks.\n   *\n   * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions:\n   * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long\n   * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the\n   * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */\n  resetRotationDirections() {\n    this.timelinesRotation.length = 0;\n  }\n  get time() {\n    if (!_TrackEntry.deprecatedWarning1) {\n      _TrackEntry.deprecatedWarning1 = true;\n      console.warn(\"Spine Deprecation Warning: TrackEntry.time is deprecated, please use trackTime from now on.\");\n    }\n    return this.trackTime;\n  }\n  set time(value) {\n    if (!_TrackEntry.deprecatedWarning1) {\n      _TrackEntry.deprecatedWarning1 = true;\n      console.warn(\"Spine Deprecation Warning: TrackEntry.time is deprecated, please use trackTime from now on.\");\n    }\n    this.trackTime = value;\n  }\n  get endTime() {\n    if (!_TrackEntry.deprecatedWarning2) {\n      _TrackEntry.deprecatedWarning2 = true;\n      console.warn(\"Spine Deprecation Warning: TrackEntry.endTime is deprecated, please use trackEnd from now on.\");\n    }\n    return this.trackTime;\n  }\n  set endTime(value) {\n    if (!_TrackEntry.deprecatedWarning2) {\n      _TrackEntry.deprecatedWarning2 = true;\n      console.warn(\"Spine Deprecation Warning: TrackEntry.endTime is deprecated, please use trackEnd from now on.\");\n    }\n    this.trackTime = value;\n  }\n  loopsCount() {\n    return Math.floor(this.trackTime / this.trackEnd);\n  }\n};\nlet TrackEntry = _TrackEntry;\nTrackEntry.deprecatedWarning1 = false;\nTrackEntry.deprecatedWarning2 = false;\nconst _EventQueue = class {\n  constructor(animState) {\n    this.objects = [];\n    this.drainDisabled = false;\n    this.animState = animState;\n  }\n  start(entry) {\n    this.objects.push(EventType.start);\n    this.objects.push(entry);\n    this.animState.animationsChanged = true;\n  }\n  interrupt(entry) {\n    this.objects.push(EventType.interrupt);\n    this.objects.push(entry);\n  }\n  end(entry) {\n    this.objects.push(EventType.end);\n    this.objects.push(entry);\n    this.animState.animationsChanged = true;\n  }\n  dispose(entry) {\n    this.objects.push(EventType.dispose);\n    this.objects.push(entry);\n  }\n  complete(entry) {\n    this.objects.push(EventType.complete);\n    this.objects.push(entry);\n  }\n  event(entry, event) {\n    this.objects.push(EventType.event);\n    this.objects.push(entry);\n    this.objects.push(event);\n  }\n  deprecateStuff() {\n    if (!_EventQueue.deprecatedWarning1) {\n      _EventQueue.deprecatedWarning1 = true;\n      console.warn(\n        \"Spine Deprecation Warning: onComplete, onStart, onEnd, onEvent art deprecated, please use listeners from now on. 'state.addListener({ complete: function(track, event) { } })'\"\n      );\n    }\n    return true;\n  }\n  drain() {\n    if (this.drainDisabled)\n      return;\n    this.drainDisabled = true;\n    const objects = this.objects;\n    const listeners = this.animState.listeners;\n    for (let i = 0; i < objects.length; i += 2) {\n      const type = objects[i];\n      const entry = objects[i + 1];\n      switch (type) {\n        case EventType.start:\n          if (entry.listener != null && entry.listener.start)\n            entry.listener.start(entry);\n          for (let ii = 0; ii < listeners.length; ii++)\n            if (listeners[ii].start)\n              listeners[ii].start(entry);\n          entry.onStart && this.deprecateStuff() && entry.onStart(entry.trackIndex);\n          this.animState.onStart && this.deprecateStuff() && this.deprecateStuff && this.animState.onStart(entry.trackIndex);\n          break;\n        case EventType.interrupt:\n          if (entry.listener != null && entry.listener.interrupt)\n            entry.listener.interrupt(entry);\n          for (let ii = 0; ii < listeners.length; ii++)\n            if (listeners[ii].interrupt)\n              listeners[ii].interrupt(entry);\n          break;\n        case EventType.end:\n          if (entry.listener != null && entry.listener.end)\n            entry.listener.end(entry);\n          for (let ii = 0; ii < listeners.length; ii++)\n            if (listeners[ii].end)\n              listeners[ii].end(entry);\n          entry.onEnd && this.deprecateStuff() && entry.onEnd(entry.trackIndex);\n          this.animState.onEnd && this.deprecateStuff() && this.animState.onEnd(entry.trackIndex);\n        case EventType.dispose:\n          if (entry.listener != null && entry.listener.dispose)\n            entry.listener.dispose(entry);\n          for (let ii = 0; ii < listeners.length; ii++)\n            if (listeners[ii].dispose)\n              listeners[ii].dispose(entry);\n          this.animState.trackEntryPool.free(entry);\n          break;\n        case EventType.complete:\n          if (entry.listener != null && entry.listener.complete)\n            entry.listener.complete(entry);\n          for (let ii = 0; ii < listeners.length; ii++)\n            if (listeners[ii].complete)\n              listeners[ii].complete(entry);\n          const count = MathUtils.toInt(entry.loopsCount());\n          entry.onComplete && this.deprecateStuff() && entry.onComplete(entry.trackIndex, count);\n          this.animState.onComplete && this.deprecateStuff() && this.animState.onComplete(entry.trackIndex, count);\n          break;\n        case EventType.event:\n          const event = objects[i++ + 2];\n          if (entry.listener != null && entry.listener.event)\n            entry.listener.event(entry, event);\n          for (let ii = 0; ii < listeners.length; ii++)\n            if (listeners[ii].event)\n              listeners[ii].event(entry, event);\n          entry.onEvent && this.deprecateStuff() && entry.onEvent(entry.trackIndex, event);\n          this.animState.onEvent && this.deprecateStuff() && this.animState.onEvent(entry.trackIndex, event);\n          break;\n      }\n    }\n    this.clear();\n    this.drainDisabled = false;\n  }\n  clear() {\n    this.objects.length = 0;\n  }\n};\nlet EventQueue = _EventQueue;\nEventQueue.deprecatedWarning1 = false;\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"start\"] = 0] = \"start\";\n  EventType2[EventType2[\"interrupt\"] = 1] = \"interrupt\";\n  EventType2[EventType2[\"end\"] = 2] = \"end\";\n  EventType2[EventType2[\"dispose\"] = 3] = \"dispose\";\n  EventType2[EventType2[\"complete\"] = 4] = \"complete\";\n  EventType2[EventType2[\"event\"] = 5] = \"event\";\n  return EventType2;\n})(EventType || {});\nclass AnimationStateAdapter {\n  start(entry) {\n  }\n  interrupt(entry) {\n  }\n  end(entry) {\n  }\n  dispose(entry) {\n  }\n  complete(entry) {\n  }\n  event(entry, event) {\n  }\n}\n\nexport { AnimationState, AnimationStateAdapter, EventQueue, EventType, TrackEntry };\n//# sourceMappingURL=AnimationState.mjs.map\n","const _AnimationStateData = class {\n  constructor(skeletonData) {\n    this.animationToMixTime = {};\n    this.defaultMix = 0;\n    if (skeletonData == null)\n      throw new Error(\"skeletonData cannot be null.\");\n    this.skeletonData = skeletonData;\n  }\n  setMix(fromName, toName, duration) {\n    const from = this.skeletonData.findAnimation(fromName);\n    if (from == null)\n      throw new Error(`Animation not found: ${fromName}`);\n    const to = this.skeletonData.findAnimation(toName);\n    if (to == null)\n      throw new Error(`Animation not found: ${toName}`);\n    this.setMixWith(from, to, duration);\n  }\n  setMixByName(fromName, toName, duration) {\n    if (!_AnimationStateData.deprecatedWarning1) {\n      _AnimationStateData.deprecatedWarning1 = true;\n      console.warn(\"Deprecation Warning: AnimationStateData.setMixByName is deprecated, please use setMix from now on.\");\n    }\n    this.setMix(fromName, toName, duration);\n  }\n  setMixWith(from, to, duration) {\n    if (from == null)\n      throw new Error(\"from cannot be null.\");\n    if (to == null)\n      throw new Error(\"to cannot be null.\");\n    const key = `${from.name}.${to.name}`;\n    this.animationToMixTime[key] = duration;\n  }\n  getMix(from, to) {\n    const key = `${from.name}.${to.name}`;\n    const value = this.animationToMixTime[key];\n    return value === void 0 ? this.defaultMix : value;\n  }\n};\nlet AnimationStateData = _AnimationStateData;\nAnimationStateData.deprecatedWarning1 = false;\n\nexport { AnimationStateData };\n//# sourceMappingURL=AnimationStateData.mjs.map\n","import './attachments/Attachment.mjs';\nimport { BoundingBoxAttachment } from './attachments/BoundingBoxAttachment.mjs';\nimport { ClippingAttachment } from './attachments/ClippingAttachment.mjs';\nimport { MeshAttachment } from './attachments/MeshAttachment.mjs';\nimport { PathAttachment } from './attachments/PathAttachment.mjs';\nimport { PointAttachment } from './attachments/PointAttachment.mjs';\nimport { RegionAttachment } from './attachments/RegionAttachment.mjs';\n\nclass AtlasAttachmentLoader {\n  constructor(atlas) {\n    this.atlas = atlas;\n  }\n  /** @return May be null to not load an attachment. */\n  newRegionAttachment(skin, name, path) {\n    const region = this.atlas.findRegion(path);\n    if (region == null)\n      throw new Error(`Region not found in atlas: ${path} (region attachment: ${name})`);\n    const attachment = new RegionAttachment(name);\n    attachment.region = region;\n    return attachment;\n  }\n  /** @return May be null to not load an attachment. */\n  newMeshAttachment(skin, name, path) {\n    const region = this.atlas.findRegion(path);\n    if (region == null)\n      throw new Error(`Region not found in atlas: ${path} (mesh attachment: ${name})`);\n    const attachment = new MeshAttachment(name);\n    attachment.region = region;\n    return attachment;\n  }\n  /** @return May be null to not load an attachment. */\n  newBoundingBoxAttachment(skin, name) {\n    return new BoundingBoxAttachment(name);\n  }\n  /** @return May be null to not load an attachment */\n  newPathAttachment(skin, name) {\n    return new PathAttachment(name);\n  }\n  newPointAttachment(skin, name) {\n    return new PointAttachment(name);\n  }\n  newClippingAttachment(skin, name) {\n    return new ClippingAttachment(name);\n  }\n}\n\nexport { AtlasAttachmentLoader };\n//# sourceMappingURL=AtlasAttachmentLoader.mjs.map\n","import { Matrix } from '@pixi/core';\nimport { settings, MathUtils, TransformMode } from '@pixi-spine/base';\n\nclass Bone {\n  /** @param parent May be null. */\n  constructor(data, skeleton, parent) {\n    // be careful! Spine b,c is c,b in pixi matrix\n    this.matrix = new Matrix();\n    this.children = new Array();\n    this.x = 0;\n    this.y = 0;\n    this.rotation = 0;\n    this.scaleX = 0;\n    this.scaleY = 0;\n    this.shearX = 0;\n    this.shearY = 0;\n    this.ax = 0;\n    this.ay = 0;\n    this.arotation = 0;\n    this.ascaleX = 0;\n    this.ascaleY = 0;\n    this.ashearX = 0;\n    this.ashearY = 0;\n    this.appliedValid = false;\n    this.sorted = false;\n    this.active = false;\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    if (skeleton == null)\n      throw new Error(\"skeleton cannot be null.\");\n    this.data = data;\n    this.skeleton = skeleton;\n    this.parent = parent;\n    this.setToSetupPose();\n  }\n  get worldX() {\n    return this.matrix.tx;\n  }\n  get worldY() {\n    return this.matrix.ty;\n  }\n  isActive() {\n    return this.active;\n  }\n  /** Same as {@link #updateWorldTransform()}. This method exists for Bone to implement {@link Updatable}. */\n  update() {\n    this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n  }\n  /** Computes the world transform using the parent bone and this bone's local transform. */\n  updateWorldTransform() {\n    this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n  }\n  /** Computes the world transform using the parent bone and the specified local transform. */\n  updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY) {\n    this.ax = x;\n    this.ay = y;\n    this.arotation = rotation;\n    this.ascaleX = scaleX;\n    this.ascaleY = scaleY;\n    this.ashearX = shearX;\n    this.ashearY = shearY;\n    this.appliedValid = true;\n    const parent = this.parent;\n    const m = this.matrix;\n    const sx = this.skeleton.scaleX;\n    const sy = settings.yDown ? -this.skeleton.scaleY : this.skeleton.scaleY;\n    if (parent == null) {\n      const skeleton = this.skeleton;\n      const rotationY = rotation + 90 + shearY;\n      m.a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx;\n      m.c = MathUtils.cosDeg(rotationY) * scaleY * sx;\n      m.b = MathUtils.sinDeg(rotation + shearX) * scaleX * sy;\n      m.d = MathUtils.sinDeg(rotationY) * scaleY * sy;\n      m.tx = x * sx + skeleton.x;\n      m.ty = y * sy + skeleton.y;\n      return;\n    }\n    let pa = parent.matrix.a;\n    let pb = parent.matrix.c;\n    let pc = parent.matrix.b;\n    let pd = parent.matrix.d;\n    m.tx = pa * x + pb * y + parent.matrix.tx;\n    m.ty = pc * x + pd * y + parent.matrix.ty;\n    switch (this.data.transformMode) {\n      case TransformMode.Normal: {\n        const rotationY = rotation + 90 + shearY;\n        const la = MathUtils.cosDeg(rotation + shearX) * scaleX;\n        const lb = MathUtils.cosDeg(rotationY) * scaleY;\n        const lc = MathUtils.sinDeg(rotation + shearX) * scaleX;\n        const ld = MathUtils.sinDeg(rotationY) * scaleY;\n        m.a = pa * la + pb * lc;\n        m.c = pa * lb + pb * ld;\n        m.b = pc * la + pd * lc;\n        m.d = pc * lb + pd * ld;\n        return;\n      }\n      case TransformMode.OnlyTranslation: {\n        const rotationY = rotation + 90 + shearY;\n        m.a = MathUtils.cosDeg(rotation + shearX) * scaleX;\n        m.c = MathUtils.cosDeg(rotationY) * scaleY;\n        m.b = MathUtils.sinDeg(rotation + shearX) * scaleX;\n        m.d = MathUtils.sinDeg(rotationY) * scaleY;\n        break;\n      }\n      case TransformMode.NoRotationOrReflection: {\n        let s = pa * pa + pc * pc;\n        let prx = 0;\n        if (s > 1e-4) {\n          s = Math.abs(pa * pd - pb * pc) / s;\n          pa /= this.skeleton.scaleX;\n          pc /= this.skeleton.scaleY;\n          pb = pc * s;\n          pd = pa * s;\n          prx = Math.atan2(pc, pa) * MathUtils.radDeg;\n        } else {\n          pa = 0;\n          pc = 0;\n          prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;\n        }\n        const rx = rotation + shearX - prx;\n        const ry = rotation + shearY - prx + 90;\n        const la = MathUtils.cosDeg(rx) * scaleX;\n        const lb = MathUtils.cosDeg(ry) * scaleY;\n        const lc = MathUtils.sinDeg(rx) * scaleX;\n        const ld = MathUtils.sinDeg(ry) * scaleY;\n        m.a = pa * la - pb * lc;\n        m.c = pa * lb - pb * ld;\n        m.b = pc * la + pd * lc;\n        m.d = pc * lb + pd * ld;\n        break;\n      }\n      case TransformMode.NoScale:\n      case TransformMode.NoScaleOrReflection: {\n        const cos = MathUtils.cosDeg(rotation);\n        const sin = MathUtils.sinDeg(rotation);\n        let za = (pa * cos + pb * sin) / sx;\n        let zc = (pc * cos + pd * sin) / sy;\n        let s = Math.sqrt(za * za + zc * zc);\n        if (s > 1e-5)\n          s = 1 / s;\n        za *= s;\n        zc *= s;\n        s = Math.sqrt(za * za + zc * zc);\n        if (this.data.transformMode == TransformMode.NoScale && pa * pd - pb * pc < 0 != (settings.yDown ? this.skeleton.scaleX < 0 != this.skeleton.scaleY > 0 : this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))\n          s = -s;\n        const r = Math.PI / 2 + Math.atan2(zc, za);\n        const zb = Math.cos(r) * s;\n        const zd = Math.sin(r) * s;\n        const la = MathUtils.cosDeg(shearX) * scaleX;\n        const lb = MathUtils.cosDeg(90 + shearY) * scaleY;\n        const lc = MathUtils.sinDeg(shearX) * scaleX;\n        const ld = MathUtils.sinDeg(90 + shearY) * scaleY;\n        m.a = za * la + zb * lc;\n        m.c = za * lb + zb * ld;\n        m.b = zc * la + zd * lc;\n        m.d = zc * lb + zd * ld;\n        break;\n      }\n    }\n    m.a *= sx;\n    m.c *= sx;\n    m.b *= sy;\n    m.d *= sy;\n  }\n  setToSetupPose() {\n    const data = this.data;\n    this.x = data.x;\n    this.y = data.y;\n    this.rotation = data.rotation;\n    this.scaleX = data.scaleX;\n    this.scaleY = data.scaleY;\n    this.shearX = data.shearX;\n    this.shearY = data.shearY;\n  }\n  getWorldRotationX() {\n    return Math.atan2(this.matrix.b, this.matrix.a) * MathUtils.radDeg;\n  }\n  getWorldRotationY() {\n    return Math.atan2(this.matrix.d, this.matrix.c) * MathUtils.radDeg;\n  }\n  getWorldScaleX() {\n    const m = this.matrix;\n    return Math.sqrt(m.a * m.a + m.c * m.c);\n  }\n  getWorldScaleY() {\n    const m = this.matrix;\n    return Math.sqrt(m.b * m.b + m.d * m.d);\n  }\n  /** Computes the individual applied transform values from the world transform. This can be useful to perform processing using\n   * the applied transform after the world transform has been modified directly (eg, by a constraint).\n   * <p>\n   * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. */\n  updateAppliedTransform() {\n    this.appliedValid = true;\n    const parent = this.parent;\n    const m = this.matrix;\n    if (parent == null) {\n      this.ax = m.tx;\n      this.ay = m.ty;\n      this.arotation = Math.atan2(m.b, m.a) * MathUtils.radDeg;\n      this.ascaleX = Math.sqrt(m.a * m.a + m.b * m.b);\n      this.ascaleY = Math.sqrt(m.c * m.c + m.d * m.d);\n      this.ashearX = 0;\n      this.ashearY = Math.atan2(m.a * m.c + m.b * m.d, m.a * m.d - m.b * m.c) * MathUtils.radDeg;\n      return;\n    }\n    const pm = parent.matrix;\n    const pid = 1 / (pm.a * pm.d - pm.b * pm.c);\n    const dx = m.tx - pm.tx;\n    const dy = m.ty - pm.ty;\n    this.ax = dx * pm.d * pid - dy * pm.c * pid;\n    this.ay = dy * pm.a * pid - dx * pm.b * pid;\n    const ia = pid * pm.d;\n    const id = pid * pm.a;\n    const ib = pid * pm.c;\n    const ic = pid * pm.b;\n    const ra = ia * m.a - ib * m.b;\n    const rb = ia * m.c - ib * m.d;\n    const rc = id * m.b - ic * m.a;\n    const rd = id * m.d - ic * m.c;\n    this.ashearX = 0;\n    this.ascaleX = Math.sqrt(ra * ra + rc * rc);\n    if (this.ascaleX > 1e-4) {\n      const det = ra * rd - rb * rc;\n      this.ascaleY = det / this.ascaleX;\n      this.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;\n      this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;\n    } else {\n      this.ascaleX = 0;\n      this.ascaleY = Math.sqrt(rb * rb + rd * rd);\n      this.ashearY = 0;\n      this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;\n    }\n  }\n  worldToLocal(world) {\n    const m = this.matrix;\n    const a = m.a;\n    const b = m.c;\n    const c = m.b;\n    const d = m.d;\n    const invDet = 1 / (a * d - b * c);\n    const x = world.x - m.tx;\n    const y = world.y - m.ty;\n    world.x = x * d * invDet - y * b * invDet;\n    world.y = y * a * invDet - x * c * invDet;\n    return world;\n  }\n  localToWorld(local) {\n    const m = this.matrix;\n    const x = local.x;\n    const y = local.y;\n    local.x = x * m.a + y * m.c + m.tx;\n    local.y = x * m.b + y * m.d + m.ty;\n    return local;\n  }\n  worldToLocalRotation(worldRotation) {\n    const sin = MathUtils.sinDeg(worldRotation);\n    const cos = MathUtils.cosDeg(worldRotation);\n    const mat = this.matrix;\n    return Math.atan2(mat.a * sin - mat.b * cos, mat.d * cos - mat.c * sin) * MathUtils.radDeg;\n  }\n  localToWorldRotation(localRotation) {\n    const sin = MathUtils.sinDeg(localRotation);\n    const cos = MathUtils.cosDeg(localRotation);\n    const mat = this.matrix;\n    return Math.atan2(cos * mat.b + sin * mat.d, cos * mat.a + sin * mat.c) * MathUtils.radDeg;\n  }\n  rotateWorld(degrees) {\n    const mat = this.matrix;\n    const a = mat.a;\n    const b = mat.c;\n    const c = mat.b;\n    const d = mat.d;\n    const cos = MathUtils.cosDeg(degrees);\n    const sin = MathUtils.sinDeg(degrees);\n    mat.a = cos * a - sin * c;\n    mat.c = cos * b - sin * d;\n    mat.b = sin * a + cos * c;\n    mat.d = sin * b + cos * d;\n    this.appliedValid = false;\n  }\n}\n\nexport { Bone };\n//# sourceMappingURL=Bone.mjs.map\n","import { TransformMode, Color } from '@pixi-spine/base';\n\nclass BoneData {\n  constructor(index, name, parent) {\n    this.x = 0;\n    this.y = 0;\n    this.rotation = 0;\n    this.scaleX = 1;\n    this.scaleY = 1;\n    this.shearX = 0;\n    this.shearY = 0;\n    this.transformMode = TransformMode.Normal;\n    this.skinRequired = false;\n    this.color = new Color();\n    if (index < 0)\n      throw new Error(\"index must be >= 0.\");\n    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    this.index = index;\n    this.name = name;\n    this.parent = parent;\n  }\n}\n\nexport { BoneData };\n//# sourceMappingURL=BoneData.mjs.map\n","class ConstraintData {\n  constructor(name, order, skinRequired) {\n    this.name = name;\n    this.order = order;\n    this.skinRequired = skinRequired;\n  }\n}\n\nexport { ConstraintData };\n//# sourceMappingURL=Constraint.mjs.map\n","class Event {\n  constructor(time, data) {\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    this.time = time;\n    this.data = data;\n  }\n}\n\nexport { Event };\n//# sourceMappingURL=Event.mjs.map\n","class EventData {\n  constructor(name) {\n    this.name = name;\n  }\n}\n\nexport { EventData };\n//# sourceMappingURL=EventData.mjs.map\n","import { TransformMode, MathUtils } from '@pixi-spine/base';\n\nclass IkConstraint {\n  constructor(data, skeleton) {\n    this.bendDirection = 0;\n    this.compress = false;\n    this.stretch = false;\n    this.mix = 1;\n    this.softness = 0;\n    this.active = false;\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    if (skeleton == null)\n      throw new Error(\"skeleton cannot be null.\");\n    this.data = data;\n    this.mix = data.mix;\n    this.softness = data.softness;\n    this.bendDirection = data.bendDirection;\n    this.compress = data.compress;\n    this.stretch = data.stretch;\n    this.bones = new Array();\n    for (let i = 0; i < data.bones.length; i++)\n      this.bones.push(skeleton.findBone(data.bones[i].name));\n    this.target = skeleton.findBone(data.target.name);\n  }\n  isActive() {\n    return this.active;\n  }\n  apply() {\n    this.update();\n  }\n  update() {\n    const target = this.target;\n    const bones = this.bones;\n    switch (bones.length) {\n      case 1:\n        this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);\n        break;\n      case 2:\n        this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix);\n        break;\n    }\n  }\n  /** Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified in the world\n   * coordinate system. */\n  apply1(bone, targetX, targetY, compress, stretch, uniform, alpha) {\n    if (!bone.appliedValid)\n      bone.updateAppliedTransform();\n    const p = bone.parent.matrix;\n    const pa = p.a;\n    let pb = p.c;\n    const pc = p.b;\n    let pd = p.d;\n    let rotationIK = -bone.ashearX - bone.arotation;\n    let tx = 0;\n    let ty = 0;\n    switch (bone.data.transformMode) {\n      case TransformMode.OnlyTranslation:\n        tx = targetX - bone.worldX;\n        ty = targetY - bone.worldY;\n        break;\n      case TransformMode.NoRotationOrReflection:\n        const s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);\n        const sa = pa / bone.skeleton.scaleX;\n        const sc = pc / bone.skeleton.scaleY;\n        pb = -sc * s * bone.skeleton.scaleX;\n        pd = sa * s * bone.skeleton.scaleY;\n        rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;\n      default:\n        const x = targetX - p.tx;\n        const y = targetY - p.ty;\n        const d = pa * pd - pb * pc;\n        tx = (x * pd - y * pb) / d - bone.ax;\n        ty = (y * pa - x * pc) / d - bone.ay;\n    }\n    rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg;\n    if (bone.ascaleX < 0)\n      rotationIK += 180;\n    if (rotationIK > 180)\n      rotationIK -= 360;\n    else if (rotationIK < -180)\n      rotationIK += 360;\n    let sx = bone.ascaleX;\n    let sy = bone.ascaleY;\n    if (compress || stretch) {\n      switch (bone.data.transformMode) {\n        case TransformMode.NoScale:\n        case TransformMode.NoScaleOrReflection:\n          tx = targetX - bone.worldX;\n          ty = targetY - bone.worldY;\n      }\n      const b = bone.data.length * sx;\n      const dd = Math.sqrt(tx * tx + ty * ty);\n      if (compress && dd < b || stretch && dd > b && b > 1e-4) {\n        const s = (dd / b - 1) * alpha + 1;\n        sx *= s;\n        if (uniform)\n          sy *= s;\n      }\n    }\n    bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);\n  }\n  /** Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as possible. The\n   * target is specified in the world coordinate system.\n   * @param child A direct descendant of the parent bone. */\n  apply2(parent, child, targetX, targetY, bendDir, stretch, softness, alpha) {\n    if (alpha == 0) {\n      child.updateWorldTransform();\n      return;\n    }\n    if (!parent.appliedValid)\n      parent.updateAppliedTransform();\n    if (!child.appliedValid)\n      child.updateAppliedTransform();\n    const px = parent.ax;\n    const py = parent.ay;\n    let psx = parent.ascaleX;\n    let sx = psx;\n    let psy = parent.ascaleY;\n    let csx = child.ascaleX;\n    const pmat = parent.matrix;\n    let os1 = 0;\n    let os2 = 0;\n    let s2 = 0;\n    if (psx < 0) {\n      psx = -psx;\n      os1 = 180;\n      s2 = -1;\n    } else {\n      os1 = 0;\n      s2 = 1;\n    }\n    if (psy < 0) {\n      psy = -psy;\n      s2 = -s2;\n    }\n    if (csx < 0) {\n      csx = -csx;\n      os2 = 180;\n    } else\n      os2 = 0;\n    const cx = child.ax;\n    let cy = 0;\n    let cwx = 0;\n    let cwy = 0;\n    let a = pmat.a;\n    let b = pmat.c;\n    let c = pmat.b;\n    let d = pmat.d;\n    const u = Math.abs(psx - psy) <= 1e-4;\n    if (!u) {\n      cy = 0;\n      cwx = a * cx + pmat.tx;\n      cwy = c * cx + pmat.ty;\n    } else {\n      cy = child.ay;\n      cwx = a * cx + b * cy + pmat.tx;\n      cwy = c * cx + d * cy + pmat.ty;\n    }\n    const pp = parent.parent.matrix;\n    a = pp.a;\n    b = pp.c;\n    c = pp.b;\n    d = pp.d;\n    const id = 1 / (a * d - b * c);\n    let x = cwx - pp.tx;\n    let y = cwy - pp.ty;\n    const dx = (x * d - y * b) * id - px;\n    const dy = (y * a - x * c) * id - py;\n    const l1 = Math.sqrt(dx * dx + dy * dy);\n    let l2 = child.data.length * csx;\n    let a1;\n    let a2;\n    if (l1 < 1e-4) {\n      this.apply1(parent, targetX, targetY, false, stretch, false, alpha);\n      child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n      return;\n    }\n    x = targetX - pp.tx;\n    y = targetY - pp.ty;\n    let tx = (x * d - y * b) * id - px;\n    let ty = (y * a - x * c) * id - py;\n    let dd = tx * tx + ty * ty;\n    if (softness != 0) {\n      softness *= psx * (csx + 1) / 2;\n      const td = Math.sqrt(dd);\n      const sd = td - l1 - l2 * psx + softness;\n      if (sd > 0) {\n        let p = Math.min(1, sd / (softness * 2)) - 1;\n        p = (sd - softness * (1 - p * p)) / td;\n        tx -= p * tx;\n        ty -= p * ty;\n        dd = tx * tx + ty * ty;\n      }\n    }\n    outer:\n      if (u) {\n        l2 *= psx;\n        let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n        if (cos < -1)\n          cos = -1;\n        else if (cos > 1) {\n          cos = 1;\n          if (stretch)\n            sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n        }\n        a2 = Math.acos(cos) * bendDir;\n        a = l1 + l2 * cos;\n        b = l2 * Math.sin(a2);\n        a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n      } else {\n        a = psx * l2;\n        b = psy * l2;\n        const aa = a * a;\n        const bb = b * b;\n        const ta = Math.atan2(ty, tx);\n        c = bb * l1 * l1 + aa * dd - aa * bb;\n        const c1 = -2 * bb * l1;\n        const c2 = bb - aa;\n        d = c1 * c1 - 4 * c2 * c;\n        if (d >= 0) {\n          let q = Math.sqrt(d);\n          if (c1 < 0)\n            q = -q;\n          q = -(c1 + q) / 2;\n          const r0 = q / c2;\n          const r1 = c / q;\n          const r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n          if (r * r <= dd) {\n            y = Math.sqrt(dd - r * r) * bendDir;\n            a1 = ta - Math.atan2(y, r);\n            a2 = Math.atan2(y / psy, (r - l1) / psx);\n            break outer;\n          }\n        }\n        let minAngle = MathUtils.PI;\n        let minX = l1 - a;\n        let minDist = minX * minX;\n        let minY = 0;\n        let maxAngle = 0;\n        let maxX = l1 + a;\n        let maxDist = maxX * maxX;\n        let maxY = 0;\n        c = -a * l1 / (aa - bb);\n        if (c >= -1 && c <= 1) {\n          c = Math.acos(c);\n          x = a * Math.cos(c) + l1;\n          y = b * Math.sin(c);\n          d = x * x + y * y;\n          if (d < minDist) {\n            minAngle = c;\n            minDist = d;\n            minX = x;\n            minY = y;\n          }\n          if (d > maxDist) {\n            maxAngle = c;\n            maxDist = d;\n            maxX = x;\n            maxY = y;\n          }\n        }\n        if (dd <= (minDist + maxDist) / 2) {\n          a1 = ta - Math.atan2(minY * bendDir, minX);\n          a2 = minAngle * bendDir;\n        } else {\n          a1 = ta - Math.atan2(maxY * bendDir, maxX);\n          a2 = maxAngle * bendDir;\n        }\n      }\n    const os = Math.atan2(cy, cx) * s2;\n    let rotation = parent.arotation;\n    a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation;\n    if (a1 > 180)\n      a1 -= 360;\n    else if (a1 < -180)\n      a1 += 360;\n    parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0);\n    rotation = child.arotation;\n    a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n    if (a2 > 180)\n      a2 -= 360;\n    else if (a2 < -180)\n      a2 += 360;\n    child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n  }\n}\n\nexport { IkConstraint };\n//# sourceMappingURL=IkConstraint.mjs.map\n","import { ConstraintData } from './Constraint.mjs';\n\nclass IkConstraintData extends ConstraintData {\n  constructor(name) {\n    super(name, 0, false);\n    this.bones = new Array();\n    this.bendDirection = 1;\n    this.compress = false;\n    this.stretch = false;\n    this.uniform = false;\n    this.mix = 1;\n    this.softness = 0;\n  }\n}\n\nexport { IkConstraintData };\n//# sourceMappingURL=IkConstraintData.mjs.map\n","import { ConstraintData } from './Constraint.mjs';\n\nclass PathConstraintData extends ConstraintData {\n  constructor(name) {\n    super(name, 0, false);\n    this.bones = new Array();\n  }\n}\nvar SpacingMode = /* @__PURE__ */ ((SpacingMode2) => {\n  SpacingMode2[SpacingMode2[\"Length\"] = 0] = \"Length\";\n  SpacingMode2[SpacingMode2[\"Fixed\"] = 1] = \"Fixed\";\n  SpacingMode2[SpacingMode2[\"Percent\"] = 2] = \"Percent\";\n  return SpacingMode2;\n})(SpacingMode || {});\n\nexport { PathConstraintData, SpacingMode };\n//# sourceMappingURL=PathConstraintData.mjs.map\n","import './attachments/Attachment.mjs';\nimport { RotateMode, Utils, PositionMode, MathUtils } from '@pixi-spine/base';\nimport { PathAttachment } from './attachments/PathAttachment.mjs';\nimport './attachments/RegionAttachment.mjs';\nimport { SpacingMode } from './PathConstraintData.mjs';\n\nconst _PathConstraint = class {\n  constructor(data, skeleton) {\n    this.position = 0;\n    this.spacing = 0;\n    this.rotateMix = 0;\n    this.translateMix = 0;\n    this.spaces = new Array();\n    this.positions = new Array();\n    this.world = new Array();\n    this.curves = new Array();\n    this.lengths = new Array();\n    this.segments = new Array();\n    this.active = false;\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    if (skeleton == null)\n      throw new Error(\"skeleton cannot be null.\");\n    this.data = data;\n    this.bones = new Array();\n    for (let i = 0, n = data.bones.length; i < n; i++)\n      this.bones.push(skeleton.findBone(data.bones[i].name));\n    this.target = skeleton.findSlot(data.target.name);\n    this.position = data.position;\n    this.spacing = data.spacing;\n    this.rotateMix = data.rotateMix;\n    this.translateMix = data.translateMix;\n  }\n  isActive() {\n    return this.active;\n  }\n  apply() {\n    this.update();\n  }\n  update() {\n    const attachment = this.target.getAttachment();\n    if (!(attachment instanceof PathAttachment))\n      return;\n    const rotateMix = this.rotateMix;\n    const translateMix = this.translateMix;\n    const translate = translateMix > 0;\n    const rotate = rotateMix > 0;\n    if (!translate && !rotate)\n      return;\n    const data = this.data;\n    const spacingMode = data.spacingMode;\n    const lengthSpacing = spacingMode == SpacingMode.Length;\n    const rotateMode = data.rotateMode;\n    const tangents = rotateMode == RotateMode.Tangent;\n    const scale = rotateMode == RotateMode.ChainScale;\n    const boneCount = this.bones.length;\n    const spacesCount = tangents ? boneCount : boneCount + 1;\n    const bones = this.bones;\n    const spaces = Utils.setArraySize(this.spaces, spacesCount);\n    let lengths = null;\n    const spacing = this.spacing;\n    if (scale || lengthSpacing) {\n      if (scale)\n        lengths = Utils.setArraySize(this.lengths, boneCount);\n      for (let i = 0, n = spacesCount - 1; i < n; ) {\n        const bone = bones[i];\n        const setupLength = bone.data.length;\n        if (setupLength < _PathConstraint.epsilon) {\n          if (scale)\n            lengths[i] = 0;\n          spaces[++i] = 0;\n        } else {\n          const x = setupLength * bone.matrix.a;\n          const y = setupLength * bone.matrix.b;\n          const length = Math.sqrt(x * x + y * y);\n          if (scale)\n            lengths[i] = length;\n          spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;\n        }\n      }\n    } else {\n      for (let i = 1; i < spacesCount; i++)\n        spaces[i] = spacing;\n    }\n    const positions = this.computeWorldPositions(\n      attachment,\n      spacesCount,\n      tangents,\n      data.positionMode == PositionMode.Percent,\n      spacingMode == SpacingMode.Percent\n    );\n    let boneX = positions[0];\n    let boneY = positions[1];\n    let offsetRotation = data.offsetRotation;\n    let tip = false;\n    if (offsetRotation == 0)\n      tip = rotateMode == RotateMode.Chain;\n    else {\n      tip = false;\n      const p = this.target.bone.matrix;\n      offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n    }\n    for (let i = 0, p = 3; i < boneCount; i++, p += 3) {\n      const bone = bones[i];\n      const mat = bone.matrix;\n      mat.tx += (boneX - mat.tx) * translateMix;\n      mat.ty += (boneY - mat.ty) * translateMix;\n      const x = positions[p];\n      const y = positions[p + 1];\n      const dx = x - boneX;\n      const dy = y - boneY;\n      if (scale) {\n        const length = lengths[i];\n        if (length != 0) {\n          const s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * rotateMix + 1;\n          mat.a *= s;\n          mat.b *= s;\n        }\n      }\n      boneX = x;\n      boneY = y;\n      if (rotate) {\n        const a = mat.a;\n        const b = mat.c;\n        const c = mat.b;\n        const d = mat.d;\n        let r = 0;\n        let cos = 0;\n        let sin = 0;\n        if (tangents)\n          if (tangents)\n            r = positions[p - 1];\n          else if (spaces[i + 1] == 0)\n            r = positions[p + 2];\n          else\n            r = Math.atan2(dy, dx);\n        r -= Math.atan2(c, a);\n        if (tip) {\n          cos = Math.cos(r);\n          sin = Math.sin(r);\n          const length = bone.data.length;\n          boneX += (length * (cos * a - sin * c) - dx) * rotateMix;\n          boneY += (length * (sin * a + cos * c) - dy) * rotateMix;\n        } else {\n          r += offsetRotation;\n        }\n        if (r > MathUtils.PI)\n          r -= MathUtils.PI2;\n        else if (r < -MathUtils.PI)\n          r += MathUtils.PI2;\n        r *= rotateMix;\n        cos = Math.cos(r);\n        sin = Math.sin(r);\n        mat.a = cos * a - sin * c;\n        mat.c = cos * b - sin * d;\n        mat.b = sin * a + cos * c;\n        mat.d = sin * b + cos * d;\n      }\n      bone.appliedValid = false;\n    }\n  }\n  computeWorldPositions(path, spacesCount, tangents, percentPosition, percentSpacing) {\n    const target = this.target;\n    let position = this.position;\n    const spaces = this.spaces;\n    const out = Utils.setArraySize(this.positions, spacesCount * 3 + 2);\n    let world = null;\n    const closed = path.closed;\n    let verticesLength = path.worldVerticesLength;\n    let curveCount = verticesLength / 6;\n    let prevCurve = _PathConstraint.NONE;\n    if (!path.constantSpeed) {\n      const lengths = path.lengths;\n      curveCount -= closed ? 1 : 2;\n      const pathLength2 = lengths[curveCount];\n      if (percentPosition)\n        position *= pathLength2;\n      if (percentSpacing) {\n        for (let i = 0; i < spacesCount; i++)\n          spaces[i] *= pathLength2;\n      }\n      world = Utils.setArraySize(this.world, 8);\n      for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n        const space = spaces[i];\n        position += space;\n        let p = position;\n        if (closed) {\n          p %= pathLength2;\n          if (p < 0)\n            p += pathLength2;\n          curve = 0;\n        } else if (p < 0) {\n          if (prevCurve != _PathConstraint.BEFORE) {\n            prevCurve = _PathConstraint.BEFORE;\n            path.computeWorldVertices(target, 2, 4, world, 0, 2);\n          }\n          this.addBeforePosition(p, world, 0, out, o);\n          continue;\n        } else if (p > pathLength2) {\n          if (prevCurve != _PathConstraint.AFTER) {\n            prevCurve = _PathConstraint.AFTER;\n            path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n          }\n          this.addAfterPosition(p - pathLength2, world, 0, out, o);\n          continue;\n        }\n        for (; ; curve++) {\n          const length = lengths[curve];\n          if (p > length)\n            continue;\n          if (curve == 0)\n            p /= length;\n          else {\n            const prev = lengths[curve - 1];\n            p = (p - prev) / (length - prev);\n          }\n          break;\n        }\n        if (curve != prevCurve) {\n          prevCurve = curve;\n          if (closed && curve == curveCount) {\n            path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n            path.computeWorldVertices(target, 0, 4, world, 4, 2);\n          } else\n            path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n        }\n        this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || i > 0 && space == 0);\n      }\n      return out;\n    }\n    if (closed) {\n      verticesLength += 2;\n      world = Utils.setArraySize(this.world, verticesLength);\n      path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n      path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n      world[verticesLength - 2] = world[0];\n      world[verticesLength - 1] = world[1];\n    } else {\n      curveCount--;\n      verticesLength -= 4;\n      world = Utils.setArraySize(this.world, verticesLength);\n      path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n    }\n    const curves = Utils.setArraySize(this.curves, curveCount);\n    let pathLength = 0;\n    let x1 = world[0];\n    let y1 = world[1];\n    let cx1 = 0;\n    let cy1 = 0;\n    let cx2 = 0;\n    let cy2 = 0;\n    let x2 = 0;\n    let y2 = 0;\n    let tmpx = 0;\n    let tmpy = 0;\n    let dddfx = 0;\n    let dddfy = 0;\n    let ddfx = 0;\n    let ddfy = 0;\n    let dfx = 0;\n    let dfy = 0;\n    for (let i = 0, w = 2; i < curveCount; i++, w += 6) {\n      cx1 = world[w];\n      cy1 = world[w + 1];\n      cx2 = world[w + 2];\n      cy2 = world[w + 3];\n      x2 = world[w + 4];\n      y2 = world[w + 5];\n      tmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n      tmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n      dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n      dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n      ddfx = tmpx * 2 + dddfx;\n      ddfy = tmpy * 2 + dddfy;\n      dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n      dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n      pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n      dfx += ddfx;\n      dfy += ddfy;\n      ddfx += dddfx;\n      ddfy += dddfy;\n      pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n      dfx += ddfx;\n      dfy += ddfy;\n      pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n      dfx += ddfx + dddfx;\n      dfy += ddfy + dddfy;\n      pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n      curves[i] = pathLength;\n      x1 = x2;\n      y1 = y2;\n    }\n    if (percentPosition)\n      position *= pathLength;\n    if (percentSpacing) {\n      for (let i = 0; i < spacesCount; i++)\n        spaces[i] *= pathLength;\n    }\n    const segments = this.segments;\n    let curveLength = 0;\n    for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n      const space = spaces[i];\n      position += space;\n      let p = position;\n      if (closed) {\n        p %= pathLength;\n        if (p < 0)\n          p += pathLength;\n        curve = 0;\n      } else if (p < 0) {\n        this.addBeforePosition(p, world, 0, out, o);\n        continue;\n      } else if (p > pathLength) {\n        this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n        continue;\n      }\n      for (; ; curve++) {\n        const length = curves[curve];\n        if (p > length)\n          continue;\n        if (curve == 0)\n          p /= length;\n        else {\n          const prev = curves[curve - 1];\n          p = (p - prev) / (length - prev);\n        }\n        break;\n      }\n      if (curve != prevCurve) {\n        prevCurve = curve;\n        let ii = curve * 6;\n        x1 = world[ii];\n        y1 = world[ii + 1];\n        cx1 = world[ii + 2];\n        cy1 = world[ii + 3];\n        cx2 = world[ii + 4];\n        cy2 = world[ii + 5];\n        x2 = world[ii + 6];\n        y2 = world[ii + 7];\n        tmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n        tmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n        dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 6e-3;\n        dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 6e-3;\n        ddfx = tmpx * 2 + dddfx;\n        ddfy = tmpy * 2 + dddfy;\n        dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n        dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n        curveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n        segments[0] = curveLength;\n        for (ii = 1; ii < 8; ii++) {\n          dfx += ddfx;\n          dfy += ddfy;\n          ddfx += dddfx;\n          ddfy += dddfy;\n          curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n          segments[ii] = curveLength;\n        }\n        dfx += ddfx;\n        dfy += ddfy;\n        curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n        segments[8] = curveLength;\n        dfx += ddfx + dddfx;\n        dfy += ddfy + dddfy;\n        curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n        segments[9] = curveLength;\n        segment = 0;\n      }\n      p *= curveLength;\n      for (; ; segment++) {\n        const length = segments[segment];\n        if (p > length)\n          continue;\n        if (segment == 0)\n          p /= length;\n        else {\n          const prev = segments[segment - 1];\n          p = segment + (p - prev) / (length - prev);\n        }\n        break;\n      }\n      this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && space == 0);\n    }\n    return out;\n  }\n  addBeforePosition(p, temp, i, out, o) {\n    const x1 = temp[i];\n    const y1 = temp[i + 1];\n    const dx = temp[i + 2] - x1;\n    const dy = temp[i + 3] - y1;\n    const r = Math.atan2(dy, dx);\n    out[o] = x1 + p * Math.cos(r);\n    out[o + 1] = y1 + p * Math.sin(r);\n    out[o + 2] = r;\n  }\n  addAfterPosition(p, temp, i, out, o) {\n    const x1 = temp[i + 2];\n    const y1 = temp[i + 3];\n    const dx = x1 - temp[i];\n    const dy = y1 - temp[i + 1];\n    const r = Math.atan2(dy, dx);\n    out[o] = x1 + p * Math.cos(r);\n    out[o + 1] = y1 + p * Math.sin(r);\n    out[o + 2] = r;\n  }\n  addCurvePosition(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {\n    if (p == 0 || isNaN(p))\n      p = 1e-4;\n    const tt = p * p;\n    const ttt = tt * p;\n    const u = 1 - p;\n    const uu = u * u;\n    const uuu = uu * u;\n    const ut = u * p;\n    const ut3 = ut * 3;\n    const uut3 = u * ut3;\n    const utt3 = ut3 * p;\n    const x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt;\n    const y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n    out[o] = x;\n    out[o + 1] = y;\n    if (tangents)\n      out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n  }\n};\nlet PathConstraint = _PathConstraint;\nPathConstraint.NONE = -1;\nPathConstraint.BEFORE = -2;\nPathConstraint.AFTER = -3;\nPathConstraint.epsilon = 1e-5;\n\nexport { PathConstraint };\n//# sourceMappingURL=PathConstraint.mjs.map\n","import { Vector2, MathUtils } from '@pixi-spine/base';\n\nclass TransformConstraint {\n  constructor(data, skeleton) {\n    this.rotateMix = 0;\n    this.translateMix = 0;\n    this.scaleMix = 0;\n    this.shearMix = 0;\n    this.temp = new Vector2();\n    this.active = false;\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    if (skeleton == null)\n      throw new Error(\"skeleton cannot be null.\");\n    this.data = data;\n    this.rotateMix = data.rotateMix;\n    this.translateMix = data.translateMix;\n    this.scaleMix = data.scaleMix;\n    this.shearMix = data.shearMix;\n    this.bones = new Array();\n    for (let i = 0; i < data.bones.length; i++)\n      this.bones.push(skeleton.findBone(data.bones[i].name));\n    this.target = skeleton.findBone(data.target.name);\n  }\n  isActive() {\n    return this.active;\n  }\n  apply() {\n    this.update();\n  }\n  update() {\n    if (this.data.local) {\n      if (this.data.relative)\n        this.applyRelativeLocal();\n      else\n        this.applyAbsoluteLocal();\n    } else if (this.data.relative)\n      this.applyRelativeWorld();\n    else\n      this.applyAbsoluteWorld();\n  }\n  applyAbsoluteWorld() {\n    const rotateMix = this.rotateMix;\n    const translateMix = this.translateMix;\n    const scaleMix = this.scaleMix;\n    const shearMix = this.shearMix;\n    const target = this.target;\n    const targetMat = target.matrix;\n    const ta = targetMat.a;\n    const tb = targetMat.c;\n    const tc = targetMat.b;\n    const td = targetMat.d;\n    const degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n    const offsetRotation = this.data.offsetRotation * degRadReflect;\n    const offsetShearY = this.data.offsetShearY * degRadReflect;\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      let modified = false;\n      const mat = bone.matrix;\n      if (rotateMix != 0) {\n        const a = mat.a;\n        const b = mat.c;\n        const c = mat.b;\n        const d = mat.d;\n        let r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n        if (r > MathUtils.PI)\n          r -= MathUtils.PI2;\n        else if (r < -MathUtils.PI)\n          r += MathUtils.PI2;\n        r *= rotateMix;\n        const cos = Math.cos(r);\n        const sin = Math.sin(r);\n        mat.a = cos * a - sin * c;\n        mat.c = cos * b - sin * d;\n        mat.b = sin * a + cos * c;\n        mat.d = sin * b + cos * d;\n        modified = true;\n      }\n      if (translateMix != 0) {\n        const temp = this.temp;\n        target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n        mat.tx += (temp.x - mat.tx) * translateMix;\n        mat.ty += (temp.y - mat.ty) * translateMix;\n        modified = true;\n      }\n      if (scaleMix > 0) {\n        let s = Math.sqrt(mat.a * mat.a + mat.b * mat.b);\n        let ts = Math.sqrt(ta * ta + tc * tc);\n        if (s > 1e-5)\n          s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s;\n        mat.a *= s;\n        mat.b *= s;\n        s = Math.sqrt(mat.c * mat.c + mat.d * mat.d);\n        ts = Math.sqrt(tb * tb + td * td);\n        if (s > 1e-5)\n          s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s;\n        mat.c *= s;\n        mat.d *= s;\n        modified = true;\n      }\n      if (shearMix > 0) {\n        const b = mat.c;\n        const d = mat.d;\n        const by = Math.atan2(d, b);\n        let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(mat.b, mat.a));\n        if (r > MathUtils.PI)\n          r -= MathUtils.PI2;\n        else if (r < -MathUtils.PI)\n          r += MathUtils.PI2;\n        r = by + (r + offsetShearY) * shearMix;\n        const s = Math.sqrt(b * b + d * d);\n        mat.c = Math.cos(r) * s;\n        mat.d = Math.sin(r) * s;\n        modified = true;\n      }\n      if (modified)\n        bone.appliedValid = false;\n    }\n  }\n  applyRelativeWorld() {\n    const rotateMix = this.rotateMix;\n    const translateMix = this.translateMix;\n    const scaleMix = this.scaleMix;\n    const shearMix = this.shearMix;\n    const target = this.target;\n    const targetMat = target.matrix;\n    const ta = targetMat.a;\n    const tb = targetMat.c;\n    const tc = targetMat.b;\n    const td = targetMat.d;\n    const degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n    const offsetRotation = this.data.offsetRotation * degRadReflect;\n    const offsetShearY = this.data.offsetShearY * degRadReflect;\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      let modified = false;\n      const mat = bone.matrix;\n      if (rotateMix != 0) {\n        const a = mat.a;\n        const b = mat.c;\n        const c = mat.b;\n        const d = mat.d;\n        let r = Math.atan2(tc, ta) + offsetRotation;\n        if (r > MathUtils.PI)\n          r -= MathUtils.PI2;\n        else if (r < -MathUtils.PI)\n          r += MathUtils.PI2;\n        r *= rotateMix;\n        const cos = Math.cos(r);\n        const sin = Math.sin(r);\n        mat.a = cos * a - sin * c;\n        mat.c = cos * b - sin * d;\n        mat.b = sin * a + cos * c;\n        mat.d = sin * b + cos * d;\n        modified = true;\n      }\n      if (translateMix != 0) {\n        const temp = this.temp;\n        target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n        mat.tx += temp.x * translateMix;\n        mat.ty += temp.y * translateMix;\n        modified = true;\n      }\n      if (scaleMix > 0) {\n        let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;\n        mat.a *= s;\n        mat.b *= s;\n        s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;\n        mat.c *= s;\n        mat.d *= s;\n        modified = true;\n      }\n      if (shearMix > 0) {\n        let r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n        if (r > MathUtils.PI)\n          r -= MathUtils.PI2;\n        else if (r < -MathUtils.PI)\n          r += MathUtils.PI2;\n        const b = mat.c;\n        const d = mat.d;\n        r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * shearMix;\n        const s = Math.sqrt(b * b + d * d);\n        mat.c = Math.cos(r) * s;\n        mat.d = Math.sin(r) * s;\n        modified = true;\n      }\n      if (modified)\n        bone.appliedValid = false;\n    }\n  }\n  applyAbsoluteLocal() {\n    const rotateMix = this.rotateMix;\n    const translateMix = this.translateMix;\n    const scaleMix = this.scaleMix;\n    const shearMix = this.shearMix;\n    const target = this.target;\n    if (!target.appliedValid)\n      target.updateAppliedTransform();\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      if (!bone.appliedValid)\n        bone.updateAppliedTransform();\n      let rotation = bone.arotation;\n      if (rotateMix != 0) {\n        let r = target.arotation - rotation + this.data.offsetRotation;\n        r -= (16384 - (16384.499999999996 - r / 360 | 0)) * 360;\n        rotation += r * rotateMix;\n      }\n      let x = bone.ax;\n      let y = bone.ay;\n      if (translateMix != 0) {\n        x += (target.ax - x + this.data.offsetX) * translateMix;\n        y += (target.ay - y + this.data.offsetY) * translateMix;\n      }\n      let scaleX = bone.ascaleX;\n      let scaleY = bone.ascaleY;\n      if (scaleMix > 0) {\n        if (scaleX > 1e-5)\n          scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX;\n        if (scaleY > 1e-5)\n          scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY;\n      }\n      const shearY = bone.ashearY;\n      if (shearMix > 0) {\n        let r = target.ashearY - shearY + this.data.offsetShearY;\n        r -= (16384 - (16384.499999999996 - r / 360 | 0)) * 360;\n        bone.shearY += r * shearMix;\n      }\n      bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n    }\n  }\n  applyRelativeLocal() {\n    const rotateMix = this.rotateMix;\n    const translateMix = this.translateMix;\n    const scaleMix = this.scaleMix;\n    const shearMix = this.shearMix;\n    const target = this.target;\n    if (!target.appliedValid)\n      target.updateAppliedTransform();\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      if (!bone.appliedValid)\n        bone.updateAppliedTransform();\n      let rotation = bone.arotation;\n      if (rotateMix != 0)\n        rotation += (target.arotation + this.data.offsetRotation) * rotateMix;\n      let x = bone.ax;\n      let y = bone.ay;\n      if (translateMix != 0) {\n        x += (target.ax + this.data.offsetX) * translateMix;\n        y += (target.ay + this.data.offsetY) * translateMix;\n      }\n      let scaleX = bone.ascaleX;\n      let scaleY = bone.ascaleY;\n      if (scaleMix > 0) {\n        if (scaleX > 1e-5)\n          scaleX *= (target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix + 1;\n        if (scaleY > 1e-5)\n          scaleY *= (target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix + 1;\n      }\n      let shearY = bone.ashearY;\n      if (shearMix > 0)\n        shearY += (target.ashearY + this.data.offsetShearY) * shearMix;\n      bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n    }\n  }\n}\n\nexport { TransformConstraint };\n//# sourceMappingURL=TransformConstraint.mjs.map\n","import './attachments/Attachment.mjs';\nimport { Color, Utils } from '@pixi-spine/base';\nimport { MeshAttachment } from './attachments/MeshAttachment.mjs';\nimport { PathAttachment } from './attachments/PathAttachment.mjs';\nimport { RegionAttachment } from './attachments/RegionAttachment.mjs';\nimport { Bone } from './Bone.mjs';\nimport { Slot } from './Slot.mjs';\nimport { IkConstraint } from './IkConstraint.mjs';\nimport { TransformConstraint } from './TransformConstraint.mjs';\nimport { PathConstraint } from './PathConstraint.mjs';\n\nconst _Skeleton = class {\n  constructor(data) {\n    this._updateCache = new Array();\n    this.updateCacheReset = new Array();\n    this.time = 0;\n    this.scaleX = 1;\n    this.scaleY = 1;\n    this.x = 0;\n    this.y = 0;\n    if (data == null)\n      throw new Error(\"data cannot be null.\");\n    this.data = data;\n    this.bones = new Array();\n    for (let i = 0; i < data.bones.length; i++) {\n      const boneData = data.bones[i];\n      let bone;\n      if (boneData.parent == null)\n        bone = new Bone(boneData, this, null);\n      else {\n        const parent = this.bones[boneData.parent.index];\n        bone = new Bone(boneData, this, parent);\n        parent.children.push(bone);\n      }\n      this.bones.push(bone);\n    }\n    this.slots = new Array();\n    this.drawOrder = new Array();\n    for (let i = 0; i < data.slots.length; i++) {\n      const slotData = data.slots[i];\n      const bone = this.bones[slotData.boneData.index];\n      const slot = new Slot(slotData, bone);\n      this.slots.push(slot);\n      this.drawOrder.push(slot);\n    }\n    this.ikConstraints = new Array();\n    for (let i = 0; i < data.ikConstraints.length; i++) {\n      const ikConstraintData = data.ikConstraints[i];\n      this.ikConstraints.push(new IkConstraint(ikConstraintData, this));\n    }\n    this.transformConstraints = new Array();\n    for (let i = 0; i < data.transformConstraints.length; i++) {\n      const transformConstraintData = data.transformConstraints[i];\n      this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));\n    }\n    this.pathConstraints = new Array();\n    for (let i = 0; i < data.pathConstraints.length; i++) {\n      const pathConstraintData = data.pathConstraints[i];\n      this.pathConstraints.push(new PathConstraint(pathConstraintData, this));\n    }\n    this.color = new Color(1, 1, 1, 1);\n    this.updateCache();\n  }\n  updateCache() {\n    const updateCache = this._updateCache;\n    updateCache.length = 0;\n    this.updateCacheReset.length = 0;\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      bone.sorted = bone.data.skinRequired;\n      bone.active = !bone.sorted;\n    }\n    if (this.skin != null) {\n      const skinBones = this.skin.bones;\n      for (let i = 0, n = this.skin.bones.length; i < n; i++) {\n        let bone = this.bones[skinBones[i].index];\n        do {\n          bone.sorted = false;\n          bone.active = true;\n          bone = bone.parent;\n        } while (bone != null);\n      }\n    }\n    const ikConstraints = this.ikConstraints;\n    const transformConstraints = this.transformConstraints;\n    const pathConstraints = this.pathConstraints;\n    const ikCount = ikConstraints.length;\n    const transformCount = transformConstraints.length;\n    const pathCount = pathConstraints.length;\n    const constraintCount = ikCount + transformCount + pathCount;\n    outer:\n      for (let i = 0; i < constraintCount; i++) {\n        for (let ii = 0; ii < ikCount; ii++) {\n          const constraint = ikConstraints[ii];\n          if (constraint.data.order == i) {\n            this.sortIkConstraint(constraint);\n            continue outer;\n          }\n        }\n        for (let ii = 0; ii < transformCount; ii++) {\n          const constraint = transformConstraints[ii];\n          if (constraint.data.order == i) {\n            this.sortTransformConstraint(constraint);\n            continue outer;\n          }\n        }\n        for (let ii = 0; ii < pathCount; ii++) {\n          const constraint = pathConstraints[ii];\n          if (constraint.data.order == i) {\n            this.sortPathConstraint(constraint);\n            continue outer;\n          }\n        }\n      }\n    for (let i = 0, n = bones.length; i < n; i++)\n      this.sortBone(bones[i]);\n  }\n  sortIkConstraint(constraint) {\n    constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true));\n    if (!constraint.active)\n      return;\n    const target = constraint.target;\n    this.sortBone(target);\n    const constrained = constraint.bones;\n    const parent = constrained[0];\n    this.sortBone(parent);\n    if (constrained.length > 1) {\n      const child = constrained[constrained.length - 1];\n      if (!(this._updateCache.indexOf(child) > -1))\n        this.updateCacheReset.push(child);\n    }\n    this._updateCache.push(constraint);\n    this.sortReset(parent.children);\n    constrained[constrained.length - 1].sorted = true;\n  }\n  sortPathConstraint(constraint) {\n    constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true));\n    if (!constraint.active)\n      return;\n    const slot = constraint.target;\n    const slotIndex = slot.data.index;\n    const slotBone = slot.bone;\n    if (this.skin != null)\n      this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n    if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin)\n      this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n    for (let i = 0, n = this.data.skins.length; i < n; i++)\n      this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n    const attachment = slot.getAttachment();\n    if (attachment instanceof PathAttachment)\n      this.sortPathConstraintAttachmentWith(attachment, slotBone);\n    const constrained = constraint.bones;\n    const boneCount = constrained.length;\n    for (let i = 0; i < boneCount; i++)\n      this.sortBone(constrained[i]);\n    this._updateCache.push(constraint);\n    for (let i = 0; i < boneCount; i++)\n      this.sortReset(constrained[i].children);\n    for (let i = 0; i < boneCount; i++)\n      constrained[i].sorted = true;\n  }\n  sortTransformConstraint(constraint) {\n    constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true));\n    if (!constraint.active)\n      return;\n    this.sortBone(constraint.target);\n    const constrained = constraint.bones;\n    const boneCount = constrained.length;\n    if (constraint.data.local) {\n      for (let i = 0; i < boneCount; i++) {\n        const child = constrained[i];\n        this.sortBone(child.parent);\n        if (!(this._updateCache.indexOf(child) > -1))\n          this.updateCacheReset.push(child);\n      }\n    } else {\n      for (let i = 0; i < boneCount; i++) {\n        this.sortBone(constrained[i]);\n      }\n    }\n    this._updateCache.push(constraint);\n    for (let ii = 0; ii < boneCount; ii++)\n      this.sortReset(constrained[ii].children);\n    for (let ii = 0; ii < boneCount; ii++)\n      constrained[ii].sorted = true;\n  }\n  sortPathConstraintAttachment(skin, slotIndex, slotBone) {\n    const attachments = skin.attachments[slotIndex];\n    if (!attachments)\n      return;\n    for (const key in attachments) {\n      this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n    }\n  }\n  sortPathConstraintAttachmentWith(attachment, slotBone) {\n    if (!(attachment instanceof PathAttachment))\n      return;\n    const pathBones = attachment.bones;\n    if (pathBones == null)\n      this.sortBone(slotBone);\n    else {\n      const bones = this.bones;\n      let i = 0;\n      while (i < pathBones.length) {\n        const boneCount = pathBones[i++];\n        for (let n = i + boneCount; i < n; i++) {\n          const boneIndex = pathBones[i];\n          this.sortBone(bones[boneIndex]);\n        }\n      }\n    }\n  }\n  sortBone(bone) {\n    if (bone.sorted)\n      return;\n    const parent = bone.parent;\n    if (parent != null)\n      this.sortBone(parent);\n    bone.sorted = true;\n    this._updateCache.push(bone);\n  }\n  sortReset(bones) {\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      if (!bone.active)\n        continue;\n      if (bone.sorted)\n        this.sortReset(bone.children);\n      bone.sorted = false;\n    }\n  }\n  /** Updates the world transform for each bone and applies constraints. */\n  updateWorldTransform() {\n    const updateCacheReset = this.updateCacheReset;\n    for (let i = 0, n = updateCacheReset.length; i < n; i++) {\n      const bone = updateCacheReset[i];\n      bone.ax = bone.x;\n      bone.ay = bone.y;\n      bone.arotation = bone.rotation;\n      bone.ascaleX = bone.scaleX;\n      bone.ascaleY = bone.scaleY;\n      bone.ashearX = bone.shearX;\n      bone.ashearY = bone.shearY;\n      bone.appliedValid = true;\n    }\n    const updateCache = this._updateCache;\n    for (let i = 0, n = updateCache.length; i < n; i++)\n      updateCache[i].update();\n  }\n  /** Sets the bones, constraints, and slots to their setup pose values. */\n  setToSetupPose() {\n    this.setBonesToSetupPose();\n    this.setSlotsToSetupPose();\n  }\n  /** Sets the bones and constraints to their setup pose values. */\n  setBonesToSetupPose() {\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++)\n      bones[i].setToSetupPose();\n    const ikConstraints = this.ikConstraints;\n    for (let i = 0, n = ikConstraints.length; i < n; i++) {\n      const constraint = ikConstraints[i];\n      constraint.mix = constraint.data.mix;\n      constraint.softness = constraint.data.softness;\n      constraint.bendDirection = constraint.data.bendDirection;\n      constraint.compress = constraint.data.compress;\n      constraint.stretch = constraint.data.stretch;\n    }\n    const transformConstraints = this.transformConstraints;\n    for (let i = 0, n = transformConstraints.length; i < n; i++) {\n      const constraint = transformConstraints[i];\n      const data = constraint.data;\n      constraint.rotateMix = data.rotateMix;\n      constraint.translateMix = data.translateMix;\n      constraint.scaleMix = data.scaleMix;\n      constraint.shearMix = data.shearMix;\n    }\n    const pathConstraints = this.pathConstraints;\n    for (let i = 0, n = pathConstraints.length; i < n; i++) {\n      const constraint = pathConstraints[i];\n      const data = constraint.data;\n      constraint.position = data.position;\n      constraint.spacing = data.spacing;\n      constraint.rotateMix = data.rotateMix;\n      constraint.translateMix = data.translateMix;\n    }\n  }\n  setSlotsToSetupPose() {\n    const slots = this.slots;\n    Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n    for (let i = 0, n = slots.length; i < n; i++)\n      slots[i].setToSetupPose();\n  }\n  /** @return May return null. */\n  getRootBone() {\n    if (this.bones.length == 0)\n      return null;\n    return this.bones[0];\n  }\n  /** @return May be null. */\n  findBone(boneName) {\n    if (boneName == null)\n      throw new Error(\"boneName cannot be null.\");\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      if (bone.data.name == boneName)\n        return bone;\n    }\n    return null;\n  }\n  /** @return -1 if the bone was not found. */\n  findBoneIndex(boneName) {\n    if (boneName == null)\n      throw new Error(\"boneName cannot be null.\");\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++)\n      if (bones[i].data.name == boneName)\n        return i;\n    return -1;\n  }\n  /** @return May be null. */\n  findSlot(slotName) {\n    if (slotName == null)\n      throw new Error(\"slotName cannot be null.\");\n    const slots = this.slots;\n    for (let i = 0, n = slots.length; i < n; i++) {\n      const slot = slots[i];\n      if (slot.data.name == slotName)\n        return slot;\n    }\n    return null;\n  }\n  /** @return -1 if the bone was not found. */\n  findSlotIndex(slotName) {\n    if (slotName == null)\n      throw new Error(\"slotName cannot be null.\");\n    const slots = this.slots;\n    for (let i = 0, n = slots.length; i < n; i++)\n      if (slots[i].data.name == slotName)\n        return i;\n    return -1;\n  }\n  /** Sets a skin by name.\n   * @see #setSkin(Skin) */\n  setSkinByName(skinName) {\n    const skin = this.data.findSkin(skinName);\n    if (skin == null)\n      throw new Error(`Skin not found: ${skinName}`);\n    this.setSkin(skin);\n  }\n  /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#getDefaultSkin() default skin}.\n   * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no\n   * old skin, each slot's setup mode attachment is attached from the new skin.\n   * @param newSkin May be null. */\n  setSkin(newSkin) {\n    if (newSkin == this.skin)\n      return;\n    if (newSkin != null) {\n      if (this.skin != null)\n        newSkin.attachAll(this, this.skin);\n      else {\n        const slots = this.slots;\n        for (let i = 0, n = slots.length; i < n; i++) {\n          const slot = slots[i];\n          const name = slot.data.attachmentName;\n          if (name != null) {\n            const attachment = newSkin.getAttachment(i, name);\n            if (attachment != null)\n              slot.setAttachment(attachment);\n          }\n        }\n      }\n    }\n    this.skin = newSkin;\n    this.updateCache();\n  }\n  /** @return May be null. */\n  getAttachmentByName(slotName, attachmentName) {\n    return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n  }\n  /** @return May be null. */\n  getAttachment(slotIndex, attachmentName) {\n    if (attachmentName == null)\n      throw new Error(\"attachmentName cannot be null.\");\n    if (this.skin != null) {\n      const attachment = this.skin.getAttachment(slotIndex, attachmentName);\n      if (attachment != null)\n        return attachment;\n    }\n    if (this.data.defaultSkin != null)\n      return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n    return null;\n  }\n  /** @param attachmentName May be null. */\n  setAttachment(slotName, attachmentName) {\n    if (slotName == null)\n      throw new Error(\"slotName cannot be null.\");\n    const slots = this.slots;\n    for (let i = 0, n = slots.length; i < n; i++) {\n      const slot = slots[i];\n      if (slot.data.name == slotName) {\n        let attachment = null;\n        if (attachmentName != null) {\n          attachment = this.getAttachment(i, attachmentName);\n          if (attachment == null)\n            throw new Error(`Attachment not found: ${attachmentName}, for slot: ${slotName}`);\n        }\n        slot.setAttachment(attachment);\n        return;\n      }\n    }\n    throw new Error(`Slot not found: ${slotName}`);\n  }\n  /** @return May be null. */\n  findIkConstraint(constraintName) {\n    if (constraintName == null)\n      throw new Error(\"constraintName cannot be null.\");\n    const ikConstraints = this.ikConstraints;\n    for (let i = 0, n = ikConstraints.length; i < n; i++) {\n      const ikConstraint = ikConstraints[i];\n      if (ikConstraint.data.name == constraintName)\n        return ikConstraint;\n    }\n    return null;\n  }\n  /** @return May be null. */\n  findTransformConstraint(constraintName) {\n    if (constraintName == null)\n      throw new Error(\"constraintName cannot be null.\");\n    const transformConstraints = this.transformConstraints;\n    for (let i = 0, n = transformConstraints.length; i < n; i++) {\n      const constraint = transformConstraints[i];\n      if (constraint.data.name == constraintName)\n        return constraint;\n    }\n    return null;\n  }\n  /** @return May be null. */\n  findPathConstraint(constraintName) {\n    if (constraintName == null)\n      throw new Error(\"constraintName cannot be null.\");\n    const pathConstraints = this.pathConstraints;\n    for (let i = 0, n = pathConstraints.length; i < n; i++) {\n      const constraint = pathConstraints[i];\n      if (constraint.data.name == constraintName)\n        return constraint;\n    }\n    return null;\n  }\n  /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.\n   * @param offset The distance from the skeleton origin to the bottom left corner of the AABB.\n   * @param size The width and height of the AABB.\n   * @param temp Working memory */\n  getBounds(offset, size, temp = new Array(2)) {\n    if (offset == null)\n      throw new Error(\"offset cannot be null.\");\n    if (size == null)\n      throw new Error(\"size cannot be null.\");\n    const drawOrder = this.drawOrder;\n    let minX = Number.POSITIVE_INFINITY;\n    let minY = Number.POSITIVE_INFINITY;\n    let maxX = Number.NEGATIVE_INFINITY;\n    let maxY = Number.NEGATIVE_INFINITY;\n    for (let i = 0, n = drawOrder.length; i < n; i++) {\n      const slot = drawOrder[i];\n      if (!slot.bone.active)\n        continue;\n      let verticesLength = 0;\n      let vertices = null;\n      const attachment = slot.getAttachment();\n      if (attachment instanceof RegionAttachment) {\n        verticesLength = 8;\n        vertices = Utils.setArraySize(temp, verticesLength, 0);\n        attachment.computeWorldVertices(slot.bone, vertices, 0, 2);\n      } else if (attachment instanceof MeshAttachment) {\n        const mesh = attachment;\n        verticesLength = mesh.worldVerticesLength;\n        vertices = Utils.setArraySize(temp, verticesLength, 0);\n        mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n      }\n      if (vertices != null) {\n        for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n          const x = vertices[ii];\n          const y = vertices[ii + 1];\n          minX = Math.min(minX, x);\n          minY = Math.min(minY, y);\n          maxX = Math.max(maxX, x);\n          maxY = Math.max(maxY, y);\n        }\n      }\n    }\n    offset.set(minX, minY);\n    size.set(maxX - minX, maxY - minY);\n  }\n  update(delta) {\n    this.time += delta;\n  }\n  get flipX() {\n    return this.scaleX == -1;\n  }\n  set flipX(value) {\n    if (!_Skeleton.deprecatedWarning1) {\n      _Skeleton.deprecatedWarning1 = true;\n      console.warn(\"Spine Deprecation Warning: `Skeleton.flipX/flipY` was deprecated, please use scaleX/scaleY\");\n    }\n    this.scaleX = value ? 1 : -1;\n  }\n  get flipY() {\n    return this.scaleY == -1;\n  }\n  set flipY(value) {\n    if (!_Skeleton.deprecatedWarning1) {\n      _Skeleton.deprecatedWarning1 = true;\n      console.warn(\"Spine Deprecation Warning: `Skeleton.flipX/flipY` was deprecated, please use scaleX/scaleY\");\n    }\n    this.scaleY = value ? 1 : -1;\n  }\n};\nlet Skeleton = _Skeleton;\nSkeleton.deprecatedWarning1 = false;\n\nexport { Skeleton };\n//# sourceMappingURL=Skeleton.mjs.map\n","class SkeletonData {\n  constructor() {\n    this.bones = new Array();\n    // Ordered parents first.\n    this.slots = new Array();\n    // Setup pose draw order.\n    this.skins = new Array();\n    this.events = new Array();\n    this.animations = new Array();\n    this.ikConstraints = new Array();\n    this.transformConstraints = new Array();\n    this.pathConstraints = new Array();\n    // Nonessential\n    this.fps = 0;\n  }\n  findBone(boneName) {\n    if (boneName == null)\n      throw new Error(\"boneName cannot be null.\");\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      if (bone.name == boneName)\n        return bone;\n    }\n    return null;\n  }\n  findBoneIndex(boneName) {\n    if (boneName == null)\n      throw new Error(\"boneName cannot be null.\");\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++)\n      if (bones[i].name == boneName)\n        return i;\n    return -1;\n  }\n  findSlot(slotName) {\n    if (slotName == null)\n      throw new Error(\"slotName cannot be null.\");\n    const slots = this.slots;\n    for (let i = 0, n = slots.length; i < n; i++) {\n      const slot = slots[i];\n      if (slot.name == slotName)\n        return slot;\n    }\n    return null;\n  }\n  findSlotIndex(slotName) {\n    if (slotName == null)\n      throw new Error(\"slotName cannot be null.\");\n    const slots = this.slots;\n    for (let i = 0, n = slots.length; i < n; i++)\n      if (slots[i].name == slotName)\n        return i;\n    return -1;\n  }\n  findSkin(skinName) {\n    if (skinName == null)\n      throw new Error(\"skinName cannot be null.\");\n    const skins = this.skins;\n    for (let i = 0, n = skins.length; i < n; i++) {\n      const skin = skins[i];\n      if (skin.name == skinName)\n        return skin;\n    }\n    return null;\n  }\n  findEvent(eventDataName) {\n    if (eventDataName == null)\n      throw new Error(\"eventDataName cannot be null.\");\n    const events = this.events;\n    for (let i = 0, n = events.length; i < n; i++) {\n      const event = events[i];\n      if (event.name == eventDataName)\n        return event;\n    }\n    return null;\n  }\n  findAnimation(animationName) {\n    if (animationName == null)\n      throw new Error(\"animationName cannot be null.\");\n    const animations = this.animations;\n    for (let i = 0, n = animations.length; i < n; i++) {\n      const animation = animations[i];\n      if (animation.name == animationName)\n        return animation;\n    }\n    return null;\n  }\n  findIkConstraint(constraintName) {\n    if (constraintName == null)\n      throw new Error(\"constraintName cannot be null.\");\n    const ikConstraints = this.ikConstraints;\n    for (let i = 0, n = ikConstraints.length; i < n; i++) {\n      const constraint = ikConstraints[i];\n      if (constraint.name == constraintName)\n        return constraint;\n    }\n    return null;\n  }\n  findTransformConstraint(constraintName) {\n    if (constraintName == null)\n      throw new Error(\"constraintName cannot be null.\");\n    const transformConstraints = this.transformConstraints;\n    for (let i = 0, n = transformConstraints.length; i < n; i++) {\n      const constraint = transformConstraints[i];\n      if (constraint.name == constraintName)\n        return constraint;\n    }\n    return null;\n  }\n  findPathConstraint(constraintName) {\n    if (constraintName == null)\n      throw new Error(\"constraintName cannot be null.\");\n    const pathConstraints = this.pathConstraints;\n    for (let i = 0, n = pathConstraints.length; i < n; i++) {\n      const constraint = pathConstraints[i];\n      if (constraint.name == constraintName)\n        return constraint;\n    }\n    return null;\n  }\n  findPathConstraintIndex(pathConstraintName) {\n    if (pathConstraintName == null)\n      throw new Error(\"pathConstraintName cannot be null.\");\n    const pathConstraints = this.pathConstraints;\n    for (let i = 0, n = pathConstraints.length; i < n; i++)\n      if (pathConstraints[i].name == pathConstraintName)\n        return i;\n    return -1;\n  }\n}\n\nexport { SkeletonData };\n//# sourceMappingURL=SkeletonData.mjs.map\n","import { Color } from '@pixi-spine/base';\n\nclass SlotData {\n  constructor(index, name, boneData) {\n    this.color = new Color(1, 1, 1, 1);\n    if (index < 0)\n      throw new Error(\"index must be >= 0.\");\n    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    if (boneData == null)\n      throw new Error(\"boneData cannot be null.\");\n    this.index = index;\n    this.name = name;\n    this.boneData = boneData;\n  }\n}\n\nexport { SlotData };\n//# sourceMappingURL=SlotData.mjs.map\n","import { ConstraintData } from './Constraint.mjs';\n\nclass TransformConstraintData extends ConstraintData {\n  constructor(name) {\n    super(name, 0, false);\n    this.bones = new Array();\n    this.rotateMix = 0;\n    this.translateMix = 0;\n    this.scaleMix = 0;\n    this.shearMix = 0;\n    this.offsetRotation = 0;\n    this.offsetX = 0;\n    this.offsetY = 0;\n    this.offsetScaleX = 0;\n    this.offsetScaleY = 0;\n    this.offsetShearY = 0;\n    this.relative = false;\n    this.local = false;\n  }\n}\n\nexport { TransformConstraintData };\n//# sourceMappingURL=TransformConstraintData.mjs.map\n","import './attachments/Attachment.mjs';\nimport '@pixi-spine/base';\nimport { MeshAttachment } from './attachments/MeshAttachment.mjs';\nimport './attachments/RegionAttachment.mjs';\n\nclass SkinEntry {\n  constructor(slotIndex, name, attachment) {\n    this.slotIndex = slotIndex;\n    this.name = name;\n    this.attachment = attachment;\n  }\n}\nclass Skin {\n  constructor(name) {\n    this.attachments = new Array();\n    this.bones = Array();\n    this.constraints = new Array();\n    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    this.name = name;\n  }\n  setAttachment(slotIndex, name, attachment) {\n    if (attachment == null)\n      throw new Error(\"attachment cannot be null.\");\n    const attachments = this.attachments;\n    if (slotIndex >= attachments.length)\n      attachments.length = slotIndex + 1;\n    if (!attachments[slotIndex])\n      attachments[slotIndex] = {};\n    attachments[slotIndex][name] = attachment;\n  }\n  addSkin(skin) {\n    for (let i = 0; i < skin.bones.length; i++) {\n      const bone = skin.bones[i];\n      let contained = false;\n      for (let j = 0; j < this.bones.length; j++) {\n        if (this.bones[j] == bone) {\n          contained = true;\n          break;\n        }\n      }\n      if (!contained)\n        this.bones.push(bone);\n    }\n    for (let i = 0; i < skin.constraints.length; i++) {\n      const constraint = skin.constraints[i];\n      let contained = false;\n      for (let j = 0; j < this.constraints.length; j++) {\n        if (this.constraints[j] == constraint) {\n          contained = true;\n          break;\n        }\n      }\n      if (!contained)\n        this.constraints.push(constraint);\n    }\n    const attachments = skin.getAttachments();\n    for (let i = 0; i < attachments.length; i++) {\n      const attachment = attachments[i];\n      this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n    }\n  }\n  copySkin(skin) {\n    for (let i = 0; i < skin.bones.length; i++) {\n      const bone = skin.bones[i];\n      let contained = false;\n      for (let j = 0; j < this.bones.length; j++) {\n        if (this.bones[j] == bone) {\n          contained = true;\n          break;\n        }\n      }\n      if (!contained)\n        this.bones.push(bone);\n    }\n    for (let i = 0; i < skin.constraints.length; i++) {\n      const constraint = skin.constraints[i];\n      let contained = false;\n      for (let j = 0; j < this.constraints.length; j++) {\n        if (this.constraints[j] == constraint) {\n          contained = true;\n          break;\n        }\n      }\n      if (!contained)\n        this.constraints.push(constraint);\n    }\n    const attachments = skin.getAttachments();\n    for (let i = 0; i < attachments.length; i++) {\n      const attachment = attachments[i];\n      if (attachment.attachment == null)\n        continue;\n      if (attachment.attachment instanceof MeshAttachment) {\n        attachment.attachment = attachment.attachment.newLinkedMesh();\n        this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n      } else {\n        attachment.attachment = attachment.attachment.copy();\n        this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n      }\n    }\n  }\n  /** @return May be null. */\n  getAttachment(slotIndex, name) {\n    const dictionary = this.attachments[slotIndex];\n    return dictionary ? dictionary[name] : null;\n  }\n  removeAttachment(slotIndex, name) {\n    const dictionary = this.attachments[slotIndex];\n    if (dictionary)\n      dictionary[name] = null;\n  }\n  getAttachments() {\n    const entries = new Array();\n    for (let i = 0; i < this.attachments.length; i++) {\n      const slotAttachments = this.attachments[i];\n      if (slotAttachments) {\n        for (const name in slotAttachments) {\n          const attachment = slotAttachments[name];\n          if (attachment)\n            entries.push(new SkinEntry(i, name, attachment));\n        }\n      }\n    }\n    return entries;\n  }\n  getAttachmentsForSlot(slotIndex, attachments) {\n    const slotAttachments = this.attachments[slotIndex];\n    if (slotAttachments) {\n      for (const name in slotAttachments) {\n        const attachment = slotAttachments[name];\n        if (attachment)\n          attachments.push(new SkinEntry(slotIndex, name, attachment));\n      }\n    }\n  }\n  clear() {\n    this.attachments.length = 0;\n    this.bones.length = 0;\n    this.constraints.length = 0;\n  }\n  /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */\n  attachAll(skeleton, oldSkin) {\n    let slotIndex = 0;\n    for (let i = 0; i < skeleton.slots.length; i++) {\n      const slot = skeleton.slots[i];\n      const slotAttachment = slot.getAttachment();\n      if (slotAttachment && slotIndex < oldSkin.attachments.length) {\n        const dictionary = oldSkin.attachments[slotIndex];\n        for (const key in dictionary) {\n          const skinAttachment = dictionary[key];\n          if (slotAttachment == skinAttachment) {\n            const attachment = this.getAttachment(slotIndex, key);\n            if (attachment != null)\n              slot.setAttachment(attachment);\n            break;\n          }\n        }\n      }\n      slotIndex++;\n    }\n  }\n}\n\nexport { Skin, SkinEntry };\n//# sourceMappingURL=Skin.mjs.map\n","import { Event } from './Event.mjs';\nimport { SkeletonData } from './SkeletonData.mjs';\nimport { SlotData } from './SlotData.mjs';\nimport { BoneData } from './BoneData.mjs';\nimport { IkConstraintData } from './IkConstraintData.mjs';\nimport { TransformConstraintData } from './TransformConstraintData.mjs';\nimport { SpacingMode, PathConstraintData } from './PathConstraintData.mjs';\nimport { Skin } from './Skin.mjs';\nimport { EventData } from './EventData.mjs';\nimport { TwoColorTimeline, ColorTimeline, AttachmentTimeline, ScaleTimeline, ShearTimeline, TranslateTimeline, RotateTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintMixTimeline, PathConstraintSpacingTimeline, PathConstraintPositionTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, Animation } from './Animation.mjs';\nimport { TransformMode, PositionMode, RotateMode, BinaryInput, Color, Utils, AttachmentType } from '@pixi-spine/base';\nimport { BLEND_MODES } from '@pixi/core';\n\nconst _SkeletonBinary = class {\n  constructor(attachmentLoader) {\n    this.scale = 1;\n    this.linkedMeshes = new Array();\n    this.attachmentLoader = attachmentLoader;\n  }\n  readSkeletonData(binary) {\n    const scale = this.scale;\n    const skeletonData = new SkeletonData();\n    skeletonData.name = \"\";\n    const input = new BinaryInput(binary);\n    skeletonData.hash = input.readString();\n    skeletonData.version = input.readString();\n    if (skeletonData.version === \"3.8.75\") {\n      const error = `Unsupported skeleton data, 3.8.75 is deprecated, please export with a newer version of Spine.`;\n      console.error(error);\n    }\n    skeletonData.x = input.readFloat();\n    skeletonData.y = input.readFloat();\n    skeletonData.width = input.readFloat();\n    skeletonData.height = input.readFloat();\n    const nonessential = input.readBoolean();\n    if (nonessential) {\n      skeletonData.fps = input.readFloat();\n      skeletonData.imagesPath = input.readString();\n      skeletonData.audioPath = input.readString();\n    }\n    let n = 0;\n    n = input.readInt(true);\n    for (let i = 0; i < n; i++)\n      input.strings.push(input.readString());\n    n = input.readInt(true);\n    for (let i = 0; i < n; i++) {\n      const name = input.readString();\n      const parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n      const data = new BoneData(i, name, parent);\n      data.rotation = input.readFloat();\n      data.x = input.readFloat() * scale;\n      data.y = input.readFloat() * scale;\n      data.scaleX = input.readFloat();\n      data.scaleY = input.readFloat();\n      data.shearX = input.readFloat();\n      data.shearY = input.readFloat();\n      data.length = input.readFloat() * scale;\n      data.transformMode = _SkeletonBinary.TransformModeValues[input.readInt(true)];\n      data.skinRequired = input.readBoolean();\n      if (nonessential)\n        Color.rgba8888ToColor(data.color, input.readInt32());\n      skeletonData.bones.push(data);\n    }\n    n = input.readInt(true);\n    for (let i = 0; i < n; i++) {\n      const slotName = input.readString();\n      const boneData = skeletonData.bones[input.readInt(true)];\n      const data = new SlotData(i, slotName, boneData);\n      Color.rgba8888ToColor(data.color, input.readInt32());\n      const darkColor = input.readInt32();\n      if (darkColor != -1)\n        Color.rgb888ToColor(data.darkColor = new Color(), darkColor);\n      data.attachmentName = input.readStringRef();\n      data.blendMode = _SkeletonBinary.BlendModeValues[input.readInt(true)];\n      skeletonData.slots.push(data);\n    }\n    n = input.readInt(true);\n    for (let i = 0, nn; i < n; i++) {\n      const data = new IkConstraintData(input.readString());\n      data.order = input.readInt(true);\n      data.skinRequired = input.readBoolean();\n      nn = input.readInt(true);\n      for (let ii = 0; ii < nn; ii++)\n        data.bones.push(skeletonData.bones[input.readInt(true)]);\n      data.target = skeletonData.bones[input.readInt(true)];\n      data.mix = input.readFloat();\n      data.softness = input.readFloat() * scale;\n      data.bendDirection = input.readByte();\n      data.compress = input.readBoolean();\n      data.stretch = input.readBoolean();\n      data.uniform = input.readBoolean();\n      skeletonData.ikConstraints.push(data);\n    }\n    n = input.readInt(true);\n    for (let i = 0, nn; i < n; i++) {\n      const data = new TransformConstraintData(input.readString());\n      data.order = input.readInt(true);\n      data.skinRequired = input.readBoolean();\n      nn = input.readInt(true);\n      for (let ii = 0; ii < nn; ii++)\n        data.bones.push(skeletonData.bones[input.readInt(true)]);\n      data.target = skeletonData.bones[input.readInt(true)];\n      data.local = input.readBoolean();\n      data.relative = input.readBoolean();\n      data.offsetRotation = input.readFloat();\n      data.offsetX = input.readFloat() * scale;\n      data.offsetY = input.readFloat() * scale;\n      data.offsetScaleX = input.readFloat();\n      data.offsetScaleY = input.readFloat();\n      data.offsetShearY = input.readFloat();\n      data.rotateMix = input.readFloat();\n      data.translateMix = input.readFloat();\n      data.scaleMix = input.readFloat();\n      data.shearMix = input.readFloat();\n      skeletonData.transformConstraints.push(data);\n    }\n    n = input.readInt(true);\n    for (let i = 0, nn; i < n; i++) {\n      const data = new PathConstraintData(input.readString());\n      data.order = input.readInt(true);\n      data.skinRequired = input.readBoolean();\n      nn = input.readInt(true);\n      for (let ii = 0; ii < nn; ii++)\n        data.bones.push(skeletonData.bones[input.readInt(true)]);\n      data.target = skeletonData.slots[input.readInt(true)];\n      data.positionMode = _SkeletonBinary.PositionModeValues[input.readInt(true)];\n      data.spacingMode = _SkeletonBinary.SpacingModeValues[input.readInt(true)];\n      data.rotateMode = _SkeletonBinary.RotateModeValues[input.readInt(true)];\n      data.offsetRotation = input.readFloat();\n      data.position = input.readFloat();\n      if (data.positionMode == PositionMode.Fixed)\n        data.position *= scale;\n      data.spacing = input.readFloat();\n      if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n        data.spacing *= scale;\n      data.rotateMix = input.readFloat();\n      data.translateMix = input.readFloat();\n      skeletonData.pathConstraints.push(data);\n    }\n    const defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n    if (defaultSkin != null) {\n      skeletonData.defaultSkin = defaultSkin;\n      skeletonData.skins.push(defaultSkin);\n    }\n    {\n      let i = skeletonData.skins.length;\n      Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n      for (; i < n; i++)\n        skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);\n    }\n    n = this.linkedMeshes.length;\n    for (let i = 0; i < n; i++) {\n      const linkedMesh = this.linkedMeshes[i];\n      const skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n      if (skin == null)\n        throw new Error(`Skin not found: ${linkedMesh.skin}`);\n      const parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n      if (parent == null)\n        throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n      linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;\n      linkedMesh.mesh.setParentMesh(parent);\n    }\n    this.linkedMeshes.length = 0;\n    n = input.readInt(true);\n    for (let i = 0; i < n; i++) {\n      const data = new EventData(input.readStringRef());\n      data.intValue = input.readInt(false);\n      data.floatValue = input.readFloat();\n      data.stringValue = input.readString();\n      data.audioPath = input.readString();\n      if (data.audioPath != null) {\n        data.volume = input.readFloat();\n        data.balance = input.readFloat();\n      }\n      skeletonData.events.push(data);\n    }\n    n = input.readInt(true);\n    for (let i = 0; i < n; i++)\n      skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));\n    return skeletonData;\n  }\n  readSkin(input, skeletonData, defaultSkin, nonessential) {\n    let skin = null;\n    let slotCount = 0;\n    if (defaultSkin) {\n      slotCount = input.readInt(true);\n      if (slotCount == 0)\n        return null;\n      skin = new Skin(\"default\");\n    } else {\n      skin = new Skin(input.readStringRef());\n      skin.bones.length = input.readInt(true);\n      for (let i = 0, n = skin.bones.length; i < n; i++)\n        skin.bones[i] = skeletonData.bones[input.readInt(true)];\n      for (let i = 0, n = input.readInt(true); i < n; i++)\n        skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n      for (let i = 0, n = input.readInt(true); i < n; i++)\n        skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n      for (let i = 0, n = input.readInt(true); i < n; i++)\n        skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n      slotCount = input.readInt(true);\n    }\n    for (let i = 0; i < slotCount; i++) {\n      const slotIndex = input.readInt(true);\n      for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n        const name = input.readStringRef();\n        const attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);\n        if (attachment != null)\n          skin.setAttachment(slotIndex, name, attachment);\n      }\n    }\n    return skin;\n  }\n  readAttachment(input, skeletonData, skin, slotIndex, attachmentName, nonessential) {\n    const scale = this.scale;\n    let name = input.readStringRef();\n    if (name == null)\n      name = attachmentName;\n    const typeIndex = input.readByte();\n    const type = _SkeletonBinary.AttachmentTypeValues[typeIndex];\n    switch (type) {\n      case AttachmentType.Region: {\n        let path = input.readStringRef();\n        const rotation = input.readFloat();\n        const x = input.readFloat();\n        const y = input.readFloat();\n        const scaleX = input.readFloat();\n        const scaleY = input.readFloat();\n        const width = input.readFloat();\n        const height = input.readFloat();\n        const color = input.readInt32();\n        if (path == null)\n          path = name;\n        const region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n        if (region == null)\n          return null;\n        region.path = path;\n        region.x = x * scale;\n        region.y = y * scale;\n        region.scaleX = scaleX;\n        region.scaleY = scaleY;\n        region.rotation = rotation;\n        region.width = width * scale;\n        region.height = height * scale;\n        Color.rgba8888ToColor(region.color, color);\n        return region;\n      }\n      case AttachmentType.BoundingBox: {\n        const vertexCount = input.readInt(true);\n        const vertices = this.readVertices(input, vertexCount);\n        const color = nonessential ? input.readInt32() : 0;\n        const box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n        if (box == null)\n          return null;\n        box.worldVerticesLength = vertexCount << 1;\n        box.vertices = vertices.vertices;\n        box.bones = vertices.bones;\n        if (nonessential)\n          Color.rgba8888ToColor(box.color, color);\n        return box;\n      }\n      case AttachmentType.Mesh: {\n        let path = input.readStringRef();\n        const color = input.readInt32();\n        const vertexCount = input.readInt(true);\n        const uvs = this.readFloatArray(input, vertexCount << 1, 1);\n        const triangles = this.readShortArray(input);\n        const vertices = this.readVertices(input, vertexCount);\n        const hullLength = input.readInt(true);\n        let edges = null;\n        let width = 0;\n        let height = 0;\n        if (nonessential) {\n          edges = this.readShortArray(input);\n          width = input.readFloat();\n          height = input.readFloat();\n        }\n        if (path == null)\n          path = name;\n        const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n        if (mesh == null)\n          return null;\n        mesh.path = path;\n        Color.rgba8888ToColor(mesh.color, color);\n        mesh.bones = vertices.bones;\n        mesh.vertices = vertices.vertices;\n        mesh.worldVerticesLength = vertexCount << 1;\n        mesh.triangles = triangles;\n        mesh.regionUVs = new Float32Array(uvs);\n        mesh.hullLength = hullLength << 1;\n        if (nonessential) {\n          mesh.edges = edges;\n          mesh.width = width * scale;\n          mesh.height = height * scale;\n        }\n        return mesh;\n      }\n      case AttachmentType.LinkedMesh: {\n        let path = input.readStringRef();\n        const color = input.readInt32();\n        const skinName = input.readStringRef();\n        const parent = input.readStringRef();\n        const inheritDeform = input.readBoolean();\n        let width = 0;\n        let height = 0;\n        if (nonessential) {\n          width = input.readFloat();\n          height = input.readFloat();\n        }\n        if (path == null)\n          path = name;\n        const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n        if (mesh == null)\n          return null;\n        mesh.path = path;\n        Color.rgba8888ToColor(mesh.color, color);\n        if (nonessential) {\n          mesh.width = width * scale;\n          mesh.height = height * scale;\n        }\n        this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritDeform));\n        return mesh;\n      }\n      case AttachmentType.Path: {\n        const closed = input.readBoolean();\n        const constantSpeed = input.readBoolean();\n        const vertexCount = input.readInt(true);\n        const vertices = this.readVertices(input, vertexCount);\n        const lengths = Utils.newArray(vertexCount / 3, 0);\n        for (let i = 0, n = lengths.length; i < n; i++)\n          lengths[i] = input.readFloat() * scale;\n        const color = nonessential ? input.readInt32() : 0;\n        const path = this.attachmentLoader.newPathAttachment(skin, name);\n        if (path == null)\n          return null;\n        path.closed = closed;\n        path.constantSpeed = constantSpeed;\n        path.worldVerticesLength = vertexCount << 1;\n        path.vertices = vertices.vertices;\n        path.bones = vertices.bones;\n        path.lengths = lengths;\n        if (nonessential)\n          Color.rgba8888ToColor(path.color, color);\n        return path;\n      }\n      case AttachmentType.Point: {\n        const rotation = input.readFloat();\n        const x = input.readFloat();\n        const y = input.readFloat();\n        const color = nonessential ? input.readInt32() : 0;\n        const point = this.attachmentLoader.newPointAttachment(skin, name);\n        if (point == null)\n          return null;\n        point.x = x * scale;\n        point.y = y * scale;\n        point.rotation = rotation;\n        if (nonessential)\n          Color.rgba8888ToColor(point.color, color);\n        return point;\n      }\n      case AttachmentType.Clipping: {\n        const endSlotIndex = input.readInt(true);\n        const vertexCount = input.readInt(true);\n        const vertices = this.readVertices(input, vertexCount);\n        const color = nonessential ? input.readInt32() : 0;\n        const clip = this.attachmentLoader.newClippingAttachment(skin, name);\n        if (clip == null)\n          return null;\n        clip.endSlot = skeletonData.slots[endSlotIndex];\n        clip.worldVerticesLength = vertexCount << 1;\n        clip.vertices = vertices.vertices;\n        clip.bones = vertices.bones;\n        if (nonessential)\n          Color.rgba8888ToColor(clip.color, color);\n        return clip;\n      }\n    }\n    return null;\n  }\n  readVertices(input, vertexCount) {\n    const verticesLength = vertexCount << 1;\n    const vertices = new Vertices();\n    const scale = this.scale;\n    if (!input.readBoolean()) {\n      vertices.vertices = this.readFloatArray(input, verticesLength, scale);\n      return vertices;\n    }\n    const weights = new Array();\n    const bonesArray = new Array();\n    for (let i = 0; i < vertexCount; i++) {\n      const boneCount = input.readInt(true);\n      bonesArray.push(boneCount);\n      for (let ii = 0; ii < boneCount; ii++) {\n        bonesArray.push(input.readInt(true));\n        weights.push(input.readFloat() * scale);\n        weights.push(input.readFloat() * scale);\n        weights.push(input.readFloat());\n      }\n    }\n    vertices.vertices = Utils.toFloatArray(weights);\n    vertices.bones = bonesArray;\n    return vertices;\n  }\n  readFloatArray(input, n, scale) {\n    const array = new Array(n);\n    if (scale == 1) {\n      for (let i = 0; i < n; i++)\n        array[i] = input.readFloat();\n    } else {\n      for (let i = 0; i < n; i++)\n        array[i] = input.readFloat() * scale;\n    }\n    return array;\n  }\n  readShortArray(input) {\n    const n = input.readInt(true);\n    const array = new Array(n);\n    for (let i = 0; i < n; i++)\n      array[i] = input.readShort();\n    return array;\n  }\n  readAnimation(input, name, skeletonData) {\n    const timelines = new Array();\n    const scale = this.scale;\n    let duration = 0;\n    const tempColor1 = new Color();\n    const tempColor2 = new Color();\n    for (let i = 0, n = input.readInt(true); i < n; i++) {\n      const slotIndex = input.readInt(true);\n      for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n        const timelineType = input.readByte();\n        const frameCount = input.readInt(true);\n        switch (timelineType) {\n          case _SkeletonBinary.SLOT_ATTACHMENT: {\n            const timeline = new AttachmentTimeline(frameCount);\n            timeline.slotIndex = slotIndex;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++)\n              timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef());\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[frameCount - 1]);\n            break;\n          }\n          case _SkeletonBinary.SLOT_COLOR: {\n            const timeline = new ColorTimeline(frameCount);\n            timeline.slotIndex = slotIndex;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n              const time = input.readFloat();\n              Color.rgba8888ToColor(tempColor1, input.readInt32());\n              timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a);\n              if (frameIndex < frameCount - 1)\n                this.readCurve(input, frameIndex, timeline);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(frameCount - 1) * ColorTimeline.ENTRIES]);\n            break;\n          }\n          case _SkeletonBinary.SLOT_TWO_COLOR: {\n            const timeline = new TwoColorTimeline(frameCount);\n            timeline.slotIndex = slotIndex;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n              const time = input.readFloat();\n              Color.rgba8888ToColor(tempColor1, input.readInt32());\n              Color.rgb888ToColor(tempColor2, input.readInt32());\n              timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b);\n              if (frameIndex < frameCount - 1)\n                this.readCurve(input, frameIndex, timeline);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(frameCount - 1) * TwoColorTimeline.ENTRIES]);\n            break;\n          }\n        }\n      }\n    }\n    for (let i = 0, n = input.readInt(true); i < n; i++) {\n      const boneIndex = input.readInt(true);\n      for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n        const timelineType = input.readByte();\n        const frameCount = input.readInt(true);\n        switch (timelineType) {\n          case _SkeletonBinary.BONE_ROTATE: {\n            const timeline = new RotateTimeline(frameCount);\n            timeline.boneIndex = boneIndex;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n              timeline.setFrame(frameIndex, input.readFloat(), input.readFloat());\n              if (frameIndex < frameCount - 1)\n                this.readCurve(input, frameIndex, timeline);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(frameCount - 1) * RotateTimeline.ENTRIES]);\n            break;\n          }\n          case _SkeletonBinary.BONE_TRANSLATE:\n          case _SkeletonBinary.BONE_SCALE:\n          case _SkeletonBinary.BONE_SHEAR: {\n            let timeline;\n            let timelineScale = 1;\n            if (timelineType == _SkeletonBinary.BONE_SCALE)\n              timeline = new ScaleTimeline(frameCount);\n            else if (timelineType == _SkeletonBinary.BONE_SHEAR)\n              timeline = new ShearTimeline(frameCount);\n            else {\n              timeline = new TranslateTimeline(frameCount);\n              timelineScale = scale;\n            }\n            timeline.boneIndex = boneIndex;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n              timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale);\n              if (frameIndex < frameCount - 1)\n                this.readCurve(input, frameIndex, timeline);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(frameCount - 1) * TranslateTimeline.ENTRIES]);\n            break;\n          }\n        }\n      }\n    }\n    for (let i = 0, n = input.readInt(true); i < n; i++) {\n      const index = input.readInt(true);\n      const frameCount = input.readInt(true);\n      const timeline = new IkConstraintTimeline(frameCount);\n      timeline.ikConstraintIndex = index;\n      for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n        timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean());\n        if (frameIndex < frameCount - 1)\n          this.readCurve(input, frameIndex, timeline);\n      }\n      timelines.push(timeline);\n      duration = Math.max(duration, timeline.frames[(frameCount - 1) * IkConstraintTimeline.ENTRIES]);\n    }\n    for (let i = 0, n = input.readInt(true); i < n; i++) {\n      const index = input.readInt(true);\n      const frameCount = input.readInt(true);\n      const timeline = new TransformConstraintTimeline(frameCount);\n      timeline.transformConstraintIndex = index;\n      for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n        timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());\n        if (frameIndex < frameCount - 1)\n          this.readCurve(input, frameIndex, timeline);\n      }\n      timelines.push(timeline);\n      duration = Math.max(duration, timeline.frames[(frameCount - 1) * TransformConstraintTimeline.ENTRIES]);\n    }\n    for (let i = 0, n = input.readInt(true); i < n; i++) {\n      const index = input.readInt(true);\n      const data = skeletonData.pathConstraints[index];\n      for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n        const timelineType = input.readByte();\n        const frameCount = input.readInt(true);\n        switch (timelineType) {\n          case _SkeletonBinary.PATH_POSITION:\n          case _SkeletonBinary.PATH_SPACING: {\n            let timeline;\n            let timelineScale = 1;\n            if (timelineType == _SkeletonBinary.PATH_SPACING) {\n              timeline = new PathConstraintSpacingTimeline(frameCount);\n              if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n                timelineScale = scale;\n            } else {\n              timeline = new PathConstraintPositionTimeline(frameCount);\n              if (data.positionMode == PositionMode.Fixed)\n                timelineScale = scale;\n            }\n            timeline.pathConstraintIndex = index;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n              timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale);\n              if (frameIndex < frameCount - 1)\n                this.readCurve(input, frameIndex, timeline);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(frameCount - 1) * PathConstraintPositionTimeline.ENTRIES]);\n            break;\n          }\n          case _SkeletonBinary.PATH_MIX: {\n            const timeline = new PathConstraintMixTimeline(frameCount);\n            timeline.pathConstraintIndex = index;\n            for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n              timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat());\n              if (frameIndex < frameCount - 1)\n                this.readCurve(input, frameIndex, timeline);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(frameCount - 1) * PathConstraintMixTimeline.ENTRIES]);\n            break;\n          }\n        }\n      }\n    }\n    for (let i = 0, n = input.readInt(true); i < n; i++) {\n      const skin = skeletonData.skins[input.readInt(true)];\n      for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n        const slotIndex = input.readInt(true);\n        for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n          const attachment = skin.getAttachment(slotIndex, input.readStringRef());\n          const weighted = attachment.bones != null;\n          const vertices = attachment.vertices;\n          const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n          const frameCount = input.readInt(true);\n          const timeline = new DeformTimeline(frameCount);\n          timeline.slotIndex = slotIndex;\n          timeline.attachment = attachment;\n          for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n            const time = input.readFloat();\n            let deform;\n            let end = input.readInt(true);\n            if (end == 0)\n              deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n            else {\n              deform = Utils.newFloatArray(deformLength);\n              const start = input.readInt(true);\n              end += start;\n              if (scale == 1) {\n                for (let v = start; v < end; v++)\n                  deform[v] = input.readFloat();\n              } else {\n                for (let v = start; v < end; v++)\n                  deform[v] = input.readFloat() * scale;\n              }\n              if (!weighted) {\n                for (let v = 0, vn = deform.length; v < vn; v++)\n                  deform[v] += vertices[v];\n              }\n            }\n            timeline.setFrame(frameIndex, time, deform);\n            if (frameIndex < frameCount - 1)\n              this.readCurve(input, frameIndex, timeline);\n          }\n          timelines.push(timeline);\n          duration = Math.max(duration, timeline.frames[frameCount - 1]);\n        }\n      }\n    }\n    const drawOrderCount = input.readInt(true);\n    if (drawOrderCount > 0) {\n      const timeline = new DrawOrderTimeline(drawOrderCount);\n      const slotCount = skeletonData.slots.length;\n      for (let i = 0; i < drawOrderCount; i++) {\n        const time = input.readFloat();\n        const offsetCount = input.readInt(true);\n        const drawOrder = Utils.newArray(slotCount, 0);\n        for (let ii = slotCount - 1; ii >= 0; ii--)\n          drawOrder[ii] = -1;\n        const unchanged = Utils.newArray(slotCount - offsetCount, 0);\n        let originalIndex = 0;\n        let unchangedIndex = 0;\n        for (let ii = 0; ii < offsetCount; ii++) {\n          const slotIndex = input.readInt(true);\n          while (originalIndex != slotIndex)\n            unchanged[unchangedIndex++] = originalIndex++;\n          drawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n        }\n        while (originalIndex < slotCount)\n          unchanged[unchangedIndex++] = originalIndex++;\n        for (let ii = slotCount - 1; ii >= 0; ii--)\n          if (drawOrder[ii] == -1)\n            drawOrder[ii] = unchanged[--unchangedIndex];\n        timeline.setFrame(i, time, drawOrder);\n      }\n      timelines.push(timeline);\n      duration = Math.max(duration, timeline.frames[drawOrderCount - 1]);\n    }\n    const eventCount = input.readInt(true);\n    if (eventCount > 0) {\n      const timeline = new EventTimeline(eventCount);\n      for (let i = 0; i < eventCount; i++) {\n        const time = input.readFloat();\n        const eventData = skeletonData.events[input.readInt(true)];\n        const event = new Event(time, eventData);\n        event.intValue = input.readInt(false);\n        event.floatValue = input.readFloat();\n        event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;\n        if (event.data.audioPath != null) {\n          event.volume = input.readFloat();\n          event.balance = input.readFloat();\n        }\n        timeline.setFrame(i, event);\n      }\n      timelines.push(timeline);\n      duration = Math.max(duration, timeline.frames[eventCount - 1]);\n    }\n    return new Animation(name, timelines, duration);\n  }\n  readCurve(input, frameIndex, timeline) {\n    switch (input.readByte()) {\n      case _SkeletonBinary.CURVE_STEPPED:\n        timeline.setStepped(frameIndex);\n        break;\n      case _SkeletonBinary.CURVE_BEZIER:\n        this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());\n        break;\n    }\n  }\n  setCurve(timeline, frameIndex, cx1, cy1, cx2, cy2) {\n    timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2);\n  }\n};\nlet SkeletonBinary = _SkeletonBinary;\nSkeletonBinary.AttachmentTypeValues = [\n  0,\n  1,\n  2,\n  3,\n  4,\n  5,\n  6\n];\nSkeletonBinary.TransformModeValues = [\n  TransformMode.Normal,\n  TransformMode.OnlyTranslation,\n  TransformMode.NoRotationOrReflection,\n  TransformMode.NoScale,\n  TransformMode.NoScaleOrReflection\n];\nSkeletonBinary.PositionModeValues = [PositionMode.Fixed, PositionMode.Percent];\nSkeletonBinary.SpacingModeValues = [SpacingMode.Length, SpacingMode.Fixed, SpacingMode.Percent];\nSkeletonBinary.RotateModeValues = [RotateMode.Tangent, RotateMode.Chain, RotateMode.ChainScale];\nSkeletonBinary.BlendModeValues = [BLEND_MODES.NORMAL, BLEND_MODES.ADD, BLEND_MODES.MULTIPLY, BLEND_MODES.SCREEN];\nSkeletonBinary.BONE_ROTATE = 0;\nSkeletonBinary.BONE_TRANSLATE = 1;\nSkeletonBinary.BONE_SCALE = 2;\nSkeletonBinary.BONE_SHEAR = 3;\nSkeletonBinary.SLOT_ATTACHMENT = 0;\nSkeletonBinary.SLOT_COLOR = 1;\nSkeletonBinary.SLOT_TWO_COLOR = 2;\nSkeletonBinary.PATH_POSITION = 0;\nSkeletonBinary.PATH_SPACING = 1;\nSkeletonBinary.PATH_MIX = 2;\nSkeletonBinary.CURVE_LINEAR = 0;\nSkeletonBinary.CURVE_STEPPED = 1;\nSkeletonBinary.CURVE_BEZIER = 2;\nclass LinkedMesh {\n  constructor(mesh, skin, slotIndex, parent, inheritDeform) {\n    this.mesh = mesh;\n    this.skin = skin;\n    this.slotIndex = slotIndex;\n    this.parent = parent;\n    this.inheritDeform = inheritDeform;\n  }\n}\nclass Vertices {\n  constructor(bones = null, vertices = null) {\n    this.bones = bones;\n    this.vertices = vertices;\n  }\n}\n\nexport { SkeletonBinary };\n//# sourceMappingURL=SkeletonBinary.mjs.map\n","import { SkeletonBoundsBase } from '@pixi-spine/base';\n\nclass SkeletonBounds extends SkeletonBoundsBase {\n}\n\nexport { SkeletonBounds };\n//# sourceMappingURL=SkeletonBounds.mjs.map\n","import { Event } from './Event.mjs';\nimport { SkeletonData } from './SkeletonData.mjs';\nimport { SlotData } from './SlotData.mjs';\nimport { BoneData } from './BoneData.mjs';\nimport { IkConstraintData } from './IkConstraintData.mjs';\nimport { TransformConstraintData } from './TransformConstraintData.mjs';\nimport { PathConstraintData, SpacingMode } from './PathConstraintData.mjs';\nimport { Skin } from './Skin.mjs';\nimport { EventData } from './EventData.mjs';\nimport { AttachmentTimeline, ColorTimeline, TwoColorTimeline, RotateTimeline, ScaleTimeline, ShearTimeline, TranslateTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintSpacingTimeline, PathConstraintPositionTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, Animation } from './Animation.mjs';\nimport { Color, PositionMode, Utils, settings, RotateMode, TransformMode } from '@pixi-spine/base';\nimport { BLEND_MODES } from '@pixi/core';\n\nclass SkeletonJson {\n  constructor(attachmentLoader) {\n    this.scale = 1;\n    this.linkedMeshes = new Array();\n    this.attachmentLoader = attachmentLoader;\n  }\n  readSkeletonData(json) {\n    const scale = this.scale;\n    const skeletonData = new SkeletonData();\n    const root = typeof json === \"string\" ? JSON.parse(json) : json;\n    const skeletonMap = root.skeleton;\n    if (skeletonMap != null) {\n      skeletonData.hash = skeletonMap.hash;\n      skeletonData.version = skeletonMap.spine;\n      if (skeletonData.version.substr(0, 3) !== \"3.8\") {\n        const error = `Spine 3.8 loader cant load version ${skeletonMap.spine}. Please configure your pixi-spine bundle`;\n        console.error(error);\n      }\n      if (skeletonData.version === \"3.8.75\") {\n        const error = `Unsupported skeleton data, 3.8.75 is deprecated, please export with a newer version of Spine.`;\n        console.error(error);\n      }\n      skeletonData.x = skeletonMap.x;\n      skeletonData.y = skeletonMap.y;\n      skeletonData.width = skeletonMap.width;\n      skeletonData.height = skeletonMap.height;\n      skeletonData.fps = skeletonMap.fps;\n      skeletonData.imagesPath = skeletonMap.images;\n    }\n    if (root.bones) {\n      for (let i = 0; i < root.bones.length; i++) {\n        const boneMap = root.bones[i];\n        let parent = null;\n        const parentName = this.getValue(boneMap, \"parent\", null);\n        if (parentName != null) {\n          parent = skeletonData.findBone(parentName);\n          if (parent == null)\n            throw new Error(`Parent bone not found: ${parentName}`);\n        }\n        const data = new BoneData(skeletonData.bones.length, boneMap.name, parent);\n        data.length = this.getValue(boneMap, \"length\", 0) * scale;\n        data.x = this.getValue(boneMap, \"x\", 0) * scale;\n        data.y = this.getValue(boneMap, \"y\", 0) * scale;\n        data.rotation = this.getValue(boneMap, \"rotation\", 0);\n        data.scaleX = this.getValue(boneMap, \"scaleX\", 1);\n        data.scaleY = this.getValue(boneMap, \"scaleY\", 1);\n        data.shearX = this.getValue(boneMap, \"shearX\", 0);\n        data.shearY = this.getValue(boneMap, \"shearY\", 0);\n        data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, \"transform\", \"normal\"));\n        data.skinRequired = this.getValue(boneMap, \"skin\", false);\n        skeletonData.bones.push(data);\n      }\n    }\n    if (root.slots) {\n      for (let i = 0; i < root.slots.length; i++) {\n        const slotMap = root.slots[i];\n        const slotName = slotMap.name;\n        const boneName = slotMap.bone;\n        const boneData = skeletonData.findBone(boneName);\n        if (boneData == null)\n          throw new Error(`Slot bone not found: ${boneName}`);\n        const data = new SlotData(skeletonData.slots.length, slotName, boneData);\n        const color = this.getValue(slotMap, \"color\", null);\n        if (color != null)\n          data.color.setFromString(color);\n        const dark = this.getValue(slotMap, \"dark\", null);\n        if (dark != null) {\n          data.darkColor = new Color(1, 1, 1, 1);\n          data.darkColor.setFromString(dark);\n        }\n        data.attachmentName = this.getValue(slotMap, \"attachment\", null);\n        data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, \"blend\", \"normal\"));\n        skeletonData.slots.push(data);\n      }\n    }\n    if (root.ik) {\n      for (let i = 0; i < root.ik.length; i++) {\n        const constraintMap = root.ik[i];\n        const data = new IkConstraintData(constraintMap.name);\n        data.order = this.getValue(constraintMap, \"order\", 0);\n        data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n        for (let j = 0; j < constraintMap.bones.length; j++) {\n          const boneName = constraintMap.bones[j];\n          const bone = skeletonData.findBone(boneName);\n          if (bone == null)\n            throw new Error(`IK bone not found: ${boneName}`);\n          data.bones.push(bone);\n        }\n        const targetName = constraintMap.target;\n        data.target = skeletonData.findBone(targetName);\n        if (data.target == null)\n          throw new Error(`IK target bone not found: ${targetName}`);\n        data.mix = this.getValue(constraintMap, \"mix\", 1);\n        data.softness = this.getValue(constraintMap, \"softness\", 0) * scale;\n        data.bendDirection = this.getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n        data.compress = this.getValue(constraintMap, \"compress\", false);\n        data.stretch = this.getValue(constraintMap, \"stretch\", false);\n        data.uniform = this.getValue(constraintMap, \"uniform\", false);\n        skeletonData.ikConstraints.push(data);\n      }\n    }\n    if (root.transform) {\n      for (let i = 0; i < root.transform.length; i++) {\n        const constraintMap = root.transform[i];\n        const data = new TransformConstraintData(constraintMap.name);\n        data.order = this.getValue(constraintMap, \"order\", 0);\n        data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n        for (let j = 0; j < constraintMap.bones.length; j++) {\n          const boneName = constraintMap.bones[j];\n          const bone = skeletonData.findBone(boneName);\n          if (bone == null)\n            throw new Error(`Transform constraint bone not found: ${boneName}`);\n          data.bones.push(bone);\n        }\n        const targetName = constraintMap.target;\n        data.target = skeletonData.findBone(targetName);\n        if (data.target == null)\n          throw new Error(`Transform constraint target bone not found: ${targetName}`);\n        data.local = this.getValue(constraintMap, \"local\", false);\n        data.relative = this.getValue(constraintMap, \"relative\", false);\n        data.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n        data.offsetX = this.getValue(constraintMap, \"x\", 0) * scale;\n        data.offsetY = this.getValue(constraintMap, \"y\", 0) * scale;\n        data.offsetScaleX = this.getValue(constraintMap, \"scaleX\", 0);\n        data.offsetScaleY = this.getValue(constraintMap, \"scaleY\", 0);\n        data.offsetShearY = this.getValue(constraintMap, \"shearY\", 0);\n        data.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n        data.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n        data.scaleMix = this.getValue(constraintMap, \"scaleMix\", 1);\n        data.shearMix = this.getValue(constraintMap, \"shearMix\", 1);\n        skeletonData.transformConstraints.push(data);\n      }\n    }\n    if (root.path) {\n      for (let i = 0; i < root.path.length; i++) {\n        const constraintMap = root.path[i];\n        const data = new PathConstraintData(constraintMap.name);\n        data.order = this.getValue(constraintMap, \"order\", 0);\n        data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n        for (let j = 0; j < constraintMap.bones.length; j++) {\n          const boneName = constraintMap.bones[j];\n          const bone = skeletonData.findBone(boneName);\n          if (bone == null)\n            throw new Error(`Transform constraint bone not found: ${boneName}`);\n          data.bones.push(bone);\n        }\n        const targetName = constraintMap.target;\n        data.target = skeletonData.findSlot(targetName);\n        if (data.target == null)\n          throw new Error(`Path target slot not found: ${targetName}`);\n        data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, \"positionMode\", \"percent\"));\n        data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, \"spacingMode\", \"length\"));\n        data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, \"rotateMode\", \"tangent\"));\n        data.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n        data.position = this.getValue(constraintMap, \"position\", 0);\n        if (data.positionMode == PositionMode.Fixed)\n          data.position *= scale;\n        data.spacing = this.getValue(constraintMap, \"spacing\", 0);\n        if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n          data.spacing *= scale;\n        data.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n        data.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n        skeletonData.pathConstraints.push(data);\n      }\n    }\n    if (root.skins) {\n      for (let i = 0; i < root.skins.length; i++) {\n        const skinMap = root.skins[i];\n        const skin = new Skin(skinMap.name);\n        if (skinMap.bones) {\n          for (let ii = 0; ii < skinMap.bones.length; ii++) {\n            const bone = skeletonData.findBone(skinMap.bones[ii]);\n            if (bone == null)\n              throw new Error(`Skin bone not found: ${skinMap.bones[i]}`);\n            skin.bones.push(bone);\n          }\n        }\n        if (skinMap.ik) {\n          for (let ii = 0; ii < skinMap.ik.length; ii++) {\n            const constraint = skeletonData.findIkConstraint(skinMap.ik[ii]);\n            if (constraint == null)\n              throw new Error(`Skin IK constraint not found: ${skinMap.ik[i]}`);\n            skin.constraints.push(constraint);\n          }\n        }\n        if (skinMap.transform) {\n          for (let ii = 0; ii < skinMap.transform.length; ii++) {\n            const constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]);\n            if (constraint == null)\n              throw new Error(`Skin transform constraint not found: ${skinMap.transform[i]}`);\n            skin.constraints.push(constraint);\n          }\n        }\n        if (skinMap.path) {\n          for (let ii = 0; ii < skinMap.path.length; ii++) {\n            const constraint = skeletonData.findPathConstraint(skinMap.path[ii]);\n            if (constraint == null)\n              throw new Error(`Skin path constraint not found: ${skinMap.path[i]}`);\n            skin.constraints.push(constraint);\n          }\n        }\n        for (const slotName in skinMap.attachments) {\n          const slot = skeletonData.findSlot(slotName);\n          if (slot == null)\n            throw new Error(`Slot not found: ${slotName}`);\n          const slotMap = skinMap.attachments[slotName];\n          for (const entryName in slotMap) {\n            const attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n            if (attachment != null)\n              skin.setAttachment(slot.index, entryName, attachment);\n          }\n        }\n        skeletonData.skins.push(skin);\n        if (skin.name == \"default\")\n          skeletonData.defaultSkin = skin;\n      }\n    }\n    for (let i = 0, n = this.linkedMeshes.length; i < n; i++) {\n      const linkedMesh = this.linkedMeshes[i];\n      const skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n      if (skin == null)\n        throw new Error(`Skin not found: ${linkedMesh.skin}`);\n      const parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n      if (parent == null)\n        throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n      linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;\n      linkedMesh.mesh.setParentMesh(parent);\n    }\n    this.linkedMeshes.length = 0;\n    if (root.events) {\n      for (const eventName in root.events) {\n        const eventMap = root.events[eventName];\n        const data = new EventData(eventName);\n        data.intValue = this.getValue(eventMap, \"int\", 0);\n        data.floatValue = this.getValue(eventMap, \"float\", 0);\n        data.stringValue = this.getValue(eventMap, \"string\", \"\");\n        data.audioPath = this.getValue(eventMap, \"audio\", null);\n        if (data.audioPath != null) {\n          data.volume = this.getValue(eventMap, \"volume\", 1);\n          data.balance = this.getValue(eventMap, \"balance\", 0);\n        }\n        skeletonData.events.push(data);\n      }\n    }\n    if (root.animations) {\n      for (const animationName in root.animations) {\n        const animationMap = root.animations[animationName];\n        this.readAnimation(animationMap, animationName, skeletonData);\n      }\n    }\n    return skeletonData;\n  }\n  readAttachment(map, skin, slotIndex, name, skeletonData) {\n    const scale = this.scale;\n    name = this.getValue(map, \"name\", name);\n    const type = this.getValue(map, \"type\", \"region\");\n    switch (type) {\n      case \"region\": {\n        const path = this.getValue(map, \"path\", name);\n        const region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n        if (region == null)\n          return null;\n        region.path = path;\n        region.x = this.getValue(map, \"x\", 0) * scale;\n        region.y = this.getValue(map, \"y\", 0) * scale;\n        region.scaleX = this.getValue(map, \"scaleX\", 1);\n        region.scaleY = this.getValue(map, \"scaleY\", 1);\n        region.rotation = this.getValue(map, \"rotation\", 0);\n        region.width = map.width * scale;\n        region.height = map.height * scale;\n        const color = this.getValue(map, \"color\", null);\n        if (color != null)\n          region.color.setFromString(color);\n        return region;\n      }\n      case \"boundingbox\": {\n        const box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n        if (box == null)\n          return null;\n        this.readVertices(map, box, map.vertexCount << 1);\n        const color = this.getValue(map, \"color\", null);\n        if (color != null)\n          box.color.setFromString(color);\n        return box;\n      }\n      case \"mesh\":\n      case \"linkedmesh\": {\n        const path = this.getValue(map, \"path\", name);\n        const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n        if (mesh == null)\n          return null;\n        mesh.path = path;\n        const color = this.getValue(map, \"color\", null);\n        if (color != null)\n          mesh.color.setFromString(color);\n        mesh.width = this.getValue(map, \"width\", 0) * scale;\n        mesh.height = this.getValue(map, \"height\", 0) * scale;\n        const parent = this.getValue(map, \"parent\", null);\n        if (parent != null) {\n          this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, \"skin\", null), slotIndex, parent, this.getValue(map, \"deform\", true)));\n          return mesh;\n        }\n        const uvs = map.uvs;\n        this.readVertices(map, mesh, uvs.length);\n        mesh.triangles = map.triangles;\n        mesh.regionUVs = new Float32Array(uvs);\n        mesh.edges = this.getValue(map, \"edges\", null);\n        mesh.hullLength = this.getValue(map, \"hull\", 0) * 2;\n        return mesh;\n      }\n      case \"path\": {\n        const path = this.attachmentLoader.newPathAttachment(skin, name);\n        if (path == null)\n          return null;\n        path.closed = this.getValue(map, \"closed\", false);\n        path.constantSpeed = this.getValue(map, \"constantSpeed\", true);\n        const vertexCount = map.vertexCount;\n        this.readVertices(map, path, vertexCount << 1);\n        const lengths = Utils.newArray(vertexCount / 3, 0);\n        for (let i = 0; i < map.lengths.length; i++)\n          lengths[i] = map.lengths[i] * scale;\n        path.lengths = lengths;\n        const color = this.getValue(map, \"color\", null);\n        if (color != null)\n          path.color.setFromString(color);\n        return path;\n      }\n      case \"point\": {\n        const point = this.attachmentLoader.newPointAttachment(skin, name);\n        if (point == null)\n          return null;\n        point.x = this.getValue(map, \"x\", 0) * scale;\n        point.y = this.getValue(map, \"y\", 0) * scale;\n        point.rotation = this.getValue(map, \"rotation\", 0);\n        const color = this.getValue(map, \"color\", null);\n        if (color != null)\n          point.color.setFromString(color);\n        return point;\n      }\n      case \"clipping\": {\n        const clip = this.attachmentLoader.newClippingAttachment(skin, name);\n        if (clip == null)\n          return null;\n        const end = this.getValue(map, \"end\", null);\n        if (end != null) {\n          const slot = skeletonData.findSlot(end);\n          if (slot == null)\n            throw new Error(`Clipping end slot not found: ${end}`);\n          clip.endSlot = slot;\n        }\n        const vertexCount = map.vertexCount;\n        this.readVertices(map, clip, vertexCount << 1);\n        const color = this.getValue(map, \"color\", null);\n        if (color != null)\n          clip.color.setFromString(color);\n        return clip;\n      }\n    }\n    return null;\n  }\n  readVertices(map, attachment, verticesLength) {\n    const scale = this.scale;\n    attachment.worldVerticesLength = verticesLength;\n    const vertices = map.vertices;\n    if (verticesLength == vertices.length) {\n      const scaledVertices = Utils.toFloatArray(vertices);\n      if (scale != 1) {\n        for (let i = 0, n = vertices.length; i < n; i++)\n          scaledVertices[i] *= scale;\n      }\n      attachment.vertices = scaledVertices;\n      return;\n    }\n    const weights = new Array();\n    const bones = new Array();\n    for (let i = 0, n = vertices.length; i < n; ) {\n      const boneCount = vertices[i++];\n      bones.push(boneCount);\n      for (let nn = i + boneCount * 4; i < nn; i += 4) {\n        bones.push(vertices[i]);\n        weights.push(vertices[i + 1] * scale);\n        weights.push(vertices[i + 2] * scale);\n        weights.push(vertices[i + 3]);\n      }\n    }\n    attachment.bones = bones;\n    attachment.vertices = Utils.toFloatArray(weights);\n  }\n  readAnimation(map, name, skeletonData) {\n    const scale = this.scale;\n    const timelines = new Array();\n    let duration = 0;\n    if (map.slots) {\n      for (const slotName in map.slots) {\n        const slotMap = map.slots[slotName];\n        const slotIndex = skeletonData.findSlotIndex(slotName);\n        if (slotIndex == -1)\n          throw new Error(`Slot not found: ${slotName}`);\n        for (const timelineName in slotMap) {\n          const timelineMap = slotMap[timelineName];\n          if (timelineName == \"attachment\") {\n            const timeline = new AttachmentTimeline(timelineMap.length);\n            timeline.slotIndex = slotIndex;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              timeline.setFrame(frameIndex++, this.getValue(valueMap, \"time\", 0), valueMap.name);\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n          } else if (timelineName == \"color\") {\n            const timeline = new ColorTimeline(timelineMap.length);\n            timeline.slotIndex = slotIndex;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              const color = new Color();\n              color.setFromString(valueMap.color || \"ffffffff\");\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), color.r, color.g, color.b, color.a);\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * ColorTimeline.ENTRIES]);\n          } else if (timelineName == \"twoColor\") {\n            const timeline = new TwoColorTimeline(timelineMap.length);\n            timeline.slotIndex = slotIndex;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              const light = new Color();\n              const dark = new Color();\n              light.setFromString(valueMap.light);\n              dark.setFromString(valueMap.dark);\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * TwoColorTimeline.ENTRIES]);\n          } else\n            throw new Error(`Invalid timeline type for a slot: ${timelineName} (${slotName})`);\n        }\n      }\n    }\n    if (map.bones) {\n      for (const boneName in map.bones) {\n        const boneMap = map.bones[boneName];\n        const boneIndex = skeletonData.findBoneIndex(boneName);\n        if (boneIndex == -1)\n          throw new Error(`Bone not found: ${boneName}`);\n        for (const timelineName in boneMap) {\n          const timelineMap = boneMap[timelineName];\n          if (timelineName === \"rotate\") {\n            const timeline = new RotateTimeline(timelineMap.length);\n            timeline.boneIndex = boneIndex;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"angle\", 0));\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * RotateTimeline.ENTRIES]);\n          } else if (timelineName === \"translate\" || timelineName === \"scale\" || timelineName === \"shear\") {\n            let timeline = null;\n            let timelineScale = 1;\n            let defaultValue = 0;\n            if (timelineName === \"scale\") {\n              timeline = new ScaleTimeline(timelineMap.length);\n              defaultValue = 1;\n            } else if (timelineName === \"shear\")\n              timeline = new ShearTimeline(timelineMap.length);\n            else {\n              timeline = new TranslateTimeline(timelineMap.length);\n              timelineScale = scale;\n            }\n            timeline.boneIndex = boneIndex;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              const x = this.getValue(valueMap, \"x\", defaultValue);\n              const y = this.getValue(valueMap, \"y\", defaultValue);\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), x * timelineScale, y * timelineScale);\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * TranslateTimeline.ENTRIES]);\n          } else\n            throw new Error(`Invalid timeline type for a bone: ${timelineName} (${boneName})`);\n        }\n      }\n    }\n    if (map.ik) {\n      for (const constraintName in map.ik) {\n        const constraintMap = map.ik[constraintName];\n        const constraint = skeletonData.findIkConstraint(constraintName);\n        const timeline = new IkConstraintTimeline(constraintMap.length);\n        timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n        let frameIndex = 0;\n        for (let i = 0; i < constraintMap.length; i++) {\n          const valueMap = constraintMap[i];\n          timeline.setFrame(\n            frameIndex,\n            this.getValue(valueMap, \"time\", 0),\n            this.getValue(valueMap, \"mix\", 1),\n            this.getValue(valueMap, \"softness\", 0) * scale,\n            this.getValue(valueMap, \"bendPositive\", true) ? 1 : -1,\n            this.getValue(valueMap, \"compress\", false),\n            this.getValue(valueMap, \"stretch\", false)\n          );\n          this.readCurve(valueMap, timeline, frameIndex);\n          frameIndex++;\n        }\n        timelines.push(timeline);\n        duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * IkConstraintTimeline.ENTRIES]);\n      }\n    }\n    if (map.transform) {\n      for (const constraintName in map.transform) {\n        const constraintMap = map.transform[constraintName];\n        const constraint = skeletonData.findTransformConstraint(constraintName);\n        const timeline = new TransformConstraintTimeline(constraintMap.length);\n        timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n        let frameIndex = 0;\n        for (let i = 0; i < constraintMap.length; i++) {\n          const valueMap = constraintMap[i];\n          timeline.setFrame(\n            frameIndex,\n            this.getValue(valueMap, \"time\", 0),\n            this.getValue(valueMap, \"rotateMix\", 1),\n            this.getValue(valueMap, \"translateMix\", 1),\n            this.getValue(valueMap, \"scaleMix\", 1),\n            this.getValue(valueMap, \"shearMix\", 1)\n          );\n          this.readCurve(valueMap, timeline, frameIndex);\n          frameIndex++;\n        }\n        timelines.push(timeline);\n        duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * TransformConstraintTimeline.ENTRIES]);\n      }\n    }\n    if (map.path) {\n      for (const constraintName in map.path) {\n        const constraintMap = map.path[constraintName];\n        const index = skeletonData.findPathConstraintIndex(constraintName);\n        if (index == -1)\n          throw new Error(`Path constraint not found: ${constraintName}`);\n        const data = skeletonData.pathConstraints[index];\n        for (const timelineName in constraintMap) {\n          const timelineMap = constraintMap[timelineName];\n          if (timelineName === \"position\" || timelineName === \"spacing\") {\n            let timeline = null;\n            let timelineScale = 1;\n            if (timelineName === \"spacing\") {\n              timeline = new PathConstraintSpacingTimeline(timelineMap.length);\n              if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n                timelineScale = scale;\n            } else {\n              timeline = new PathConstraintPositionTimeline(timelineMap.length);\n              if (data.positionMode == PositionMode.Fixed)\n                timelineScale = scale;\n            }\n            timeline.pathConstraintIndex = index;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, timelineName, 0) * timelineScale);\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * PathConstraintPositionTimeline.ENTRIES]);\n          } else if (timelineName === \"mix\") {\n            const timeline = new PathConstraintMixTimeline(timelineMap.length);\n            timeline.pathConstraintIndex = index;\n            let frameIndex = 0;\n            for (let i = 0; i < timelineMap.length; i++) {\n              const valueMap = timelineMap[i];\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1));\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * PathConstraintMixTimeline.ENTRIES]);\n          }\n        }\n      }\n    }\n    if (map.deform) {\n      for (const deformName in map.deform) {\n        const deformMap = map.deform[deformName];\n        const skin = skeletonData.findSkin(deformName);\n        if (skin == null) {\n          if (settings.FAIL_ON_NON_EXISTING_SKIN) {\n            throw new Error(`Skin not found: ${deformName}`);\n          } else {\n            continue;\n          }\n        }\n        for (const slotName in deformMap) {\n          const slotMap = deformMap[slotName];\n          const slotIndex = skeletonData.findSlotIndex(slotName);\n          if (slotIndex == -1)\n            throw new Error(`Slot not found: ${slotMap.name}`);\n          for (const timelineName in slotMap) {\n            const timelineMap = slotMap[timelineName];\n            const attachment = skin.getAttachment(slotIndex, timelineName);\n            if (attachment == null)\n              throw new Error(`Deform attachment not found: ${timelineMap.name}`);\n            const weighted = attachment.bones != null;\n            const vertices = attachment.vertices;\n            const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n            const timeline = new DeformTimeline(timelineMap.length);\n            timeline.slotIndex = slotIndex;\n            timeline.attachment = attachment;\n            let frameIndex = 0;\n            for (let j = 0; j < timelineMap.length; j++) {\n              const valueMap = timelineMap[j];\n              let deform;\n              const verticesValue = this.getValue(valueMap, \"vertices\", null);\n              if (verticesValue == null)\n                deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n              else {\n                deform = Utils.newFloatArray(deformLength);\n                const start = this.getValue(valueMap, \"offset\", 0);\n                Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n                if (scale != 1) {\n                  for (let i = start, n = i + verticesValue.length; i < n; i++)\n                    deform[i] *= scale;\n                }\n                if (!weighted) {\n                  for (let i = 0; i < deformLength; i++)\n                    deform[i] += vertices[i];\n                }\n              }\n              timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), deform);\n              this.readCurve(valueMap, timeline, frameIndex);\n              frameIndex++;\n            }\n            timelines.push(timeline);\n            duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n          }\n        }\n      }\n    }\n    let drawOrderNode = map.drawOrder;\n    if (drawOrderNode == null)\n      drawOrderNode = map.draworder;\n    if (drawOrderNode != null) {\n      const timeline = new DrawOrderTimeline(drawOrderNode.length);\n      const slotCount = skeletonData.slots.length;\n      let frameIndex = 0;\n      for (let j = 0; j < drawOrderNode.length; j++) {\n        const drawOrderMap = drawOrderNode[j];\n        let drawOrder = null;\n        const offsets = this.getValue(drawOrderMap, \"offsets\", null);\n        if (offsets != null) {\n          drawOrder = Utils.newArray(slotCount, -1);\n          const unchanged = Utils.newArray(slotCount - offsets.length, 0);\n          let originalIndex = 0;\n          let unchangedIndex = 0;\n          for (let i = 0; i < offsets.length; i++) {\n            const offsetMap = offsets[i];\n            const slotIndex = skeletonData.findSlotIndex(offsetMap.slot);\n            if (slotIndex == -1)\n              throw new Error(`Slot not found: ${offsetMap.slot}`);\n            while (originalIndex != slotIndex)\n              unchanged[unchangedIndex++] = originalIndex++;\n            drawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n          }\n          while (originalIndex < slotCount)\n            unchanged[unchangedIndex++] = originalIndex++;\n          for (let i = slotCount - 1; i >= 0; i--)\n            if (drawOrder[i] == -1)\n              drawOrder[i] = unchanged[--unchangedIndex];\n        }\n        timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, \"time\", 0), drawOrder);\n      }\n      timelines.push(timeline);\n      duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n    }\n    if (map.events) {\n      const timeline = new EventTimeline(map.events.length);\n      let frameIndex = 0;\n      for (let i = 0; i < map.events.length; i++) {\n        const eventMap = map.events[i];\n        const eventData = skeletonData.findEvent(eventMap.name);\n        if (eventData == null)\n          throw new Error(`Event not found: ${eventMap.name}`);\n        const event = new Event(Utils.toSinglePrecision(this.getValue(eventMap, \"time\", 0)), eventData);\n        event.intValue = this.getValue(eventMap, \"int\", eventData.intValue);\n        event.floatValue = this.getValue(eventMap, \"float\", eventData.floatValue);\n        event.stringValue = this.getValue(eventMap, \"string\", eventData.stringValue);\n        if (event.data.audioPath != null) {\n          event.volume = this.getValue(eventMap, \"volume\", 1);\n          event.balance = this.getValue(eventMap, \"balance\", 0);\n        }\n        timeline.setFrame(frameIndex++, event);\n      }\n      timelines.push(timeline);\n      duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n    }\n    if (isNaN(duration)) {\n      throw new Error(\"Error while parsing animation, duration is NaN\");\n    }\n    skeletonData.animations.push(new Animation(name, timelines, duration));\n  }\n  readCurve(map, timeline, frameIndex) {\n    if (!map.hasOwnProperty(\"curve\"))\n      return;\n    if (map.curve === \"stepped\")\n      timeline.setStepped(frameIndex);\n    else {\n      const curve = map.curve;\n      timeline.setCurve(frameIndex, curve, this.getValue(map, \"c2\", 0), this.getValue(map, \"c3\", 1), this.getValue(map, \"c4\", 1));\n    }\n  }\n  getValue(map, prop, defaultValue) {\n    return map[prop] !== void 0 ? map[prop] : defaultValue;\n  }\n  static blendModeFromString(str) {\n    str = str.toLowerCase();\n    if (str == \"normal\")\n      return BLEND_MODES.NORMAL;\n    if (str == \"additive\")\n      return BLEND_MODES.ADD;\n    if (str == \"multiply\")\n      return BLEND_MODES.MULTIPLY;\n    if (str == \"screen\")\n      return BLEND_MODES.SCREEN;\n    throw new Error(`Unknown blend mode: ${str}`);\n  }\n  static positionModeFromString(str) {\n    str = str.toLowerCase();\n    if (str == \"fixed\")\n      return PositionMode.Fixed;\n    if (str == \"percent\")\n      return PositionMode.Percent;\n    throw new Error(`Unknown position mode: ${str}`);\n  }\n  static spacingModeFromString(str) {\n    str = str.toLowerCase();\n    if (str == \"length\")\n      return SpacingMode.Length;\n    if (str == \"fixed\")\n      return SpacingMode.Fixed;\n    if (str == \"percent\")\n      return SpacingMode.Percent;\n    throw new Error(`Unknown position mode: ${str}`);\n  }\n  static rotateModeFromString(str) {\n    str = str.toLowerCase();\n    if (str == \"tangent\")\n      return RotateMode.Tangent;\n    if (str == \"chain\")\n      return RotateMode.Chain;\n    if (str == \"chainscale\")\n      return RotateMode.ChainScale;\n    throw new Error(`Unknown rotate mode: ${str}`);\n  }\n  static transformModeFromString(str) {\n    str = str.toLowerCase();\n    if (str == \"normal\")\n      return TransformMode.Normal;\n    if (str == \"onlytranslation\")\n      return TransformMode.OnlyTranslation;\n    if (str == \"norotationorreflection\")\n      return TransformMode.NoRotationOrReflection;\n    if (str == \"noscale\")\n      return TransformMode.NoScale;\n    if (str == \"noscaleorreflection\")\n      return TransformMode.NoScaleOrReflection;\n    throw new Error(`Unknown transform mode: ${str}`);\n  }\n}\nclass LinkedMesh {\n  constructor(mesh, skin, slotIndex, parent, inheritDeform) {\n    this.mesh = mesh;\n    this.skin = skin;\n    this.slotIndex = slotIndex;\n    this.parent = parent;\n    this.inheritDeform = inheritDeform;\n  }\n}\n\nexport { SkeletonJson };\n//# sourceMappingURL=SkeletonJson.mjs.map\n","import { SpineBase } from '@pixi-spine/base';\nimport { Skeleton } from './core/Skeleton.mjs';\nimport { AnimationState } from './core/AnimationState.mjs';\nimport { AnimationStateData } from './core/AnimationStateData.mjs';\n\nclass Spine extends SpineBase {\n  createSkeleton(spineData) {\n    this.skeleton = new Skeleton(spineData);\n    this.skeleton.updateWorldTransform();\n    this.stateData = new AnimationStateData(spineData);\n    this.state = new AnimationState(this.stateData);\n  }\n}\n\nexport { Spine };\n//# sourceMappingURL=Spine.mjs.map\n","import { SpineLoaderAbstract } from '@pixi-spine/loader-base';\nimport { SkeletonBinary, SkeletonJson, AtlasAttachmentLoader } from '@pixi-spine/runtime-3.8';\n\nclass SpineParser extends SpineLoaderAbstract {\n  createBinaryParser() {\n    return new SkeletonBinary(null);\n  }\n  createJsonParser() {\n    return new SkeletonJson(null);\n  }\n  parseData(parser, atlas, dataToParse) {\n    const parserCast = parser;\n    parserCast.attachmentLoader = new AtlasAttachmentLoader(atlas);\n    return {\n      spineData: parserCast.readSkeletonData(dataToParse),\n      spineAtlas: atlas\n    };\n  }\n}\nnew SpineParser().installLoader();\n//# sourceMappingURL=index.mjs.map\n"],"names":["AttachmentType","AttachmentType2","BinaryInput","data","strings","index","buffer","value","optimizePositive","b","result","byteCount","chars","i","MixBlend","MixBlend2","MixDirection","MixDirection2","PositionMode","PositionMode2","RotateMode","RotateMode2","TransformMode","TransformMode2","filterFromString","text","TextureFilter","wrapFromString","TextureWrap","TextureFilter2","TextureWrap2","TextureRegion","tex","RegionFields","TextureAtlas","atlasText","textureLoader","callback","name","texture","pages","page","TextureAtlasPage","baseTexture","region","TextureAtlasRegion","textures","stripExtension","key","reader","TextureAtlasReader","entry","pageFields","regionFields","rotateValue","rotate","line","iterateParser","field","ALPHA_MODES","atlasRegion","names","values","count","entryValues","resolution","swapWH","frame","Rectangle","orig","trim","Texture","colon","lastMatch","comma","filter","SCALE_MODES","MIPMAP_MODES","IntSet","contains","StringSet","oldSize","n","_Color","r","g","a","c","hex","color","Color","_MathUtils","min","max","degrees","x","y","mode","u","d","MathUtils","Interpolation","start","end","Pow","power","PowOut","_Utils","source","sourceStart","dest","destStart","numElements","j","array","fromIndex","toIndex","size","defaultValue","alpha","blend","element","identity","type","Utils","DebugUtils","skeleton","bone","mat","Pool","instantiator","item","items","Vector2","len","TimeKeeper","now","WindowedMean","windowSize","mean","SkeletonBoundsBase","updateAabb","boundingBoxes","polygons","polygonPool","slots","slotCount","slot","attachment","boundingBox","polygon","minX","minY","maxX","maxY","vertices","ii","nn","x1","y1","x2","y2","m","bounds","prevIndex","inside","vertexY","prevY","vertexX","width12","height12","det1","x3","y3","x4","y4","det2","width34","height34","det3","settings","tempRgb","SpineSprite","Sprite","SpineMesh","SimpleMesh","uvs","indices","drawMode","_SpineBase","Container","spineData","slotContainer","spriteName","sprite","mesh","_a","utils","dt","delayLimit","globalClr","light","dark","spriteColor","attColor","transform2","Transform","id","meshId","r0","g0","b0","drawOrder","clippingAttachment","clippingContainer","timeDelta","defName","strip","DRAW_MODES","clip","graphics","poly","Polygon","geom","slotIndex","slotName","attachmentName","currentAttachment","Graphics","nameSuffix","group","outGroup","list_d","list_n","target","options","SpineBase","SpineDebugRenderer","spine","debugDisplayObjects","scale","lineWidth","skeletonX","skeletonY","bones","boneLen","starX","starY","endX","endY","w","h","a2","b2","c2","rad","B","gp","refRation","rotation","startDotSize","regionAttachment","meshAttachment","triangles","hullLength","i2","len2","v1","v2","v3","lastX","lastY","world","drawPolygon","polygonVertices","_offset","paths","dotSize","pathAttachment","cx1","cy1","cx2","cy2","spineTextureAtlasLoader","ExtensionType","LoaderParserPriority","url","checkExtension","asset","isExtensionRight","isString","loader","metadata","basePath","resolve","reject","retPromise","res","rej","retval","resolveCallback","newAtlas","makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject","atlas","atlasBasePath","imageMetadata","pageName","textureLoadedCallback","e","settings$1","extensions","isJson","resource","isBuffer","SpineLoaderAbstract","spineAdapter","spineLoaderExtension","isJsonSpineModel","isBinarySpineModel","isMetadataAngry","loadAsset","fileExt","fileName","parser","dataToParse","metadataSkeletonScale","metadataAtlas","textAtlas","auxResolve","auxReject","atlasPromise","textureAtlas2","atlasPath","textureAtlas","Attachment","_VertexAttachment","worldVertices","offset","stride","deformArray","vx","vy","v","skip","skeletonBones","wx","wy","weight","deform","f","VertexAttachment","BoundingBoxAttachment","copy","ClippingAttachment","MeshAttachment","parentMesh","PathAttachment","PointAttachment","point","cos","sin","Slot","time","_RegionAttachment","regionScaleX","regionScaleY","localX","localY","localX2","localY2","radians","localXCos","localXSin","localYCos","localYSin","localX2Cos","localX2Sin","localY2Cos","localY2Sin","vertexOffset","offsetX","offsetY","RegionAttachment","JitterEffect","jitterX","jitterY","position","uv","_SwirlEffect","radius","radAngle","dist","theta","SwirlEffect","Animation","timelines","duration","lastTime","loop","events","direction","step","low","high","current","last","TimelineType","TimelineType2","_CurveTimeline","frameCount","frameIndex","tmpx","tmpy","dddfx","dddfy","ddfx","ddfy","dfx","dfy","curves","percent","prevX","CurveTimeline","_RotateTimeline","frames","r2","prevRotation","frameTime","RotateTimeline","_TranslateTimeline","TranslateTimeline","ScaleTimeline","bx","by","ShearTimeline","_ColorTimeline","setup","ColorTimeline","_TwoColorTimeline","g2","setupLight","setupDark","TwoColorTimeline","AttachmentTimeline","zeros","DeformTimeline","firedEvents","slotAttachment","frameVertices","vertexCount","vertexAttachment","deform2","setupVertices","lastVertices","vertexAttachment2","prevVertices","nextVertices","prev","EventTimeline","event","DrawOrderTimeline","drawOrderToSetupIndex","_IkConstraintTimeline","mix","softness","bendDirection","compress","stretch","constraint","IkConstraintTimeline","_TransformConstraintTimeline","rotateMix","translateMix","scaleMix","shearMix","translate","shear","TransformConstraintTimeline","_PathConstraintPositionTimeline","PathConstraintPositionTimeline","PathConstraintSpacingTimeline","spacing","_PathConstraintMixTimeline","PathConstraintMixTimeline","_AnimationState","EventQueue","TrackEntry","delta","tracks","currentDelta","next","nextTime","from","to","finished","applied","animationLast","animationTime","timelineCount","timeline","timelineMode","firstFrame","timelinesRotation","timelineBlend","setupState","attachments","alphaHold","alphaMix","timelineHoldMix","holdMix","rotateTimeline","r1","total","diff","lastTotal","lastDiff","dir","animationStart","animationEnd","trackLastWrapped","complete","oldDrainDisabled","trackIndex","interrupt","animationName","animation","delay","mixDuration","timelinesCount","timelineDipMix","propertyIDs","outer","listener","AnimationState","_TrackEntry","_EventQueue","animState","EventType","objects","listeners","EventType2","AnimationStateAdapter","_AnimationStateData","skeletonData","fromName","toName","AnimationStateData","AtlasAttachmentLoader","skin","path","Bone","parent","Matrix","scaleX","scaleY","shearX","shearY","sx","sy","rotationY","pa","pb","pc","pd","la","lb","lc","ld","s","prx","rx","ry","za","zc","zb","zd","pm","pid","dx","dy","ia","ib","ic","ra","rb","rc","rd","det","invDet","local","worldRotation","localRotation","BoneData","ConstraintData","order","skinRequired","Event","EventData","IkConstraint","targetX","targetY","uniform","p","rotationIK","tx","ty","sa","sc","dd","child","bendDir","px","py","psx","psy","csx","pmat","os1","os2","s2","cx","cy","cwx","cwy","pp","l1","l2","a1","td","sd","aa","bb","ta","c1","q","minAngle","minDist","maxAngle","maxDist","os","IkConstraintData","PathConstraintData","SpacingMode","SpacingMode2","_PathConstraint","spacingMode","lengthSpacing","rotateMode","tangents","boneCount","spacesCount","spaces","lengths","setupLength","length","positions","boneX","boneY","offsetRotation","tip","percentPosition","percentSpacing","out","closed","verticesLength","curveCount","prevCurve","pathLength2","o","curve","space","pathLength","segments","curveLength","segment","temp","tt","ttt","uu","uuu","ut","ut3","uut3","utt3","PathConstraint","TransformConstraint","targetMat","tb","tc","degRadReflect","offsetShearY","modified","ts","_Skeleton","boneData","slotData","ikConstraintData","transformConstraintData","pathConstraintData","updateCache","skinBones","ikConstraints","transformConstraints","pathConstraints","ikCount","transformCount","pathCount","constraintCount","constrained","slotBone","pathBones","boneIndex","updateCacheReset","boneName","skinName","newSkin","constraintName","ikConstraint","Skeleton","SkeletonData","skins","eventDataName","animations","pathConstraintName","SlotData","TransformConstraintData","SkinEntry","Skin","contained","dictionary","entries","slotAttachments","oldSkin","skinAttachment","_SkeletonBinary","attachmentLoader","binary","input","nonessential","darkColor","defaultSkin","linkedMesh","typeIndex","width","height","box","edges","inheritDeform","LinkedMesh","constantSpeed","endSlotIndex","Vertices","weights","bonesArray","tempColor1","tempColor2","timelineType","timelineScale","iii","nnn","weighted","deformLength","vn","drawOrderCount","offsetCount","unchanged","originalIndex","unchangedIndex","eventCount","eventData","SkeletonBinary","BLEND_MODES","LinkedMesh$1","SkeletonBounds","SkeletonJson","json","root","skeletonMap","error","boneMap","parentName","slotMap","constraintMap","targetName","skinMap","entryName","eventName","eventMap","animationMap","map","scaledVertices","timelineName","timelineMap","valueMap","deformName","deformMap","verticesValue","drawOrderNode","drawOrderMap","offsets","offsetMap","prop","str","Spine","SpineParser","parserCast"],"mappings":"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"}