@codexo/exojs-tiled 0.15.3 → 0.16.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 (84) hide show
  1. package/README.md +59 -66
  2. package/dist/esm/TiledLayer.d.ts +2 -1
  3. package/dist/esm/TiledLayer.d.ts.map +1 -0
  4. package/dist/esm/TiledLayer.js +106 -108
  5. package/dist/esm/TiledLayer.js.map +1 -1
  6. package/dist/esm/TiledMap.d.ts +35 -7
  7. package/dist/esm/TiledMap.d.ts.map +1 -0
  8. package/dist/esm/TiledMap.js +714 -589
  9. package/dist/esm/TiledMap.js.map +1 -1
  10. package/dist/esm/TiledObject.d.ts +7 -0
  11. package/dist/esm/TiledObject.d.ts.map +1 -0
  12. package/dist/esm/TiledObject.js +59 -51
  13. package/dist/esm/TiledObject.js.map +1 -1
  14. package/dist/esm/TiledTileset.d.ts +11 -4
  15. package/dist/esm/TiledTileset.d.ts.map +1 -0
  16. package/dist/esm/TiledTileset.js +81 -70
  17. package/dist/esm/TiledTileset.js.map +1 -1
  18. package/dist/esm/data.d.ts +25 -7
  19. package/dist/esm/data.d.ts.map +1 -0
  20. package/dist/esm/decodeLayerData.d.ts +2 -1
  21. package/dist/esm/decodeLayerData.d.ts.map +1 -0
  22. package/dist/esm/decodeLayerData.js +53 -92
  23. package/dist/esm/decodeLayerData.js.map +1 -1
  24. package/dist/esm/gid.d.ts +2 -1
  25. package/dist/esm/gid.d.ts.map +1 -0
  26. package/dist/esm/gid.js +15 -24
  27. package/dist/esm/gid.js.map +1 -1
  28. package/dist/esm/index.d.ts +1 -0
  29. package/dist/esm/index.d.ts.map +1 -0
  30. package/dist/esm/index.js +14 -12
  31. package/dist/esm/loadTiledMap.d.ts +11 -5
  32. package/dist/esm/loadTiledMap.d.ts.map +1 -0
  33. package/dist/esm/loadTiledMap.js +82 -91
  34. package/dist/esm/loadTiledMap.js.map +1 -1
  35. package/dist/esm/objectAlignment.d.ts +28 -0
  36. package/dist/esm/objectAlignment.d.ts.map +1 -0
  37. package/dist/esm/objectAlignment.js +79 -0
  38. package/dist/esm/objectAlignment.js.map +1 -0
  39. package/dist/esm/public.d.ts +17 -15
  40. package/dist/esm/public.d.ts.map +1 -0
  41. package/dist/esm/public.js +14 -0
  42. package/dist/esm/tileMapType.d.ts +31 -0
  43. package/dist/esm/tileMapType.d.ts.map +1 -0
  44. package/dist/esm/tileMapType.js +42 -0
  45. package/dist/esm/tileMapType.js.map +1 -0
  46. package/dist/esm/tiledBuildInfo.d.ts +1 -0
  47. package/dist/esm/tiledBuildInfo.d.ts.map +1 -0
  48. package/dist/esm/tiledBuildInfo.js +6 -4
  49. package/dist/esm/tiledBuildInfo.js.map +1 -1
  50. package/dist/esm/tiledExtension.d.ts +7 -6
  51. package/dist/esm/tiledExtension.d.ts.map +1 -0
  52. package/dist/esm/tiledExtension.js +23 -25
  53. package/dist/esm/tiledExtension.js.map +1 -1
  54. package/dist/esm/tiledOptions.d.ts +5 -4
  55. package/dist/esm/tiledOptions.d.ts.map +1 -0
  56. package/dist/esm/tiledOptions.js +11 -13
  57. package/dist/esm/tiledOptions.js.map +1 -1
  58. package/dist/esm/tiledSourceType.d.ts +24 -0
  59. package/dist/esm/tiledSourceType.d.ts.map +1 -0
  60. package/dist/esm/tiledSourceType.js +44 -0
  61. package/dist/esm/tiledSourceType.js.map +1 -0
  62. package/dist/esm/url.d.ts +2 -1
  63. package/dist/esm/url.d.ts.map +1 -0
  64. package/dist/esm/url.js +26 -37
  65. package/dist/esm/url.js.map +1 -1
  66. package/dist/esm/validate.d.ts +11 -10
  67. package/dist/esm/validate.d.ts.map +1 -0
  68. package/dist/esm/validate.js +485 -534
  69. package/dist/esm/validate.js.map +1 -1
  70. package/dist/esm/wangSets.d.ts +5 -4
  71. package/dist/esm/wangSets.d.ts.map +1 -0
  72. package/dist/esm/wangSets.js +90 -115
  73. package/dist/esm/wangSets.js.map +1 -1
  74. package/package.json +10 -18
  75. package/dist/esm/index.js.map +0 -1
  76. package/dist/esm/register.d.ts +0 -1
  77. package/dist/esm/register.js +0 -22
  78. package/dist/esm/register.js.map +0 -1
  79. package/dist/esm/tiledMapBinding.d.ts +0 -19
  80. package/dist/esm/tiledMapBinding.js +0 -31
  81. package/dist/esm/tiledMapBinding.js.map +0 -1
  82. package/dist/esm/tiledRuntimeMapBinding.d.ts +0 -29
  83. package/dist/esm/tiledRuntimeMapBinding.js +0 -42
  84. package/dist/esm/tiledRuntimeMapBinding.js.map +0 -1
