@tileflow/maps 0.1.0-alpha.13 → 0.1.0-alpha.14

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 (31) hide show
  1. package/README.md +38 -38
  2. package/THIRD_PARTY_NOTICES.md +10 -0
  3. package/assets/streets/build-trees.mjs +163 -35
  4. package/assets/streets/fonts/DINish-Bold.ttf +0 -0
  5. package/assets/streets/fonts/DINish-Medium.ttf +0 -0
  6. package/assets/streets/fonts/LICENSE-DINish.txt +93 -0
  7. package/assets/streets/fonts/LICENSE-NotoSans.txt +94 -0
  8. package/assets/streets/fonts/LICENSE.txt +193 -0
  9. package/assets/streets/fonts/NotoSans-Bold.ttf +0 -0
  10. package/assets/streets/fonts/NotoSans-Italic.ttf +0 -0
  11. package/assets/streets/fonts/NotoSans-Regular.ttf +0 -0
  12. package/assets/streets/fonts/README.md +18 -0
  13. package/assets/streets/icons/streets-tree-conifer-dark.pattern.svg +200 -54
  14. package/assets/streets/icons/streets-tree-conifer.pattern.svg +200 -54
  15. package/assets/streets/icons/streets-tree-open-dark.pattern.svg +200 -105
  16. package/assets/streets/icons/streets-tree-open.pattern.svg +200 -105
  17. package/assets/streets/icons/streets-tree-round-dark.pattern.svg +158 -105
  18. package/assets/streets/icons/streets-tree-round.pattern.svg +158 -105
  19. package/assets/streets/icons/streets-tree-tall-dark.pattern.svg +156 -105
  20. package/assets/streets/icons/streets-tree-tall.pattern.svg +156 -105
  21. package/assets/streets/models/streets-tree-conifer.far.glb +0 -0
  22. package/assets/streets/models/streets-tree-conifer.glb +0 -0
  23. package/assets/streets/models/streets-tree-open.far.glb +0 -0
  24. package/assets/streets/models/streets-tree-open.glb +0 -0
  25. package/assets/streets/models/streets-tree-round.far.glb +0 -0
  26. package/assets/streets/models/streets-tree-round.glb +0 -0
  27. package/assets/streets/models/streets-tree-tall.far.glb +0 -0
  28. package/assets/streets/models/streets-tree-tall.glb +0 -0
  29. package/dist/index.d.ts +12 -6
  30. package/dist/index.js +92 -42
  31. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ function packageDirectory(path) {
25
25
  return Object.freeze({ kind: "package-directory", package: "@tileflow/maps", path });
26
26
  }
27
27
  var streetsIcons = packageDirectory("assets/streets/icons");
28
+ var streetsFonts = packageDirectory("assets/streets/fonts");
28
29
  var streetsModels = packageDirectory("assets/streets/models");
29
30
  var map1777Fonts = packageDirectory("assets/map-1777/fonts");
30
31
  var map1777Icons = packageDirectory("assets/map-1777/icons");
