@loaders.gl/tiles 4.4.2 → 5.0.0-alpha.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 (198) hide show
  1. package/README.md +110 -1
  2. package/dist/dist.dev.js +4359 -1950
  3. package/dist/dist.min.js +1 -1
  4. package/dist/image-set.d.ts +94 -0
  5. package/dist/image-set.d.ts.map +1 -0
  6. package/dist/image-set.js +243 -0
  7. package/dist/image-set.js.map +1 -0
  8. package/dist/index.cjs +4178 -1892
  9. package/dist/index.cjs.map +4 -4
  10. package/dist/index.d.ts +27 -9
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +17 -8
  13. package/dist/index.js.map +1 -1
  14. package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
  15. package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
  16. package/dist/point-cloud/point-cloud-tile.js +67 -0
  17. package/dist/point-cloud/point-cloud-tile.js.map +1 -0
  18. package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
  19. package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
  20. package/dist/point-cloud/point-cloud-tileset.js +507 -0
  21. package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
  22. package/dist/point-cloud/types.d.ts +64 -0
  23. package/dist/point-cloud/types.d.ts.map +1 -0
  24. package/dist/point-cloud/types.js +2 -0
  25. package/dist/point-cloud/types.js.map +1 -0
  26. package/dist/raster-set.d.ts +107 -0
  27. package/dist/raster-set.d.ts.map +1 -0
  28. package/dist/raster-set.js +268 -0
  29. package/dist/raster-set.js.map +1 -0
  30. package/dist/tileset-2d/adapter.d.ts +38 -0
  31. package/dist/tileset-2d/adapter.d.ts.map +1 -0
  32. package/dist/tileset-2d/adapter.js +5 -0
  33. package/dist/tileset-2d/adapter.js.map +1 -0
  34. package/dist/tileset-2d/index.d.ts +7 -0
  35. package/dist/tileset-2d/index.d.ts.map +1 -0
  36. package/dist/tileset-2d/index.js +6 -0
  37. package/dist/tileset-2d/index.js.map +1 -0
  38. package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
  39. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  40. package/dist/tileset-2d/tile-2d-header.js +181 -0
  41. package/dist/tileset-2d/tile-2d-header.js.map +1 -0
  42. package/dist/tileset-2d/tileset-2d.d.ts +201 -0
  43. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  44. package/dist/tileset-2d/tileset-2d.js +532 -0
  45. package/dist/tileset-2d/tileset-2d.js.map +1 -0
  46. package/dist/tileset-2d/types.d.ts +44 -0
  47. package/dist/tileset-2d/types.d.ts.map +1 -0
  48. package/dist/tileset-2d/types.js +5 -0
  49. package/dist/tileset-2d/types.js.map +1 -0
  50. package/dist/tileset-2d.d.ts +2 -0
  51. package/dist/tileset-2d.d.ts.map +1 -0
  52. package/dist/tileset-2d.js +5 -0
  53. package/dist/tileset-2d.js.map +1 -0
  54. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
  55. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
  56. package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
  57. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
  58. package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +36 -27
  59. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
  60. package/dist/{tileset → tileset-3d/common}/tile-3d.js +53 -62
  61. package/dist/tileset-3d/common/tile-3d.js.map +1 -0
  62. package/dist/tileset-3d/common/tileset-3d.d.ts +177 -0
  63. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
  64. package/dist/tileset-3d/common/tileset-3d.js +566 -0
  65. package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
  66. package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
  67. package/dist/{tileset → tileset-3d/common}/tileset-cache.js +1 -1
  68. package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
  69. package/dist/tileset-3d/common/tileset-source.d.ts +186 -0
  70. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
  71. package/dist/tileset-3d/common/tileset-source.js +17 -0
  72. package/dist/tileset-3d/common/tileset-source.js.map +1 -0
  73. package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +2 -2
  74. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
  75. package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +2 -2
  76. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
  77. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +100 -0
  78. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
  79. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +312 -0
  80. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
  81. package/dist/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.d.ts +1 -1
  82. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  83. package/dist/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.js +1 -1
  84. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  85. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  86. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  87. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
  88. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
  89. package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
  90. package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
  91. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  92. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +2 -2
  93. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
  94. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
  95. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  96. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +14 -23
  97. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
  98. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
  99. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
  100. package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
  101. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
  102. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
  103. package/dist/{tileset → tileset-3d}/helpers/frame-state.d.ts +1 -1
  104. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
  105. package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
  106. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
  107. package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
  108. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
  109. package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
  110. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +20 -0
  111. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
  112. package/dist/{tileset → tileset-3d}/helpers/tiles-3d-lod.js +43 -4
  113. package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
  114. package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
  115. package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
  116. package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
  117. package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
  118. package/dist/tileset-3d/helpers/zoom.js.map +1 -0
  119. package/dist/types.d.ts +7 -0
  120. package/dist/types.d.ts.map +1 -1
  121. package/package.json +7 -6
  122. package/src/image-set.ts +328 -0
  123. package/src/index.ts +80 -9
  124. package/src/point-cloud/point-cloud-tile.ts +76 -0
  125. package/src/point-cloud/point-cloud-tileset.ts +709 -0
  126. package/src/point-cloud/types.ts +78 -0
  127. package/src/raster-set.ts +374 -0
  128. package/src/tileset-2d/adapter.ts +47 -0
  129. package/src/tileset-2d/index.ts +33 -0
  130. package/src/tileset-2d/tile-2d-header.ts +224 -0
  131. package/src/tileset-2d/tileset-2d.ts +716 -0
  132. package/src/tileset-2d/types.ts +39 -0
  133. package/src/tileset-2d.ts +5 -0
  134. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
  135. package/src/{tileset → tileset-3d/common}/tile-3d.ts +64 -73
  136. package/src/tileset-3d/common/tileset-3d.ts +736 -0
  137. package/src/{tileset → tileset-3d/common}/tileset-cache.ts +1 -1
  138. package/src/tileset-3d/common/tileset-source.ts +234 -0
  139. package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +3 -3
  140. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +379 -0
  141. package/src/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.ts +1 -1
  142. package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
  143. package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +2 -2
  144. package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +15 -24
  145. package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +1 -1
  146. package/src/{tileset → tileset-3d}/helpers/frame-state.ts +1 -1
  147. package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
  148. package/src/{tileset → tileset-3d}/helpers/tiles-3d-lod.ts +46 -4
  149. package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
  150. package/src/types.ts +7 -0
  151. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
  152. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
  153. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
  154. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
  155. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
  156. package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
  157. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
  158. package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
  159. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
  160. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  161. package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
  162. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  163. package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
  164. package/dist/tileset/helpers/frame-state.js.map +0 -1
  165. package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
  166. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  167. package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
  168. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
  169. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  170. package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
  171. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  172. package/dist/tileset/helpers/zoom.d.ts.map +0 -1
  173. package/dist/tileset/helpers/zoom.js.map +0 -1
  174. package/dist/tileset/tile-3d.d.ts.map +0 -1
  175. package/dist/tileset/tile-3d.js.map +0 -1
  176. package/dist/tileset/tileset-3d.d.ts +0 -284
  177. package/dist/tileset/tileset-3d.d.ts.map +0 -1
  178. package/dist/tileset/tileset-3d.js +0 -814
  179. package/dist/tileset/tileset-3d.js.map +0 -1
  180. package/dist/tileset/tileset-cache.d.ts.map +0 -1
  181. package/dist/tileset/tileset-cache.js.map +0 -1
  182. package/dist/tileset/tileset-traverser.d.ts.map +0 -1
  183. package/dist/tileset/tileset-traverser.js.map +0 -1
  184. package/src/tileset/tileset-3d.ts +0 -1037
  185. /package/dist/{tileset → tileset-3d/common}/tileset-cache.d.ts +0 -0
  186. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
  187. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +0 -0
  188. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
  189. /package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +0 -0
  190. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
  191. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +0 -0
  192. /package/dist/{tileset → tileset-3d}/helpers/frame-state.js +0 -0
  193. /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
  194. /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
  195. /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
  196. /package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +0 -0
  197. /package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +0 -0
  198. /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
