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

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 +107 -44
  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",
@@ -10783,9 +10786,16 @@ function calibratedStreetsColors(preset, theme) {
10783
10786
  return { ...colors, "roads.detail.casing": roadCasings.hd };
10784
10787
  }
10785
10788
  function streetsPaletteColors(preset, colorTheme) {
10786
- return {
10789
+ const palette = {
10787
10790
  ...calibratedStreetsColors(preset, colorTheme),
10788
- ...streetsCartographyColors(colorTheme, preset),
10791
+ ...streetsCartographyColors(colorTheme, preset)
10792
+ };
10793
+ return {
10794
+ ...palette,
10795
+ // The parts building models name water, vegetation and wood take the map's water and trees.
10796
+ "buildings.modelWater": palette["hydro.water"],
10797
+ "buildings.modelVegetation": palette["vegetation.tree.broadleaf.b"],
10798
+ "buildings.modelWood": palette["vegetation.tree.bark"],
10789
10799
  "buildings.floodLight": !isDarkStreetsPreset(preset) ? "#FFFFFF" : colorTheme === "monochrome" ? "#E5E5E5" : colorTheme === "faded" ? "#F8E4C4" : "#F5CFA8",
10790
10800
  ...streetsModelLighting(preset, colorTheme).colors,
10791
10801
  ...streetsSkyTokens(preset, colorTheme).colors
@@ -10802,10 +10812,10 @@ function streetsLightingNumbers(preset, colorTheme) {
10802
10812
  ...streetsSkyTokens(preset, colorTheme).numbers
10803
10813
  };
10804
10814
  }
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.
10815
+ var streetsFonts2 = {
10808
10816
  default: "Noto Sans Regular",
10817
+ navigation: "DINish Medium",
10818
+ shield: "DINish Bold",
10809
10819
  places: "Noto Sans Bold",
10810
10820
  regular: "Noto Sans Regular",
10811
10821
  water: "Noto Sans Italic"
@@ -10835,7 +10845,7 @@ var streetsLightTheme = defineTheme3({
10835
10845
  tokens: {
10836
10846
  color: streetsPaletteColors("day", "default"),
10837
10847
  number: streetsLightingNumbers("day", "default"),
10838
- font: streetsFonts,
10848
+ font: streetsFonts2,
10839
10849
  image: { ...streetsImages, ...streetsPoiImageTokens("light") }
10840
10850
  },
10841
10851
  typography: {
@@ -10861,7 +10871,7 @@ var streetsDarkTheme = defineTheme3({
10861
10871
  tokens: {
10862
10872
  color: streetsPaletteColors("night", "default"),
10863
10873
  number: streetsLightingNumbers("night", "default"),
10864
- font: streetsFonts,
10874
+ font: streetsFonts2,
10865
10875
  image: {
10866
10876
  ...streetsImages,
10867
10877
  ...streetsPoiImageTokens("dark"),
@@ -10948,6 +10958,7 @@ var streetsVisual = {
10948
10958
  waterway: token7.color("hydro.waterway")
10949
10959
  },
10950
10960
  label: {
10961
+ address: token7.color("labels.address"),
10951
10962
  aerodrome: token7.color("labels.aerodrome"),
10952
10963
  country: token7.color("labels.country"),
10953
10964
  ferry: token7.color("labels.ferry"),
@@ -11101,6 +11112,8 @@ var streetsVisual = {
11101
11112
  },
11102
11113
  font: {
11103
11114
  default: token7.font("default"),
11115
+ navigation: token7.font("navigation"),
11116
+ shield: token7.font("shield"),
11104
11117
  places: token7.font("places"),
11105
11118
  regular: token7.font("regular"),
11106
11119
  water: token7.font("water")
@@ -11306,12 +11319,14 @@ var streetsTrees = withRenderStack9(
11306
11319
  hedgeColors: [token8.color("landcover.hedgeShade"), token8.color("landcover.hedge")],
11307
11320
  crownScale: 1,
11308
11321
  heightScale: 1,
11309
- finish: "faceted",
11322
+ minimumHeight: 8,
11323
+ materialVariation: 1,
11324
+ finish: "smooth",
11310
11325
  edges: 0,
11311
11326
  forms: {
11312
- round: { models: ["streets-tree-round"] },
11327
+ round: { models: ["streets-tree-round", "streets-tree-open"] },
11313
11328
  open: { models: ["streets-tree-open"] },
11314
- tall: { models: ["streets-tree-tall"] },
11329
+ tall: { models: ["streets-tree-tall", "streets-tree-open"] },
11315
11330
  conifer: { models: ["streets-tree-conifer"] },
11316
11331
  columnar: { models: ["streets-tree-columnar"] },
11317
11332
  palm: { models: ["streets-tree-palm-feather", "streets-tree-palm-fan"] }
@@ -11484,7 +11499,8 @@ function streetsPoiStyle(category) {
11484
11499
  size: 1
11485
11500
  },
11486
11501
  text: {
11487
- font: streetsVisual.font.default,
11502
+ font: streetsVisual.font.navigation,
11503
+ fallbacks: [streetsVisual.font.regular],
11488
11504
  haloWidth: 1,
11489
11505
  haloBlur: 0,
11490
11506
  letterSpacing: 0.01,
@@ -12058,7 +12074,8 @@ function streetsBuildingRenderStack() {
12058
12074
  }
12059
12075
  }),
12060
12076
  extrusion: renderPass10({
12061
- placement: { above: "buildings.flat.outline" },
12077
+ // Keep raised geometry after the ground names, which already cover flat footprints.
12078
+ placement: "above-buildings",
12062
12079
  feature: "building",
12063
12080
  renderer: "extrusion",
12064
12081
  selector: visibleBuilding3dSelector,
@@ -12537,17 +12554,44 @@ function roadLabelStyle(kind, minZoom) {
12537
12554
  return {
12538
12555
  placement: "line",
12539
12556
  minZoom,
12540
- priority: major ? 90 : 50,
12541
- spacing: 250,
12557
+ // Resolve dense parallel streets by road hierarchy, not incidental tile order.
12558
+ // All classes share this expression so the compiler retains one collision network.
12559
+ priority: expr12.match(
12560
+ expr12.coalesce(expr12.get(field11("class")), "minor"),
12561
+ [
12562
+ { labels: ["motorway", "motorway_construction"], value: 6 },
12563
+ { labels: ["trunk", "trunk_construction"], value: 5 },
12564
+ { labels: ["primary", "primary_construction"], value: 4 },
12565
+ { labels: ["secondary", "secondary_construction"], value: 3 },
12566
+ { labels: ["tertiary", "tertiary_construction"], value: 2 },
12567
+ { labels: ["minor", "minor_construction"], value: 1 }
12568
+ ],
12569
+ 0
12570
+ ),
12571
+ // World name geometry is split into more short segments at street detail.
12572
+ // Increase repeat distance gently without thinning the overview network.
12573
+ spacing: zoom10.linear([
12574
+ [13, 250],
12575
+ [15, 300],
12576
+ [17, 400],
12577
+ [19, 450]
12578
+ ]),
12542
12579
  text: {
12543
12580
  color: streetsVisual.label.road,
12544
- font: streetsVisual.font.default,
12581
+ font: streetsVisual.font.navigation,
12582
+ fallbacks: [streetsVisual.font.regular],
12545
12583
  haloColor: streetsVisual.label.roadHalo,
12546
12584
  haloWidth: 1,
12547
12585
  letterSpacing: path || pedestrian ? 0.01 : 0.15,
12548
12586
  maxAngle: 30,
12549
- padding: 1,
12550
- pitchAlignment: "map",
12587
+ // Screen-space breathing room at city overview. Restore normal padding by z14
12588
+ // so the same policy does not suppress useful names on the neighbourhood view.
12589
+ padding: zoom10.linear([
12590
+ [13, 5],
12591
+ [14, 1]
12592
+ ]),
12593
+ // Follow the road's bearing while retaining readable glyph height in perspective.
12594
+ pitchAlignment: "viewport",
12551
12595
  rotationAlignment: "map",
12552
12596
  size: zoom10.linear([
12553
12597
  [10, startSize],
@@ -12562,11 +12606,7 @@ var streets = bindOfficialMapTheme(
12562
12606
  id: "streets",
12563
12607
  version: 1,
12564
12608
  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
- },
12609
+ fonts: [streetsFonts],
12570
12610
  themes: streetsThemes,
12571
12611
  timeOfDay: {
12572
12612
  light: { day: "light", dawn: "dawn", dusk: "dusk", night: "dark" },
@@ -12621,14 +12661,14 @@ var streets = bindOfficialMapTheme(
12621
12661
  // Optional keys: addresses, aeroways, boundaries, buildings, labels, land,
12622
12662
  // landforms, poi, roads, transit, vegetation, water. Object order never
12623
12663
  // 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.
12664
+ // House numbers arrive at close zooms and yield in the distance when tilted.
12626
12665
  addresses: addresses4({
12627
12666
  labels: {
12628
12667
  minZoom: 17,
12629
12668
  text: {
12630
- font: streetsVisual.font.default,
12631
- color: streetsVisual.label.muted,
12669
+ font: streetsVisual.font.navigation,
12670
+ fallbacks: [streetsVisual.font.regular],
12671
+ color: streetsVisual.label.address,
12632
12672
  haloColor: streetsVisual.label.placeHalo,
12633
12673
  haloWidth: 1,
12634
12674
  maxWidth: 10,
@@ -13357,6 +13397,12 @@ var streets = bindOfficialMapTheme(
13357
13397
  // stand beside the flat fill, so they require this mode.
13358
13398
  mode: "flat",
13359
13399
  threeDimensional: {
13400
+ // Models name pools, planting and timber with these parts to follow the map's colours.
13401
+ modelColors: {
13402
+ water: token9.color("buildings.modelWater"),
13403
+ vegetation: token9.color("buildings.modelVegetation"),
13404
+ wood: token9.color("buildings.modelWood")
13405
+ },
13360
13406
  floodLight: {
13361
13407
  intensity: token9.number("buildings.floodLight.intensity"),
13362
13408
  brightnessScale: token9.number("buildings.floodLight.brightnessScale"),
@@ -13471,10 +13517,14 @@ var streets = bindOfficialMapTheme(
13471
13517
  // 'auto' | 'local' | 'en' | another language field suffix.
13472
13518
  places: "all",
13473
13519
  // 'none' | 'major' | 'all'.
13520
+ // Street names yield to foreground destinations and are hidden by 3D buildings.
13521
+ // Their viewport-aligned lettering stays readable at an oblique camera angle.
13474
13522
  roadPlacement: "ground",
13523
+ roadNameFormat: "compact",
13524
+ roadGrouping: "network",
13475
13525
  roads: "all",
13476
13526
  // Preserve Streets' selection while Core owns class aliases, language
13477
- // fallback, ground placement and collision ordering.
13527
+ // fallback and collision ordering.
13478
13528
  roadClasses: [
13479
13529
  "motorway",
13480
13530
  "trunk",
@@ -13483,6 +13533,7 @@ var streets = bindOfficialMapTheme(
13483
13533
  "tertiary",
13484
13534
  "minor",
13485
13535
  "service",
13536
+ "track",
13486
13537
  "pathway",
13487
13538
  "footway",
13488
13539
  "cycleway",
@@ -13504,6 +13555,7 @@ var streets = bindOfficialMapTheme(
13504
13555
  tertiary: roadLabelStyle("major", 13),
13505
13556
  minor: roadLabelStyle("street", 13),
13506
13557
  service: roadLabelStyle("service", 15),
13558
+ track: roadLabelStyle("service", 15),
13507
13559
  pathway: roadLabelStyle("path", 15),
13508
13560
  footway: roadLabelStyle("path", 15),
13509
13561
  cycleway: roadLabelStyle("path", 15),
@@ -13847,10 +13899,11 @@ var streets = bindOfficialMapTheme(
13847
13899
  placement: "point",
13848
13900
  text: {
13849
13901
  color: streetsVisual.label.road,
13850
- font: streetsVisual.font.places,
13902
+ font: streetsVisual.font.shield,
13903
+ fallbacks: [streetsVisual.font.regular],
13851
13904
  haloColor: streetsDetailPalette.halo,
13852
13905
  haloWidth: 1,
13853
- size: 10
13906
+ size: 9
13854
13907
  }
13855
13908
  },
13856
13909
  shields: {
@@ -13868,7 +13921,8 @@ var streets = bindOfficialMapTheme(
13868
13921
  },
13869
13922
  text: {
13870
13923
  color: streetsVisual.label.shieldDark,
13871
- font: streetsVisual.font.places,
13924
+ font: streetsVisual.font.shield,
13925
+ fallbacks: [streetsVisual.font.regular],
13872
13926
  haloWidth: 0,
13873
13927
  letterSpacing: 0.05,
13874
13928
  maxAngle: 38,
@@ -13876,7 +13930,7 @@ var streets = bindOfficialMapTheme(
13876
13930
  padding: 2,
13877
13931
  pitchAlignment: "viewport",
13878
13932
  rotationAlignment: "viewport",
13879
- size: 10
13933
+ size: 9
13880
13934
  }
13881
13935
  },
13882
13936
  overview: {
@@ -13884,10 +13938,12 @@ var streets = bindOfficialMapTheme(
13884
13938
  minZoom: 6
13885
13939
  },
13886
13940
  detail: {
13887
- // Core switches to line placement at street scale while retaining viewport
13888
- // alignment, so each route reference remains horizontal during navigation.
13941
+ // World splits route lines more often than the reference source. A shorter
13942
+ // interval keeps route references available in regional views; collision
13943
+ // still suppresses adjacent shields, and street-scale repetition stays sparse.
13889
13944
  spacing: zoom10.linear([
13890
- [11, 400],
13945
+ [11, 220],
13946
+ [13, 300],
13891
13947
  [14, 600]
13892
13948
  ])
13893
13949
  },
@@ -14003,9 +14059,8 @@ var streets = bindOfficialMapTheme(
14003
14059
  streetsLabelRenderStack()
14004
14060
  ),
14005
14061
  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.
14062
+ // Keep World's importance order while reserving room for navigation and landmarks.
14063
+ // Everyday businesses enter progressively; tilted views also limit distant labels.
14009
14064
  categories: [
14010
14065
  "transport",
14011
14066
  "food-drink",
@@ -14025,7 +14080,14 @@ var streets = bindOfficialMapTheme(
14025
14080
  // A uniform grey treatment suppresses a meaningful amount of chroma
14026
14081
  // and makes the whole light map read as if a pale overlay sat above it.
14027
14082
  color: "category",
14028
- density: 3,
14083
+ density: 2,
14084
+ detailZoom: 18,
14085
+ densityByCategory: {
14086
+ lodging: 1,
14087
+ "park-nature": 3,
14088
+ religion: 1,
14089
+ transport: 3
14090
+ },
14029
14091
  icons: true,
14030
14092
  labels: true,
14031
14093
  placement: {
@@ -14034,8 +14096,8 @@ var streets = bindOfficialMapTheme(
14034
14096
  coupleIconAndLabel: true,
14035
14097
  iconPadding: 3,
14036
14098
  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.
14099
+ // Landmarks retain their priority. Ground street names yield to destinations;
14100
+ // the navigation policy keeps the city and district hierarchy above them.
14039
14101
  prominentRank: 1,
14040
14102
  textPadding: 3
14041
14103
  },
@@ -14090,6 +14152,7 @@ export {
14090
14152
  soundings2 as soundings,
14091
14153
  soundingsIcons,
14092
14154
  streets2 as streets,
14155
+ streetsFonts,
14093
14156
  streetsIcons,
14094
14157
  streetsModels,
14095
14158
  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.15",
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.41 <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.41"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "tsup src/index.ts --format esm --dts --clean --no-splitting",