@tileflow/core 0.1.0-alpha.3 → 0.1.0-alpha.30

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 (37) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +270 -26
  3. package/THIRD_PARTY_NOTICES.md +327 -0
  4. package/dist/browser.d.ts +334 -0
  5. package/dist/browser.js +5694 -0
  6. package/dist/build.d.ts +574 -0
  7. package/dist/build.js +25405 -0
  8. package/dist/capture-scene-D6soWztE.d.ts +161 -0
  9. package/dist/capture.d.ts +9 -0
  10. package/dist/capture.js +276 -0
  11. package/dist/config-reference.json +32261 -0
  12. package/dist/icon-composition-BiOTwrvD.d.ts +1331 -0
  13. package/dist/index.d.ts +1112 -162
  14. package/dist/index.js +18690 -3479
  15. package/dist/manifest-types-CTT2eLbp.d.ts +790 -0
  16. package/dist/manifest.d.ts +9 -0
  17. package/dist/manifest.js +368 -0
  18. package/dist/native-profile.d.ts +188 -0
  19. package/dist/native-profile.js +9316 -0
  20. package/dist/native.d.ts +222 -0
  21. package/dist/native.js +4862 -0
  22. package/dist/runtime.d.ts +1 -0
  23. package/dist/runtime.js +1317 -0
  24. package/docs/authoring-model.md +226 -0
  25. package/docs/capture-scenes.md +36 -0
  26. package/docs/compiled-style-performance.md +263 -0
  27. package/docs/data-is-separate-from-design.md +345 -0
  28. package/docs/globe-atmosphere.md +83 -0
  29. package/docs/hosted-session-authorization.md +108 -0
  30. package/docs/map-and-terrain-examples.md +149 -0
  31. package/docs/native-artifact-profile.md +145 -0
  32. package/docs/native-resource-urls.md +367 -0
  33. package/docs/public-api-and-browser-subpath.md +93 -0
  34. package/docs/shared-visual-primitives.md +81 -0
  35. package/docs/theme-transitions-and-blends.md +165 -0
  36. package/docs/themes-and-module-styles.md +83 -0
  37. package/package.json +58 -8