@@ -0,0 +1,107 @@
1
+ import type { GetRasterParameters, RasterData, RasterSource, RasterSourceMetadata } from '@loaders.gl/loader-utils';
2
+ /** Accepted raster request currently retained by {@link RasterSet}. */
3
+ export type RasterSetRequest<DataT = RasterData> = {
4
+ /** Unique request id assigned by the manager. */
5
+ requestId: number;
6
+ /** Raster request parameters that produced the accepted raster payload. */
7
+ parameters: GetRasterParameters;
8
+ /** Raster retained as the current output. */
9
+ raster: DataT;
10
+ };
11
+ /** Arguments supplied to {@link RasterSetBaseProps.shouldRefetch}. */
12
+ export type RasterSetShouldRefetchArgs<DataT = RasterData> = {
13
+ /** Current accepted request retained by the raster manager, if any. */
14
+ currentRequest: RasterSetRequest<DataT> | null;
15
+ /** Source metadata resolved by {@link RasterSet.loadMetadata}, if available. */
16
+ metadata: RasterSourceMetadata | null;
17
+ /** Candidate raster request parameters under evaluation. */
18
+ nextParameters: GetRasterParameters;
19
+ };
20
+ /** Configuration shared by all {@link RasterSet} instances. */
21
+ export type RasterSetBaseProps<DataT = RasterData> = {
22
+ /** Callback used to load source metadata. */
23
+ getMetadata: () => Promise<RasterSourceMetadata>;
24
+ /** Callback used to load raster data for a viewport-derived request. */
25
+ getRaster: (parameters: GetRasterParameters) => Promise<DataT>;
26
+ /** Debounce interval applied before issuing raster requests. */
27
+ debounceTime?: number;
28
+ /** Optional policy callback that can skip redundant raster requests. */
29
+ shouldRefetch?: (args: RasterSetShouldRefetchArgs<DataT>) => boolean;
30
+ };
31
+ /** Options for creating a {@link RasterSet}. */
32
+ export type RasterSetProps<DataT = RasterData> = Partial<RasterSetBaseProps<DataT>> & {
33
+ /** Optional loaders.gl raster source backing this manager. */
34
+ rasterSource?: RasterSource | null;
35
+ };
36
+ /** Subscription callbacks emitted by {@link RasterSet}. */
37
+ export type RasterSetListener<DataT = RasterData> = {
38
+ /** Fired when metadata/raster loading starts or stops. */
39
+ onLoadingStateChange?: (isLoading: boolean) => void;
40
+ /** Fired when source metadata resolves successfully. */
41
+ onMetadataLoad?: (metadata: RasterSourceMetadata) => void;
42
+ /** Fired when metadata loading fails. */
43
+ onMetadataLoadError?: (error: Error) => void;
44
+ /** Fired when a new raster request is issued. */
45
+ onRasterLoadStart?: (requestId: number, parameters: GetRasterParameters) => void;
46
+ /** Fired when a raster request resolves and becomes current. */
47
+ onRasterLoad?: (request: RasterSetRequest<DataT>) => void;
48
+ /** Fired when a raster request fails. */
49
+ onRasterLoadError?: (requestId: number, error: Error, parameters: GetRasterParameters) => void;
50
+ /** Fired when metadata or the current raster changes. */
51
+ onUpdate?: () => void;
52
+ };
53
+ /** Shared raster request manager used by viewport-driven raster examples and layers. */
54
+ export declare class RasterSet<DataT = RasterData> {
55
+ /** Cached metadata returned by the backing source, if any. */
56
+ metadata: RasterSourceMetadata | null;
57
+ private _opts;
58
+ private _listeners;
59
+ private _currentRequest;
60
+ private _lastAcceptedRequestId;
61
+ private _nextRequestId;
62
+ private _loadCounter;
63
+ private _timeoutId;
64
+ private _abortController;
65
+ private _finalized;
66
+ /** Creates a raster manager from a source or direct callbacks. */
67
+ constructor(opts: RasterSetProps<DataT>);
68
+ /** Convenience factory for wrapping a loaders.gl {@link RasterSource}. */
69
+ static fromRasterSource<DataT = RasterData>(rasterSource: RasterSource, opts?: Omit<RasterSetProps<DataT>, 'rasterSource' | 'getRaster' | 'getMetadata'>): RasterSet<DataT>;
70
+ /** Whether the manager has no requests in flight and a current raster. */
71
+ get isLoaded(): boolean;
72
+ /** Current accepted raster, if any. */
73
+ get raster(): DataT | null;
74
+ /** Current accepted request and raster payload, if any. */
75
+ get currentRequest(): RasterSetRequest<DataT> | null;
76
+ /** Backing raster source when constructed from one. */
77
+ get rasterSource(): RasterSource | null;
78
+ /** Subscribes to metadata and raster lifecycle events. */
79
+ subscribe(listener: RasterSetListener<DataT>): () => void;
80
+ /** Updates source callbacks or debounce settings, resetting state when the source changes. */
81
+ setOptions(opts: RasterSetProps<DataT>): void;
82
+ /** Loads metadata from the current raster source or callbacks. */
83
+ loadMetadata(): Promise<RasterSourceMetadata>;
84
+ /** Debounces and issues a new raster request for the supplied parameters. */
85
+ requestRaster(parameters: GetRasterParameters, debounceTime?: number): number;
86
+ /** Returns `true` when the supplied parameters warrant a new raster fetch. */
87
+ shouldRefetchRaster(parameters: GetRasterParameters): boolean;
88
+ /** Clears timers and listeners held by the manager. */
89
+ finalize(): void;
90
+ /** Loads a raster immediately and accepts it only if it is the newest completed request. */
91
+ private _loadRaster;
92
+ /** Resolves current options from either a source or direct callbacks. */
93
+ private _normalizeOptions;
94
+ /** Emits one generic update notification to all subscribers. */
95
+ private _emitUpdate;
96
+ /** Emits one loading-state transition to all subscribers. */
97
+ private _emitLoadingStateChange;
98
+ /** Increments the active load count and emits loading-state transitions. */
99
+ private _startLoading;
100
+ /** Decrements the active load count and emits loading-state transitions. */
101
+ private _finishLoading;
102
+ /** Clears any pending debounced raster request before it hits the network. */
103
+ private _cancelScheduledRaster;
104
+ /** Aborts the currently active raster request, if one exists. */
105
+ private _abortActiveRequest;
106
+ }
107
+ //# sourceMappingURL=raster-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raster-set.d.ts","sourceRoot":"","sources":["../src/raster-set.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,uEAAuE;AACvE,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,UAAU,IAAI;IACjD,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,EAAE,mBAAmB,CAAC;IAChC,6CAA6C;IAC7C,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,0BAA0B,CAAC,KAAK,GAAG,UAAU,IAAI;IAC3D,uEAAuE;IACvE,cAAc,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC/C,gFAAgF;IAChF,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,4DAA4D;IAC5D,cAAc,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,CAAC,KAAK,GAAG,UAAU,IAAI;IACnD,6CAA6C;IAC7C,WAAW,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACjD,wEAAwE;IACxE,SAAS,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/D,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;CACtE,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,cAAc,CAAC,KAAK,GAAG,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG;IACpF,8DAA8D;IAC9D,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,UAAU,IAAI;IAClD,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,wDAAwD;IACxD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,yCAAyC;IACzC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7C,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjF,gEAAgE;IAChE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC1D,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/F,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAqBF,wFAAwF;AACxF,qBAAa,SAAS,CAAC,KAAK,GAAG,UAAU;IACvC,8DAA8D;IAC9D,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAE7C,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,sBAAsB,CAAM;IACpC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,UAAU,CAAS;IAE3B,kEAAkE;gBACtD,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;IASvC,0EAA0E;IAC1E,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAG,UAAU,EACxC,YAAY,EAAE,YAAY,EAC1B,IAAI,GAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,aAAa,CAAM,GACnF,SAAS,CAAC,KAAK,CAAC;IAInB,0EAA0E;IAC1E,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,uCAAuC;IACvC,IAAI,MAAM,IAAI,KAAK,GAAG,IAAI,CAEzB;IAED,2DAA2D;IAC3D,IAAI,cAAc,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAEnD;IAED,uDAAuD;IACvD,IAAI,YAAY,IAAI,YAAY,GAAG,IAAI,CAEtC;IAED,0DAA0D;IAC1D,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI;IAKzD,8FAA8F;IAC9F,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI;IAoB7C,kEAAkE;IAC5D,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IA0BnD,6EAA6E;IAC7E,aAAa,CAAC,UAAU,EAAE,mBAAmB,EAAE,YAAY,SAA0B,GAAG,MAAM;IAoB9F,8EAA8E;IAC9E,mBAAmB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO;IAQ7D,uDAAuD;IACvD,QAAQ,IAAI,IAAI;IAOhB,4FAA4F;YAC9E,WAAW;IA6CzB,yEAAyE;IACzE,OAAO,CAAC,iBAAiB;IAgCzB,gEAAgE;IAChE,OAAO,CAAC,WAAW;IAMnB,6DAA6D;IAC7D,OAAO,CAAC,uBAAuB;IAM/B,4EAA4E;IAC5E,OAAO,CAAC,aAAa;IASrB,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IAStB,8EAA8E;IAC9E,OAAO,CAAC,sBAAsB;IAO9B,iEAAiE;IACjE,OAAO,CAAC,mBAAmB;CAI5B"}
@@ -0,0 +1,268 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const DEFAULT_RASTERSET_PROPS = {
5
+ getMetadata: async () => ({
6
+ width: 0,
7
+ height: 0,
8
+ bandCount: 0,
9
+ dtype: 'uint8'
10
+ }),
11
+ getRaster: async () => ({
12
+ data: new Uint8Array(0),
13
+ width: 0,
14
+ height: 0,
15
+ bandCount: 0,
16
+ dtype: 'uint8'
17
+ }),
18
+ debounceTime: 0,
19
+ shouldRefetch: () => true
20
+ };
21
+ /** Shared raster request manager used by viewport-driven raster examples and layers. */
22
+ export class RasterSet {
23
+ /** Cached metadata returned by the backing source, if any. */
24
+ metadata = null;
25
+ _opts;
26
+ _listeners = new Set();
27
+ _currentRequest = null;
28
+ _lastAcceptedRequestId = -1;
29
+ _nextRequestId = 0;
30
+ _loadCounter = 0;
31
+ _timeoutId = null;
32
+ _abortController = null;
33
+ _finalized = false;
34
+ /** Creates a raster manager from a source or direct callbacks. */
35
+ constructor(opts) {
36
+ this._opts = this._normalizeOptions(opts);
37
+ if (!this._opts.rasterSource && (!opts.getRaster || !opts.getMetadata)) {
38
+ throw new Error('RasterSet requires either `rasterSource` or both `getRaster` and `getMetadata`.');
39
+ }
40
+ }
41
+ /** Convenience factory for wrapping a loaders.gl {@link RasterSource}. */
42
+ static fromRasterSource(rasterSource, opts = {}) {
43
+ return new RasterSet({ ...opts, rasterSource });
44
+ }
45
+ /** Whether the manager has no requests in flight and a current raster. */
46
+ get isLoaded() {
47
+ return this._loadCounter === 0 && Boolean(this._currentRequest);
48
+ }
49
+ /** Current accepted raster, if any. */
50
+ get raster() {
51
+ return this._currentRequest?.raster || null;
52
+ }
53
+ /** Current accepted request and raster payload, if any. */
54
+ get currentRequest() {
55
+ return this._currentRequest;
56
+ }
57
+ /** Backing raster source when constructed from one. */
58
+ get rasterSource() {
59
+ return this._opts.rasterSource;
60
+ }
61
+ /** Subscribes to metadata and raster lifecycle events. */
62
+ subscribe(listener) {
63
+ this._listeners.add(listener);
64
+ return () => this._listeners.delete(listener);
65
+ }
66
+ /** Updates source callbacks or debounce settings, resetting state when the source changes. */
67
+ setOptions(opts) {
68
+ const previousRasterSource = this._opts.rasterSource;
69
+ const nextOptions = this._normalizeOptions({ ...this._opts, ...opts });
70
+ const sourceChanged = previousRasterSource !== nextOptions.rasterSource ||
71
+ this._opts.getRaster !== nextOptions.getRaster ||
72
+ this._opts.getMetadata !== nextOptions.getMetadata;
73
+ this._opts = nextOptions;
74
+ if (sourceChanged) {
75
+ this._cancelScheduledRaster();
76
+ this.metadata = null;
77
+ this._currentRequest = null;
78
+ this._lastAcceptedRequestId = -1;
79
+ this._nextRequestId = 0;
80
+ this._emitUpdate();
81
+ }
82
+ }
83
+ /** Loads metadata from the current raster source or callbacks. */
84
+ async loadMetadata() {
85
+ this._startLoading();
86
+ try {
87
+ const metadata = await this._opts.getMetadata();
88
+ if (this._finalized) {
89
+ return metadata;
90
+ }
91
+ this.metadata = metadata;
92
+ for (const listener of this._listeners) {
93
+ listener.onMetadataLoad?.(metadata);
94
+ }
95
+ this._emitUpdate();
96
+ return metadata;
97
+ }
98
+ catch (error) {
99
+ const normalizedError = normalizeRasterSetError(error, 'Raster metadata request failed');
100
+ if (!this._finalized) {
101
+ for (const listener of this._listeners) {
102
+ listener.onMetadataLoadError?.(normalizedError);
103
+ }
104
+ }
105
+ throw normalizedError;
106
+ }
107
+ finally {
108
+ this._finishLoading();
109
+ }
110
+ }
111
+ /** Debounces and issues a new raster request for the supplied parameters. */
112
+ requestRaster(parameters, debounceTime = this._opts.debounceTime) {
113
+ if (!this.shouldRefetchRaster(parameters)) {
114
+ return this._currentRequest?.requestId ?? -1;
115
+ }
116
+ const requestId = this._nextRequestId++;
117
+ this._cancelScheduledRaster();
118
+ if (debounceTime > 0) {
119
+ this._timeoutId = setTimeout(() => {
120
+ this._timeoutId = null;
121
+ void this._loadRaster(requestId, parameters);
122
+ }, debounceTime);
123
+ }
124
+ else {
125
+ void this._loadRaster(requestId, parameters);
126
+ }
127
+ return requestId;
128
+ }
129
+ /** Returns `true` when the supplied parameters warrant a new raster fetch. */
130
+ shouldRefetchRaster(parameters) {
131
+ return this._opts.shouldRefetch({
132
+ currentRequest: this._currentRequest,
133
+ metadata: this.metadata,
134
+ nextParameters: parameters
135
+ });
136
+ }
137
+ /** Clears timers and listeners held by the manager. */
138
+ finalize() {
139
+ this._finalized = true;
140
+ this._cancelScheduledRaster();
141
+ this._abortActiveRequest();
142
+ this._listeners.clear();
143
+ }
144
+ /** Loads a raster immediately and accepts it only if it is the newest completed request. */
145
+ async _loadRaster(requestId, parameters) {
146
+ if (this._finalized) {
147
+ return;
148
+ }
149
+ this._startLoading();
150
+ for (const listener of this._listeners) {
151
+ listener.onRasterLoadStart?.(requestId, parameters);
152
+ }
153
+ try {
154
+ const abortController = new AbortController();
155
+ this._abortController = abortController;
156
+ const raster = await this._opts.getRaster({ ...parameters, signal: abortController.signal });
157
+ if (this._finalized ||
158
+ abortController.signal.aborted ||
159
+ requestId <= this._lastAcceptedRequestId) {
160
+ return;
161
+ }
162
+ this._lastAcceptedRequestId = requestId;
163
+ this._currentRequest = { requestId, parameters, raster };
164
+ for (const listener of this._listeners) {
165
+ listener.onRasterLoad?.(this._currentRequest);
166
+ }
167
+ this._emitUpdate();
168
+ }
169
+ catch (error) {
170
+ if (isAbortError(error)) {
171
+ return;
172
+ }
173
+ const normalizedError = normalizeRasterSetError(error, 'Raster request failed');
174
+ if (!this._finalized) {
175
+ for (const listener of this._listeners) {
176
+ listener.onRasterLoadError?.(requestId, normalizedError, parameters);
177
+ }
178
+ }
179
+ }
180
+ finally {
181
+ this._abortController = null;
182
+ this._finishLoading();
183
+ }
184
+ }
185
+ /** Resolves current options from either a source or direct callbacks. */
186
+ _normalizeOptions(opts) {
187
+ const rasterSource = opts.rasterSource || null;
188
+ return {
189
+ ...DEFAULT_RASTERSET_PROPS,
190
+ ...opts,
191
+ rasterSource,
192
+ getMetadata: opts.getMetadata ||
193
+ (() => {
194
+ if (rasterSource) {
195
+ return rasterSource.getMetadata();
196
+ }
197
+ return DEFAULT_RASTERSET_PROPS.getMetadata();
198
+ }),
199
+ getRaster: opts.getRaster ||
200
+ ((parameters) => {
201
+ if (rasterSource) {
202
+ return rasterSource.getRaster(parameters);
203
+ }
204
+ return DEFAULT_RASTERSET_PROPS.getRaster(parameters);
205
+ }),
206
+ debounceTime: opts.debounceTime ?? DEFAULT_RASTERSET_PROPS.debounceTime,
207
+ shouldRefetch: opts.shouldRefetch ||
208
+ ((args) => DEFAULT_RASTERSET_PROPS.shouldRefetch(args))
209
+ };
210
+ }
211
+ /** Emits one generic update notification to all subscribers. */
212
+ _emitUpdate() {
213
+ for (const listener of this._listeners) {
214
+ listener.onUpdate?.();
215
+ }
216
+ }
217
+ /** Emits one loading-state transition to all subscribers. */
218
+ _emitLoadingStateChange(isLoading) {
219
+ for (const listener of this._listeners) {
220
+ listener.onLoadingStateChange?.(isLoading);
221
+ }
222
+ }
223
+ /** Increments the active load count and emits loading-state transitions. */
224
+ _startLoading() {
225
+ const wasLoading = this._loadCounter > 0;
226
+ this._loadCounter++;
227
+ if (!wasLoading) {
228
+ this._emitLoadingStateChange(true);
229
+ this._emitUpdate();
230
+ }
231
+ }
232
+ /** Decrements the active load count and emits loading-state transitions. */
233
+ _finishLoading() {
234
+ const wasLoading = this._loadCounter > 0;
235
+ this._loadCounter = Math.max(0, this._loadCounter - 1);
236
+ if (wasLoading && this._loadCounter === 0) {
237
+ this._emitLoadingStateChange(false);
238
+ this._emitUpdate();
239
+ }
240
+ }
241
+ /** Clears any pending debounced raster request before it hits the network. */
242
+ _cancelScheduledRaster() {
243
+ if (this._timeoutId !== null) {
244
+ clearTimeout(this._timeoutId);
245
+ this._timeoutId = null;
246
+ }
247
+ }
248
+ /** Aborts the currently active raster request, if one exists. */
249
+ _abortActiveRequest() {
250
+ this._abortController?.abort();
251
+ this._abortController = null;
252
+ }
253
+ }
254
+ /** Normalizes arbitrary thrown values to `Error` instances for raster-set callbacks. */
255
+ function normalizeRasterSetError(error, message) {
256
+ if (error instanceof Error) {
257
+ return error;
258
+ }
259
+ if (typeof error === 'string') {
260
+ return new Error(error);
261
+ }
262
+ return new Error(message);
263
+ }
264
+ /** Returns true when an error came from an aborted request. */
265
+ function isAbortError(error) {
266
+ return error instanceof Error && error.name === 'AbortError';
267
+ }
268
+ //# sourceMappingURL=raster-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raster-set.js","sourceRoot":"","sources":["../src/raster-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Matrix4 } from '@math.gl/core';
2
+ import type { Bounds, TileBoundingBox, TileIndex, ZRange } from "./types.js";
3
+ /** Traversal inputs required by a {@link Tileset2DAdapter}. */
4
+ export type Tileset2DTraversalContext<ViewStateT> = {
5
+ /** Consumer-defined view state used by the adapter. */
6
+ viewState: ViewStateT;
7
+ /** Tile size in pixels. */
8
+ tileSize: number;
9
+ /** Bounding box limiting tile generation. */
10
+ extent?: Bounds | null;
11
+ /** Minimum zoom level to request. */
12
+ minZoom?: number;
13
+ /** Maximum zoom level to request. */
14
+ maxZoom?: number;
15
+ /** Integer zoom offset applied during tile selection. */
16
+ zoomOffset?: number;
17
+ /** Elevation range used during geospatial tile selection. */
18
+ zRange?: ZRange | null;
19
+ /** Optional model matrix applied by the surrounding layer stack. */
20
+ modelMatrix?: Matrix4 | null;
21
+ /** Inverse of the current model matrix. */
22
+ modelMatrixInverse?: Matrix4 | null;
23
+ };
24
+ /** Minimal tile metadata inputs required by a {@link Tileset2DAdapter}. */
25
+ export type Tileset2DTileContext<ViewStateT> = {
26
+ /** Consumer-defined view state used by the adapter. */
27
+ viewState: ViewStateT;
28
+ /** Tile size in pixels. */
29
+ tileSize: number;
30
+ };
31
+ /** Adapter used by {@link Tileset2D} to compute traversal and tile bounds. */
32
+ export type Tileset2DAdapter<ViewStateT> = {
33
+ /** Returns tile indices that should be selected for one traversal context. */
34
+ getTileIndices: (context: Tileset2DTraversalContext<ViewStateT>) => TileIndex[];
35
+ /** Returns the structured bounding box for one tile index. */
36
+ getTileBoundingBox: (context: Tileset2DTileContext<ViewStateT>, index: TileIndex) => TileBoundingBox;
37
+ };
38
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAC,mBAAgB;AAExE,+DAA+D;AAC/D,MAAM,MAAM,yBAAyB,CAAC,UAAU,IAAI;IAClD,uDAAuD;IACvD,SAAS,EAAE,UAAU,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,oBAAoB,CAAC,UAAU,IAAI;IAC7C,uDAAuD;IACvD,SAAS,EAAE,UAAU,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,CAAC,UAAU,IAAI;IACzC,8EAA8E;IAC9E,cAAc,EAAE,CAAC,OAAO,EAAE,yBAAyB,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;IAChF,8DAA8D;IAC9D,kBAAkB,EAAE,CAClB,OAAO,EAAE,oBAAoB,CAAC,UAAU,CAAC,EACzC,KAAK,EAAE,SAAS,KACb,eAAe,CAAC;CACtB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export {};
5
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/tileset-2d/adapter.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC"}
@@ -0,0 +1,7 @@
1
+ export type { Bounds, GeoBoundingBox, NonGeoBoundingBox, TileBoundingBox, TileIndex, TileLoadProps, ZRange } from "./types.js";
2
+ export type { Tileset2DAdapter, Tileset2DTileContext, Tileset2DTraversalContext } from "./adapter.js";
3
+ export type { Tile2DLoadDataProps } from "./tile-2d-header.js";
4
+ export { SharedTile2DHeader } from "./tile-2d-header.js";
5
+ export type { RefinementStrategy, RefinementStrategyFunction, Tileset2DBaseProps, Tileset2DProps, Tile2DListener } from "./tileset-2d.js";
6
+ export { Tileset2D, STRATEGY_DEFAULT, STRATEGY_NEVER, STRATEGY_REPLACE } from "./tileset-2d.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,aAAa,EACb,MAAM,EACP,mBAAgB;AACjB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EAC1B,qBAAkB;AACnB,YAAY,EAAC,mBAAmB,EAAC,4BAAyB;AAC1D,OAAO,EAAC,kBAAkB,EAAC,4BAAyB;AACpD,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,EACd,cAAc,EACf,wBAAqB;AACtB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,wBAAqB"}
@@ -0,0 +1,6 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export { SharedTile2DHeader } from "./tile-2d-header.js";
5
+ export { Tileset2D, STRATEGY_DEFAULT, STRATEGY_NEVER, STRATEGY_REPLACE } from "./tileset-2d.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tileset-2d/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAiBpC,OAAO,EAAC,kBAAkB,EAAC,4BAAyB;AAQpD,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,wBAAqB"}
@@ -0,0 +1,68 @@
1
+ import { RequestScheduler } from '@loaders.gl/loader-utils';
2
+ import type { TileBoundingBox, TileIndex, TileLoadProps } from "./types.js";
3
+ /** Parameters used by {@link SharedTile2DHeader.loadData}. */
4
+ export type Tile2DLoadDataProps<DataT = any> = {
5
+ /** Shared request scheduler for throttling tile fetches. */
6
+ requestScheduler: RequestScheduler;
7
+ /** Application-provided tile data loader. */
8
+ getData: (props: TileLoadProps) => Promise<DataT | null> | DataT | null;
9
+ /** Callback fired after tile content resolves successfully. */
10
+ onLoad: (tile: SharedTile2DHeader<DataT>) => void;
11
+ /** Callback fired after tile content fails to load. */
12
+ onError: (error: any, tile: SharedTile2DHeader<DataT>) => void;
13
+ };
14
+ /** Shared tile cache entry used by {@link Tileset2D}. */
15
+ export declare class SharedTile2DHeader<DataT = any> {
16
+ /** x/y/z tile coordinate. */
17
+ index: TileIndex;
18
+ /** Closest cached ancestor tile in the current tree. */
19
+ parent: SharedTile2DHeader | null;
20
+ /** Cached child tiles beneath this tile. */
21
+ children: SharedTile2DHeader[] | null;
22
+ /** Loaded tile payload. */
23
+ content: DataT | null;
24
+ /** Cached tile load error, if the last request failed. */
25
+ error: Error | null;
26
+ /** Stable tile cache id. */
27
+ id: string;
28
+ /** Resolved zoom level for the tile. */
29
+ zoom: number;
30
+ /** Optional application data associated with the tile. */
31
+ userData?: Record<string, any>;
32
+ /** Bounds represented as `[[minX, minY], [maxX, maxY]]` for loaders.gl compatibility. */
33
+ boundingBox: [min: number[], max: number[]];
34
+ private _abortController;
35
+ private _loader;
36
+ private _loaderId;
37
+ private _isLoaded;
38
+ private _isCancelled;
39
+ private _needsReload;
40
+ private _bbox;
41
+ /** Creates a tile header for a specific tile index. */
42
+ constructor(index: TileIndex);
43
+ /** Structured bounds for the tile in the active coordinate system. */
44
+ get bbox(): TileBoundingBox;
45
+ /** Initializes the tile bounds once during tile creation. */
46
+ set bbox(value: TileBoundingBox);
47
+ /** Resolves to loaded content while a request is in flight, otherwise returns cached content. */
48
+ get data(): Promise<DataT | null> | DataT | null;
49
+ /** Indicates whether tile content is available and up to date. */
50
+ get isLoaded(): boolean;
51
+ /** Indicates whether a tile request is currently in flight. */
52
+ get isLoading(): boolean;
53
+ /** Indicates whether the tile is cached in a failed state. */
54
+ get hasError(): boolean;
55
+ /** Indicates whether the tile should be requested again. */
56
+ get needsReload(): boolean;
57
+ /** Estimated byte size of the cached payload. */
58
+ get byteLength(): number;
59
+ /** Internal request pipeline used by {@link loadData}. */
60
+ private _loadData;
61
+ /** Loads tile data through the shared scheduler. */
62
+ loadData(opts: Tile2DLoadDataProps<DataT>): Promise<void>;
63
+ /** Marks the tile stale so it is refreshed on the next traversal. */
64
+ setNeedsReload(): void;
65
+ /** Cancels an in-flight tile request. */
66
+ abort(): void;
67
+ }
68
+ //# sourceMappingURL=tile-2d-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-2d-header.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/tile-2d-header.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAC,eAAe,EAAE,SAAS,EAAE,aAAa,EAAC,mBAAgB;AAEvE,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,CAAC,KAAK,GAAG,GAAG,IAAI;IAC7C,4DAA4D;IAC5D,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,6CAA6C;IAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACxE,+DAA+D;IAC/D,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAClD,uDAAuD;IACvD,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF,yDAAyD;AACzD,qBAAa,kBAAkB,CAAC,KAAK,GAAG,GAAG;IACzC,6BAA6B;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,4CAA4C;IAC5C,QAAQ,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IACtC,2BAA2B;IAC3B,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,0DAA0D;IAC1D,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,4BAA4B;IAC5B,EAAE,EAAG,MAAM,CAAC;IACZ,wCAAwC;IACxC,IAAI,EAAG,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,yFAAyF;IACzF,WAAW,EAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,KAAK,CAAmB;IAEhC,uDAAuD;gBAC3C,KAAK,EAAE,SAAS;IAc5B,sEAAsE;IACtE,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,6DAA6D;IAC7D,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,EAiB9B;IAED,iGAAiG;IACjG,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAM/C;IAED,kEAAkE;IAClE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,+DAA+D;IAC/D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,8DAA8D;IAC9D,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,4DAA4D;IAC5D,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,iDAAiD;IACjD,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,0DAA0D;YAC5C,SAAS;IA2DvB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD,qEAAqE;IACrE,cAAc,IAAI,IAAI;IAQtB,yCAAyC;IACzC,KAAK,IAAI,IAAI;CAOd"}