package/README.md CHANGED
@@ -6,11 +6,13 @@ into a generic runtime `TileMap` or a typed parsed source model.
6
6
  ## Installation
7
7
 
8
8
  ```sh
9
- npm install @codexo/exojs @codexo/exojs-tiled
9
+ npm install @codexo/exojs @codexo/exojs-tilemap @codexo/exojs-tiled
10
10
  ```
11
11
 
12
- `@codexo/exojs` is a peer dependency. `@codexo/exojs-tilemap` is a regular dependency and is
13
- installed transitively by `@codexo/exojs-tiled` you do not need to install it manually.
12
+ Both `@codexo/exojs` and `@codexo/exojs-tilemap` are **peer** dependencies, so install them
13
+ explicitly alongside the adapter. Nothing is pulled in transitively: strict package managers
14
+ (pnpm, Yarn PnP) will not resolve an unlisted peer, and npm's auto-install of peers still leaves
15
+ the versions outside your control. Keep the engine and every adapter on the same version.
14
16
 
15
17
  If you want the generic tilemap runtime without the Tiled adapter:
16
18
 
@@ -20,10 +22,10 @@ npm install @codexo/exojs @codexo/exojs-tilemap
20
22
 
21
23
  ## What this package provides
22
24
 
23
- - `TileMap` (re-exported from `@codexo/exojs-tilemap`) — generic runtime tilemap; the common-case result of `loader.load(TileMap, url)`
25
+ - `TileMap` (re-exported from `@codexo/exojs-tilemap`) — generic runtime tilemap; the common-case result of `loader.load(Asset.type('tileMap', url))`
24
26
  - `TileMapNode` / `TileLayerNode` (re-exported from `@codexo/exojs-tilemap`) — scene nodes that render a loaded `TileMap` on WebGL2/WebGPU
25
27
  - `TileMapView` / `TileMapBand` (re-exported from `@codexo/exojs-tilemap`) — group a map's layers into independently placeable bands for interleaving actors between tile layers; same class identity, so `instanceof` holds across both import paths (the canonical view/band docs live in the [`@codexo/exojs-tilemap` README](https://www.npmjs.com/package/@codexo/exojs-tilemap))
26
- - `TiledMap` — parsed Tiled source model; advanced/diagnostic use via `loader.load(TiledMap, url)`
28
+ - `TiledMap` — parsed Tiled source model; advanced/diagnostic use via `loader.load(Asset.type('tiledSource', url))`
27
29
  - `TiledTileset` — parsed tileset (atlas-image or collection-of-images); holds resolved textures
28
30
  - `TiledLayer` hierarchy — `TiledTileLayer`, `TiledObjectLayer`, `TiledImageLayer`, `TiledGroupLayer`
29
31
  - `TiledObject` — parsed object (point, ellipse, polygon, polyline, text, tile-ref, rectangle)
@@ -43,10 +45,10 @@ import { TileMap, TileMapNode, tiledExtension } from '@codexo/exojs-tiled';
43
45
 
44
46
  const app = new Application({ extensions: [tiledExtension] });
45
47
 
46
- const map = await app.loader.load(TileMap, 'maps/world.tmj');
48
+ const map = await app.loader.load(Asset.type('tileMap', 'maps/world.tmj'));
47
49
  // map is a @codexo/exojs-tilemap TileMap
48
50
 
49
- app.scene.root.addChild(new TileMapNode(map));
51
+ app.scenes.root.addChild(new TileMapNode(map));
50
52
  ```
51
53
 
52
54
  `TileMapNode` and `TileLayerNode` are the same classes exported by `@codexo/exojs-tilemap` (see its
@@ -60,41 +62,27 @@ Load the fully resolved Tiled source model and convert it manually:
60
62
  ```ts
61
63
  import { TiledMap } from '@codexo/exojs-tiled';
62
64
 
63
- const source = await app.loader.load(TiledMap, 'maps/world.tmj');
65
+ const source = await app.loader.load(Asset.type('tiledSource', 'maps/world.tmj'));
64
66
  const map = source.toTileMap();
65
67
  ```
66
68
 
67
69
  Both paths are semantically equivalent. The runtime binding (`TileMap`) uses the Loader-managed
68
70
  source-model sub-load internally, so concurrent or duplicate loads are deduplicated.
69
71
 
70
- ## `/register` convenience entry
71
-
72
- Importing `/register` registers `tiledExtension` (and its `tilemapExtension` dependency) in the
73
- global `ExtensionRegistry`. Subsequently created Applications that use global defaults will
74
- receive both extensions automatically.
75
-
76
- ```ts
77
- // Side effect: registers tiledExtension in the global ExtensionRegistry.
78
- import '@codexo/exojs-tiled/register';
79
-
80
- // All named exports are also re-exported from /register:
81
- import { TileMap, TiledMap, tiledExtension } from '@codexo/exojs-tiled/register';
82
- ```
83
-
84
72
  ## Extension dependency
85
73
 
86
74
  `tiledExtension.dependencies` includes `tilemapExtension` from `@codexo/exojs-tilemap`.
87
- Registering `tiledExtension` is sufficient — `buildSnapshot` and `ExtensionRegistry.register`
88
- traverse the dependency graph automatically.
75
+ Passing `tiledExtension` to `ApplicationOptions.extensions` is sufficient — `buildSnapshot`
76
+ traverses the dependency graph automatically.
89
77
 
90
78
  ## Asset loading
91
79
 
92
- `loader.load(TileMap, url)` (common path) and `loader.load(TiledMap, url)` (advanced path) both:
80
+ `loader.load(Asset.type('tileMap', url))` (common path) and `loader.load(Asset.type('tiledSource', url))` (advanced path) both:
93
81
 
94
82
  1. Fetch and validate the `.tmj` file.
95
83
  2. Resolve each tileset entry (fetches external `.tsj` files via the Loader cache).
96
84
  3. Load atlas images (`tileset.image`) and per-tile images (collection-of-images tilesets)
97
- via `loader.load(Texture, …)` — the Loader deduplicates identical URLs.
85
+ via `loader.load(imageUrl)` — the Loader deduplicates identical URLs.
98
86
  4. Validate GID ranges (no duplicates, no overlaps, all layer GIDs covered) — throws
99
87
  `TiledFormatError` on any inconsistency.
100
88
 
@@ -105,53 +93,53 @@ The runtime binding additionally calls `TiledMap.toTileMap()` to produce the gen
105
93
  ```ts
