@tileflow/core 0.1.0-alpha.18 → 0.1.0-alpha.19
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.
- package/README.md +221 -198
- package/dist/browser.d.ts +1 -1
- package/dist/index.d.ts +43 -2343
- package/dist/index.js +4294 -6074
- package/dist/runtime-Dd_xGAXq.d.ts +1062 -0
- package/package.json +2 -3
- package/OSM_BRIGHT_LICENSE.md +0 -62
- package/dist/runtime-Bg--GMWM.d.ts +0 -680
package/README.md
CHANGED
|
@@ -1,261 +1,280 @@
|
|
|
1
1
|
# @tileflow/core
|
|
2
2
|
|
|
3
|
-
Typed Tileflow
|
|
3
|
+
Typed Tileflow authoring primitives and the deterministic Tileflow Streets compiler.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
|
-
import {defineTileflow, labels,
|
|
6
|
+
import {defineTileflow, labels, poi, roads, streets, water, zoom} from '@tileflow/core';
|
|
7
7
|
|
|
8
8
|
export default defineTileflow({
|
|
9
|
-
icons: {
|
|
10
|
-
brand: {
|
|
11
|
-
sprite: 'https://cdn.example.com/tileflow/brand/sprite',
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
9
|
themes: {
|
|
15
|
-
|
|
10
|
+
editorial: {
|
|
11
|
+
extends: 'light',
|
|
16
12
|
colors: {
|
|
17
|
-
background: '#
|
|
18
|
-
land: '#
|
|
19
|
-
water: '#
|
|
20
|
-
park: '#
|
|
21
|
-
building: '#
|
|
22
|
-
road: '#
|
|
23
|
-
roadMajor: '#
|
|
24
|
-
roadCasing: '#
|
|
25
|
-
boundary: '#
|
|
26
|
-
text: '#
|
|
27
|
-
textMuted: '#
|
|
28
|
-
textHalo: '#
|
|
29
|
-
},
|
|
30
|
-
modules: {
|
|
31
|
-
labels: {
|
|
32
|
-
road: '#7A8794',
|
|
33
|
-
water: '#4B8FA8',
|
|
34
|
-
},
|
|
35
|
-
poi: {
|
|
36
|
-
food: '#D97706',
|
|
37
|
-
transit: '#2563EB',
|
|
38
|
-
},
|
|
39
|
-
roads: {
|
|
40
|
-
motorway: '#F7C56F',
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
typography: {
|
|
44
|
-
font: 'Inter',
|
|
45
|
-
roads: {weight: 'bold'},
|
|
13
|
+
background: '#E4DFD4',
|
|
14
|
+
land: '#F5F2EB',
|
|
15
|
+
water: '#A7CED7',
|
|
16
|
+
park: '#C6D8B7',
|
|
17
|
+
building: '#D6CFC3',
|
|
18
|
+
road: '#FCFBF8',
|
|
19
|
+
roadMajor: '#EBCB8F',
|
|
20
|
+
roadCasing: '#BBB1A1',
|
|
21
|
+
boundary: '#999184',
|
|
22
|
+
text: '#252B2D',
|
|
23
|
+
textMuted: '#626866',
|
|
24
|
+
textHalo: '#FBF9F4',
|
|
46
25
|
},
|
|
26
|
+
typography: {font: 'Noto Sans', places: {weight: 'bold'}},
|
|
47
27
|
},
|
|
48
28
|
},
|
|
49
29
|
maps: {
|
|
50
30
|
madrid: {
|
|
51
|
-
basemap:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
poi({
|
|
57
|
-
categories: ['food', 'coffee', 'culture', 'transit'],
|
|
58
|
-
color: 'category',
|
|
59
|
-
density: 'balanced',
|
|
60
|
-
icons: 'essential',
|
|
61
|
-
}),
|
|
62
|
-
roads({
|
|
31
|
+
basemap: streets(),
|
|
32
|
+
theme: 'editorial',
|
|
33
|
+
modules: {
|
|
34
|
+
water: water({bodies: {fill: {opacity: 0.95}}}),
|
|
35
|
+
roads: roads({
|
|
63
36
|
detail: 'streets',
|
|
64
|
-
hierarchy: '
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
37
|
+
hierarchy: 'strong',
|
|
38
|
+
classes: {
|
|
39
|
+
primary: {
|
|
40
|
+
surface: {
|
|
41
|
+
fill: {
|
|
42
|
+
color: '#E4A85B',
|
|
43
|
+
width: zoom.linear([
|
|
44
|
+
[7, 0.6],
|
|
45
|
+
[16, 8],
|
|
46
|
+
]),
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
69
51
|
}),
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
52
|
+
labels: labels({
|
|
53
|
+
language: 'local',
|
|
54
|
+
places: 'all',
|
|
55
|
+
roads: 'streets',
|
|
56
|
+
styles: {
|
|
57
|
+
places: {city: {text: {size: 18, haloWidth: 1.5}}},
|
|
75
58
|
},
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
view: {
|
|
79
|
-
center: [-3.7038, 40.4168],
|
|
80
|
-
zoom: 12,
|
|
59
|
+
}),
|
|
60
|
+
poi: poi({categories: ['food', 'culture', 'transit'], color: 'category'}),
|
|
81
61
|
},
|
|
62
|
+
view: {center: [-3.7038, 40.4168], pitch: 35, zoom: 12},
|
|
82
63
|
},
|
|
83
64
|
},
|
|
84
65
|
});
|
|
85
66
|
```
|
|
86
67
|
|
|
87
|
-
##
|
|
68
|
+
## Authoring model
|
|
88
69
|
|
|
89
|
-
|
|
90
|
-
|
|
70
|
+
`streets()` is the only built-in basemap. It identifies a versioned cartographic recipe and does
|
|
71
|
+
not inherit or patch another style. The compiler resolves the complete Streets design and asks
|
|
72
|
+
each domain module to create its own MapLibre layers. A shared graph then determines layer order.
|
|
91
73
|
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
'madrid-desktop': {
|
|
99
|
-
map: 'madrid',
|
|
100
|
-
camera: {type: 'center', center: [-3.7038, 40.4168], zoom: 12},
|
|
101
|
-
viewport: {width: 1280, height: 800, dpr: 1},
|
|
102
|
-
},
|
|
103
|
-
'madrid-product': {
|
|
104
|
-
map: 'madrid',
|
|
105
|
-
camera: {type: 'center', center: [-3.7038, 40.4168], zoom: 12},
|
|
106
|
-
viewport: {width: 390, height: 844, dpr: 2},
|
|
107
|
-
target: {
|
|
108
|
-
kind: 'application',
|
|
109
|
-
path: '/maps/madrid',
|
|
110
|
-
captureId: 'product-map',
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
});
|
|
74
|
+
```mermaid
|
|
75
|
+
flowchart LR
|
|
76
|
+
A["Human or agent edits config"] --> B["Streets defaults + theme + keyed modules"]
|
|
77
|
+
B --> C["Domain compilers"]
|
|
78
|
+
C --> D["Ordered Streets layers"]
|
|
79
|
+
D --> E["Validated MapLibre Style JSON"]
|
|
115
80
|
```
|
|
116
81
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
82
|
+
Modules are keyed by domain, so object order never controls rendering and a domain can appear only
|
|
83
|
+
once. Omit a module to keep the complete Streets default. Use `enabled: false` to remove a domain
|
|
84
|
+
deliberately. The public domains are `land`, `water`, `roads`, `buildings`, `boundaries`, `labels`,
|
|
85
|
+
`poi`, `aeroways`, and `transit`.
|
|
86
|
+
|
|
87
|
+
Every styling module supports semantic shortcuts and exact semantic targets. Style values accept
|
|
88
|
+
constants, raw MapLibre expressions through `expression(...)`, and zoom functions through
|
|
89
|
+
`zoom.step(...)`, `zoom.linear(...)`, or `zoom.exponential(...)`. Exact controls address stable
|
|
90
|
+
concepts such as `roads.classes.primary.surface.fill`, not renderer layer IDs.
|
|
123
91
|
|
|
124
|
-
##
|
|
92
|
+
## Shared visual primitives
|
|
125
93
|
|
|
126
|
-
|
|
94
|
+
The same small visual language is reused across every geographic domain. This keeps an agent from
|
|
95
|
+
having to learn different spellings for the same MapLibre behavior:
|
|
127
96
|
|
|
128
|
-
- `
|
|
129
|
-
- `
|
|
130
|
-
- `
|
|
131
|
-
- `
|
|
132
|
-
|
|
133
|
-
- `
|
|
134
|
-
|
|
135
|
-
- `
|
|
136
|
-
- `
|
|
97
|
+
- `BackgroundStyle`: color, opacity, pattern, visibility, and zoom range.
|
|
98
|
+
- `FillStyle`: color, opacity, pattern, antialiasing, visibility, and zoom range.
|
|
99
|
+
- `LineStyle`: color, width, opacity, dash, blur, gap, offset, pattern, caps, joins, and zoom range.
|
|
100
|
+
- `LineHatchStyle`: repeated diagonal detail with color, opacity, spacing, size, angle, and zoom
|
|
101
|
+
range for a road structure.
|
|
102
|
+
- `TextStyle`: field, font, weight, fallbacks, size, color, halo, spacing metrics, transform,
|
|
103
|
+
collision policy, rotation, fixed/variable anchoring, line constraints, and zoom range.
|
|
104
|
+
- `IconStyle`: image, size, color, halo, rotation/alignment, collision policy, and zoom range.
|
|
105
|
+
- `CircleStyle`: radius, fill/stroke appearance, blur, opacity, pitch behavior, and zoom range.
|
|
106
|
+
- `ExtrusionStyle`: color, height, base, opacity, pattern, vertical gradient, and zoom range.
|
|
137
107
|
|
|
138
|
-
|
|
108
|
+
Compounds express common cartographic structures: `AreaStyle` has `fill` and `outline`,
|
|
109
|
+
`LineStackStyle` has `shadow`, `casing`, and `fill`, and `SymbolStyle` combines placement with
|
|
110
|
+
optional `text`, `icon`, and `marker`. Geographic selection remains owned by semantic modules;
|
|
111
|
+
ordinary visual styles intentionally do not accept raw source filters.
|
|
139
112
|
|
|
140
|
-
|
|
113
|
+
A `SymbolStyle` root zoom range governs its text/icon layer and is inherited by its marker layer.
|
|
114
|
+
Because a marker is materialized as a separate circle layer, an explicit marker range may refine
|
|
115
|
+
that inherited default. Text and icon ranges must agree because MapLibre renders them together.
|
|
141
116
|
|
|
142
|
-
|
|
117
|
+
The road module distinguishes the path family semantically:
|
|
143
118
|
|
|
144
119
|
```ts
|
|
145
120
|
roads({
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
121
|
+
extras: {paths: true},
|
|
122
|
+
areas: {
|
|
123
|
+
pedestrian: {
|
|
124
|
+
fill: {color: '#F1F3F5'},
|
|
125
|
+
outline: {color: '#D5DCE3', width: 1},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
classes: {
|
|
129
|
+
primary: {
|
|
130
|
+
tunnel: {
|
|
131
|
+
casing: {color: '#8EA3B8', width: 10},
|
|
132
|
+
fill: {color: '#F5F8FA', width: 8},
|
|
133
|
+
hatch: {color: '#8EA3B8', opacity: 0.25, spacing: 10},
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
pedestrian: {surface: {fill: {color: '#F5F6F7', width: 6}}},
|
|
137
|
+
footway: {surface: {fill: {color: '#D9DEE3', width: 1.2}}},
|
|
138
|
+
cycleway: {surface: {fill: {color: '#9ED8C5', width: 1.5}}},
|
|
139
|
+
steps: {surface: {fill: {color: '#C7CED6', dash: [1, 1], width: 1.4}}},
|
|
140
|
+
pathway: {surface: {fill: {color: '#E8ECEF', width: 1.2}}},
|
|
141
|
+
},
|
|
142
|
+
modifiers: {
|
|
143
|
+
expressway: {widthScale: 1.06},
|
|
144
|
+
ramp: {widthScale: 0.7},
|
|
145
|
+
unpaved: {surface: {fill: {color: '#E6DFD3', dash: [2, 1]}}},
|
|
146
|
+
construction: {surface: {fill: {dash: [2, 1], opacity: 0.7}}},
|
|
147
|
+
indoor: {surface: {fill: {dash: [1, 1], opacity: 0.4}}},
|
|
148
|
+
},
|
|
149
|
+
restrictions: {
|
|
150
|
+
access: {surface: {fill: {dash: [1.5, 1], opacity: 0.55}}},
|
|
151
|
+
toll: {surface: {casing: {color: '#C5B7D8'}}},
|
|
152
|
+
},
|
|
153
|
+
serviceTypes: {
|
|
154
|
+
driveway: {widthScale: 0.75},
|
|
155
|
+
parkingAisle: {widthScale: 0.6},
|
|
156
156
|
},
|
|
157
157
|
});
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
`
|
|
165
|
-
|
|
166
|
-
direction markers to eligible one-way roads.
|
|
167
|
-
|
|
168
|
-
Without options, `roads()` uses `detail: 'streets'`, `hierarchy: 'clear'`,
|
|
169
|
-
`weight: 'regular'`, `outline: 'subtle'`, and all extras disabled. Named visual recipes belong
|
|
170
|
-
in examples rather than the runtime API, so the resolved behavior is always visible in config.
|
|
160
|
+
These targets are non-overlapping translations of the OpenMapTiles road class and subclass. The
|
|
161
|
+
same names are available under `labels().roadClasses` and `labels().styles.roads`. Surface, tunnel,
|
|
162
|
+
and bridge phases can be controlled independently for each target; each structure has
|
|
163
|
+
`shadow`/`casing`/`fill` and an optional `hatch`. Hatch marks inherit the resolved fill width when
|
|
164
|
+
`size` is omitted and never participate in label collision. No raw source filter or generated layer
|
|
165
|
+
ID is needed.
|
|
171
166
|
|
|
172
|
-
|
|
167
|
+
`classes.pedestrian` styles line-like pedestrian ways. Polygon pedestrian plazas are a distinct
|
|
168
|
+
geometry and use `areas.pedestrian`, including optional fill opacity, outline color, or sprite
|
|
169
|
+
pattern. This prevents plazas from degrading into a thin polygon outline.
|
|
173
170
|
|
|
174
|
-
|
|
171
|
+
Road treatments refine a class without creating another class or exposing source fields.
|
|
172
|
+
`construction`, `expressway`, `indoor`, `official`, `ramp`, and `unpaved` live under `modifiers`;
|
|
173
|
+
general, bicycle, foot, horse, and toll restrictions live under `restrictions`; `alley`,
|
|
174
|
+
`crossover`, `driveway`, `parkingAisle`, and `yard` live under `serviceTypes`; and exact
|
|
175
|
+
mountain-bike difficulty values live under `mountainBike`. Treatments reuse
|
|
176
|
+
surface/tunnel/bridge and casing/fill/shadow paint controls, plus a relative `widthScale`. The
|
|
177
|
+
compiler emits feature-driven paint expressions inside the existing stable class layers rather
|
|
178
|
+
than multiplying every possible combination.
|
|
175
179
|
|
|
176
|
-
|
|
180
|
+
Road names, shields, and motorway junctions remain label concerns:
|
|
177
181
|
|
|
178
182
|
```ts
|
|
179
183
|
labels({
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
184
|
+
roads: 'all',
|
|
185
|
+
shields: 'all',
|
|
186
|
+
junctions: true,
|
|
187
|
+
styles: {
|
|
188
|
+
shields: {
|
|
189
|
+
default: {text: {color: '#405264', haloColor: '#fff', haloWidth: 2, weight: 'bold'}},
|
|
190
|
+
networks: {
|
|
191
|
+
'network-value': {text: {color: '#B43A35'}},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
junctions: {text: {color: '#405264', haloColor: '#fff', haloWidth: 2}},
|
|
195
|
+
},
|
|
185
196
|
});
|
|
186
197
|
```
|
|
187
198
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
`
|
|
199
|
+
POI `density`, `labels`, and `icons` are independent policies. Density bounds eligible feature
|
|
200
|
+
ranks, label detail controls text ranks, icon detail controls icon ranks, and
|
|
201
|
+
`placement.coupleIconAndLabel` deliberately keeps only features eligible for both. Without
|
|
202
|
+
coupling, icon and label layers collide normally but can be styled and zoomed independently.
|
|
203
|
+
The `balanced` policy keeps a practical cross-category candidate set from an overscaled
|
|
204
|
+
OpenMapTiles source tile; MapLibre collision placement still decides which candidates fit the
|
|
205
|
+
current viewport. Use a category style's inclusive `maxRank` when different feature families need
|
|
206
|
+
different candidate ceilings; the explicit category value replaces the density/label/icon preset
|
|
207
|
+
ceiling for that category without exposing a raw layer ID or filter.
|
|
193
208
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
are also clamped to the classes currently visible through `roads({detail})`, so the effective result
|
|
197
|
-
is the intersection of both modules. `language` accepts `auto`, `local`, or a language code such as
|
|
198
|
-
`en` or `es`.
|
|
209
|
+
Theme tokens provide shared color and typography defaults. A module-level exact style wins over a
|
|
210
|
+
theme token for that target. Precedence is deterministic:
|
|
199
211
|
|
|
200
|
-
|
|
201
|
-
|
|
212
|
+
1. Streets recipe defaults.
|
|
213
|
+
2. Selected theme and inherited named theme.
|
|
214
|
+
3. Explicit keyed module fields.
|
|
215
|
+
4. Ordered raw overrides.
|
|
202
216
|
|
|
203
|
-
|
|
204
|
-
|
|
217
|
+
Raw `addLayer`, `patchLayer`, `moveLayer`, and `removeLayer` operations are the final MapLibre escape
|
|
218
|
+
hatch. They are ordered, target generated `streets-*` IDs explicitly, and fail when a target or
|
|
219
|
+
anchor does not exist. They should be used for one-off MapLibre behavior, not ordinary design.
|
|
205
220
|
|
|
206
|
-
##
|
|
221
|
+
## Data is separate from design
|
|
207
222
|
|
|
208
|
-
|
|
209
|
-
priority:
|
|
223
|
+
Omitting `data` selects Tileflow World at the revision pinned by this SDK version:
|
|
210
224
|
|
|
211
225
|
```ts
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
color: 'category',
|
|
216
|
-
density: 'balanced',
|
|
217
|
-
icons: 'full',
|
|
218
|
-
labels: 'full',
|
|
219
|
-
placement: {coupleIconAndLabel: true, iconPadding: 4, textPadding: 8},
|
|
220
|
-
});
|
|
226
|
+
{
|
|
227
|
+
basemap: streets();
|
|
228
|
+
}
|
|
221
229
|
```
|
|
222
230
|
|
|
223
|
-
|
|
224
|
-
without removing the defaults. `color: 'category'` uses `theme.modules.poi` colors end to end.
|
|
225
|
-
Named density is opt-in and adds bounded category-aware rank gates plus stable sort priority;
|
|
226
|
-
omitting it preserves legacy layer behavior. Raw source rank expressions remain available through
|
|
227
|
-
`styleOverride` when a particular dataset needs a bespoke rule.
|
|
231
|
+
Pin the official data deliberately, or use another OpenMapTiles-compatible vector source:
|
|
228
232
|
|
|
229
|
-
|
|
233
|
+
```ts
|
|
234
|
+
import {openMapTiles, tileflowWorld, vectorTiles} from '@tileflow/core';
|
|
235
|
+
|
|
236
|
+
const official = tileflowWorld({revision: '2026-06-07'});
|
|
237
|
+
const external = vectorTiles({
|
|
238
|
+
url: 'https://tiles.example.com/tiles.json',
|
|
239
|
+
attribution: '© Example © OpenStreetMap contributors',
|
|
240
|
+
schema: openMapTiles(),
|
|
241
|
+
});
|
|
242
|
+
```
|
|
230
243
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
244
|
+
The basemap controls how data is drawn; `data` controls where compatible features come from. The
|
|
245
|
+
compiler performs no network request. `openMapTiles({layers, fields})` can bind renamed
|
|
246
|
+
source-layers or properties while preserving the versioned semantic contract. External browser
|
|
247
|
+
credentials do not belong in public Style JSON; supply them through the framework's
|
|
248
|
+
`transformRequest` integration.
|
|
235
249
|
|
|
236
|
-
##
|
|
250
|
+
## Capture scenes
|
|
237
251
|
|
|
238
|
-
|
|
239
|
-
root:
|
|
252
|
+
Commit named scenes beside maps. Scenes affect visual evidence, not style or manifest identity.
|
|
240
253
|
|
|
241
254
|
```ts
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
255
|
+
export default defineTileflow({
|
|
256
|
+
maps: {madrid: {basemap: streets()}},
|
|
257
|
+
scenes: {
|
|
258
|
+
'madrid-desktop': {
|
|
259
|
+
map: 'madrid',
|
|
260
|
+
camera: {type: 'center', center: [-3.7038, 40.4168], zoom: 12},
|
|
261
|
+
viewport: {width: 1280, height: 800, dpr: 1},
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
});
|
|
252
265
|
```
|
|
253
266
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
267
|
+
Use `tileflow dev --scene madrid-desktop` for live review and `tileflow capture madrid-desktop`
|
|
268
|
+
for exact pixels and a schema-version-2 receipt containing the Streets, data, style, renderer, and
|
|
269
|
+
image identities.
|
|
270
|
+
|
|
271
|
+
## Public API and browser subpath
|
|
272
|
+
|
|
273
|
+
Config, data, modules, compilation, validation, runtime resolution, and capture-scene APIs come
|
|
274
|
+
from the package root. Legacy basemap factories, `renderer`, top-level `tiles`/`tileset`, module
|
|
275
|
+
arrays, and raw `layers` are not part of this API.
|
|
257
276
|
|
|
258
|
-
Framework adapters
|
|
277
|
+
Framework adapters import the browser-only lifecycle kernel explicitly:
|
|
259
278
|
|
|
260
279
|
```ts
|
|
261
280
|
import {
|
|
@@ -266,11 +285,10 @@ import {
|
|
|
266
285
|
} from '@tileflow/core/browser';
|
|
267
286
|
```
|
|
268
287
|
|
|
269
|
-
The browser
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
[`docs/contracts/framework-browser-runtime.md`](../../docs/contracts/framework-browser-runtime.md).
|
|
288
|
+
The browser entry is not re-exported from the root. It is SSR-safe to import, has no MapLibre
|
|
289
|
+
runtime dependency, and reads no browser global during module evaluation. See the
|
|
290
|
+
[framework browser runtime contract](../../docs/contracts/framework-browser-runtime.md) and the
|
|
291
|
+
[cartographic authoring contract](../../docs/contracts/cartographic-authoring.md).
|
|
274
292
|
|
|
275
293
|
## Hosted session authorization
|
|
276
294
|
|
|
@@ -288,4 +306,9 @@ then decorates only the resulting eligible URL and preserves the other request o
|
|
|
288
306
|
Other subpaths under `src/`, `themes/`, `templates/`, and `modules/` are internal implementation
|
|
289
307
|
details and can change during alpha releases.
|
|
290
308
|
|
|
291
|
-
|
|
309
|
+
Streets build, preview, capture, and deploy flows supply a built-in POI sprite with Google Places
|
|
310
|
+
glyphs inside Tileflow circular markers. The markers use Google's category colors, a white rim, and
|
|
311
|
+
a compact shadow. A project-local icon source or explicit hosted sprite replaces that catalog;
|
|
312
|
+
build and deploy replace local sources with generated sprite URLs without exposing source paths.
|
|
313
|
+
Calling the pure core style compiler without asset preparation remains text-only unless the map
|
|
314
|
+
provides `icons` or `sprite` explicitly.
|
package/dist/browser.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { T as TileflowAnalytics, a as TileflowSessionController } from './runtime-
|
|
1
|
+
import { T as TileflowAnalytics, a as TileflowSessionController } from './runtime-Dd_xGAXq.js';
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
type TileflowMapReadinessState = 'error' | 'idle' | 'loading';
|