@codexo/exojs-tilemap 0.13.0

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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +187 -0
  3. package/dist/esm/TileChunk.d.ts +136 -0
  4. package/dist/esm/TileChunk.js +192 -0
  5. package/dist/esm/TileChunk.js.map +1 -0
  6. package/dist/esm/TileChunkNode.d.ts +59 -0
  7. package/dist/esm/TileChunkNode.js +89 -0
  8. package/dist/esm/TileChunkNode.js.map +1 -0
  9. package/dist/esm/TileLayer.d.ts +229 -0
  10. package/dist/esm/TileLayer.js +450 -0
  11. package/dist/esm/TileLayer.js.map +1 -0
  12. package/dist/esm/TileLayerNode.d.ts +81 -0
  13. package/dist/esm/TileLayerNode.js +142 -0
  14. package/dist/esm/TileLayerNode.js.map +1 -0
  15. package/dist/esm/TileMap.d.ts +178 -0
  16. package/dist/esm/TileMap.js +262 -0
  17. package/dist/esm/TileMap.js.map +1 -0
  18. package/dist/esm/TileMapBand.d.ts +97 -0
  19. package/dist/esm/TileMapBand.js +161 -0
  20. package/dist/esm/TileMapBand.js.map +1 -0
  21. package/dist/esm/TileMapNode.d.ts +71 -0
  22. package/dist/esm/TileMapNode.js +113 -0
  23. package/dist/esm/TileMapNode.js.map +1 -0
  24. package/dist/esm/TileMapView.d.ts +182 -0
  25. package/dist/esm/TileMapView.js +342 -0
  26. package/dist/esm/TileMapView.js.map +1 -0
  27. package/dist/esm/TileSet.d.ts +99 -0
  28. package/dist/esm/TileSet.js +157 -0
  29. package/dist/esm/TileSet.js.map +1 -0
  30. package/dist/esm/chunkGeometry.d.ts +71 -0
  31. package/dist/esm/chunkGeometry.js +98 -0
  32. package/dist/esm/chunkGeometry.js.map +1 -0
  33. package/dist/esm/index.d.ts +1 -0
  34. package/dist/esm/index.js +10 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/pixelSnap.d.ts +12 -0
  37. package/dist/esm/pixelSnap.js +19 -0
  38. package/dist/esm/pixelSnap.js.map +1 -0
  39. package/dist/esm/public.d.ts +18 -0
  40. package/dist/esm/register.d.ts +1 -0
  41. package/dist/esm/register.js +20 -0
  42. package/dist/esm/register.js.map +1 -0
  43. package/dist/esm/tilemapExtension.d.ts +18 -0
  44. package/dist/esm/tilemapExtension.js +52 -0
  45. package/dist/esm/tilemapExtension.js.map +1 -0
  46. package/dist/esm/types.d.ts +139 -0
  47. package/dist/esm/types.js +121 -0
  48. package/dist/esm/types.js.map +1 -0
  49. package/dist/esm/webgl2/WebGl2TileChunkRenderer.d.ts +39 -0
  50. package/dist/esm/webgl2/WebGl2TileChunkRenderer.js +339 -0
  51. package/dist/esm/webgl2/WebGl2TileChunkRenderer.js.map +1 -0
  52. package/dist/esm/webgpu/WebGpuTileChunkRenderer.d.ts +42 -0
  53. package/dist/esm/webgpu/WebGpuTileChunkRenderer.js +390 -0
  54. package/dist/esm/webgpu/WebGpuTileChunkRenderer.js.map +1 -0
  55. package/package.json +48 -0