106
94
  // `.tmj`/`.tsj` are recognised by extension; a format hint is only needed for
107
95
  // Tiled data served from a generic `.json` path:
108
- await loader.load(TileMap, 'maps/world.json', { format: 'tiled' });
96
+ await loader.load(Asset.type('tileMap', 'maps/world.json', { format: 'tiled' }));
109
97
  ```
110
98
 
111
- | Option | Type | Default | Description |
112
- |---|---|---|---|
99
+ | Option | Type | Default | Description |
100
+ | -------- | --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
113
101
  | `format` | `'tiled'` | `'tiled'` | Format hint for ambiguous `.json` paths. `.tmj`/`.tsj` are recognised by extension. `'tiled'` is the only accepted value (a foreign format is a compile error). Participates in the asset identity key. |
114
102
 
115
- Options are optional. Parsing is always strict: `validateTiledMapData` throws a `TiledFormatError` on any malformed *known* field, and silently preserves *unknown* fields (so real-world Tiled files using features ExoJS does not model still load).
103
+ Options are optional. Parsing is always strict: `validateTiledMapData` throws a `TiledFormatError` on any malformed _known_ field, and silently preserves _unknown_ fields (so real-world Tiled files using features ExoJS does not model still load).
116
104
 
117
105
  ## Parsed API overview
118
106
 
119
107
  ### `TiledMap`
120
108
 
121
109
  ```ts
122
- map.source // resolved URL this map was loaded from
123
- map.width // map width in tiles
124
- map.height // map height in tiles
125
- map.tileWidth // tile grid cell width in pixels
126
- map.tileHeight // tile grid cell height in pixels
127
- map.orientation // 'orthogonal' | 'isometric' | 'staggered' | 'hexagonal'
128
- map.renderOrder // 'right-down' | 'right-up' | 'left-down' | 'left-up' | undefined
129
- map.infinite // true for infinite maps (layers use chunks, not flat data)
130
- map.backgroundColor // optional CSS color string
131
- map.layers // TiledLayer[] — parsed layer hierarchy
132
- map.tilesets // TiledTileset[] — sorted by firstGid ascending
133
- map.properties // TiledPropertyData[] — custom properties
134
- map.findTilesetForGid(gid) // → TiledTileset | undefined (masks flip bits automatically)
135
- map.getProperty(name) // → TiledPropertyData | undefined
136
- map.toTileMap() // → TileMap — synchronous runtime conversion
137
- map.destroy() // no-op; textures are Loader-owned
110
+ map.source; // resolved URL this map was loaded from
111
+ map.width; // map width in tiles
112
+ map.height; // map height in tiles
113
+ map.tileWidth; // tile grid cell width in pixels
114
+ map.tileHeight; // tile grid cell height in pixels
115
+ map.orientation; // 'orthogonal' | 'isometric' | 'staggered' | 'hexagonal'
116
+ map.renderOrder; // 'right-down' | 'right-up' | 'left-down' | 'left-up' | undefined
117
+ map.infinite; // true for infinite maps (layers use chunks, not flat data)
118
+ map.backgroundColor; // optional CSS color string
119
+ map.layers; // TiledLayer[] — parsed layer hierarchy
120
+ map.tilesets; // TiledTileset[] — sorted by firstGid ascending
121
+ map.properties; // TiledPropertyData[] — custom properties
122
+ map.findTilesetForGid(gid); // → TiledTileset | undefined (masks flip bits automatically)
123
+ map.getProperty(name); // → TiledPropertyData | undefined
124
+ map.toTileMap(); // → TileMap — synchronous runtime conversion
125
+ map.destroy(); // no-op; textures are Loader-owned
138
126
  ```
139
127
 
140
128
  ### `TiledTileset`
141
129
 
142
130
  ```ts
