@esotericsoftware/spine-core 4.2.117 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +27 -21
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +132 -0
  16. package/dist/BonePose.js +456 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +16 -5
  20. package/dist/ConstraintData.js +15 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +23 -28
  28. package/dist/IkConstraint.js +122 -124
  29. package/dist/IkConstraintData.d.ts +14 -19
  30. package/dist/IkConstraintData.js +22 -23
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -23
  34. package/dist/PathConstraint.js +162 -139
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +114 -94
  43. package/dist/PhysicsConstraintData.d.ts +28 -13
  44. package/dist/PhysicsConstraintData.js +35 -13
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +1 -1
  58. package/dist/SkeletonBinary.js +655 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +895 -640
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +14 -3
  98. package/dist/Utils.js +80 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7747 -6116
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7747 -6116
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
@@ -27,64 +27,87 @@
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
29
  import { Utils } from "../Utils.js";
30
- /** The base class for all attachments. */
30
+ /** The base class for all attachments. Multiple {@link Skeleton} instances, slots, or skins can use the same attachments. */
31
31
  export class Attachment {
32
+ static empty = [];
32
33
  name;
34
+ /** Timelines for the timeline attachment are also applied to this attachment.
35
+ * @return May be null if no attachment-specific timelines should be applied. */
36
+ timelineAttachment;
37
+ /** Slots that can have attachments whose {@link timelineAttachment} is this attachment. */
38
+ timelineSlots = Attachment.empty;
33
39
  constructor(name) {
34
40
  if (!name)
35
41
  throw new Error("name cannot be null.");
36
42
  this.name = name;
43
+ this.timelineAttachment = this;
44
+ }
45
+ /** Returns true if the {@code slotIndex} or any {@link timelineSlots} have an attachment whose {@link timelineAttachment} is
46
+ * this attachment.
47
+ * @param slots The {@link Skeleton.slots}.
48
+ * @param slotIndex The timeline's primary slot index. */
49
+ isTimelineActive(slots, slotIndex, appliedPose) {
50
+ let slot = slots[slotIndex];
51
+ if (slot.bone.isActive()) {
52
+ const other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();
53
+ if (other != null && other.timelineAttachment === this)
54
+ return true;
55
+ }
56
+ for (let i = 0, n = this.timelineSlots.length; i < n; i++) {
57
+ slot = slots[this.timelineSlots[i]];
58
+ if (!slot.bone.isActive())
59
+ continue;
60
+ const other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();
61
+ if (other != null && other.timelineAttachment === this)
62
+ return true;
63
+ }
64
+ return false;
37
65
  }
38
66
  }