@@ -10312,7 +10313,7 @@ var streetsSurfaceProfiles = {
10312
10313
 
10313
10314
  // src/official/streets-tree-colors.ts
10314
10315
  var streetsTreeProfiles = {
10315
- "default-day": { bark: "#C3D3B1", crown: "#96C498" },
10316
+ "default-day": { bark: "#C3D3B1", crown: "#A4CFA5" },
10316
10317
  "default-dawn": { bark: "#BCBC94", crown: "#97B37F" },
10317
10318
  "default-dusk": { bark: "#564B43", crown: "#3D4538" },
10318
10319
  "default-night": { bark: "#0E1D28", crown: "#0E1D24" },
@@ -10328,6 +10329,7 @@ var streetsTreeProfiles = {
10328
10329
 
10329
10330
  // src/official/streets-themes.ts
10330
10331
  var streetsLightColors = {
10332
+ "labels.address": "#808080",
10331
10333
  "boundaries.admin": "#CE9298",
10332
10334
  "boundaries.default": "#CE9298",
10333
10335
  "boundaries.disputed": "#CE9298",
@@ -10486,15 +10488,16 @@ var streetsLightColors = {
10486
10488
  "terrain.hillshade.shadow": "#727B64",
10487
10489
  "transit.primary": "#5C74D6",
10488
10490
  "vegetation.tree.bark": "#918878",
10489
- "vegetation.tree.broadleaf.a": "#83AD83",
10491
+ "vegetation.tree.broadleaf.a": "#77AA88",
10490
10492
  "vegetation.tree.broadleaf.b": "#91BA8D",
10491
- "vegetation.tree.broadleaf.c": "#A1C99B",
10492
- "vegetation.tree.broadleaf.d": "#AFD4A7",
10493
+ "vegetation.tree.broadleaf.c": "#A6C682",
10494
+ "vegetation.tree.broadleaf.d": "#AECFA2",
10493
10495
  "vegetation.tree.conifer.a": "#729B78",
10494
10496
  "vegetation.tree.conifer.b": "#81A880",
10495
10497
  "vegetation.tree.conifer.c": "#91B68B"
10496
10498
  };
10497
10499
  var streetsDarkColors = {
10500
+ "labels.address": "#808080",
10498
10501
  "boundaries.admin": "#9A6177",
10499
10502
  "boundaries.default": "#9A6177",
10500
10503
  "boundaries.disputed": "#9A6177",
@@ -10802,10 +10805,10 @@ function streetsLightingNumbers(preset, colorTheme) {
10802
10805
  ...streetsSkyTokens(preset, colorTheme).numbers
10803
10806
  };
10804
10807
  }
10805
- var streetsFonts = {
10806
- // DIN Pro Medium has much lighter strokes than Noto Sans Bold. Of the
10807
- // hosted Noto faces, Regular is the closer match for navigation and POIs.
10808
+ var streetsFonts2 = {
10808
10809
  default: "Noto Sans Regular",
10810
+ navigation: "DINish Medium",
10811
+ shield: "DINish Bold",
10809
10812
  places: "Noto Sans Bold",
10810
10813
  regular: "Noto Sans Regular",
10811
10814
  water: "Noto Sans Italic"
@@ -10835,7 +10838,7 @@ var streetsLightTheme = defineTheme3({
10835
10838
  tokens: {
10836
10839
  color: streetsPaletteColors("day", "default"),
10837
10840
  number: streetsLightingNumbers("day", "default"),
10838
- font: streetsFonts,
10841
+ font: streetsFonts2,
10839
10842
  image: { ...streetsImages, ...streetsPoiImageTokens("light") }
10840
10843
  },
10841
10844
  typography: {
@@ -10861,7 +10864,7 @@ var streetsDarkTheme = defineTheme3({
10861
10864
  tokens: {
10862
10865
  color: streetsPaletteColors("night", "default"),
10863
10866
  number: streetsLightingNumbers("night", "default"),
10864
- font: streetsFonts,
10867
+ font: streetsFonts2,
10865
10868
  image: {
10866
10869
  ...streetsImages,
10867
10870
  ...streetsPoiImageTokens("dark"),
@@ -10948,6 +10951,7 @@ var streetsVisual = {
10948
10951
  waterway: token7.color("hydro.waterway")
10949
10952
  },
10950
10953
  label: {
10954
+ address: token7.color("labels.address"),
10951
10955
  aerodrome: token7.color("labels.aerodrome"),
10952
10956
  country: token7.color("labels.country"),
10953
10957
  ferry: token7.color("labels.ferry"),
@@ -11101,6 +11105,8 @@ var streetsVisual = {
11101
11105
  },
11102
11106
  font: {
11103
11107
  default: token7.font("default"),
11108
+ navigation: token7.font("navigation"),
11109
+ shield: token7.font("shield"),
11104
11110
  places: token7.font("places"),
11105
11111
  regular: token7.font("regular"),
11106
11112
  water: token7.font("water")
@@ -11306,12 +11312,14 @@ var streetsTrees = withRenderStack9(
11306
11312
  hedgeColors: [token8.color("landcover.hedgeShade"), token8.color("landcover.hedge")],
11307
11313
  crownScale: 1,
11308
11314
  heightScale: 1,
11309
- finish: "faceted",
11315
+ minimumHeight: 8,
11316
+ materialVariation: 1,
11317
+ finish: "smooth",
11310
11318
  edges: 0,
11311
11319
  forms: {
11312
- round: { models: ["streets-tree-round"] },
11320
+ round: { models: ["streets-tree-round", "streets-tree-open"] },
11313
11321
  open: { models: ["streets-tree-open"] },
11314
- tall: { models: ["streets-tree-tall"] },
11322
+ tall: { models: ["streets-tree-tall", "streets-tree-open"] },
11315
11323
  conifer: { models: ["streets-tree-conifer"] },
11316
11324
  columnar: { models: ["streets-tree-columnar"] },
11317
11325
  palm: { models: ["streets-tree-palm-feather", "streets-tree-palm-fan"] }
@@ -11484,7 +11492,8 @@ function streetsPoiStyle(category) {
11484
11492
  size: 1
11485
11493
  },
11486
11494
  text: {
11487
- font: streetsVisual.font.default,
11495
+ font: streetsVisual.font.navigation,
11496
+ fallbacks: [streetsVisual.font.regular],
11488
11497
  haloWidth: 1,
11489
11498
  haloBlur: 0,
11490
11499
  letterSpacing: 0.01,
@@ -12058,7 +12067,8 @@ function streetsBuildingRenderStack() {
12058
12067
  }
12059
12068
  }),
12060
12069
  extrusion: renderPass10({
12061
- placement: { above: "buildings.flat.outline" },
12070
+ // Keep raised geometry after the ground names, which already cover flat footprints.
12071
+ placement: "above-buildings",
12062
12072
  feature: "building",
12063
12073
  renderer: "extrusion",
12064
12074
  selector: visibleBuilding3dSelector,
@@ -12537,17 +12547,44 @@ function roadLabelStyle(kind, minZoom) {
12537
12547
  return {
12538
12548
  placement: "line",
12539
12549
  minZoom,
12540
- priority: major ? 90 : 50,
12541
- spacing: 250,
12550
+ // Resolve dense parallel streets by road hierarchy, not incidental tile order.
12551
+ // All classes share this expression so the compiler retains one collision network.
12552
+ priority: expr12.match(
12553
+ expr12.coalesce(expr12.get(field11("class")), "minor"),
12554
+ [
12555
+ { labels: ["motorway", "motorway_construction"], value: 6 },
12556
+ { labels: ["trunk", "trunk_construction"], value: 5 },
12557
+ { labels: ["primary", "primary_construction"], value: 4 },
12558
+ { labels: ["secondary", "secondary_construction"], value: 3 },
12559
+ { labels: ["tertiary", "tertiary_construction"], value: 2 },
12560
+ { labels: ["minor", "minor_construction"], value: 1 }
12561
+ ],
12562
+ 0
12563
+ ),
12564
+ // World name geometry is split into more short segments at street detail.
12565
+ // Increase repeat distance gently without thinning the overview network.
12566
+ spacing: zoom10.linear([
12567
+ [13, 250],
12568
+ [15, 300],
12569
+ [17, 400],
12570
+ [19, 450]
12571
+ ]),
12542
12572
  text: {
12543
12573
  color: streetsVisual.label.road,
12544
- font: streetsVisual.font.default,
12574
+ font: streetsVisual.font.navigation,
12575
+ fallbacks: [streetsVisual.font.regular],
12545
12576
  haloColor: streetsVisual.label.roadHalo,
12546
12577
  haloWidth: 1,
12547
12578
  letterSpacing: path || pedestrian ? 0.01 : 0.15,
12548
12579
  maxAngle: 30,
12549
- padding: 1,
12550
- pitchAlignment: "map",
12580
+ // Screen-space breathing room at city overview. Restore normal padding by z14
12581
+ // so the same policy does not suppress useful names on the neighbourhood view.
12582
+ padding: zoom10.linear([
12583
+ [13, 5],
12584
+ [14, 1]
12585
+ ]),
12586
+ // Follow the road's bearing while retaining readable glyph height in perspective.
12587
+ pitchAlignment: "viewport",
12551
12588
  rotationAlignment: "map",
12552
12589
  size: zoom10.linear([
12553
12590
  [10, startSize],
@@ -12562,11 +12599,7 @@ var streets = bindOfficialMapTheme(
12562
12599
  id: "streets",
12563
12600
  version: 1,
12564
12601
  name: "Streets",
12565
- glyphs: {
12566
- kind: "url",
12567
- url: "https://api.tileflow.dev/base/33d4de5e8086d9d629d67d3f39fedb87e23686c4c1ac653c27e2a52aee9d00b3/glyphs/{fontstack}/{range}.pbf",
12568
- fontStacks: ["Noto Sans Regular", "Noto Sans Bold", "Noto Sans Italic"]
12569
- },
12602
+ fonts: [streetsFonts],
12570
12603
  themes: streetsThemes,
12571
12604
  timeOfDay: {
12572
12605
  light: { day: "light", dawn: "dawn", dusk: "dusk", night: "dark" },
@@ -12621,14 +12654,14 @@ var streets = bindOfficialMapTheme(
12621
12654
  // Optional keys: addresses, aeroways, boundaries, buildings, labels, land,
12622
12655
  // landforms, poi, roads, transit, vegetation, water. Object order never
12623
12656
  // controls layer order.
12624
- // Streets deliberately omits parcel-level house numbers. POI and road/place
12625
- // labels carry the useful navigation hierarchy without close-zoom numeric noise.
12657
+ // House numbers arrive at close zooms and yield in the distance when tilted.
12626
12658
  addresses: addresses4({
12627
12659
  labels: {
12628
12660
  minZoom: 17,
12629
12661
  text: {
12630
- font: streetsVisual.font.default,
12631
- color: streetsVisual.label.muted,
12662
+ font: streetsVisual.font.navigation,
12663
+ fallbacks: [streetsVisual.font.regular],
12664
+ color: streetsVisual.label.address,
12632
12665
  haloColor: streetsVisual.label.placeHalo,
12633
12666
  haloWidth: 1,
12634
12667
  maxWidth: 10,
@@ -13471,10 +13504,14 @@ var streets = bindOfficialMapTheme(
13471
13504
  // 'auto' | 'local' | 'en' | another language field suffix.
13472
13505
  places: "all",
13473
13506
  // 'none' | 'major' | 'all'.
13507
+ // Street names yield to foreground destinations and are hidden by 3D buildings.
13508
+ // Their viewport-aligned lettering stays readable at an oblique camera angle.
13474
13509
  roadPlacement: "ground",
13510
+ roadNameFormat: "compact",
13511
+ roadGrouping: "network",
13475
13512
  roads: "all",
13476
13513
  // Preserve Streets' selection while Core owns class aliases, language
13477
- // fallback, ground placement and collision ordering.
13514
+ // fallback and collision ordering.
13478
13515
  roadClasses: [
13479
13516
  "motorway",
13480
13517
  "trunk",
@@ -13483,6 +13520,7 @@ var streets = bindOfficialMapTheme(
13483
13520
  "tertiary",
13484
13521
  "minor",
13485
13522
  "service",
13523
+ "track",
13486
13524
  "pathway",
13487
13525
  "footway",
13488
13526
  "cycleway",
@@ -13504,6 +13542,7 @@ var streets = bindOfficialMapTheme(
13504
13542
  tertiary: roadLabelStyle("major", 13),
13505
13543
  minor: roadLabelStyle("street", 13),
13506
13544
  service: roadLabelStyle("service", 15),
13545
+ track: roadLabelStyle("service", 15),
13507
13546
  pathway: roadLabelStyle("path", 15),
13508
13547
  footway: roadLabelStyle("path", 15),
13509
13548
  cycleway: roadLabelStyle("path", 15),
@@ -13847,10 +13886,11 @@ var streets = bindOfficialMapTheme(
13847
13886
  placement: "point",
13848
13887
  text: {
13849
13888
  color: streetsVisual.label.road,
13850
- font: streetsVisual.font.places,
13889
+ font: streetsVisual.font.shield,
13890
+ fallbacks: [streetsVisual.font.regular],
13851
13891
  haloColor: streetsDetailPalette.halo,
13852
13892
  haloWidth: 1,
13853
- size: 10
13893
+ size: 9
13854
13894
  }
13855
13895
  },
13856
13896
  shields: {
@@ -13868,7 +13908,8 @@ var streets = bindOfficialMapTheme(
13868
13908
  },
13869
13909
  text: {
13870
13910
  color: streetsVisual.label.shieldDark,
13871
- font: streetsVisual.font.places,
13911
+ font: streetsVisual.font.shield,
13912
+ fallbacks: [streetsVisual.font.regular],
13872
13913
  haloWidth: 0,
13873
13914
  letterSpacing: 0.05,
13874
13915
  maxAngle: 38,
@@ -13876,7 +13917,7 @@ var streets = bindOfficialMapTheme(
13876
13917
  padding: 2,
13877
13918
  pitchAlignment: "viewport",
13878
13919
  rotationAlignment: "viewport",
13879
- size: 10
13920
+ size: 9
13880
13921
  }
13881
13922
  },
13882
13923
  overview: {
@@ -13884,10 +13925,12 @@ var streets = bindOfficialMapTheme(
13884
13925
  minZoom: 6
13885
13926
  },
13886
13927
  detail: {
13887
- // Core switches to line placement at street scale while retaining viewport
13888
- // alignment, so each route reference remains horizontal during navigation.
13928
+ // World splits route lines more often than the reference source. A shorter
13929
+ // interval keeps route references available in regional views; collision
13930
+ // still suppresses adjacent shields, and street-scale repetition stays sparse.
13889
13931
  spacing: zoom10.linear([
13890
- [11, 400],
13932
+ [11, 220],
13933
+ [13, 300],
13891
13934
  [14, 600]
13892
13935
  ])
13893
13936
  },
@@ -14003,9 +14046,8 @@ var streets = bindOfficialMapTheme(
14003
14046
  streetsLabelRenderStack()
14004
14047
  ),
14005
14048
  poi: poi4({
14006
- // World owns taxonomy, zoom eligibility, density ranks and importance. Streets
14007
- // shows every category at one density and places them all in World's importance
14008
- // order, so collision keeps the most relevant places whatever their category.
14049
+ // Keep World's importance order while reserving room for navigation and landmarks.
14050
+ // Everyday businesses enter progressively; tilted views also limit distant labels.
14009
14051
  categories: [
14010
14052
  "transport",
14011
14053
  "food-drink",
@@ -14025,7 +14067,14 @@ var streets = bindOfficialMapTheme(
14025
14067
  // A uniform grey treatment suppresses a meaningful amount of chroma
14026
14068
  // and makes the whole light map read as if a pale overlay sat above it.
14027
14069
  color: "category",
14028
- density: 3,
14070
+ density: 2,
14071
+ detailZoom: 18,
14072
+ densityByCategory: {
14073
+ lodging: 1,
14074
+ "park-nature": 3,
14075
+ religion: 1,
14076
+ transport: 3
14077
+ },
14029
14078
  icons: true,
14030
14079
  labels: true,
14031
14080
  placement: {
@@ -14034,8 +14083,8 @@ var streets = bindOfficialMapTheme(
14034
14083
  coupleIconAndLabel: true,
14035
14084
  iconPadding: 3,
14036
14085
  order: "importance",
14037
- // Street and place names outrank everyday destinations ('navigation' labels), but
14038
- // not the places that make a city recognisable: World's two most important ranks.
14086
+ // Landmarks retain their priority. Ground street names yield to destinations;
14087
+ // the navigation policy keeps the city and district hierarchy above them.
14039
14088
  prominentRank: 1,
14040
14089
  textPadding: 3
14041
14090
  },
@@ -14090,6 +14139,7 @@ export {
14090
14139
  soundings2 as soundings,
14091
14140
  soundingsIcons,
14092
14141
  streets2 as streets,
14142
+ streetsFonts,
14093
14143
  streetsIcons,
14094
14144
  streetsModels,
14095
14145
  streetsThemes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tileflow/maps",
3
- "version": "0.1.0-alpha.13",
3
+ "version": "0.1.0-alpha.14",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Official themed Streets, Baedeker, Cívica, 1777, Siegfried, Soundings, and Blueprint maps for Tileflow.",
6
6
  "type": "module",
@@ -52,12 +52,12 @@
52
52
  "access": "public"
53
53
  },
54
54
  "peerDependencies": {
55
- "@tileflow/core": ">=0.1.0-alpha.39 <0.1.0-beta.0"
55
+ "@tileflow/core": ">=0.1.0-alpha.40 <0.1.0-beta.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@maplibre/maplibre-gl-style-spec": "24.8.5",
59
59
  "@maplibre/maplibre-gl-style-spec-v6": "npm:@maplibre/maplibre-gl-style-spec@26.4.4",
60
- "@tileflow/core": "0.1.0-alpha.39"
60
+ "@tileflow/core": "0.1.0-alpha.40"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "tsup src/index.ts --format esm --dts --clean --no-splitting",