@tileflow/maps 0.1.0-alpha.2 → 0.1.0-alpha.4

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 CHANGED
@@ -1,205 +1,135 @@
1
- # `@tileflow/maps`
1
+ # @tileflow/maps
2
2
 
3
- Official Tileflow maps and the assets they own.
3
+ Official Tileflow maps with their icon, pattern, and font assets. Extend a map with
4
+ `@tileflow/core`; render its prepared output with a framework adapter or MapLibre.
5
+
6
+ > Related packages and guides: [documentation index](https://raw.githubusercontent.com/tileflow/tileflow-sdk/main/llms.txt).
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ npm install @tileflow/maps@alpha @tileflow/core@alpha
12
+ ```
13
+
14
+ Core is a peer dependency: it owns the map language and compiler. This package owns map definitions
15
+ and assets. It does not include a tile archive, a browser renderer, or a hosted service subscription.
16
+
17
+ ## Use an official map
18
+
19
+ Create `tileflow.config.ts`:
20
+
21
+ <!-- docs:check -->
4
22
 
5
23
  ```ts
6
24
  import {defineMap} from '@tileflow/core';
7
25
  import {streets} from '@tileflow/maps';
8
26
 
9
27
  export default defineMap({
10
- id: 'main',
28
+ id: 'madrid',
29
+ name: 'Madrid',
11
30
  version: 1,
12
31
  extends: streets,
13
32
  defaultTheme: 'dark',
33
+ view: {center: [-3.7038, 40.4168], zoom: 12},
14
34
  });
15
35
  ```
16
36
 
17
- This still inherits both Streets themes; it changes only which concrete theme is selected by
18
- default.
37
+ This inherits both Streets themes and changes only the default selection and initial view.
38
+ Coordinates are `[longitude, latitude]`. To preview it:
39
+
40
+ ```sh
41
+ npm install --save-dev --save-exact tileflow@alpha
42
+ npx tileflow validate
43
+ npx tileflow preview
44
+ ```
45
+
46
+ Rendering can request remote tiles, glyphs, or terrain. Installing the package does not make those
47
+ resources available offline.
48
+
49
+ ## Choose a map
50
+
51
+ - `streets`: contemporary street cartography with coordinated light and dark themes, ranked POIs,
52
+ and generic road-reference shields.
53
+ - `baedeker`: warm travel-atlas styling, serif labels, original engraved patterns, and contours.
54
+ - `ferraris`: printed-atlas styling with patterned land cover and settlements.
55
+ - `harad`: the historical green-map design displayed as **Härad**.
56
+ - `siegfried`: a terrain atlas with coordinated light/dark ink palettes, contours, and engraved patterns.
57
+ - `soundings`: bathymetric reference cartography with depth bands, continuous relief, and port context.
58
+ - `cyberpunk`: a dark heads-up-display design with destination beacons and Oxanium typography.
59
+ - `matrix`: a monochrome green-screen design with scanline and dot patterns.
60
+ - `verdant`: a contemporary field atlas emphasizing trails, vegetation, and hydrography.
61
+ - `sanFrancisto`: a dark architectural-blueprint design centered on San Francisco. The export is
62
+ spelled `sanFrancisto`.
63
+
64
+ Every official map is a complete, independent root using the same Core compiler. Official map
65
+ objects are deeply frozen shared instances. Do not mutate them; use `defineMap({extends: ...})`
66
+ to create an application-owned map.
67
+
68
+ Soundings is not a navigation product. Its depth-band edges are approximate reference geometry,
69
+ not surveyed isolines or vessel-specific safety contours. Experimental nautical aids and hazards
70
+ are not enabled by that official map.
71
+
72
+ ## Themes and assets
19
73
 
20
- Every export is an ordinary, complete first-party Tileflow map. No official map imports or extends
21
- another official map; each declares its data, modules, render stacks, themes, and asset
22
- providers directly. Applications can still use the public `extends` contract to derive their own
23
- maps from any official root. Streets and Siegfried each contain structurally identical `light` and
24
- `dark` appearances.
74
+ `streetsThemes` and `siegfriedThemes` expose complete `light` and `dark` themes. Import those
75
+ collections when using `defineTheme()` to derive a new appearance. A declared `themes` collection
76
+ replaces the inherited collection, so also declare the intended `defaultTheme` and `systemThemes`
77
+ mapping. `system` belongs to browser selection; captures and builds use concrete theme names.
25
78
 
26
- The official map objects are deeply frozen package singletons so one consumer cannot mutate
27
- the definition seen by another. This does not change Core authoring: `defineMap(...)` still returns
28
- the application-owned object without freezing it, and an application extends an official map by
29
- declaring its own modules or other atomic overrides.
79
+ Every map exports an icon-directory descriptor: `streetsIcons`, `baedekerIcons`, `ferrarisIcons`,
80
+ `haradIcons`, `siegfriedIcons`, `soundingsIcons`, `cyberpunkIcons`, `matrixIcons`, `verdantIcons`,
81
+ and `sanFrancistoIcons`. The descriptors point into this installed package; they are not sprite URLs.
82
+ The CLI and build integrations compile the selected directories into runtime assets.
83
+
84
+ Baedeker and Siegfried also export `baedekerFonts` and `siegfriedFonts` for their packaged Cormorant
85
+ Garamond faces. Cyberpunk and Matrix export `cyberpunkFonts` and `matrixFonts` for Oxanium.
86
+ Streets, Ferraris, Härad, Soundings, Verdant, and San Francisto declare Noto Sans URL glyph providers.
87
+
88
+ Omitting `icons` inherits the parent's directory list. Declaring a list replaces it; `[]` removes
89
+ all icon directories. Compose explicitly when adding application icons:
90
+
91
+ <!-- docs:check -->
30
92
 
31
93
  ```ts
32
- import {
33
- baedeker,
34
- baedekerFonts,
35
- baedekerIcons,
36
- cyberpunk,
37
- cyberpunkFonts,
38
- cyberpunkIcons,
39
- ferraris,
40
- ferrarisIcons,
41
- harad,
42
- haradIcons,
43
- matrix,
44
- matrixFonts,
45
- matrixIcons,
46
- sanFrancisto,
47
- sanFrancistoIcons,
48
- siegfried,
49
- siegfriedFonts,
50
- siegfriedIcons,
51
- siegfriedThemes,
52
- soundings,
53
- soundingsIcons,
54
- streets,
55
- streetsIcons,
56
- streetsThemes,
57
- verdant,
58
- verdantIcons,
59
- } from '@tileflow/maps';
94
+ import {defineMap} from '@tileflow/core';
95
+ import {streets, streetsIcons} from '@tileflow/maps';
96
+
97
+ export default defineMap({
98
+ id: 'store-locator',
99
+ version: 1,
100
+ extends: streets,
101
+ icons: [streetsIcons, './icons'],
102
+ });
60
103
  ```
61
104
 
62
- `baedeker` is a self-contained travel-atlas and town-plan design with open warm paper, fine coral
63
- building and residential hatching, paper-negative streets, dominant black railways, horizontally
64
- engraved cyan water, ring-stippled gardens, and browser-derived Mapterhorn contours. Travel POIs
65
- are rendered as compact serif labels without modern pictograms. It declares
66
- `[baedekerIcons]`, whose eight original Tileflow SVG patterns describe hachures, orchards, paper
67
- grain, public gardens, residential blocks, sand, water lines, and wetlands, plus
68
- `[baedekerFonts]`, its own package copy of Cormorant Garamond Regular, SemiBold, and Italic. Its
69
- visual grammar was informed by the
70
- [Baedeker / Karl Wagner & Debes collection](https://www.antiquemapsandprints.com/collections/baedeker-karl-wagner-debes?srsltid=AfmBOoqG_2Q_Zje0wPPVYjShDjDZe5aIgH_h08XcPkpu7zFaPvF6n5hq)
71
- and Wikimedia Commons'
72
- [maps by Karl Baedeker of Italy](https://commons.wikimedia.org/wiki/Category:Maps_by_Karl_Baedeker_of_Italy).
73
- The package includes no historical scan, raster pixel, historical typeface, legend artwork,
74
- geospatial data, or source map; the style and patterns are original Tileflow work. The packaged
75
- Cormorant faces are unmodified upstream font software under the SIL Open Font License 1.1. No
76
- Mapterhorn terrain tile is packaged or redistributed. Baedeker is an official Tileflow map and is
77
- not affiliated with or endorsed by Baedeker or Wagner & Debes.
78
-
79
- `ferraris` is a self-contained printed-atlas design. It uses Core's semantic compiler, but
80
- it does not import or extend the `streets` map and it does not inherit Streets assets. It declares
81
- only `[ferrarisIcons]`, which contains nine original seamless SVG patterns for paper, cultivated
82
- land, vegetation, settlements, sand, wetlands, and water. Applications can import it directly or
83
- extend it like any other root.
84
-
85
- `harad` is a self-contained historical green-map design named “Härad”. It uses Core's semantic
86
- compiler ABI without importing or extending the `streets` map or reusing any Streets asset.
87
- It declares only `[haradIcons]`, whose nine original Tileflow SVG patterns describe arable land,
88
- coniferous and deciduous woodland, orchards, paper grain, sand, settlements, water lines, and
89
- wetlands. The visual grammar is inspired by Lantmäteriet's CC0 Häradsekonomiska kartan series
90
- (1859–1934) and official legend. The package redistributes no Lantmäteriet scan, source pixel, legend
91
- artwork, font, or map data; the shipped style and SVG patterns are original Tileflow work.
92
-
93
- `soundings` is a self-contained bathymetric-chart design with ivory land, thirteen-stop
94
- depth-graded water, labelled band edges, continuous colour relief, multidirectional seabed shading,
95
- port context, named ferry routes, and restrained technical magenta. Its initial camera faces the
96
- Strait of Gibraltar, allowing an Iberian GEBCO pilot to exercise both Atlantic and Mediterranean
97
- relief. It selects the public semantic compiler contract without importing or extending `streets`
98
- and explicitly composes World with `bathymetry({display: 'hybrid'})` while setting Nautical to
99
- `false`.
100
-
101
- Vector bands come from `tileflow-bathymetry`; continuous colour relief and hillshade come from
102
- `tileflow-bathymetry-dem`. The stronger DEM treatment is balanced against the vector wash and depth
103
- labels rather than against experimental navigation symbols. Dashed outlines remain an honest
104
- fallback traced from broad GEBCO band polygons until native contour geometry is released. Labels
105
- show the absolute `min_depth` value, not an inferred range or vessel-specific safety contour.
106
- Harbours and ferries are ordinary World context. Experimental `nautical-v1` tiles, aids, lights,
107
- soundings, hazards, reefs, and wrecks are deliberately absent from the official map and remain
108
- available only to explicitly configured laboratory maps. Soundings is reference cartography and is
109
- not a navigation product.
110
-
111
- `siegfried` is a self-contained terrain atlas based on the visual grammar documented for
112
- swisstopo's nineteenth-century Siegfried Map. It does not import or extend `streets`. The default
113
- `light` theme preserves black, brown, blue, and an ivory paper substrate; browser-derived contours
114
- replace modern hillshade and retain the 30-metre Alpine cadence at detailed zooms. Rock and scree
115
- are re-engraved in key ink after the contour deck, while dedicated SVG motifs distinguish forest,
116
- glacier, wetland, gravel, orchard, and water. Its coordinated `dark` theme is explicitly a nocturnal
117
- engraver's proof, not a historical facsimile: it keeps identical geometry and semantic ink roles on
118
- charcoal paper. `[siegfriedIcons]` owns nine light and nine dark pattern variants,
119
- `[siegfriedFonts]` owns the locally packaged Cormorant Garamond Regular, SemiBold, and Italic faces,
120
- and `[siegfriedThemes]` exposes the two complete visual vocabularies for safe derivation.
121
-
122
- `verdant` is a self-contained contemporary field-atlas design. It combines a park-map information
123
- hierarchy with a cool mineral substrate, clean blue hydrography, graphite buildings, and a
124
- trail-forward accent; its original botanical textures appear only where detailed zooms make them
125
- useful. It uses the same semantic compiler contract without importing or extending `streets`,
126
- declares its own Noto Sans glyph provider, and owns its complete icon and pattern set through
127
- `[verdantIcons]`.
128
-
129
- `sanFrancisto` is a self-contained dark architectural-blueprint design centered on San Francisco.
130
- Fine technical road strokes, survey-like uppercase labels, precise building footprints, contour
131
- dimensions, and dedicated landscape and water hatches replace naturalistic map color. It declares
132
- the canonical Noto Sans glyph provider and only `[sanFrancistoIcons]`, whose four original patterns
133
- and schematic POI node form its complete sprite vocabulary.
134
-
135
- `cyberpunk` is a self-contained dark HUD root. Its road hierarchy, building signals, destination
136
- beacons, semantic render passes, theme, World data selection, `[cyberpunkIcons]`, and
137
- `[cyberpunkFonts]` are all declared directly; it does not import or extend `streets`.
138
-
139
- `matrix` is a self-contained monochrome green-screen root. It explicitly owns its sparse HUD
140
- geometry, reviewed phosphor-green ramp, modules, semantic render passes, and theme. It
141
- omits a bright road centerline and building circuit texture, and uses compact square destination
142
- nodes through `[matrixIcons]`. A translucent scanline and dot pattern masks the cartographic
143
- linework so bright strokes break into the phosphor rows of an old CRT without baking that texture
144
- into the map data; text layers render afterwards and stay crisp. `[matrixFonts]` owns Matrix's
145
- packaged Oxanium faces for uppercase labels, independently of Cyberpunk's font provider.
146
-
147
- `streetsThemes.light` and `streetsThemes.dark` are complete appearance documents consumed by the
148
- same semantic module structure. Selecting `dark` changes colors, typography roles, image roles, and
149
- lighting without changing a source, filter, layer order, zoom gate, collision rule, or module. Both
150
- sidewalk patterns live in the shared `[streetsIcons]` atlas and the selected theme resolves the
151
- semantic `roads.sidewalkPattern` image token to the correct asset.
152
-
153
- Streets uses one ranked destination hierarchy in both themes. Major transit and cultural anchors
154
- appear first; lodging, health, education, services, shopping, food, coffee, and parking enter
155
- progressively as the camera approaches street level. Each visible destination is one collision
156
- unit made from a colored circular pictogram and an optional neutral name, so the marker remains
157
- useful when the label cannot fit. The pictogram scale grows gently from 1× at z12 to 1.06× at z17,
158
- giving detailed street views a little more visual presence without increasing POI density.
159
- Portal-number labels are intentionally disabled. The ten POI
160
- pictograms are adapted from the pinned CC0 Maki subset documented in
161
- `THIRD_PARTY_NOTICES.md`; their containers, colors, sizing, and composition are Tileflow-authored.
162
-
163
- Road references use a compact Tileflow-owned family of generic rectangular and circular shields.
164
- The data's normalized `shield_kind` selects neutral, blue, green, red, orange, yellow, or circular
165
- artwork; `shield_text_color` independently selects the light or dark theme token. Unknown and
166
- unsupported networks fall back to the neutral rectangle with dark text instead of guessing a
167
- country from the spelling of `ref`. Both themes retain the same signaling colors.
168
-
169
- Streets has separate shield phases for scale, not separate hand-authored network layers. Overview
170
- uses pre-deduplicated point candidates; detail switches to repeated line placement. Both the fitted
171
- plate and its complete route reference are viewport-aligned, so shields remain horizontal as the
172
- map rotates or pitches. The rectangular base plate is 20 by 14 pixels with a one-pixel outline;
173
- the circular neutral base is 14 by 14. Both use 9-pixel bold text and a small width-only fit
174
- allowance. Streets limits shields to the motorway-through-tertiary hierarchy; collision padding
175
- and the overview candidate schedule keep regional views legible while preserving useful repetition
176
- at street scale.
177
-
178
- The two palettes are Tileflow-owned, deterministic snapshots calibrated from rendered Mapbox
179
- Standard `default/day` and `default/night` references on 2026-08-27. They do not import Mapbox style
180
- JSON, rules, assets, or runtime dependencies. Public roles such as `surface.background`,
181
- `landuse.industrial`, `landuse.medical`, `labels.settlement`, `labels.neighborhood`, and
182
- `labels.road` remain independently wired; `hydro.ocean` also separates Standard Night's deep sea
183
- from urban and inland water. An agent can alter one cartographic intent without
184
- knowing or perturbing the physical layer topology. Because Standard is evergreen, later parity work
185
- must be an explicit dated recalibration rather than an implicit network-dependent change.
186
-
187
- At detailed zooms, the road-bearing official maps round-cap ordinary surface-road and bridge
188
- feature endpoints so adjacent vector segments overlap their antialiasing fringe instead of exposing
189
- hairline cuts. Tunnel portals retain butt caps; Streets, Cyberpunk, and Matrix also keep butt caps on
190
- steps and approaches carrying circular-road clearance so those structural ends do not protrude into
191
- the connected geometry. Streets pairs its blue/slate road decks with a darker casing that grows from
192
- 1 px at z15 to 2 px at z22; tunnel casings use the compact dashed rhythm of the calibrated reference.
193
-
194
- A theme is not a loose override cascade. Module styles explicitly reference roles such as
195
- `roads.motorway`, `labels.road`, and `hydro.water`; the selected complete theme resolves those
196
- references before MapLibre output is generated. Use `defaultTheme` for a deterministic default and
197
- `systemThemes` plus the runtime `theme="system"` selection when the browser should follow the OS.
198
-
199
- The directory descriptors point into this installed package. A map inherits its parent's icon or
200
- font list when the property is omitted. Declaring a list replaces the inherited list, a later
201
- directory wins for an exact duplicate ID, and `[]` selects no directories.
202
-
203
- `@tileflow/maps` has a peer dependency on `@tileflow/core`. Core owns the map language and compiler;
204
- this package owns the official map definitions, icon and pattern sources, Cyberpunk, Matrix, and
205
- Siegfried fonts, and their notices. Core never depends on this package.
105
+ Create `icons/` beside the config and add supported image files before building. Later directories
106
+ replace earlier files with the same exact icon ID. Fonts follow the same ordered-directory model;
107
+ `fonts` and `glyphs` are mutually exclusive providers.
108
+
109
+ ## Delivery and attribution
110
+
111
+ Use the CLI or a build integration to prepare a map's complete asset set. Copying Style JSON alone
112
+ can leave missing sprites, font files, or browser protocols. Keep the generated manifest and its
113
+ referenced files together.
114
+
115
+ Hosted deployment currently requires Tileflow World and rejects local/package font bundles before
116
+ uploading a style. Maps with packaged fonts therefore need self-hosted delivery or an explicitly
117
+ replaced, compatible public glyph provider. Check with `tileflow validate --target hosted` before
118
+ planning a hosted deployment.
119
+
120
+ Tileflow-owned designs and artwork use Apache-2.0. Historical inspiration does not mean the package
121
+ redistributes historical scans, source cartography, or data. Third-party fonts and the pinned Maki
122
+ icon subset retain their own terms. Preserve
123
+ [THIRD_PARTY_NOTICES.md](https://github.com/tileflow/tileflow-sdk/blob/main/packages/maps/THIRD_PARTY_NOTICES.md)
124
+ and the notices next to packaged assets. Map data and terrain services have separate attribution
125
+ and usage requirements.
126
+
127
+ See the [Core guide](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/README.md)
128
+ for inheritance and styling, or the
129
+ [public exports](https://github.com/tileflow/tileflow-sdk/blob/main/packages/maps/src/index.ts)
130
+ for exact names. The installed package's definitions and README take precedence over a newer `main`.
131
+
132
+ ## Design and asset reference
133
+
134
+ The [design and asset notes](https://github.com/tileflow/tileflow-sdk/blob/main/packages/maps/docs/design-and-assets.md) describe each map's visual grammar, source references, and third-party asset boundaries. They are also included under
135
+ `docs/` in the installed package.
@@ -9,7 +9,7 @@ Cyberpunk names the exact OpenType face `Oxanium Medium` for roads, water, and P
9
9
  `Oxanium SemiBold` for place labels. Its stacks contain only those package-owned faces: the local
10
10
  font pipeline selects the first face in each stack, so Cyberpunk does not declare unfixed system or
11
11
  remote fallbacks. Tileflow does not synthesize a face by combining a family with a weight. The
12
- style omits a remote glyph endpoint so MapLibre GL JS 5.24 rasterizes the packaged faces locally.
12
+ style omits a remote glyph endpoint so MapLibre GL JS rasterizes the packaged faces locally.
13
13
 
14
14
  - Upstream: <https://github.com/sevmeyer/oxanium>
15
15
  - Google Fonts specimen: <https://fonts.google.com/specimen/Oxanium>
@@ -9,7 +9,7 @@ Matrix names the exact OpenType face `Oxanium Medium` for roads, water, and POIs
9
9
  `Oxanium SemiBold` for place labels. Its stacks contain only those package-owned faces: the local
10
10
  font pipeline selects the first face in each stack, so Matrix does not declare unfixed system or
11
11
  remote fallbacks. Tileflow does not synthesize a face by combining a family with a weight. The
12
- style omits a remote glyph endpoint so MapLibre GL JS 5.24 rasterizes the packaged faces locally.
12
+ style omits a remote glyph endpoint so MapLibre GL JS rasterizes the packaged faces locally.
13
13
 
14
14
  - Upstream: <https://github.com/sevmeyer/oxanium>
15
15
  - Google Fonts specimen: <https://fonts.google.com/specimen/Oxanium>
@@ -0,0 +1,164 @@
1
+ # Map designs and assets
2
+
3
+ ## baedeker
4
+
5
+ `baedeker` is a self-contained travel-atlas and town-plan design with open warm paper, fine coral
6
+ building and residential hatching, paper-negative streets, dominant black railways, horizontally
7
+ engraved cyan water, ring-stippled gardens, and browser-derived Mapterhorn contours. Travel POIs
8
+ are rendered as compact serif labels without modern pictograms. It declares
9
+ `[baedekerIcons]`, whose eight original Tileflow SVG patterns describe hachures, orchards, paper
10
+ grain, public gardens, residential blocks, sand, water lines, and wetlands, plus
11
+ `[baedekerFonts]`, its own package copy of Cormorant Garamond Regular, SemiBold, and Italic. Its
12
+ visual grammar was informed by the
13
+ [Baedeker / Karl Wagner & Debes collection](https://www.antiquemapsandprints.com/collections/baedeker-karl-wagner-debes)
14
+ and Wikimedia Commons'
15
+ [maps by Karl Baedeker of Italy](https://commons.wikimedia.org/wiki/Category:Maps_by_Karl_Baedeker_of_Italy).
16
+ The package includes no historical scan, raster pixel, historical typeface, legend artwork,
17
+ geospatial data, or source map; the style and patterns are original Tileflow work. The packaged
18
+ Cormorant faces are unmodified upstream font software under the SIL Open Font License 1.1. No
19
+ Mapterhorn terrain tile is packaged or redistributed. Baedeker is an official Tileflow map and is
20
+ not affiliated with or endorsed by Baedeker or Wagner & Debes.
21
+
22
+ ## ferraris
23
+
24
+ `ferraris` is a self-contained printed-atlas design. It uses Core's semantic compiler, but
25
+ it does not import or extend the `streets` map and it does not inherit Streets assets. It declares
26
+ only `[ferrarisIcons]`, which contains nine original seamless SVG patterns for paper, cultivated
27
+ land, vegetation, settlements, sand, wetlands, and water. Applications can import it directly or
28
+ extend it like any other root.
29
+
30
+ ## harad
31
+
32
+ `harad` is a self-contained historical green-map design named “Härad”. It uses Core's semantic
33
+ compiler ABI without importing or extending the `streets` map or reusing any Streets asset.
34
+ It declares only `[haradIcons]`, whose nine original Tileflow SVG patterns describe arable land,
35
+ coniferous and deciduous woodland, orchards, paper grain, sand, settlements, water lines, and
36
+ wetlands. The visual grammar is inspired by Lantmäteriet's CC0 Häradsekonomiska kartan series
37
+ (1859–1934) and official legend. The package redistributes no Lantmäteriet scan, source pixel, legend
38
+ artwork, font, or map data; the shipped style and SVG patterns are original Tileflow work.
39
+
40
+ ## soundings
41
+
42
+ `soundings` is a self-contained bathymetric-chart design with ivory land, thirteen-stop
43
+ depth-graded water, labelled band edges, continuous colour relief, multidirectional seabed shading,
44
+ port context, named ferry routes, and restrained technical magenta. Its initial camera faces the
45
+ Strait of Gibraltar, allowing an Iberian GEBCO pilot to exercise both Atlantic and Mediterranean
46
+ relief. It selects the public semantic compiler contract without importing or extending `streets`
47
+ and explicitly composes World with `bathymetry({display: 'hybrid'})` while setting Nautical to
48
+ `false`.
49
+
50
+ Vector bands come from `tileflow-bathymetry`; continuous colour relief and hillshade come from
51
+ `tileflow-bathymetry-dem`. The stronger DEM treatment is balanced against the vector wash and depth
52
+ labels rather than against experimental navigation symbols. Dashed outlines remain an honest
53
+ fallback traced from broad GEBCO band polygons until native contour geometry is released. Labels
54
+ show the absolute `min_depth` value, not an inferred range or vessel-specific safety contour.
55
+ Harbours and ferries are ordinary World context. Experimental `nautical-v1` tiles, aids, lights,
56
+ soundings, hazards, reefs, and wrecks are deliberately absent from the official map and remain
57
+ available only to explicitly configured laboratory maps. Soundings is reference cartography and is
58
+ not a navigation product.
59
+
60
+ ## siegfried
61
+
62
+ `siegfried` is a self-contained terrain atlas based on the visual grammar documented for
63
+ swisstopo's nineteenth-century Siegfried Map. It does not import or extend `streets`. The default
64
+ `light` theme preserves black, brown, blue, and an ivory paper substrate; browser-derived contours
65
+ replace modern hillshade and retain the 30-metre Alpine cadence at detailed zooms. Rock and scree
66
+ are re-engraved in key ink after the contour deck, while dedicated SVG motifs distinguish forest,
67
+ glacier, wetland, gravel, orchard, and water. Its coordinated `dark` theme is explicitly a nocturnal
68
+ engraver's proof, not a historical facsimile: it keeps identical geometry and semantic ink roles on
69
+ charcoal paper. `[siegfriedIcons]` owns nine light and nine dark pattern variants,
70
+ `[siegfriedFonts]` owns the locally packaged Cormorant Garamond Regular, SemiBold, and Italic faces,
71
+ and `[siegfriedThemes]` exposes the two complete visual vocabularies for safe derivation.
72
+
73
+ ## verdant
74
+
75
+ `verdant` is a self-contained contemporary field-atlas design. It combines a park-map information
76
+ hierarchy with a cool mineral substrate, clean blue hydrography, graphite buildings, and a
77
+ trail-forward accent; its original botanical textures appear only where detailed zooms make them
78
+ useful. It uses the same semantic compiler contract without importing or extending `streets`,
79
+ declares its own Noto Sans glyph provider, and owns its complete icon and pattern set through
80
+ `[verdantIcons]`.
81
+
82
+ ## sanFrancisto
83
+
84
+ `sanFrancisto` is a self-contained dark architectural-blueprint design centered on San Francisco.
85
+ Fine technical road strokes, survey-like uppercase labels, precise building footprints, contour
86
+ dimensions, and dedicated landscape and water hatches replace naturalistic map color. It declares
87
+ the canonical Noto Sans glyph provider and only `[sanFrancistoIcons]`, whose four original patterns
88
+ and schematic POI node form its complete sprite vocabulary.
89
+
90
+ ## cyberpunk
91
+
92
+ `cyberpunk` is a self-contained dark HUD root. Its road hierarchy, building signals, destination
93
+ beacons, semantic render passes, theme, World data selection, `[cyberpunkIcons]`, and
94
+ `[cyberpunkFonts]` are all declared directly; it does not import or extend `streets`.
95
+
96
+ ## matrix
97
+
98
+ `matrix` is a self-contained monochrome green-screen root. It explicitly owns its sparse HUD
99
+ geometry, reviewed phosphor-green ramp, modules, semantic render passes, and theme. It
100
+ omits a bright road centerline and building circuit texture, and uses compact square destination
101
+ nodes through `[matrixIcons]`. A translucent scanline and dot pattern masks the cartographic
102
+ linework so bright strokes break into the phosphor rows of an old CRT without baking that texture
103
+ into the map data; text layers render afterwards and stay crisp. `[matrixFonts]` owns Matrix's
104
+ packaged Oxanium faces for uppercase labels, independently of Cyberpunk's font provider.
105
+
106
+ `streetsThemes.light` and `streetsThemes.dark` are complete appearance documents consumed by the
107
+ same semantic module structure. Selecting `dark` changes colors, typography roles, image roles, and
108
+ lighting without changing a source, filter, layer order, zoom gate, collision rule, or module. Both
109
+ sidewalk patterns live in the shared `[streetsIcons]` atlas and the selected theme resolves the
110
+ semantic `roads.sidewalkPattern` image token to the correct asset.
111
+
112
+ Streets uses one ranked destination hierarchy in both themes. Major transit and cultural anchors
113
+ appear first; lodging, health, education, services, shopping, food, coffee, and parking enter
114
+ progressively as the camera approaches street level. Each visible destination is one collision
115
+ unit made from a colored circular pictogram and an optional neutral name, so the marker remains
116
+ useful when the label cannot fit. The pictogram scale grows gently from 1× at z12 to 1.06× at z17,
117
+ giving detailed street views a little more visual presence without increasing POI density.
118
+ Portal-number labels are intentionally disabled. The ten POI
119
+ pictograms are adapted from the pinned CC0 Maki subset documented in
120
+ `THIRD_PARTY_NOTICES.md`; their containers, colors, sizing, and composition are Tileflow-authored.
121
+
122
+ Road references use a compact Tileflow-owned family of generic rectangular and circular shields.
123
+ The data's normalized `shield_kind` selects neutral, blue, green, red, orange, yellow, or circular
124
+ artwork; `shield_text_color` independently selects the light or dark theme token. Unknown and
125
+ unsupported networks fall back to the neutral rectangle with dark text instead of guessing a
126
+ country from the spelling of `ref`. Both themes retain the same signaling colors.
127
+
128
+ Streets has separate shield phases for scale, not separate hand-authored network layers. Overview
129
+ uses pre-deduplicated point candidates; detail switches to repeated line placement. Both the fitted
130
+ plate and its complete route reference are viewport-aligned, so shields remain horizontal as the
131
+ map rotates or pitches. The rectangular base plate is 20 by 14 pixels with a one-pixel outline;
132
+ the circular neutral base is 14 by 14. Both use 9-pixel bold text and a small width-only fit
133
+ allowance. Streets limits shields to the motorway-through-tertiary hierarchy; collision padding
134
+ and the overview candidate schedule keep regional views legible while preserving useful repetition
135
+ at street scale.
136
+
137
+ The two palettes are Tileflow-owned, deterministic snapshots calibrated from rendered Mapbox
138
+ Standard `default/day` and `default/night` references on 2026-08-27. They do not import Mapbox style
139
+ JSON, rules, assets, or runtime dependencies. Public roles such as `surface.background`,
140
+ `landuse.industrial`, `landuse.medical`, `labels.settlement`, `labels.neighborhood`, and
141
+ `labels.road` remain independently wired; `hydro.ocean` also separates Standard Night's deep sea
142
+ from urban and inland water. An agent can alter one cartographic intent without
143
+ knowing or perturbing the physical layer topology. Because Standard is evergreen, later parity work
144
+ must be an explicit dated recalibration rather than an implicit network-dependent change.
145
+
146
+ At detailed zooms, the road-bearing official maps round-cap ordinary surface-road and bridge
147
+ feature endpoints so adjacent vector segments overlap their antialiasing fringe instead of exposing
148
+ hairline cuts. Tunnel portals retain butt caps; Streets, Cyberpunk, and Matrix also keep butt caps on
149
+ steps and approaches carrying circular-road clearance so those structural ends do not protrude into
150
+ the connected geometry. Streets pairs its blue/slate road decks with a darker casing that grows from
151
+ 1 px at z15 to 2 px at z22; tunnel casings use the compact dashed rhythm of the calibrated reference.
152
+
153
+ A theme is not a loose override cascade. Module styles explicitly reference roles such as
154
+ `roads.motorway`, `labels.road`, and `hydro.water`; the selected complete theme resolves those
155
+ references before MapLibre output is generated. Use `defaultTheme` for a deterministic default and
156
+ `systemThemes` plus the runtime `theme="system"` selection when the browser should follow the OS.
157
+
158
+ The directory descriptors point into this installed package. A map inherits its parent's icon or
159
+ font list when the property is omitted. Declaring a list replaces the inherited list, a later
160
+ directory wins for an exact duplicate ID, and `[]` selects no directories.
161
+
162
+ `@tileflow/maps` has a peer dependency on `@tileflow/core`. Core owns the map language and compiler;
163
+ this package owns the official map definitions, icon and pattern sources, Cyberpunk, Matrix, and
164
+ Siegfried fonts, and their notices. Core never depends on this package.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tileflow/maps",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.4",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Official themed Streets, Baedeker, Ferraris, Härad, Siegfried, Cyberpunk, Matrix, Verdant, Soundings, and San Francisto maps for Tileflow.",
6
6
  "type": "module",
@@ -40,6 +40,7 @@
40
40
  "types": "./dist/index.d.ts",
41
41
  "files": [
42
42
  "assets",
43
+ "docs",
43
44
  "dist",
44
45
  "THIRD_PARTY_NOTICES.md",
45
46
  "LICENSE"
@@ -56,11 +57,12 @@
56
57
  "access": "public"
57
58
  },
58
59
  "peerDependencies": {
59
- "@tileflow/core": ">=0.1.0-alpha.24 <0.1.0-beta.0"
60
+ "@tileflow/core": ">=0.1.0-alpha.25 <0.1.0-beta.0"
60
61
  },
61
62
  "devDependencies": {
62
63
  "@maplibre/maplibre-gl-style-spec": "24.8.5",
63
- "@tileflow/core": "0.1.0-alpha.24"
64
+ "@maplibre/maplibre-gl-style-spec-v6": "npm:@maplibre/maplibre-gl-style-spec@26.4.2",
65
+ "@tileflow/core": "0.1.0-alpha.25"
64
66
  },
65
67
  "scripts": {
66
68
  "build": "tsup src/index.ts --format esm --dts --clean --no-splitting",