@@ -0,0 +1,390 @@
1
+ import { AbstractWebGpuRenderer, Texture, getWebGpuBlendState, stencilContentDepthStencilState } from '@codexo/exojs/rendering';
2
+
3
+ /// <reference types="@webgpu/types" />
4
+ const instanceStrideBytes = 32;
5
+ const wordsPerInstance = instanceStrideBytes / Uint32Array.BYTES_PER_ELEMENT; // = 8
6
+ const projectionByteLength = 64;
7
+ const initialBatchCapacity = 256;
8
+ const indicesPerInstance = 6;
9
+ const quadIndices = new Uint16Array([0, 1, 2, 0, 2, 3]);
10
+ const TILE_ROW_MASK = 0x1fffffff;
11
+ const TILE_DIAGONAL_BIT = 0x20000000;
12
+ const tileShaderSource = `
13
+ struct ProjectionUniforms {
14
+ matrix: mat4x4<f32>,
15
+ };
16
+
17
+ struct TransformSlot {
18
+ m0: vec4<f32>,
19
+ m1: vec4<f32>,
20
+ m2: vec4<f32>,
21
+ };
22
+
23
+ @group(0) @binding(0)
24
+ var<uniform> projection: ProjectionUniforms;
25
+ @group(0) @binding(1)
26
+ var<storage, read> transforms: array<TransformSlot>;
27
+
28
+ @group(1) @binding(0)
29
+ var tileTexture: texture_2d<f32>;
30
+ @group(1) @binding(1)
31
+ var tileSampler: sampler;
32
+
33
+ struct VertexInput {
34
+ @location(0) quadBounds: vec4<f32>, // x0, y0, x1, y1
35
+ @location(1) uvBounds: vec4<f32>, // uMin, vMin, uMax, vMax (flipX/Y + texture flipY baked)
36
+ @location(2) color: vec4<f32>, // RGBA tint (layer opacity in alpha)
37
+ @location(3) tileWord: u32, // transform row (bits 0..28) | diagonal (bit 29)
38
+ };
39
+
40
+ struct VertexOutput {
41
+ @builtin(position) position: vec4<f32>,
42
+ @location(0) texcoord: vec2<f32>,
43
+ @location(1) color: vec4<f32>,
44
+ };
45
+
46
+ @vertex
47
+ fn vertexMain(input: VertexInput, @builtin(vertex_index) vid: u32) -> VertexOutput {
48
+ var output: VertexOutput;
49
+
50
+ // vid 0..3 → TL, TR, BR, BL (matches static index buffer [0,1,2,0,2,3])
51
+ let cornerX = ((vid + 1u) >> 1u) & 1u;
52
+ let cornerY = vid >> 1u;
53
+
54
+ let localX = select(input.quadBounds.x, input.quadBounds.z, cornerX == 1u);
55
+ let localY = select(input.quadBounds.y, input.quadBounds.w, cornerY == 1u);
56
+
57
+ let row = input.tileWord & ${TILE_ROW_MASK}u;
58
+ let diagonal = (input.tileWord & ${TILE_DIAGONAL_BIT}u) != 0u;
59
+
60
+ let slot = transforms[row];
61
+ let worldX = slot.m0.x * localX + slot.m0.y * localY + slot.m1.x;
62
+ let worldY = slot.m0.z * localX + slot.m0.w * localY + slot.m1.y;
63
+
64
+ output.position = projection.matrix * vec4<f32>(worldX, worldY, 0.0, 1.0);
65
+
66
+ // Tile orientation: diagonal transposes the corner-coordinate axes; flipX/Y
67
+ // are baked into the UV corner ordering by the CPU writer.
68
+ var su = cornerX;
69
+ var sv = cornerY;
70
+ if (diagonal) {
71
+ let t = su;
72
+ su = sv;
73
+ sv = t;
74
+ }
75
+
76
+ let u = select(input.uvBounds.x, input.uvBounds.z, su == 1u);
77
+ let v = select(input.uvBounds.y, input.uvBounds.w, sv == 1u);
78
+ output.texcoord = vec2<f32>(u, v);
79
+
80
+ output.color = vec4(input.color.rgb * input.color.a, input.color.a);
81
+
82
+ return output;
83
+ }
84
+
85
+ @fragment
86
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
87
+ let sample = textureSample(tileTexture, tileSampler, input.texcoord);
88
+ return sample * input.color;
89
+ }
90
+ `;
91
+ /**
92
+ * Instanced WebGPU renderer for {@link TileChunkNode}, the parity counterpart of
93
+ * the WebGL2 renderer. Same instance layout and orientation handling; per-chunk
94
+ * transforms ride on the backend's shared transform storage buffer, and the
95
+ * instance buffer grows on demand rather than flushing in fixed runs.
96
+ * @internal
97
+ */
98
+ class WebGpuTileChunkRenderer extends AbstractWebGpuRenderer {
99
+ _projectionData = new Float32Array(projectionByteLength / Float32Array.BYTES_PER_ELEMENT);
100
+ _device = null;
101
+ _shaderModule = null;
102
+ _uniformBindGroupLayout = null;
103
+ _textureBindGroupLayout = null;
104
+ _pipelineLayout = null;
105
+ _uniformBuffer = null;
106
+ _transformBindGroup = null;
107
+ _transformStorageBuffer = null;
108
+ _indexBuffer = null;
109
+ _instanceBuffer = null;
110
+ _instanceCapacity = 0;
111
+ _instanceData = new ArrayBuffer(0);
112
+ _instanceFloat32 = new Float32Array(this._instanceData);
113
+ _instanceUint32 = new Uint32Array(this._instanceData);
114
+ _pipelines = new Map();
115
+ _quadIndex = 0;
116
+ _maxNodeIndex = 0;
117
+ _currentBlendMode = null;
118
+ _currentTexture = null;
119
+ onConnect(backend) {
120
+ if (this._device) {
121
+ return;
122
+ }
123
+ this._device = backend.device;
124
+ this._shaderModule = this._device.createShaderModule({ code: tileShaderSource });
125
+ this._uniformBindGroupLayout = this._device.createBindGroupLayout({
126
+ entries: [
127
+ { binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } },
128
+ { binding: 1, visibility: GPUShaderStage.VERTEX, buffer: { type: 'read-only-storage' } },
129
+ ],
130
+ });
131
+ this._textureBindGroupLayout = this._device.createBindGroupLayout({
132
+ entries: [
133
+ { binding: 0, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'float' } },
134
+ { binding: 1, visibility: GPUShaderStage.FRAGMENT, sampler: { type: 'filtering' } },
135
+ ],
136
+ });
137
+ this._pipelineLayout = this._device.createPipelineLayout({
138
+ bindGroupLayouts: [this._uniformBindGroupLayout, this._textureBindGroupLayout],
139
+ });
140
+ this._uniformBuffer = this._device.createBuffer({
141
+ size: projectionByteLength,
142
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
143
+ });
144
+ this._indexBuffer = this._device.createBuffer({
145
+ size: quadIndices.byteLength,
146
+ usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
147
+ });
148
+ this._device.queue.writeBuffer(this._indexBuffer, 0, quadIndices.buffer, quadIndices.byteOffset, quadIndices.byteLength);
149
+ }
150
+ onDisconnect() {
151
+ this._instanceBuffer?.destroy();
152
+ this._indexBuffer?.destroy();
153
+ this._uniformBuffer?.destroy();
154
+ this._pipelines.clear();
155
+ this._instanceBuffer = null;
156
+ this._indexBuffer = null;
157
+ this._transformBindGroup = null;
158
+ this._transformStorageBuffer = null;
159
+ this._uniformBuffer = null;
160
+ this._pipelineLayout = null;
161
+ this._textureBindGroupLayout = null;
162
+ this._uniformBindGroupLayout = null;
163
+ this._shaderModule = null;
164
+ this._device = null;
165
+ this._backend = null;
166
+ this._instanceCapacity = 0;
167
+ this._instanceData = new ArrayBuffer(0);
168
+ this._instanceFloat32 = new Float32Array(this._instanceData);
169
+ this._instanceUint32 = new Uint32Array(this._instanceData);
170
+ this._quadIndex = 0;
171
+ this._maxNodeIndex = 0;
172
+ this._currentBlendMode = null;
173
+ this._currentTexture = null;
174
+ }
175
+ render(node) {
176
+ const backend = this._backend;
177
+ if (backend === null) {
178
+ return;
179
+ }
180
+ const pages = node.pages;
181
+ if (pages.length === 0) {
182
+ return;
183
+ }
184
+ const blendMode = node.blendMode;
185
+ const tintRgba = node.tint.toRgba();
186
+ const command = backend.activeDrawCommand;
187
+ const nodeIndex = command !== null ? command.nodeIndex : backend._pushTransform(node);
188
+ for (const page of pages) {
189
+ this._renderPage(backend, page.texture, page.quads, blendMode, tintRgba, nodeIndex);
190
+ }
191
+ }
192
+ _renderPage(backend, texture, quads, blendMode, tintRgba, nodeIndex) {
193
+ if (quads.length === 0) {
194
+ return;
195
+ }
196
+ if (texture.width === 0 || texture.height === 0) {
197
+ return;
198
+ }
199
+ if (texture instanceof Texture && texture.source === null) {
200
+ return;
201
+ }
202
+ const blendModeChanged = this._currentBlendMode !== null && blendMode !== this._currentBlendMode;
203
+ const textureChanged = this._currentTexture !== null && texture !== this._currentTexture;
204
+ const willExceed = this._quadIndex + quads.length > this._instanceCapacity && this._instanceCapacity > 0;
205
+ if ((blendModeChanged || textureChanged || willExceed) && this._quadIndex > 0) {
206
+ this.flush();
207
+ }
208
+ this._currentBlendMode = blendMode;
209
+ this._currentTexture = texture;
210
+ backend.setBlendMode(blendMode);
211
+ this._ensureInstanceCapacity(this._quadIndex + quads.length);
212
+ const f32 = this._instanceFloat32;
213
+ const u32 = this._instanceUint32;
214
+ const flipYTexture = texture.flipY;
215
+ const baseWord = nodeIndex & TILE_ROW_MASK;
216
+ for (const q of quads) {
217
+ const idx = this._quadIndex * wordsPerInstance;
218
+ f32[idx + 0] = q.x0;
219
+ f32[idx + 1] = q.y0;
220
+ f32[idx + 2] = q.x1;
221
+ f32[idx + 3] = q.y1;
222
+ const flipX = (q.orient & 1) !== 0;
223
+ const tileFlipY = (q.orient & 2) !== 0;
224
+ const diagonal = (q.orient & 4) !== 0;
225
+ const uA = flipX ? q.u1 : q.u0;
226
+ const uB = flipX ? q.u0 : q.u1;
227
+ let vA = tileFlipY ? q.v1 : q.v0;
228
+ let vB = tileFlipY ? q.v0 : q.v1;
229
+ if (flipYTexture) {
230
+ const swap = vA;
231
+ vA = vB;
232
+ vB = swap;
233
+ }
234
+ const uMin = (uA * 0xffff) & 0xffff;
235
+ const vMin = (vA * 0xffff) & 0xffff;
236
+ const uMax = (uB * 0xffff) & 0xffff;
237
+ const vMax = (vB * 0xffff) & 0xffff;
238
+ u32[idx + 4] = uMin | (vMin << 16);
239
+ u32[idx + 5] = uMax | (vMax << 16);
240
+ u32[idx + 6] = tintRgba;
241
+ u32[idx + 7] = (diagonal ? baseWord | TILE_DIAGONAL_BIT : baseWord) >>> 0;
242
+ this._quadIndex++;
243
+ }
244
+ if (nodeIndex > this._maxNodeIndex) {
245
+ this._maxNodeIndex = nodeIndex;
246
+ }
247
+ }
248
+ flush() {
249
+ const backend = this._backend;
250
+ const device = this._device;
251
+ const uniformBuffer = this._uniformBuffer;
252
+ if (!backend || !device || !uniformBuffer) {
253
+ return;
254
+ }
255
+ if (this._quadIndex === 0 && !backend.clearRequested) {
256
+ return;
257
+ }
258
+ const viewMatrix = backend.view.getTransform();
259
+ this._projectionData.set([viewMatrix.a, viewMatrix.c, 0, 0, viewMatrix.b, viewMatrix.d, 0, 0, 0, 0, 1, 0, viewMatrix.x, viewMatrix.y, 0, viewMatrix.z]);
260
+ device.queue.writeBuffer(uniformBuffer, 0, this._projectionData.buffer, this._projectionData.byteOffset, this._projectionData.byteLength);
261
+ const scissor = backend.getScissorRect();
262
+ const maskClipsAll = scissor !== null && (scissor.width <= 0 || scissor.height <= 0);
263
+ const pass = backend._passCoordinator.acquirePass().pass;
264
+ if (this._quadIndex > 0 && !maskClipsAll && this._instanceBuffer !== null && this._indexBuffer !== null && this._currentBlendMode !== null && this._currentTexture !== null) {
265
+ device.queue.writeBuffer(this._instanceBuffer, 0, this._instanceData, 0, this._quadIndex * instanceStrideBytes);
266
+ const storage = backend.getTransformStorageBuffer(this._maxNodeIndex + 1);
267
+ const transformBindGroup = this._getOrCreateTransformBindGroup(device, uniformBuffer, storage.buffer);
268
+ const textureBindGroup = this._createTextureBindGroup(device, backend, this._currentTexture);
269
+ const stencil = backend._passCoordinator.stencilActive;
270
+ const pipeline = this._getPipeline(this._currentBlendMode, backend.renderTargetFormat, stencil);
271
+ pass.setPipeline(pipeline);
272
+ pass.setBindGroup(0, transformBindGroup);
273
+ pass.setBindGroup(1, textureBindGroup);
274
+ pass.setVertexBuffer(0, this._instanceBuffer);
275
+ pass.setIndexBuffer(this._indexBuffer, 'uint16');
276
+ pass.drawIndexed(indicesPerInstance, this._quadIndex, 0, 0, 0);
277
+ backend.stats.batches++;
278
+ backend.stats.drawCalls++;
279
+ }
280
+ backend._passCoordinator.endPass();
281
+ this._quadIndex = 0;
282
+ this._maxNodeIndex = 0;
283
+ this._currentBlendMode = null;
284
+ this._currentTexture = null;
285
+ }
286
+ destroy() {
287
+ this.disconnect();
288
+ }
289
+ _getOrCreateTransformBindGroup(device, uniformBuffer, storageBuffer) {
290
+ if (this._transformBindGroup !== null && this._transformStorageBuffer === storageBuffer) {
291
+ return this._transformBindGroup;
292
+ }
293
+ this._transformStorageBuffer = storageBuffer;
294
+ this._transformBindGroup = device.createBindGroup({
295
+ layout: this._uniformBindGroupLayout,
296
+ entries: [
297
+ { binding: 0, resource: { buffer: uniformBuffer } },
298
+ { binding: 1, resource: { buffer: storageBuffer } },
299
+ ],
300
+ });
301
+ return this._transformBindGroup;
302
+ }
303
+ _createTextureBindGroup(device, backend, texture) {
304
+ const binding = backend.getTextureBinding(texture);
305
+ return device.createBindGroup({
306
+ layout: this._textureBindGroupLayout,
307
+ entries: [
308
+ { binding: 0, resource: binding.view },
309
+ { binding: 1, resource: binding.sampler },
310
+ ],
311
+ });
312
+ }
313
+ _getPipeline(blendMode, format, stencil) {
314
+ const key = `${blendMode}:${format}:${stencil ? 's' : 'n'}`;
315
+ const existing = this._pipelines.get(key);
316
+ if (existing) {
317
+ return existing;
318
+ }
319
+ if (!this._device || !this._shaderModule || !this._pipelineLayout) {
320
+ throw new Error('WebGpuTileChunkRenderer: renderer must be connected first.');
321
+ }
322
+ const descriptor = {
323
+ layout: this._pipelineLayout,
324
+ vertex: {
325
+ module: this._shaderModule,
326
+ entryPoint: 'vertexMain',
327
+ buffers: [
328
+ {
329
+ arrayStride: instanceStrideBytes,
330
+ stepMode: 'instance',
331
+ attributes: [
332
+ { shaderLocation: 0, offset: 0, format: 'float32x4' },
333
+ { shaderLocation: 1, offset: 16, format: 'unorm16x4' },
334
+ { shaderLocation: 2, offset: 24, format: 'unorm8x4' },
335
+ { shaderLocation: 3, offset: 28, format: 'uint32' },
336
+ ],
337
+ },
338
+ ],
339
+ },
340
+ fragment: {
341
+ module: this._shaderModule,
342
+ entryPoint: 'fragmentMain',
343
+ targets: [
344
+ {
345
+ format,
346
+ blend: getWebGpuBlendState(blendMode),
347
+ writeMask: GPUColorWrite.ALL,
348
+ },
349
+ ],
350
+ },
351
+ primitive: {
352
+ topology: 'triangle-list',
353
+ },
354
+ };
355
+ if (stencil) {
356
+ descriptor.depthStencil = stencilContentDepthStencilState();
357
+ }
358
+ const pipeline = this._device.createRenderPipeline(descriptor);
359
+ this._pipelines.set(key, pipeline);
360
+ return pipeline;
361
+ }
362
+ _ensureInstanceCapacity(instanceCount) {
363
+ if (!this._device || instanceCount <= this._instanceCapacity) {
364
+ return;
365
+ }
366
+ let nextCapacity = Math.max(this._instanceCapacity, initialBatchCapacity);
367
+ while (nextCapacity < instanceCount) {
368
+ nextCapacity *= 2;
369
+ }
370
+ const oldData = this._instanceData;
371
+ const carryBytes = Math.min(this._quadIndex * instanceStrideBytes, oldData.byteLength);
372
+ const instanceData = new ArrayBuffer(nextCapacity * instanceStrideBytes);
373
+ if (carryBytes > 0) {
374
+ new Uint8Array(instanceData).set(new Uint8Array(oldData, 0, carryBytes));
375
+ }
376
+ const instanceBuffer = this._device.createBuffer({
377
+ size: instanceData.byteLength,
378
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
379
+ });
380
+ this._instanceBuffer?.destroy();
381
+ this._instanceCapacity = nextCapacity;
382
+ this._instanceData = instanceData;
383
+ this._instanceFloat32 = new Float32Array(instanceData);
384
+ this._instanceUint32 = new Uint32Array(instanceData);
385
+ this._instanceBuffer = instanceBuffer;
386
+ }
387
+ }
388
+
389
+ export { WebGpuTileChunkRenderer };
390
+ //# sourceMappingURL=WebGpuTileChunkRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGpuTileChunkRenderer.js","sources":["../../../../src/webgpu/WebGpuTileChunkRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;AAQA,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,WAAW,CAAC,iBAAiB,CAAC;AAC7E,MAAM,oBAAoB,GAAG,EAAE;AAC/B,MAAM,oBAAoB,GAAG,GAAG;AAChC,MAAM,kBAAkB,GAAG,CAAC;AAC5B,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvD,MAAM,aAAa,GAAG,UAAU;AAChC,MAAM,iBAAiB,GAAG,UAAU;AAEpC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA6CQ,aAAa,CAAA;uCACP,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCvD;AAED;;;;;;AAMG;AACG,MAAO,uBAAwB,SAAQ,sBAAqC,CAAA;IAC/D,eAAe,GAAG,IAAI,YAAY,CAAC,oBAAoB,GAAG,YAAY,CAAC,iBAAiB,CAAC;IAElG,OAAO,GAAqB,IAAI;IAChC,aAAa,GAA2B,IAAI;IAC5C,uBAAuB,GAA8B,IAAI;IACzD,uBAAuB,GAA8B,IAAI;IACzD,eAAe,GAA6B,IAAI;IAChD,cAAc,GAAqB,IAAI;IACvC,mBAAmB,GAAwB,IAAI;IAC/C,uBAAuB,GAAqB,IAAI;IAChD,YAAY,GAAqB,IAAI;IACrC,eAAe,GAAqB,IAAI;IACxC,iBAAiB,GAAG,CAAC;AACrB,IAAA,aAAa,GAAgB,IAAI,WAAW,CAAC,CAAC,CAAC;IAC/C,gBAAgB,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IACvD,eAAe,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5C,IAAA,UAAU,GAAG,IAAI,GAAG,EAA6B;IAE1D,UAAU,GAAG,CAAC;IACd,aAAa,GAAG,CAAC;IACjB,iBAAiB,GAAsB,IAAI;IAC3C,eAAe,GAAmB,IAAI;AAEpC,IAAA,SAAS,CAAC,OAAsB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAEhF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;AAC9E,gBAAA,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;AACzF,aAAA;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;AACrF,gBAAA,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;AACpF,aAAA;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACvD,gBAAgB,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC/E,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC9C,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;AACxD,SAAA,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,WAAW,CAAC,UAAU;AAC5B,YAAA,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,QAAQ;AACtD,SAAA,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;IAC1H;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AAC/B,QAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5D,IAAI,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;AAEO,IAAA,MAAM,CAAC,IAAmB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAE7B,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAEnC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB;QACzC,MAAM,SAAS,GAAG,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;AAErF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;QACrF;IACF;IAEQ,WAAW,CACjB,OAAsB,EACtB,OAAgB,EAChB,KAA0B,EAC1B,SAAqB,EACrB,QAAgB,EAChB,SAAiB,EAAA;AAEjB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/C;QACF;QAEA,IAAI,OAAO,YAAY,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;YACzD;QACF;AAEA,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;AAChG,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe;AACxF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAExG,QAAA,IAAI,CAAC,gBAAgB,IAAI,cAAc,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;YAC7E,IAAI,CAAC,KAAK,EAAE;QACd;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAC9B,QAAA,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC;QAE/B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;AAE5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;AAChC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK;AAClC,QAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa;AAE1C,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,gBAAgB;YAE9C,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YACnB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YACnB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YACnB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YAEnB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YAClC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;AAErC,YAAA,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC9B,YAAA,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC9B,YAAA,IAAI,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAChC,YAAA,IAAI,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;YAEhC,IAAI,YAAY,EAAE;gBAChB,MAAM,IAAI,GAAG,EAAE;gBACf,EAAE,GAAG,EAAE;gBACP,EAAE,GAAG,IAAI;YACX;YAEA,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM;YACnC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM;YACnC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM;YACnC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM;AAEnC,YAAA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAClC,YAAA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAClC,YAAA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ;YACvB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,MAAM,CAAC;YAEzE,IAAI,CAAC,UAAU,EAAE;QACnB;AAEA,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAChC;IACF;IAEO,KAAK,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc;QAEzC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE;YACzC;QACF;QAEA,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YACpD;QACF;QAEA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;QAE9C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QACvJ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AAEzI,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE;AACxC,QAAA,MAAM,YAAY,GAAG,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QAEpF,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,IAAI;AAExD,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;YAC3K,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC;AAE/G,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACzE,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC;AACrG,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;AAE5F,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,aAAa;AACtD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAE/F,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,kBAAkB,CAAC;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE9D,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;QAC3B;AAEA,QAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAElC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;IAEO,OAAO,GAAA;QACZ,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,8BAA8B,CAAC,MAAiB,EAAE,aAAwB,EAAE,aAAwB,EAAA;AAC1G,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,IAAI,IAAI,CAAC,uBAAuB,KAAK,aAAa,EAAE;YACvF,OAAO,IAAI,CAAC,mBAAmB;QACjC;AAEA,QAAA,IAAI,CAAC,uBAAuB,GAAG,aAAa;AAC5C,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,eAAe,CAAC;YAChD,MAAM,EAAE,IAAI,CAAC,uBAAwB;AACrC,YAAA,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;gBACnD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;AACpD,aAAA;AACF,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,mBAAmB;IACjC;AAEQ,IAAA,uBAAuB,CAAC,MAAiB,EAAE,OAAsB,EAAE,OAAgB,EAAA;QACzF,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAElD,OAAO,MAAM,CAAC,eAAe,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,uBAAwB;AACrC,YAAA,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE;gBACtC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE;AAC1C,aAAA;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,YAAY,CAAC,SAAqB,EAAE,MAAwB,EAAE,OAAgB,EAAA;AACpF,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAEzC,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACjE,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;QAC/E;AAEA,QAAA,MAAM,UAAU,GAAgC;YAC9C,MAAM,EAAE,IAAI,CAAC,eAAe;AAC5B,YAAA,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,QAAQ,EAAE,UAAU;AACpB,wBAAA,UAAU,EAAE;4BACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;4BACrD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;4BACtD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;4BACrD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;AACpD,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA;wBACE,MAAM;AACN,wBAAA,KAAK,EAAE,mBAAmB,CAAC,SAAS,CAAC;wBACrC,SAAS,EAAE,aAAa,CAAC,GAAG;AAC7B,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,QAAQ,EAAE,eAAe;AAC1B,aAAA;SACF;QAED,IAAI,OAAO,EAAE;AACX,YAAA,UAAU,CAAC,YAAY,GAAG,+BAA+B,EAAE;QAC7D;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC;QAE9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAElC,QAAA,OAAO,QAAQ;IACjB;AAEQ,IAAA,uBAAuB,CAAC,aAAqB,EAAA;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,aAAa,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC5D;QACF;AAEA,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;AAEzE,QAAA,OAAO,YAAY,GAAG,aAAa,EAAE;YACnC,YAAY,IAAI,CAAC;QACnB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC;QACtF,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,YAAY,GAAG,mBAAmB,CAAC;AAExE,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,YAAA,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC1E;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/C,IAAI,EAAE,YAAY,CAAC,UAAU;AAC7B,YAAA,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ;AACvD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AAE/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;QACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC;QACtD,IAAI,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC;AACpD,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc;IACvC;AACD;;;;"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@codexo/exojs-tilemap",
3
+ "version": "0.13.0",
4
+ "description": "Generic, format-independent tilemap runtime for ExoJS.",
5
+ "type": "module",
6
+ "sideEffects": [
7
+ "./dist/esm/register.js"
8
+ ],
9
+ "main": "./dist/esm/index.js",
10
+ "module": "./dist/esm/index.js",
11
+ "types": "./dist/esm/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/esm/index.d.ts",
15
+ "import": "./dist/esm/index.js",
16
+ "default": "./dist/esm/index.js"
17
+ },
18
+ "./register": {
19
+ "types": "./dist/esm/register.d.ts",
20
+ "import": "./dist/esm/register.js",
21
+ "default": "./dist/esm/register.js"
22
+ },
23
+ "./package.json": "./package.json"
24
+ },
25
+ "files": [
26
+ "dist/esm/",
27
+ "README.md",
28
+ "LICENSE"
29
+ ],
30
+ "peerDependencies": {
31
+ "@codexo/exojs": "0.13.x"
32
+ },
33
+ "devDependencies": {
34
+ "@codexo/exojs": "0.13.0",
35
+ "@codexo/exojs-config": "0.0.0"
36
+ },
37
+ "license": "MIT",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "scripts": {
42
+ "build": "tsx ../../node_modules/rollup/dist/bin/rollup -c --environment EXOJS_ENV:production",
43
+ "build:dev": "tsx ../../node_modules/rollup/dist/bin/rollup -c --environment EXOJS_ENV:development",
44
+ "typecheck": "tsc --noEmit",
45
+ "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
46
+ "test": "vitest run --root ../.. --project=exojs-tilemap"
47
+ }
48
+ }