{"version":3,"file":"pixi-spine.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/runtime-3.7/lib/core/attachments/Attachment.mjs","../../../packages/runtime-3.7/lib/core/attachments/BoundingBoxAttachment.mjs","../../../packages/runtime-3.7/lib/core/attachments/ClippingAttachment.mjs","../../../packages/runtime-3.7/lib/core/attachments/MeshAttachment.mjs","../../../packages/runtime-3.7/lib/core/attachments/PathAttachment.mjs","../../../packages/runtime-3.7/lib/core/attachments/PointAttachment.mjs","../../../packages/runtime-3.7/lib/core/Slot.mjs","../../../packages/runtime-3.7/lib/core/attachments/RegionAttachment.mjs","../../../packages/runtime-3.7/lib/core/vertexeffects/JitterEffect.mjs","../../../packages/runtime-3.7/lib/core/vertexeffects/SwirlEffect.mjs","../../../packages/runtime-3.7/lib/core/Animation.mjs","../../../packages/runtime-3.7/lib/core/AnimationState.mjs","../../../packages/runtime-3.7/lib/core/AnimationStateData.mjs","../../../packages/runtime-3.7/lib/core/AtlasAttachmentLoader.mjs","../../../packages/runtime-3.7/lib/core/Bone.mjs","../../../packages/runtime-3.7/lib/core/BoneData.mjs","../../../packages/runtime-3.7/lib/core/Event.mjs","../../../packages/runtime-3.7/lib/core/EventData.mjs","../../../packages/runtime-3.7/lib/core/IkConstraint.mjs","../../../packages/runtime-3.7/lib/core/IkConstraintData.mjs","../../../packages/runtime-3.7/lib/core/PathConstraintData.mjs","../../../packages/runtime-3.7/lib/core/PathConstraint.mjs","../../../packages/runtime-3.7/lib/core/TransformConstraint.mjs","../../../packages/runtime-3.7/lib/core/Skeleton.mjs","../../../packages/runtime-3.7/lib/core/SkeletonBounds.mjs","../../../packages/runtime-3.7/lib/core/SkeletonData.mjs","../../../packages/runtime-3.7/lib/core/SlotData.mjs","../../../packages/runtime-3.7/lib/core/TransformConstraintData.mjs","../../../packages/runtime-3.7/lib/core/Skin.mjs","../../../packages/runtime-3.7/lib/core/SkeletonJson.mjs","../../../packages/runtime-3.7/lib/Spine.mjs","../../../packages/runtime-4.1/lib/core/attachments/Attachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/BoundingBoxAttachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/ClippingAttachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/MeshAttachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/PathAttachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/PointAttachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/RegionAttachment.mjs","../../../packages/runtime-4.1/lib/core/attachments/Sequence.mjs","../../../packages/runtime-4.1/lib/core/Animation.mjs","../../../packages/runtime-4.1/lib/core/AnimationState.mjs","../../../packages/runtime-4.1/lib/core/AnimationStateData.mjs","../../../packages/runtime-4.1/lib/core/AtlasAttachmentLoader.mjs","../../../packages/runtime-4.1/lib/core/Bone.mjs","../../../packages/runtime-4.1/lib/core/BoneData.mjs","../../../packages/runtime-4.1/lib/core/ConstraintData.mjs","../../../packages/runtime-4.1/lib/core/Event.mjs","../../../packages/runtime-4.1/lib/core/EventData.mjs","../../../packages/runtime-4.1/lib/core/IkConstraint.mjs","../../../packages/runtime-4.1/lib/core/IkConstraintData.mjs","../../../packages/runtime-4.1/lib/core/PathConstraintData.mjs","../../../packages/runtime-4.1/lib/core/PathConstraint.mjs","../../../packages/runtime-4.1/lib/core/Slot.mjs","../../../packages/runtime-4.1/lib/core/TransformConstraint.mjs","../../../packages/runtime-4.1/lib/core/Skeleton.mjs","../../../packages/runtime-4.1/lib/core/SkeletonData.mjs","../../../packages/runtime-4.1/lib/core/SlotData.mjs","../../../packages/runtime-4.1/lib/core/TransformConstraintData.mjs","../../../packages/runtime-4.1/lib/core/Skin.mjs","../../../packages/runtime-4.1/lib/core/SkeletonBinary.mjs","../../../packages/runtime-4.1/lib/core/SkeletonBounds.mjs","../../../packages/runtime-4.1/lib/core/SkeletonJson.mjs","../../../packages/runtime-4.1/lib/Spine.mjs","../../../packages/loader-uni/lib/versions.mjs","../../../packages/loader-uni/lib/SpineLoader.mjs","../../../packages/loader-uni/lib/Spine.mjs","../../../packages/loader-uni/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","class 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  }\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.attachmentVertices;\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  /** Returns true if a deform originally applied to the specified attachment should be applied to this attachment. */\n  applyDeform(sourceAttachment) {\n    return this == sourceAttachment;\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}\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}\n\nexport { ClippingAttachment };\n//# sourceMappingURL=ClippingAttachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color } 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.inheritDeform = false;\n    this.tempColor = new Color(0, 0, 0, 0);\n  }\n  applyDeform(sourceAttachment) {\n    return this == sourceAttachment || this.inheritDeform && this.parentMesh == sourceAttachment;\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  // computeWorldVerticesWith(slot, 0, this.worldVerticesLength, worldVertices, 0);\n}\n\nexport { MeshAttachment };\n//# sourceMappingURL=MeshAttachment.mjs.map\n","import { VertexAttachment } from './Attachment.mjs';\nimport { AttachmentType, Color } 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}\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}\n\nexport { PointAttachment };\n//# sourceMappingURL=PointAttachment.mjs.map\n","import { Color } from '@pixi-spine/base';\n\nclass Slot {\n  constructor(data, bone) {\n    this.attachmentVertices = 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.attachmentVertices.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};\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.duration = duration;\n  }\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  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  getFrameCount() {\n    return this.curves.length / _CurveTimeline.BEZIER_SIZE + 1;\n  }\n  setLinear(frameIndex) {\n    this.curves[frameIndex * _CurveTimeline.BEZIER_SIZE] = _CurveTimeline.LINEAR;\n  }\n  setStepped(frameIndex) {\n    this.curves[frameIndex * _CurveTimeline.BEZIER_SIZE] = _CurveTimeline.STEPPED;\n  }\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 control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.\n   * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of\n   * the difference between the keyframe'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  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 (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 and value of the specified keyframe. */\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 (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 (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 (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 and value of the specified keyframe. */\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    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 and value of the specified keyframe. */\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    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  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time and value of the specified keyframe. */\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 (direction == MixDirection.mixOut && blend == MixBlend.setup) {\n      const attachmentName2 = slot.data.attachmentName;\n      slot.setAttachment(attachmentName2 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName2));\n      return;\n    }\n    const frames = this.frames;\n    if (time < frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first) {\n        const attachmentName2 = slot.data.attachmentName;\n        slot.setAttachment(attachmentName2 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName2));\n      }\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}\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 of the specified keyframe. */\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    const slotAttachment = slot.getAttachment();\n    if (!(slotAttachment instanceof VertexAttachment) || !slotAttachment.applyDeform(this.attachment))\n      return;\n    const verticesArray = slot.attachmentVertices;\n    if (verticesArray.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          verticesArray.length = 0;\n          return;\n        case MixBlend.first:\n          if (alpha == 1) {\n            verticesArray.length = 0;\n            break;\n          }\n          const vertices2 = Utils.setArraySize(verticesArray, vertexCount);\n          if (vertexAttachment.bones == null) {\n            const setupVertices = vertexAttachment.vertices;\n            for (let i = 0; i < vertexCount; i++)\n              vertices2[i] += (setupVertices[i] - vertices2[i]) * alpha;\n          } else {\n            alpha = 1 - alpha;\n            for (let i = 0; i < vertexCount; i++)\n              vertices2[i] *= alpha;\n          }\n      }\n      return;\n    }\n    const vertices = Utils.setArraySize(verticesArray, 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              vertices[i] += lastVertices[i] - setupVertices[i];\n            }\n          } else {\n            for (let i = 0; i < vertexCount; i++)\n              vertices[i] += lastVertices[i];\n          }\n        } else {\n          Utils.arrayCopy(lastVertices, 0, vertices, 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                vertices[i] = setup + (lastVertices[i] - setup) * alpha;\n              }\n            } else {\n              for (let i = 0; i < vertexCount; i++)\n                vertices[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              vertices[i] += (lastVertices[i] - vertices[i]) * alpha;\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                vertices[i] += (lastVertices[i] - setupVertices[i]) * alpha;\n              }\n            } else {\n              for (let i = 0; i < vertexCount; i++)\n                vertices[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            vertices[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            vertices[i] += prev + (nextVertices[i] - prev) * percent;\n          }\n        }\n      } else {\n        for (let i = 0; i < vertexCount; i++) {\n          const prev = prevVertices[i];\n          vertices[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              vertices[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              vertices[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            vertices[i] += (prev + (nextVertices[i] - prev) * percent - vertices[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              vertices[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              vertices[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  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time of the specified keyframe. */\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  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time of the specified keyframe.\n   * @param drawOrder May be null to use bind pose 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, 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, mix and bend direction of the specified keyframe. */\n  setFrame(frameIndex, time, mix, bendDirection, compress, stretch) {\n    frameIndex *= _IkConstraintTimeline.ENTRIES;\n    this.frames[frameIndex] = time;\n    this.frames[frameIndex + _IkConstraintTimeline.MIX] = mix;\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 (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.mix = constraint.data.mix;\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.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        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        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 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      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      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 = 5;\nIkConstraintTimeline.PREV_TIME = -5;\nIkConstraintTimeline.PREV_MIX = -4;\nIkConstraintTimeline.PREV_BEND_DIRECTION = -3;\nIkConstraintTimeline.PREV_COMPRESS = -2;\nIkConstraintTimeline.PREV_STRETCH = -1;\nIkConstraintTimeline.MIX = 1;\nIkConstraintTimeline.BEND_DIRECTION = 2;\nIkConstraintTimeline.COMPRESS = 3;\nIkConstraintTimeline.STRETCH = 4;\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  /** Sets the time and mixes of the specified keyframe. */\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 (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 and value of the specified keyframe. */\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 (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 (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  /** Sets the time and mixes of the specified keyframe. */\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 (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, RotateTimeline, AttachmentTimeline, DrawOrderTimeline } from './Animation.mjs';\n\nconst _AnimationState = class {\n  constructor(data) {\n    this.tracks = new Array();\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.timeScale = 1;\n    this.trackEntryPool = new Pool(() => new TrackEntry());\n    this.data = data;\n  }\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  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  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          timelines[ii].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 {\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    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 (!attachments && timeline instanceof AttachmentTimeline)\n              continue;\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:\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 {\n          Utils.webkit602BugfixHelper(alpha, blend);\n          if (timelineBlend == MixBlend.setup) {\n            if (timeline instanceof AttachmentTimeline) {\n              if (attachments)\n                direction = MixDirection.mixOut;\n            } else if (timeline instanceof DrawOrderTimeline) {\n              if (drawOrder)\n                direction = MixDirection.mixOut;\n            }\n          }\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  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    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  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  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  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  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  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  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  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  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  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 - this.tracks.length + 1, null);\n    this.tracks.length = index + 1;\n    return null;\n  }\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    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.setTimelineModes(entry);\n        entry = entry.mixingTo;\n      } while (entry != null);\n    }\n  }\n  setTimelineModes(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        propertyIDs.add(timelines[i].getPropertyId());\n        timelineMode[i] = _AnimationState.HOLD;\n      }\n      return;\n    }\n    outer:\n      for (let i = 0; i < timelinesCount; i++) {\n        const id = timelines[i].getPropertyId();\n        if (!propertyIDs.add(id))\n          timelineMode[i] = _AnimationState.SUBSEQUENT;\n        else if (to == null || !this.hasTimeline(to, id))\n          timelineMode[i] = _AnimationState.FIRST;\n        else {\n          for (let next = to.mixingTo; next != null; next = next.mixingTo) {\n            if (this.hasTimeline(next, 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;\n        }\n      }\n  }\n  hasTimeline(entry, id) {\n    const timelines = entry.animation.timelines;\n    for (let i = 0, n = timelines.length; i < n; i++)\n      if (timelines[i].getPropertyId() == id)\n        return true;\n    return false;\n  }\n  getCurrent(trackIndex) {\n    if (trackIndex >= this.tracks.length)\n      return null;\n    return this.tracks[trackIndex];\n  }\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(AnimationStateListener)}. */\n  removeListener(listener) {\n    const index = this.listeners.indexOf(listener);\n    if (index >= 0)\n      this.listeners.splice(index, 1);\n  }\n  clearListeners() {\n    this.listeners.length = 0;\n  }\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);\nAnimationState.SUBSEQUENT = 0;\nAnimationState.FIRST = 1;\nAnimationState.HOLD = 2;\nAnimationState.HOLD_MIX = 3;\nAnimationState.deprecatedWarning1 = false;\nAnimationState.deprecatedWarning2 = false;\nAnimationState.deprecatedWarning3 = false;\nconst _TrackEntry = class {\n  constructor() {\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  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  isComplete() {\n    return this.trackTime >= this.animationEnd - this.animationStart;\n  }\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 AnimationStateAdapter2 {\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, AnimationStateAdapter2, 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    /** NOT USED IN 3.7. Needed for the debug graph code */\n    this.active = true;\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  /** 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          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 } 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    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 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 { 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    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.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  getOrder() {\n    return this.data.order;\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.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 id = 1 / (p.a * p.d - p.b * p.c);\n    const x = targetX - p.tx;\n    const y = targetY - p.ty;\n    const tx = (x * p.d - y * p.c) * id - bone.ax;\n    const ty = (y * p.a - x * p.b) * id - bone.ay;\n    let rotationIK = Math.atan2(ty, tx) * MathUtils.radDeg - bone.ashearX - bone.arotation;\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      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, 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 = targetX - pp.tx;\n    let y = targetY - pp.ty;\n    const tx = (x * d - y * b) * id - px;\n    const ty = (y * a - x * c) * id - py;\n    const dd = tx * tx + ty * ty;\n    x = cwx - pp.tx;\n    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 = 0;\n    let a2 = 0;\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 && l1 + l2 > 1e-4)\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","class IkConstraintData {\n  constructor(name) {\n    this.order = 0;\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.name = name;\n  }\n}\n\nexport { IkConstraintData };\n//# sourceMappingURL=IkConstraintData.mjs.map\n","class PathConstraintData {\n  constructor(name) {\n    this.order = 0;\n    this.bones = new Array();\n    this.name = name;\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    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  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  getOrder() {\n    return this.data.order;\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    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  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  getOrder() {\n    return this.data.order;\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      bones[i].sorted = false;\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    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    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    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.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.bendDirection = constraint.data.bendDirection;\n      constraint.mix = constraint.data.mix;\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 != 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  }\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) {\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      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","import { SkeletonBoundsBase } from '@pixi-spine/base';\n\nclass SkeletonBounds extends SkeletonBoundsBase {\n}\n\nexport { SkeletonBounds };\n//# sourceMappingURL=SkeletonBounds.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","class TransformConstraintData {\n  constructor(name) {\n    this.order = 0;\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    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    this.name = name;\n  }\n}\n\nexport { TransformConstraintData };\n//# sourceMappingURL=TransformConstraintData.mjs.map\n","class Skin {\n  constructor(name) {\n    this.attachments = new Array();\n    if (name == null)\n      throw new Error(\"name cannot be null.\");\n    this.name = name;\n  }\n  addAttachment(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  /** @return May be null. */\n  getAttachment(slotIndex, name) {\n    const dictionary = this.attachments[slotIndex];\n    return dictionary ? dictionary[name] : null;\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 };\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 { 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      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        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        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.bendDirection = this.getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n        data.mix = this.getValue(constraintMap, \"mix\", 1);\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        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        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 (const skinName in root.skins) {\n        const skinMap = root.skins[skinName];\n        const skin = new Skin(skinName);\n        for (const slotName in skinMap) {\n          const slotIndex = skeletonData.findSlotIndex(slotName);\n          if (slotIndex == -1)\n            throw new Error(`Slot not found: ${slotName}`);\n          const slotMap = skinMap[slotName];\n          for (const entryName in slotMap) {\n            const attachment = this.readAttachment(slotMap[entryName], skin, slotIndex, entryName, skeletonData);\n            if (attachment != null)\n              skin.addAttachment(slotIndex, 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.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        const parent = this.getValue(map, \"parent\", null);\n        if (parent != null) {\n          mesh.inheritDeform = this.getValue(map, \"deform\", true);\n          this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, \"skin\", null), slotIndex, parent));\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.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++, valueMap.time, 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, valueMap.time, 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, valueMap.time, 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, valueMap.time, valueMap.angle);\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            if (timelineName === \"scale\")\n              timeline = new ScaleTimeline(timelineMap.length);\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\", 0);\n              const y = this.getValue(valueMap, \"y\", 0);\n              timeline.setFrame(frameIndex, valueMap.time, 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            valueMap.time,\n            this.getValue(valueMap, \"mix\", 1),\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            valueMap.time,\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.paths) {\n      for (const constraintName in map.paths) {\n        const constraintMap = map.paths[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, valueMap.time, 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, valueMap.time, 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, valueMap.time, 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++, drawOrderMap.time, 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(eventMap.time), 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.curve)\n      return;\n    if (map.curve === \"stepped\")\n      timeline.setStepped(frameIndex);\n    else if (Object.prototype.toString.call(map.curve) === \"[object Array]\") {\n      const curve = map.curve;\n      timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);\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) {\n    this.mesh = mesh;\n    this.skin = skin;\n    this.slotIndex = slotIndex;\n    this.parent = parent;\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 { Utils } from '@pixi-spine/base';\n\nclass Attachment {\n  constructor(name) {\n    if (!name)\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    /** The unique ID for this attachment. */\n    this.id = _VertexAttachment.nextID++;\n    /** The bones which affect the {@link #getVertices()}. The array entries are, for each vertex, the number of bones affecting\n     * the vertex followed by that many bone indices, which is the index of the bone in {@link Skeleton#bones}. Will be null\n     * if this attachment has no weights. */\n    this.bones = null;\n    /** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y`\n     * entries for each vertex. For a weighted attachment, the values are `x,y,weight` entries for each bone affecting\n     * each vertex. */\n    this.vertices = [];\n    /** The maximum number of world vertex values that can be output by\n     * {@link #computeWorldVertices()} using the `count` parameter. */\n    this.worldVerticesLength = 0;\n    /** Timelines for the timeline attachment are also applied to this attachment.\n     * May be null if no attachment-specific timelines should be applied. */\n    this.timelineAttachment = this;\n  }\n  computeWorldVerticesOld(slot, worldVertices) {\n    this.computeWorldVertices(slot, 0, this.worldVerticesLength, worldVertices, 0, 2);\n  }\n  /** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is\n   * not empty, it is used to deform the vertices.\n   *\n   * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n   * Runtimes Guide.\n   * @param start The index of the first {@link #vertices} 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 #worldVerticesLength} - `start`.\n   * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *\n   *           `stride` / 2.\n   * @param offset The `worldVertices` index to begin writing values.\n   * @param stride The number of `worldVertices` entries between the value pairs written. */\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) {\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  /** Does not copy id (generated) or name (set on construction). **/\n  copyTo(attachment) {\n    if (this.bones) {\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) {\n      attachment.vertices = Utils.newFloatArray(this.vertices.length);\n      Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n    }\n    attachment.worldVerticesLength = this.worldVerticesLength;\n    attachment.timelineAttachment = this.timelineAttachment;\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    /** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of\n     * the skeleton's rendering. */\n    this.endSlot = null;\n    // Nonessential.\n    /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons\n     * are not usually rendered at runtime. */\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, path) {\n    super(name);\n    this.type = AttachmentType.Mesh;\n    this.region = null;\n    /** Triplets of vertex indices which describe the mesh's triangulation. */\n    this.triangles = [];\n    /** The color to tint the mesh. */\n    this.color = new Color(1, 1, 1, 1);\n    /** The width of the mesh's image. Available only when nonessential data was exported. */\n    this.width = 0;\n    /** The height of the mesh's image. Available only when nonessential data was exported. */\n    this.height = 0;\n    /** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */\n    this.hullLength = 0;\n    /** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if\n     * nonessential data was exported. Triangulation is not performed at runtime. */\n    this.edges = [];\n    this.parentMesh = null;\n    this.sequence = null;\n    this.tempColor = new Color(0, 0, 0, 0);\n    this.path = path;\n  }\n  /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices},\n   * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the\n   * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */\n  getParentMesh() {\n    return this.parentMesh;\n  }\n  /** @param parentMesh May be null. */\n  setParentMesh(parentMesh) {\n    this.parentMesh = parentMesh;\n    if (parentMesh) {\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)\n      return this.newLinkedMesh();\n    const copy = new MeshAttachment(this.name, this.path);\n    copy.region = this.region;\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    copy.sequence = this.sequence != null ? this.sequence.copy() : null;\n    if (this.edges) {\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  computeWorldVertices(slot, start, count, worldVertices, offset, stride) {\n    if (this.sequence != null)\n      this.sequence.apply(slot, this);\n    super.computeWorldVertices(slot, start, count, worldVertices, offset, stride);\n  }\n  /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/\n  newLinkedMesh() {\n    const copy = new MeshAttachment(this.name, this.path);\n    copy.region = this.region;\n    copy.color.setFromColor(this.color);\n    copy.timelineAttachment = this.timelineAttachment;\n    copy.setParentMesh(this.parentMesh ? 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    /** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */\n    this.lengths = [];\n    /** If true, the start and end knots are connected. */\n    this.closed = false;\n    /** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer\n     * calculations are performed but calculating positions along the path is less accurate. */\n    this.constantSpeed = false;\n    /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually\n     * rendered at runtime. */\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.x = 0;\n    this.y = 0;\n    this.rotation = 0;\n    /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments\n     * are not usually rendered at runtime. */\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 { Attachment } from './Attachment.mjs';\nimport { AttachmentType, Color, Utils } from '@pixi-spine/base';\n\nconst _RegionAttachment = class extends Attachment {\n  constructor(name, path) {\n    super(name);\n    this.type = AttachmentType.Region;\n    /** The local x translation. */\n    this.x = 0;\n    /** The local y translation. */\n    this.y = 0;\n    /** The local scaleX. */\n    this.scaleX = 1;\n    /** The local scaleY. */\n    this.scaleY = 1;\n    /** The local rotation. */\n    this.rotation = 0;\n    /** The width of the region attachment in Spine. */\n    this.width = 0;\n    /** The height of the region attachment in Spine. */\n    this.height = 0;\n    /** The color to tint the region attachment. */\n    this.color = new Color(1, 1, 1, 1);\n    this.rendererObject = null;\n    this.region = null;\n    this.sequence = null;\n    /** For each of the 4 vertices, a pair of <code>x,y</code> values that is the local position of the vertex.\n     *\n     * See {@link #updateOffset()}. */\n    this.offset = Utils.newFloatArray(8);\n    this.uvs = Utils.newFloatArray(8);\n    this.tempColor = new Color(1, 1, 1, 1);\n    this.path = path;\n  }\n  /** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */\n  updateRegion() {\n    if (!this.region)\n      throw new Error(\"Region not set.\");\n    const region = this.region;\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 x = this.x;\n    const y = this.y;\n    const localXCos = localX * cos + x;\n    const localXSin = localX * sin;\n    const localYCos = localY * cos + y;\n    const localYSin = localY * sin;\n    const localX2Cos = localX2 * cos + x;\n    const localX2Sin = localX2 * sin;\n    const localY2Cos = localY2 * cos + y;\n    const localY2Sin = localY2 * sin;\n    const offset = this.offset;\n    offset[0] = localXCos - localYSin;\n    offset[1] = localYCos + localXSin;\n    offset[2] = localXCos - localY2Sin;\n    offset[3] = localY2Cos + localXSin;\n    offset[4] = localX2Cos - localY2Sin;\n    offset[5] = localY2Cos + localX2Sin;\n    offset[6] = localX2Cos - localYSin;\n    offset[7] = localYCos + localX2Sin;\n    const uvs = this.uvs;\n    if (region.degrees == 90) {\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  /** Transforms the attachment's four vertices to world coordinates. If the attachment has a {@link #sequence}, the region may\n   * be changed.\n   * <p>\n   * See <a href=\"http://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n   * Runtimes Guide.\n   * @param worldVertices The output world vertices. Must have a length >= <code>offset</code> + 8.\n   * @param offset The <code>worldVertices</code> index to begin writing values.\n   * @param stride The number of <code>worldVertices</code> entries between the value pairs written. */\n  computeWorldVertices(slot, worldVertices, offset, stride) {\n    if (this.sequence != null)\n      this.sequence.apply(slot, this);\n    const bone = slot.bone;\n    const vertexOffset = this.offset;\n    const mat = 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[0];\n    offsetY = vertexOffset[1];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n    offset += stride;\n    offsetX = vertexOffset[2];\n    offsetY = vertexOffset[3];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n    offset += stride;\n    offsetX = vertexOffset[4];\n    offsetY = vertexOffset[5];\n    worldVertices[offset] = offsetX * a + offsetY * b + x;\n    worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n    offset += stride;\n    offsetX = vertexOffset[6];\n    offsetY = vertexOffset[7];\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, this.path);\n    copy.region = this.region;\n    copy.rendererObject = this.rendererObject;\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    copy.sequence = this.sequence != null ? this.sequence.copy() : null;\n    return copy;\n  }\n};\nlet RegionAttachment = _RegionAttachment;\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 { Utils } from '@pixi-spine/base';\n\nconst _Sequence = class {\n  constructor(count) {\n    this.id = _Sequence.nextID();\n    this.start = 0;\n    this.digits = 0;\n    /** The index of the region to show for the setup pose. */\n    this.setupIndex = 0;\n    this.regions = new Array(count);\n  }\n  copy() {\n    const copy = new _Sequence(this.regions.length);\n    Utils.arrayCopy(this.regions, 0, copy.regions, 0, this.regions.length);\n    copy.start = this.start;\n    copy.digits = this.digits;\n    copy.setupIndex = this.setupIndex;\n    return copy;\n  }\n  apply(slot, attachment) {\n    let index = slot.sequenceIndex;\n    if (index == -1)\n      index = this.setupIndex;\n    if (index >= this.regions.length)\n      index = this.regions.length - 1;\n    const region = this.regions[index];\n    if (attachment.region != region) {\n      attachment.region = region;\n    }\n  }\n  getPath(basePath, index) {\n    let result = basePath;\n    const frame = (this.start + index).toString();\n    for (let i = this.digits - frame.length; i > 0; i--)\n      result += \"0\";\n    result += frame;\n    return result;\n  }\n  static nextID() {\n    return _Sequence._nextID++;\n  }\n};\nlet Sequence = _Sequence;\nSequence._nextID = 0;\nvar SequenceMode = /* @__PURE__ */ ((SequenceMode2) => {\n  SequenceMode2[SequenceMode2[\"hold\"] = 0] = \"hold\";\n  SequenceMode2[SequenceMode2[\"once\"] = 1] = \"once\";\n  SequenceMode2[SequenceMode2[\"loop\"] = 2] = \"loop\";\n  SequenceMode2[SequenceMode2[\"pingpong\"] = 3] = \"pingpong\";\n  SequenceMode2[SequenceMode2[\"onceReverse\"] = 4] = \"onceReverse\";\n  SequenceMode2[SequenceMode2[\"loopReverse\"] = 5] = \"loopReverse\";\n  SequenceMode2[SequenceMode2[\"pingpongReverse\"] = 6] = \"pingpongReverse\";\n  return SequenceMode2;\n})(SequenceMode || {});\nconst SequenceModeValues = [\n  0 /* hold */,\n  1 /* once */,\n  2 /* loop */,\n  3 /* pingpong */,\n  4 /* onceReverse */,\n  5 /* loopReverse */,\n  6 /* pingpongReverse */\n];\n\nexport { Sequence, SequenceMode, SequenceModeValues };\n//# sourceMappingURL=Sequence.mjs.map\n","import { VertexAttachment } from './attachments/Attachment.mjs';\nimport { StringSet, Utils, MixBlend, MixDirection, MathUtils } from '@pixi-spine/base';\nimport './attachments/RegionAttachment.mjs';\nimport { SequenceModeValues, SequenceMode } from './attachments/Sequence.mjs';\n\nclass Animation {\n  constructor(name, timelines, duration) {\n    this.timelines = [];\n    this.timelineIds = new StringSet();\n    if (!name)\n      throw new Error(\"name cannot be null.\");\n    this.name = name;\n    this.setTimelines(timelines);\n    this.duration = duration;\n  }\n  setTimelines(timelines) {\n    if (!timelines)\n      throw new Error(\"timelines cannot be null.\");\n    this.timelines = timelines;\n    this.timelineIds.clear();\n    for (let i = 0; i < timelines.length; i++)\n      this.timelineIds.addAll(timelines[i].getPropertyIds());\n  }\n  hasTimeline(ids) {\n    for (let i = 0; i < ids.length; i++)\n      if (this.timelineIds.contains(ids[i]))\n        return true;\n    return false;\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)\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}\nconst Property = {\n  rotate: 0,\n  x: 1,\n  y: 2,\n  scaleX: 3,\n  scaleY: 4,\n  shearX: 5,\n  shearY: 6,\n  rgb: 7,\n  alpha: 8,\n  rgb2: 9,\n  attachment: 10,\n  deform: 11,\n  event: 12,\n  drawOrder: 13,\n  ikConstraint: 14,\n  transformConstraint: 15,\n  pathConstraintPosition: 16,\n  pathConstraintSpacing: 17,\n  pathConstraintMix: 18,\n  sequence: 19\n};\nclass Timeline {\n  constructor(frameCount, propertyIds) {\n    this.propertyIds = propertyIds;\n    this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());\n  }\n  getPropertyIds() {\n    return this.propertyIds;\n  }\n  getFrameEntries() {\n    return 1;\n  }\n  getFrameCount() {\n    return this.frames.length / this.getFrameEntries();\n  }\n  getDuration() {\n    return this.frames[this.frames.length - this.getFrameEntries()];\n  }\n  static search1(frames, time) {\n    const n = frames.length;\n    for (let i = 1; i < n; i++)\n      if (frames[i] > time)\n        return i - 1;\n    return n - 1;\n  }\n  static search(frames, time, step) {\n    const n = frames.length;\n    for (let i = step; i < n; i += step)\n      if (frames[i] > time)\n        return i - step;\n    return n - step;\n  }\n}\nclass CurveTimeline extends Timeline {\n  // type, x, y, ...\n  constructor(frameCount, bezierCount, propertyIds) {\n    super(frameCount, propertyIds);\n    this.curves = Utils.newFloatArray(\n      frameCount + bezierCount * 18\n      /* BEZIER_SIZE*/\n    );\n    this.curves[frameCount - 1] = 1;\n  }\n  /** Sets the specified key frame to linear interpolation. */\n  setLinear(frame) {\n    this.curves[frame] = 0;\n  }\n  /** Sets the specified key frame to stepped interpolation. */\n  setStepped(frame) {\n    this.curves[frame] = 1;\n  }\n  /** Shrinks the storage for Bezier curves, for use when <code>bezierCount</code> (specified in the constructor) was larger\n   * than the actual number of Bezier curves. */\n  shrink(bezierCount) {\n    const size = this.getFrameCount() + bezierCount * 18;\n    if (this.curves.length > size) {\n      const newCurves = Utils.newFloatArray(size);\n      Utils.arrayCopy(this.curves, 0, newCurves, 0, size);\n      this.curves = newCurves;\n    }\n  }\n  /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than\n   * one curve per frame.\n   * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and <code>bezierCount - 1</code> (specified\n   *           in the constructor), inclusive.\n   * @param frame Between 0 and <code>frameCount - 1</code>, inclusive.\n   * @param value The index of the value for this frame that this curve is used for.\n   * @param time1 The time for the first key.\n   * @param value1 The value for the first key.\n   * @param cx1 The time for the first Bezier handle.\n   * @param cy1 The value for the first Bezier handle.\n   * @param cx2 The time of the second Bezier handle.\n   * @param cy2 The value for the second Bezier handle.\n   * @param time2 The time for the second key.\n   * @param value2 The value for the second key. */\n  setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {\n    const curves = this.curves;\n    let i = this.getFrameCount() + bezier * 18;\n    if (value == 0)\n      curves[frame] = 2 + i;\n    const tmpx = (time1 - cx1 * 2 + cx2) * 0.03;\n    const tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n    const dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3;\n    const dddy = ((cy1 - cy2) * 3 - value1 + value2) * 6e-3;\n    let ddx = tmpx * 2 + dddx;\n    let ddy = tmpy * 2 + dddy;\n    let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667;\n    let dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;\n    let x = time1 + dx;\n    let y = value1 + dy;\n    for (let n = i + 18; i < n; i += 2) {\n      curves[i] = x;\n      curves[i + 1] = y;\n      dx += ddx;\n      dy += ddy;\n      ddx += dddx;\n      ddy += dddy;\n      x += dx;\n      y += dy;\n    }\n  }\n  /** Returns the Bezier interpolated value for the specified time.\n   * @param frameIndex The index into {@link #getFrames()} for the values of the frame before <code>time</code>.\n   * @param valueOffset The offset from <code>frameIndex</code> to the value this curve is used for.\n   * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */\n  getBezierValue(time, frameIndex, valueOffset, i) {\n    const curves = this.curves;\n    if (curves[i] > time) {\n      const x2 = this.frames[frameIndex];\n      const y2 = this.frames[frameIndex + valueOffset];\n      return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2);\n    }\n    const n = i + 18;\n    for (i += 2; i < n; i += 2) {\n      if (curves[i] >= time) {\n        const x2 = curves[i - 2];\n        const y2 = curves[i - 1];\n        return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2);\n      }\n    }\n    frameIndex += this.getFrameEntries();\n    const x = curves[n - 2];\n    const y = curves[n - 1];\n    return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);\n  }\n}\nclass CurveTimeline1 extends CurveTimeline {\n  constructor(frameCount, bezierCount, propertyId) {\n    super(frameCount, bezierCount, [propertyId]);\n  }\n  getFrameEntries() {\n    return 2;\n  }\n  /** Sets the time and value for the specified frame.\n   * @param frame Between 0 and <code>frameCount</code>, inclusive.\n   * @param time The frame time in seconds. */\n  setFrame(frame, time, value) {\n    frame <<= 1;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* VALUE*/\n    ] = value;\n  }\n  /** Returns the interpolated value for the specified time. */\n  getCurveValue(time) {\n    const frames = this.frames;\n    let i = frames.length - 2;\n    for (let ii = 2; ii <= i; ii += 2) {\n      if (frames[ii] > time) {\n        i = ii - 2;\n        break;\n      }\n    }\n    const curveType = this.curves[i >> 1];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        const value = frames[\n          i + 1\n          /* VALUE*/\n        ];\n        return value + (time - before) / (frames[\n          i + 2\n          /* ENTRIES*/\n        ] - before) * (frames[\n          i + 2 + 1\n          /* VALUE*/\n        ] - value);\n      case 1:\n        return frames[\n          i + 1\n          /* VALUE*/\n        ];\n    }\n    return this.getBezierValue(\n      time,\n      i,\n      1,\n      curveType - 2\n      /* BEZIER*/\n    );\n  }\n}\nclass CurveTimeline2 extends CurveTimeline {\n  /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.\n   * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n  constructor(frameCount, bezierCount, propertyId1, propertyId2) {\n    super(frameCount, bezierCount, [propertyId1, propertyId2]);\n  }\n  getFrameEntries() {\n    return 3;\n  }\n  /** Sets the time and values for the specified frame.\n   * @param frame Between 0 and <code>frameCount</code>, inclusive.\n   * @param time The frame time in seconds. */\n  setFrame(frame, time, value1, value2) {\n    frame *= 3;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* VALUE1*/\n    ] = value1;\n    this.frames[\n      frame + 2\n      /* VALUE2*/\n    ] = value2;\n  }\n}\nclass RotateTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.rotate}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\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          bone.rotation += (bone.data.rotation - bone.rotation) * alpha;\n      }\n      return;\n    }\n    let r = this.getCurveValue(time);\n    switch (blend) {\n      case MixBlend.setup:\n        bone.rotation = bone.data.rotation + r * 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 * alpha;\n    }\n  }\n}\nclass TranslateTimeline extends CurveTimeline2 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.x}|${boneIndex}`, `${Property.y}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\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    const i = Timeline.search(\n      frames,\n      time,\n      3\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 3\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        x = frames[\n          i + 1\n          /* VALUE1*/\n        ];\n        y = frames[\n          i + 2\n          /* VALUE2*/\n        ];\n        const t = (time - before) / (frames[\n          i + 3\n          /* ENTRIES*/\n        ] - before);\n        x += (frames[\n          i + 3 + 1\n          /* VALUE1*/\n        ] - x) * t;\n        y += (frames[\n          i + 3 + 2\n          /* VALUE2*/\n        ] - y) * t;\n        break;\n      case 1:\n        x = frames[\n          i + 1\n          /* VALUE1*/\n        ];\n        y = frames[\n          i + 2\n          /* VALUE2*/\n        ];\n        break;\n      default:\n        x = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        y = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\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}\nclass TranslateXTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.x}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.x = bone.data.x;\n          return;\n        case MixBlend.first:\n          bone.x += (bone.data.x - bone.x) * alpha;\n      }\n      return;\n    }\n    const x = this.getCurveValue(time);\n    switch (blend) {\n      case MixBlend.setup:\n        bone.x = bone.data.x + x * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        bone.x += (bone.data.x + x - bone.x) * alpha;\n        break;\n      case MixBlend.add:\n        bone.x += x * alpha;\n    }\n  }\n}\nclass TranslateYTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.y}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.y = bone.data.y;\n          return;\n        case MixBlend.first:\n          bone.y += (bone.data.y - bone.y) * alpha;\n      }\n      return;\n    }\n    const y = this.getCurveValue(time);\n    switch (blend) {\n      case MixBlend.setup:\n        bone.y = bone.data.y + y * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        bone.y += (bone.data.y + y - bone.y) * alpha;\n        break;\n      case MixBlend.add:\n        bone.y += y * alpha;\n    }\n  }\n}\nclass ScaleTimeline extends CurveTimeline2 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.scaleX}|${boneIndex}`, `${Property.scaleY}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\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;\n    let y;\n    const i = Timeline.search(\n      frames,\n      time,\n      3\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 3\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        x = frames[\n          i + 1\n          /* VALUE1*/\n        ];\n        y = frames[\n          i + 2\n          /* VALUE2*/\n        ];\n        const t = (time - before) / (frames[\n          i + 3\n          /* ENTRIES*/\n        ] - before);\n        x += (frames[\n          i + 3 + 1\n          /* VALUE1*/\n        ] - x) * t;\n        y += (frames[\n          i + 3 + 2\n          /* VALUE2*/\n        ] - y) * t;\n        break;\n      case 1:\n        x = frames[\n          i + 1\n          /* VALUE1*/\n        ];\n        y = frames[\n          i + 2\n          /* VALUE2*/\n        ];\n        break;\n      default:\n        x = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        y = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n    }\n    x *= bone.data.scaleX;\n    y *= bone.data.scaleY;\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            bone.scaleX += (x - bone.data.scaleX) * alpha;\n            bone.scaleY += (y - 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            bone.scaleX += (x - bone.data.scaleX) * alpha;\n            bone.scaleY += (y - bone.data.scaleY) * alpha;\n        }\n      }\n    }\n  }\n}\nclass ScaleXTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.scaleX}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.scaleX = bone.data.scaleX;\n          return;\n        case MixBlend.first:\n          bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n      }\n      return;\n    }\n    const x = this.getCurveValue(time) * bone.data.scaleX;\n    if (alpha == 1) {\n      if (blend == MixBlend.add)\n        bone.scaleX += x - bone.data.scaleX;\n      else\n        bone.scaleX = x;\n    } else {\n      let bx = 0;\n      if (direction == MixDirection.mixOut) {\n        switch (blend) {\n          case MixBlend.setup:\n            bx = bone.data.scaleX;\n            bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n            break;\n          case MixBlend.first:\n          case MixBlend.replace:\n            bx = bone.scaleX;\n            bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n            break;\n          case MixBlend.add:\n            bone.scaleX += (x - bone.data.scaleX) * alpha;\n        }\n      } else {\n        switch (blend) {\n          case MixBlend.setup:\n            bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n            bone.scaleX = bx + (x - bx) * alpha;\n            break;\n          case MixBlend.first:\n          case MixBlend.replace:\n            bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n            bone.scaleX = bx + (x - bx) * alpha;\n            break;\n          case MixBlend.add:\n            bone.scaleX += (x - bone.data.scaleX) * alpha;\n        }\n      }\n    }\n  }\n}\nclass ScaleYTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.scaleY}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.scaleY = bone.data.scaleY;\n          return;\n        case MixBlend.first:\n          bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n      }\n      return;\n    }\n    const y = this.getCurveValue(time) * bone.data.scaleY;\n    if (alpha == 1) {\n      if (blend == MixBlend.add)\n        bone.scaleY += y - bone.data.scaleY;\n      else\n        bone.scaleY = y;\n    } else {\n      let by = 0;\n      if (direction == MixDirection.mixOut) {\n        switch (blend) {\n          case MixBlend.setup:\n            by = bone.data.scaleY;\n            bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n            break;\n          case MixBlend.first:\n          case MixBlend.replace:\n            by = bone.scaleY;\n            bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n            break;\n          case MixBlend.add:\n            bone.scaleY += (y - bone.data.scaleY) * alpha;\n        }\n      } else {\n        switch (blend) {\n          case MixBlend.setup:\n            by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n            bone.scaleY = by + (y - by) * alpha;\n            break;\n          case MixBlend.first:\n          case MixBlend.replace:\n            by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n            bone.scaleY = by + (y - by) * alpha;\n            break;\n          case MixBlend.add:\n            bone.scaleY += (y - bone.data.scaleY) * alpha;\n        }\n      }\n    }\n  }\n}\nclass ShearTimeline extends CurveTimeline2 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.shearX}|${boneIndex}`, `${Property.shearY}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\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    const i = Timeline.search(\n      frames,\n      time,\n      3\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 3\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        x = frames[\n          i + 1\n          /* VALUE1*/\n        ];\n        y = frames[\n          i + 2\n          /* VALUE2*/\n        ];\n        const t = (time - before) / (frames[\n          i + 3\n          /* ENTRIES*/\n        ] - before);\n        x += (frames[\n          i + 3 + 1\n          /* VALUE1*/\n        ] - x) * t;\n        y += (frames[\n          i + 3 + 2\n          /* VALUE2*/\n        ] - y) * t;\n        break;\n      case 1:\n        x = frames[\n          i + 1\n          /* VALUE1*/\n        ];\n        y = frames[\n          i + 2\n          /* VALUE2*/\n        ];\n        break;\n      default:\n        x = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        y = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\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}\nclass ShearXTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.shearX}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.shearX = bone.data.shearX;\n          return;\n        case MixBlend.first:\n          bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n      }\n      return;\n    }\n    const x = this.getCurveValue(time);\n    switch (blend) {\n      case MixBlend.setup:\n        bone.shearX = bone.data.shearX + x * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n        break;\n      case MixBlend.add:\n        bone.shearX += x * alpha;\n    }\n  }\n}\nclass ShearYTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, boneIndex) {\n    super(frameCount, bezierCount, `${Property.shearY}|${boneIndex}`);\n    this.boneIndex = 0;\n    this.boneIndex = boneIndex;\n  }\n  apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n    const bone = skeleton.bones[this.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          bone.shearY = bone.data.shearY;\n          return;\n        case MixBlend.first:\n          bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n      }\n      return;\n    }\n    const y = this.getCurveValue(time);\n    switch (blend) {\n      case MixBlend.setup:\n        bone.shearY = bone.data.shearY + y * alpha;\n        break;\n      case MixBlend.first:\n      case MixBlend.replace:\n        bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n        break;\n      case MixBlend.add:\n        bone.shearY += y * alpha;\n    }\n  }\n}\nclass RGBATimeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, slotIndex) {\n    super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`, `${Property.alpha}|${slotIndex}`]);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\n  }\n  getFrameEntries() {\n    return 5;\n  }\n  /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n  setFrame(frame, time, r, g, b, a) {\n    frame *= 5;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* R*/\n    ] = r;\n    this.frames[\n      frame + 2\n      /* G*/\n    ] = g;\n    this.frames[\n      frame + 3\n      /* B*/\n    ] = b;\n    this.frames[\n      frame + 4\n      /* A*/\n    ] = 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    const color = slot.color;\n    if (time < frames[0]) {\n      const setup = slot.data.color;\n      switch (blend) {\n        case MixBlend.setup:\n          color.setFromColor(setup);\n          return;\n        case MixBlend.first:\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    const i = Timeline.search(\n      frames,\n      time,\n      5\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 5\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        a = frames[\n          i + 4\n          /* A*/\n        ];\n        const t = (time - before) / (frames[\n          i + 5\n          /* ENTRIES*/\n        ] - before);\n        r += (frames[\n          i + 5 + 1\n          /* R*/\n        ] - r) * t;\n        g += (frames[\n          i + 5 + 2\n          /* G*/\n        ] - g) * t;\n        b += (frames[\n          i + 5 + 3\n          /* B*/\n        ] - b) * t;\n        a += (frames[\n          i + 5 + 4\n          /* A*/\n        ] - a) * t;\n        break;\n      case 1:\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        a = frames[\n          i + 4\n          /* A*/\n        ];\n        break;\n      default:\n        r = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        g = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n        b = this.getBezierValue(\n          time,\n          i,\n          3,\n          curveType + 18 * 2 - 2\n          /* BEZIER*/\n        );\n        a = this.getBezierValue(\n          time,\n          i,\n          4,\n          curveType + 18 * 3 - 2\n          /* BEZIER*/\n        );\n    }\n    if (alpha == 1)\n      color.set(r, g, b, a);\n    else {\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}\nclass RGBTimeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, slotIndex) {\n    super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`]);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\n  }\n  getFrameEntries() {\n    return 4;\n  }\n  /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n  setFrame(frame, time, r, g, b) {\n    frame <<= 2;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* R*/\n    ] = r;\n    this.frames[\n      frame + 2\n      /* G*/\n    ] = g;\n    this.frames[\n      frame + 3\n      /* B*/\n    ] = b;\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    const color = slot.color;\n    if (time < frames[0]) {\n      const setup = slot.data.color;\n      switch (blend) {\n        case MixBlend.setup:\n          color.r = setup.r;\n          color.g = setup.g;\n          color.b = setup.b;\n          return;\n        case MixBlend.first:\n          color.r += (setup.r - color.r) * alpha;\n          color.g += (setup.g - color.g) * alpha;\n          color.b += (setup.b - color.b) * alpha;\n      }\n      return;\n    }\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    const i = Timeline.search(\n      frames,\n      time,\n      4\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[i >> 2];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        const t = (time - before) / (frames[\n          i + 4\n          /* ENTRIES*/\n        ] - before);\n        r += (frames[\n          i + 4 + 1\n          /* R*/\n        ] - r) * t;\n        g += (frames[\n          i + 4 + 2\n          /* G*/\n        ] - g) * t;\n        b += (frames[\n          i + 4 + 3\n          /* B*/\n        ] - b) * t;\n        break;\n      case 1:\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        break;\n      default:\n        r = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        g = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n        b = this.getBezierValue(\n          time,\n          i,\n          3,\n          curveType + 18 * 2 - 2\n          /* BEZIER*/\n        );\n    }\n    if (alpha == 1) {\n      color.r = r;\n      color.g = g;\n      color.b = b;\n    } else {\n      if (blend == MixBlend.setup) {\n        const setup = slot.data.color;\n        color.r = setup.r;\n        color.g = setup.g;\n        color.b = setup.b;\n      }\n      color.r += (r - color.r) * alpha;\n      color.g += (g - color.g) * alpha;\n      color.b += (b - color.b) * alpha;\n    }\n  }\n}\nclass AlphaTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, slotIndex) {\n    super(frameCount, bezierCount, `${Property.alpha}|${slotIndex}`);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\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 color = slot.color;\n    if (time < this.frames[0]) {\n      const setup = slot.data.color;\n      switch (blend) {\n        case MixBlend.setup:\n          color.a = setup.a;\n          return;\n        case MixBlend.first:\n          color.a += (setup.a - color.a) * alpha;\n      }\n      return;\n    }\n    const a = this.getCurveValue(time);\n    if (alpha == 1)\n      color.a = a;\n    else {\n      if (blend == MixBlend.setup)\n        color.a = slot.data.color.a;\n      color.a += (a - color.a) * alpha;\n    }\n  }\n}\nclass RGBA2Timeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, slotIndex) {\n    super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`, `${Property.alpha}|${slotIndex}`, `${Property.rgb2}|${slotIndex}`]);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\n  }\n  getFrameEntries() {\n    return 8;\n  }\n  /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n  setFrame(frame, time, r, g, b, a, r2, g2, b2) {\n    frame <<= 3;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* R*/\n    ] = r;\n    this.frames[\n      frame + 2\n      /* G*/\n    ] = g;\n    this.frames[\n      frame + 3\n      /* B*/\n    ] = b;\n    this.frames[\n      frame + 4\n      /* A*/\n    ] = a;\n    this.frames[\n      frame + 5\n      /* R2*/\n    ] = r2;\n    this.frames[\n      frame + 6\n      /* G2*/\n    ] = g2;\n    this.frames[\n      frame + 7\n      /* B2*/\n    ] = 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    const light = slot.color;\n    const dark = slot.darkColor;\n    if (time < frames[0]) {\n      const setupLight = slot.data.color;\n      const setupDark = slot.data.darkColor;\n      switch (blend) {\n        case MixBlend.setup:\n          light.setFromColor(setupLight);\n          dark.r = setupDark.r;\n          dark.g = setupDark.g;\n          dark.b = setupDark.b;\n          return;\n        case MixBlend.first:\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.r += (setupDark.r - dark.r) * alpha;\n          dark.g += (setupDark.g - dark.g) * alpha;\n          dark.b += (setupDark.b - dark.b) * alpha;\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    const i = Timeline.search(\n      frames,\n      time,\n      8\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[i >> 3];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        a = frames[\n          i + 4\n          /* A*/\n        ];\n        r2 = frames[\n          i + 5\n          /* R2*/\n        ];\n        g2 = frames[\n          i + 6\n          /* G2*/\n        ];\n        b2 = frames[\n          i + 7\n          /* B2*/\n        ];\n        const t = (time - before) / (frames[\n          i + 8\n          /* ENTRIES*/\n        ] - before);\n        r += (frames[\n          i + 8 + 1\n          /* R*/\n        ] - r) * t;\n        g += (frames[\n          i + 8 + 2\n          /* G*/\n        ] - g) * t;\n        b += (frames[\n          i + 8 + 3\n          /* B*/\n        ] - b) * t;\n        a += (frames[\n          i + 8 + 4\n          /* A*/\n        ] - a) * t;\n        r2 += (frames[\n          i + 8 + 5\n          /* R2*/\n        ] - r2) * t;\n        g2 += (frames[\n          i + 8 + 6\n          /* G2*/\n        ] - g2) * t;\n        b2 += (frames[\n          i + 8 + 7\n          /* B2*/\n        ] - b2) * t;\n        break;\n      case 1:\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        a = frames[\n          i + 4\n          /* A*/\n        ];\n        r2 = frames[\n          i + 5\n          /* R2*/\n        ];\n        g2 = frames[\n          i + 6\n          /* G2*/\n        ];\n        b2 = frames[\n          i + 7\n          /* B2*/\n        ];\n        break;\n      default:\n        r = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        g = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n        b = this.getBezierValue(\n          time,\n          i,\n          3,\n          curveType + 18 * 2 - 2\n          /* BEZIER*/\n        );\n        a = this.getBezierValue(\n          time,\n          i,\n          4,\n          curveType + 18 * 3 - 2\n          /* BEZIER*/\n        );\n        r2 = this.getBezierValue(\n          time,\n          i,\n          5,\n          curveType + 18 * 4 - 2\n          /* BEZIER*/\n        );\n        g2 = this.getBezierValue(\n          time,\n          i,\n          6,\n          curveType + 18 * 5 - 2\n          /* BEZIER*/\n        );\n        b2 = this.getBezierValue(\n          time,\n          i,\n          7,\n          curveType + 18 * 6 - 2\n          /* BEZIER*/\n        );\n    }\n    if (alpha == 1) {\n      light.set(r, g, b, a);\n      dark.r = r2;\n      dark.g = g2;\n      dark.b = b2;\n    } else {\n      if (blend == MixBlend.setup) {\n        light.setFromColor(slot.data.color);\n        const setupDark = slot.data.darkColor;\n        dark.r = setupDark.r;\n        dark.g = setupDark.g;\n        dark.b = setupDark.b;\n      }\n      light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n      dark.r += (r2 - dark.r) * alpha;\n      dark.g += (g2 - dark.g) * alpha;\n      dark.b += (b2 - dark.b) * alpha;\n    }\n  }\n}\nclass RGB2Timeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, slotIndex) {\n    super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`, `${Property.rgb2}|${slotIndex}`]);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\n  }\n  getFrameEntries() {\n    return 7;\n  }\n  /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n  setFrame(frame, time, r, g, b, r2, g2, b2) {\n    frame *= 7;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* R*/\n    ] = r;\n    this.frames[\n      frame + 2\n      /* G*/\n    ] = g;\n    this.frames[\n      frame + 3\n      /* B*/\n    ] = b;\n    this.frames[\n      frame + 4\n      /* R2*/\n    ] = r2;\n    this.frames[\n      frame + 5\n      /* G2*/\n    ] = g2;\n    this.frames[\n      frame + 6\n      /* B2*/\n    ] = 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    const light = slot.color;\n    const dark = slot.darkColor;\n    if (time < frames[0]) {\n      const setupLight = slot.data.color;\n      const setupDark = slot.data.darkColor;\n      switch (blend) {\n        case MixBlend.setup:\n          light.r = setupLight.r;\n          light.g = setupLight.g;\n          light.b = setupLight.b;\n          dark.r = setupDark.r;\n          dark.g = setupDark.g;\n          dark.b = setupDark.b;\n          return;\n        case MixBlend.first:\n          light.r += (setupLight.r - light.r) * alpha;\n          light.g += (setupLight.g - light.g) * alpha;\n          light.b += (setupLight.b - light.b) * alpha;\n          dark.r += (setupDark.r - dark.r) * alpha;\n          dark.g += (setupDark.g - dark.g) * alpha;\n          dark.b += (setupDark.b - dark.b) * alpha;\n      }\n      return;\n    }\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    let r2 = 0;\n    let g2 = 0;\n    let b2 = 0;\n    const i = Timeline.search(\n      frames,\n      time,\n      7\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 7\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        r2 = frames[\n          i + 4\n          /* R2*/\n        ];\n        g2 = frames[\n          i + 5\n          /* G2*/\n        ];\n        b2 = frames[\n          i + 6\n          /* B2*/\n        ];\n        const t = (time - before) / (frames[\n          i + 7\n          /* ENTRIES*/\n        ] - before);\n        r += (frames[\n          i + 7 + 1\n          /* R*/\n        ] - r) * t;\n        g += (frames[\n          i + 7 + 2\n          /* G*/\n        ] - g) * t;\n        b += (frames[\n          i + 7 + 3\n          /* B*/\n        ] - b) * t;\n        r2 += (frames[\n          i + 7 + 4\n          /* R2*/\n        ] - r2) * t;\n        g2 += (frames[\n          i + 7 + 5\n          /* G2*/\n        ] - g2) * t;\n        b2 += (frames[\n          i + 7 + 6\n          /* B2*/\n        ] - b2) * t;\n        break;\n      case 1:\n        r = frames[\n          i + 1\n          /* R*/\n        ];\n        g = frames[\n          i + 2\n          /* G*/\n        ];\n        b = frames[\n          i + 3\n          /* B*/\n        ];\n        r2 = frames[\n          i + 4\n          /* R2*/\n        ];\n        g2 = frames[\n          i + 5\n          /* G2*/\n        ];\n        b2 = frames[\n          i + 6\n          /* B2*/\n        ];\n        break;\n      default:\n        r = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        g = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n        b = this.getBezierValue(\n          time,\n          i,\n          3,\n          curveType + 18 * 2 - 2\n          /* BEZIER*/\n        );\n        r2 = this.getBezierValue(\n          time,\n          i,\n          4,\n          curveType + 18 * 3 - 2\n          /* BEZIER*/\n        );\n        g2 = this.getBezierValue(\n          time,\n          i,\n          5,\n          curveType + 18 * 4 - 2\n          /* BEZIER*/\n        );\n        b2 = this.getBezierValue(\n          time,\n          i,\n          6,\n          curveType + 18 * 5 - 2\n          /* BEZIER*/\n        );\n    }\n    if (alpha == 1) {\n      light.r = r;\n      light.g = g;\n      light.b = b;\n      dark.r = r2;\n      dark.g = g2;\n      dark.b = b2;\n    } else {\n      if (blend == MixBlend.setup) {\n        const setupLight = slot.data.color;\n        const setupDark = slot.data.darkColor;\n        light.r = setupLight.r;\n        light.g = setupLight.g;\n        light.b = setupLight.b;\n        dark.r = setupDark.r;\n        dark.g = setupDark.g;\n        dark.b = setupDark.b;\n      }\n      light.r += (r - light.r) * alpha;\n      light.g += (g - light.g) * alpha;\n      light.b += (b - light.b) * alpha;\n      dark.r += (r2 - dark.r) * alpha;\n      dark.g += (g2 - dark.g) * alpha;\n      dark.b += (b2 - dark.b) * alpha;\n    }\n  }\n}\nclass AttachmentTimeline extends Timeline {\n  constructor(frameCount, slotIndex) {\n    super(frameCount, [`${Property.attachment}|${slotIndex}`]);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\n    this.attachmentNames = new Array(frameCount);\n  }\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(frame, time, attachmentName) {\n    this.frames[frame] = time;\n    this.attachmentNames[frame] = 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    if (time < this.frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first)\n        this.setAttachment(skeleton, slot, slot.data.attachmentName);\n      return;\n    }\n    this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);\n  }\n  setAttachment(skeleton, slot, attachmentName) {\n    slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n  }\n}\nclass DeformTimeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, slotIndex, attachment) {\n    super(frameCount, bezierCount, [`${Property.deform}|${slotIndex}|${attachment.id}`]);\n    this.slotIndex = 0;\n    this.slotIndex = slotIndex;\n    this.attachment = attachment;\n    this.vertices = new Array(frameCount);\n  }\n  getFrameCount() {\n    return this.frames.length;\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(frame, time, vertices) {\n    this.frames[frame] = time;\n    this.vertices[frame] = vertices;\n  }\n  /** @param value1 Ignored (0 is used for a deform timeline).\n   * @param value2 Ignored (1 is used for a deform timeline). */\n  setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {\n    const curves = this.curves;\n    let i = this.getFrameCount() + bezier * 18;\n    if (value == 0)\n      curves[frame] = 2 + i;\n    const tmpx = (time1 - cx1 * 2 + cx2) * 0.03;\n    const tmpy = cy2 * 0.03 - cy1 * 0.06;\n    const dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3;\n    const dddy = (cy1 - cy2 + 0.33333333) * 0.018;\n    let ddx = tmpx * 2 + dddx;\n    let ddy = tmpy * 2 + dddy;\n    let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667;\n    let dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;\n    let x = time1 + dx;\n    let y = dy;\n    for (let n = i + 18; i < n; i += 2) {\n      curves[i] = x;\n      curves[i + 1] = y;\n      dx += ddx;\n      dy += ddy;\n      ddx += dddx;\n      ddy += dddy;\n      x += dx;\n      y += dy;\n    }\n  }\n  getCurvePercent(time, frame) {\n    const curves = this.curves;\n    let i = curves[frame];\n    switch (i) {\n      case 0:\n        const x2 = this.frames[frame];\n        return (time - x2) / (this.frames[frame + this.getFrameEntries()] - x2);\n      case 1:\n        return 0;\n    }\n    i -= 2;\n    if (curves[i] > time) {\n      const x2 = this.frames[frame];\n      return curves[i + 1] * (time - x2) / (curves[i] - x2);\n    }\n    const n = i + 18;\n    for (i += 2; i < n; i += 2) {\n      if (curves[i] >= time) {\n        const x2 = curves[i - 2];\n        const y2 = curves[i - 1];\n        return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2);\n      }\n    }\n    const x = curves[n - 2];\n    const y = curves[n - 1];\n    return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\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)\n      return;\n    if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.timelineAttachment != this.attachment)\n      return;\n    const deform = slot.deform;\n    if (deform.length == 0)\n      blend = MixBlend.setup;\n    const vertices = this.vertices;\n    const vertexCount = vertices[0].length;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          deform.length = 0;\n          return;\n        case MixBlend.first:\n          if (alpha == 1) {\n            deform.length = 0;\n            return;\n          }\n          deform.length = vertexCount;\n          const vertexAttachment = slotAttachment;\n          if (!vertexAttachment.bones) {\n            const setupVertices = vertexAttachment.vertices;\n            for (let i = 0; i < vertexCount; i++)\n              deform[i] += (setupVertices[i] - deform[i]) * alpha;\n          } else {\n            alpha = 1 - alpha;\n            for (let i = 0; i < vertexCount; i++)\n              deform[i] *= alpha;\n          }\n      }\n      return;\n    }\n    deform.length = vertexCount;\n    if (time >= frames[frames.length - 1]) {\n      const lastVertices = vertices[frames.length - 1];\n      if (alpha == 1) {\n        if (blend == MixBlend.add) {\n          const vertexAttachment = slotAttachment;\n          if (!vertexAttachment.bones) {\n            const setupVertices = vertexAttachment.vertices;\n            for (let i = 0; i < vertexCount; i++)\n              deform[i] += lastVertices[i] - setupVertices[i];\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      } else {\n        switch (blend) {\n          case MixBlend.setup: {\n            const vertexAttachment2 = slotAttachment;\n            if (!vertexAttachment2.bones) {\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) {\n              const setupVertices = vertexAttachment.vertices;\n              for (let i = 0; i < vertexCount; i++)\n                deform[i] += (lastVertices[i] - setupVertices[i]) * alpha;\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 = Timeline.search1(frames, time);\n    const percent = this.getCurvePercent(time, frame);\n    const prevVertices = vertices[frame];\n    const nextVertices = vertices[frame + 1];\n    if (alpha == 1) {\n      if (blend == MixBlend.add) {\n        const vertexAttachment = slotAttachment;\n        if (!vertexAttachment.bones) {\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) {\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) {\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}\nconst _EventTimeline = class extends Timeline {\n  constructor(frameCount) {\n    super(frameCount, _EventTimeline.propertyIds);\n    this.events = new Array(frameCount);\n  }\n  getFrameCount() {\n    return this.frames.length;\n  }\n  /** Sets the time in seconds and the event for the specified key frame. */\n  setFrame(frame, event) {\n    this.frames[frame] = event.time;\n    this.events[frame] = event;\n  }\n  /** Fires events for frames > `lastTime` and <= `time`. */\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    if (!firedEvents)\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 i = 0;\n    if (lastTime < frames[0])\n      i = 0;\n    else {\n      i = Timeline.search1(frames, lastTime) + 1;\n      const frameTime = frames[i];\n      while (i > 0) {\n        if (frames[i - 1] != frameTime)\n          break;\n        i--;\n      }\n    }\n    for (; i < frameCount && time >= frames[i]; i++)\n      firedEvents.push(this.events[i]);\n  }\n};\nlet EventTimeline = _EventTimeline;\nEventTimeline.propertyIds = [`${Property.event}`];\nconst _DrawOrderTimeline = class extends Timeline {\n  constructor(frameCount) {\n    super(frameCount, _DrawOrderTimeline.propertyIds);\n    this.drawOrders = new Array(frameCount);\n  }\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(frame, time, drawOrder) {\n    this.frames[frame] = time;\n    this.drawOrders[frame] = drawOrder;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    if (direction == MixDirection.mixOut) {\n      if (blend == MixBlend.setup)\n        Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n      return;\n    }\n    if (time < this.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    const idx = Timeline.search1(this.frames, time);\n    const drawOrderToSetupIndex = this.drawOrders[idx];\n    if (!drawOrderToSetupIndex)\n      Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n    else {\n      const drawOrder = skeleton.drawOrder;\n      const slots = skeleton.slots;\n      for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n        drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n    }\n  }\n};\nlet DrawOrderTimeline = _DrawOrderTimeline;\nDrawOrderTimeline.propertyIds = [`${Property.drawOrder}`];\nclass IkConstraintTimeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, ikConstraintIndex) {\n    super(frameCount, bezierCount, [`${Property.ikConstraint}|${ikConstraintIndex}`]);\n    /** The index of the IK constraint slot in {@link Skeleton#ikConstraints} that will be changed. */\n    this.ikConstraintIndex = 0;\n    this.ikConstraintIndex = ikConstraintIndex;\n  }\n  getFrameEntries() {\n    return 6;\n  }\n  /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */\n  setFrame(frame, time, mix, softness, bendDirection, compress, stretch) {\n    frame *= 6;\n    this.frames[frame] = time;\n    this.frames[\n      frame + 1\n      /* MIX*/\n    ] = mix;\n    this.frames[\n      frame + 2\n      /* SOFTNESS*/\n    ] = softness;\n    this.frames[\n      frame + 3\n      /* BEND_DIRECTION*/\n    ] = bendDirection;\n    this.frames[\n      frame + 4\n      /* COMPRESS*/\n    ] = compress ? 1 : 0;\n    this.frames[\n      frame + 5\n      /* STRETCH*/\n    ] = stretch ? 1 : 0;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const constraint = skeleton.ikConstraints[this.ikConstraintIndex];\n    if (!constraint.active)\n      return;\n    const frames = this.frames;\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    let mix = 0;\n    let softness = 0;\n    const i = Timeline.search(\n      frames,\n      time,\n      6\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 6\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        mix = frames[\n          i + 1\n          /* MIX*/\n        ];\n        softness = frames[\n          i + 2\n          /* SOFTNESS*/\n        ];\n        const t = (time - before) / (frames[\n          i + 6\n          /* ENTRIES*/\n        ] - before);\n        mix += (frames[\n          i + 6 + 1\n          /* MIX*/\n        ] - mix) * t;\n        softness += (frames[\n          i + 6 + 2\n          /* SOFTNESS*/\n        ] - softness) * t;\n        break;\n      case 1:\n        mix = frames[\n          i + 1\n          /* MIX*/\n        ];\n        softness = frames[\n          i + 2\n          /* SOFTNESS*/\n        ];\n        break;\n      default:\n        mix = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        softness = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n    }\n    if (blend == MixBlend.setup) {\n      constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;\n      constraint.softness = constraint.data.softness + (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[\n          i + 3\n          /* BEND_DIRECTION*/\n        ];\n        constraint.compress = frames[\n          i + 4\n          /* COMPRESS*/\n        ] != 0;\n        constraint.stretch = frames[\n          i + 5\n          /* STRETCH*/\n        ] != 0;\n      }\n    } else {\n      constraint.mix += (mix - constraint.mix) * alpha;\n      constraint.softness += (softness - constraint.softness) * alpha;\n      if (direction == MixDirection.mixIn) {\n        constraint.bendDirection = frames[\n          i + 3\n          /* BEND_DIRECTION*/\n        ];\n        constraint.compress = frames[\n          i + 4\n          /* COMPRESS*/\n        ] != 0;\n        constraint.stretch = frames[\n          i + 5\n          /* STRETCH*/\n        ] != 0;\n      }\n    }\n  }\n}\nclass TransformConstraintTimeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, transformConstraintIndex) {\n    super(frameCount, bezierCount, [`${Property.transformConstraint}|${transformConstraintIndex}`]);\n    /** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */\n    this.transformConstraintIndex = 0;\n    this.transformConstraintIndex = transformConstraintIndex;\n  }\n  getFrameEntries() {\n    return 7;\n  }\n  /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */\n  setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) {\n    const frames = this.frames;\n    frame *= 7;\n    frames[frame] = time;\n    frames[\n      frame + 1\n      /* ROTATE*/\n    ] = mixRotate;\n    frames[\n      frame + 2\n      /* X*/\n    ] = mixX;\n    frames[\n      frame + 3\n      /* Y*/\n    ] = mixY;\n    frames[\n      frame + 4\n      /* SCALEX*/\n    ] = mixScaleX;\n    frames[\n      frame + 5\n      /* SCALEY*/\n    ] = mixScaleY;\n    frames[\n      frame + 6\n      /* SHEARY*/\n    ] = mixShearY;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const constraint = skeleton.transformConstraints[this.transformConstraintIndex];\n    if (!constraint.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      const data = constraint.data;\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.mixRotate = data.mixRotate;\n          constraint.mixX = data.mixX;\n          constraint.mixY = data.mixY;\n          constraint.mixScaleX = data.mixScaleX;\n          constraint.mixScaleY = data.mixScaleY;\n          constraint.mixShearY = data.mixShearY;\n          return;\n        case MixBlend.first:\n          constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;\n          constraint.mixX += (data.mixX - constraint.mixX) * alpha;\n          constraint.mixY += (data.mixY - constraint.mixY) * alpha;\n          constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;\n          constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;\n          constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;\n      }\n      return;\n    }\n    let rotate;\n    let x;\n    let y;\n    let scaleX;\n    let scaleY;\n    let shearY;\n    const i = Timeline.search(\n      frames,\n      time,\n      7\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[\n      i / 7\n      /* ENTRIES*/\n    ];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        rotate = frames[\n          i + 1\n          /* ROTATE*/\n        ];\n        x = frames[\n          i + 2\n          /* X*/\n        ];\n        y = frames[\n          i + 3\n          /* Y*/\n        ];\n        scaleX = frames[\n          i + 4\n          /* SCALEX*/\n        ];\n        scaleY = frames[\n          i + 5\n          /* SCALEY*/\n        ];\n        shearY = frames[\n          i + 6\n          /* SHEARY*/\n        ];\n        const t = (time - before) / (frames[\n          i + 7\n          /* ENTRIES*/\n        ] - before);\n        rotate += (frames[\n          i + 7 + 1\n          /* ROTATE*/\n        ] - rotate) * t;\n        x += (frames[\n          i + 7 + 2\n          /* X*/\n        ] - x) * t;\n        y += (frames[\n          i + 7 + 3\n          /* Y*/\n        ] - y) * t;\n        scaleX += (frames[\n          i + 7 + 4\n          /* SCALEX*/\n        ] - scaleX) * t;\n        scaleY += (frames[\n          i + 7 + 5\n          /* SCALEY*/\n        ] - scaleY) * t;\n        shearY += (frames[\n          i + 7 + 6\n          /* SHEARY*/\n        ] - shearY) * t;\n        break;\n      case 1:\n        rotate = frames[\n          i + 1\n          /* ROTATE*/\n        ];\n        x = frames[\n          i + 2\n          /* X*/\n        ];\n        y = frames[\n          i + 3\n          /* Y*/\n        ];\n        scaleX = frames[\n          i + 4\n          /* SCALEX*/\n        ];\n        scaleY = frames[\n          i + 5\n          /* SCALEY*/\n        ];\n        shearY = frames[\n          i + 6\n          /* SHEARY*/\n        ];\n        break;\n      default:\n        rotate = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        x = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n        y = this.getBezierValue(\n          time,\n          i,\n          3,\n          curveType + 18 * 2 - 2\n          /* BEZIER*/\n        );\n        scaleX = this.getBezierValue(\n          time,\n          i,\n          4,\n          curveType + 18 * 3 - 2\n          /* BEZIER*/\n        );\n        scaleY = this.getBezierValue(\n          time,\n          i,\n          5,\n          curveType + 18 * 4 - 2\n          /* BEZIER*/\n        );\n        shearY = this.getBezierValue(\n          time,\n          i,\n          6,\n          curveType + 18 * 5 - 2\n          /* BEZIER*/\n        );\n    }\n    if (blend == MixBlend.setup) {\n      const data = constraint.data;\n      constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n      constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n      constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n      constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;\n      constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;\n      constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;\n    } else {\n      constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n      constraint.mixX += (x - constraint.mixX) * alpha;\n      constraint.mixY += (y - constraint.mixY) * alpha;\n      constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;\n      constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;\n      constraint.mixShearY += (shearY - constraint.mixShearY) * alpha;\n    }\n  }\n}\nclass PathConstraintPositionTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, pathConstraintIndex) {\n    super(frameCount, bezierCount, `${Property.pathConstraintPosition}|${pathConstraintIndex}`);\n    /** The index of the path constraint slot in {@link Skeleton#pathConstraints} that will be changed. */\n    this.pathConstraintIndex = 0;\n    this.pathConstraintIndex = pathConstraintIndex;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n    if (!constraint.active)\n      return;\n    const frames = this.frames;\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    const position = this.getCurveValue(time);\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}\nclass PathConstraintSpacingTimeline extends CurveTimeline1 {\n  constructor(frameCount, bezierCount, pathConstraintIndex) {\n    super(frameCount, bezierCount, `${Property.pathConstraintSpacing}|${pathConstraintIndex}`);\n    /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n    this.pathConstraintIndex = 0;\n    this.pathConstraintIndex = pathConstraintIndex;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n    if (!constraint.active)\n      return;\n    const frames = this.frames;\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    const spacing = this.getCurveValue(time);\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}\nclass PathConstraintMixTimeline extends CurveTimeline {\n  constructor(frameCount, bezierCount, pathConstraintIndex) {\n    super(frameCount, bezierCount, [`${Property.pathConstraintMix}|${pathConstraintIndex}`]);\n    /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n    this.pathConstraintIndex = 0;\n    this.pathConstraintIndex = pathConstraintIndex;\n  }\n  getFrameEntries() {\n    return 4;\n  }\n  setFrame(frame, time, mixRotate, mixX, mixY) {\n    const frames = this.frames;\n    frame <<= 2;\n    frames[frame] = time;\n    frames[\n      frame + 1\n      /* ROTATE*/\n    ] = mixRotate;\n    frames[\n      frame + 2\n      /* X*/\n    ] = mixX;\n    frames[\n      frame + 3\n      /* Y*/\n    ] = mixY;\n  }\n  apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n    const constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n    if (!constraint.active)\n      return;\n    const frames = this.frames;\n    if (time < frames[0]) {\n      switch (blend) {\n        case MixBlend.setup:\n          constraint.mixRotate = constraint.data.mixRotate;\n          constraint.mixX = constraint.data.mixX;\n          constraint.mixY = constraint.data.mixY;\n          return;\n        case MixBlend.first:\n          constraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha;\n          constraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha;\n          constraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha;\n      }\n      return;\n    }\n    let rotate;\n    let x;\n    let y;\n    const i = Timeline.search(\n      frames,\n      time,\n      4\n      /* ENTRIES*/\n    );\n    const curveType = this.curves[i >> 2];\n    switch (curveType) {\n      case 0:\n        const before = frames[i];\n        rotate = frames[\n          i + 1\n          /* ROTATE*/\n        ];\n        x = frames[\n          i + 2\n          /* X*/\n        ];\n        y = frames[\n          i + 3\n          /* Y*/\n        ];\n        const t = (time - before) / (frames[\n          i + 4\n          /* ENTRIES*/\n        ] - before);\n        rotate += (frames[\n          i + 4 + 1\n          /* ROTATE*/\n        ] - rotate) * t;\n        x += (frames[\n          i + 4 + 2\n          /* X*/\n        ] - x) * t;\n        y += (frames[\n          i + 4 + 3\n          /* Y*/\n        ] - y) * t;\n        break;\n      case 1:\n        rotate = frames[\n          i + 1\n          /* ROTATE*/\n        ];\n        x = frames[\n          i + 2\n          /* X*/\n        ];\n        y = frames[\n          i + 3\n          /* Y*/\n        ];\n        break;\n      default:\n        rotate = this.getBezierValue(\n          time,\n          i,\n          1,\n          curveType - 2\n          /* BEZIER*/\n        );\n        x = this.getBezierValue(\n          time,\n          i,\n          2,\n          curveType + 18 - 2\n          /* BEZIER*/\n        );\n        y = this.getBezierValue(\n          time,\n          i,\n          3,\n          curveType + 18 * 2 - 2\n          /* BEZIER*/\n        );\n    }\n    if (blend == MixBlend.setup) {\n      const data = constraint.data;\n      constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n      constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n      constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n    } else {\n      constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n      constraint.mixX += (x - constraint.mixX) * alpha;\n      constraint.mixY += (y - constraint.mixY) * alpha;\n    }\n  }\n}\nconst _SequenceTimeline = class extends Timeline {\n  constructor(frameCount, slotIndex, attachment) {\n    super(frameCount, [`${Property.sequence}|${slotIndex}|${attachment.sequence.id}`]);\n    this.slotIndex = slotIndex;\n    this.attachment = attachment;\n  }\n  getFrameEntries() {\n    return _SequenceTimeline.ENTRIES;\n  }\n  getSlotIndex() {\n    return this.slotIndex;\n  }\n  getAttachment() {\n    return this.attachment;\n  }\n  /** Sets the time, mode, index, and frame time for the specified frame.\n   * @param frame Between 0 and <code>frameCount</code>, inclusive.\n   * @param time Seconds between frames. */\n  setFrame(frame, time, mode, index, delay) {\n    const frames = this.frames;\n    frame *= _SequenceTimeline.ENTRIES;\n    frames[frame] = time;\n    frames[frame + _SequenceTimeline.MODE] = mode | index << 4;\n    frames[frame + _SequenceTimeline.DELAY] = delay;\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 slotAttachment = slot.attachment;\n    const attachment = this.attachment;\n    if (slotAttachment != attachment) {\n      if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.timelineAttachment != attachment)\n        return;\n    }\n    const frames = this.frames;\n    if (time < frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first)\n        slot.sequenceIndex = -1;\n      return;\n    }\n    const i = Timeline.search(frames, time, _SequenceTimeline.ENTRIES);\n    const before = frames[i];\n    const modeAndIndex = frames[i + _SequenceTimeline.MODE];\n    const delay = frames[i + _SequenceTimeline.DELAY];\n    if (!this.attachment.sequence)\n      return;\n    let index = modeAndIndex >> 4;\n    const count = this.attachment.sequence.regions.length;\n    const mode = SequenceModeValues[modeAndIndex & 15];\n    if (mode != SequenceMode.hold) {\n      index += (time - before) / delay + 1e-5 | 0;\n      switch (mode) {\n        case SequenceMode.once:\n          index = Math.min(count - 1, index);\n          break;\n        case SequenceMode.loop:\n          index %= count;\n          break;\n        case SequenceMode.pingpong: {\n          const n = (count << 1) - 2;\n          index = n == 0 ? 0 : index % n;\n          if (index >= count)\n            index = n - index;\n          break;\n        }\n        case SequenceMode.onceReverse:\n          index = Math.max(count - 1 - index, 0);\n          break;\n        case SequenceMode.loopReverse:\n          index = count - 1 - index % count;\n          break;\n        case SequenceMode.pingpongReverse: {\n          const n = (count << 1) - 2;\n          index = n == 0 ? 0 : (index + count - 1) % n;\n          if (index >= count)\n            index = n - index;\n        }\n      }\n    }\n    slot.sequenceIndex = index;\n  }\n};\nlet SequenceTimeline = _SequenceTimeline;\nSequenceTimeline.ENTRIES = 3;\nSequenceTimeline.MODE = 1;\nSequenceTimeline.DELAY = 2;\n\nexport { AlphaTimeline, Animation, AttachmentTimeline, CurveTimeline, CurveTimeline1, CurveTimeline2, DeformTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, RGB2Timeline, RGBA2Timeline, RGBATimeline, RGBTimeline, RotateTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, SequenceTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, Timeline, TransformConstraintTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline };\n//# sourceMappingURL=Animation.mjs.map\n","import { StringSet, Pool, MixBlend, Utils, MixDirection, MathUtils } from '@pixi-spine/base';\nimport { Animation, AttachmentTimeline, RotateTimeline, DrawOrderTimeline, Timeline, 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 StringSet();\n    this.animationsChanged = false;\n    this.trackEntryPool = new Pool(() => new TrackEntry());\n    this.data = data;\n  }\n  static emptyAnimation() {\n    return _AnimationState._emptyAnimation;\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)\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) {\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) {\n            next.mixTime += delta;\n            next = next.mixingFrom;\n          }\n          continue;\n        }\n      } else if (current.trackLast >= current.trackEnd && !current.mixingFrom) {\n        tracks[i] = null;\n        this.queue.end(current);\n        this.clearNext(current);\n        continue;\n      }\n      if (current.mixingFrom && this.updateMixingFrom(current, delta)) {\n        let from = current.mixingFrom;\n        current.mixingFrom = null;\n        if (from)\n          from.mixingTo = null;\n        while (from) {\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)\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)\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)\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 || 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)\n        mix *= this.applyMixingFrom(current, skeleton, blend);\n      else if (current.trackTime >= current.trackEnd && !current.next)\n        mix = 0;\n      const animationLast = current.animationLast;\n      const animationTime = current.getAnimationTime();\n      let applyTime = animationTime;\n      let applyEvents = events;\n      if (current.reverse) {\n        applyTime = current.animation.duration - applyTime;\n        applyEvents = null;\n      }\n      const timelines = current.animation.timelines;\n      const timelineCount = timelines.length;\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, applyTime, blend, true);\n          else\n            timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, blend, MixDirection.mixIn);\n        }\n      } else {\n        const timelineMode = current.timelineMode;\n        const shortestRotation = current.shortestRotation;\n        const firstFrame = !shortestRotation && current.timelinesRotation.length != timelineCount << 1;\n        if (firstFrame)\n          current.timelinesRotation.length = timelineCount << 1;\n        for (let ii = 0; ii < timelineCount; ii++) {\n          const timeline = timelines[ii];\n          const timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup;\n          if (!shortestRotation && timeline instanceof RotateTimeline) {\n            this.applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame);\n          } else if (timeline instanceof AttachmentTimeline) {\n            this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true);\n          } else {\n            Utils.webkit602BugfixHelper(mix, blend);\n            timeline.apply(skeleton, animationLast, applyTime, applyEvents, 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 + 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 : 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)\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 attachments = mix < from.attachmentThreshold;\n    const drawOrder = mix < from.drawOrderThreshold;\n    const timelines = from.animation.timelines;\n    const timelineCount = timelines.length;\n    const alphaHold = from.alpha * to.interruptAlpha;\n    const alphaMix = alphaHold * (1 - mix);\n    const animationLast = from.animationLast;\n    const animationTime = from.getAnimationTime();\n    let applyTime = animationTime;\n    let events = null;\n    if (from.reverse)\n      applyTime = from.animation.duration - applyTime;\n    else if (mix < from.eventThreshold)\n      events = this.events;\n    if (blend == MixBlend.add) {\n      for (let i = 0; i < timelineCount; i++)\n        timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut);\n    } else {\n      const timelineMode = from.timelineMode;\n      const timelineHoldMix = from.timelineHoldMix;\n      const shortestRotation = from.shortestRotation;\n      const firstFrame = !shortestRotation && from.timelinesRotation.length != timelineCount << 1;\n      if (firstFrame)\n        from.timelinesRotation.length = timelineCount << 1;\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 SUBSEQUENT:\n            if (!drawOrder && timeline instanceof DrawOrderTimeline)\n              continue;\n            timelineBlend = blend;\n            alpha = alphaMix;\n            break;\n          case FIRST:\n            timelineBlend = MixBlend.setup;\n            alpha = alphaMix;\n            break;\n          case HOLD_SUBSEQUENT:\n            timelineBlend = blend;\n            alpha = alphaHold;\n            break;\n          case 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 (!shortestRotation && timeline instanceof RotateTimeline)\n          this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame);\n        else if (timeline instanceof AttachmentTimeline)\n          this.applyAttachmentTimeline(timeline, skeleton, applyTime, 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, applyTime, 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    if (time < timeline.frames[0]) {\n      if (blend == MixBlend.setup || blend == MixBlend.first)\n        this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments);\n    } else\n      this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments);\n    if (slot.attachmentState <= this.unkeyedState)\n      slot.attachmentState = this.unkeyedState + SETUP;\n  }\n  setAttachment(skeleton, slot, attachmentName, attachments) {\n    slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n    if (attachments)\n      slot.attachmentState = this.unkeyedState + 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 bone = skeleton.bones[timeline.boneIndex];\n    if (!bone.active)\n      return;\n    const frames = timeline.frames;\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      r2 = bone.data.rotation + timeline.getCurveValue(time);\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    bone.rotation = r1 + total * alpha;\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, event);\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)\n      return;\n    this.queue.end(current);\n    this.clearNext(current);\n    let entry = current;\n    while (true) {\n      const from = entry.mixingFrom;\n      if (!from)\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    current.previous = null;\n    if (from) {\n      if (interrupt)\n        this.queue.interrupt(from);\n      current.mixingFrom = from;\n      from.mixingTo = current;\n      current.mixTime = 0;\n      if (from.mixingFrom && 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   * See {@link #setAnimationWith()}. */\n  setAnimation(trackIndex, animationName, loop = false) {\n    const animation = this.data.skeletonData.findAnimation(animationName);\n    if (!animation)\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 = false) {\n    if (!animation)\n      throw new Error(\"animation cannot be null.\");\n    let interrupt = true;\n    let current = this.expandToIndex(trackIndex);\n    if (current) {\n      if (current.nextTrackLast == -1) {\n        this.tracks[trackIndex] = current.mixingFrom;\n        this.queue.interrupt(current);\n        this.queue.end(current);\n        this.clearNext(current);\n        current = current.mixingFrom;\n        interrupt = false;\n      } else\n        this.clearNext(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 = false, delay = 0) {\n    const animation = this.data.skeletonData.findAnimation(animationName);\n    if (!animation)\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 = false, delay = 0) {\n    if (!animation)\n      throw new Error(\"animation cannot be null.\");\n    let last = this.expandToIndex(trackIndex);\n    if (last) {\n      while (last.next)\n        last = last.next;\n    }\n    const entry = this.trackEntry(trackIndex, animation, loop, last);\n    if (!last) {\n      this.setCurrent(trackIndex, entry, true);\n      this.queue.drain();\n    } else {\n      last.next = entry;\n      entry.previous = last;\n      if (delay <= 0)\n        delay += last.getTrackComplete() - entry.mixDuration;\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 = 0) {\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 = 0, delay = 0) {\n    const entry = this.addAnimationWith(trackIndex, _AnimationState.emptyAnimation(), false, delay);\n    if (delay <= 0)\n      entry.delay += entry.mixDuration - mixDuration;\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 = 0) {\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)\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.reset();\n    entry.trackIndex = trackIndex;\n    entry.animation = animation;\n    entry.loop = loop;\n    entry.holdPrevious = false;\n    entry.reverse = false;\n    entry.shortestRotation = 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.mixTime = 0;\n    entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation);\n    entry.interruptAlpha = 1;\n    entry.totalAlpha = 0;\n    entry.mixBlend = MixBlend.replace;\n    return entry;\n  }\n  /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */\n  clearNext(entry) {\n    let next = entry.next;\n    while (next) {\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    const tracks = this.tracks;\n    for (let i = 0, n = tracks.length; i < n; i++) {\n      let entry = tracks[i];\n      if (!entry)\n        continue;\n      while (entry.mixingFrom)\n        entry = entry.mixingFrom;\n      do {\n        if (!entry.mixingTo || entry.mixBlend != MixBlend.add)\n          this.computeHold(entry);\n        entry = entry.mixingTo;\n      } while (entry);\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 = entry.timelineMode;\n    timelineMode.length = timelinesCount;\n    const timelineHoldMix = entry.timelineHoldMix;\n    timelineHoldMix.length = 0;\n    const propertyIDs = this.propertyIDs;\n    if (to && to.holdPrevious) {\n      for (let i = 0; i < timelinesCount; i++)\n        timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT;\n      return;\n    }\n    outer:\n      for (let i = 0; i < timelinesCount; i++) {\n        const timeline = timelines[i];\n        const ids = timeline.getPropertyIds();\n        if (!propertyIDs.addAll(ids))\n          timelineMode[i] = SUBSEQUENT;\n        else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) {\n          timelineMode[i] = FIRST;\n        } else {\n          for (let next = to.mixingTo; next; next = next.mixingTo) {\n            if (next.animation.hasTimeline(ids))\n              continue;\n            if (entry.mixDuration > 0) {\n              timelineMode[i] = HOLD_MIX;\n              timelineHoldMix[i] = next;\n              continue outer;\n            }\n            break;\n          }\n          timelineMode[i] = 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)\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);\nAnimationState.deprecatedWarning1 = false;\nAnimationState.deprecatedWarning2 = false;\nAnimationState.deprecatedWarning3 = false;\nconst _TrackEntry = class {\n  constructor() {\n    /** The animation to apply for this track entry. */\n    this.animation = null;\n    this.previous = null;\n    /** The animation queued to start after this animation, or null. `next` makes up a linked list. */\n    this.next = null;\n    /** The track entry for the previous animation when mixing from the previous animation to this animation, or null if no\n     * mixing is currently occuring. When mixing from multiple animations, `mixingFrom` makes up a linked list. */\n    this.mixingFrom = null;\n    /** The track entry for the next animation when mixing from this animation to the next animation, or null if no mixing is\n     * currently occuring. When mixing to multiple animations, `mixingTo` makes up a linked list. */\n    this.mixingTo = null;\n    /** The listener for events generated by this track entry, or null.\n     *\n     * A track entry returned from {@link AnimationState#setAnimation()} is already the current animation\n     * for the track, so the track entry listener {@link AnimationStateListener#start()} will not be called. */\n    this.listener = null;\n    /** The index of the track where this track entry is either current or queued.\n     *\n     * See {@link AnimationState#getCurrent()}. */\n    this.trackIndex = 0;\n    /** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n     * duration. */\n    this.loop = false;\n    /** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead\n     * of being mixed out.\n     *\n     * When mixing between animations that key the same property, if a lower track also keys that property then the value will\n     * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0%\n     * while the second animation mixes from 0% to 100%. Setting `holdPrevious` to true applies the first animation\n     * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which\n     * keys the property, only when a higher track also keys the property.\n     *\n     * Snapping will occur if `holdPrevious` is true and this animation does not key all the same properties as the\n     * previous animation. */\n    this.holdPrevious = false;\n    this.reverse = false;\n    this.shortestRotation = false;\n    /** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the\n     * `eventThreshold`, event timelines are applied while this animation is being mixed out. Defaults to 0, so event\n     * timelines are not applied while this animation is being mixed out. */\n    this.eventThreshold = 0;\n    /** When the mix percentage ({@link #mixtime} / {@link #mixDuration}) is less than the\n     * `attachmentThreshold`, attachment timelines are applied while this animation is being mixed out. Defaults to\n     * 0, so attachment timelines are not applied while this animation is being mixed out. */\n    this.attachmentThreshold = 0;\n    /** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the\n     * `drawOrderThreshold`, draw order timelines are applied while this animation is being mixed out. Defaults to 0,\n     * so draw order timelines are not applied while this animation is being mixed out. */\n    this.drawOrderThreshold = 0;\n    /** Seconds when this animation starts, both initially and after looping. Defaults to 0.\n     *\n     * When changing the `animationStart` time, it often makes sense to set {@link #animationLast} to the same\n     * value to prevent timeline keys before the start time from triggering. */\n    this.animationStart = 0;\n    /** Seconds for the last frame of this animation. Non-looping animations won't play past this time. Looping animations will\n     * loop back to {@link #animationStart} at this time. Defaults to the animation {@link Animation#duration}. */\n    this.animationEnd = 0;\n    /** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. Eg, when this\n     * animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) and\n     * `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this animation\n     * is applied. */\n    this.animationLast = 0;\n    this.nextAnimationLast = 0;\n    /** Seconds to postpone playing the animation. When this track entry is the current track entry, `delay`\n     * postpones incrementing the {@link #trackTime}. When this track entry is queued, `delay` is the time from\n     * the start of the previous animation to when this track entry will become the current track entry (ie when the previous\n     * track entry {@link TrackEntry#trackTime} >= this track entry's `delay`).\n     *\n     * {@link #timeScale} affects the delay. */\n    this.delay = 0;\n    /** Current time in seconds this track entry has been the current track entry. The track time determines\n     * {@link #animationTime}. The track time can be set to start the animation at a time other than 0, without affecting\n     * looping. */\n    this.trackTime = 0;\n    this.trackLast = 0;\n    this.nextTrackLast = 0;\n    /** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float\n     * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time\n     * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the\n     * properties keyed by the animation are set to the setup pose and the track is cleared.\n     *\n     * It may be desired to use {@link AnimationState#addEmptyAnimation()} rather than have the animation\n     * abruptly cease being applied. */\n    this.trackEnd = 0;\n    /** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or\n     * faster. Defaults to 1.\n     *\n     * {@link #mixTime} is not affected by track entry time scale, so {@link #mixDuration} may need to be adjusted to\n     * match the animation speed.\n     *\n     * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the\n     * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, assuming time scale to be 1. If\n     * the time scale is not 1, the delay may need to be adjusted.\n     *\n     * See AnimationState {@link AnimationState#timeScale} for affecting all animations. */\n    this.timeScale = 0;\n    /** Values < 1 mix this animation with the skeleton's current pose (usually the pose resulting from lower tracks). Defaults\n     * to 1, which overwrites the skeleton's current pose with this animation.\n     *\n     * Typically track 0 is used to completely pose the skeleton, then alpha is used on higher tracks. It doesn't make sense to\n     * use alpha on track 0 if the skeleton pose is from the last frame render. */\n    this.alpha = 0;\n    /** Seconds from 0 to the {@link #getMixDuration()} when mixing from the previous animation to this animation. May be\n     * slightly more than `mixDuration` when the mix is complete. */\n    this.mixTime = 0;\n    /** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by AnimationStateData\n     * {@link AnimationStateData#getMix()} based on the animation before this animation (if any).\n     *\n     * A mix duration of 0 still mixes out over one frame to provide the track entry being mixed out a chance to revert the\n     * properties it was animating.\n     *\n     * The `mixDuration` can be set manually rather than use the value from\n     * {@link AnimationStateData#getMix()}. In that case, the `mixDuration` can be set for a new\n     * track entry only before {@link AnimationState#update(float)} is first called.\n     *\n     * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the\n     * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, not a mix duration set\n     * afterward. */\n    this.mixDuration = 0;\n    this.interruptAlpha = 0;\n    this.totalAlpha = 0;\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.previous = 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  getTrackComplete() {\n    const duration = this.animationEnd - this.animationStart;\n    if (duration != 0) {\n      if (this.loop)\n        return duration * (1 + (this.trackTime / duration | 0));\n      if (this.trackTime < duration)\n        return duration;\n    }\n    return this.trackTime;\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;\nclass EventQueue {\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  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 && entry.listener.start)\n            entry.listener.start(entry);\n          for (let ii = 0; ii < listeners.length; ii++) {\n            const listener = listeners[ii];\n            if (listener.start)\n              listener.start(entry);\n          }\n          break;\n        case EventType.interrupt:\n          if (entry.listener && entry.listener.interrupt)\n            entry.listener.interrupt(entry);\n          for (let ii = 0; ii < listeners.length; ii++) {\n            const listener = listeners[ii];\n            if (listener.interrupt)\n              listener.interrupt(entry);\n          }\n          break;\n        case EventType.end:\n          if (entry.listener && entry.listener.end)\n            entry.listener.end(entry);\n          for (let ii = 0; ii < listeners.length; ii++) {\n            const listener = listeners[ii];\n            if (listener.end)\n              listener.end(entry);\n          }\n        case EventType.dispose:\n          if (entry.listener && entry.listener.dispose)\n            entry.listener.dispose(entry);\n          for (let ii = 0; ii < listeners.length; ii++) {\n            const listener = listeners[ii];\n            if (listener.dispose)\n              listener.dispose(entry);\n          }\n          this.animState.trackEntryPool.free(entry);\n          break;\n        case EventType.complete:\n          if (entry.listener && entry.listener.complete)\n            entry.listener.complete(entry);\n          for (let ii = 0; ii < listeners.length; ii++) {\n            const listener = listeners[ii];\n            if (listener.complete)\n              listener.complete(entry);\n          }\n          break;\n        case EventType.event:\n          const event = objects[i++ + 2];\n          if (entry.listener && entry.listener.event)\n            entry.listener.event(entry, event);\n          for (let ii = 0; ii < listeners.length; ii++) {\n            const listener = listeners[ii];\n            if (listener.event)\n              listener.event(entry, event);\n          }\n          break;\n      }\n    }\n    this.clear();\n    this.drainDisabled = false;\n  }\n  clear() {\n    this.objects.length = 0;\n  }\n}\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}\nconst SUBSEQUENT = 0;\nconst FIRST = 1;\nconst HOLD_SUBSEQUENT = 2;\nconst HOLD_FIRST = 3;\nconst HOLD_MIX = 4;\nconst SETUP = 1;\nconst CURRENT = 2;\n\nexport { AnimationState, AnimationStateAdapter, EventQueue, EventType, TrackEntry };\n//# sourceMappingURL=AnimationState.mjs.map\n","class AnimationStateData {\n  constructor(skeletonData) {\n    this.animationToMixTime = {};\n    /** The mix duration to use when no mix duration has been defined between two animations. */\n    this.defaultMix = 0;\n    if (!skeletonData)\n      throw new Error(\"skeletonData cannot be null.\");\n    this.skeletonData = skeletonData;\n  }\n  /** Sets a mix duration by animation name.\n   *\n   * See {@link #setMixWith()}. */\n  setMix(fromName, toName, duration) {\n    const from = this.skeletonData.findAnimation(fromName);\n    if (!from)\n      throw new Error(`Animation not found: ${fromName}`);\n    const to = this.skeletonData.findAnimation(toName);\n    if (!to)\n      throw new Error(`Animation not found: ${toName}`);\n    this.setMixWith(from, to, duration);\n  }\n  /** Sets the mix duration when changing from the specified animation to the other.\n   *\n   * See {@link TrackEntry#mixDuration}. */\n  setMixWith(from, to, duration) {\n    if (!from)\n      throw new Error(\"from cannot be null.\");\n    if (!to)\n      throw new Error(\"to cannot be null.\");\n    const key = `${from.name}.${to.name}`;\n    this.animationToMixTime[key] = duration;\n  }\n  /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if\n   * no mix duration has been set. */\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}\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';\nimport './attachments/Sequence.mjs';\n\nclass AtlasAttachmentLoader {\n  constructor(atlas) {\n    this.atlas = atlas;\n  }\n  loadSequence(name, basePath, sequence) {\n    const regions = sequence.regions;\n    for (let i = 0, n = regions.length; i < n; i++) {\n      const path = sequence.getPath(basePath, i);\n      const region = this.atlas.findRegion(path);\n      if (region == null)\n        throw new Error(`Region not found in atlas: ${path} (sequence: ${name})`);\n      regions[i] = region;\n      regions[i].renderObject = regions[i];\n    }\n  }\n  newRegionAttachment(skin, name, path, sequence) {\n    const attachment = new RegionAttachment(name, path);\n    if (sequence != null) {\n      this.loadSequence(name, path, sequence);\n    } else {\n      const region = this.atlas.findRegion(path);\n      if (!region)\n        throw new Error(`Region not found in atlas: ${path} (region attachment: ${name})`);\n      region.renderObject = region;\n      attachment.region = region;\n    }\n    return attachment;\n  }\n  newMeshAttachment(skin, name, path, sequence) {\n    const attachment = new MeshAttachment(name, path);\n    if (sequence != null) {\n      this.loadSequence(name, path, sequence);\n    } else {\n      const region = this.atlas.findRegion(path);\n      if (!region)\n        throw new Error(`Region not found in atlas: ${path} (mesh attachment: ${name})`);\n      region.renderObject = region;\n      attachment.region = region;\n    }\n    return attachment;\n  }\n  newBoundingBoxAttachment(skin, name) {\n    return new BoundingBoxAttachment(name);\n  }\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    /** The parent bone, or null if this is the root bone. */\n    this.parent = null;\n    /** The immediate children of this bone. */\n    this.children = new Array();\n    /** The local x translation. */\n    this.x = 0;\n    /** The local y translation. */\n    this.y = 0;\n    /** The local rotation in degrees, counter clockwise. */\n    this.rotation = 0;\n    /** The local scaleX. */\n    this.scaleX = 0;\n    /** The local scaleY. */\n    this.scaleY = 0;\n    /** The local shearX. */\n    this.shearX = 0;\n    /** The local shearY. */\n    this.shearY = 0;\n    /** The applied local x translation. */\n    this.ax = 0;\n    /** The applied local y translation. */\n    this.ay = 0;\n    /** The applied local rotation in degrees, counter clockwise. */\n    this.arotation = 0;\n    /** The applied local scaleX. */\n    this.ascaleX = 0;\n    /** The applied local scaleY. */\n    this.ascaleY = 0;\n    /** The applied local shearX. */\n    this.ashearX = 0;\n    /** The applied local shearY. */\n    this.ashearY = 0;\n    this.sorted = false;\n    this.active = false;\n    if (!data)\n      throw new Error(\"data cannot be null.\");\n    if (!skeleton)\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  /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the\n   * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */\n  isActive() {\n    return this.active;\n  }\n  /** Computes the world transform using the parent bone and this bone's local applied transform. */\n  update() {\n    this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY);\n  }\n  /** Computes the world transform using the parent bone and this bone's local transform.\n   *\n   * See {@link #updateWorldTransformWith()}. */\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. The applied transform is set to the\n   * specified local transform. Child bones are not updated.\n   *\n   * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n   * Runtimes Guide. */\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    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) {\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 /= sx;\n          pc /= sy;\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 != (sx < 0 != sy < 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  /** Sets this bone's local transform to the setup pose. */\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  /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */\n  getWorldRotationX() {\n    return Math.atan2(this.matrix.b, this.matrix.a) * MathUtils.radDeg;\n  }\n  /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */\n  getWorldRotationY() {\n    return Math.atan2(this.matrix.d, this.matrix.c) * MathUtils.radDeg;\n  }\n  /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */\n  getWorldScaleX() {\n    const m = this.matrix;\n    return Math.sqrt(m.a * m.a + m.b * m.b);\n  }\n  /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */\n  getWorldScaleY() {\n    const m = this.matrix;\n    return Math.sqrt(m.c * m.c + m.d * m.d);\n  }\n  /** Computes the applied transform values from the world transform.\n   *\n   * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so\n   * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other\n   * constraints).\n   *\n   * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after\n   * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */\n  updateAppliedTransform() {\n    const parent = this.parent;\n    const m = this.matrix;\n    if (!parent) {\n      this.ax = m.tx - this.skeleton.x;\n      this.ay = m.ty - this.skeleton.y;\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  /** Transforms a point from world coordinates to the bone's local coordinates. */\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  /** Transforms a point from the bone's local coordinates to world coordinates. */\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  /** Transforms a world rotation to a local rotation. */\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  /** Transforms a local rotation to a world rotation. */\n  localToWorldRotation(localRotation) {\n    localRotation -= this.rotation - this.shearX;\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  /** Rotates the world transform the specified amount.\n   * <p>\n   * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and {@link #update()} will\n   * need to be called on any child bones, recursively. */\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  }\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    /** The index of the bone in {@link Skeleton#getBones()}. */\n    this.index = 0;\n    /** @returns May be null. */\n    this.parent = null;\n    /** The bone's length. */\n    this.length = 0;\n    /** The local x translation. */\n    this.x = 0;\n    /** The local y translation. */\n    this.y = 0;\n    /** The local rotation. */\n    this.rotation = 0;\n    /** The local scaleX. */\n    this.scaleX = 1;\n    /** The local scaleY. */\n    this.scaleY = 1;\n    /** The local shearX. */\n    this.shearX = 0;\n    /** The local shearX. */\n    this.shearY = 0;\n    /** The transform mode for how parent world transforms affect this bone. */\n    this.transformMode = TransformMode.Normal;\n    /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this\n     * bone.\n     * @see Skin#bones */\n    this.skinRequired = false;\n    /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually\n     * rendered at runtime. */\n    this.color = new Color();\n    if (index < 0)\n      throw new Error(\"index must be >= 0.\");\n    if (!name)\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=ConstraintData.mjs.map\n","class Event {\n  constructor(time, data) {\n    this.intValue = 0;\n    this.floatValue = 0;\n    this.stringValue = null;\n    this.time = 0;\n    this.volume = 0;\n    this.balance = 0;\n    if (!data)\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.intValue = 0;\n    this.floatValue = 0;\n    this.stringValue = null;\n    this.audioPath = null;\n    this.volume = 0;\n    this.balance = 0;\n    this.name = name;\n  }\n}\n\nexport { EventData };\n//# sourceMappingURL=EventData.mjs.map\n","import { settings, TransformMode, MathUtils } from '@pixi-spine/base';\n\nclass IkConstraint {\n  constructor(data, skeleton) {\n    /** Controls the bend direction of the IK bones, either 1 or -1. */\n    this.bendDirection = 0;\n    /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n    this.compress = false;\n    /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained\n     * and the parent bone has local nonuniform scale, stretch is not applied. */\n    this.stretch = false;\n    /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n    this.mix = 1;\n    /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n    this.softness = 0;\n    this.active = false;\n    if (!data)\n      throw new Error(\"data cannot be null.\");\n    if (!skeleton)\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      const bone = skeleton.findBone(data.bones[i].name);\n      if (!bone)\n        throw new Error(`Couldn't find bone ${data.bones[i].name}`);\n      this.bones.push(bone);\n    }\n    const target = skeleton.findBone(data.target.name);\n    if (!target)\n      throw new Error(`Couldn't find bone ${data.target.name}`);\n    this.target = target;\n  }\n  isActive() {\n    return this.active;\n  }\n  update() {\n    if (this.mix == 0)\n      return;\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.data.uniform, this.softness, this.mix);\n        break;\n    }\n  }\n  /** Applies 1 bone IK. The target is specified in the world coordinate system. */\n  apply1(bone, targetX, targetY, compress, stretch, uniform, alpha) {\n    const p = bone.parent.matrix;\n    if (!p)\n      throw new Error(\"IK bone must have parent.\");\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    const skelX = bone.skeleton.scaleX;\n    const skelY = settings.yDown ? -bone.skeleton.scaleY : bone.skeleton.scaleY;\n    switch (bone.data.transformMode) {\n      case TransformMode.OnlyTranslation:\n        tx = (targetX - bone.worldX) * MathUtils.signum(skelX);\n        ty = (targetY - bone.worldY) * MathUtils.signum(skelY);\n        break;\n      case TransformMode.NoRotationOrReflection:\n        const s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);\n        const sa = pa / skelX;\n        const sc = pc / skelY;\n        pb = -sc * s * skelX;\n        pd = sa * s * skelY;\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  /** Applies 2 bone IK. The 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, uniform, softness, alpha) {\n    const px = parent.ax;\n    const py = parent.ay;\n    let psx = parent.ascaleX;\n    let psy = parent.ascaleY;\n    let sx = psx;\n    let sy = psy;\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 || stretch) {\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    if (!pp)\n      throw new Error(\"IK parent must itself have a parent.\");\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) * 0.5;\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          a2 = Math.PI * bendDir;\n        } else if (cos > 1) {\n          cos = 1;\n          a2 = 0;\n          if (stretch) {\n            a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n            sx *= a;\n            if (uniform)\n              sy *= a;\n          }\n        } else\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) * 0.5;\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) * 0.5) {\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, sy, 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 './ConstraintData.mjs';\n\nclass IkConstraintData extends ConstraintData {\n  constructor(name) {\n    super(name, 0, false);\n    /** The bones that are constrained by this IK constraint. */\n    this.bones = new Array();\n    /** The bone that is the IK target. */\n    this._target = null;\n    /** Controls the bend direction of the IK bones, either 1 or -1. */\n    this.bendDirection = 1;\n    /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n    this.compress = false;\n    /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained\n     * and the parent bone has local nonuniform scale, stretch is not applied. */\n    this.stretch = false;\n    /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone\n     * is scaled on both the X and Y axes. */\n    this.uniform = false;\n    /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n    this.mix = 1;\n    /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n    this.softness = 0;\n  }\n  set target(boneData) {\n    this._target = boneData;\n  }\n  get target() {\n    if (!this._target)\n      throw new Error(\"BoneData not set.\");\n    else\n      return this._target;\n  }\n}\n\nexport { IkConstraintData };\n//# sourceMappingURL=IkConstraintData.mjs.map\n","import { ConstraintData } from './ConstraintData.mjs';\nimport { PositionMode, RotateMode } from '@pixi-spine/base';\n\nclass PathConstraintData extends ConstraintData {\n  constructor(name) {\n    super(name, 0, false);\n    /** The bones that will be modified by this path constraint. */\n    this.bones = new Array();\n    /** The slot whose path attachment will be used to constrained the bones. */\n    this._target = null;\n    /** The mode for positioning the first bone on the path. */\n    this.positionMode = PositionMode.Fixed;\n    /** The mode for positioning the bones after the first bone on the path. */\n    this.spacingMode = SpacingMode.Fixed;\n    /** The mode for adjusting the rotation of the bones. */\n    this.rotateMode = RotateMode.Chain;\n    /** An offset added to the constrained bone rotation. */\n    this.offsetRotation = 0;\n    /** The position along the path. */\n    this.position = 0;\n    /** The spacing between bones. */\n    this.spacing = 0;\n    this.mixRotate = 0;\n    this.mixX = 0;\n    this.mixY = 0;\n  }\n  set target(slotData) {\n    this._target = slotData;\n  }\n  get target() {\n    if (!this._target)\n      throw new Error(\"SlotData not set.\");\n    else\n      return this._target;\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  SpacingMode2[SpacingMode2[\"Proportional\"] = 3] = \"Proportional\";\n  return SpacingMode2;\n})(SpacingMode || {});\n\nexport { PathConstraintData, SpacingMode };\n//# sourceMappingURL=PathConstraintData.mjs.map\n","import './attachments/Attachment.mjs';\nimport { RotateMode, Utils, MathUtils, PositionMode } from '@pixi-spine/base';\nimport { PathAttachment } from './attachments/PathAttachment.mjs';\nimport './attachments/RegionAttachment.mjs';\nimport './attachments/Sequence.mjs';\nimport { SpacingMode } from './PathConstraintData.mjs';\n\nconst _PathConstraint = class {\n  constructor(data, skeleton) {\n    /** The position along the path. */\n    this.position = 0;\n    /** The spacing between bones. */\n    this.spacing = 0;\n    this.mixRotate = 0;\n    this.mixX = 0;\n    this.mixY = 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)\n      throw new Error(\"data cannot be null.\");\n    if (!skeleton)\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      const bone = skeleton.findBone(data.bones[i].name);\n      if (!bone)\n        throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n      this.bones.push(bone);\n    }\n    const target = skeleton.findSlot(data.target.name);\n    if (!target)\n      throw new Error(`Couldn't find target bone ${data.target.name}`);\n    this.target = target;\n    this.position = data.position;\n    this.spacing = data.spacing;\n    this.mixRotate = data.mixRotate;\n    this.mixX = data.mixX;\n    this.mixY = data.mixY;\n  }\n  isActive() {\n    return this.active;\n  }\n  update() {\n    const attachment = this.target.getAttachment();\n    if (!(attachment instanceof PathAttachment))\n      return;\n    const mixRotate = this.mixRotate;\n    const mixX = this.mixX;\n    const mixY = this.mixY;\n    if (mixRotate == 0 && mixX == 0 && mixY == 0)\n      return;\n    const data = this.data;\n    const tangents = data.rotateMode == RotateMode.Tangent;\n    const scale = data.rotateMode == RotateMode.ChainScale;\n    const bones = this.bones;\n    const boneCount = bones.length;\n    const spacesCount = tangents ? boneCount : boneCount + 1;\n    const spaces = Utils.setArraySize(this.spaces, spacesCount);\n    const lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : [];\n    const spacing = this.spacing;\n    switch (data.spacingMode) {\n      case SpacingMode.Percent:\n        if (scale) {\n          for (let i = 0, n = spacesCount - 1; i < n; i++) {\n            const bone = bones[i];\n            const setupLength = bone.data.length;\n            if (setupLength < _PathConstraint.epsilon)\n              lengths[i] = 0;\n            else {\n              const x = setupLength * bone.matrix.a;\n              const y = setupLength * bone.matrix.b;\n              lengths[i] = Math.sqrt(x * x + y * y);\n            }\n          }\n        }\n        Utils.arrayFill(spaces, 1, spacesCount, spacing);\n        break;\n      case SpacingMode.Proportional:\n        let sum = 0;\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] = spacing;\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] = length;\n            sum += length;\n          }\n        }\n        if (sum > 0) {\n          sum = spacesCount / sum * spacing;\n          for (let i = 1; i < spacesCount; i++)\n            spaces[i] *= sum;\n        }\n        break;\n      default:\n        const lengthSpacing = data.spacingMode == SpacingMode.Length;\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] = spacing;\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    }\n    const positions = this.computeWorldPositions(attachment, spacesCount, tangents);\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 = data.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) * mixX;\n      mat.ty += (boneY - mat.ty) * mixY;\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) * mixRotate + 1;\n          mat.a *= s;\n          mat.b *= s;\n        }\n      }\n      boneX = x;\n      boneY = y;\n      if (mixRotate > 0) {\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          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) * mixRotate;\n          boneY += (length * (sin * a + cos * c) - dy) * mixRotate;\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 *= mixRotate;\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.updateAppliedTransform();\n    }\n  }\n  computeWorldPositions(path, spacesCount, tangents) {\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 = this.world;\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 (this.data.positionMode == PositionMode.Percent)\n        position *= pathLength2;\n      let multiplier2;\n      switch (this.data.spacingMode) {\n        case SpacingMode.Percent:\n          multiplier2 = pathLength2;\n          break;\n        case SpacingMode.Proportional:\n          multiplier2 = pathLength2 / spacesCount;\n          break;\n        default:\n          multiplier2 = 1;\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] * multiplier2;\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 (this.data.positionMode == PositionMode.Percent)\n      position *= pathLength;\n    let multiplier;\n    switch (this.data.spacingMode) {\n      case SpacingMode.Percent:\n        multiplier = pathLength;\n        break;\n      case SpacingMode.Proportional:\n        multiplier = pathLength / spacesCount;\n        break;\n      default:\n        multiplier = 1;\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] * multiplier;\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      out[o] = x1;\n      out[o + 1] = y1;\n      out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n      return;\n    }\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      if (p < 1e-3)\n        out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n      else\n        out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n    }\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 { Color } from '@pixi-spine/base';\nimport { VertexAttachment } from './attachments/Attachment.mjs';\n\nclass Slot {\n  constructor(data, bone) {\n    /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark\n     * color's alpha is not used. */\n    this.darkColor = null;\n    this.attachment = null;\n    this.attachmentState = 0;\n    /** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the\n     * {@link Sequence#getSetupIndex()}. */\n    this.sequenceIndex = -1;\n    /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a\n     * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions.\n     *\n     * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */\n    this.deform = new Array();\n    if (!data)\n      throw new Error(\"data cannot be null.\");\n    if (!bone)\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 : new Color();\n    this.setToSetupPose();\n    this.blendMode = this.data.blendMode;\n  }\n  /** The skeleton this slot belongs to. */\n  getSkeleton() {\n    return this.bone.skeleton;\n  }\n  /** The current attachment for the slot, or null if the slot has no attachment. */\n  getAttachment() {\n    return this.attachment;\n  }\n  /** Sets the slot's attachment and, if the attachment changed, resets {@link #sequenceIndex} and clears the {@link #deform}.\n   * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getTimelineAttachment()} as the\n   * specified attachment. */\n  setAttachment(attachment) {\n    if (this.attachment == attachment)\n      return;\n    if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment) || attachment.timelineAttachment != this.attachment.timelineAttachment) {\n      this.deform.length = 0;\n    }\n    this.attachment = attachment;\n    this.sequenceIndex = -1;\n  }\n  /** Sets this slot to the setup pose. */\n  setToSetupPose() {\n    this.color.setFromColor(this.data.color);\n    if (this.darkColor)\n      this.darkColor.setFromColor(this.data.darkColor);\n    if (!this.data.attachmentName)\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 { Vector2, MathUtils } from '@pixi-spine/base';\n\nclass TransformConstraint {\n  constructor(data, skeleton) {\n    this.mixRotate = 0;\n    this.mixX = 0;\n    this.mixY = 0;\n    this.mixScaleX = 0;\n    this.mixScaleY = 0;\n    this.mixShearY = 0;\n    this.temp = new Vector2();\n    this.active = false;\n    if (!data)\n      throw new Error(\"data cannot be null.\");\n    if (!skeleton)\n      throw new Error(\"skeleton cannot be null.\");\n    this.data = data;\n    this.mixRotate = data.mixRotate;\n    this.mixX = data.mixX;\n    this.mixY = data.mixY;\n    this.mixScaleX = data.mixScaleX;\n    this.mixScaleY = data.mixScaleY;\n    this.mixShearY = data.mixShearY;\n    this.bones = new Array();\n    for (let i = 0; i < data.bones.length; i++) {\n      const bone = skeleton.findBone(data.bones[i].name);\n      if (!bone)\n        throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n      this.bones.push(bone);\n    }\n    const target = skeleton.findBone(data.target.name);\n    if (!target)\n      throw new Error(`Couldn't find target bone ${data.target.name}.`);\n    this.target = target;\n  }\n  isActive() {\n    return this.active;\n  }\n  update() {\n    if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleX == 0 && this.mixShearY == 0)\n      return;\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 mixRotate = this.mixRotate;\n    const mixX = this.mixX;\n    const mixY = this.mixY;\n    const mixScaleX = this.mixScaleX;\n    const mixScaleY = this.mixScaleY;\n    const mixShearY = this.mixShearY;\n    const translate = mixX != 0 || mixY != 0;\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      const mat = bone.matrix;\n      if (mixRotate != 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 *= mixRotate;\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      }\n      if (translate) {\n        const temp = this.temp;\n        target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n        mat.tx += (temp.x - mat.tx) * mixX;\n        mat.ty += (temp.y - mat.ty) * mixY;\n      }\n      if (mixScaleX != 0) {\n        let s = Math.sqrt(mat.a * mat.a + mat.b * mat.b);\n        if (s != 0)\n          s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s;\n        mat.a *= s;\n        mat.b *= s;\n      }\n      if (mixScaleY != 0) {\n        let s = Math.sqrt(mat.c * mat.c + mat.d * mat.d);\n        if (s != 0)\n          s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s;\n        mat.c *= s;\n        mat.d *= s;\n      }\n      if (mixShearY > 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) * mixShearY;\n        const s = Math.sqrt(b * b + d * d);\n        mat.c = Math.cos(r) * s;\n        mat.d = Math.sin(r) * s;\n      }\n      bone.updateAppliedTransform();\n    }\n  }\n  applyRelativeWorld() {\n    const mixRotate = this.mixRotate;\n    const mixX = this.mixX;\n    const mixY = this.mixY;\n    const mixScaleX = this.mixScaleX;\n    const mixScaleY = this.mixScaleY;\n    const mixShearY = this.mixShearY;\n    const translate = mixX != 0 || mixY != 0;\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      const mat = bone.matrix;\n      if (mixRotate != 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 *= mixRotate;\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      }\n      if (translate) {\n        const temp = this.temp;\n        target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n        mat.tx += temp.x * mixX;\n        mat.ty += temp.y * mixY;\n      }\n      if (mixScaleX != 0) {\n        const s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1;\n        mat.a *= s;\n        mat.b *= s;\n      }\n      if (mixScaleY != 0) {\n        const s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1;\n        mat.c *= s;\n        mat.d *= s;\n      }\n      if (mixShearY > 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) * mixShearY;\n        const s = Math.sqrt(b * b + d * d);\n        mat.c = Math.cos(r) * s;\n        mat.d = Math.sin(r) * s;\n      }\n      bone.updateAppliedTransform();\n    }\n  }\n  applyAbsoluteLocal() {\n    const mixRotate = this.mixRotate;\n    const mixX = this.mixX;\n    const mixY = this.mixY;\n    const mixScaleX = this.mixScaleX;\n    const mixScaleY = this.mixScaleY;\n    const mixShearY = this.mixShearY;\n    const target = this.target;\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      let rotation = bone.arotation;\n      if (mixRotate != 0) {\n        let r = target.arotation - rotation + this.data.offsetRotation;\n        r -= (16384 - (16384.499999999996 - r / 360 | 0)) * 360;\n        rotation += r * mixRotate;\n      }\n      let x = bone.ax;\n      let y = bone.ay;\n      x += (target.ax - x + this.data.offsetX) * mixX;\n      y += (target.ay - y + this.data.offsetY) * mixY;\n      let scaleX = bone.ascaleX;\n      let scaleY = bone.ascaleY;\n      if (mixScaleX != 0 && scaleX != 0)\n        scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX;\n      if (mixScaleY != 0 && scaleY != 0)\n        scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY;\n      let shearY = bone.ashearY;\n      if (mixShearY != 0) {\n        let r = target.ashearY - shearY + this.data.offsetShearY;\n        r -= (16384 - (16384.499999999996 - r / 360 | 0)) * 360;\n        shearY += r * mixShearY;\n      }\n      bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n    }\n  }\n  applyRelativeLocal() {\n    const mixRotate = this.mixRotate;\n    const mixX = this.mixX;\n    const mixY = this.mixY;\n    const mixScaleX = this.mixScaleX;\n    const mixScaleY = this.mixScaleY;\n    const mixShearY = this.mixShearY;\n    const target = this.target;\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[i];\n      const rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate;\n      const x = bone.ax + (target.ax + this.data.offsetX) * mixX;\n      const y = bone.ay + (target.ay + this.data.offsetY) * mixY;\n      const scaleX = bone.ascaleX * ((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX + 1);\n      const scaleY = bone.ascaleY * ((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY + 1);\n      const shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY;\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, MathUtils, settings, Vector2 } from '@pixi-spine/base';\nimport { MeshAttachment } from './attachments/MeshAttachment.mjs';\nimport { PathAttachment } from './attachments/PathAttachment.mjs';\nimport { RegionAttachment } from './attachments/RegionAttachment.mjs';\nimport './attachments/Sequence.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    /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */\n    this._updateCache = new Array();\n    /** The skeleton's current skin. May be null. */\n    this.skin = null;\n    /** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale\n     * inheritance. */\n    this.scaleX = 1;\n    /** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale\n     * inheritance. */\n    this.scaleY = 1;\n    /** Sets the skeleton X position, which is added to the root bone worldX position. */\n    this.x = 0;\n    /** Sets the skeleton Y position, which is added to the root bone worldY position. */\n    this.y = 0;\n    if (!data)\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)\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  /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,\n   * constraints, or weighted path attachments are added or removed. */\n  updateCache() {\n    const updateCache = this._updateCache;\n    updateCache.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) {\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);\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 && 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      this._updateCache.push(constraint);\n      this.sortReset(parent.children);\n    } else {\n      const child = constrained[constrained.length - 1];\n      this.sortBone(child);\n      this._updateCache.push(constraint);\n      this.sortReset(parent.children);\n      child.sorted = true;\n    }\n  }\n  sortPathConstraint(constraint) {\n    constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || this.skin && 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)\n      this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n    if (this.data.defaultSkin && 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 && 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        this.sortBone(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 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  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)\n      this.sortBone(slotBone);\n    else {\n      const bones = this.bones;\n      for (let i = 0, n = pathBones.length; i < n; ) {\n        let nn = pathBones[i++];\n        nn += i;\n        while (i < nn)\n          this.sortBone(bones[pathBones[i++]]);\n      }\n    }\n  }\n  sortBone(bone) {\n    if (!bone)\n      return;\n    if (bone.sorted)\n      return;\n    const parent = bone.parent;\n    if (parent)\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 all constraints.\n   *\n   * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n   * Runtimes Guide. */\n  updateWorldTransform() {\n    const bones = this.bones;\n    for (let i = 0, n = bones.length; i < n; i++) {\n      const bone = bones[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    }\n    const updateCache = this._updateCache;\n    for (let i = 0, n = updateCache.length; i < n; i++)\n      updateCache[i].update();\n  }\n  updateWorldTransformWith(parent) {\n    const rootBone = this.getRootBone();\n    const pa = parent.matrix.a;\n    const pb = parent.matrix.c;\n    const pc = parent.matrix.b;\n    const pd = parent.matrix.d;\n    rootBone.matrix.tx = pa * this.x + pb * this.y + parent.worldX;\n    rootBone.matrix.ty = pc * this.x + pd * this.y + parent.worldY;\n    const rotationY = rootBone.rotation + 90 + rootBone.shearY;\n    const la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n    const lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;\n    const lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n    const ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;\n    const sx = this.scaleX;\n    const sy = settings.yDown ? -this.scaleY : this.scaleY;\n    rootBone.matrix.a = (pa * la + pb * lc) * sx;\n    rootBone.matrix.c = (pa * lb + pb * ld) * sx;\n    rootBone.matrix.b = (pc * la + pd * lc) * sy;\n    rootBone.matrix.d = (pc * lb + pd * ld) * sy;\n    const updateCache = this._updateCache;\n    for (let i = 0, n = updateCache.length; i < n; i++) {\n      const updatable = updateCache[i];\n      if (updatable != rootBone)\n        updatable.update();\n    }\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.mixRotate = data.mixRotate;\n      constraint.mixX = data.mixX;\n      constraint.mixY = data.mixY;\n      constraint.mixScaleX = data.mixScaleX;\n      constraint.mixScaleY = data.mixScaleY;\n      constraint.mixShearY = data.mixShearY;\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.mixRotate = data.mixRotate;\n      constraint.mixX = data.mixX;\n      constraint.mixY = data.mixY;\n    }\n  }\n  /** Sets the slots and draw order to their setup pose values. */\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  /** @returns May return null. */\n  getRootBone() {\n    if (this.bones.length == 0)\n      return null;\n    return this.bones[0];\n  }\n  /** @returns May be null. */\n  findBone(boneName) {\n    if (!boneName)\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  /** @returns -1 if the bone was not found. */\n  findBoneIndex(boneName) {\n    if (!boneName)\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  /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n   * repeatedly.\n   * @returns May be null. */\n  findSlot(slotName) {\n    if (!slotName)\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  /** @returns -1 if the bone was not found. */\n  findSlotIndex(slotName) {\n    if (!slotName)\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   *\n   * See {@link #setSkin()}. */\n  setSkinByName(skinName) {\n    const skin = this.data.findSkin(skinName);\n    if (!skin)\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#defaultSkin default skin}. If the\n   * skin is changed, {@link #updateCache()} is called.\n   *\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   *\n   * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling\n   * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the\n   * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.\n   * @param newSkin May be null. */\n  setSkin(newSkin) {\n    if (newSkin == this.skin)\n      return;\n    if (newSkin) {\n      if (this.skin)\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) {\n            const attachment = newSkin.getAttachment(i, name);\n            if (attachment)\n              slot.setAttachment(attachment);\n          }\n        }\n      }\n    }\n    this.skin = newSkin;\n    this.updateCache();\n  }\n  /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment\n   * name.\n   *\n   * See {@link #getAttachment()}.\n   * @returns May be null. */\n  getAttachmentByName(slotName, attachmentName) {\n    const slot = this.data.findSlot(slotName);\n    if (!slot)\n      throw new Error(`Can't find slot with name ${slotName}`);\n    return this.getAttachment(slot.index, attachmentName);\n  }\n  /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and\n   * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.\n   *\n   * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.\n   * @returns May be null. */\n  getAttachment(slotIndex, attachmentName) {\n    if (!attachmentName)\n      throw new Error(\"attachmentName cannot be null.\");\n    if (this.skin) {\n      const attachment = this.skin.getAttachment(slotIndex, attachmentName);\n      if (attachment)\n        return attachment;\n    }\n    if (this.data.defaultSkin)\n      return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n    return null;\n  }\n  /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with\n   * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.\n   * @param attachmentName May be null to clear the slot's attachment. */\n  setAttachment(slotName, attachmentName) {\n    if (!slotName)\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) {\n          attachment = this.getAttachment(i, attachmentName);\n          if (!attachment)\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  /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n   * than to call it repeatedly.\n   * @return May be null. */\n  findIkConstraint(constraintName) {\n    if (!constraintName)\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  /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n   * this method than to call it repeatedly.\n   * @return May be null. */\n  findTransformConstraint(constraintName) {\n    if (!constraintName)\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  /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n   * than to call it repeatedly.\n   * @return May be null. */\n  findPathConstraint(constraintName) {\n    if (!constraintName)\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 as `{ x: number, y: number, width: number, height: number }`.\n   * Note that this method will create temporary objects which can add to garbage collection pressure. Use `getBounds()` if garbage collection is a concern. */\n  getBoundsRect() {\n    const offset = new Vector2();\n    const size = new Vector2();\n    this.getBounds(offset, size);\n    return { x: offset.x, y: offset.y, width: size.x, height: size.y };\n  }\n  /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.\n   * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.\n   * @param size An output value, the width and height of the AABB.\n   * @param temp Working memory to temporarily store attachments' computed world vertices. */\n  getBounds(offset, size, temp = new Array(2)) {\n    if (!offset)\n      throw new Error(\"offset cannot be null.\");\n    if (!size)\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, 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) {\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  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    /** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */\n    this.name = null;\n    /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n    this.bones = new Array();\n    // Ordered parents first.\n    /** The skeleton's slots. */\n    this.slots = new Array();\n    // Setup pose draw order.\n    this.skins = new Array();\n    /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine.\n     *\n     * See {@link Skeleton#getAttachmentByName()}.\n     * May be null. */\n    this.defaultSkin = null;\n    /** The skeleton's events. */\n    this.events = new Array();\n    /** The skeleton's animations. */\n    this.animations = new Array();\n    /** The skeleton's IK constraints. */\n    this.ikConstraints = new Array();\n    /** The skeleton's transform constraints. */\n    this.transformConstraints = new Array();\n    /** The skeleton's path constraints. */\n    this.pathConstraints = new Array();\n    /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n    this.x = 0;\n    /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n    this.y = 0;\n    /** The width of the skeleton's axis aligned bounding box in the setup pose. */\n    this.width = 0;\n    /** The height of the skeleton's axis aligned bounding box in the setup pose. */\n    this.height = 0;\n    /** The Spine version used to export the skeleton data, or null. */\n    this.version = null;\n    /** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */\n    this.hash = null;\n    // Nonessential\n    /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */\n    this.fps = 0;\n    /** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */\n    this.imagesPath = null;\n    /** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */\n    this.audioPath = null;\n  }\n  /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it\n   * multiple times.\n   * @returns May be null. */\n  findBone(boneName) {\n    if (!boneName)\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  /** removed from spine-ts runtime **/\n  findBoneIndex(boneName) {\n    if (!boneName)\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  /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n   * multiple times.\n   * @returns May be null. */\n  findSlot(slotName) {\n    if (!slotName)\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  /** removed from spine-ts runtime **/\n  findSlotIndex(slotName) {\n    if (!slotName)\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  /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it\n   * multiple times.\n   * @returns May be null. */\n  findSkin(skinName) {\n    if (!skinName)\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  /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it\n   * multiple times.\n   * @returns May be null. */\n  findEvent(eventDataName) {\n    if (!eventDataName)\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  /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to\n   * call it multiple times.\n   * @returns May be null. */\n  findAnimation(animationName) {\n    if (!animationName)\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  /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n   * than to call it multiple times.\n   * @return May be null. */\n  findIkConstraint(constraintName) {\n    if (!constraintName)\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  /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n   * this method than to call it multiple times.\n   * @return May be null. */\n  findTransformConstraint(constraintName) {\n    if (!constraintName)\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  /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n   * than to call it multiple times.\n   * @return May be null. */\n  findPathConstraint(constraintName) {\n    if (!constraintName)\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  /** removed from spine-ts runtime **/\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';\nimport { BLEND_MODES } from '@pixi/core';\n\nclass SlotData {\n  constructor(index, name, boneData) {\n    /** The index of the slot in {@link Skeleton#getSlots()}. */\n    this.index = 0;\n    /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two\n     * color tinting. */\n    this.color = new Color(1, 1, 1, 1);\n    /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark\n     * color's alpha is not used. */\n    this.darkColor = null;\n    /** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */\n    this.attachmentName = null;\n    /** The blend mode for drawing the slot's attachment. */\n    this.blendMode = BLEND_MODES.NORMAL;\n    if (index < 0)\n      throw new Error(\"index must be >= 0.\");\n    if (!name)\n      throw new Error(\"name cannot be null.\");\n    if (!boneData)\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 './ConstraintData.mjs';\n\nclass TransformConstraintData extends ConstraintData {\n  constructor(name) {\n    super(name, 0, false);\n    /** The bones that will be modified by this transform constraint. */\n    this.bones = new Array();\n    /** The target bone whose world transform will be copied to the constrained bones. */\n    this._target = null;\n    this.mixRotate = 0;\n    this.mixX = 0;\n    this.mixY = 0;\n    this.mixScaleX = 0;\n    this.mixScaleY = 0;\n    this.mixShearY = 0;\n    /** An offset added to the constrained bone rotation. */\n    this.offsetRotation = 0;\n    /** An offset added to the constrained bone X translation. */\n    this.offsetX = 0;\n    /** An offset added to the constrained bone Y translation. */\n    this.offsetY = 0;\n    /** An offset added to the constrained bone scaleX. */\n    this.offsetScaleX = 0;\n    /** An offset added to the constrained bone scaleY. */\n    this.offsetScaleY = 0;\n    /** An offset added to the constrained bone shearY. */\n    this.offsetShearY = 0;\n    this.relative = false;\n    this.local = false;\n  }\n  set target(boneData) {\n    this._target = boneData;\n  }\n  get target() {\n    if (!this._target)\n      throw new Error(\"BoneData not set.\");\n    else\n      return this._target;\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';\nimport './attachments/Sequence.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)\n      throw new Error(\"name cannot be null.\");\n    this.name = name;\n  }\n  /** Adds an attachment to the skin for the specified slot index and name. */\n  setAttachment(slotIndex, name, attachment) {\n    if (!attachment)\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  /** Adds all attachments, bones, and constraints from the specified skin to this skin. */\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 ii = 0; ii < this.bones.length; ii++) {\n        if (this.bones[ii] == 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 ii = 0; ii < this.constraints.length; ii++) {\n        if (this.constraints[ii] == 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  /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not\n   * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */\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 ii = 0; ii < this.bones.length; ii++) {\n        if (this.bones[ii] == 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 ii = 0; ii < this.constraints.length; ii++) {\n        if (this.constraints[ii] == 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)\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  /** Returns the attachment for the specified slot index and name, or null. */\n  getAttachment(slotIndex, name) {\n    const dictionary = this.attachments[slotIndex];\n    return dictionary ? dictionary[name] : null;\n  }\n  /** Removes the attachment in the skin for the specified slot index and name, if any. */\n  removeAttachment(slotIndex, name) {\n    const dictionary = this.attachments[slotIndex];\n    if (dictionary)\n      delete dictionary[name];\n  }\n  /** Returns all attachments in this skin. */\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  /** Returns all attachments in this skin for the specified slot index. */\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  /** Clears all attachments, bones, and constraints. */\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)\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 { AlphaTimeline, RGB2Timeline, RGBA2Timeline, RGBTimeline, RGBATimeline, AttachmentTimeline, ShearYTimeline, ShearXTimeline, ShearTimeline, ScaleYTimeline, ScaleXTimeline, ScaleTimeline, TranslateYTimeline, TranslateXTimeline, TranslateTimeline, RotateTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintMixTimeline, PathConstraintSpacingTimeline, PathConstraintPositionTimeline, SequenceTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, Animation } from './Animation.mjs';\nimport { 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 { BinaryInput, Color, PositionMode, Utils, AttachmentType } from '@pixi-spine/base';\nimport { BLEND_MODES } from '@pixi/core';\nimport './attachments/Attachment.mjs';\nimport './attachments/RegionAttachment.mjs';\nimport { Sequence, SequenceModeValues } from './attachments/Sequence.mjs';\n\nclass SkeletonBinary {\n  constructor(attachmentLoader) {\n    this.ver40 = false;\n    /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n     * runtime than were used in Spine.\n     *\n     * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\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    const lowHash = input.readInt32();\n    const highHash = input.readInt32();\n    skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);\n    skeletonData.version = input.readString();\n    const verShort = skeletonData.version.substr(0, 3);\n    if (verShort !== \"4.0\" && verShort !== \"4.1\") {\n      const error = `Spine 4.1 loader cant load version ${skeletonData.version}. Please configure your pixi-spine bundle`;\n      console.error(error);\n    }\n    this.ver40 = verShort === \"4.0\";\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      const str = input.readString();\n      if (!str)\n        throw new Error(\"String in string table must not be null.\");\n      input.strings.push(str);\n    }\n    n = input.readInt(true);\n    for (let i = 0; i < n; i++) {\n      const name = input.readString();\n      if (!name)\n        throw new Error(\"Bone name must not be null.\");\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 = 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      if (!slotName)\n        throw new Error(\"Slot name must not be null.\");\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 = 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 name = input.readString();\n      if (!name)\n        throw new Error(\"IK constraint data name must not be null.\");\n      const data = new IkConstraintData(name);\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 name = input.readString();\n      if (!name)\n        throw new Error(\"Transform constraint data name must not be null.\");\n      const data = new TransformConstraintData(name);\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.mixRotate = input.readFloat();\n      data.mixX = input.readFloat();\n      data.mixY = input.readFloat();\n      data.mixScaleX = input.readFloat();\n      data.mixScaleY = input.readFloat();\n      data.mixShearY = input.readFloat();\n      skeletonData.transformConstraints.push(data);\n    }\n    n = input.readInt(true);\n    for (let i = 0, nn; i < n; i++) {\n      const name = input.readString();\n      if (!name)\n        throw new Error(\"Path constraint data name must not be null.\");\n      const data = new PathConstraintData(name);\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 = input.readInt(true);\n      data.spacingMode = input.readInt(true);\n      data.rotateMode = 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.mixRotate = input.readFloat();\n      data.mixX = input.readFloat();\n      data.mixY = input.readFloat();\n      skeletonData.pathConstraints.push(data);\n    }\n    const defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n    if (defaultSkin) {\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        const skin = this.readSkin(input, skeletonData, false, nonessential);\n        if (!skin)\n          throw new Error(\"readSkin() should not have returned null.\");\n        skeletonData.skins[i] = skin;\n      }\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 ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n      if (!skin)\n        throw new Error(\"Not skin found for linked mesh.\");\n      if (!linkedMesh.parent)\n        throw new Error(\"Linked mesh parent must not be null\");\n      const parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n      if (!parent)\n        throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n      linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? 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 eventName = input.readStringRef();\n      if (!eventName)\n        throw new Error();\n      const data = new EventData(eventName);\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) {\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      const animationName = input.readString();\n      if (!animationName)\n        throw new Error(\"Animatio name must not be null.\");\n      skeletonData.animations.push(this.readAnimation(input, animationName, skeletonData));\n    }\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      const skinName = input.readStringRef();\n      if (!skinName)\n        throw new Error(\"Skin name must not be null.\");\n      skin = new Skin(skinName);\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        if (!name)\n          throw new Error(\"Attachment name must not be null\");\n        const attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);\n        if (attachment)\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)\n      name = attachmentName;\n    switch (input.readByte()) {\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        const sequence = this.readSequence(input);\n        if (!path)\n          path = name;\n        const region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n        if (!region)\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        region.sequence = sequence;\n        if (sequence == null)\n          region.updateRegion();\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)\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        const sequence = this.readSequence(input);\n        let edges = [];\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)\n          path = name;\n        const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n        if (!mesh)\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        mesh.sequence = sequence;\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 inheritTimelines = input.readBoolean();\n        const sequence = this.readSequence(input);\n        let width = 0;\n        let height = 0;\n        if (nonessential) {\n          width = input.readFloat();\n          height = input.readFloat();\n        }\n        if (!path)\n          path = name;\n        const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n        if (!mesh)\n          return null;\n        mesh.path = path;\n        Color.rgba8888ToColor(mesh.color, color);\n        mesh.sequence = sequence;\n        if (nonessential) {\n          mesh.width = width * scale;\n          mesh.height = height * scale;\n        }\n        this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritTimelines));\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)\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)\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)\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  readSequence(input) {\n    if (this.ver40 || !input.readBoolean())\n      return null;\n    const sequence = new Sequence(input.readInt(true));\n    sequence.start = input.readInt(true);\n    sequence.digits = input.readInt(true);\n    sequence.setupIndex = input.readInt(true);\n    return sequence;\n  }\n  readDeformTimelineType(input) {\n    if (this.ver40)\n      return ATTACHMENT_DEFORM;\n    return input.readByte();\n  }\n  readVertices(input, vertexCount) {\n    const scale = this.scale;\n    const verticesLength = vertexCount << 1;\n    const vertices = new Vertices();\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    input.readInt(true);\n    const timelines = new Array();\n    const scale = this.scale;\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        const frameLast = frameCount - 1;\n        switch (timelineType) {\n          case SLOT_ATTACHMENT: {\n            const timeline = new AttachmentTimeline(frameCount, slotIndex);\n            for (let frame = 0; frame < frameCount; frame++)\n              timeline.setFrame(frame, input.readFloat(), input.readStringRef());\n            timelines.push(timeline);\n            break;\n          }\n          case SLOT_RGBA: {\n            const bezierCount = input.readInt(true);\n            const timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);\n            let time = input.readFloat();\n            let r = input.readUnsignedByte() / 255;\n            let g = input.readUnsignedByte() / 255;\n            let b = input.readUnsignedByte() / 255;\n            let a = input.readUnsignedByte() / 255;\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, r, g, b, a);\n              if (frame == frameLast)\n                break;\n              const time2 = input.readFloat();\n              const r2 = input.readUnsignedByte() / 255;\n              const g2 = input.readUnsignedByte() / 255;\n              const b2 = input.readUnsignedByte() / 255;\n              const a2 = input.readUnsignedByte() / 255;\n              switch (input.readByte()) {\n                case CURVE_STEPPED:\n                  timeline.setStepped(frame);\n                  break;\n                case CURVE_BEZIER:\n                  setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n                  setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n                  setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n                  setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);\n              }\n              time = time2;\n              r = r2;\n              g = g2;\n              b = b2;\n              a = a2;\n            }\n            timelines.push(timeline);\n            break;\n          }\n          case SLOT_RGB: {\n            const bezierCount = input.readInt(true);\n            const timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);\n            let time = input.readFloat();\n            let r = input.readUnsignedByte() / 255;\n            let g = input.readUnsignedByte() / 255;\n            let b = input.readUnsignedByte() / 255;\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, r, g, b);\n              if (frame == frameLast)\n                break;\n              const time2 = input.readFloat();\n              const r2 = input.readUnsignedByte() / 255;\n              const g2 = input.readUnsignedByte() / 255;\n              const b2 = input.readUnsignedByte() / 255;\n              switch (input.readByte()) {\n                case CURVE_STEPPED:\n                  timeline.setStepped(frame);\n                  break;\n                case CURVE_BEZIER:\n                  setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n                  setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n                  setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n              }\n              time = time2;\n              r = r2;\n              g = g2;\n              b = b2;\n            }\n            timelines.push(timeline);\n            break;\n          }\n          case SLOT_RGBA2: {\n            const bezierCount = input.readInt(true);\n            const timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);\n            let time = input.readFloat();\n            let r = input.readUnsignedByte() / 255;\n            let g = input.readUnsignedByte() / 255;\n            let b = input.readUnsignedByte() / 255;\n            let a = input.readUnsignedByte() / 255;\n            let r2 = input.readUnsignedByte() / 255;\n            let g2 = input.readUnsignedByte() / 255;\n            let b2 = input.readUnsignedByte() / 255;\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);\n              if (frame == frameLast)\n                break;\n              const time2 = input.readFloat();\n              const nr = input.readUnsignedByte() / 255;\n              const ng = input.readUnsignedByte() / 255;\n              const nb = input.readUnsignedByte() / 255;\n              const na = input.readUnsignedByte() / 255;\n              const nr2 = input.readUnsignedByte() / 255;\n              const ng2 = input.readUnsignedByte() / 255;\n              const nb2 = input.readUnsignedByte() / 255;\n              switch (input.readByte()) {\n                case CURVE_STEPPED:\n                  timeline.setStepped(frame);\n                  break;\n                case CURVE_BEZIER:\n                  setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n                  setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n                  setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n                  setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);\n                  setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);\n                  setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);\n                  setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);\n              }\n              time = time2;\n              r = nr;\n              g = ng;\n              b = nb;\n              a = na;\n              r2 = nr2;\n              g2 = ng2;\n              b2 = nb2;\n            }\n            timelines.push(timeline);\n            break;\n          }\n          case SLOT_RGB2: {\n            const bezierCount = input.readInt(true);\n            const timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);\n            let time = input.readFloat();\n            let r = input.readUnsignedByte() / 255;\n            let g = input.readUnsignedByte() / 255;\n            let b = input.readUnsignedByte() / 255;\n            let r2 = input.readUnsignedByte() / 255;\n            let g2 = input.readUnsignedByte() / 255;\n            let b2 = input.readUnsignedByte() / 255;\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, r, g, b, r2, g2, b2);\n              if (frame == frameLast)\n                break;\n              const time2 = input.readFloat();\n              const nr = input.readUnsignedByte() / 255;\n              const ng = input.readUnsignedByte() / 255;\n              const nb = input.readUnsignedByte() / 255;\n              const nr2 = input.readUnsignedByte() / 255;\n              const ng2 = input.readUnsignedByte() / 255;\n              const nb2 = input.readUnsignedByte() / 255;\n              switch (input.readByte()) {\n                case CURVE_STEPPED:\n                  timeline.setStepped(frame);\n                  break;\n                case CURVE_BEZIER:\n                  setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n                  setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n                  setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n                  setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);\n                  setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);\n                  setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);\n              }\n              time = time2;\n              r = nr;\n              g = ng;\n              b = nb;\n              r2 = nr2;\n              g2 = ng2;\n              b2 = nb2;\n            }\n            timelines.push(timeline);\n            break;\n          }\n          case SLOT_ALPHA: {\n            const timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);\n            let time = input.readFloat();\n            let a = input.readUnsignedByte() / 255;\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, a);\n              if (frame == frameLast)\n                break;\n              const time2 = input.readFloat();\n              const a2 = input.readUnsignedByte() / 255;\n              switch (input.readByte()) {\n                case CURVE_STEPPED:\n                  timeline.setStepped(frame);\n                  break;\n                case CURVE_BEZIER:\n                  setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);\n              }\n              time = time2;\n              a = a2;\n            }\n            timelines.push(timeline);\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 type = input.readByte();\n        const frameCount = input.readInt(true);\n        const bezierCount = input.readInt(true);\n        switch (type) {\n          case BONE_ROTATE:\n            timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));\n            break;\n          case BONE_TRANSLATE:\n            timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));\n            break;\n          case BONE_TRANSLATEX:\n            timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));\n            break;\n          case BONE_TRANSLATEY:\n            timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));\n            break;\n          case BONE_SCALE:\n            timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));\n            break;\n          case BONE_SCALEX:\n            timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));\n            break;\n          case BONE_SCALEY:\n            timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));\n            break;\n          case BONE_SHEAR:\n            timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));\n            break;\n          case BONE_SHEARX:\n            timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));\n            break;\n          case BONE_SHEARY:\n            timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));\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 frameLast = frameCount - 1;\n      const timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n      let time = input.readFloat();\n      let mix = input.readFloat();\n      let softness = input.readFloat() * scale;\n      for (let frame = 0, bezier = 0; ; frame++) {\n        timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());\n        if (frame == frameLast)\n          break;\n        const time2 = input.readFloat();\n        const mix2 = input.readFloat();\n        const softness2 = input.readFloat() * scale;\n        switch (input.readByte()) {\n          case CURVE_STEPPED:\n            timeline.setStepped(frame);\n            break;\n          case CURVE_BEZIER:\n            setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n            setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);\n        }\n        time = time2;\n        mix = mix2;\n        softness = softness2;\n      }\n      timelines.push(timeline);\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 frameLast = frameCount - 1;\n      const timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);\n      let time = input.readFloat();\n      let mixRotate = input.readFloat();\n      let mixX = input.readFloat();\n      let mixY = input.readFloat();\n      let mixScaleX = input.readFloat();\n      let mixScaleY = input.readFloat();\n      let mixShearY = input.readFloat();\n      for (let frame = 0, bezier = 0; ; frame++) {\n        timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n        if (frame == frameLast)\n          break;\n        const time2 = input.readFloat();\n        const mixRotate2 = input.readFloat();\n        const mixX2 = input.readFloat();\n        const mixY2 = input.readFloat();\n        const mixScaleX2 = input.readFloat();\n        const mixScaleY2 = input.readFloat();\n        const mixShearY2 = input.readFloat();\n        switch (input.readByte()) {\n          case CURVE_STEPPED:\n            timeline.setStepped(frame);\n            break;\n          case CURVE_BEZIER:\n            setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n            setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n            setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n            setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n            setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n            setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n        }\n        time = time2;\n        mixRotate = mixRotate2;\n        mixX = mixX2;\n        mixY = mixY2;\n        mixScaleX = mixScaleX2;\n        mixScaleY = mixScaleY2;\n        mixShearY = mixShearY2;\n      }\n      timelines.push(timeline);\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        switch (input.readByte()) {\n          case PATH_POSITION:\n            timelines.push(\n              readTimeline1(\n                input,\n                new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index),\n                data.positionMode == PositionMode.Fixed ? scale : 1\n              )\n            );\n            break;\n          case PATH_SPACING:\n            timelines.push(\n              readTimeline1(\n                input,\n                new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index),\n                data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1\n              )\n            );\n            break;\n          case PATH_MIX:\n            const timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);\n            let time = input.readFloat();\n            let mixRotate = input.readFloat();\n            let mixX = input.readFloat();\n            let mixY = input.readFloat();\n            for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n              timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n              if (frame == frameLast)\n                break;\n              const time2 = input.readFloat();\n              const mixRotate2 = input.readFloat();\n              const mixX2 = input.readFloat();\n              const mixY2 = input.readFloat();\n              switch (input.readByte()) {\n                case CURVE_STEPPED:\n                  timeline.setStepped(frame);\n                  break;\n                case CURVE_BEZIER:\n                  setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n                  setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n                  setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n              }\n              time = time2;\n              mixRotate = mixRotate2;\n              mixX = mixX2;\n              mixY = mixY2;\n            }\n            timelines.push(timeline);\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 attachmentName = input.readStringRef();\n          if (!attachmentName)\n            throw new Error(\"attachmentName must not be null.\");\n          const attachment = skin.getAttachment(slotIndex, attachmentName);\n          const timelineType = this.readDeformTimelineType(input);\n          const frameCount = input.readInt(true);\n          const frameLast = frameCount - 1;\n          switch (timelineType) {\n            case ATTACHMENT_DEFORM: {\n              const vertexAttachment = attachment;\n              const weighted = vertexAttachment.bones;\n              const vertices = vertexAttachment.vertices;\n              const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n              const bezierCount = input.readInt(true);\n              const timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);\n              let time = input.readFloat();\n              for (let frame = 0, bezier = 0; ; frame++) {\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(frame, time, deform);\n                if (frame == frameLast)\n                  break;\n                const time2 = input.readFloat();\n                switch (input.readByte()) {\n                  case CURVE_STEPPED:\n                    timeline.setStepped(frame);\n                    break;\n                  case CURVE_BEZIER:\n                    setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);\n                }\n                time = time2;\n              }\n              timelines.push(timeline);\n              break;\n            }\n            case ATTACHMENT_SEQUENCE: {\n              const timeline = new SequenceTimeline(frameCount, slotIndex, attachment);\n              for (let frame = 0; frame < frameCount; frame++) {\n                const time = input.readFloat();\n                const modeAndIndex = input.readInt32();\n                timeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 15], modeAndIndex >> 4, input.readFloat());\n              }\n              timelines.push(timeline);\n              break;\n            }\n          }\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    }\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) {\n          event.volume = input.readFloat();\n          event.balance = input.readFloat();\n        }\n        timeline.setFrame(i, event);\n      }\n      timelines.push(timeline);\n    }\n    let duration = 0;\n    for (let i = 0, n = timelines.length; i < n; i++)\n      duration = Math.max(duration, timelines[i].getDuration());\n    return new Animation(name, timelines, duration);\n  }\n}\nSkeletonBinary.BlendModeValues = [BLEND_MODES.NORMAL, BLEND_MODES.ADD, BLEND_MODES.MULTIPLY, BLEND_MODES.SCREEN];\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.inheritTimeline = inheritDeform;\n  }\n}\nclass Vertices {\n  constructor(bones = null, vertices = null) {\n    this.bones = bones;\n    this.vertices = vertices;\n  }\n}\nfunction readTimeline1(input, timeline, scale) {\n  let time = input.readFloat();\n  let value = input.readFloat() * scale;\n  for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n    timeline.setFrame(frame, time, value);\n    if (frame == frameLast)\n      break;\n    const time2 = input.readFloat();\n    const value2 = input.readFloat() * scale;\n    switch (input.readByte()) {\n      case CURVE_STEPPED:\n        timeline.setStepped(frame);\n        break;\n      case CURVE_BEZIER:\n        setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);\n    }\n    time = time2;\n    value = value2;\n  }\n  return timeline;\n}\nfunction readTimeline2(input, timeline, scale) {\n  let time = input.readFloat();\n  let value1 = input.readFloat() * scale;\n  let value2 = input.readFloat() * scale;\n  for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n    timeline.setFrame(frame, time, value1, value2);\n    if (frame == frameLast)\n      break;\n    const time2 = input.readFloat();\n    const nvalue1 = input.readFloat() * scale;\n    const nvalue2 = input.readFloat() * scale;\n    switch (input.readByte()) {\n      case CURVE_STEPPED:\n        timeline.setStepped(frame);\n        break;\n      case CURVE_BEZIER:\n        setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);\n        setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);\n    }\n    time = time2;\n    value1 = nvalue1;\n    value2 = nvalue2;\n  }\n  return timeline;\n}\nfunction setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {\n  timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);\n}\nconst BONE_ROTATE = 0;\nconst BONE_TRANSLATE = 1;\nconst BONE_TRANSLATEX = 2;\nconst BONE_TRANSLATEY = 3;\nconst BONE_SCALE = 4;\nconst BONE_SCALEX = 5;\nconst BONE_SCALEY = 6;\nconst BONE_SHEAR = 7;\nconst BONE_SHEARX = 8;\nconst BONE_SHEARY = 9;\nconst SLOT_ATTACHMENT = 0;\nconst SLOT_RGBA = 1;\nconst SLOT_RGB = 2;\nconst SLOT_RGBA2 = 3;\nconst SLOT_RGB2 = 4;\nconst SLOT_ALPHA = 5;\nconst ATTACHMENT_DEFORM = 0;\nconst ATTACHMENT_SEQUENCE = 1;\nconst PATH_POSITION = 0;\nconst PATH_SPACING = 1;\nconst PATH_MIX = 2;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\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 { AttachmentTimeline, RGBATimeline, RGBTimeline, AlphaTimeline, RGBA2Timeline, RGB2Timeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, SequenceTimeline, DrawOrderTimeline, EventTimeline, Animation } from './Animation.mjs';\nimport { 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 { Utils, TransformMode, Color, PositionMode, RotateMode, settings } from '@pixi-spine/base';\nimport { BLEND_MODES } from '@pixi/core';\nimport { Sequence, SequenceMode } from './attachments/Sequence.mjs';\n\nclass SkeletonJson {\n  constructor(attachmentLoader) {\n    /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n     * runtime than were used in Spine.\n     *\n     * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\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) {\n      skeletonData.hash = skeletonMap.hash;\n      skeletonData.version = skeletonMap.spine;\n      const verShort = skeletonData.version.substr(0, 3);\n      if (verShort !== \"4.0\" && verShort !== \"4.1\") {\n        const error = `Spine 4.1 loader cant load version ${skeletonMap.spine}. Please configure your pixi-spine bundle`;\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 = 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 = getValue(boneMap, \"length\", 0) * scale;\n        data.x = getValue(boneMap, \"x\", 0) * scale;\n        data.y = getValue(boneMap, \"y\", 0) * scale;\n        data.rotation = getValue(boneMap, \"rotation\", 0);\n        data.scaleX = getValue(boneMap, \"scaleX\", 1);\n        data.scaleY = getValue(boneMap, \"scaleY\", 1);\n        data.shearX = getValue(boneMap, \"shearX\", 0);\n        data.shearY = getValue(boneMap, \"shearY\", 0);\n        data.transformMode = Utils.enumValue(TransformMode, getValue(boneMap, \"transform\", \"Normal\"));\n        data.skinRequired = getValue(boneMap, \"skin\", false);\n        const color = getValue(boneMap, \"color\", null);\n        if (color)\n          data.color.setFromString(color);\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 boneData = skeletonData.findBone(slotMap.bone);\n        if (!boneData)\n          throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotMap.name}`);\n        const data = new SlotData(skeletonData.slots.length, slotMap.name, boneData);\n        const color = getValue(slotMap, \"color\", null);\n        if (color)\n          data.color.setFromString(color);\n        const dark = getValue(slotMap, \"dark\", null);\n        if (dark)\n          data.darkColor = Color.fromString(dark);\n        data.attachmentName = getValue(slotMap, \"attachment\", null);\n        data.blendMode = SkeletonJson.blendModeFromString(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 = getValue(constraintMap, \"order\", 0);\n        data.skinRequired = getValue(constraintMap, \"skin\", false);\n        for (let ii = 0; ii < constraintMap.bones.length; ii++) {\n          const boneName = constraintMap.bones[ii];\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        data.target = skeletonData.findBone(constraintMap.target);\n        data.mix = getValue(constraintMap, \"mix\", 1);\n        data.softness = getValue(constraintMap, \"softness\", 0) * scale;\n        data.bendDirection = getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n        data.compress = getValue(constraintMap, \"compress\", false);\n        data.stretch = getValue(constraintMap, \"stretch\", false);\n        data.uniform = 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 = getValue(constraintMap, \"order\", 0);\n        data.skinRequired = getValue(constraintMap, \"skin\", false);\n        for (let ii = 0; ii < constraintMap.bones.length; ii++) {\n          const boneName = constraintMap.bones[ii];\n          const bone = skeletonData.findBone(boneName);\n          if (!bone)\n            throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`);\n          data.bones.push(bone);\n        }\n        const targetName = constraintMap.target;\n        const target = skeletonData.findBone(targetName);\n        if (!target)\n          throw new Error(`Couldn't find target bone ${targetName} for transform constraint ${constraintMap.name}.`);\n        data.target = target;\n        data.local = getValue(constraintMap, \"local\", false);\n        data.relative = getValue(constraintMap, \"relative\", false);\n        data.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n        data.offsetX = getValue(constraintMap, \"x\", 0) * scale;\n        data.offsetY = getValue(constraintMap, \"y\", 0) * scale;\n        data.offsetScaleX = getValue(constraintMap, \"scaleX\", 0);\n        data.offsetScaleY = getValue(constraintMap, \"scaleY\", 0);\n        data.offsetShearY = getValue(constraintMap, \"shearY\", 0);\n        data.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n        data.mixX = getValue(constraintMap, \"mixX\", 1);\n        data.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n        data.mixScaleX = getValue(constraintMap, \"mixScaleX\", 1);\n        data.mixScaleY = getValue(constraintMap, \"mixScaleY\", data.mixScaleX);\n        data.mixShearY = getValue(constraintMap, \"mixShearY\", 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 = getValue(constraintMap, \"order\", 0);\n        data.skinRequired = getValue(constraintMap, \"skin\", false);\n        for (let ii = 0; ii < constraintMap.bones.length; ii++) {\n          const boneName = constraintMap.bones[ii];\n          const bone = skeletonData.findBone(boneName);\n          if (!bone)\n            throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`);\n          data.bones.push(bone);\n        }\n        const targetName = constraintMap.target;\n        const target = skeletonData.findSlot(targetName);\n        if (!target)\n          throw new Error(`Couldn't find target slot ${targetName} for path constraint ${constraintMap.name}.`);\n        data.target = target;\n        data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, \"positionMode\", \"Percent\"));\n        data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, \"spacingMode\", \"Length\"));\n        data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, \"rotateMode\", \"Tangent\"));\n        data.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n        data.position = getValue(constraintMap, \"position\", 0);\n        if (data.positionMode == PositionMode.Fixed)\n          data.position *= scale;\n        data.spacing = getValue(constraintMap, \"spacing\", 0);\n        if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n          data.spacing *= scale;\n        data.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n        data.mixX = getValue(constraintMap, \"mixX\", 1);\n        data.mixY = getValue(constraintMap, \"mixY\", data.mixX);\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 boneName = skinMap.bones[ii];\n            const bone = skeletonData.findBone(boneName);\n            if (!bone)\n              throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`);\n            skin.bones.push(bone);\n          }\n        }\n        if (skinMap.ik) {\n          for (let ii = 0; ii < skinMap.ik.length; ii++) {\n            const constraintName = skinMap.ik[ii];\n            const constraint = skeletonData.findIkConstraint(constraintName);\n            if (!constraint)\n              throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`);\n            skin.constraints.push(constraint);\n          }\n        }\n        if (skinMap.transform) {\n          for (let ii = 0; ii < skinMap.transform.length; ii++) {\n            const constraintName = skinMap.transform[ii];\n            const constraint = skeletonData.findTransformConstraint(constraintName);\n            if (!constraint)\n              throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`);\n            skin.constraints.push(constraint);\n          }\n        }\n        if (skinMap.path) {\n          for (let ii = 0; ii < skinMap.path.length; ii++) {\n            const constraintName = skinMap.path[ii];\n            const constraint = skeletonData.findPathConstraint(constraintName);\n            if (!constraint)\n              throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`);\n            skin.constraints.push(constraint);\n          }\n        }\n        for (const slotName in skinMap.attachments) {\n          const slot = skeletonData.findSlot(slotName);\n          if (!slot)\n            throw new Error(`Couldn't find slot ${slotName} for skin ${skinMap.name}.`);\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)\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 ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n      if (!skin)\n        throw new Error(`Skin not found: ${linkedMesh.skin}`);\n      const parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n      if (!parent)\n        throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n      linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? 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 = getValue(eventMap, \"int\", 0);\n        data.floatValue = getValue(eventMap, \"float\", 0);\n        data.stringValue = getValue(eventMap, \"string\", \"\");\n        data.audioPath = getValue(eventMap, \"audio\", null);\n        if (data.audioPath) {\n          data.volume = getValue(eventMap, \"volume\", 1);\n          data.balance = 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 = getValue(map, \"name\", name);\n    switch (getValue(map, \"type\", \"region\")) {\n      case \"region\": {\n        const path = getValue(map, \"path\", name);\n        const sequence = this.readSequence(getValue(map, \"sequence\", null));\n        const region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n        if (!region)\n          return null;\n        region.path = path;\n        region.x = getValue(map, \"x\", 0) * scale;\n        region.y = getValue(map, \"y\", 0) * scale;\n        region.scaleX = getValue(map, \"scaleX\", 1);\n        region.scaleY = getValue(map, \"scaleY\", 1);\n        region.rotation = getValue(map, \"rotation\", 0);\n        region.width = map.width * scale;\n        region.height = map.height * scale;\n        region.sequence = sequence;\n        const color = getValue(map, \"color\", null);\n        if (color)\n          region.color.setFromString(color);\n        return region;\n      }\n      case \"boundingbox\": {\n        const box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n        if (!box)\n          return null;\n        this.readVertices(map, box, map.vertexCount << 1);\n        const color = getValue(map, \"color\", null);\n        if (color)\n          box.color.setFromString(color);\n        return box;\n      }\n      case \"mesh\":\n      case \"linkedmesh\": {\n        const path = getValue(map, \"path\", name);\n        const sequence = this.readSequence(getValue(map, \"sequence\", null));\n        const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n        if (!mesh)\n          return null;\n        mesh.path = path;\n        const color = getValue(map, \"color\", null);\n        if (color)\n          mesh.color.setFromString(color);\n        mesh.width = getValue(map, \"width\", 0) * scale;\n        mesh.height = getValue(map, \"height\", 0) * scale;\n        mesh.sequence = sequence;\n        const parent = getValue(map, \"parent\", null);\n        if (parent) {\n          this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, \"skin\", null), slotIndex, parent, getValue(map, \"timelines\", 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 = getValue(map, \"edges\", null);\n        mesh.hullLength = getValue(map, \"hull\", 0) * 2;\n        return mesh;\n      }\n      case \"path\": {\n        const path = this.attachmentLoader.newPathAttachment(skin, name);\n        if (!path)\n          return null;\n        path.closed = getValue(map, \"closed\", false);\n        path.constantSpeed = 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 = getValue(map, \"color\", null);\n        if (color)\n          path.color.setFromString(color);\n        return path;\n      }\n      case \"point\": {\n        const point = this.attachmentLoader.newPointAttachment(skin, name);\n        if (!point)\n          return null;\n        point.x = getValue(map, \"x\", 0) * scale;\n        point.y = getValue(map, \"y\", 0) * scale;\n        point.rotation = getValue(map, \"rotation\", 0);\n        const color = getValue(map, \"color\", null);\n        if (color)\n          point.color.setFromString(color);\n        return point;\n      }\n      case \"clipping\": {\n        const clip = this.attachmentLoader.newClippingAttachment(skin, name);\n        if (!clip)\n          return null;\n        const end = 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 = getValue(map, \"color\", null);\n        if (color)\n          clip.color.setFromString(color);\n        return clip;\n      }\n    }\n    return null;\n  }\n  readSequence(map) {\n    if (map == null)\n      return null;\n    const sequence = new Sequence(getValue(map, \"count\", 0));\n    sequence.start = getValue(map, \"start\", 1);\n    sequence.digits = getValue(map, \"digits\", 0);\n    sequence.setupIndex = getValue(map, \"setup\", 0);\n    return sequence;\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    if (map.slots) {\n      for (const slotName in map.slots) {\n        const slotMap = map.slots[slotName];\n        const slot = skeletonData.findSlot(slotName);\n        if (!slot)\n          throw new Error(`Slot not found: ${slotName}`);\n        const slotIndex = slot.index;\n        for (const timelineName in slotMap) {\n          const timelineMap = slotMap[timelineName];\n          if (!timelineMap)\n            continue;\n          const frames = timelineMap.length;\n          if (timelineName == \"attachment\") {\n            const timeline = new AttachmentTimeline(frames, slotIndex);\n            for (let frame = 0; frame < frames; frame++) {\n              const keyMap = timelineMap[frame];\n              timeline.setFrame(frame, getValue(keyMap, \"time\", 0), getValue(keyMap, \"name\", null));\n            }\n            timelines.push(timeline);\n          } else if (timelineName == \"rgba\") {\n            const timeline = new RGBATimeline(frames, frames << 2, slotIndex);\n            let keyMap = timelineMap[0];\n            let time = getValue(keyMap, \"time\", 0);\n            let color = Color.fromString(keyMap.color);\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, color.r, color.g, color.b, color.a);\n              const nextMap = timelineMap[frame + 1];\n              if (!nextMap) {\n                timeline.shrink(bezier);\n                break;\n              }\n              const time2 = getValue(nextMap, \"time\", 0);\n              const newColor = Color.fromString(nextMap.color);\n              const curve = keyMap.curve;\n              if (curve) {\n                bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n              }\n              time = time2;\n              color = newColor;\n              keyMap = nextMap;\n            }\n            timelines.push(timeline);\n          } else if (timelineName == \"rgb\") {\n            const timeline = new RGBTimeline(frames, frames * 3, slotIndex);\n            let keyMap = timelineMap[0];\n            let time = getValue(keyMap, \"time\", 0);\n            let color = Color.fromString(keyMap.color);\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, color.r, color.g, color.b);\n              const nextMap = timelineMap[frame + 1];\n              if (!nextMap) {\n                timeline.shrink(bezier);\n                break;\n              }\n              const time2 = getValue(nextMap, \"time\", 0);\n              const newColor = Color.fromString(nextMap.color);\n              const curve = keyMap.curve;\n              if (curve) {\n                bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n              }\n              time = time2;\n              color = newColor;\n              keyMap = nextMap;\n            }\n            timelines.push(timeline);\n          } else if (timelineName == \"alpha\") {\n            timelines.push(readTimeline1(timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1));\n          } else if (timelineName == \"rgba2\") {\n            const timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);\n            let keyMap = timelineMap[0];\n            let time = getValue(keyMap, \"time\", 0);\n            let color = Color.fromString(keyMap.light);\n            let color2 = Color.fromString(keyMap.dark);\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);\n              const nextMap = timelineMap[frame + 1];\n              if (!nextMap) {\n                timeline.shrink(bezier);\n                break;\n              }\n              const time2 = getValue(nextMap, \"time\", 0);\n              const newColor = Color.fromString(nextMap.light);\n              const newColor2 = Color.fromString(nextMap.dark);\n              const curve = keyMap.curve;\n              if (curve) {\n                bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);\n              }\n              time = time2;\n              color = newColor;\n              color2 = newColor2;\n              keyMap = nextMap;\n            }\n            timelines.push(timeline);\n          } else if (timelineName == \"rgb2\") {\n            const timeline = new RGB2Timeline(frames, frames * 6, slotIndex);\n            let keyMap = timelineMap[0];\n            let time = getValue(keyMap, \"time\", 0);\n            let color = Color.fromString(keyMap.light);\n            let color2 = Color.fromString(keyMap.dark);\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);\n              const nextMap = timelineMap[frame + 1];\n              if (!nextMap) {\n                timeline.shrink(bezier);\n                break;\n              }\n              const time2 = getValue(nextMap, \"time\", 0);\n              const newColor = Color.fromString(nextMap.light);\n              const newColor2 = Color.fromString(nextMap.dark);\n              const curve = keyMap.curve;\n              if (curve) {\n                bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);\n              }\n              time = time2;\n              color = newColor;\n              color2 = newColor2;\n              keyMap = nextMap;\n            }\n            timelines.push(timeline);\n          }\n        }\n      }\n    }\n    if (map.bones) {\n      for (const boneName in map.bones) {\n        const boneMap = map.bones[boneName];\n        const bone = skeletonData.findBone(boneName);\n        if (!bone)\n          throw new Error(`Bone not found: ${boneName}`);\n        const boneIndex = bone.index;\n        for (const timelineName in boneMap) {\n          const timelineMap = boneMap[timelineName];\n          const frames = timelineMap.length;\n          if (frames == 0)\n            continue;\n          if (timelineName === \"rotate\") {\n            timelines.push(readTimeline1(timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1));\n          } else if (timelineName === \"translate\") {\n            const timeline = new TranslateTimeline(frames, frames << 1, boneIndex);\n            timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, scale));\n          } else if (timelineName === \"translatex\") {\n            const timeline = new TranslateXTimeline(frames, frames, boneIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n          } else if (timelineName === \"translatey\") {\n            const timeline = new TranslateYTimeline(frames, frames, boneIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n          } else if (timelineName === \"scale\") {\n            const timeline = new ScaleTimeline(frames, frames << 1, boneIndex);\n            timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 1, 1));\n          } else if (timelineName === \"scalex\") {\n            const timeline = new ScaleXTimeline(frames, frames, boneIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n          } else if (timelineName === \"scaley\") {\n            const timeline = new ScaleYTimeline(frames, frames, boneIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n          } else if (timelineName === \"shear\") {\n            const timeline = new ShearTimeline(frames, frames << 1, boneIndex);\n            timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, 1));\n          } else if (timelineName === \"shearx\") {\n            const timeline = new ShearXTimeline(frames, frames, boneIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n          } else if (timelineName === \"sheary\") {\n            const timeline = new ShearYTimeline(frames, frames, boneIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n          }\n        }\n      }\n    }\n    if (map.ik) {\n      for (const constraintName in map.ik) {\n        const constraintMap = map.ik[constraintName];\n        let keyMap = constraintMap[0];\n        if (!keyMap)\n          continue;\n        const constraint = skeletonData.findIkConstraint(constraintName);\n        if (!constraint)\n          throw new Error(`IK Constraint not found: ${constraintName}`);\n        const constraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n        const timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);\n        let time = getValue(keyMap, \"time\", 0);\n        let mix = getValue(keyMap, \"mix\", 1);\n        let softness = getValue(keyMap, \"softness\", 0) * scale;\n        for (let frame = 0, bezier = 0; ; frame++) {\n          timeline.setFrame(\n            frame,\n            time,\n            mix,\n            softness,\n            getValue(keyMap, \"bendPositive\", true) ? 1 : -1,\n            getValue(keyMap, \"compress\", false),\n            getValue(keyMap, \"stretch\", false)\n          );\n          const nextMap = constraintMap[frame + 1];\n          if (!nextMap) {\n            timeline.shrink(bezier);\n            break;\n          }\n          const time2 = getValue(nextMap, \"time\", 0);\n          const mix2 = getValue(nextMap, \"mix\", 1);\n          const softness2 = getValue(nextMap, \"softness\", 0) * scale;\n          const curve = keyMap.curve;\n          if (curve) {\n            bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);\n            bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);\n          }\n          time = time2;\n          mix = mix2;\n          softness = softness2;\n          keyMap = nextMap;\n        }\n        timelines.push(timeline);\n      }\n    }\n    if (map.transform) {\n      for (const constraintName in map.transform) {\n        const timelineMap = map.transform[constraintName];\n        let keyMap = timelineMap[0];\n        if (!keyMap)\n          continue;\n        const constraint = skeletonData.findTransformConstraint(constraintName);\n        if (!constraint)\n          throw new Error(`Transform constraint not found: ${constraintName}`);\n        const constraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n        const timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6, constraintIndex);\n        let time = getValue(keyMap, \"time\", 0);\n        let mixRotate = getValue(keyMap, \"mixRotate\", 1);\n        let mixX = getValue(keyMap, \"mixX\", 1);\n        let mixY = getValue(keyMap, \"mixY\", mixX);\n        let mixScaleX = getValue(keyMap, \"mixScaleX\", 1);\n        let mixScaleY = getValue(keyMap, \"mixScaleY\", mixScaleX);\n        const mixShearY = getValue(keyMap, \"mixShearY\", 1);\n        for (let frame = 0, bezier = 0; ; frame++) {\n          timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n          const nextMap = timelineMap[frame + 1];\n          if (!nextMap) {\n            timeline.shrink(bezier);\n            break;\n          }\n          const time2 = getValue(nextMap, \"time\", 0);\n          const mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n          const mixX2 = getValue(nextMap, \"mixX\", 1);\n          const mixY2 = getValue(nextMap, \"mixY\", mixX2);\n          const mixScaleX2 = getValue(nextMap, \"mixScaleX\", 1);\n          const mixScaleY2 = getValue(nextMap, \"mixScaleY\", mixScaleX2);\n          const mixShearY2 = getValue(nextMap, \"mixShearY\", 1);\n          const curve = keyMap.curve;\n          if (curve) {\n            bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n            bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n            bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n            bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n            bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n            bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n          }\n          time = time2;\n          mixRotate = mixRotate2;\n          mixX = mixX2;\n          mixY = mixY2;\n          mixScaleX = mixScaleX2;\n          mixScaleY = mixScaleY2;\n          mixScaleX = mixScaleX2;\n          keyMap = nextMap;\n        }\n        timelines.push(timeline);\n      }\n    }\n    if (map.path) {\n      for (const constraintName in map.path) {\n        const constraintMap = map.path[constraintName];\n        const constraint = skeletonData.findPathConstraint(constraintName);\n        if (!constraint)\n          throw new Error(`Path constraint not found: ${constraintName}`);\n        const constraintIndex = skeletonData.pathConstraints.indexOf(constraint);\n        for (const timelineName in constraintMap) {\n          const timelineMap = constraintMap[timelineName];\n          let keyMap = timelineMap[0];\n          if (!keyMap)\n            continue;\n          const frames = timelineMap.length;\n          if (timelineName === \"position\") {\n            const timeline = new PathConstraintPositionTimeline(frames, frames, constraintIndex);\n            timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));\n          } else if (timelineName === \"spacing\") {\n            const timeline = new PathConstraintSpacingTimeline(frames, frames, constraintIndex);\n            timelines.push(\n              readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1)\n            );\n          } else if (timelineName === \"mix\") {\n            const timeline = new PathConstraintMixTimeline(frames, frames * 3, constraintIndex);\n            let time = getValue(keyMap, \"time\", 0);\n            let mixRotate = getValue(keyMap, \"mixRotate\", 1);\n            let mixX = getValue(keyMap, \"mixX\", 1);\n            let mixY = getValue(keyMap, \"mixY\", mixX);\n            for (let frame = 0, bezier = 0; ; frame++) {\n              timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n              const nextMap = timelineMap[frame + 1];\n              if (!nextMap) {\n                timeline.shrink(bezier);\n                break;\n              }\n              const time2 = getValue(nextMap, \"time\", 0);\n              const mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n              const mixX2 = getValue(nextMap, \"mixX\", 1);\n              const mixY2 = getValue(nextMap, \"mixY\", mixX2);\n              const curve = keyMap.curve;\n              if (curve) {\n                bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n                bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n              }\n              time = time2;\n              mixRotate = mixRotate2;\n              mixX = mixX2;\n              mixY = mixY2;\n              keyMap = nextMap;\n            }\n            timelines.push(timeline);\n          }\n        }\n      }\n    }\n    if (map.deform) {\n      map.attachments = {};\n      for (const deformName in map.deform) {\n        const deformMap = map.deform[deformName];\n        const outMap = map.attachments[deformName] = {};\n        for (const slotName in deformMap) {\n          const slotMap = deformMap[slotName];\n          const outMap2 = outMap[slotName] = {};\n          for (const innerMapName in slotMap) {\n            outMap2[innerMapName] = {\n              deform: slotMap[innerMapName]\n            };\n          }\n        }\n      }\n    }\n    if (map.attachments) {\n      for (const attachmentsName in map.attachments) {\n        const attachmentsMap = map.attachments[attachmentsName];\n        const skin = skeletonData.findSkin(attachmentsName);\n        if (skin == null) {\n          if (settings.FAIL_ON_NON_EXISTING_SKIN) {\n            throw new Error(`Skin not found: ${attachmentsName}`);\n          } else {\n            continue;\n          }\n        }\n        for (const slotMapName in attachmentsMap) {\n          const slotMap = attachmentsMap[slotMapName];\n          const slot = skeletonData.findSlot(slotMapName);\n          if (!slot)\n            throw new Error(`Slot not found: ${slotMapName}`);\n          const slotIndex = slot.index;\n          for (const attachmentMapName in slotMap) {\n            const attachmentMap = slotMap[attachmentMapName];\n            const attachment = skin.getAttachment(slotIndex, attachmentMapName);\n            for (const timelineMapName in attachmentMap) {\n              const timelineMap = attachmentMap[timelineMapName];\n              let keyMap = timelineMap[0];\n              if (!keyMap)\n                continue;\n              if (timelineMapName == \"deform\") {\n                const weighted = attachment.bones;\n                const vertices = attachment.vertices;\n                const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n                const timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);\n                let time = getValue(keyMap, \"time\", 0);\n                for (let frame = 0, bezier = 0; ; frame++) {\n                  let deform;\n                  const verticesValue = getValue(keyMap, \"vertices\", null);\n                  if (!verticesValue)\n                    deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n                  else {\n                    deform = Utils.newFloatArray(deformLength);\n                    const start = getValue(keyMap, \"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(frame, time, deform);\n                  const nextMap = timelineMap[frame + 1];\n                  if (!nextMap) {\n                    timeline.shrink(bezier);\n                    break;\n                  }\n                  const time2 = getValue(nextMap, \"time\", 0);\n                  const curve = keyMap.curve;\n                  if (curve)\n                    bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);\n                  time = time2;\n                  keyMap = nextMap;\n                }\n                timelines.push(timeline);\n              } else if (timelineMapName == \"sequence\") {\n                const timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment);\n                let lastDelay = 0;\n                for (let frame = 0; frame < timelineMap.length; frame++) {\n                  const delay = getValue(keyMap, \"delay\", lastDelay);\n                  const time = getValue(keyMap, \"time\", 0);\n                  const mode = SequenceMode[getValue(keyMap, \"mode\", \"hold\")];\n                  const index = getValue(keyMap, \"index\", 0);\n                  timeline.setFrame(frame, time, mode, index, delay);\n                  lastDelay = delay;\n                  keyMap = timelineMap[frame + 1];\n                }\n                timelines.push(timeline);\n              }\n            }\n          }\n        }\n      }\n    }\n    if (map.drawOrder) {\n      const timeline = new DrawOrderTimeline(map.drawOrder.length);\n      const slotCount = skeletonData.slots.length;\n      let frame = 0;\n      for (let i = 0; i < map.drawOrder.length; i++, frame++) {\n        const drawOrderMap = map.drawOrder[i];\n        let drawOrder = null;\n        const offsets = getValue(drawOrderMap, \"offsets\", null);\n        if (offsets) {\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 ii = 0; ii < offsets.length; ii++) {\n            const offsetMap = offsets[ii];\n            const slot = skeletonData.findSlot(offsetMap.slot);\n            if (!slot)\n              throw new Error(`Slot not found: ${slot}`);\n            const slotIndex = slot.index;\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 ii = slotCount - 1; ii >= 0; ii--)\n            if (drawOrder[ii] == -1)\n              drawOrder[ii] = unchanged[--unchangedIndex];\n        }\n        timeline.setFrame(frame, getValue(drawOrderMap, \"time\", 0), drawOrder);\n      }\n      timelines.push(timeline);\n    }\n    if (map.events) {\n      const timeline = new EventTimeline(map.events.length);\n      let frame = 0;\n      for (let i = 0; i < map.events.length; i++, frame++) {\n        const eventMap = map.events[i];\n        const eventData = skeletonData.findEvent(eventMap.name);\n        if (!eventData)\n          throw new Error(`Event not found: ${eventMap.name}`);\n        const event = new Event(Utils.toSinglePrecision(getValue(eventMap, \"time\", 0)), eventData);\n        event.intValue = getValue(eventMap, \"int\", eventData.intValue);\n        event.floatValue = getValue(eventMap, \"float\", eventData.floatValue);\n        event.stringValue = getValue(eventMap, \"string\", eventData.stringValue);\n        if (event.data.audioPath) {\n          event.volume = getValue(eventMap, \"volume\", 1);\n          event.balance = getValue(eventMap, \"balance\", 0);\n        }\n        timeline.setFrame(frame, event);\n      }\n      timelines.push(timeline);\n    }\n    let duration = 0;\n    for (let i = 0, n = timelines.length; i < n; i++)\n      duration = Math.max(duration, timelines[i].getDuration());\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  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}\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.inheritTimeline = inheritDeform;\n  }\n}\nfunction readTimeline1(keys, timeline, defaultValue, scale) {\n  let keyMap = keys[0];\n  let time = getValue(keyMap, \"time\", 0);\n  let value = getValue(keyMap, \"value\", defaultValue) * scale;\n  let bezier = 0;\n  for (let frame = 0; ; frame++) {\n    timeline.setFrame(frame, time, value);\n    const nextMap = keys[frame + 1];\n    if (!nextMap) {\n      timeline.shrink(bezier);\n      return timeline;\n    }\n    const time2 = getValue(nextMap, \"time\", 0);\n    const value2 = getValue(nextMap, \"value\", defaultValue) * scale;\n    if (keyMap.curve)\n      bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);\n    time = time2;\n    value = value2;\n    keyMap = nextMap;\n  }\n}\nfunction readTimeline2(keys, timeline, name1, name2, defaultValue, scale) {\n  let keyMap = keys[0];\n  let time = getValue(keyMap, \"time\", 0);\n  let value1 = getValue(keyMap, name1, defaultValue) * scale;\n  let value2 = getValue(keyMap, name2, defaultValue) * scale;\n  let bezier = 0;\n  for (let frame = 0; ; frame++) {\n    timeline.setFrame(frame, time, value1, value2);\n    const nextMap = keys[frame + 1];\n    if (!nextMap) {\n      timeline.shrink(bezier);\n      return timeline;\n    }\n    const time2 = getValue(nextMap, \"time\", 0);\n    const nvalue1 = getValue(nextMap, name1, defaultValue) * scale;\n    const nvalue2 = getValue(nextMap, name2, defaultValue) * scale;\n    const curve = keyMap.curve;\n    if (curve) {\n      bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);\n      bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);\n    }\n    time = time2;\n    value1 = nvalue1;\n    value2 = nvalue2;\n    keyMap = nextMap;\n  }\n}\nfunction readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {\n  if (curve == \"stepped\") {\n    timeline.setStepped(frame);\n    return bezier;\n  }\n  const i = value << 2;\n  const cx1 = curve[i];\n  const cy1 = curve[i + 1] * scale;\n  const cx2 = curve[i + 2];\n  const cy2 = curve[i + 3] * scale;\n  timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);\n  return bezier + 1;\n}\nfunction getValue(map, property, defaultValue) {\n  return map[property] !== void 0 ? map[property] : defaultValue;\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","var SPINE_VERSION = /* @__PURE__ */ ((SPINE_VERSION2) => {\n  SPINE_VERSION2[SPINE_VERSION2[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n  SPINE_VERSION2[SPINE_VERSION2[\"VER37\"] = 37] = \"VER37\";\n  SPINE_VERSION2[SPINE_VERSION2[\"VER38\"] = 38] = \"VER38\";\n  SPINE_VERSION2[SPINE_VERSION2[\"VER40\"] = 40] = \"VER40\";\n  SPINE_VERSION2[SPINE_VERSION2[\"VER41\"] = 41] = \"VER41\";\n  return SPINE_VERSION2;\n})(SPINE_VERSION || {});\nfunction detectSpineVersion(version) {\n  const ver3 = version.substr(0, 3);\n  const verNum = Math.floor(Number(ver3) * 10 + 1e-3);\n  if (ver3 === \"3.7\") {\n    return 37 /* VER37 */;\n  }\n  if (ver3 === \"3.8\") {\n    return 38 /* VER38 */;\n  }\n  if (ver3 === \"4.0\") {\n    return 40 /* VER40 */;\n  }\n  if (ver3 === \"4.1\") {\n    return 41 /* VER41 */;\n  }\n  if (verNum < 37 /* VER37 */) {\n    return 37 /* VER37 */;\n  }\n  return 0 /* UNKNOWN */;\n}\n\nexport { SPINE_VERSION, detectSpineVersion };\n//# sourceMappingURL=versions.mjs.map\n","import { SpineLoaderAbstract } from '@pixi-spine/loader-base';\nimport { BinaryInput } from '@pixi-spine/base';\nimport * as spine38 from '@pixi-spine/runtime-3.8';\nimport * as spine37 from '@pixi-spine/runtime-3.7';\nimport * as spine41 from '@pixi-spine/runtime-4.1';\nimport { detectSpineVersion, SPINE_VERSION } from './versions.mjs';\n\nclass UniBinaryParser {\n  constructor() {\n    this.scale = 1;\n  }\n  readSkeletonData(atlas, dataToParse) {\n    let parser = null;\n    let version = this.readVersionOldFormat(dataToParse);\n    let ver = detectSpineVersion(version);\n    if (ver === SPINE_VERSION.VER38) {\n      parser = new spine38.SkeletonBinary(new spine38.AtlasAttachmentLoader(atlas));\n    }\n    version = this.readVersionNewFormat(dataToParse);\n    ver = detectSpineVersion(version);\n    if (ver === SPINE_VERSION.VER40 || ver === SPINE_VERSION.VER41) {\n      parser = new spine41.SkeletonBinary(new spine41.AtlasAttachmentLoader(atlas));\n    }\n    if (!parser) {\n      const error = `Unsupported version of spine model ${version}, please update pixi-spine`;\n      console.error(error);\n    }\n    parser.scale = this.scale;\n    return parser.readSkeletonData(dataToParse);\n  }\n  readVersionOldFormat(dataToParse) {\n    const input = new BinaryInput(dataToParse);\n    let version;\n    try {\n      input.readString();\n      version = input.readString();\n    } catch (e) {\n      version = \"\";\n    }\n    return version || \"\";\n  }\n  readVersionNewFormat(dataToParse) {\n    const input = new BinaryInput(dataToParse);\n    input.readInt32();\n    input.readInt32();\n    let version;\n    try {\n      version = input.readString();\n    } catch (e) {\n      version = \"\";\n    }\n    return version || \"\";\n  }\n}\nclass UniJsonParser {\n  constructor() {\n    this.scale = 1;\n  }\n  readSkeletonData(atlas, dataToParse) {\n    const version = dataToParse.skeleton.spine;\n    const ver = detectSpineVersion(version);\n    let parser = null;\n    if (ver === SPINE_VERSION.VER37) {\n      parser = new spine37.SkeletonJson(new spine37.AtlasAttachmentLoader(atlas));\n    }\n    if (ver === SPINE_VERSION.VER38) {\n      parser = new spine38.SkeletonJson(new spine38.AtlasAttachmentLoader(atlas));\n    }\n    if (ver === SPINE_VERSION.VER40 || ver === SPINE_VERSION.VER41) {\n      parser = new spine41.SkeletonJson(new spine41.AtlasAttachmentLoader(atlas));\n    }\n    if (!parser) {\n      const error = `Unsupported version of spine model ${version}, please update pixi-spine`;\n      console.error(error);\n    }\n    parser.scale = this.scale;\n    return parser.readSkeletonData(dataToParse);\n  }\n}\nclass SpineLoader extends SpineLoaderAbstract {\n  createBinaryParser() {\n    return new UniBinaryParser();\n  }\n  createJsonParser() {\n    return new UniJsonParser();\n  }\n  parseData(parser, atlas, dataToParse) {\n    const parserCast = parser;\n    return {\n      spineData: parserCast.readSkeletonData(atlas, dataToParse),\n      spineAtlas: atlas\n    };\n  }\n}\n\nexport { SpineLoader };\n//# sourceMappingURL=SpineLoader.mjs.map\n","import { SpineBase } from '@pixi-spine/base';\nimport * as spine38 from '@pixi-spine/runtime-3.8';\nimport * as spine37 from '@pixi-spine/runtime-3.7';\nimport * as spine41 from '@pixi-spine/runtime-4.1';\nimport { detectSpineVersion, SPINE_VERSION } from './versions.mjs';\n\nclass Spine extends SpineBase {\n  createSkeleton(spineData) {\n    const ver = detectSpineVersion(spineData.version);\n    let spine = null;\n    if (ver === SPINE_VERSION.VER37) {\n      spine = spine37;\n    }\n    if (ver === SPINE_VERSION.VER38) {\n      spine = spine38;\n    }\n    if (ver === SPINE_VERSION.VER40 || ver === SPINE_VERSION.VER41) {\n      spine = spine41;\n    }\n    if (!spine) {\n      const error = `Cant detect version of spine model ${spineData.version}`;\n      console.error(error);\n    }\n    this.skeleton = new spine.Skeleton(spineData);\n    this.skeleton.updateWorldTransform();\n    this.stateData = new spine.AnimationStateData(spineData);\n    this.state = new spine.AnimationState(this.stateData);\n  }\n}\n\nexport { Spine };\n//# sourceMappingURL=Spine.mjs.map\n","import '@pixi-spine/loader-base';\nimport { SpineLoader } from './SpineLoader.mjs';\nexport { Spine } from './Spine.mjs';\nexport { SPINE_VERSION, detectSpineVersion } from './versions.mjs';\n\nnew SpineLoader().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","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","c","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","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$2","_VertexAttachment","Attachment","worldVertices","offset","stride","deformArray","w","vx","vy","v","skip","skeletonBones","wx","wy","weight","deform","f","VertexAttachment","copy","BoundingBoxAttachment","ClippingAttachment","parentMesh","MeshAttachment","PathAttachment","point","cos","sin","PointAttachment","Slot$2","time","_RegionAttachment","regionScaleX","regionScaleY","localX","localY","localX2","localY2","radians","localXCos","localXSin","localYCos","localYSin","localX2Cos","localX2Sin","localY2Cos","localY2Sin","vertexOffset","Slot","offsetX","offsetY","RegionAttachment","JitterEffect$1","jitterX","jitterY","position","uv","_SwirlEffect","radius","radAngle","dist","theta","SwirlEffect","Animation$2","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","Animation","prevRotation","frameTime","RotateTimeline","_TranslateTimeline","TranslateTimeline","ScaleTimeline","bx","by","ShearTimeline","_ColorTimeline","setup","ColorTimeline","_TwoColorTimeline","g2","setupLight","setupDark","TwoColorTimeline","AttachmentTimeline$2","zeros","firedEvents","slotAttachment","frameVertices","vertexCount","vertexAttachment","deform2","setupVertices","lastVertices","vertexAttachment2","prevVertices","nextVertices","prev","EventTimeline$2","event","DrawOrderTimeline$2","drawOrderToSetupIndex","_IkConstraintTimeline","mix","softness","bendDirection","compress","stretch","constraint","IkConstraintTimeline","_TransformConstraintTimeline","rotateMix","translateMix","scaleMix","shearMix","translate","shear","TransformConstraintTimeline","_PathConstraintPositionTimeline","PathConstraintPositionTimeline","spacing","PathConstraintSpacingTimeline","_PathConstraintMixTimeline","PathConstraintMixTimeline","_AnimationState","EventQueue","TrackEntry","delta","tracks","currentDelta","next","nextTime","from","to","finished","applied","animationLast","animationTime","timelineCount","timeline","AttachmentTimeline","timelineMode","firstFrame","timelinesRotation","timelineBlend","setupState","attachments","alphaHold","alphaMix","timelineHoldMix","DrawOrderTimeline","holdMix","rotateTimeline","r1","total","diff","lastTotal","lastDiff","dir","animationStart","animationEnd","trackLastWrapped","complete","oldDrainDisabled","trackIndex","interrupt","animationName","animation","delay","mixDuration","timelinesCount","timelineDipMix","propertyIDs","outer","EventTimeline","listener","AnimationState","_TrackEntry","_EventQueue","animState","EventType","objects","listeners","EventType2","AnimationStateAdapter$1","_AnimationStateData","skeletonData","fromName","toName","AnimationStateData","AtlasAttachmentLoader$2","skin","path","Bone$2","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$2","ConstraintData$1","order","skinRequired","Event$2","EventData$2","IkConstraint$2","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","ConstraintData","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$2","targetMat","tb","tc","degRadReflect","offsetShearY","modified","ts","_Skeleton","boneData","Bone","slotData","ikConstraintData","IkConstraint","transformConstraintData","TransformConstraint","pathConstraintData","updateCache","skinBones","ikConstraints","transformConstraints","pathConstraints","ikCount","transformCount","pathCount","constraintCount","constrained","slotBone","pathBones","boneIndex","updateCacheReset","boneName","skinName","newSkin","constraintName","ikConstraint","Skeleton","SkeletonData$2","skins","eventDataName","animations","pathConstraintName","SlotData$2","SkinEntry$1","Skin$2","contained","dictionary","entries","slotAttachments","SkinEntry","oldSkin","skinAttachment","_SkeletonBinary","attachmentLoader","binary","SkeletonData","input","nonessential","BoneData","SlotData","darkColor","IkConstraintData","TransformConstraintData","PathConstraintData","defaultSkin","linkedMesh","EventData","Skin","typeIndex","width","height","box","edges","inheritDeform","LinkedMesh","constantSpeed","endSlotIndex","Vertices","weights","bonesArray","tempColor1","tempColor2","timelineType","timelineScale","iii","nnn","weighted","deformLength","DeformTimeline","vn","drawOrderCount","offsetCount","unchanged","originalIndex","unchangedIndex","eventCount","eventData","Event","SkeletonBinary","BLEND_MODES","LinkedMesh$4","Vertices$1","SkeletonJson$2","json","root","skeletonMap","error","boneMap","parentName","SkeletonJson","slotMap","constraintMap","targetName","skinMap","entryName","eventName","eventMap","animationMap","map","scaledVertices","timelineName","timelineMap","valueMap","deformName","deformMap","verticesValue","drawOrderNode","drawOrderMap","offsets","offsetMap","prop","str","LinkedMesh$3","Attachment$1","sourceAttachment","Slot$1","JitterEffect","Animation$1","AttachmentTimeline$1","attachmentName2","verticesArray","vertices2","EventTimeline$1","DrawOrderTimeline$1","AnimationStateAdapter2","AtlasAttachmentLoader$1","Bone$1","BoneData$1","Event$1","EventData$1","IkConstraint$1","IkConstraintData$1","PathConstraintData$1","TransformConstraint$1","SkeletonData$1","SlotData$1","TransformConstraintData$1","Skin$1","SkeletonJson$1","LinkedMesh$2","_Sequence","Sequence","SequenceMode","SequenceMode2","SequenceModeValues","ids","Property","Timeline","propertyIds","bezierCount","newCurves","bezier","time1","value1","time2","value2","dddx","dddy","ddx","ddy","valueOffset","CurveTimeline1","propertyId","curveType","before","CurveTimeline2","propertyId1","propertyId2","t","TranslateXTimeline","TranslateYTimeline","ScaleXTimeline","ScaleYTimeline","ShearXTimeline","ShearYTimeline","RGBATimeline","RGBTimeline","AlphaTimeline","RGBA2Timeline","RGB2Timeline","_EventTimeline","_DrawOrderTimeline","idx","ikConstraintIndex","transformConstraintIndex","mixRotate","mixX","mixY","mixScaleX","mixScaleY","mixShearY","pathConstraintIndex","_SequenceTimeline","modeAndIndex","SequenceTimeline","applyTime","applyEvents","shortestRotation","SUBSEQUENT","SETUP","FIRST","HOLD_SUBSEQUENT","HOLD_FIRST","CURRENT","HOLD_MIX","AnimationStateAdapter","AtlasAttachmentLoader","sequence","regions","skelX","skelY","sum","multiplier2","multiplier","rootBone","updatable","lowHash","highHash","verShort","inheritTimelines","ATTACHMENT_DEFORM","frameLast","SLOT_ATTACHMENT","SLOT_RGBA","CURVE_STEPPED","CURVE_BEZIER","setBezier","SLOT_RGB","SLOT_RGBA2","nr","ng","nb","na","nr2","ng2","nb2","SLOT_RGB2","SLOT_ALPHA","BONE_ROTATE","readTimeline1","BONE_TRANSLATE","readTimeline2","BONE_TRANSLATEX","BONE_TRANSLATEY","BONE_SCALE","BONE_SCALEX","BONE_SCALEY","BONE_SHEAR","BONE_SHEARX","BONE_SHEARY","mix2","softness2","mixRotate2","mixX2","mixY2","mixScaleX2","mixScaleY2","mixShearY2","PATH_POSITION","PATH_SPACING","PATH_MIX","ATTACHMENT_SEQUENCE","LinkedMesh$1","nvalue1","nvalue2","SkeletonBounds","getValue","keyMap","nextMap","newColor","readCurve","color2","newColor2","constraintIndex","outMap","outMap2","innerMapName","attachmentsName","attachmentsMap","slotMapName","attachmentMapName","attachmentMap","timelineMapName","lastDelay","keys","name1","name2","property","SPINE_VERSION","SPINE_VERSION2","detectSpineVersion","version","ver3","verNum","UniBinaryParser","ver","spine38.SkeletonBinary","spine38.AtlasAttachmentLoader","spine41.SkeletonBinary","spine41.AtlasAttachmentLoader","UniJsonParser","spine37.SkeletonJson","spine37.AtlasAttachmentLoader","spine38.SkeletonJson","spine41.SkeletonJson","SpineLoader","Spine","spine37","spine38","spine41"],"mappings":"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"}