39
- /** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by a slot's
40
- * {@link Slot#deform}. */
67
+ /** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by
68
+ * {@link SlotPose.deform}. */
41
69
  export class VertexAttachment extends Attachment {
42
70
  static nextID = 0;
43
71
  /** The unique ID for this attachment. */
44
72
  id = VertexAttachment.nextID++;
45
- /** The bones which affect the {@link #getVertices()}. The array entries are, for each vertex, the number of bones affecting
46
- * the vertex followed by that many bone indices, which is the index of the bone in {@link Skeleton#bones}. Will be null
47
- * if this attachment has no weights. */
73
+ /** The bones that affect the {@link vertices}. The entries are, for each vertex, the number of bones affecting the vertex
74
+ * followed by that many bone indices, which is {@link Skeleton.getBones} index. Null if this attachment has no weights. */
48
75
  bones = null;
49
76
  /** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y`
50
- * entries for each vertex. For a weighted attachment, the values are `x,y,weight` entries for each bone affecting
77
+ * entries for each vertex. For a weighted attachment, the values are `x,y,weight` triplets for each bone affecting
51
78
  * each vertex. */
52
79
  vertices = [];
53
80
  /** The maximum number of world vertex values that can be output by
54
- * {@link #computeWorldVertices()} using the `count` parameter. */
81
+ * {@link computeWorldVertices} using the `count` parameter. */
55
82
  worldVerticesLength = 0;
56
- /** Timelines for the timeline attachment are also applied to this attachment.
57
- * May be null if no attachment-specific timelines should be applied. */
58
- timelineAttachment = this;
59
83
  constructor(name) {
60
84
  super(name);
61
85
  }
62
- /** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is
63
- * not empty, it is used to deform the vertices.
86
+ /** Transforms the attachment's local {@link vertices} to world coordinates. If {@link SlotPose.getDeform} is not empty, it
87
+ * is used to deform the vertices.
64
88
  *
65
- * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
89
+ * See <a href="https://esotericsoftware.com/spine-runtime-skeletons#World-transforms">World transforms</a> in the Spine
66
90
  * Runtimes Guide.
67
- * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y.
68
- * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`.
91
+ * @param start The index of the first {@link vertices} value to transform. Each vertex has 2 values, x and y.
92
+ * @param count The number of world vertex values to output. Must be <= {@link worldVerticesLength} - `start`.
69
93
  * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *
70
94
  * `stride` / 2.
71
95
  * @param offset The `worldVertices` index to begin writing values.
72
96
  * @param stride The number of `worldVertices` entries between the value pairs written. */
73
- computeWorldVertices(slot, start, count, worldVertices, offset, stride) {
97
+ computeWorldVertices(skeleton, slot, start, count, worldVertices, offset, stride) {
74
98
  count = offset + (count >> 1) * stride;
75
- let skeleton = slot.bone.skeleton;
76
- let deformArray = slot.deform;
99
+ const deformArray = slot.appliedPose.deform;
77
100
  let vertices = this.vertices;
78
- let bones = this.bones;
101
+ const bones = this.bones;
79
102
  if (!bones) {
80
103
  if (deformArray.length > 0)
81
104
  vertices = deformArray;
82
- let bone = slot.bone;
83
- let x = bone.worldX;
84
- let y = bone.worldY;
85
- let a = bone.a, b = bone.b, c = bone.c, d = bone.d;
105
+ const bone = slot.bone.appliedPose;
106
+ const x = bone.worldX;
107
+ const y = bone.worldY;
108
+ const a = bone.a, b = bone.b, c = bone.c, d = bone.d;
86
109
  for (let v = start, w = offset; w < count; v += 2, w += stride) {
87
- let vx = vertices[v], vy = vertices[v + 1];
110
+ const vx = vertices[v], vy = vertices[v + 1];
88
111
  worldVertices[w] = vx * a + vy * b + x;
89
112
  worldVertices[w + 1] = vx * c + vy * d + y;
90
113
  }
@@ -92,19 +115,19 @@ export class VertexAttachment extends Attachment {
92
115
  }
93
116
  let v = 0, skip = 0;
94
117
  for (let i = 0; i < start; i += 2) {
95
- let n = bones[v];
118
+ const n = bones[v];
96
119
  v += n + 1;
97
120
  skip += n;
98
121
  }
99
- let skeletonBones = skeleton.bones;
100
- if (deformArray.length == 0) {
122
+ const skeletonBones = skeleton.bones;
123
+ if (deformArray.length === 0) {
101
124
  for (let w = offset, b = skip * 3; w < count; w += stride) {
102
125
  let wx = 0, wy = 0;
103
126
  let n = bones[v++];
104
127
  n += v;
105
128
  for (; v < n; v++, b += 3) {
106
- let bone = skeletonBones[bones[v]];
107
- let vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];
129
+ const bone = skeletonBones[bones[v]].appliedPose;
130
+ const vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];
108
131
  wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
109
132
  wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
110
133
  }
@@ -113,14 +136,14 @@ export class VertexAttachment extends Attachment {
113
136
  }
114
137
  }
115
138
  else {
116
- let deform = deformArray;
139
+ const deform = deformArray;
117
140
  for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {
118
141
  let wx = 0, wy = 0;
119
142
  let n = bones[v++];
120
143
  n += v;
121
144
  for (; v < n; v++, b += 3, f += 2) {
122
- let bone = skeletonBones[bones[v]];
123
- let vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];
145
+ const bone = skeletonBones[bones[v]].appliedPose;
146
+ const vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];
124
147
  wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
125
148
  wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
126
149
  }
@@ -132,7 +155,7 @@ export class VertexAttachment extends Attachment {
132
155
  /** Does not copy id (generated) or name (set on construction). **/
133
156
  copyTo(attachment) {
134
157
  if (this.bones) {
135
- attachment.bones = new Array(this.bones.length);
158
+ attachment.bones = [];
136
159
  Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);
137
160
  }
138
161
  else
@@ -143,6 +166,7 @@ export class VertexAttachment extends Attachment {
143
166
  }
144
167
  attachment.worldVerticesLength = this.worldVerticesLength;
145
168
  attachment.timelineAttachment = this.timelineAttachment;
169
+ attachment.timelineSlots = this.timelineSlots;
146
170
  }
147
171
  }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQW1CLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCwwQ0FBMEM7QUFDMUMsTUFBTSxPQUFnQixVQUFVO0lBQy9CLElBQUksQ0FBUztJQUViLFlBQWEsSUFBWTtRQUN4QixJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0NBR0Q7QUFFRDswQkFDMEI7QUFDMUIsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxVQUFVO0lBQ2hELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLHlDQUF5QztJQUN6QyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFL0I7OzRDQUV3QztJQUN4QyxLQUFLLEdBQXlCLElBQUksQ0FBQztJQUVuQzs7c0JBRWtCO0lBQ2xCLFFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBRS9CO3NFQUNrRTtJQUNsRSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFFeEI7NEVBQ3dFO0lBQ3hFLGtCQUFrQixHQUFlLElBQUksQ0FBQztJQUV0QyxZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7Ozs7OzhGQVUwRjtJQUMxRixvQkFBb0IsQ0FBRSxJQUFVLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxhQUE4QixFQUFFLE1BQWMsRUFBRSxNQUFjO1FBQzdILEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFB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QUFNLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUQsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBTbG90IH0gZnJvbSBcIi4uL1Nsb3QuanNcIjtcbmltcG9ydCB7IE51bWJlckFycmF5TGlrZSwgVXRpbHMgfSBmcm9tIFwiLi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgYXR0YWNobWVudHMuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXR0YWNobWVudCB7XG5cdG5hbWU6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHR9XG5cblx0YWJzdHJhY3QgY29weSAoKTogQXR0YWNobWVudDtcbn1cblxuLyoqIEJhc2UgY2xhc3MgZm9yIGFuIGF0dGFjaG1lbnQgd2l0aCB2ZXJ0aWNlcyB0aGF0IGFyZSB0cmFuc2Zvcm1lZCBieSBvbmUgb3IgbW9yZSBib25lcyBhbmQgY2FuIGJlIGRlZm9ybWVkIGJ5IGEgc2xvdCdzXG4gKiB7QGxpbmsgU2xvdCNkZWZvcm19LiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZlcnRleEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dElEID0gMDtcblxuXHQvKiogVGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBhdHRhY2htZW50LiAqL1xuXHRpZCA9IFZlcnRleEF0dGFjaG1lbnQubmV4dElEKys7XG5cblx0LyoqIFRoZSBib25lcyB3aGljaCBhZmZlY3QgdGhlIHtAbGluayAjZ2V0VmVydGljZXMoKX0uIFRoZSBhcnJheSBlbnRyaWVzIGFyZSwgZm9yIGVhY2ggdmVydGV4LCB0aGUgbnVtYmVyIG9mIGJvbmVzIGFmZmVjdGluZ1xuXHQgKiB0aGUgdmVydGV4IGZvbGxvd2VkIGJ5IHRoYXQgbWFueSBib25lIGluZGljZXMsIHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgYm9uZSBpbiB7QGxpbmsgU2tlbGV0b24jYm9uZXN9LiBXaWxsIGJlIG51bGxcblx0ICogaWYgdGhpcyBhdHRhY2htZW50IGhhcyBubyB3ZWlnaHRzLiAqL1xuXHRib25lczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBUaGUgdmVydGV4IHBvc2l0aW9ucyBpbiB0aGUgYm9uZSdzIGNvb3JkaW5hdGUgc3lzdGVtLiBGb3IgYSBub24td2VpZ2h0ZWQgYXR0YWNobWVudCwgdGhlIHZhbHVlcyBhcmUgYHgseWBcblx0ICogZW50cmllcyBmb3IgZWFjaCB2ZXJ0ZXguIEZvciBhIHdlaWdodGVkIGF0dGFjaG1lbnQsIHRoZSB2YWx1ZXMgYXJlIGB4LHksd2VpZ2h0YCBlbnRyaWVzIGZvciBlYWNoIGJvbmUgYWZmZWN0aW5nXG5cdCAqIGVhY2ggdmVydGV4LiAqL1xuXHR2ZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlID0gW107XG5cblx0LyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JsZCB2ZXJ0ZXggdmFsdWVzIHRoYXQgY2FuIGJlIG91dHB1dCBieVxuXHQgKiB7QGxpbmsgI2NvbXB1dGVXb3JsZFZlcnRpY2VzKCl9IHVzaW5nIHRoZSBgY291bnRgIHBhcmFtZXRlci4gKi9cblx0d29ybGRWZXJ0aWNlc0xlbmd0aCA9IDA7XG5cblx0LyoqIFRpbWVsaW5lcyBmb3IgdGhlIHRpbWVsaW5lIGF0dGFjaG1lbnQgYXJlIGFsc28gYXBwbGllZCB0byB0aGlzIGF0dGFjaG1lbnQuXG5cdCAqIE1heSBiZSBudWxsIGlmIG5vIGF0dGFjaG1lbnQtc3BlY2lmaWMgdGltZWxpbmVzIHNob3VsZCBiZSBhcHBsaWVkLiAqL1xuXHR0aW1lbGluZUF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB0aGlzO1xuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIHRoZSBhdHRhY2htZW50J3MgbG9jYWwge0BsaW5rICN2ZXJ0aWNlc30gdG8gd29ybGQgY29vcmRpbmF0ZXMuIElmIHRoZSBzbG90J3Mge0BsaW5rIFNsb3QjZGVmb3JtfSBpc1xuXHQgKiBub3QgZW1wdHksIGl0IGlzIHVzZWQgdG8gZGVmb3JtIHRoZSB2ZXJ0aWNlcy5cblx0ICpcblx0ICogU2VlIFtXb3JsZCB0cmFuc2Zvcm1zXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtcnVudGltZS1za2VsZXRvbnMjV29ybGQtdHJhbnNmb3JtcykgaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLlxuXHQgKiBAcGFyYW0gc3RhcnQgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCB7QGxpbmsgI3ZlcnRpY2VzfSB2YWx1ZSB0byB0cmFuc2Zvcm0uIEVhY2ggdmVydGV4IGhhcyAyIHZhbHVlcywgeCBhbmQgeS5cblx0ICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2Ygd29ybGQgdmVydGV4IHZhbHVlcyB0byBvdXRwdXQuIE11c3QgYmUgPD0ge0BsaW5rICN3b3JsZFZlcnRpY2VzTGVuZ3RofSAtIGBzdGFydGAuXG5cdCAqIEBwYXJhbSB3b3JsZFZlcnRpY2VzIFRoZSBvdXRwdXQgd29ybGQgdmVydGljZXMuIE11c3QgaGF2ZSBhIGxlbmd0aCA+PSBgb2Zmc2V0YCArIGBjb3VudGAgKlxuXHQgKiAgICAgICAgICAgYHN0cmlkZWAgLyAyLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IFRoZSBgd29ybGRWZXJ0aWNlc2AgaW5kZXggdG8gYmVnaW4gd3JpdGluZyB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBzdHJpZGUgVGhlIG51bWJlciBvZiBgd29ybGRWZXJ0aWNlc2AgZW50cmllcyBiZXR3ZWVuIHRoZSB2YWx1ZSBwYWlycyB3cml0dGVuLiAqL1xuXHRjb21wdXRlV29ybGRWZXJ0aWNlcyAoc2xvdDogU2xvdCwgc3RhcnQ6IG51bWJlciwgY291bnQ6IG51bWJlciwgd29ybGRWZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlLCBvZmZzZXQ6IG51bWJlciwgc3RyaWRlOiBudW1iZXIpIHtcblx0XHRjb3VudCA9IG9mZnNldCArIChjb3VudCA+PiAxKSAqIHN0cmlkZTtcblx0XHRsZXQgc2tlbGV0b24gPSBzbG90LmJvbmUuc2tlbGV0b247XG5cdFx0bGV0IGRlZm9ybUFycmF5ID0gc2xvdC5kZWZvcm07XG5cdFx0bGV0IHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcblx0XHRsZXQgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGlmICghYm9uZXMpIHtcblx0XHRcdGlmIChkZWZvcm1BcnJheS5sZW5ndGggPiAwKSB2ZXJ0aWNlcyA9IGRlZm9ybUFycmF5O1xuXHRcdFx0bGV0IGJvbmUgPSBzbG90LmJvbmU7XG5cdFx0XHRsZXQgeCA9IGJvbmUud29ybGRYO1xuXHRcdFx0bGV0IHkgPSBib25lLndvcmxkWTtcblx0XHRcdGxldCBhID0gYm9uZS5hLCBiID0gYm9uZS5iLCBjID0gYm9uZS5jLCBkID0gYm9uZS5kO1xuXHRcdFx0Zm9yIChsZXQgdiA9IHN0YXJ0LCB3ID0gb2Zmc2V0OyB3IDwgY291bnQ7IHYgKz0gMiwgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHZ4ID0gdmVydGljZXNbdl0sIHZ5ID0gdmVydGljZXNbdiArIDFdO1xuXHRcdFx0XHR3b3JsZFZlcnRpY2VzW3ddID0gdnggKiBhICsgdnkgKiBiICsgeDtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3ICsgMV0gPSB2eCAqIGMgKyB2eSAqIGQgKyB5O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgdiA9IDAsIHNraXAgPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnQ7IGkgKz0gMikge1xuXHRcdFx0bGV0IG4gPSBib25lc1t2XTtcblx0XHRcdHYgKz0gbiArIDE7XG5cdFx0XHRza2lwICs9IG47XG5cdFx0fVxuXHRcdGxldCBza2VsZXRvbkJvbmVzID0gc2tlbGV0b24uYm9uZXM7XG5cdFx0aWYgKGRlZm9ybUFycmF5Lmxlbmd0aCA9PSAwKSB7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDM7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMykge1xuXHRcdFx0XHRcdGxldCBib25lID0gc2tlbGV0b25Cb25lc1tib25lc1t2XV07XG5cdFx0XHRcdFx0bGV0IHZ4ID0gdmVydGljZXNbYl0sIHZ5ID0gdmVydGljZXNbYiArIDFdLCB3ZWlnaHQgPSB2ZXJ0aWNlc1tiICsgMl07XG5cdFx0XHRcdFx0d3ggKz0gKHZ4ICogYm9uZS5hICsgdnkgKiBib25lLmIgKyBib25lLndvcmxkWCkgKiB3ZWlnaHQ7XG5cdFx0XHRcdFx0d3kgKz0gKHZ4ICogYm9uZS5jICsgdnkgKiBib25lLmQgKyBib25lLndvcmxkWSkgKiB3ZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3XSA9IHd4O1xuXHRcdFx0XHR3b3JsZFZlcnRpY2VzW3cgKyAxXSA9IHd5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZGVmb3JtID0gZGVmb3JtQXJyYXk7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDMsIGYgPSBza2lwIDw8IDE7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMywgZiArPSAyKSB7XG5cdFx0XHRcdFx0bGV0IGJvbmUgPSBza2VsZXRvbkJvbmVzW2JvbmVzW3ZdXTtcblx0XHRcdFx0XHRsZXQgdnggPSB2ZXJ0aWNlc1tiXSArIGRlZm9ybVtmXSwgdnkgPSB2ZXJ0aWNlc1tiICsgMV0gKyBkZWZvcm1bZiArIDFdLCB3ZWlnaHQgPSB2ZXJ0aWNlc1tiICsgMl07XG5cdFx0XHRcdFx0d3ggKz0gKHZ4ICogYm9uZS5hICsgdnkgKiBib25lLmIgKyBib25lLndvcmxkWCkgKiB3ZWlnaHQ7XG5cdFx0XHRcdFx0d3kgKz0gKHZ4ICogYm9uZS5jICsgdnkgKiBib25lLmQgKyBib25lLndvcmxkWSkgKiB3ZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3XSA9IHd4O1xuXHRcdFx0XHR3b3JsZFZlcnRpY2VzW3cgKyAxXSA9IHd5O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBEb2VzIG5vdCBjb3B5IGlkIChnZW5lcmF0ZWQpIG9yIG5hbWUgKHNldCBvbiBjb25zdHJ1Y3Rpb24pLiAqKi9cblx0Y29weVRvIChhdHRhY2htZW50OiBWZXJ0ZXhBdHRhY2htZW50KSB7XG5cdFx0aWYgKHRoaXMuYm9uZXMpIHtcblx0XHRcdGF0dGFjaG1lbnQuYm9uZXMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmJvbmVzLmxlbmd0aCk7XG5cdFx0XHRVdGlscy5hcnJheUNvcHkodGhpcy5ib25lcywgMCwgYXR0YWNobWVudC5ib25lcywgMCwgdGhpcy5ib25lcy5sZW5ndGgpO1xuXHRcdH0gZWxzZVxuXHRcdFx0YXR0YWNobWVudC5ib25lcyA9IG51bGw7XG5cblx0XHRpZiAodGhpcy52ZXJ0aWNlcykge1xuXHRcdFx0YXR0YWNobWVudC52ZXJ0aWNlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkodGhpcy52ZXJ0aWNlcy5sZW5ndGgpO1xuXHRcdFx0VXRpbHMuYXJyYXlDb3B5KHRoaXMudmVydGljZXMsIDAsIGF0dGFjaG1lbnQudmVydGljZXMsIDAsIHRoaXMudmVydGljZXMubGVuZ3RoKTtcblx0XHR9XG5cblx0XHRhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGggPSB0aGlzLndvcmxkVmVydGljZXNMZW5ndGg7XG5cdFx0YXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgPSB0aGlzLnRpbWVsaW5lQXR0YWNobWVudDtcblx0fVxufVxuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUsvRSxPQUFPLEVBQXdCLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCw2SEFBNkg7QUFDN0gsTUFBTSxPQUFnQixVQUFVO0lBQ3ZCLE1BQU0sQ0FBVSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBRTdDLElBQUksQ0FBUztJQUViO29GQUNnRjtJQUNoRixrQkFBa0IsQ0FBYztJQUVoQywyRkFBMkY7SUFDM0YsYUFBYSxHQUFhLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFFM0MsWUFBYSxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUlEOzs7NkRBR3lEO0lBQ2xELGdCQUFnQixDQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLFdBQW9CO1FBQzlFLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyRixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLGtCQUFrQixLQUFLLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFD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QUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUQsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbG90IH0gZnJvbSBcIi4uL1Nsb3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2xvdFBvc2UgfSBmcm9tIFwiLi4vU2xvdFBvc2UuanNcIjtcbmltcG9ydCB7IHR5cGUgTnVtYmVyQXJyYXlMaWtlLCBVdGlscyB9IGZyb20gXCIuLi9VdGlscy5qc1wiO1xuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBhdHRhY2htZW50cy4gTXVsdGlwbGUge0BsaW5rIFNrZWxldG9ufSBpbnN0YW5jZXMsIHNsb3RzLCBvciBza2lucyBjYW4gdXNlIHRoZSBzYW1lIGF0dGFjaG1lbnRzLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0dGFjaG1lbnQge1xuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBlbXB0eTogbnVtYmVyW10gPSBbXTtcblxuXHRuYW1lOiBzdHJpbmc7XG5cblx0LyoqIFRpbWVsaW5lcyBmb3IgdGhlIHRpbWVsaW5lIGF0dGFjaG1lbnQgYXJlIGFsc28gYXBwbGllZCB0byB0aGlzIGF0dGFjaG1lbnQuXG5cdCAqIEByZXR1cm4gTWF5IGJlIG51bGwgaWYgbm8gYXR0YWNobWVudC1zcGVjaWZpYyB0aW1lbGluZXMgc2hvdWxkIGJlIGFwcGxpZWQuICovXG5cdHRpbWVsaW5lQXR0YWNobWVudD86IEF0dGFjaG1lbnQ7XG5cblx0LyoqIFNsb3RzIHRoYXQgY2FuIGhhdmUgYXR0YWNobWVudHMgd2hvc2Uge0BsaW5rIHRpbWVsaW5lQXR0YWNobWVudH0gaXMgdGhpcyBhdHRhY2htZW50LiAqL1xuXHR0aW1lbGluZVNsb3RzOiBudW1iZXJbXSA9IEF0dGFjaG1lbnQuZW1wdHk7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xuXHRcdGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwibmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLnRpbWVsaW5lQXR0YWNobWVudCA9IHRoaXM7XG5cdH1cblxuXHRhYnN0cmFjdCBjb3B5ICgpOiBBdHRhY2htZW50O1xuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHtAY29kZSBzbG90SW5kZXh9IG9yIGFueSB7QGxpbmsgdGltZWxpbmVTbG90c30gaGF2ZSBhbiBhdHRhY2htZW50IHdob3NlIHtAbGluayB0aW1lbGluZUF0dGFjaG1lbnR9IGlzXG5cdCAqIHRoaXMgYXR0YWNobWVudC5cblx0ICogQHBhcmFtIHNsb3RzIFRoZSB7QGxpbmsgU2tlbGV0b24uc2xvdHN9LlxuXHQgKiBAcGFyYW0gc2xvdEluZGV4IFRoZSB0aW1lbGluZSdzIHByaW1hcnkgc2xvdCBpbmRleC4gKi9cblx0cHVibGljIGlzVGltZWxpbmVBY3RpdmUgKHNsb3RzOiBTbG90W10sIHNsb3RJbmRleDogbnVtYmVyLCBhcHBsaWVkUG9zZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdGxldCBzbG90ID0gc2xvdHNbc2xvdEluZGV4XTtcblx0XHRpZiAoc2xvdC5ib25lLmlzQWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IG90aGVyID0gKGFwcGxpZWRQb3NlID8gc2xvdC5nZXRBcHBsaWVkUG9zZSgpIDogc2xvdC5nZXRQb3NlKCkpLmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmIChvdGhlciAhPSBudWxsICYmIG90aGVyLnRpbWVsaW5lQXR0YWNobWVudCA9PT0gdGhpcykgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy50aW1lbGluZVNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0c2xvdCA9IHNsb3RzW3RoaXMudGltZWxpbmVTbG90c1tpXV07XG5cdFx0XHRpZiAoIXNsb3QuYm9uZS5pc0FjdGl2ZSgpKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IG90aGVyID0gKGFwcGxpZWRQb3NlID8gc2xvdC5nZXRBcHBsaWVkUG9zZSgpIDogc2xvdC5nZXRQb3NlKCkpLmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmIChvdGhlciAhPSBudWxsICYmIG90aGVyLnRpbWVsaW5lQXR0YWNobWVudCA9PT0gdGhpcykgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKiogQmFzZSBjbGFzcyBmb3IgYW4gYXR0YWNobWVudCB3aXRoIHZlcnRpY2VzIHRoYXQgYXJlIHRyYW5zZm9ybWVkIGJ5IG9uZSBvciBtb3JlIGJvbmVzIGFuZCBjYW4gYmUgZGVmb3JtZWQgYnlcbiAqIHtAbGluayBTbG90UG9zZS5kZWZvcm19LiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZlcnRleEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dElEID0gMDtcblxuXHQvKiogVGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBhdHRhY2htZW50LiAqL1xuXHRpZCA9IFZlcnRleEF0dGFjaG1lbnQubmV4dElEKys7XG5cblx0LyoqIFRoZSBib25lcyB0aGF0IGFmZmVjdCB0aGUge0BsaW5rIHZlcnRpY2VzfS4gVGhlIGVudHJpZXMgYXJlLCBmb3IgZWFjaCB2ZXJ0ZXgsIHRoZSBudW1iZXIgb2YgYm9uZXMgYWZmZWN0aW5nIHRoZSB2ZXJ0ZXhcblx0ICogZm9sbG93ZWQgYnkgdGhhdCBtYW55IGJvbmUgaW5kaWNlcywgd2hpY2ggaXMge0BsaW5rIFNrZWxldG9uLmdldEJvbmVzfSBpbmRleC4gTnVsbCBpZiB0aGlzIGF0dGFjaG1lbnQgaGFzIG5vIHdlaWdodHMuICovXG5cdGJvbmVzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSB2ZXJ0ZXggcG9zaXRpb25zIGluIHRoZSBib25lJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uIEZvciBhIG5vbi13ZWlnaHRlZCBhdHRhY2htZW50LCB0aGUgdmFsdWVzIGFyZSBgeCx5YFxuXHQgKiBlbnRyaWVzIGZvciBlYWNoIHZlcnRleC4gRm9yIGEgd2VpZ2h0ZWQgYXR0YWNobWVudCwgdGhlIHZhbHVlcyBhcmUgYHgseSx3ZWlnaHRgIHRyaXBsZXRzIGZvciBlYWNoIGJvbmUgYWZmZWN0aW5nXG5cdCAqIGVhY2ggdmVydGV4LiAqL1xuXHR2ZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlID0gW107XG5cblx0LyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JsZCB2ZXJ0ZXggdmFsdWVzIHRoYXQgY2FuIGJlIG91dHB1dCBieVxuXHQgKiB7QGxpbmsgY29tcHV0ZVdvcmxkVmVydGljZXN9IHVzaW5nIHRoZSBgY291bnRgIHBhcmFtZXRlci4gKi9cblx0d29ybGRWZXJ0aWNlc0xlbmd0aCA9IDA7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgdGhlIGF0dGFjaG1lbnQncyBsb2NhbCB7QGxpbmsgdmVydGljZXN9IHRvIHdvcmxkIGNvb3JkaW5hdGVzLiBJZiB7QGxpbmsgU2xvdFBvc2UuZ2V0RGVmb3JtfSBpcyBub3QgZW1wdHksIGl0XG5cdCAqIGlzIHVzZWQgdG8gZGVmb3JtIHRoZSB2ZXJ0aWNlcy5cblx0ICpcblx0ICogU2VlIDxhIGhyZWY9XCJodHRwczovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tlbGV0b25zI1dvcmxkLXRyYW5zZm9ybXNcIj5Xb3JsZCB0cmFuc2Zvcm1zPC9hPiBpbiB0aGUgU3BpbmVcblx0ICogUnVudGltZXMgR3VpZGUuXG5cdCAqIEBwYXJhbSBzdGFydCBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHtAbGluayB2ZXJ0aWNlc30gdmFsdWUgdG8gdHJhbnNmb3JtLiBFYWNoIHZlcnRleCBoYXMgMiB2YWx1ZXMsIHggYW5kIHkuXG5cdCAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIHdvcmxkIHZlcnRleCB2YWx1ZXMgdG8gb3V0cHV0LiBNdXN0IGJlIDw9IHtAbGluayB3b3JsZFZlcnRpY2VzTGVuZ3RofSAtIGBzdGFydGAuXG5cdCAqIEBwYXJhbSB3b3JsZFZlcnRpY2VzIFRoZSBvdXRwdXQgd29ybGQgdmVydGljZXMuIE11c3QgaGF2ZSBhIGxlbmd0aCA+PSBgb2Zmc2V0YCArIGBjb3VudGAgKlxuXHQgKiAgICAgICAgICAgYHN0cmlkZWAgLyAyLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IFRoZSBgd29ybGRWZXJ0aWNlc2AgaW5kZXggdG8gYmVnaW4gd3JpdGluZyB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBzdHJpZGUgVGhlIG51bWJlciBvZiBgd29ybGRWZXJ0aWNlc2AgZW50cmllcyBiZXR3ZWVuIHRoZSB2YWx1ZSBwYWlycyB3cml0dGVuLiAqL1xuXHRjb21wdXRlV29ybGRWZXJ0aWNlcyAoc2tlbGV0b246IFNrZWxldG9uLCBzbG90OiBTbG90LCBzdGFydDogbnVtYmVyLCBjb3VudDogbnVtYmVyLCB3b3JsZFZlcnRpY2VzOiBOdW1iZXJBcnJheUxpa2UsIG9mZnNldDogbnVtYmVyLFxuXHRcdHN0cmlkZTogbnVtYmVyKSB7XG5cblx0XHRjb3VudCA9IG9mZnNldCArIChjb3VudCA+PiAxKSAqIHN0cmlkZTtcblx0XHRjb25zdCBkZWZvcm1BcnJheSA9IHNsb3QuYXBwbGllZFBvc2UuZGVmb3JtO1xuXHRcdGxldCB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGlmICghYm9uZXMpIHtcblx0XHRcdGlmIChkZWZvcm1BcnJheS5sZW5ndGggPiAwKSB2ZXJ0aWNlcyA9IGRlZm9ybUFycmF5O1xuXHRcdFx0Y29uc3QgYm9uZSA9IHNsb3QuYm9uZS5hcHBsaWVkUG9zZTtcblx0XHRcdGNvbnN0IHggPSBib25lLndvcmxkWDtcblx0XHRcdGNvbnN0IHkgPSBib25lLndvcmxkWTtcblx0XHRcdGNvbnN0IGEgPSBib25lLmEsIGIgPSBib25lLmIsIGMgPSBib25lLmMsIGQgPSBib25lLmQ7XG5cdFx0XHRmb3IgKGxldCB2ID0gc3RhcnQsIHcgPSBvZmZzZXQ7IHcgPCBjb3VudDsgdiArPSAyLCB3ICs9IHN0cmlkZSkge1xuXHRcdFx0XHRjb25zdCB2eCA9IHZlcnRpY2VzW3ZdLCB2eSA9IHZlcnRpY2VzW3YgKyAxXTtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3XSA9IHZ4ICogYSArIHZ5ICogYiArIHg7XG5cdFx0XHRcdHdvcmxkVmVydGljZXNbdyArIDFdID0gdnggKiBjICsgdnkgKiBkICsgeTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IHYgPSAwLCBza2lwID0gMDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0OyBpICs9IDIpIHtcblx0XHRcdGNvbnN0IG4gPSBib25lc1t2XTtcblx0XHRcdHYgKz0gbiArIDE7XG5cdFx0XHRza2lwICs9IG47XG5cdFx0fVxuXHRcdGNvbnN0IHNrZWxldG9uQm9uZXMgPSBza2VsZXRvbi5ib25lcztcblx0XHRpZiAoZGVmb3JtQXJyYXkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDM7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMykge1xuXHRcdFx0XHRcdGNvbnN0IGJvbmUgPSBza2VsZXRvbkJvbmVzW2JvbmVzW3ZdXS5hcHBsaWVkUG9zZTtcblx0XHRcdFx0XHRjb25zdCB2eCA9IHZlcnRpY2VzW2JdLCB2eSA9IHZlcnRpY2VzW2IgKyAxXSwgd2VpZ2h0ID0gdmVydGljZXNbYiArIDJdO1xuXHRcdFx0XHRcdHd4ICs9ICh2eCAqIGJvbmUuYSArIHZ5ICogYm9uZS5iICsgYm9uZS53b3JsZFgpICogd2VpZ2h0O1xuXHRcdFx0XHRcdHd5ICs9ICh2eCAqIGJvbmUuYyArIHZ5ICogYm9uZS5kICsgYm9uZS53b3JsZFkpICogd2VpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdvcmxkVmVydGljZXNbd10gPSB3eDtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3ICsgMV0gPSB3eTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVmb3JtID0gZGVmb3JtQXJyYXk7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDMsIGYgPSBza2lwIDw8IDE7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMywgZiArPSAyKSB7XG5cdFx0XHRcdFx0Y29uc3QgYm9uZSA9IHNrZWxldG9uQm9uZXNbYm9uZXNbdl1dLmFwcGxpZWRQb3NlO1xuXHRcdFx0XHRcdGNvbnN0IHZ4ID0gdmVydGljZXNbYl0gKyBkZWZvcm1bZl0sIHZ5ID0gdmVydGljZXNbYiArIDFdICsgZGVmb3JtW2YgKyAxXSwgd2VpZ2h0ID0gdmVydGljZXNbYiArIDJdO1xuXHRcdFx0XHRcdHd4ICs9ICh2eCAqIGJvbmUuYSArIHZ5ICogYm9uZS5iICsgYm9uZS53b3JsZFgpICogd2VpZ2h0O1xuXHRcdFx0XHRcdHd5ICs9ICh2eCAqIGJvbmUuYyArIHZ5ICogYm9uZS5kICsgYm9uZS53b3JsZFkpICogd2VpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdvcmxkVmVydGljZXNbd10gPSB3eDtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3ICsgMV0gPSB3eTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogRG9lcyBub3QgY29weSBpZCAoZ2VuZXJhdGVkKSBvciBuYW1lIChzZXQgb24gY29uc3RydWN0aW9uKS4gKiovXG5cdGNvcHlUbyAoYXR0YWNobWVudDogVmVydGV4QXR0YWNobWVudCkge1xuXHRcdGlmICh0aGlzLmJvbmVzKSB7XG5cdFx0XHRhdHRhY2htZW50LmJvbmVzID0gW107XG5cdFx0XHRVdGlscy5hcnJheUNvcHkodGhpcy5ib25lcywgMCwgYXR0YWNobWVudC5ib25lcywgMCwgdGhpcy5ib25lcy5sZW5ndGgpO1xuXHRcdH0gZWxzZVxuXHRcdFx0YXR0YWNobWVudC5ib25lcyA9IG51bGw7XG5cblx0XHRpZiAodGhpcy52ZXJ0aWNlcykge1xuXHRcdFx0YXR0YWNobWVudC52ZXJ0aWNlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkodGhpcy52ZXJ0aWNlcy5sZW5ndGgpO1xuXHRcdFx0VXRpbHMuYXJyYXlDb3B5KHRoaXMudmVydGljZXMsIDAsIGF0dGFjaG1lbnQudmVydGljZXMsIDAsIHRoaXMudmVydGljZXMubGVuZ3RoKTtcblx0XHR9XG5cblx0XHRhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGggPSB0aGlzLndvcmxkVmVydGljZXNMZW5ndGg7XG5cdFx0YXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgPSB0aGlzLnRpbWVsaW5lQXR0YWNobWVudDtcblx0XHRhdHRhY2htZW50LnRpbWVsaW5lU2xvdHMgPSB0aGlzLnRpbWVsaW5lU2xvdHM7XG5cdH1cbn1cbiJdfQ==
@@ -26,29 +26,29 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { Skin } from "../Skin.js";
30
- import { BoundingBoxAttachment } from "./BoundingBoxAttachment.js";
31
- import { ClippingAttachment } from "./ClippingAttachment.js";
32
- import { MeshAttachment } from "./MeshAttachment.js";
33
- import { PathAttachment } from "./PathAttachment.js";
34
- import { PointAttachment } from "./PointAttachment.js";
35
- import { RegionAttachment } from "./RegionAttachment.js";
36
- import { Sequence } from "./Sequence.js";
29
+ import type { Skin } from "../Skin.js";
30
+ import type { BoundingBoxAttachment } from "./BoundingBoxAttachment.js";
31
+ import type { ClippingAttachment } from "./ClippingAttachment.js";
32
+ import type { MeshAttachment } from "./MeshAttachment.js";
33
+ import type { PathAttachment } from "./PathAttachment.js";
34
+ import type { PointAttachment } from "./PointAttachment.js";
35
+ import type { RegionAttachment } from "./RegionAttachment.js";
36
+ import type { Sequence } from "./Sequence.js";
37
37
  /** The interface which can be implemented to customize creating and populating attachments.
38
38
  *
39
39
  * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#AttachmentLoader) in the Spine
40
40
  * Runtimes Guide. */
41
41
  export interface AttachmentLoader {
42
42
  /** @return May be null to not load an attachment. */
43
- newRegionAttachment(skin: Skin, name: string, path: string, sequence: Sequence | null): RegionAttachment;
43
+ newRegionAttachment(skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): RegionAttachment;
44
44
  /** @return May be null to not load an attachment. */
45
- newMeshAttachment(skin: Skin, name: string, path: string, sequence: Sequence | null): MeshAttachment;
45
+ newMeshAttachment(skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): MeshAttachment;
46
46
  /** @return May be null to not load an attachment. */
47
- newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
47
+ newBoundingBoxAttachment(skin: Skin, placeholder: string, name: string): BoundingBoxAttachment;
48
48
  /** @return May be null to not load an attachment */
49
- newPathAttachment(skin: Skin, name: string): PathAttachment;
49
+ newPathAttachment(skin: Skin, placeholder: string, name: string): PathAttachment;
50
50
  /** @return May be null to not load an attachment */
51
- newPointAttachment(skin: Skin, name: string): PointAttachment;
51
+ newPointAttachment(skin: Skin, placeholder: string, name: string): PointAttachment;
52
52
  /** @return May be null to not load an attachment */
53
- newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
53
+ newClippingAttachment(skin: Skin, placeholder: string, name: string): ClippingAttachment;
54
54
  }
@@ -27,4 +27,4 @@
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
29
  export {};
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudExvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50TG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgU2tpbiB9IGZyb20gXCIuLi9Ta2luLmpzXCI7XG5pbXBvcnQgeyBCb3VuZGluZ0JveEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9Cb3VuZGluZ0JveEF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IENsaXBwaW5nQXR0YWNobWVudCB9IGZyb20gXCIuL0NsaXBwaW5nQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgTWVzaEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9NZXNoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgUGF0aEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9QYXRoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgUG9pbnRBdHRhY2htZW50IH0gZnJvbSBcIi4vUG9pbnRBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgeyBSZWdpb25BdHRhY2htZW50IH0gZnJvbSBcIi4vUmVnaW9uQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiLi9TZXF1ZW5jZS5qc1wiO1xuXG4vKiogVGhlIGludGVyZmFjZSB3aGljaCBjYW4gYmUgaW1wbGVtZW50ZWQgdG8gY3VzdG9taXplIGNyZWF0aW5nIGFuZCBwb3B1bGF0aW5nIGF0dGFjaG1lbnRzLlxuICpcbiAqIFNlZSBbTG9hZGluZyBza2VsZXRvbiBkYXRhXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtbG9hZGluZy1za2VsZXRvbi1kYXRhI0F0dGFjaG1lbnRMb2FkZXIpIGluIHRoZSBTcGluZVxuICogUnVudGltZXMgR3VpZGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnRMb2FkZXIge1xuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50LiAqL1xuXHRuZXdSZWdpb25BdHRhY2htZW50IChza2luOiBTa2luLCBuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgc2VxdWVuY2U6IFNlcXVlbmNlIHwgbnVsbCk6IFJlZ2lvbkF0dGFjaG1lbnQ7XG5cblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudC4gKi9cblx0bmV3TWVzaEF0dGFjaG1lbnQgKHNraW46IFNraW4sIG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzZXF1ZW5jZTogU2VxdWVuY2UgfCBudWxsKTogTWVzaEF0dGFjaG1lbnQ7XG5cblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudC4gKi9cblx0bmV3Qm91bmRpbmdCb3hBdHRhY2htZW50IChza2luOiBTa2luLCBuYW1lOiBzdHJpbmcpOiBCb3VuZGluZ0JveEF0dGFjaG1lbnQ7XG5cblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudCAqL1xuXHRuZXdQYXRoQXR0YWNobWVudCAoc2tpbjogU2tpbiwgbmFtZTogc3RyaW5nKTogUGF0aEF0dGFjaG1lbnQ7XG5cblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudCAqL1xuXHRuZXdQb2ludEF0dGFjaG1lbnQgKHNraW46IFNraW4sIG5hbWU6IHN0cmluZyk6IFBvaW50QXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50ICovXG5cdG5ld0NsaXBwaW5nQXR0YWNobWVudCAoc2tpbjogU2tpbiwgbmFtZTogc3RyaW5nKTogQ2xpcHBpbmdBdHRhY2htZW50O1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudExvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50TG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBTa2luIH0gZnJvbSBcIi4uL1NraW4uanNcIjtcbmltcG9ydCB0eXBlIHsgQm91bmRpbmdCb3hBdHRhY2htZW50IH0gZnJvbSBcIi4vQm91bmRpbmdCb3hBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaXBwaW5nQXR0YWNobWVudCB9IGZyb20gXCIuL0NsaXBwaW5nQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNoQXR0YWNobWVudCB9IGZyb20gXCIuL01lc2hBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhBdHRhY2htZW50IH0gZnJvbSBcIi4vUGF0aEF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9pbnRBdHRhY2htZW50IH0gZnJvbSBcIi4vUG9pbnRBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlZ2lvbkF0dGFjaG1lbnQgfSBmcm9tIFwiLi9SZWdpb25BdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcXVlbmNlIH0gZnJvbSBcIi4vU2VxdWVuY2UuanNcIjtcblxuLyoqIFRoZSBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIGltcGxlbWVudGVkIHRvIGN1c3RvbWl6ZSBjcmVhdGluZyBhbmQgcG9wdWxhdGluZyBhdHRhY2htZW50cy5cbiAqXG4gKiBTZWUgW0xvYWRpbmcgc2tlbGV0b24gZGF0YV0oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWxvYWRpbmctc2tlbGV0b24tZGF0YSNBdHRhY2htZW50TG9hZGVyKSBpbiB0aGUgU3BpbmVcbiAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50TG9hZGVyIHtcblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudC4gKi9cblx0bmV3UmVnaW9uQXR0YWNobWVudCAoc2tpbjogU2tpbiwgcGxhY2Vob2xkZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHNlcXVlbmNlOiBTZXF1ZW5jZSk6IFJlZ2lvbkF0dGFjaG1lbnQ7XG5cblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudC4gKi9cblx0bmV3TWVzaEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzZXF1ZW5jZTogU2VxdWVuY2UpOiBNZXNoQXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50LiAqL1xuXHRuZXdCb3VuZGluZ0JveEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IEJvdW5kaW5nQm94QXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50ICovXG5cdG5ld1BhdGhBdHRhY2htZW50IChza2luOiBTa2luLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQYXRoQXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50ICovXG5cdG5ld1BvaW50QXR0YWNobWVudCAoc2tpbjogU2tpbiwgcGxhY2Vob2xkZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUG9pbnRBdHRhY2htZW50O1xuXG5cdC8qKiBAcmV0dXJuIE1heSBiZSBudWxsIHRvIG5vdCBsb2FkIGFuIGF0dGFjaG1lbnQgKi9cblx0bmV3Q2xpcHBpbmdBdHRhY2htZW50IChza2luOiBTa2luLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBDbGlwcGluZ0F0dGFjaG1lbnQ7XG59XG4iXX0=
@@ -27,7 +27,7 @@
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
29
  import { Color } from "../Utils.js";
30
- import { VertexAttachment, Attachment } from "./Attachment.js";
30
+ import { type Attachment, VertexAttachment } from "./Attachment.js";
31
31
  /** An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle
32
32
  * effects, and more.
33
33
  *
@@ -39,10 +39,10 @@ export class BoundingBoxAttachment extends VertexAttachment {
39
39
  super(name);
40
40
  }
41
41
  copy() {
42
- let copy = new BoundingBoxAttachment(this.name);
42
+ const copy = new BoundingBoxAttachment(this.name);
43
43
  this.copyTo(copy);
44
44
  copy.color.setFromColor(this.color);
45
45
  return copy;
46
46
  }
47
47
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm91bmRpbmdCb3hBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0JvdW5kaW5nQm94QXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRDs7OztZQUlZO0FBQ1osTUFBTSxPQUFPLHFCQUFzQixTQUFRLGdCQUFnQjtJQUMxRCxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFOUIsWUFBYSxJQUFZO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJO1FBQ0gsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uL1V0aWxzLmpzXCI7XG5pbXBvcnQgeyBWZXJ0ZXhBdHRhY2htZW50LCBBdHRhY2htZW50IH0gZnJvbSBcIi4vQXR0YWNobWVudC5qc1wiO1xuXG4vKiogQW4gYXR0YWNobWVudCB3aXRoIHZlcnRpY2VzIHRoYXQgbWFrZSB1cCBhIHBvbHlnb24uIENhbiBiZSB1c2VkIGZvciBoaXQgZGV0ZWN0aW9uLCBjcmVhdGluZyBwaHlzaWNzIGJvZGllcywgc3Bhd25pbmcgcGFydGljbGVcbiAqIGVmZmVjdHMsIGFuZCBtb3JlLlxuICpcbiAqIFNlZSB7QGxpbmsgU2tlbGV0b25Cb3VuZHN9IGFuZCBbQm91bmRpbmcgQm94ZXNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ib3VuZGluZy1ib3hlcykgaW4gdGhlIFNwaW5lIFVzZXJcbiAqIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIEJvdW5kaW5nQm94QXR0YWNobWVudCBleHRlbmRzIFZlcnRleEF0dGFjaG1lbnQge1xuXHRjb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdH1cblxuXHRjb3B5ICgpOiBBdHRhY2htZW50IHtcblx0XHRsZXQgY29weSA9IG5ldyBCb3VuZGluZ0JveEF0dGFjaG1lbnQodGhpcy5uYW1lKTtcblx0XHR0aGlzLmNvcHlUbyhjb3B5KTtcblx0XHRjb3B5LmNvbG9yLnNldEZyb21Db2xvcih0aGlzLmNvbG9yKTtcblx0XHRyZXR1cm4gY29weTtcblx0fVxufVxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm91bmRpbmdCb3hBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0JvdW5kaW5nQm94QXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEU7Ozs7WUFJWTtBQUNaLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxnQkFBZ0I7SUFDMUQsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlCLFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSTtRQUNILE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uQm91bmRzIH0gZnJvbSBcIi4uL1NrZWxldG9uQm91bmRzLmpzXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi9VdGlscy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBBdHRhY2htZW50LCBWZXJ0ZXhBdHRhY2htZW50IH0gZnJvbSBcIi4vQXR0YWNobWVudC5qc1wiO1xuXG4vKiogQW4gYXR0YWNobWVudCB3aXRoIHZlcnRpY2VzIHRoYXQgbWFrZSB1cCBhIHBvbHlnb24uIENhbiBiZSB1c2VkIGZvciBoaXQgZGV0ZWN0aW9uLCBjcmVhdGluZyBwaHlzaWNzIGJvZGllcywgc3Bhd25pbmcgcGFydGljbGVcbiAqIGVmZmVjdHMsIGFuZCBtb3JlLlxuICpcbiAqIFNlZSB7QGxpbmsgU2tlbGV0b25Cb3VuZHN9IGFuZCBbQm91bmRpbmcgQm94ZXNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ib3VuZGluZy1ib3hlcykgaW4gdGhlIFNwaW5lIFVzZXJcbiAqIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIEJvdW5kaW5nQm94QXR0YWNobWVudCBleHRlbmRzIFZlcnRleEF0dGFjaG1lbnQge1xuXHRjb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdH1cblxuXHRjb3B5ICgpOiBBdHRhY2htZW50IHtcblx0XHRjb25zdCBjb3B5ID0gbmV3IEJvdW5kaW5nQm94QXR0YWNobWVudCh0aGlzLm5hbWUpO1xuXHRcdHRoaXMuY29weVRvKGNvcHkpO1xuXHRcdGNvcHkuY29sb3Iuc2V0RnJvbUNvbG9yKHRoaXMuY29sb3IpO1xuXHRcdHJldHVybiBjb3B5O1xuXHR9XG59XG4iXX0=
@@ -26,14 +26,21 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { SlotData } from "../SlotData.js";
29
+ import type { SlotData } from "../SlotData.js";
30
30
  import { Color } from "../Utils.js";
31
- import { VertexAttachment, Attachment } from "./Attachment.js";
31
+ import { type Attachment, VertexAttachment } from "./Attachment.js";
32
32
  /** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */
33
33
  export declare class ClippingAttachment extends VertexAttachment {
34
- /** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of
34
+ /** Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of
35
35
  * the skeleton's rendering. */
36
36
  endSlot: SlotData | null;
37
+ /** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the
38
+ * convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping
39
+ * always uses convex. */
40
+ convex: boolean;
41
+ /** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is
42
+ * visible and clipping is convex. */
43
+ inverse: boolean;
37
44
  /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons
38
45
  * are not usually rendered at runtime. */
39
46
  color: Color;
@@ -30,9 +30,16 @@ import { Color } from "../Utils.js";
30
30
  import { VertexAttachment } from "./Attachment.js";
31
31
  /** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */
32
32
  export class ClippingAttachment extends VertexAttachment {
33
- /** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of
33
+ /** Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of
34
34
  * the skeleton's rendering. */
35
35
  endSlot = null;
36
+ /** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the
37
+ * convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping
38
+ * always uses convex. */
39
+ convex = false;
40
+ /** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is
41
+ * visible and clipping is convex. */
42
+ inverse = false;
36
43
  // Nonessential.
37
44
  /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons
38
45
  * are not usually rendered at runtime. */
@@ -41,11 +48,13 @@ export class ClippingAttachment extends VertexAttachment {
41
48
  super(name);
42
49
  }
43
50
  copy() {
44
- let copy = new ClippingAttachment(this.name);
51
+ const copy = new ClippingAttachment(this.name);
45
52
  this.copyTo(copy);
46
53
  copy.endSlot = this.endSlot;
54
+ copy.convex = this.convex;
55
+ copy.inverse = this.inverse;
47
56
  copy.color.setFromColor(this.color);
48
57
  return copy;
49
58
  }
50
59
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcHBpbmdBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRCwrR0FBK0c7QUFDL0csTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQUN2RDttQ0FDK0I7SUFDL0IsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFFaEMsZ0JBQWdCO0lBQ2hCOzhDQUMwQztJQUMxQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO0lBRXpELFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSTtRQUNILElBQUksSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgU2xvdERhdGEgfSBmcm9tIFwiLi4vU2xvdERhdGEuanNcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uL1V0aWxzLmpzXCI7XG5pbXBvcnQgeyBWZXJ0ZXhBdHRhY2htZW50LCBBdHRhY2htZW50IH0gZnJvbSBcIi4vQXR0YWNobWVudC5qc1wiO1xuXG4vKiogQW4gYXR0YWNobWVudCB3aXRoIHZlcnRpY2VzIHRoYXQgbWFrZSB1cCBhIHBvbHlnb24gdXNlZCBmb3IgY2xpcHBpbmcgdGhlIHJlbmRlcmluZyBvZiBvdGhlciBhdHRhY2htZW50cy4gKi9cbmV4cG9ydCBjbGFzcyBDbGlwcGluZ0F0dGFjaG1lbnQgZXh0ZW5kcyBWZXJ0ZXhBdHRhY2htZW50IHtcblx0LyoqIENsaXBwaW5nIGlzIHBlcmZvcm1lZCBiZXR3ZWVuIHRoZSBjbGlwcGluZyBwb2x5Z29uJ3Mgc2xvdCBhbmQgdGhlIGVuZCBzbG90LiBSZXR1cm5zIG51bGwgaWYgY2xpcHBpbmcgaXMgZG9uZSB1bnRpbCB0aGUgZW5kIG9mXG5cdCAqIHRoZSBza2VsZXRvbidzIHJlbmRlcmluZy4gKi9cblx0ZW5kU2xvdDogU2xvdERhdGEgfCBudWxsID0gbnVsbDtcblxuXHQvLyBOb25lc3NlbnRpYWwuXG5cdC8qKiBUaGUgY29sb3Igb2YgdGhlIGNsaXBwaW5nIHBvbHlnb24gYXMgaXQgd2FzIGluIFNwaW5lLiBBdmFpbGFibGUgb25seSB3aGVuIG5vbmVzc2VudGlhbCBkYXRhIHdhcyBleHBvcnRlZC4gQ2xpcHBpbmcgcG9seWdvbnNcblx0ICogYXJlIG5vdCB1c3VhbGx5IHJlbmRlcmVkIGF0IHJ1bnRpbWUuICovXG5cdGNvbG9yID0gbmV3IENvbG9yKDAuMjI3NSwgMC4yMjc1LCAwLjgwNzgsIDEpOyAvLyBjZTNhM2FmZlxuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0fVxuXG5cdGNvcHkgKCk6IEF0dGFjaG1lbnQge1xuXHRcdGxldCBjb3B5ID0gbmV3IENsaXBwaW5nQXR0YWNobWVudCh0aGlzLm5hbWUpO1xuXHRcdHRoaXMuY29weVRvKGNvcHkpO1xuXHRcdGNvcHkuZW5kU2xvdCA9IHRoaXMuZW5kU2xvdDtcblx0XHRjb3B5LmNvbG9yLnNldEZyb21Db2xvcih0aGlzLmNvbG9yKTtcblx0XHRyZXR1cm4gY29weTtcblx0fVxufVxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcHBpbmdBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEUsK0dBQStHO0FBQy9HLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxnQkFBZ0I7SUFDdkQ7bUNBQytCO0lBQy9CLE9BQU8sR0FBb0IsSUFBSSxDQUFDO0lBRWhDOzs2QkFFeUI7SUFDekIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmOzBDQUNzQztJQUN0QyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLGdCQUFnQjtJQUNoQjs4Q0FDMEM7SUFDMUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztJQUV6RCxZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUk7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBTbG90RGF0YSB9IGZyb20gXCIuLi9TbG90RGF0YS5qc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vVXRpbHMuanNcIjtcbmltcG9ydCB7IHR5cGUgQXR0YWNobWVudCwgVmVydGV4QXR0YWNobWVudCB9IGZyb20gXCIuL0F0dGFjaG1lbnQuanNcIjtcblxuLyoqIEFuIGF0dGFjaG1lbnQgd2l0aCB2ZXJ0aWNlcyB0aGF0IG1ha2UgdXAgYSBwb2x5Z29uIHVzZWQgZm9yIGNsaXBwaW5nIHRoZSByZW5kZXJpbmcgb2Ygb3RoZXIgYXR0YWNobWVudHMuICovXG5leHBvcnQgY2xhc3MgQ2xpcHBpbmdBdHRhY2htZW50IGV4dGVuZHMgVmVydGV4QXR0YWNobWVudCB7XG5cdC8qKiBDbGlwcGluZyBpcyBwZXJmb3JtZWQgYmV0d2VlbiB0aGUgY2xpcHBpbmcgYXR0YWNobWVudCdzIHNsb3QgYW5kIHRoZSBlbmQgc2xvdC4gSWYgbnVsbCwgY2xpcHBpbmcgaXMgZG9uZSB1bnRpbCB0aGUgZW5kIG9mXG5cdCAqIHRoZSBza2VsZXRvbidzIHJlbmRlcmluZy4gKi9cblx0ZW5kU2xvdDogU2xvdERhdGEgfCBudWxsID0gbnVsbDtcblxuXHQvKiogV2hlbiB0cnVlIHRoZSBjbGlwcGluZyBwb2x5Z29uIGlzIHRyZWF0ZWQgYXMgY29udmV4IGZvciBtb3JlIGVmZmljaWVudCBjbGlwcGluZy4gSWYgdGhlIHBvbHlnb24gZGVmb3JtcyB0byBjb25jYXZlIHRoZW4gdGhlXG5cdCAqIGNvbnZleCBodWxsIGlzIHVzZWQuIFdoZW4gZmFsc2UgdGhlIGNsaXBwaW5nIHBvbHlnb24gY2FuIGJlIGNvbmNhdmUgYW5kIGlmIHNvIGhhcyBhbiBhZGRpdGlvbmFsIENQVSBjb3N0LiBJbnZlcnNlIGNsaXBwaW5nXG5cdCAqIGFsd2F5cyB1c2VzIGNvbnZleC4gKi9cblx0Y29udmV4ID0gZmFsc2U7XG5cblx0LyoqIFdoZW4gZmFsc2UsIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBjbGlwcGluZyBwb2x5Z29uIGlzIHZpc2libGUuIFdoZW4gdHJ1ZSwgZXZlcnl0aGluZyBvdXRzaWRlIHRoZSBjbGlwcGluZyBwb2x5Z29uIGlzXG5cdCAgKiB2aXNpYmxlIGFuZCBjbGlwcGluZyBpcyBjb252ZXguICovXG5cdGludmVyc2UgPSBmYWxzZTtcblxuXHQvLyBOb25lc3NlbnRpYWwuXG5cdC8qKiBUaGUgY29sb3Igb2YgdGhlIGNsaXBwaW5nIHBvbHlnb24gYXMgaXQgd2FzIGluIFNwaW5lLiBBdmFpbGFibGUgb25seSB3aGVuIG5vbmVzc2VudGlhbCBkYXRhIHdhcyBleHBvcnRlZC4gQ2xpcHBpbmcgcG9seWdvbnNcblx0ICogYXJlIG5vdCB1c3VhbGx5IHJlbmRlcmVkIGF0IHJ1bnRpbWUuICovXG5cdGNvbG9yID0gbmV3IENvbG9yKDAuMjI3NSwgMC4yMjc1LCAwLjgwNzgsIDEpOyAvLyBjZTNhM2FmZlxuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0fVxuXG5cdGNvcHkgKCk6IEF0dGFjaG1lbnQge1xuXHRcdGNvbnN0IGNvcHkgPSBuZXcgQ2xpcHBpbmdBdHRhY2htZW50KHRoaXMubmFtZSk7XG5cdFx0dGhpcy5jb3B5VG8oY29weSk7XG5cdFx0Y29weS5lbmRTbG90ID0gdGhpcy5lbmRTbG90O1xuXHRcdGNvcHkuY29udmV4ID0gdGhpcy5jb252ZXg7XG5cdFx0Y29weS5pbnZlcnNlID0gdGhpcy5pbnZlcnNlO1xuXHRcdGNvcHkuY29sb3Iuc2V0RnJvbUNvbG9yKHRoaXMuY29sb3IpO1xuXHRcdHJldHVybiBjb3B5O1xuXHR9XG59XG4iXX0=
@@ -26,19 +26,16 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { TextureRegion } from "../Texture.js";
30
- import { Color } from "../Utils.js";
31
- import { Sequence } from "./Sequence.js";
32
- export interface HasTextureRegion {
33
- /** The name used to find the {@link #region()}. */
34
- path: string;
35
- /** The region used to draw the attachment. After setting the region or if the region's properties are changed,
36
- * {@link #updateRegion()} must be called. */
37
- region: TextureRegion | null;
38
- /** Updates any values the attachment calculates using the {@link #getRegion()}. Must be called after setting the
39
- * {@link #getRegion()} or if the region's properties are changed. */
40
- updateRegion(): void;
41
- /** The color to tint the attachment. */
29
+ import type { Color } from "../Utils.js";
30
+ import type { Sequence } from "./Sequence.js";
31
+ /** Interface for an attachment that gets 1 or more texture regions from a {@link Sequence}. */
32
+ export interface HasSequence {
33
+ /** The base path for the attachment's texture region. */
34
+ path?: string;
35
+ /** The color the attachment is tinted, to be combined with {@link SlotPose.getColor}. */
42
36
  color: Color;
43
- sequence: Sequence | null;
37
+ /** Calls {@link Sequence.update} on this attachment's sequence. */
38
+ updateSequence(): void;
39
+ /** The sequence that provides texture regions, UVs, and vertex offsets for rendering this attachment. */
40
+ sequence: Sequence;
44
41
  }
@@ -0,0 +1,30 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated April 5, 2025. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2025, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
13
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
+ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ export {};
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXR0YWNobWVudHMvSGFzU2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IFNsb3RQb3NlIH0gZnJvbSBcIi4uL1Nsb3RQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbG9yIH0gZnJvbSBcIi4uL1V0aWxzLmpzXCJcbmltcG9ydCB0eXBlIHsgU2VxdWVuY2UgfSBmcm9tIFwiLi9TZXF1ZW5jZS5qc1wiXG5cbi8qKiBJbnRlcmZhY2UgZm9yIGFuIGF0dGFjaG1lbnQgdGhhdCBnZXRzIDEgb3IgbW9yZSB0ZXh0dXJlIHJlZ2lvbnMgZnJvbSBhIHtAbGluayBTZXF1ZW5jZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc1NlcXVlbmNlIHtcblx0LyoqIFRoZSBiYXNlIHBhdGggZm9yIHRoZSBhdHRhY2htZW50J3MgdGV4dHVyZSByZWdpb24uICovXG5cdHBhdGg/OiBzdHJpbmc7XG5cblx0LyoqIFRoZSBjb2xvciB0aGUgYXR0YWNobWVudCBpcyB0aW50ZWQsIHRvIGJlIGNvbWJpbmVkIHdpdGgge0BsaW5rIFNsb3RQb3NlLmdldENvbG9yfS4gKi9cblx0Y29sb3I6IENvbG9yO1xuXG5cdC8qKiBDYWxscyB7QGxpbmsgU2VxdWVuY2UudXBkYXRlfSBvbiB0aGlzIGF0dGFjaG1lbnQncyBzZXF1ZW5jZS4gKi9cblx0dXBkYXRlU2VxdWVuY2UgKCk6IHZvaWQ7XG5cblx0LyoqIFRoZSBzZXF1ZW5jZSB0aGF0IHByb3ZpZGVzIHRleHR1cmUgcmVnaW9ucywgVVZzLCBhbmQgdmVydGV4IG9mZnNldHMgZm9yIHJlbmRlcmluZyB0aGlzIGF0dGFjaG1lbnQuICovXG5cdHNlcXVlbmNlOiBTZXF1ZW5jZTtcbn1cbiJdfQ==
@@ -26,54 +26,47 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { TextureRegion } from "../Texture.js";
30
- import { Color, NumberArrayLike } from "../Utils.js";
31
- import { VertexAttachment, Attachment } from "./Attachment.js";
32
- import { HasTextureRegion } from "./HasTextureRegion.js";
33
- import { Sequence } from "./Sequence.js";
34
- import { Slot } from "../Slot.js";
29
+ import type { TextureRegion } from "../Texture.js";
30
+ import { Color, type NumberArrayLike } from "../Utils.js";
31
+ import { VertexAttachment } from "./Attachment.js";
32
+ import type { HasSequence } from "./HasSequence.js";
33
+ import type { Sequence } from "./Sequence.js";
35
34
  /** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not
36
- * supported. Each vertex has UVs (texture coordinates) and triangles are used to map an image on to the mesh.
35
+ * supported. Each vertex has UVs (texture coordinates) and triangles that are used to map an image on to the mesh.
37
36
  *
38
37
  * See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */
39
- export declare class MeshAttachment extends VertexAttachment implements HasTextureRegion {
40
- region: TextureRegion | null;
41
- /** The name of the texture region for this attachment. */
42
- path: string;
38
+ export declare class MeshAttachment extends VertexAttachment implements HasSequence {
39
+ readonly sequence: Sequence;
43
40
  /** The UV pair for each vertex, normalized within the texture region. */
44
41
  regionUVs: NumberArrayLike;
45
- /** The UV pair for each vertex, normalized within the entire texture.
46
- *
47
- * See {@link #updateUVs}. */
48
- uvs: NumberArrayLike;
49
42
  /** Triplets of vertex indices which describe the mesh's triangulation. */
50
43
  triangles: Array<number>;
44
+ /** The number of entries at the beginning of {@link vertices} that make up the mesh hull. */
45
+ hullLength: number;
46
+ /** The name of the texture region for this attachment. */
47
+ path?: string;
51
48
  /** The color to tint the mesh. */
52
49
  color: Color;
50
+ private sourceMesh;
51
+ /** Vertex index pairs describing edges for controlling triangulation, or null if nonessential data was not exported. Mesh
52
+ * triangles do not never cross edges. Triangulation is not performed at runtime. */
53
+ edges: Array<number>;
53
54
  /** The width of the mesh's image. Available only when nonessential data was exported. */
54
55
  width: number;
55
56
  /** The height of the mesh's image. Available only when nonessential data was exported. */
56
57
  height: number;
57
- /** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */
58
- hullLength: number;
59
- /** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if
60
- * nonessential data was exported. Triangulation is not performed at runtime. */
61
- edges: Array<number>;
62
- private parentMesh;
63
- sequence: Sequence | null;
64
58
  tempColor: Color;
65
- constructor(name: string, path: string);
66
- /** Calculates {@link #uvs} using the {@link #regionUVs} and region. Must be called if the region, the region's properties, or
67
- * the {@link #regionUVs} are changed. */
68
- updateRegion(): void;
69
- /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices},
70
- * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the
71
- * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */
72
- getParentMesh(): MeshAttachment | null;
73
- /** @param parentMesh May be null. */
74
- setParentMesh(parentMesh: MeshAttachment): void;
75
- copy(): Attachment;
76
- computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number, stride: number): void;
77
- /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/
59
+ constructor(name: string, sequence: Sequence);
60
+ copy(): MeshAttachment;
61
+ updateSequence(): void;
62
+ /** The source mesh if this is a linked mesh, else null. A linked mesh shares the {@link bones}, {@link vertices},
63
+ * {@link regionUVs}, {@link triangles}, {@link hullLength}, {@link edges}, {@link width}, and {@link height} with the
64
+ * source mesh, but may have a different {@link name} or {@link path}, and therefore a different texture region. */
65
+ getSourceMesh(): MeshAttachment | null;
66
+ setSourceMesh(sourceMesh: MeshAttachment | null): void;
67
+ /** Returns a new mesh with the {@link sourceMesh} set to this mesh's source mesh, if any, else to this mesh. **/
78
68
  newLinkedMesh(): MeshAttachment;
69
+ /** Computes {@link Sequence.getUVs | UVs} for a mesh attachment.
70
+ * @param uvs Output array for the computed UVs, same length as regionUVs. */
71
+ static computeUVs(region: TextureRegion | null, regionUVs: NumberArrayLike, uvs: NumberArrayLike): void;
79
72
  }