143
- tileset.firstGid // first GID in this tileset's range (inclusive)
144
- tileset.lastGid // last GID in this tileset's range (inclusive)
145
- tileset.name
146
- tileset.tileWidth / tileHeight
147
- tileset.tileCount / columns / spacing / margin
148
- tileset.source // resolved .tsj URL (undefined for embedded tilesets)
149
- tileset.imageUrl // resolved atlas image URL (undefined for collection-of-images)
150
- tileset.texture // Texture loaded for imageUrl (Loader-owned)
151
- tileset.tileTextures // Map<localId, Texture> for collection-of-images tilesets (Loader-owned)
152
- tileset.tiles // TiledTileData[] — per-tile animation/property/collision data
153
- tileset.getTile(localId) // → TiledTileData | undefined
154
- tileset.getProperty(name) // → TiledPropertyData | undefined
131
+ tileset.firstGid; // first GID in this tileset's range (inclusive)
132
+ tileset.lastGid; // last GID in this tileset's range (inclusive)
133
+ tileset.name;
134
+ tileset.tileWidth / tileHeight;
135
+ tileset.tileCount / columns / spacing / margin;
136
+ tileset.source; // resolved .tsj URL (undefined for embedded tilesets)
137
+ tileset.imageUrl; // resolved atlas image URL (undefined for collection-of-images)
138
+ tileset.texture; // Texture loaded for imageUrl (Loader-owned)
139
+ tileset.tileTextures; // Map<localId, Texture> for collection-of-images tilesets (Loader-owned)
140
+ tileset.tiles; // TiledTileData[] — per-tile animation/property/collision data
141
+ tileset.getTile(localId); // → TiledTileData | undefined
142
+ tileset.getProperty(name); // → TiledPropertyData | undefined
155
143
  ```
156
144
 
157
145
  ### `TiledLayer` subclasses
@@ -159,18 +147,23 @@ tileset.getProperty(name) // → TiledPropertyData | undefined
159
147
  All layers extend `TiledLayer` (base: `id`, `name`, `class`, `visible`, `opacity`, `x`, `y`,
160
148
  `offsetX/Y`, `parallaxX/Y`, `tintColor`, `properties`, `getProperty(name)`).
161
149
 
162
- | Subclass | `type` | Extra fields |
163
- |---|---|---|
164
- | `TiledTileLayer` | `'tilelayer'` | `width`, `height`, `data?: number[]` (finite), `chunks?` (infinite) |
165
- | `TiledObjectLayer` | `'objectgroup'` | `drawOrder`, `objects: TiledObject[]` |
166
- | `TiledImageLayer` | `'imagelayer'` | `image`, `repeatX`, `repeatY` |
167
- | `TiledGroupLayer` | `'group'` | `layers: TiledLayer[]` |
150
+ | Subclass | `type` | Extra fields |
151
+ | ------------------ | --------------- | ------------------------------------------------------------------- |
152
+ | `TiledTileLayer` | `'tilelayer'` | `width`, `height`, `data?: number[]` (finite), `chunks?` (infinite) |
153
+ | `TiledObjectLayer` | `'objectgroup'` | `drawOrder`, `objects: TiledObject[]` |
154
+ | `TiledImageLayer` | `'imagelayer'` | `image`, `repeatX`, `repeatY` |
155
+ | `TiledGroupLayer` | `'group'` | `layers: TiledLayer[]` |
168
156
 
169
157
  ### `TiledObject`
170
158
 
171
159
  Shape discriminants: `point` (boolean), `ellipse` (boolean), `polygon`, `polyline`, `text`,
172
160
  `gid` (tile object). If none are set, the object is a plain rectangle.
173
161
 
162
+ `TiledObject.type` is the object's **class**, normalised across Tiled versions: 1.9 wrote it as
163
+ `class` in the JSON, every other version as `type`. A file carries one of the two, so `class` wins
164
+ when present and non-empty. That string is also the dispatch key a
165
+ [`MapObjectSpawner`](https://www.npmjs.com/package/@codexo/exojs-tilemap) sees.
166
+
174
167
  ## Texture ownership
175
168
 
176
169
  Textures for tileset images are loaded via the Loader and remain in the Loader cache.
@@ -180,8 +173,8 @@ The Loader handles texture lifecycle (including deduplication across maps that s
180
173
  ## Core compatibility
181
174
 
182
175
  | `@codexo/exojs-tiled` | `@codexo/exojs` |
183
- |---|---|
184
- | 0.13.x | 0.13.x |
176
+ | --------------------- | --------------- |
177
+ | 0.13.x | 0.13.x |
185
178
 
186
179
  ## Links
187
180
 
@@ -69,4 +69,5 @@ export declare class TiledGroupLayer extends TiledLayer {
69
69
  constructor(data: TiledGroupLayerData);
70
70
  }
71
71
  /** Constructs the appropriate {@link TiledLayer} subclass for `data.type`. */
72
- export declare function createTiledLayer(data: TiledLayerData): TiledLayer;
72
+ export declare const createTiledLayer: (data: TiledLayerData) => TiledLayer;
73
+ //# sourceMappingURL=TiledLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TiledLayer.d.ts","sourceRoot":"","sources":["../../src/TiledLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,2GAA2G;AAC3G,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEpD;;;;;;;GAOG;AACH,8BAAsB,UAAU;IAC9B,kBAAyB,IAAI,EAAE,cAAc,CAAC;IAE9C,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAgB,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAEzD,SAAS,aAAa,IAAI,EAAE,kBAAkB;IAgB9C,0CAA0C;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAGhE;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAyB,IAAI,EAAG,WAAW,CAAU;IAErD,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACrD,SAAgB,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAC;gBAE5C,IAAI,EAAE,kBAAkB;CAO5C;AAED,4DAA4D;AAC5D,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,SAAyB,IAAI,EAAG,aAAa,CAAU;IAEvD,SAAgB,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,SAAgB,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;gBAE7B,IAAI,EAAE,oBAAoB;CAK9C;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAyB,IAAI,EAAG,YAAY,CAAU;IAEtD,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAEd,IAAI,EAAE,mBAAmB;CAM7C;AAED,mEAAmE;AACnE,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAyB,IAAI,EAAG,OAAO,CAAU;IAEjD,SAAgB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;gBAE3B,IAAI,EAAE,mBAAmB;CAI7C;AAED,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,GAAI,MAAM,cAAc,KAAG,UAWvD,CAAC"}
@@ -1,117 +1,115 @@
1
- import { TiledObject } from './TiledObject.js';
1
+ import { TiledObject } from "./TiledObject.js";
2
2
 
3
+ //#region src/TiledLayer.ts
3
4
  /**
4
- * Base class for the four parsed Tiled layer types. Holds the fields shared
5
- * by every layer (`tilelayer`, `objectgroup`, `imagelayer`, `group`).
6
- *
7
- * Use {@link TiledLayer.type} (or `instanceof`) to discriminate between
8
- * {@link TiledTileLayer}, {@link TiledObjectLayer}, {@link TiledImageLayer},
9
- * and {@link TiledGroupLayer}.
10
- */
11
- class TiledLayer {
12
- id;
13
- name;
14
- class;
15
- visible;
16
- opacity;
17
- x;
18
- y;
19
- offsetX;
20
- offsetY;
21
- parallaxX;
22
- parallaxY;
23
- tintColor;
24
- properties;
25
- constructor(data) {
26
- this.id = data.id;
27
- this.name = data.name;
28
- this.class = data.class ?? '';
29
- this.visible = data.visible;
30
- this.opacity = data.opacity;
31
- this.x = data.x;
32
- this.y = data.y;
33
- this.offsetX = data.offsetx ?? 0;
34
- this.offsetY = data.offsety ?? 0;
35
- this.parallaxX = data.parallaxx ?? 1;
36
- this.parallaxY = data.parallaxy ?? 1;
37
- this.tintColor = data.tintcolor;
38
- this.properties = data.properties ?? [];
39
- }
40
- /** Looks up a custom property by name. */
41
- getProperty(name) {
42
- return this.properties.find(property => property.name === name);
43
- }
44
- }
5
+ * Base class for the four parsed Tiled layer types. Holds the fields shared
6
+ * by every layer (`tilelayer`, `objectgroup`, `imagelayer`, `group`).
7
+ *
8
+ * Use {@link TiledLayer.type} (or `instanceof`) to discriminate between
9
+ * {@link TiledTileLayer}, {@link TiledObjectLayer}, {@link TiledImageLayer},
10
+ * and {@link TiledGroupLayer}.
11
+ */
12
+ var TiledLayer = class {
13
+ id;
14
+ name;
15
+ class;
16
+ visible;
17
+ opacity;
18
+ x;
19
+ y;
20
+ offsetX;
21
+ offsetY;
22
+ parallaxX;
23
+ parallaxY;
24
+ tintColor;
25
+ properties;
26
+ constructor(data) {
27
+ this.id = data.id;
28
+ this.name = data.name;
29
+ this.class = data.class ?? "";
30
+ this.visible = data.visible;
31
+ this.opacity = data.opacity;
32
+ this.x = data.x;
33
+ this.y = data.y;
34
+ this.offsetX = data.offsetx ?? 0;
35
+ this.offsetY = data.offsety ?? 0;
36
+ this.parallaxX = data.parallaxx ?? 1;
37
+ this.parallaxY = data.parallaxy ?? 1;
38
+ this.tintColor = data.tintcolor;
39
+ this.properties = data.properties ?? [];
40
+ }
41
+ /** Looks up a custom property by name. */
42
+ getProperty(name) {
43
+ return this.properties.find((property) => property.name === name);
44
+ }
45
+ };
45
46
  /**
46
- * A tile layer. On a finite map, {@link data} holds the flat row-major array
47
- * of GIDs (`width * height` entries). On an infinite map, {@link chunks}
48
- * holds the sparse list of tile chunks instead; exactly one of the two is
49
- * defined, matching the owning {@link TiledMap}'s `infinite` flag.
50
- */
51
- class TiledTileLayer extends TiledLayer {
52
- type = 'tilelayer';
53
- width;
54
- height;
55
- data;
56
- chunks;
57
- constructor(data) {
58
- super(data);
59
- this.width = data.width;
60
- this.height = data.height;
61
- this.data = data.data;
62
- this.chunks = data.chunks;
63
- }
64
- }
47
+ * A tile layer. On a finite map, {@link data} holds the flat row-major array
48
+ * of GIDs (`width * height` entries). On an infinite map, {@link chunks}
49
+ * holds the sparse list of tile chunks instead; exactly one of the two is
50
+ * defined, matching the owning {@link TiledMap}'s `infinite` flag.
51
+ */
52
+ var TiledTileLayer = class extends TiledLayer {
53
+ type = "tilelayer";
54
+ width;
55
+ height;
56
+ data;
57
+ chunks;
58
+ constructor(data) {
59
+ super(data);
60
+ this.width = data.width;
61
+ this.height = data.height;
62
+ this.data = data.data;
63
+ this.chunks = data.chunks;
64
+ }
65
+ };
65
66
  /** An object layer: a flat list of {@link TiledObject}s. */
66
- class TiledObjectLayer extends TiledLayer {
67
- type = 'objectgroup';
68
- drawOrder;
69
- objects;
70
- constructor(data) {
71
- super(data);
72
- this.drawOrder = data.draworder ?? 'topdown';
73
- this.objects = data.objects.map(object => new TiledObject(object));
74
- }
75
- }
67
+ var TiledObjectLayer = class extends TiledLayer {
68
+ type = "objectgroup";
69
+ drawOrder;
70
+ objects;
71
+ constructor(data) {
72
+ super(data);
73
+ this.drawOrder = data.draworder ?? "topdown";
74
+ this.objects = data.objects.map((object) => new TiledObject(object));
75
+ }
76
+ };
76
77
  /**
77
- * An image layer. {@link image} is the path to the layer's image exactly as
78
- * written in the Tiled JSON (relative to the map's location); resolving it
79
- * against the owning {@link TiledMap}'s `source` is left to the consumer.
80
- */
81
- class TiledImageLayer extends TiledLayer {
82
- type = 'imagelayer';
83
- image;
84
- repeatX;
85
- repeatY;
86
- constructor(data) {
87
- super(data);
88
- this.image = data.image;
89
- this.repeatX = data.repeatx ?? false;
90
- this.repeatY = data.repeaty ?? false;
91
- }
92
- }
78
+ * An image layer. {@link image} is the path to the layer's image exactly as
79
+ * written in the Tiled JSON (relative to the map's location); resolving it
80
+ * against the owning {@link TiledMap}'s `source` is left to the consumer.
81
+ */
82
+ var TiledImageLayer = class extends TiledLayer {
83
+ type = "imagelayer";
84
+ image;
85
+ repeatX;
86
+ repeatY;
87
+ constructor(data) {
88
+ super(data);
89
+ this.image = data.image;
90
+ this.repeatX = data.repeatx ?? false;
91
+ this.repeatY = data.repeaty ?? false;
92
+ }
93
+ };
93
94
  /** A group layer, recursively containing further parsed layers. */
94
- class TiledGroupLayer extends TiledLayer {
95
- type = 'group';
96
- layers;
97
- constructor(data) {
98
- super(data);
99
- this.layers = data.layers.map(createTiledLayer);
100
- }
101
- }
95
+ var TiledGroupLayer = class extends TiledLayer {
96
+ type = "group";
97
+ layers;
98
+ constructor(data) {
99
+ super(data);
100
+ this.layers = data.layers.map(createTiledLayer);
101
+ }
102
+ };
102
103
  /** Constructs the appropriate {@link TiledLayer} subclass for `data.type`. */
103
- function createTiledLayer(data) {
104
- switch (data.type) {
105
- case 'tilelayer':
106
- return new TiledTileLayer(data);
107
- case 'objectgroup':
108
- return new TiledObjectLayer(data);
109
- case 'imagelayer':
110
- return new TiledImageLayer(data);
111
- case 'group':
112
- return new TiledGroupLayer(data);
113
- }
114
- }
104
+ const createTiledLayer = (data) => {
105
+ switch (data.type) {
106
+ case "tilelayer": return new TiledTileLayer(data);
107
+ case "objectgroup": return new TiledObjectLayer(data);
108
+ case "imagelayer": return new TiledImageLayer(data);
109
+ case "group": return new TiledGroupLayer(data);
110
+ }
111
+ };
115
112
 
113
+ //#endregion
116
114
  export { TiledGroupLayer, TiledImageLayer, TiledLayer, TiledObjectLayer, TiledTileLayer, createTiledLayer };
117
- //# sourceMappingURL=TiledLayer.js.map
115
+ //# sourceMappingURL=TiledLayer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TiledLayer.js","sources":["../../../src/TiledLayer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TiledLayer.js","names":[],"sources":["../../src/TiledLayer.ts"],"sourcesContent":["import type {\n TiledChunkData,\n TiledGroupLayerData,\n TiledImageLayerData,\n TiledLayerData,\n TiledLayerDataBase,\n TiledObjectLayerData,\n TiledPropertyData,\n TiledTileLayerData,\n} from './data';\nimport { TiledObject } from './TiledObject';\n\n/** Discriminant shared by every {@link TiledLayer} subclass, mirroring {@link TiledLayerData}'s `type`. */\nexport type TiledLayerType = TiledLayerData['type'];\n\n/**\n * Base class for the four parsed Tiled layer types. Holds the fields shared\n * by every layer (`tilelayer`, `objectgroup`, `imagelayer`, `group`).\n *\n * Use {@link TiledLayer.type} (or `instanceof`) to discriminate between\n * {@link TiledTileLayer}, {@link TiledObjectLayer}, {@link TiledImageLayer},\n * and {@link TiledGroupLayer}.\n */\nexport abstract class TiledLayer {\n public abstract readonly type: TiledLayerType;\n\n public readonly id: number;\n public readonly name: string;\n public readonly class: string;\n public readonly visible: boolean;\n public readonly opacity: number;\n public readonly x: number;\n public readonly y: number;\n public readonly offsetX: number;\n public readonly offsetY: number;\n public readonly parallaxX: number;\n public readonly parallaxY: number;\n public readonly tintColor?: string | undefined;\n public readonly properties: readonly TiledPropertyData[];\n\n protected constructor(data: TiledLayerDataBase) {\n this.id = data.id;\n this.name = data.name;\n this.class = data.class ?? '';\n this.visible = data.visible;\n this.opacity = data.opacity;\n this.x = data.x;\n this.y = data.y;\n this.offsetX = data.offsetx ?? 0;\n this.offsetY = data.offsety ?? 0;\n this.parallaxX = data.parallaxx ?? 1;\n this.parallaxY = data.parallaxy ?? 1;\n this.tintColor = data.tintcolor;\n this.properties = data.properties ?? [];\n }\n\n /** Looks up a custom property by name. */\n public getProperty(name: string): TiledPropertyData | undefined {\n return this.properties.find(property => property.name === name);\n }\n}\n\n/**\n * A tile layer. On a finite map, {@link data} holds the flat row-major array\n * of GIDs (`width * height` entries). On an infinite map, {@link chunks}\n * holds the sparse list of tile chunks instead; exactly one of the two is\n * defined, matching the owning {@link TiledMap}'s `infinite` flag.\n */\nexport class TiledTileLayer extends TiledLayer {\n public override readonly type = 'tilelayer' as const;\n\n public readonly width: number;\n public readonly height: number;\n public readonly data?: readonly number[] | undefined;\n public readonly chunks?: readonly TiledChunkData[] | undefined;\n\n public constructor(data: TiledTileLayerData) {\n super(data);\n this.width = data.width;\n this.height = data.height;\n this.data = data.data;\n this.chunks = data.chunks;\n }\n}\n\n/** An object layer: a flat list of {@link TiledObject}s. */\nexport class TiledObjectLayer extends TiledLayer {\n public override readonly type = 'objectgroup' as const;\n\n public readonly drawOrder: NonNullable<TiledObjectLayerData['draworder']>;\n public readonly objects: readonly TiledObject[];\n\n public constructor(data: TiledObjectLayerData) {\n super(data);\n this.drawOrder = data.draworder ?? 'topdown';\n this.objects = data.objects.map(object => new TiledObject(object));\n }\n}\n\n/**\n * An image layer. {@link image} is the path to the layer's image exactly as\n * written in the Tiled JSON (relative to the map's location); resolving it\n * against the owning {@link TiledMap}'s `source` is left to the consumer.\n */\nexport class TiledImageLayer extends TiledLayer {\n public override readonly type = 'imagelayer' as const;\n\n public readonly image: string;\n public readonly repeatX: boolean;\n public readonly repeatY: boolean;\n\n public constructor(data: TiledImageLayerData) {\n super(data);\n this.image = data.image;\n this.repeatX = data.repeatx ?? false;\n this.repeatY = data.repeaty ?? false;\n }\n}\n\n/** A group layer, recursively containing further parsed layers. */\nexport class TiledGroupLayer extends TiledLayer {\n public override readonly type = 'group' as const;\n\n public readonly layers: readonly TiledLayer[];\n\n public constructor(data: TiledGroupLayerData) {\n super(data);\n this.layers = data.layers.map(createTiledLayer);\n }\n}\n\n/** Constructs the appropriate {@link TiledLayer} subclass for `data.type`. */\nexport const createTiledLayer = (data: TiledLayerData): TiledLayer => {\n switch (data.type) {\n case 'tilelayer':\n return new TiledTileLayer(data);\n case 'objectgroup':\n return new TiledObjectLayer(data);\n case 'imagelayer':\n return new TiledImageLayer(data);\n case 'group':\n return new TiledGroupLayer(data);\n }\n};\n"],"mappings":";;;;;;;;;;;AAuBA,IAAsB,aAAtB,MAAiC;CAG/B,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAU,YAAY,MAA0B;EAC9C,KAAK,KAAK,KAAK;EACf,KAAK,OAAO,KAAK;EACjB,KAAK,QAAQ,KAAK,SAAS;EAC3B,KAAK,UAAU,KAAK;EACpB,KAAK,UAAU,KAAK;EACpB,KAAK,IAAI,KAAK;EACd,KAAK,IAAI,KAAK;EACd,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,YAAY,KAAK,aAAa;EACnC,KAAK,YAAY,KAAK,aAAa;EACnC,KAAK,YAAY,KAAK;EACtB,KAAK,aAAa,KAAK,cAAc,CAAC;CACxC;;CAGA,AAAO,YAAY,MAA6C;EAC9D,OAAO,KAAK,WAAW,MAAK,aAAY,SAAS,SAAS,IAAI;CAChE;AACF;;;;;;;AAQA,IAAa,iBAAb,cAAoC,WAAW;CAC7C,AAAyB,OAAO;CAEhC,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAA0B;EAC3C,MAAM,IAAI;EACV,KAAK,QAAQ,KAAK;EAClB,KAAK,SAAS,KAAK;EACnB,KAAK,OAAO,KAAK;EACjB,KAAK,SAAS,KAAK;CACrB;AACF;;AAGA,IAAa,mBAAb,cAAsC,WAAW;CAC/C,AAAyB,OAAO;CAEhC,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAA4B;EAC7C,MAAM,IAAI;EACV,KAAK,YAAY,KAAK,aAAa;EACnC,KAAK,UAAU,KAAK,QAAQ,KAAI,WAAU,IAAI,YAAY,MAAM,CAAC;CACnE;AACF;;;;;;AAOA,IAAa,kBAAb,cAAqC,WAAW;CAC9C,AAAyB,OAAO;CAEhC,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAA2B;EAC5C,MAAM,IAAI;EACV,KAAK,QAAQ,KAAK;EAClB,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,UAAU,KAAK,WAAW;CACjC;AACF;;AAGA,IAAa,kBAAb,cAAqC,WAAW;CAC9C,AAAyB,OAAO;CAEhC,AAAgB;CAEhB,AAAO,YAAY,MAA2B;EAC5C,MAAM,IAAI;EACV,KAAK,SAAS,KAAK,OAAO,IAAI,gBAAgB;CAChD;AACF;;AAGA,MAAa,oBAAoB,SAAqC;CACpE,QAAQ,KAAK,MAAb;EACE,KAAK,aACH,OAAO,IAAI,eAAe,IAAI;EAChC,KAAK,eACH,OAAO,IAAI,iBAAiB,IAAI;EAClC,KAAK,cACH,OAAO,IAAI,gBAAgB,IAAI;EACjC,KAAK,SACH,OAAO,IAAI,gBAAgB,IAAI;CACnC;AACF"}
@@ -1,4 +1,5 @@
1
1
  import { type Texture } from '@codexo/exojs';
2
+ import type { ChunkSource } from '@codexo/exojs-tilemap';
2
3
  import { TileMap } from '@codexo/exojs-tilemap';
3
4
  import type { TiledMapData, TiledOrientation, TiledPropertyData, TiledRenderOrder } from './data';
4
5
  import { type TiledLayer } from './TiledLayer';
@@ -39,6 +40,7 @@ export declare class TiledMap {
39
40
  readonly tilesets: readonly TiledTileset[];
40
41
  readonly properties: readonly TiledPropertyData[];
41
42
  private readonly _imageTextures;
43
+ private readonly _chunkSources;
42
44
  constructor(source: string, data: TiledMapData, tilesets: readonly TiledTileset[], imageTextures?: ReadonlyMap<number, Texture>);
43
45
  /**
44
46
  * Returns the tileset that owns `gid`, or `undefined` if `gid` is `0`
@@ -55,17 +57,42 @@ export declare class TiledMap {
55
57
  * Convert this parsed Tiled source model into a format-independent runtime
56
58
  * {@link TileMap} from `@codexo/exojs-tilemap`.
57
59
  *
58
- * Only finite orthogonal maps with atlas tilesets are supported. A
59
- * non-orthogonal or infinite map, or a collection-of-images tileset, throws
60
- * {@link TiledFormatError} rather than silently producing wrong (misplaced)
61
- * or empty geometry. Tile layers become renderable `TileLayer`s, object
62
- * groups become data-only `ObjectLayer`s, and image layers become data-only
63
- * `ImageLayer`s; group layer children are flattened in document order.
60
+ * Only orthogonal maps with atlas tilesets are supported. A non-orthogonal
61
+ * map, a collection-of-images tileset, or a tileset with no image at all
62
+ * throws {@link TiledFormatError} rather than silently producing wrong
63
+ * (misplaced) or empty geometry. Tile
64
+ * layers become renderable `TileLayer`s, object groups become data-only
65
+ * `ObjectLayer`s, and image layers become data-only `ImageLayer`s; group
66
+ * layer children are flattened in document order.
64
67
  *
65
- * The returned `TileMap` does **not** own the tileset textures they remain
68
+ * The runtime map has no group node, so each group's own style is baked into
69
+ * its children as Tiled composes it: `visible` ANDs, `opacity` and the
70
+ * parallax factors multiply, the offsets add, and tint colours multiply per
71
+ * colour channel. Object layers take the visibility, opacity and offset the
72
+ * same way - `ObjectLayer` carries no parallax or tint of its own, so a
73
+ * group's contribution to those two is dropped for object layers only.
74
+ *
75
+ * An `infinite: true` (chunked) tile layer converts to an **unbounded**
76
+ * runtime `TileLayer` with no tiles populated eagerly - its data streams in
77
+ * on demand via the {@link ChunkSource} built for it, retrievable with
78
+ * {@link getChunkSource} after this call returns.
79
+ *
80
+ * The returned `TileMap` does **not** own the tileset textures - they remain
66
81
  * in the Loader cache. Destroying the returned map does not unload textures.
67
82
  */
68
83
  toTileMap(): TileMap;
84
+ /**
85
+ * The {@link ChunkSource} built for the chunked tile layer with the given
86
+ * Tiled layer `id`, as a side effect of the most recent {@link toTileMap}
87
+ * call. Returns `undefined` if `toTileMap()` hasn't been called yet, if
88
+ * `layerId` doesn't name a tile layer, or if that layer is finite
89
+ * (`data`-based) rather than chunked (`infinite`-map `chunks`-based).
90
+ *
91
+ * Call {@link toTileMap} before calling this - it is what builds the
92
+ * providers this method reads from.
93
+ * @advanced
94
+ */
95
+ getChunkSource(layerId: number): ChunkSource | undefined;
69
96
  /**
70
97
  * Releases this map's reference to its parsed source. Tileset textures are
71
98
  * Loader-owned and may be shared with other maps; this does NOT destroy
@@ -73,3 +100,4 @@ export declare class TiledMap {
73
100
  */
74
101
  destroy(): void;
75
102
  }
103
+ //# sourceMappingURL=TiledMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TiledMap.d.ts","sourceRoot":"","sources":["../../src/TiledMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAEV,WAAW,EAUZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgD,OAAO,EAA6B,MAAM,uBAAuB,CAAC;AAEzH,OAAO,KAAK,EAGV,YAAY,EAEZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAsD,KAAK,UAAU,EAAoC,MAAM,cAAc,CAAC;AAErI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD;;;;;;;;;;;;GAYG;AACH,qBAAa,QAAQ;IACnB,6CAA6C;IAC7C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,SAAgB,IAAI,EAAE,YAAY,CAAC;IAEnC,SAAgB,WAAW,EAAE,gBAAgB,CAAC;IAC9C,SAAgB,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC3D,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,0BAA0B;IAC1B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,2BAA2B;IAC3B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,sCAAsC;IACtC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,uCAAuC;IACvC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,QAAQ,EAAE,OAAO,CAAC;IAClC,SAAgB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,SAAgB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9C,oFAAoF;IACpF,SAAgB,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClD,SAAgB,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAEzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAE7C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,EAAE,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAa;IAoBjJ;;;;;;;OAOG;IACI,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAgB/D,0CAA0C;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI/D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,SAAS,IAAI,OAAO;IA6J3B;;;;;;;;;;OAUG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/D;;;;OAIG;IACI,OAAO,IAAI,IAAI;CAGvB"}