@@ -0,0 +1,327 @@
1
+ # Third-party notices
2
+
3
+ `@tileflow/core/browser` embeds `maplibre-contour` 0.1.0, `PMTiles` 4.4.0, and `fflate` 0.8.3 so
4
+ contour and local archive rendering remain self-contained. The complete upstream licenses follow.
5
+
6
+ ## maplibre-contour 0.1.0
7
+
8
+ BSD 3-Clause License
9
+
10
+ Copyright (c) 2023, Michael Barry and maplibre-contour contributors
11
+
12
+ Redistribution and use in source and binary forms, with or without modification, are permitted
13
+ provided that the following conditions are met:
14
+
15
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
16
+ and the following disclaimer.
17
+
18
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
19
+ conditions and the following disclaimer in the documentation and/or other materials provided
20
+ with the distribution.
21
+
22
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to
23
+ endorse or promote products derived from this software without specific prior written
24
+ permission.
25
+
26
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
27
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
28
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
29
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
32
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
33
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+
35
+ ---
36
+
37
+ Contains code from d3-contour <https://github.com/d3/d3-contour>
38
+
39
+ Copyright 2012-2023 Mike Bostock
40
+
41
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee
42
+ is hereby granted, provided that the above copyright notice and this permission notice appear in all
43
+ copies.
44
+
45
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
46
+ SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
47
+ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
48
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
49
+ NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
50
+ OF THIS SOFTWARE.
51
+
52
+ ---
53
+
54
+ Contains code from vt-pbf <https://github.com/mapbox/vt-pbf>
55
+
56
+ The MIT License (MIT)
57
+
58
+ Copyright (c) 2015 Anand Thakker
59
+
60
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
61
+ associated documentation files (the "Software"), to deal in the Software without restriction,
62
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
63
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
64
+ furnished to do so, subject to the following conditions:
65
+
66
+ The above copyright notice and this permission notice shall be included in all copies or
67
+ substantial portions of the Software.
68
+
69
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
70
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
71
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
73
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
74
+
75
+ ---
76
+
77
+ ## pbf 4.0.1
78
+
79
+ Copyright (c) 2024, Mapbox
80
+ All rights reserved.
81
+
82
+ Redistribution and use in source and binary forms, with or without modification, are permitted
83
+ provided that the following conditions are met:
84
+
85
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
86
+ and the following disclaimer.
87
+
88
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
89
+ conditions and the following disclaimer in the documentation and/or other materials provided
90
+ with the distribution.
91
+
92
+ 3. Neither the name of pbf nor the names of its contributors may be used to endorse or promote
93
+ products derived from this software without specific prior written permission.
94
+
95
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
96
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
97
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
98
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
99
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
100
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
101
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
102
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
103
+
104
+ ---
105
+
106
+ Contains code based on node-buffer-more-ints <https://github.com/dpw/node-buffer-more-ints>
107
+
108
+ Copyright (c) 2012 David Wragg. All rights reserved.
109
+
110
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
111
+ associated documentation files (the "Software"), to deal in the Software without restriction,
112
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
113
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
114
+ furnished to do so, subject to the following conditions:
115
+
116
+ The above copyright notice and this permission notice shall be included in all copies or
117
+ substantial portions of the Software.
118
+
119
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
120
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
121
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
122
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
123
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
124
+
125
+ ---
126
+
127
+ Contains code from buffer <https://github.com/feross/buffer>
128
+
129
+ The MIT License (MIT)
130
+
131
+ Copyright (c) Feross Aboukhadijeh, and other contributors.
132
+
133
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
134
+ associated documentation files (the "Software"), to deal in the Software without restriction,
135
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
136
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
137
+ furnished to do so, subject to the following conditions:
138
+
139
+ The above copyright notice and this permission notice shall be included in all copies or
140
+ substantial portions of the Software.
141
+
142
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
143
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
144
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
145
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
146
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
147
+
148
+ Parts of this software are based on Node.js:
149
+
150
+ Copyright Node.js contributors. All rights reserved.
151
+
152
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
153
+ associated documentation files (the "Software"), to deal in the Software without restriction,
154
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
155
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
156
+ furnished to do so, subject to the following conditions:
157
+
158
+ The above copyright notice and this permission notice shall be included in all copies or
159
+ substantial portions of the Software.
160
+
161
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
162
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
163
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
164
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
165
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
166
+
167
+ See <https://github.com/nodejs/node/blob/main/LICENSE> for more information.
168
+
169
+ ---
170
+
171
+ ## PMTiles 4.4.0
172
+
173
+ The below license (BSD-3) applies to the reference implementations in this repository.
174
+
175
+ The PMTiles specification itself is public domain, or CC0 where applicable.
176
+
177
+ Sample tilesets available in this repository are subject to their own license terms.
178
+
179
+ Copyright 2021 Protomaps LLC
180
+
181
+ Redistribution and use in source and binary forms, with or without modification, are permitted
182
+ provided that the following conditions are met:
183
+
184
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
185
+ and the following disclaimer.
186
+
187
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
188
+ conditions and the following disclaimer in the documentation and/or other materials provided
189
+ with the distribution.
190
+
191
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to
192
+ endorse or promote products derived from this software without specific prior written
193
+ permission.
194
+
195
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
196
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
197
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
198
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
199
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
200
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
201
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
202
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
203
+
204
+ ---
205
+
206
+ ## fflate 0.8.3
207
+
208
+ MIT License
209
+
210
+ Copyright (c) 2023 Arjun Barrett
211
+
212
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
213
+ associated documentation files (the "Software"), to deal in the Software without restriction,
214
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
215
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
216
+ furnished to do so, subject to the following conditions:
217
+
218
+ The above copyright notice and this permission notice shall be included in all copies or substantial
219
+ portions of the Software.
220
+
221
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
222
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
223
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
224
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
225
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
226
+
227
+ ---
228
+
229
+ ## TypeScript helper code
230
+
231
+ The bundled browser entry retains TypeScript helper code and its complete upstream notice:
232
+
233
+ Copyright (c) Microsoft Corporation.
234
+
235
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee
236
+ is hereby granted.
237
+
238
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
239
+ SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
240
+ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
241
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
242
+ NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
243
+ OF THIS SOFTWARE.
244
+
245
+ ---
246
+
247
+ ## whatwg-url 15.1.0 and tr46 6.0.0
248
+
249
+ The native entry embeds the low-level `whatwg-url` parser and `tr46` IDNA processing. During the
250
+ native build only, the parser's relative encoding module is replaced by Tileflow's private UTF-8
251
+ codec. No upstream package is patched on disk and no global codec is installed. Both components
252
+ are MIT-licensed:
253
+
254
+ The MIT License (MIT)
255
+
256
+ Copyright (c) Sebastian Mayr
257
+
258
+ Permission is hereby granted, free of charge, to any person obtaining a copy
259
+ of this software and associated documentation files (the "Software"), to deal
260
+ in the Software without restriction, including without limitation the rights
261
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
262
+ copies of the Software, and to permit persons to whom the Software is
263
+ furnished to do so, subject to the following conditions:
264
+
265
+ The above copyright notice and this permission notice shall be included in
266
+ all copies or substantial portions of the Software.
267
+
268
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
269
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
270
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
271
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
272
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
273
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
274
+ THE SOFTWARE.
275
+
276
+ ---
277
+
278
+ ## Punycode.js 2.3.1
279
+
280
+ Copyright Mathias Bynens <https://mathiasbynens.be/>
281
+
282
+ Permission is hereby granted, free of charge, to any person obtaining
283
+ a copy of this software and associated documentation files (the
284
+ "Software"), to deal in the Software without restriction, including
285
+ without limitation the rights to use, copy, modify, merge, publish,
286
+ distribute, sublicense, and/or sell copies of the Software, and to
287
+ permit persons to whom the Software is furnished to do so, subject to
288
+ the following conditions:
289
+
290
+ The above copyright notice and this permission notice shall be
291
+ included in all copies or substantial portions of the Software.
292
+
293
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
294
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
295
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
296
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
297
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
298
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
299
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
300
+
301
+ ---
302
+
303
+ ## Zod 4.4.3
304
+
305
+ The native entry embeds the canonical manifest schema and the required Zod validation code.
306
+
307
+ MIT License
308
+
309
+ Copyright (c) 2025 Colin McDonnell
310
+
311
+ Permission is hereby granted, free of charge, to any person obtaining a copy
312
+ of this software and associated documentation files (the "Software"), to deal
313
+ in the Software without restriction, including without limitation the rights
314
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
315
+ copies of the Software, and to permit persons to whom the Software is
316
+ furnished to do so, subject to the following conditions:
317
+
318
+ The above copyright notice and this permission notice shall be included in all
319
+ copies or substantial portions of the Software.
320
+
321
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
322
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
323
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
324
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
325
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
326
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
327
+ SOFTWARE.
@@ -0,0 +1,334 @@
1
+ type TileflowFairUseNoticeState = 'GRACE' | 'MANAGED_REQUIRED';
2
+ type TileflowFairUseNotice = Readonly<{
3
+ action: string;
4
+ helpUrl: string;
5
+ message: string;
6
+ state: TileflowFairUseNoticeState;
7
+ }>;
8
+ type TileflowWorldProtocolRequest = Readonly<{
9
+ type?: string;
10
+ url: string;
11
+ }>;
12
+ type TileflowWorldProtocolResponse = Readonly<{
13
+ cacheControl?: string;
14
+ data: ArrayBuffer;
15
+ etag?: string;
16
+ expires?: string;
17
+ }>;
18
+ type TileflowWorldProtocolHandler = (request: TileflowWorldProtocolRequest, abortController: AbortController) => Promise<TileflowWorldProtocolResponse>;
19
+ type TileflowWorldRequestBridge = Readonly<{
20
+ dispose: () => void;
21
+ rewriteUrl: (url: string) => string;
22
+ }>;
23
+ type TileflowFairUseNoticeController = Readonly<{
24
+ dispose: () => void;
25
+ update: (notice: TileflowFairUseNotice | null) => void;
26
+ }>;
27
+ declare function registerTileflowWorldRequestBridge(input: {
28
+ addProtocol: (name: string, handler: TileflowWorldProtocolHandler) => void;
29
+ fetch?: typeof fetch;
30
+ onNotice: (notice: TileflowFairUseNotice | null) => void;
31
+ }): TileflowWorldRequestBridge;
32
+ declare function tileflowFairUseNoticeMessage(state: TileflowFairUseNoticeState): string;
33
+ declare function attachTileflowFairUseNotice(container: HTMLElement): TileflowFairUseNoticeController;
34
+
35
+ type TileflowColor = `#${string}`;
36
+ type MapLibreSprite = string | Array<{
37
+ id: string;
38
+ url: string;
39
+ }>;
40
+ type TileflowProjection = 'globe' | 'mercator';
41
+ type TileflowLight = {
42
+ anchor?: 'map' | 'viewport';
43
+ color?: TileflowColor;
44
+ intensity?: number;
45
+ position?: readonly [number, number, number];
46
+ };
47
+ type MapLibreStyle = {
48
+ sky?: Record<string, unknown>;
49
+ version: 8;
50
+ name: string;
51
+ glyphs?: string;
52
+ light?: TileflowLight;
53
+ projection?: {
54
+ type: TileflowProjection;
55
+ };
56
+ sprite?: MapLibreSprite;
57
+ sources: Record<string, Record<string, unknown>>;
58
+ layers: Array<Record<string, unknown>>;
59
+ terrain?: Record<string, unknown>;
60
+ metadata?: Record<string, unknown>;
61
+ };
62
+
63
+ type TileflowRuntimeColorScheme = 'dark' | 'light';
64
+
65
+ type TileflowAnalytics = {
66
+ apiUrl?: string;
67
+ endpoint?: string;
68
+ enabled?: boolean;
69
+ mapId?: string;
70
+ metadata?: Record<string, unknown>;
71
+ projectId?: string;
72
+ sdkVersion?: string;
73
+ source?: string;
74
+ styleId?: string;
75
+ surfaceId?: string;
76
+ };
77
+ type TileflowSessionController = {
78
+ readonly sessionId: string;
79
+ resolveRequestUrl(url: string, analytics: TileflowAnalytics | undefined): Promise<string | undefined>;
80
+ };
81
+ type TileflowRuntimeStyle = {
82
+ analytics?: TileflowAnalytics;
83
+ colorScheme?: TileflowRuntimeColorScheme;
84
+ /** An explicit empty array means the manifest declares that no web fonts are required. */
85
+ fontFaces?: TileflowStyleFontFace[];
86
+ revision?: string;
87
+ style: MapLibreStyle | string;
88
+ theme?: string;
89
+ };
90
+ type TileflowStyleFontFace = {
91
+ family: string;
92
+ source: string;
93
+ style?: 'italic' | 'normal' | 'oblique';
94
+ weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
95
+ };
96
+
97
+ /**
98
+ * Browser helpers for theme transitions and blends. They use only methods that MapLibre GL JS maps
99
+ * provide and check each one at runtime, so a map without them falls back to an immediate change.
100
+ */
101
+ type TileflowThemeMotionMap = {
102
+ areTilesLoaded?: unknown;
103
+ getCanvas?: unknown;
104
+ getImage?: unknown;
105
+ isStyleLoaded?: unknown;
106
+ off(event: string, listener: (event?: unknown) => void): unknown;
107
+ on(event: string, listener: (event?: unknown) => void): unknown;
108
+ project?: unknown;
109
+ redraw?: unknown;
110
+ setLayoutProperty?: unknown;
111
+ setLight?: unknown;
112
+ setPaintProperty?: unknown;
113
+ setSky?: unknown;
114
+ unproject?: unknown;
115
+ updateImage?: unknown;
116
+ };
117
+
118
+ /** Structural MapLibre capabilities; importing this module never loads a renderer. */
119
+ type TileflowAtmosphereMap = {
120
+ getBearing(): number;
121
+ getCanvas(): HTMLCanvasElement;
122
+ getCenter(): {
123
+ lat: number;
124
+ lng: number;
125
+ };
126
+ getContainer(): HTMLElement;
127
+ getPitch(): number;
128
+ getZoom(): number;
129
+ getStyle(): {
130
+ metadata?: unknown;
131
+ projection?: {
132
+ type?: unknown;
133
+ };
134
+ } | undefined;
135
+ on(event: 'move' | 'resize' | 'style.load' | 'remove', listener: () => void): unknown;
136
+ off(event: 'move' | 'resize' | 'style.load' | 'remove', listener: () => void): unknown;
137
+ };
138
+ /**
139
+ * Render compiled globe atmosphere metadata. Call after constructing a browser map.
140
+ * Follows style replacements and releases its canvas, listeners, and pending frame on disposal.
141
+ */
142
+ declare function attachTileflowAtmosphere(map: TileflowAtmosphereMap): () => void;
143
+
144
+ declare const tileflowMaplibreContourVersion: "0.1.0";
145
+ type TileflowContourProtocolRequest = Readonly<{
146
+ url: string;
147
+ }>;
148
+ type TileflowContourProtocolResponse = Readonly<{
149
+ cacheControl?: string | null;
150
+ data: ArrayBuffer;
151
+ expires?: Date | string | null;
152
+ }>;
153
+ type TileflowContourProtocolHandler = (request: TileflowContourProtocolRequest, abortController: AbortController) => Promise<TileflowContourProtocolResponse>;
154
+ type TileflowContourProtocolRegistry = {
155
+ addProtocol: (name: string, handler: TileflowContourProtocolHandler) => void;
156
+ };
157
+ type TileflowContourProtocolRegistrationOptions = {
158
+ /** Test/integration override; the default lazily initializes the pinned, bundled module. */
159
+ loadMaplibreContour?: () => Promise<unknown>;
160
+ };
161
+ /** Registers the one self-contained protocol emitted by every compiled contour source. */
162
+ declare function registerTileflowContourProtocol(registry: TileflowContourProtocolRegistry, options?: TileflowContourProtocolRegistrationOptions): void;
163
+
164
+ type TileflowPmtilesProtocolHandler = (request: Readonly<{
165
+ type?: string;
166
+ url: string;
167
+ }>, abortController: AbortController) => Promise<Readonly<{
168
+ cacheControl?: string;
169
+ data: unknown;
170
+ expires?: string;
171
+ }>>;
172
+ type TileflowPmtilesProtocolRegistry = Readonly<{
173
+ addProtocol: (name: string, handler: TileflowPmtilesProtocolHandler) => void;
174
+ }>;
175
+ type TileflowPmtilesProtocolRegistrationOptions = Readonly<{
176
+ maximumDirectoryDepth?: number;
177
+ }>;
178
+ declare const tileflowPmtilesMaximumDirectoryDepth: 32;
179
+ declare const tileflowPmtilesProtocol: "tileflow-pmtiles";
180
+ /** Register only Tileflow's managed PMTiles namespace. Third-party `pmtiles://` remains untouched. */
181
+ declare function registerTileflowPmtilesProtocol(registry: TileflowPmtilesProtocolRegistry, options?: TileflowPmtilesProtocolRegistrationOptions): void;
182
+
183
+ type TileflowMapReadinessState = 'error' | 'idle' | 'loading';
184
+ /** Read the browser preference without persisting or mutating user state. */
185
+ declare function getTileflowSystemColorScheme(): TileflowRuntimeColorScheme;
186
+ /**
187
+ * Subscribe through one process-wide `matchMedia` listener, regardless of adapter or map count.
188
+ */
189
+ declare function subscribeTileflowSystemColorScheme(listener: (scheme: TileflowRuntimeColorScheme) => void): () => void;
190
+ type TileflowThemeTransitionPhase = 'applying' | 'error' | 'preloading' | 'ready';
191
+ type TileflowThemeTransition = Readonly<{
192
+ currentTheme?: string;
193
+ error?: Error;
194
+ phase: TileflowThemeTransitionPhase;
195
+ targetTheme?: string;
196
+ }>;
197
+ type TileflowThemeTransitionResult = Readonly<{
198
+ error?: Error;
199
+ status: 'applied' | 'failed' | 'superseded';
200
+ theme?: string;
201
+ }>;
202
+ /**
203
+ * How a theme change appears. With a `duration`, the map cross-fades from the previous theme to
204
+ * the new one: a snapshot of the previous frame covers the map, follows the camera, and fades out
205
+ * once the new theme is drawn. A browser preference for reduced motion changes at once.
206
+ */
207
+ type TileflowThemeTransitionOptions = Readonly<{
208
+ /** Cross-fade length in milliseconds, from 0 (the default, an immediate change) to 5000. */
209
+ duration?: number;
210
+ }>;
211
+ type TileflowThemeChangeOptions = Readonly<{
212
+ transition?: TileflowThemeTransitionOptions;
213
+ }>;
214
+ /**
215
+ * A continuous mix of two or more themes of the same map. `position` places the map between
216
+ * neighbouring themes: 0 is the first, 1 the second, and 1.25 a quarter of the way from the second
217
+ * to the third. Ground colours, patterns, the sky, and light follow the position; labels and icons
218
+ * cross-fade when the nearest theme changes.
219
+ */
220
+ type TileflowThemeBlendRequest = Readonly<{
221
+ position: number;
222
+ /** Two to eight concrete themes of one map, in blend order. */
223
+ themes: readonly TileflowRuntimeStyle[];
224
+ }>;
225
+ type TileflowThemeBlendState = Readonly<{
226
+ position: number;
227
+ themes: readonly string[];
228
+ }>;
229
+ type TileflowStyleSwitchMap = TileflowThemeMotionMap & {
230
+ off(event: string, listener: (event?: unknown) => void): unknown;
231
+ on(event: string, listener: (event?: unknown) => void): unknown;
232
+ setStyle: unknown;
233
+ };
234
+ type TileflowThemeController = {
235
+ dispose(): void;
236
+ /** The active blend, or undefined when the map shows one theme. */
237
+ getBlend(): TileflowThemeBlendState | undefined;
238
+ /** The theme the map shows; during a blend, the nearest theme. */
239
+ getCurrent(): TileflowRuntimeStyle;
240
+ /**
241
+ * Shows a blend of themes. The first request for a set of themes loads their styles and
242
+ * prepares one style that holds all of them; later requests for the same themes only move the
243
+ * position and take effect at once, so they can follow an animation or a slider.
244
+ */
245
+ setBlend(request: TileflowThemeBlendRequest, options?: TileflowThemeChangeOptions): Promise<TileflowThemeTransitionResult>;
246
+ setTheme(style: TileflowRuntimeStyle, options?: TileflowThemeChangeOptions): Promise<TileflowThemeTransitionResult>;
247
+ };
248
+ /**
249
+ * Transactionally changes a MapLibre style while preserving the map instance and camera.
250
+ * Independent font preloads start immediately; style application is serialized and last request wins.
251
+ */
252
+ declare function createTileflowThemeController(options: {
253
+ initial: TileflowRuntimeStyle;
254
+ loadFonts?: (style: TileflowRuntimeStyle) => Promise<void>;
255
+ /** Loads a theme's style document for a blend; defaults to a same-origin-credentials fetch. */
256
+ loadStyle?: (url: string) => Promise<MapLibreStyle>;
257
+ map: TileflowStyleSwitchMap;
258
+ onTransition?: (transition: TileflowThemeTransition) => void;
259
+ timeoutMs?: number;
260
+ /** The default for every change; each change may pass its own. */
261
+ transition?: TileflowThemeTransitionOptions;
262
+ }): TileflowThemeController;
263
+ type TileflowMapLifecycleEvent = 'dataloading' | 'error' | 'idle' | 'load' | 'styledataloading';
264
+ type TileflowFrameScheduler<TFrame> = {
265
+ cancelFrame: (frame: TFrame) => void;
266
+ requestFrame: (callback: () => void) => TFrame;
267
+ };
268
+ type TileflowMapLifecycleSubscriber<TMap> = (map: TMap, event: TileflowMapLifecycleEvent, listener: () => void) => () => void;
269
+ type TileflowSessionSender = (analytics: TileflowAnalytics | undefined, input: {
270
+ mapId?: string;
271
+ sessionId: string;
272
+ source: string;
273
+ styleId?: string;
274
+ }) => void;
275
+ type TileflowSessionStarter = {
276
+ clear: () => void;
277
+ start: (analytics: TileflowAnalytics | undefined, styleId?: string) => boolean;
278
+ };
279
+ type TileflowMapLifecycleAttachment = {
280
+ dispose: () => void;
281
+ invalidate: (state?: TileflowMapReadinessState) => void;
282
+ };
283
+ type TileflowStyleFontLoadOptions = {
284
+ /** Already resolved manifest metadata. An explicit empty array avoids fetching the style. */
285
+ fontFaces?: readonly TileflowStyleFontFace[];
286
+ fetch?: typeof globalThis.fetch;
287
+ };
288
+ /** Loads content-addressed style font faces before MapLibre starts shaping labels. */
289
+ declare function loadTileflowStyleFonts(style: MapLibreStyle | string, options?: TileflowStyleFontLoadOptions): Promise<void>;
290
+ type TileflowTransformRequestParameters = {
291
+ url: string;
292
+ };
293
+ type TileflowComposedRequest<TRequest extends TileflowTransformRequestParameters> = Pick<TRequest, 'url'> & Partial<Omit<TRequest, 'url'>>;
294
+ type TileflowTransformRequest<TRequest extends TileflowTransformRequestParameters, TResourceType> = (url: string, resourceType?: TResourceType) => Promise<TileflowComposedRequest<TRequest>> | TileflowComposedRequest<TRequest> | undefined;
295
+ type TileflowUserTransformRequest<TRequest extends TileflowTransformRequestParameters, TResourceType> = (url: string, resourceType?: TResourceType) => Promise<TRequest> | TRequest | undefined;
296
+ type TileflowAsyncAnalyticsTiming = 'request' | 'resolution';
297
+ declare function createTileflowSessionStarter(options: {
298
+ getSessionId?: () => string;
299
+ sessionId: string;
300
+ source: string;
301
+ startSession?: TileflowSessionSender;
302
+ }): TileflowSessionStarter;
303
+ declare function attachTileflowMapLifecycle<TMap, TFrame>(options: {
304
+ getSession?: () => {
305
+ analytics: TileflowAnalytics | undefined;
306
+ styleId?: string;
307
+ };
308
+ map: TMap;
309
+ onLoad?: (map: TMap) => void;
310
+ scheduler: TileflowFrameScheduler<TFrame>;
311
+ sessionStarter?: TileflowSessionStarter;
312
+ setState: (state: TileflowMapReadinessState) => void;
313
+ subscribe: TileflowMapLifecycleSubscriber<TMap>;
314
+ }): TileflowMapLifecycleAttachment;
315
+ declare function createTileflowTransformRequest<TRequest extends TileflowTransformRequestParameters = TileflowTransformRequestParameters, TResourceType = unknown>(options: {
316
+ always: true;
317
+ asyncAnalyticsTiming?: TileflowAsyncAnalyticsTiming;
318
+ getAnalytics: () => TileflowAnalytics | undefined;
319
+ sessionController?: TileflowSessionController;
320
+ sessionId: string;
321
+ transformRequest?: TileflowUserTransformRequest<TRequest, TResourceType>;
322
+ worldRequestBridge?: TileflowWorldRequestBridge;
323
+ }): TileflowTransformRequest<TRequest, TResourceType>;
324
+ declare function createTileflowTransformRequest<TRequest extends TileflowTransformRequestParameters = TileflowTransformRequestParameters, TResourceType = unknown>(options: {
325
+ always?: boolean;
326
+ asyncAnalyticsTiming?: TileflowAsyncAnalyticsTiming;
327
+ getAnalytics: () => TileflowAnalytics | undefined;
328
+ sessionController?: TileflowSessionController;
329
+ sessionId: string;
330
+ transformRequest?: TileflowUserTransformRequest<TRequest, TResourceType>;
331
+ worldRequestBridge?: TileflowWorldRequestBridge;
332
+ }): TileflowTransformRequest<TRequest, TResourceType> | undefined;
333
+
334
+ export { type TileflowAsyncAnalyticsTiming, type TileflowAtmosphereMap, type TileflowComposedRequest, type TileflowContourProtocolHandler, type TileflowContourProtocolRegistrationOptions, type TileflowContourProtocolRegistry, type TileflowContourProtocolRequest, type TileflowContourProtocolResponse, type TileflowFairUseNotice, type TileflowFairUseNoticeController, type TileflowFairUseNoticeState, type TileflowFrameScheduler, type TileflowMapLifecycleAttachment, type TileflowMapLifecycleEvent, type TileflowMapLifecycleSubscriber, type TileflowMapReadinessState, type TileflowPmtilesProtocolHandler, type TileflowPmtilesProtocolRegistrationOptions, type TileflowPmtilesProtocolRegistry, type TileflowSessionSender, type TileflowSessionStarter, type TileflowStyleFontLoadOptions, type TileflowStyleSwitchMap, type TileflowThemeBlendRequest, type TileflowThemeBlendState, type TileflowThemeChangeOptions, type TileflowThemeController, type TileflowThemeTransition, type TileflowThemeTransitionOptions, type TileflowThemeTransitionPhase, type TileflowThemeTransitionResult, type TileflowTransformRequest, type TileflowTransformRequestParameters, type TileflowUserTransformRequest, type TileflowWorldProtocolHandler, type TileflowWorldProtocolRequest, type TileflowWorldProtocolResponse, type TileflowWorldRequestBridge, attachTileflowAtmosphere, attachTileflowFairUseNotice, attachTileflowMapLifecycle, createTileflowSessionStarter, createTileflowThemeController, createTileflowTransformRequest, getTileflowSystemColorScheme, loadTileflowStyleFonts, registerTileflowContourProtocol, registerTileflowPmtilesProtocol, registerTileflowWorldRequestBridge, subscribeTileflowSystemColorScheme, tileflowFairUseNoticeMessage, tileflowMaplibreContourVersion, tileflowPmtilesMaximumDirectoryDepth, tileflowPmtilesProtocol };