@tileflow/maps 0.1.0-alpha.16 → 0.1.0-alpha.18

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 (99) hide show
  1. package/README.md +70 -63
  2. package/THIRD_PARTY_NOTICES.md +7 -0
  3. package/assets/streets/build-trees.mjs +167 -273
  4. package/assets/streets/climate/NOTICE.txt +9 -0
  5. package/assets/streets/climate/build.py +47 -0
  6. package/assets/streets/climate/koppen-geiger-1991-2020.tif +0 -0
  7. package/assets/streets/climate/recipe.json +13 -0
  8. package/assets/streets/icons/streets-tree-columnar-dark.pattern.svg +200 -105
  9. package/assets/streets/icons/streets-tree-columnar.pattern.svg +200 -105
  10. package/assets/streets/icons/streets-tree-conifer-dark.pattern.svg +260 -200
  11. package/assets/streets/icons/streets-tree-conifer.pattern.svg +260 -200
  12. package/assets/streets/icons/streets-tree-open-dark.pattern.svg +170 -200
  13. package/assets/streets/icons/streets-tree-open.pattern.svg +170 -200
  14. package/assets/streets/icons/streets-tree-round-dark.pattern.svg +160 -158
  15. package/assets/streets/icons/streets-tree-round.pattern.svg +160 -158
  16. package/assets/streets/icons/streets-tree-tall-dark.pattern.svg +166 -156
  17. package/assets/streets/icons/streets-tree-tall.pattern.svg +166 -156
  18. package/assets/streets/icons/unified-day-aerialway.svg +11 -0
  19. package/assets/streets/icons/unified-day-airport.svg +11 -0
  20. package/assets/streets/icons/unified-day-bank.svg +11 -0
  21. package/assets/streets/icons/unified-day-bar.svg +11 -0
  22. package/assets/streets/icons/unified-day-beach.svg +11 -0
  23. package/assets/streets/icons/unified-day-beauty.svg +11 -0
  24. package/assets/streets/icons/unified-day-bookstore.svg +11 -0
  25. package/assets/streets/icons/unified-day-buddhist.svg +11 -0
  26. package/assets/streets/icons/unified-day-bus.svg +11 -0
  27. package/assets/streets/icons/unified-day-campsite.svg +11 -0
  28. package/assets/streets/icons/unified-day-car-repair.svg +11 -0
  29. package/assets/streets/icons/unified-day-car.svg +11 -0
  30. package/assets/streets/icons/unified-day-charging-station.svg +11 -0
  31. package/assets/streets/icons/unified-day-christian.svg +11 -0
  32. package/assets/streets/icons/unified-day-clothing.svg +11 -0
  33. package/assets/streets/icons/unified-day-coffee.svg +11 -0
  34. package/assets/streets/icons/unified-day-college.svg +11 -0
  35. package/assets/streets/icons/unified-day-community.svg +11 -0
  36. package/assets/streets/icons/unified-day-convenience.svg +11 -0
  37. package/assets/streets/icons/unified-day-dentist.svg +11 -0
  38. package/assets/streets/icons/unified-day-doctor.svg +11 -0
  39. package/assets/streets/icons/unified-day-dog-park.svg +11 -0
  40. package/assets/streets/icons/unified-day-drinking-water.svg +11 -0
  41. package/assets/streets/icons/unified-day-education.svg +11 -0
  42. package/assets/streets/icons/unified-day-electronics.svg +11 -0
  43. package/assets/streets/icons/unified-day-embassy.svg +11 -0
  44. package/assets/streets/icons/unified-day-fast-food.svg +11 -0
  45. package/assets/streets/icons/unified-day-ferry.svg +11 -0
  46. package/assets/streets/icons/unified-day-fire-station.svg +11 -0
  47. package/assets/streets/icons/unified-day-fitness.svg +11 -0
  48. package/assets/streets/icons/unified-day-florist.svg +11 -0
  49. package/assets/streets/icons/unified-day-food.svg +11 -0
  50. package/assets/streets/icons/unified-day-fuel.svg +11 -0
  51. package/assets/streets/icons/unified-day-garden.svg +11 -0
  52. package/assets/streets/icons/unified-day-golf.svg +11 -0
  53. package/assets/streets/icons/unified-day-grocery.svg +11 -0
  54. package/assets/streets/icons/unified-day-harbor.svg +11 -0
  55. package/assets/streets/icons/unified-day-hardware.svg +11 -0
  56. package/assets/streets/icons/unified-day-health.svg +11 -0
  57. package/assets/streets/icons/unified-day-jewish.svg +11 -0
  58. package/assets/streets/icons/unified-day-laundry.svg +11 -0
  59. package/assets/streets/icons/unified-day-library.svg +11 -0
  60. package/assets/streets/icons/unified-day-lodging.svg +11 -0
  61. package/assets/streets/icons/unified-day-major-transit.svg +11 -0
  62. package/assets/streets/icons/unified-day-mountain.svg +11 -0
  63. package/assets/streets/icons/unified-day-muslim.svg +11 -0
  64. package/assets/streets/icons/unified-day-natural.svg +11 -0
  65. package/assets/streets/icons/unified-day-nature.svg +11 -0
  66. package/assets/streets/icons/unified-day-parking-garage.svg +11 -0
  67. package/assets/streets/icons/unified-day-parking.svg +11 -0
  68. package/assets/streets/icons/unified-day-pharmacy.svg +11 -0
  69. package/assets/streets/icons/unified-day-playground.svg +11 -0
  70. package/assets/streets/icons/unified-day-plaza.svg +11 -0
  71. package/assets/streets/icons/unified-day-police.svg +11 -0
  72. package/assets/streets/icons/unified-day-post.svg +11 -0
  73. package/assets/streets/icons/unified-day-prison.svg +11 -0
  74. package/assets/streets/icons/unified-day-rail-light.svg +11 -0
  75. package/assets/streets/icons/unified-day-rail.svg +11 -0
  76. package/assets/streets/icons/unified-day-services.svg +11 -0
  77. package/assets/streets/icons/unified-day-shopping.svg +11 -0
  78. package/assets/streets/icons/unified-day-sport.svg +11 -0
  79. package/assets/streets/icons/unified-day-stadium.svg +11 -0
  80. package/assets/streets/icons/unified-day-swimming.svg +11 -0
  81. package/assets/streets/icons/unified-day-toilet.svg +11 -0
  82. package/assets/streets/icons/unified-day-town-hall.svg +11 -0
  83. package/assets/streets/icons/unified-day-waterfall.svg +11 -0
  84. package/assets/streets/icons/unified-day-worship.svg +11 -0
  85. package/assets/streets/models/streets-tree-columnar.far.glb +0 -0
  86. package/assets/streets/models/streets-tree-columnar.glb +0 -0
  87. package/assets/streets/models/streets-tree-conifer.far.glb +0 -0
  88. package/assets/streets/models/streets-tree-conifer.glb +0 -0
  89. package/assets/streets/models/streets-tree-open.far.glb +0 -0
  90. package/assets/streets/models/streets-tree-open.glb +0 -0
  91. package/assets/streets/models/streets-tree-round.far.glb +0 -0
  92. package/assets/streets/models/streets-tree-round.glb +0 -0
  93. package/assets/streets/models/streets-tree-tall.far.glb +0 -0
  94. package/assets/streets/models/streets-tree-tall.glb +0 -0
  95. package/dist/index.d.ts +829 -132
  96. package/dist/index.js +1397 -539
  97. package/package.json +3 -4
  98. package/docs/design-and-assets.md +0 -247
  99. package/docs/map-1777.md +0 -91
package/dist/index.js CHANGED
@@ -8208,21 +8208,21 @@ import {
8208
8208
  addresses as addresses4,
8209
8209
  boundaries as boundaries7,
8210
8210
  buildings as buildings6,
8211
- defineMap as defineMap7,
8212
- expr as expr12,
8213
- field as field11,
8211
+ defineMap as defineMap8,
8212
+ expr as expr14,
8213
+ field as field14,
8214
8214
  fixed as fixed3,
8215
8215
  labels as labels7,
8216
8216
  land as land7,
8217
8217
  poi as poi4,
8218
- refineRenderTarget as refineRenderTarget5,
8219
- renderPass as renderPass10,
8218
+ refineRenderTarget as refineRenderTarget6,
8219
+ renderPass as renderPass13,
8220
8220
  roads as roads6,
8221
- token as token9,
8221
+ token as token13,
8222
8222
  transit as transit7,
8223
8223
  water as water7,
8224
- withRenderStack as withRenderStack10,
8225
- zoom as zoom10
8224
+ withRenderStack as withRenderStack11,
8225
+ zoom as zoom13
8226
8226
  } from "@tileflow/core";
8227
8227
 
8228
8228
  // src/official/mapbox-rail.ts
@@ -8286,16 +8286,406 @@ function mapboxRailTransitStyle(color) {
8286
8286
  };
8287
8287
  }
8288
8288
 
8289
+ // src/official/streets-cartography.ts
8290
+ import {
8291
+ defineMap as defineMap7,
8292
+ expr as expr10,
8293
+ field as field10,
8294
+ refineRenderTarget as refineRenderTarget5,
8295
+ renderPass as renderPass10,
8296
+ resolveMap,
8297
+ token as token7,
8298
+ withRenderStack as withRenderStack8,
8299
+ zoom as zoom11
8300
+ } from "@tileflow/core";
8301
+
8302
+ // src/official/streets-ground-and-access.ts
8303
+ import { expr as expr9, field as field8, renderPass as renderPass8, token as token5, zoom as zoom9 } from "@tileflow/core";
8304
+ var streetsDayGroundColors = {
8305
+ "surface.background": "#F5F0E5",
8306
+ "surface.background.overview": "#F8F7F3",
8307
+ "surface.land": "#F8F7F3",
8308
+ "landcover.global.barren": "#F8F7F3",
8309
+ "landcover.barren": "#F5F0E5",
8310
+ "landcover.rock": "#EEE9DF",
8311
+ "landcover.farmland": "#F0EDE2",
8312
+ "landcover.orchard": "#DDEAD4",
8313
+ "landcover.nursery": "#D6E8D2",
8314
+ "landcover.global.crop": "#EFF1E6",
8315
+ "landcover.global.urban": "#F5F3F3",
8316
+ "landuse.residential": "#F5F3F3",
8317
+ "landuse.civic": "#F5F3F3",
8318
+ "landuse.education": "#EFEEEC",
8319
+ "landuse.government": "#F5F3F3",
8320
+ "landuse.military": "#F5F3F3",
8321
+ "roads.accessOverview": "#D7D3CE"
8322
+ };
8323
+ var streetsAgriculturalColor = expr9.match(
8324
+ expr9.get(field8("subclass")),
8325
+ [
8326
+ { labels: "orchard", value: token5.color("landcover.orchard") },
8327
+ { labels: "plant_nursery", value: token5.color("landcover.nursery") }
8328
+ ],
8329
+ token5.color("landcover.farmland")
8330
+ );
8331
+ var streetsGroundBackground = zoom9.linear([
8332
+ [10, token5.color("surface.background.overview")],
8333
+ [13, token5.color("surface.background.transition")],
8334
+ [14, token5.color("surface.background")]
8335
+ ]);
8336
+ var streetsAccessOverview = renderPass8({
8337
+ placement: { below: "roads.classes.minor.surface.fill" },
8338
+ feature: "road",
8339
+ renderer: "line",
8340
+ selector: {
8341
+ kind: "all",
8342
+ selectors: [
8343
+ { kind: "geometry", geometry: "line" },
8344
+ { kind: "in", field: "class", values: ["track", "service"] },
8345
+ { kind: "compare", field: "brunnel", operator: "ne", value: "tunnel" }
8346
+ ]
8347
+ },
8348
+ style: {
8349
+ minZoom: 12,
8350
+ maxZoom: 15,
8351
+ cap: "round",
8352
+ join: "round",
8353
+ color: zoom9.linear([
8354
+ [14, token5.color("roads.accessOverview")],
8355
+ [15, token5.color("roads.default")]
8356
+ ]),
8357
+ opacity: zoom9.linear([
8358
+ [12, 0.35],
8359
+ [13, 0.8],
8360
+ [14, 1]
8361
+ ]),
8362
+ width: zoom9.linear([
8363
+ [12, 0.35],
8364
+ [13, 0.55],
8365
+ [14, 0.85],
8366
+ [15, 2.2857142857142856]
8367
+ ])
8368
+ }
8369
+ });
8370
+
8371
+ // src/official/streets-network-overview.ts
8372
+ import { field as field9, renderPass as renderPass9, token as token6, zoom as zoom10 } from "@tileflow/core";
8373
+ var streetsNetworkDayColors = {
8374
+ "roads.city.primary": "#B1C4CB",
8375
+ "roads.city.secondary": "#C3CFD3",
8376
+ "roads.city.tertiary": "#CCD6D9",
8377
+ "roads.city.minor": "#D2DADC",
8378
+ "roads.overview.major": "#8DB3C0",
8379
+ "roads.overview.majorClose": "#85A9B5",
8380
+ "roads.overview.casing": "#668D9A",
8381
+ "roads.overview.casingClose": "#658B97"
8382
+ };
8383
+ function overviewWidth(width, local) {
8384
+ if (!width || typeof width !== "object" || width.kind !== "expression") {
8385
+ throw new Error("Expected an authored road-width expression");
8386
+ }
8387
+ const value = structuredClone(width.value);
8388
+ if (value[0] !== "interpolate") throw new Error("Expected interpolated road widths");
8389
+ for (let i = 3; i < value.length; i += 2) {
8390
+ const factor = value[i] === 10 ? 1.12 : value[i] === 12 ? local ? 1.125 : 1.25 : value[i] === 14 ? 1.08 : 1;
8391
+ if (factor !== 1) {
8392
+ const authored = value[i + 1];
8393
+ value[i + 1] = ["case", ["==", ["get", field9("ramp")], 1], authored, ["*", authored, factor]];
8394
+ }
8395
+ }
8396
+ return { ...width, value };
8397
+ }
8398
+ function streetsOverviewRoads(roads7) {
8399
+ if (!roads7) throw new Error("The Streets overview requires the roads module");
8400
+ const renderStack = "renderStack" in roads7 ? roads7.renderStack : {};
8401
+ const classes = { ...roads7.classes };
8402
+ for (const name of ["motorway", "trunk"]) {
8403
+ const road = classes[name];
8404
+ const color = zoom10.linear([
8405
+ [3, token6.color(`roads.${name}`)],
8406
+ [6, token6.color("roads.overview.major")],
8407
+ [12, token6.color("roads.overview.major")],
8408
+ [14, token6.color("roads.overview.majorClose")],
8409
+ [14.25, token6.color("roads.overview.majorClose")],
8410
+ [15, token6.color(`roads.${name}`)]
8411
+ ]);
8412
+ classes[name] = {
8413
+ ...road,
8414
+ surface: { ...road.surface, fill: { ...road.surface.fill, color } },
8415
+ bridge: {
8416
+ ...road.bridge,
8417
+ fill: { ...road.bridge.fill, color },
8418
+ casing: {
8419
+ ...road.bridge.casing,
8420
+ color: zoom10.linear([
8421
+ [12, token6.color("roads.overview.casing")],
8422
+ [14, token6.color("roads.overview.casingClose")],
8423
+ [14.25, token6.color("roads.overview.casingClose")],
8424
+ [15, token6.color("roads.detail.casing")]
8425
+ ])
8426
+ }
8427
+ }
8428
+ };
8429
+ }
8430
+ for (const name of ["primary", "secondary", "tertiary", "minor"]) {
8431
+ const road = classes[name];
8432
+ const local = name === "minor";
8433
+ classes[name] = { ...road };
8434
+ for (const structure of ["surface", "bridge", "tunnel"]) {
8435
+ const base = road[structure];
8436
+ classes[name][structure] = {
8437
+ ...base,
8438
+ fill: {
8439
+ ...base.fill,
8440
+ width: overviewWidth(base.fill.width, local),
8441
+ // The tile source first provides local geometry at z12. Make it readable
8442
+ // on arrival, then converge to the detailed opacity by z13.
8443
+ ...local ? {
8444
+ opacity: zoom10.linear([
8445
+ [12, structure === "tunnel" ? 0.55 : 0.8],
8446
+ [13, structure === "tunnel" ? 0.8 : 1]
8447
+ ])
8448
+ } : {}
8449
+ }
8450
+ };
8451
+ }
8452
+ }
8453
+ return {
8454
+ ...roads7,
8455
+ classes,
8456
+ renderStack: {
8457
+ ...renderStack,
8458
+ overviewMajorCasing: renderPass9({
8459
+ // Keep the casing below every road fill, including trunk and ramp fills.
8460
+ // Drawing it above those fills exposes round segment caps as small rings.
8461
+ placement: { below: "roads.classes.minor.surface.casing" },
8462
+ feature: "road",
8463
+ renderer: "line",
8464
+ selector: {
8465
+ kind: "all",
8466
+ selectors: [
8467
+ { kind: "geometry", geometry: "line" },
8468
+ { kind: "in", field: "class", values: ["motorway", "trunk"] },
8469
+ { kind: "compare", field: "brunnel", operator: "ne", value: "tunnel" }
8470
+ ]
8471
+ },
8472
+ style: {
8473
+ minZoom: 6,
8474
+ maxZoom: 15,
8475
+ cap: "round",
8476
+ join: "round",
8477
+ color: zoom10.linear([
8478
+ [12, token6.color("roads.overview.casing")],
8479
+ [14, token6.color("roads.overview.casingClose")],
8480
+ [14.25, token6.color("roads.overview.casingClose")],
8481
+ [15, token6.color("roads.detail.casing")]
8482
+ ]),
8483
+ gapWidth: roads7.classes.motorway.surface.fill.width,
8484
+ width: zoom10.linear([
8485
+ [6, 0.2],
8486
+ [8, 0.4],
8487
+ [10, 0.65],
8488
+ [12, 0.8],
8489
+ [14, 0.95],
8490
+ [15, 1.0203013481363996]
8491
+ ]),
8492
+ opacity: zoom10.linear([
8493
+ [6, 0.3],
8494
+ [8, 0.8],
8495
+ [10, 1]
8496
+ ])
8497
+ }
8498
+ })
8499
+ }
8500
+ };
8501
+ }
8502
+
8503
+ // src/official/streets-cartography.ts
8504
+ var visibleBuilding = {
8505
+ kind: "all",
8506
+ selectors: [
8507
+ { field: "hide3d", kind: "compare", operator: "ne", value: true },
8508
+ { field: "hide3d", kind: "compare", operator: "ne", value: 1 },
8509
+ { field: "hide3d", kind: "compare", operator: "ne", value: "1" },
8510
+ { field: "hide3d", kind: "compare", operator: "ne", value: "true" }
8511
+ ]
8512
+ };
8513
+ function buildingColor2(outline = false, raised = false) {
8514
+ return expr10.match(
8515
+ expr10.get(field10("buildingTone")),
8516
+ [
8517
+ {
8518
+ labels: ["commercial", "active"],
8519
+ value: token7.color(`buildings.flat.${outline ? "activeOutline" : "active"}`)
8520
+ }
8521
+ ],
8522
+ token7.color(
8523
+ raised ? "buildings.raised.neutral" : `buildings.flat.${outline ? "neutralOutline" : "neutral"}`
8524
+ )
8525
+ );
8526
+ }
8527
+ function withStreetsCartography(base) {
8528
+ const source = resolveMap(base);
8529
+ const { land: land8, buildings: buildings7, poi: poi5, vegetation: vegetation6 } = source.modules ?? {};
8530
+ if (!land8 || !buildings7 || !poi5 || !vegetation6)
8531
+ throw new Error("Streets requires land, buildings, POI and vegetation");
8532
+ const vegetationAppearance = {
8533
+ ...vegetation6,
8534
+ flat: { ...vegetation6.flat, strokeColor: token7.color("vegetation.tree.outline") }
8535
+ };
8536
+ const landStack = stackOf(land8);
8537
+ const buildingStack = stackOf(buildings7);
8538
+ const extrusion = buildingStack.extrusion;
8539
+ if (extrusion?.kind !== "render-pass" || extrusion.renderer !== "extrusion")
8540
+ throw new Error("Streets requires its building extrusion pass");
8541
+ const { renderStack: roadsStack, ...overviewRoads } = streetsOverviewRoads(source.modules?.roads);
8542
+ return defineMap7({
8543
+ ...base,
8544
+ modules: {
8545
+ ...source.modules,
8546
+ roads: withRenderStack8(
8547
+ {
8548
+ ...overviewRoads,
8549
+ pathGround: {
8550
+ greenColor: token7.color("roads.path.green"),
8551
+ groundColor: token7.color("roads.path.ground"),
8552
+ opacity: token7.number("roads.path.groundOpacity"),
8553
+ widthScale: 0.92
8554
+ }
8555
+ },
8556
+ {
8557
+ ...roadsStack,
8558
+ accessOverview: streetsAccessOverview
8559
+ }
8560
+ ),
8561
+ land: withRenderStack8(
8562
+ {
8563
+ ...withoutStack(land8),
8564
+ // The climate underlay is paused until it has a shared URL and visibility-aware loading.
8565
+ // Its source, generator and attribution are retained in assets/streets/climate.
8566
+ background: { ...land8.background, color: streetsGroundBackground },
8567
+ landcover: {
8568
+ ...land8.landcover,
8569
+ farmland: {
8570
+ ...land8.landcover?.farmland,
8571
+ fill: { ...land8.landcover?.farmland?.fill, color: streetsAgriculturalColor }
8572
+ }
8573
+ }
8574
+ },
8575
+ {
8576
+ ...landStack,
8577
+ businessArea: renderPass10({
8578
+ placement: { above: "land.landuse.residential.fill" },
8579
+ feature: "landuse",
8580
+ renderer: "fill",
8581
+ selector: { field: "class", kind: "compare", operator: "eq", value: "business_area" },
8582
+ style: {
8583
+ color: token7.color("landuse.businessCorridor"),
8584
+ minZoom: 11,
8585
+ opacity: zoom11.linear([
8586
+ [15, 1],
8587
+ [15.5, 0.75],
8588
+ [16.25, 0]
8589
+ ])
8590
+ }
8591
+ })
8592
+ }
8593
+ ),
8594
+ buildings: withRenderStack8(
8595
+ {
8596
+ ...withoutStack(buildings7),
8597
+ flat: {
8598
+ fill: {
8599
+ color: buildingColor2(),
8600
+ minZoom: 15.25,
8601
+ opacity: zoom11.linear([
8602
+ [15.25, 0],
8603
+ [15.5, 0.75],
8604
+ [15.75, 1]
8605
+ ])
8606
+ },
8607
+ outline: {
8608
+ color: buildingColor2(true),
8609
+ minZoom: 16,
8610
+ opacity: zoom11.linear([
8611
+ [16, 0],
8612
+ [16.5, 0.4],
8613
+ [18, 0.58],
8614
+ [20, 0.68]
8615
+ ]),
8616
+ width: zoom11.linear([
8617
+ [16, 0.35],
8618
+ [16.5, 0.5],
8619
+ [18, 0.65],
8620
+ [20, 0.8]
8621
+ ])
8622
+ }
8623
+ }
8624
+ },
8625
+ {
8626
+ ...buildingStack,
8627
+ visibleFlatFill: refineRenderTarget5({
8628
+ target: "buildings.flat.fill",
8629
+ renderer: "fill",
8630
+ selector: visibleBuilding,
8631
+ style: {}
8632
+ }),
8633
+ visibleFlatOutline: refineRenderTarget5({
8634
+ target: "buildings.flat.outline",
8635
+ renderer: "line",
8636
+ selector: visibleBuilding,
8637
+ style: {}
8638
+ }),
8639
+ extrusion: { ...extrusion, style: { ...extrusion.style, color: buildingColor2(false, true) } },
8640
+ flatShadow: renderPass10({
8641
+ selector: visibleBuilding,
8642
+ placement: { below: "buildings.flat.fill" },
8643
+ feature: "building",
8644
+ renderer: "line",
8645
+ style: {
8646
+ blur: 2,
8647
+ color: token7.color("buildings.shadow"),
8648
+ minZoom: 17.5,
8649
+ opacity: zoom11.linear([
8650
+ [17.5, 0],
8651
+ [19, 0.035],
8652
+ [20, 0.04]
8653
+ ]),
8654
+ translate: [0.5, 0.75],
8655
+ translateAnchor: "viewport",
8656
+ width: zoom11.linear([
8657
+ [17.5, 0.5],
8658
+ [19, 1.5],
8659
+ [20, 2]
8660
+ ])
8661
+ }
8662
+ })
8663
+ }
8664
+ ),
8665
+ vegetation: vegetationAppearance,
8666
+ poi: { ...poi5, maxRankByType: { ...poi5.maxRankByType, garden: 1 } }
8667
+ }
8668
+ });
8669
+ }
8670
+ function stackOf(module) {
8671
+ return "renderStack" in module ? module.renderStack : {};
8672
+ }
8673
+ function withoutStack(module) {
8674
+ const result = { ...module };
8675
+ if ("renderStack" in result) delete result.renderStack;
8676
+ return result;
8677
+ }
8678
+
8289
8679
  // src/official/streets-construction.ts
8290
8680
  import {
8291
- expr as expr9,
8292
- field as field8,
8293
- renderPass as renderPass8,
8294
- token as token5,
8295
- withRenderStack as withRenderStack8
8681
+ expr as expr11,
8682
+ field as field11,
8683
+ renderPass as renderPass11,
8684
+ token as token8,
8685
+ withRenderStack as withRenderStack9
8296
8686
  } from "@tileflow/core";
8297
8687
  function withStreetsConstruction(module, stack) {
8298
- const constructionPath = expr9.eq(expr9.get(field8("class")), "path_construction");
8688
+ const constructionPath = expr11.eq(expr11.get(field11("class")), "path_construction");
8299
8689
  const marks = Object.fromEntries(
8300
8690
  [
8301
8691
  "motorway",
@@ -8331,14 +8721,14 @@ function withStreetsConstruction(module, stack) {
8331
8721
  return [
8332
8722
  [
8333
8723
  `construction-${roadClass}-underlay`,
8334
- renderPass8({
8724
+ renderPass11({
8335
8725
  feature: "road",
8336
8726
  placement: "below-roads",
8337
8727
  selector,
8338
8728
  renderer: "line",
8339
8729
  style: {
8340
8730
  ...fill,
8341
- color: token5.color("roads.default"),
8731
+ color: token8.color("roads.default"),
8342
8732
  dash: [1, 0],
8343
8733
  opacity: 0.16
8344
8734
  }
@@ -8346,7 +8736,7 @@ function withStreetsConstruction(module, stack) {
8346
8736
  ],
8347
8737
  [
8348
8738
  `construction-${roadClass}`,
8349
- renderPass8({
8739
+ renderPass11({
8350
8740
  feature: "road",
8351
8741
  placement: "below-roads",
8352
8742
  selector,
@@ -8357,7 +8747,7 @@ function withStreetsConstruction(module, stack) {
8357
8747
  minZoom: Math.max(fill.minZoom ?? 0, 14),
8358
8748
  cap: "butt",
8359
8749
  join: "round",
8360
- color: token5.color("roads.default"),
8750
+ color: token8.color("roads.default"),
8361
8751
  // Short transverse strokes with flat ends avoid the former round capsules.
8362
8752
  dash: [0.1, 0.18],
8363
8753
  opacity: 0.9
@@ -8367,7 +8757,7 @@ function withStreetsConstruction(module, stack) {
8367
8757
  ];
8368
8758
  })
8369
8759
  );
8370
- return withRenderStack8(
8760
+ return withRenderStack9(
8371
8761
  {
8372
8762
  ...module,
8373
8763
  modifiers: {
@@ -8378,14 +8768,14 @@ function withStreetsConstruction(module, stack) {
8378
8768
  // its dash expression otherwise forces ordinary borders through the SDF shader.
8379
8769
  casing: { dash: [1, 0], opacity: 0 },
8380
8770
  fill: {
8381
- color: token5.color("roads.default"),
8771
+ color: token8.color("roads.default"),
8382
8772
  // Footpaths keep their existing treatment; hatching is for carriageways.
8383
- dash: expr9.case(
8384
- [{ when: constructionPath, value: expr9.literal([1.5, 1]) }],
8385
- expr9.literal([1, 0])
8773
+ dash: expr11.case(
8774
+ [{ when: constructionPath, value: expr11.literal([1.5, 1]) }],
8775
+ expr11.literal([1, 0])
8386
8776
  ),
8387
8777
  // The separate underlay supplies carriageway ground below all live roads.
8388
- opacity: expr9.case([{ when: constructionPath, value: 0.96 }], 0)
8778
+ opacity: expr11.case([{ when: constructionPath, value: 0.96 }], 0)
8389
8779
  }
8390
8780
  }
8391
8781
  }
@@ -8397,9 +8787,9 @@ function withStreetsConstruction(module, stack) {
8397
8787
 
8398
8788
  // src/official/streets-poi.ts
8399
8789
  import {
8400
- expr as expr10,
8401
- field as field9,
8402
- token as token6
8790
+ expr as expr12,
8791
+ field as field12,
8792
+ token as token9
8403
8793
  } from "@tileflow/core";
8404
8794
 
8405
8795
  // src/official/streets-transit-icons.ts
@@ -8652,7 +9042,7 @@ var streetsPoiCategoryPictograms = Object.freeze({
8652
9042
  "visitor-amenity": "services"
8653
9043
  });
8654
9044
  function streetsPoiPictogramToken(id) {
8655
- return token6.image(`poi.pictogram.${id}`);
9045
+ return token9.image(`poi.pictogram.${id}`);
8656
9046
  }
8657
9047
  function streetsPoiImageTokens(variant) {
8658
9048
  const suffix = {
@@ -8679,11 +9069,11 @@ function streetsPoiImage() {
8679
9069
  value: streetsPoiPictogramToken(id)
8680
9070
  }));
8681
9071
  const [first, ...rest] = types;
8682
- const categoryRole = token6.image(`poi.${category}`);
9072
+ const categoryRole = token9.image(`poi.${category}`);
8683
9073
  return {
8684
9074
  labels: category,
8685
- value: first ? expr10.match(
8686
- expr10.get(field9("poiType")),
9075
+ value: first ? expr12.match(
9076
+ expr12.get(field12("poiType")),
8687
9077
  [first, ...rest],
8688
9078
  categoryRole
8689
9079
  ) : categoryRole
@@ -8694,25 +9084,25 @@ function streetsPoiImage() {
8694
9084
  labels: [...labels8],
8695
9085
  value: streetsPoiPictogramToken(id)
8696
9086
  }));
8697
- const genericImage = expr10.match(
8698
- expr10.get(field9("mode")),
9087
+ const genericImage = expr12.match(
9088
+ expr12.get(field12("mode")),
8699
9089
  [firstMode, ...otherModes],
8700
- expr10.match(
8701
- expr10.get(field9("poiCategory")),
9090
+ expr12.match(
9091
+ expr12.get(field12("poiCategory")),
8702
9092
  [firstCategory, ...otherCategories],
8703
- token6.image("poi.landmark")
9093
+ token9.image("poi.landmark")
8704
9094
  )
8705
9095
  );
8706
9096
  const [firstNetwork, ...otherNetworks] = streetsTransitNetworks.map(({ id, networks }) => ({
8707
9097
  labels: [...networks],
8708
- value: token6.image(`poi.network.${id}`)
9098
+ value: token9.image(`poi.network.${id}`)
8709
9099
  }));
8710
- return expr10.case(
9100
+ return expr12.case(
8711
9101
  [
8712
9102
  {
8713
- when: expr10.eq(expr10.get(field9("poiCategory")), "transport"),
8714
- value: expr10.match(
8715
- expr10.get(field9("network")),
9103
+ when: expr12.eq(expr12.get(field12("poiCategory")), "transport"),
9104
+ value: expr12.match(
9105
+ expr12.get(field12("network")),
8716
9106
  [firstNetwork, ...otherNetworks],
8717
9107
  genericImage
8718
9108
  )
@@ -8723,18 +9113,22 @@ function streetsPoiImage() {
8723
9113
  }
8724
9114
 
8725
9115
  // src/official/streets-themes.ts
8726
- import { defineTheme as defineTheme3, token as token7 } from "@tileflow/core";
9116
+ import { defineTheme as defineTheme4, token as token11 } from "@tileflow/core";
8727
9117
 
8728
9118
  // src/official/streets-building-colors.ts
8729
- function streetsBuildingColors(base, dark) {
9119
+ function streetsBuildingColors(base, dark, monochrome = false) {
8730
9120
  const rgb = [1, 3, 5].map((offset) => parseInt(base.slice(offset, offset + 2), 16));
8731
- const gray = rgb.reduce((sum, value) => sum + value, 0) / 3;
8732
9121
  const hex2 = (values) => "#" + values.map((v) => Math.round(v).toString(16).padStart(2, "0")).join("").toUpperCase();
8733
9122
  return {
8734
9123
  "buildings.modelSurface": base,
8735
- "buildings.modelSecondary": hex2(rgb.map((v) => v + (255 - v) * (dark ? 0.018 : 0.24))),
8736
- "buildings.modelRoof": hex2(rgb.map((v) => (v * 0.8 + gray * 0.2) * 0.97)),
8737
- "buildings.modelAccent": hex2(rgb.map((v) => v + (255 - v) * (dark ? 0.025 : 0.34)))
9124
+ "buildings.modelGlass": hex2(
9125
+ rgb.map((v, channel) => v * (monochrome ? 0.86 : [0.78, 0.88, 0.95][channel]))
9126
+ ),
9127
+ "buildings.modelSecondary": hex2(rgb.map((v) => v + (255 - v) * (dark ? 0.018 : 0.2))),
9128
+ "buildings.modelRoof": hex2(
9129
+ rgb.map((v, channel) => v * (monochrome ? 0.92 : [0.94, 0.92, 0.9][channel]))
9130
+ ),
9131
+ "buildings.modelAccent": hex2(rgb.map((v) => v + (255 - v) * (dark ? 0.025 : 0.4)))
8738
9132
  };
8739
9133
  }
8740
9134
 
@@ -9965,10 +10359,453 @@ var rows = [
9965
10359
  function streetsCartographyColors(theme, preset) {
9966
10360
  const column = profiles.indexOf(`${theme}-${preset}`);
9967
10361
  return Object.fromEntries(
9968
- rows.flatMap(([roles, colors]) => roles.split(" ").map((role) => [role, colors[column]]))
10362
+ rows.flatMap(([roles, colors2]) => roles.split(" ").map((role) => [role, colors2[column]]))
9969
10363
  );
9970
10364
  }
9971
10365
 
10366
+ // src/official/streets-cartography-themes.ts
10367
+ import { defineTheme as defineTheme3, resolveTileflowTheme as resolveTileflowTheme3, token as token10 } from "@tileflow/core";
10368
+
10369
+ // src/official/streets-day-colors.ts
10370
+ var streetsDayColors = {
10371
+ "boundaries.admin": "#FF668C",
10372
+ "boundaries.default": "#FF668C",
10373
+ "boundaries.disputed": "#FF668C",
10374
+ "boundaries.halo": "#FFFFFF",
10375
+ "boundaries.major": "#FF668C",
10376
+ "boundaries.maritime": "#FF668C",
10377
+ "boundaries.regional": "#FF809A",
10378
+ "buildings.active": "#EBECDE",
10379
+ "buildings.businessCorridor": "#F9EFDD",
10380
+ "buildings.businessCorridorOutline": "#D7D1C2",
10381
+ "buildings.civic": "#EBECDE",
10382
+ "buildings.commercial": "#EBECDE",
10383
+ "buildings.contactShadow": "#888378",
10384
+ "buildings.destination": "#EBECDE",
10385
+ "buildings.extrusion": "#EFEBDE",
10386
+ "buildings.fill": "#EBECDE",
10387
+ "buildings.flat.active": "#EFEBDE",
10388
+ "buildings.flat.activeOutline": "#D8CEBE",
10389
+ "buildings.flat.neutral": "#E7EBEA",
10390
+ "buildings.flat.neutralOutline": "#D3DAD8",
10391
+ "buildings.floodLight": "#FFFFFF",
10392
+ "buildings.generic": "#EBECDE",
10393
+ "buildings.industrial": "#EBECDE",
10394
+ "buildings.modelEmission": "#FFFFFF",
10395
+ "buildings.modelRoof": "#FAF3E7",
10396
+ "buildings.modelVegetation": "#9CD1B0",
10397
+ "buildings.modelWater": "#91DFF7",
10398
+ "buildings.modelWood": "#BED4B5",
10399
+ "buildings.outline": "#CEC89B",
10400
+ "buildings.residential": "#EBECDE",
10401
+ "buildings.shadow": "#B5B9B4",
10402
+ "hydro.depth.m0": "rgba(145, 223, 247, 0.35)",
10403
+ "hydro.depth.m200": "rgba(100, 209, 247, 0.35)",
10404
+ "hydro.depth.m2000": "rgba(89, 205, 247, 0.35)",
10405
+ "hydro.depth.m7000": "rgba(51, 196, 248, 0.35)",
10406
+ "hydro.ferry": "#2FA0E6",
10407
+ "hydro.label": "#0094DC",
10408
+ "hydro.ocean": "#91DFF7",
10409
+ "hydro.water": "#91DFF7",
10410
+ "hydro.water.overview": "#91DFF7",
10411
+ "hydro.water.regional": "#91DFF7",
10412
+ "hydro.waterway": "#91DFF7",
10413
+ "labels.address": "#808080",
10414
+ "labels.aerodrome": "#195DCC",
10415
+ "labels.country": "#000000",
10416
+ "labels.ferry": "#0185D7",
10417
+ "labels.ferryHalo": "#92E0F8",
10418
+ "labels.halo": "#FFFFFF",
10419
+ "labels.muted": "#61615F",
10420
+ "labels.neighborhood": "#61615F",
10421
+ "labels.overview": "#61615F",
10422
+ "labels.placeHalo": "#FFFFFF",
10423
+ "labels.poi": "#50717F",
10424
+ "labels.primary": "#61615F",
10425
+ "labels.road": "#404040",
10426
+ "labels.roadHalo": "#F2F2F2",
10427
+ "labels.settlement": "#000000",
10428
+ "labels.shield.dark": "#171E27",
10429
+ "labels.shield.light": "#FFFFFF",
10430
+ "labels.strong": "#404040",
10431
+ "labels.water": "#0094DC",
10432
+ "labels.waterHalo": "rgba(240, 242, 238, 0.72)",
10433
+ "land.fence": "#D8D8D8",
10434
+ "land.wall": "#C3C7C2",
10435
+ "landcover.barren": "#F9FAF8",
10436
+ "landcover.farmland": "#D0F1DC",
10437
+ "landcover.flowerbed": "#A5E9B9",
10438
+ "landcover.global.barren": "#F9FAF8",
10439
+ "landcover.global.crop": "#C9F2D0",
10440
+ "landcover.global.grass": "#D9F5DA",
10441
+ "landcover.global.shrub": "#ECFAF2",
10442
+ "landcover.global.snow": "#FEFEFE",
10443
+ "landcover.global.trees": "#B7F0C9",
10444
+ "landcover.global.urban": "#F0F2EE",
10445
+ "landcover.grass": "#ABEFBF",
10446
+ "landcover.greenspace": "#A5E9B9",
10447
+ "landcover.greenspaceDark": "#A5E9B9",
10448
+ "landcover.hedge": "#90C59C",
10449
+ "landcover.hedgeShade": "#6F9F7A",
10450
+ "landcover.ice": "#E7F5F7",
10451
+ "landcover.meadow": "#ABEFBF",
10452
+ "landcover.protected": "rgba(198, 227, 208, 0.5)",
10453
+ "landcover.recreationGround": "#A5E9B9",
10454
+ "landcover.rock": "#F9FAF8",
10455
+ "landcover.sand": "#E8EEC6",
10456
+ "landcover.scrub": "#ABEFBF",
10457
+ "landcover.urbanPark": "#A5E9B9",
10458
+ "landcover.villageGreen": "#ABEFBF",
10459
+ "landcover.wetland": "#C1F2CF",
10460
+ "landcover.wood": "#9BE1AF",
10461
+ "landuse.businessCorridor": "#F9EFDD",
10462
+ "landuse.businessCorridorOutline": "#E0DAC9",
10463
+ "landuse.cemetery": "#BCECCB",
10464
+ "landuse.civic": "#F0F2EE",
10465
+ "landuse.commercial": "#F9EFDD",
10466
+ "landuse.education": "#E7E8D2",
10467
+ "landuse.government": "#F0F2EE",
10468
+ "landuse.industrial": "#E4EAE9",
10469
+ "landuse.medical": "#F3E0D9",
10470
+ "landuse.military": "#F0F2EE",
10471
+ "landuse.parking": "#E8EEC6",
10472
+ "landuse.parkingOutline": "#E8EEC6",
10473
+ "landuse.railway": "#E4EAE9",
10474
+ "landuse.recreation": "#C5F6CE",
10475
+ "landuse.recreationOutline": "#8AE6A7",
10476
+ "landuse.residential": "#F0F2EE",
10477
+ "poi.arts-entertainment": "#D6239F",
10478
+ "poi.education": "#8A6529",
10479
+ "poi.food-drink": "#BB5B00",
10480
+ "poi.halo": "#FFFFFF",
10481
+ "poi.icon": "#50717F",
10482
+ "poi.label": "#50717F",
10483
+ "poi.landmark": "#D6239F",
10484
+ "poi.lodging": "#5C50E8",
10485
+ "poi.medical": "#E32A1B",
10486
+ "poi.park-nature": "#1B7A1D",
10487
+ "poi.public-services": "#50717F",
10488
+ "poi.religion": "#50717F",
10489
+ "poi.retail": "#007AC6",
10490
+ "poi.sport-leisure": "#008291",
10491
+ "poi.transport": "#195DCC",
10492
+ "poi.visitor-amenity": "#50717F",
10493
+ "roads.bridge": "#B9CED5",
10494
+ "roads.casing": "#8DB0BC",
10495
+ "roads.city.casing": "#8DB0BC",
10496
+ "roads.city.minor": "#DDE2E5",
10497
+ "roads.city.primary": "#D5DBDF",
10498
+ "roads.city.secondary": "#DEE3E6",
10499
+ "roads.city.tertiary": "#E3E7E9",
10500
+ "roads.city.tunnel": "#DEE7E9",
10501
+ "roads.city.tunnelCasing": "#8DB0BC",
10502
+ "roads.cycleway": "#61CD72",
10503
+ "roads.default": "#B9CED5",
10504
+ "roads.default.casing": "#8DB0BC",
10505
+ "roads.default.tunnel": "#DEE7E9",
10506
+ "roads.detail.casing": "#8AA7B0",
10507
+ "roads.ferry": "#2FA0E6",
10508
+ "roads.major": "#A4BCC4",
10509
+ "roads.minor": "#B9CED5",
10510
+ "roads.motorway": "#A4BCC4",
10511
+ "roads.motorway.casing": "#759AA6",
10512
+ "roads.motorway.tunnel": "#C5D4D8",
10513
+ "roads.parkPath": "#E7ECF0",
10514
+ "roads.path": "#E7ECF0",
10515
+ "roads.path.casing": "#C9C9C1",
10516
+ "roads.path.transition": "#F5F7F7",
10517
+ "roads.path.tunnel": "#EEF2F3",
10518
+ "roads.pedestrian.surface": "#F6F6F4",
10519
+ "roads.primary": "#A4BCC4",
10520
+ "roads.rail": "#A5A5A5",
10521
+ "roads.railTransit": "#A5A5A5",
10522
+ "roads.secondary": "#B9CED5",
10523
+ "roads.sidewalk.surface": "rgba(0, 0, 0, 0.06)",
10524
+ "roads.tertiary": "#B9CED5",
10525
+ "roads.trunk": "#A4BCC4",
10526
+ "roads.trunk.casing": "#6293A3",
10527
+ "roads.trunk.tunnel": "#C1D1D6",
10528
+ "roads.tunnel": "#D8E2E2",
10529
+ "sky.color": "#4AA0E2",
10530
+ "sky.glow": "#F5EBB9",
10531
+ "sky.horizon": "#D9EDF3",
10532
+ "surface.background": "#F0F2EE",
10533
+ "surface.background.overview": "#F0F2EE",
10534
+ "surface.building": "#EBECDE",
10535
+ "surface.land": "#F0F2EE",
10536
+ "surface.park": "#A5E9B9",
10537
+ "surface.water": "#91DFF7",
10538
+ "terrain.hillshade.accent": "#A0AD95",
10539
+ "terrain.hillshade.highlight": "#FFFFFF",
10540
+ "terrain.hillshade.shadow": "#6D7C68",
10541
+ "transit.primary": "#A5A5A5",
10542
+ "transit.rail": "#A5A5A5",
10543
+ "vegetation.tree.bark": "#BED4B5",
10544
+ "vegetation.tree.broadleaf.a": "#87BFA8",
10545
+ "vegetation.tree.broadleaf.b": "#9CD1B0",
10546
+ "vegetation.tree.broadleaf.c": "#ABDDA9",
10547
+ "vegetation.tree.broadleaf.d": "#B8E6C4",
10548
+ "vegetation.tree.conifer.a": "#80B098",
10549
+ "vegetation.tree.conifer.b": "#8EBDA1",
10550
+ "vegetation.tree.conifer.c": "#9CCDAD"
10551
+ };
10552
+ var streetsDayImages = {
10553
+ "poi.education": "unified-day-education",
10554
+ "poi.food-drink": "unified-day-food",
10555
+ "poi.lodging": "unified-day-lodging",
10556
+ "poi.medical": "unified-day-doctor",
10557
+ "poi.park-nature": "unified-day-nature",
10558
+ "poi.pictogram.aerialway": "unified-day-aerialway",
10559
+ "poi.pictogram.airport": "unified-day-airport",
10560
+ "poi.pictogram.bank": "unified-day-bank",
10561
+ "poi.pictogram.bar": "unified-day-bar",
10562
+ "poi.pictogram.beach": "unified-day-beach",
10563
+ "poi.pictogram.beauty": "unified-day-beauty",
10564
+ "poi.pictogram.bookstore": "unified-day-bookstore",
10565
+ "poi.pictogram.buddhist": "unified-day-buddhist",
10566
+ "poi.pictogram.bus": "unified-day-bus",
10567
+ "poi.pictogram.campsite": "unified-day-campsite",
10568
+ "poi.pictogram.car": "unified-day-car",
10569
+ "poi.pictogram.car-repair": "unified-day-car-repair",
10570
+ "poi.pictogram.charging-station": "unified-day-charging-station",
10571
+ "poi.pictogram.christian": "unified-day-christian",
10572
+ "poi.pictogram.clothing": "unified-day-clothing",
10573
+ "poi.pictogram.coffee": "unified-day-coffee",
10574
+ "poi.pictogram.college": "unified-day-college",
10575
+ "poi.pictogram.community": "unified-day-community",
10576
+ "poi.pictogram.convenience": "unified-day-convenience",
10577
+ "poi.pictogram.dentist": "unified-day-dentist",
10578
+ "poi.pictogram.doctor": "unified-day-doctor",
10579
+ "poi.pictogram.dog-park": "unified-day-dog-park",
10580
+ "poi.pictogram.drinking-water": "unified-day-drinking-water",
10581
+ "poi.pictogram.education": "unified-day-education",
10582
+ "poi.pictogram.electronics": "unified-day-electronics",
10583
+ "poi.pictogram.embassy": "unified-day-embassy",
10584
+ "poi.pictogram.fast-food": "unified-day-fast-food",
10585
+ "poi.pictogram.ferry": "unified-day-ferry",
10586
+ "poi.pictogram.fire-station": "unified-day-fire-station",
10587
+ "poi.pictogram.fitness": "unified-day-fitness",
10588
+ "poi.pictogram.florist": "unified-day-florist",
10589
+ "poi.pictogram.food": "unified-day-food",
10590
+ "poi.pictogram.fuel": "unified-day-fuel",
10591
+ "poi.pictogram.garden": "unified-day-garden",
10592
+ "poi.pictogram.golf": "unified-day-golf",
10593
+ "poi.pictogram.grocery": "unified-day-grocery",
10594
+ "poi.pictogram.harbor": "unified-day-harbor",
10595
+ "poi.pictogram.hardware": "unified-day-hardware",
10596
+ "poi.pictogram.health": "unified-day-health",
10597
+ "poi.pictogram.jewish": "unified-day-jewish",
10598
+ "poi.pictogram.laundry": "unified-day-laundry",
10599
+ "poi.pictogram.library": "unified-day-library",
10600
+ "poi.pictogram.lodging": "unified-day-lodging",
10601
+ "poi.pictogram.major-transit": "unified-day-major-transit",
10602
+ "poi.pictogram.mountain": "unified-day-mountain",
10603
+ "poi.pictogram.muslim": "unified-day-muslim",
10604
+ "poi.pictogram.natural": "unified-day-natural",
10605
+ "poi.pictogram.nature": "unified-day-nature",
10606
+ "poi.pictogram.parking": "unified-day-parking",
10607
+ "poi.pictogram.parking-garage": "unified-day-parking-garage",
10608
+ "poi.pictogram.pharmacy": "unified-day-pharmacy",
10609
+ "poi.pictogram.playground": "unified-day-playground",
10610
+ "poi.pictogram.plaza": "unified-day-plaza",
10611
+ "poi.pictogram.police": "unified-day-police",
10612
+ "poi.pictogram.post": "unified-day-post",
10613
+ "poi.pictogram.prison": "unified-day-prison",
10614
+ "poi.pictogram.rail": "unified-day-rail",
10615
+ "poi.pictogram.rail-light": "unified-day-rail-light",
10616
+ "poi.pictogram.services": "unified-day-services",
10617
+ "poi.pictogram.shopping": "unified-day-shopping",
10618
+ "poi.pictogram.sport": "unified-day-sport",
10619
+ "poi.pictogram.stadium": "unified-day-stadium",
10620
+ "poi.pictogram.swimming": "unified-day-swimming",
10621
+ "poi.pictogram.toilet": "unified-day-toilet",
10622
+ "poi.pictogram.town-hall": "unified-day-town-hall",
10623
+ "poi.pictogram.waterfall": "unified-day-waterfall",
10624
+ "poi.pictogram.worship": "unified-day-worship",
10625
+ "poi.public-services": "unified-day-town-hall",
10626
+ "poi.religion": "unified-day-worship",
10627
+ "poi.retail": "unified-day-shopping",
10628
+ "poi.sport-leisure": "unified-day-sport",
10629
+ "poi.transport": "unified-day-major-transit",
10630
+ "poi.visitor-amenity": "unified-day-services"
10631
+ };
10632
+
10633
+ // src/official/streets-time-colors.ts
10634
+ function parse(value) {
10635
+ if (value.startsWith("#")) {
10636
+ const hex2 = value.slice(1);
10637
+ const expanded = hex2.length < 5 ? [...hex2].map((digit) => digit + digit).join("") : hex2;
10638
+ return {
10639
+ rgb: [0, 2, 4].map((offset) => parseInt(expanded.slice(offset, offset + 2), 16)),
10640
+ alpha: expanded.length === 8 ? parseInt(expanded.slice(6), 16) / 255 : 1
10641
+ };
10642
+ }
10643
+ const channels2 = value.match(/[\d.]+/g)?.map(Number);
10644
+ if (!channels2 || channels2.length < 3) throw new Error(`Unsupported Streets color: ${value}`);
10645
+ return { rgb: channels2.slice(0, 3), alpha: channels2[3] ?? 1 };
10646
+ }
10647
+ var gray = (rgb) => rgb[0] * 0.2126 + rgb[1] * 0.7152 + rgb[2] * 0.0722;
10648
+ function transfer(value, from, to) {
10649
+ return to < from ? value * (to / from) : from < 255 ? value + (255 - value) * ((to - from) / (255 - from)) : value;
10650
+ }
10651
+ function referenceRole(role) {
10652
+ if (/^buildings\.(?:raised\.|model(?:Surface|Glass|Secondary|Roof|Accent)$)/.test(role))
10653
+ return "buildings.extrusion";
10654
+ if (role.startsWith("buildings.flat."))
10655
+ return role.endsWith("Outline") ? "buildings.outline" : "buildings.extrusion";
10656
+ if (role === "buildings.modelWater") return "hydro.water";
10657
+ if (role === "buildings.modelVegetation") return "vegetation.tree.broadleaf.b";
10658
+ if (role === "buildings.modelWood") return "vegetation.tree.bark";
10659
+ if (role === "vegetation.tree.outline") return "surface.park";
10660
+ if (role.startsWith("roads.overview."))
10661
+ return role.includes("casing") ? "roads.detail.casing" : "roads.motorway";
10662
+ if (role === "roads.accessOverview") return "roads.default";
10663
+ if (role === "roads.path.ground" || role === "roads.path.green") return "roads.path";
10664
+ if (role === "surface.background.transition") return "surface.background";
10665
+ if (role === "landcover.orchard" || role === "landcover.nursery") return "landcover.greenspace";
10666
+ return role;
10667
+ }
10668
+ function streetsTimeColors(day, referenceDay, referenceTime, monochrome, preset) {
10669
+ const temperature = {
10670
+ day: [1, 1, 1],
10671
+ dawn: [1.035, 1, 0.93],
10672
+ dusk: [1.045, 1, 0.97],
10673
+ night: [0.92, 0.97, 1.06]
10674
+ }[preset];
10675
+ return Object.fromEntries(
10676
+ Object.entries(day).map(([role, value]) => {
10677
+ if (role.startsWith("sky.") || /^(?:buildings\.(?:floodLight|modelEmission))$/.test(role))
10678
+ return [role, referenceTime[role] ?? value];
10679
+ if (role.startsWith("labels.shield.") || role === "roads.sidewalk.surface")
10680
+ return [role, referenceTime[role] ?? value];
10681
+ const anchor = referenceRole(role);
10682
+ const from = referenceDay[anchor];
10683
+ const to = referenceTime[anchor];
10684
+ if (!from || !to) throw new Error(`Missing Streets time-of-day anchor: ${role}`);
10685
+ const color = parse(value);
10686
+ if (role === "labels.waterHalo") color.alpha = parse(to).alpha;
10687
+ const source = parse(from).rgb;
10688
+ const target = parse(to).rgb;
10689
+ const rgb = monochrome ? Array(3).fill(transfer(gray(color.rgb), gray(source), gray(target))) : color.rgb.map(
10690
+ (channel, i) => transfer(channel, gray(source), gray(target)) * temperature[i]
10691
+ );
10692
+ const channels2 = rgb.map((channel) => Math.round(Math.max(0, Math.min(255, channel))));
10693
+ return [
10694
+ role,
10695
+ color.alpha < 1 ? `rgba(${channels2.join(", ")}, ${color.alpha})` : "#" + channels2.map((channel) => channel.toString(16).padStart(2, "0")).join("").toUpperCase()
10696
+ ];
10697
+ })
10698
+ );
10699
+ }
10700
+
10701
+ // src/official/streets-cartography-themes.ts
10702
+ var palettes = {
10703
+ day: ["#E8EAED", "#F3E9DF", "#D5D8DD", "#DDCCC0"],
10704
+ dawn: ["#E9E6E8", "#F6EDDF", "#D7D2D5", "#E2D4C2"],
10705
+ dusk: ["#383B46", "#474238", "#494D59", "#605746"],
10706
+ night: ["#2B2F3A", "#37352F", "#3A404D", "#4D483C"]
10707
+ };
10708
+ function colors(name) {
10709
+ const preset = name.startsWith("dark") ? "night" : name.startsWith("dusk") ? "dusk" : name.startsWith("dawn") ? "dawn" : "day";
10710
+ const values = palettes[preset].map((hex2) => {
10711
+ let rgb = [1, 3, 5].map((offset) => parseInt(hex2.slice(offset, offset + 2), 16));
10712
+ if (name.includes("monochrome")) {
10713
+ const gray2 = rgb[0] * 0.2126 + rgb[1] * 0.7152 + rgb[2] * 0.0722;
10714
+ rgb = [gray2, gray2, gray2];
10715
+ } else if (name.includes("faded")) {
10716
+ rgb = rgb.map((value) => value + (255 - value) * 0.08);
10717
+ }
10718
+ return "#" + rgb.map((value) => Math.round(value).toString(16).padStart(2, "0")).join("");
10719
+ });
10720
+ return Object.fromEntries(
10721
+ ["neutral", "active", "neutralOutline", "activeOutline"].map((role, index) => [
10722
+ `buildings.flat.${role}`,
10723
+ values[index]
10724
+ ])
10725
+ );
10726
+ }
10727
+ function streetsCartographyThemes(base) {
10728
+ const themes = Object.fromEntries(
10729
+ Object.entries(base).map(([name, theme]) => [
10730
+ name,
10731
+ defineTheme3(theme, {
10732
+ id: `streets-${name}`,
10733
+ version: 1,
10734
+ colorScheme: theme.colorScheme,
10735
+ typography: base.light.typography,
10736
+ tokens: {
10737
+ color: {
10738
+ ...colors(name),
10739
+ ...name === "light" ? streetsDayColors : {},
10740
+ "roads.accessOverview": colors(name)["buildings.flat.neutral"],
10741
+ "roads.path.ground": token10.color("roads.path"),
10742
+ "roads.path.green": "#FFFFFF",
10743
+ "surface.background.transition": token10.color(
10744
+ name === "light" ? "surface.background" : "surface.background.overview"
10745
+ ),
10746
+ "vegetation.tree.outline": name === "light" ? "#A0E5B5" : token10.color("surface.park"),
10747
+ "landcover.orchard": token10.color("landcover.farmland"),
10748
+ "landcover.nursery": token10.color("landcover.farmland"),
10749
+ "roads.overview.casing": token10.color("roads.detail.casing"),
10750
+ "roads.overview.major": token10.color("roads.motorway"),
10751
+ "roads.overview.majorClose": token10.color("roads.motorway"),
10752
+ "roads.overview.casingClose": token10.color("roads.detail.casing"),
10753
+ ...name === "light" ? streetsDayGroundColors : {},
10754
+ ...name === "light" ? streetsNetworkDayColors : {},
10755
+ // The ordinary city stays in warm limestone; authored parts add material contrast.
10756
+ "buildings.raised.neutral": name === "light" ? "#ECE8DE" : colors(name)["buildings.flat.neutral"],
10757
+ ...streetsBuildingColors(
10758
+ name === "light" ? "#EEEAE1" : colors(name)["buildings.flat.neutral"],
10759
+ theme.colorScheme === "dark",
10760
+ name.includes("monochrome")
10761
+ ),
10762
+ ...name === "light" ? {
10763
+ "vegetation.tree.bark": "#C6B493",
10764
+ "buildings.modelWood": "#C6B493",
10765
+ "buildings.flat.neutralOutline": "#B9BFBA",
10766
+ "buildings.flat.activeOutline": "#B9BFBA",
10767
+ "roads.path.ground": "#D5DAD7",
10768
+ "landcover.global.crop": "rgba(0, 0, 0, 0)"
10769
+ } : {}
10770
+ },
10771
+ font: base.light.tokens.font,
10772
+ image: { ...theme.tokens.image, ...name === "light" ? streetsDayImages : {} },
10773
+ number: Object.fromEntries([
10774
+ ["roads.path.groundOpacity", 1],
10775
+ ["labels.shield.spacing11", 420],
10776
+ ["labels.shield.spacing13", 480],
10777
+ ...[100, 85, 78, 55, 25].map((value) => [
10778
+ `land.climate.opacity${value === 100 ? "" : value}`,
10779
+ value / 100
10780
+ ])
10781
+ ])
10782
+ }
10783
+ })
10784
+ ])
10785
+ );
10786
+ const day = resolveTileflowTheme3(themes.light).tokens.color;
10787
+ const referenceDay = resolveTileflowTheme3(base.light).tokens.color;
10788
+ for (const [name, theme] of Object.entries(themes)) {
10789
+ if (!/^(?:dawn|dusk|dark)(?:-|$)/.test(name)) continue;
10790
+ const referenceTime = resolveTileflowTheme3(base[name]).tokens.color;
10791
+ themes[name] = defineTheme3(theme, {
10792
+ id: `streets-${name}`,
10793
+ version: 1,
10794
+ colorScheme: theme.colorScheme,
10795
+ tokens: {
10796
+ color: streetsTimeColors(
10797
+ { ...day, "landcover.global.crop": streetsDayGroundColors["landcover.global.crop"] },
10798
+ referenceDay,
10799
+ referenceTime,
10800
+ name.includes("monochrome"),
10801
+ name.startsWith("dawn") ? "dawn" : name.startsWith("dusk") ? "dusk" : "night"
10802
+ )
10803
+ }
10804
+ });
10805
+ }
10806
+ return themes;
10807
+ }
10808
+
9972
10809
  // src/official/streets-lighting.ts
9973
10810
  var defaultLighting = {
9974
10811
  dawn: {
@@ -9985,11 +10822,11 @@ var defaultLighting = {
9985
10822
  sun: {
9986
10823
  azimuth: 180,
9987
10824
  altitude: 70,
9988
- color: "#FFFFFF",
9989
- intensity: 0.2,
9990
- shadowIntensity: 1
10825
+ color: "#FFF5E8",
10826
+ intensity: 0.3,
10827
+ shadowIntensity: 0.8
9991
10828
  },
9992
- ambient: { color: "#FFFFFF", intensity: 0.8 }
10829
+ ambient: { color: "#E2EBF7", intensity: 0.7 }
9993
10830
  },
9994
10831
  dusk: {
9995
10832
  sun: {
@@ -10013,51 +10850,42 @@ var defaultLighting = {
10013
10850
  ambient: { color: "#001638", intensity: 0.5 }
10014
10851
  }
10015
10852
  };
10016
- var fadedLighting = {
10853
+ function withLightColors(colors2) {
10854
+ return Object.fromEntries(
10855
+ Object.keys(defaultLighting).map((preset) => [
10856
+ preset,
10857
+ {
10858
+ sun: { ...defaultLighting[preset].sun, color: colors2[preset].sun },
10859
+ ambient: { ...defaultLighting[preset].ambient, color: colors2[preset].ambient }
10860
+ }
10861
+ ])
10862
+ );
10863
+ }
10864
+ var fadedLighting = withLightColors({
10017
10865
  dawn: {
10018
- sun: { ...defaultLighting.dawn.sun, color: "rgb(252.513725, 222.937729, 169.273879)" },
10019
- ambient: { color: "rgb(254, 244.681815, 235.980392)", intensity: 0.75 }
10866
+ sun: "rgb(252.513725, 222.937729, 169.273879)",
10867
+ ambient: "rgb(254, 244.681815, 235.980392)"
10020
10868
  },
10021
- day: defaultLighting.day,
10869
+ day: { sun: "#FFF8EF", ambient: "#EBF0F8" },
10022
10870
  dusk: {
10023
- sun: { ...defaultLighting.dusk.sun, color: "rgb(252.513725, 217.250027, 164.945083)" },
10024
- ambient: { color: "rgb(87.776471, 97.427724, 126.419608)", intensity: 0.8 }
10871
+ sun: "rgb(252.513725, 217.250027, 164.945083)",
10872
+ ambient: "rgb(87.776471, 97.427724, 126.419608)"
10025
10873
  },
10026
- night: {
10027
- sun: { ...defaultLighting.night.sun, color: "rgb(97.815686, 102.955556, 118.333333)" },
10028
- ambient: { color: "rgb(2, 38.117647, 86.886275)", intensity: 0.5 }
10029
- }
10030
- };
10031
- var monochromeLighting = {
10874
+ night: { sun: "rgb(97.815686, 102.955556, 118.333333)", ambient: "rgb(2, 38.117647, 86.886275)" }
10875
+ });
10876
+ var monochromeLighting = withLightColors({
10032
10877
  dawn: {
10033
- sun: {
10034
- ...defaultLighting.dawn.sun,
10035
- altitude: 50,
10036
- color: "rgb(226.147143, 226.147143, 226.147143)",
10037
- intensity: 0.35
10038
- },
10039
- ambient: { color: "rgb(245.703576, 245.703576, 245.703576)", intensity: 0.75 }
10040
- },
10041
- day: {
10042
- sun: defaultLighting.day.sun,
10043
- ambient: { ...defaultLighting.day.ambient, intensity: 0.85 }
10878
+ sun: "rgb(226.147143, 226.147143, 226.147143)",
10879
+ ambient: "rgb(245.703576, 245.703576, 245.703576)"
10044
10880
  },
10881
+ day: { sun: "#FFFFFF", ambient: "#FFFFFF" },
10045
10882
  dusk: {
10046
- sun: {
10047
- ...defaultLighting.dusk.sun,
10048
- altitude: 60,
10049
- color: "rgb(163.817309, 163.817309, 163.817309)",
10050
- intensity: 0.15
10051
- },
10052
- ambient: { color: "rgb(126.294118, 126.294118, 126.294118)", intensity: 0.1 }
10883
+ sun: "rgb(163.817309, 163.817309, 163.817309)",
10884
+ ambient: "rgb(126.294118, 126.294118, 126.294118)"
10053
10885
  },
10054
- night: {
10055
- // Standard's monochrome LUT maps a black light input to #353535. Feeding the
10056
- // raw black into the scene would incorrectly remove all night illumination.
10057
- sun: { ...defaultLighting.night.sun, color: "#353535", intensity: 0.25 },
10058
- ambient: { color: "#353535", intensity: 0 }
10059
- }
10060
- };
10886
+ // Retain legible artistic moonlight; black would remove all night illumination.
10887
+ night: { sun: "#353535", ambient: "#353535" }
10888
+ });
10061
10889
  var streetsLighting = {
10062
10890
  default: defaultLighting,
10063
10891
  faded: fadedLighting,
@@ -10226,9 +11054,9 @@ function hex(rgb) {
10226
11054
  }
10227
11055
  function inFamily(color, family) {
10228
11056
  const rgb = channels(color);
10229
- const gray = rgb[0] * 0.2126 + rgb[1] * 0.7152 + rgb[2] * 0.0722;
10230
- if (family === "monochrome") return hex([gray, gray, gray]);
10231
- if (family === "faded") return hex(rgb.map((channel) => channel + (gray - channel) * 0.35));
11057
+ const gray2 = rgb[0] * 0.2126 + rgb[1] * 0.7152 + rgb[2] * 0.0722;
11058
+ if (family === "monochrome") return hex([gray2, gray2, gray2]);
11059
+ if (family === "faded") return hex(rgb.map((channel) => channel + (gray2 - channel) * 0.35));
10232
11060
  return color;
10233
11061
  }
10234
11062
  function streetsSkyTokens(preset, family) {
@@ -10748,17 +11576,17 @@ function formatStreetsColor({ a, b, g, r }, format) {
10748
11576
  const hex2 = (value) => channel(value).toString(16).padStart(2, "0").toUpperCase();
10749
11577
  return `#${hex2(r)}${hex2(g)}${hex2(b)}${format.length === 9 ? hex2(a * 255) : ""}`;
10750
11578
  }
10751
- function adjustStreetsColors(colors, transform) {
11579
+ function adjustStreetsColors(colors2, transform) {
10752
11580
  return Object.fromEntries(
10753
- Object.entries(colors).map(([role, value]) => [
11581
+ Object.entries(colors2).map(([role, value]) => [
10754
11582
  role,
10755
11583
  formatStreetsColor(transform(role, parseStreetsColor(value)), value)
10756
11584
  ])
10757
11585
  );
10758
11586
  }
10759
11587
  function grayscale(color) {
10760
- const gray = color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;
10761
- return { ...color, r: gray, g: gray, b: gray };
11588
+ const gray2 = color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;
11589
+ return { ...color, r: gray2, g: gray2, b: gray2 };
10762
11590
  }
10763
11591
  function isDarkStreetsPreset(preset) {
10764
11592
  return preset === "dusk" || preset === "night";
@@ -10767,8 +11595,8 @@ function transferStreetsColor(color, from, to, monochrome) {
10767
11595
  const source = parseStreetsColor(from);
10768
11596
  const target = parseStreetsColor(to);
10769
11597
  if (monochrome) {
10770
- const gray = grayscale(color).r + target.r - grayscale(source).r;
10771
- return { ...color, r: gray, g: gray, b: gray };
11598
+ const gray2 = grayscale(color).r + target.r - grayscale(source).r;
11599
+ return { ...color, r: gray2, g: gray2, b: gray2 };
10772
11600
  }
10773
11601
  return {
10774
11602
  ...color,
@@ -10785,7 +11613,7 @@ function calibratedStreetsColors(preset, theme) {
10785
11613
  const roadCasings = streetsRoadCasingProfiles[`${theme}-${preset}`];
10786
11614
  const baseline = streetsSurfaceProfiles[dark ? "default-night" : "default-day"];
10787
11615
  const monochrome = theme === "monochrome";
10788
- const colors = adjustStreetsColors(base, (role, color) => {
11616
+ const colors2 = adjustStreetsColors(base, (role, color) => {
10789
11617
  if (role.startsWith("labels.shield.") || role === "roads.sidewalk.surface") return color;
10790
11618
  const shift = (from, to) => transferStreetsColor(color, from, to, monochrome);
10791
11619
  const foreground = () => monochrome ? grayscale(color) : color;
@@ -10839,7 +11667,7 @@ function calibratedStreetsColors(preset, theme) {
10839
11667
  return shift(base["surface.background"], profile.land);
10840
11668
  return foreground();
10841
11669
  });
10842
- return { ...colors, "roads.detail.casing": roadCasings.hd };
11670
+ return { ...colors2, "roads.detail.casing": roadCasings.hd };
10843
11671
  }
10844
11672
  function streetsPaletteColors(preset, colorTheme) {
10845
11673
  const palette = {
@@ -10855,7 +11683,11 @@ function streetsPaletteColors(preset, colorTheme) {
10855
11683
  "buildings.modelWood": palette["vegetation.tree.bark"],
10856
11684
  "buildings.floodLight": !isDarkStreetsPreset(preset) ? "#FFFFFF" : colorTheme === "monochrome" ? "#E5E5E5" : colorTheme === "faded" ? "#F8E4C4" : "#F5CFA8",
10857
11685
  ...streetsModelLighting(preset, colorTheme).colors,
10858
- ...streetsBuildingColors(palette["buildings.extrusion"], isDarkStreetsPreset(preset)),
11686
+ ...streetsBuildingColors(
11687
+ palette["buildings.extrusion"],
11688
+ isDarkStreetsPreset(preset),
11689
+ colorTheme === "monochrome"
11690
+ ),
10859
11691
  ...streetsSkyTokens(preset, colorTheme).colors
10860
11692
  };
10861
11693
  }
@@ -10896,7 +11728,7 @@ var streetsImages = {
10896
11728
  "roads.shield.rectangleYellow": "road-shield-rectangle-yellow",
10897
11729
  "roads.sidewalkPattern": "sidewalk-dot"
10898
11730
  };
10899
- var streetsLightTheme = defineTheme3({
11731
+ var streetsLightTheme = defineTheme4({
10900
11732
  id: "streets-light",
10901
11733
  version: 1,
10902
11734
  colorScheme: "light",
@@ -10907,11 +11739,11 @@ var streetsLightTheme = defineTheme3({
10907
11739
  image: { ...streetsImages, ...streetsPoiImageTokens("light") }
10908
11740
  },
10909
11741
  typography: {
10910
- font: token7.font("default"),
10911
- places: { font: token7.font("places") },
10912
- poi: { font: token7.font("default") },
10913
- roads: { font: token7.font("default") },
10914
- water: { font: token7.font("default") }
11742
+ font: token11.font("default"),
11743
+ places: { font: token11.font("places") },
11744
+ poi: { font: token11.font("default") },
11745
+ roads: { font: token11.font("default") },
11746
+ water: { font: token11.font("default") }
10915
11747
  },
10916
11748
  lighting: {
10917
11749
  ...streetsLighting.default.day,
@@ -10922,29 +11754,14 @@ var streetsLightTheme = defineTheme3({
10922
11754
  position: [1.15, 180, 20]
10923
11755
  }
10924
11756
  });
10925
- var streetsDarkTheme = defineTheme3({
11757
+ var streetsDarkTheme = defineTheme4(streetsLightTheme, {
10926
11758
  id: "streets-dark",
10927
11759
  version: 1,
10928
11760
  colorScheme: "dark",
10929
11761
  tokens: {
11762
+ image: { ...streetsImages, ...streetsPoiImageTokens("dark") },
10930
11763
  color: streetsPaletteColors("night", "default"),
10931
- number: streetsLightingNumbers("night", "default"),
10932
- font: streetsFonts2,
10933
- image: {
10934
- ...streetsImages,
10935
- ...streetsPoiImageTokens("dark"),
10936
- ...Object.fromEntries(
10937
- Object.entries(streetsImages).filter(([role]) => role.startsWith("vegetation.tree.")).map(([role, image2]) => [role, `${image2}-dark`])
10938
- ),
10939
- "roads.sidewalkPattern": "sidewalk-dot-dark"
10940
- }
10941
- },
10942
- typography: {
10943
- font: token7.font("default"),
10944
- places: { font: token7.font("places") },
10945
- poi: { font: token7.font("default") },
10946
- roads: { font: token7.font("default") },
10947
- water: { font: token7.font("default") }
11764
+ number: streetsLightingNumbers("night", "default")
10948
11765
  },
10949
11766
  lighting: {
10950
11767
  ...streetsLighting.default.night,
@@ -10958,84 +11775,90 @@ var streetsDarkTheme = defineTheme3({
10958
11775
  });
10959
11776
  function defineStreetsPaletteTheme(name, preset, colorTheme) {
10960
11777
  const isDark = isDarkStreetsPreset(preset);
10961
- const imageVariant = colorTheme === "monochrome" ? isDark ? "monochrome-dark" : "monochrome" : void 0;
10962
- return defineTheme3(isDark ? streetsDarkTheme : streetsLightTheme, {
11778
+ return defineTheme4(isDark ? streetsDarkTheme : streetsLightTheme, {
10963
11779
  id: `streets-${name}`,
10964
11780
  version: 1,
10965
11781
  colorScheme: isDark ? "dark" : "light",
10966
11782
  lighting: streetsLighting[colorTheme][preset],
10967
11783
  tokens: {
11784
+ image: {
11785
+ ...streetsImages,
11786
+ ...streetsPoiImageTokens(
11787
+ colorTheme === "monochrome" ? isDark ? "monochrome-dark" : "monochrome" : isDark ? "dark" : "light"
11788
+ )
11789
+ },
10968
11790
  color: streetsPaletteColors(preset, colorTheme),
10969
- number: streetsLightingNumbers(preset, colorTheme),
10970
- ...imageVariant ? { image: streetsPoiImageTokens(imageVariant) } : {}
11791
+ number: streetsLightingNumbers(preset, colorTheme)
10971
11792
  }
10972
11793
  });
10973
11794
  }
10974
- var streetsThemes = Object.freeze({
10975
- light: streetsLightTheme,
10976
- dark: streetsDarkTheme,
10977
- dawn: defineStreetsPaletteTheme("dawn", "dawn", "default"),
10978
- dusk: defineStreetsPaletteTheme("dusk", "dusk", "default"),
10979
- faded: defineStreetsPaletteTheme("faded", "day", "faded"),
10980
- monochrome: defineStreetsPaletteTheme("monochrome", "day", "monochrome"),
10981
- "dawn-faded": defineStreetsPaletteTheme("dawn-faded", "dawn", "faded"),
10982
- "dawn-monochrome": defineStreetsPaletteTheme("dawn-monochrome", "dawn", "monochrome"),
10983
- "dusk-faded": defineStreetsPaletteTheme("dusk-faded", "dusk", "faded"),
10984
- "dusk-monochrome": defineStreetsPaletteTheme("dusk-monochrome", "dusk", "monochrome"),
10985
- "dark-faded": defineStreetsPaletteTheme("dark-faded", "night", "faded"),
10986
- "dark-monochrome": defineStreetsPaletteTheme("dark-monochrome", "night", "monochrome")
10987
- });
11795
+ var streetsThemes = Object.freeze(
11796
+ streetsCartographyThemes({
11797
+ light: streetsLightTheme,
11798
+ dark: streetsDarkTheme,
11799
+ dawn: defineStreetsPaletteTheme("dawn", "dawn", "default"),
11800
+ dusk: defineStreetsPaletteTheme("dusk", "dusk", "default"),
11801
+ faded: defineStreetsPaletteTheme("faded", "day", "faded"),
11802
+ monochrome: defineStreetsPaletteTheme("monochrome", "day", "monochrome"),
11803
+ "dawn-faded": defineStreetsPaletteTheme("dawn-faded", "dawn", "faded"),
11804
+ "dawn-monochrome": defineStreetsPaletteTheme("dawn-monochrome", "dawn", "monochrome"),
11805
+ "dusk-faded": defineStreetsPaletteTheme("dusk-faded", "dusk", "faded"),
11806
+ "dusk-monochrome": defineStreetsPaletteTheme("dusk-monochrome", "dusk", "monochrome"),
11807
+ "dark-faded": defineStreetsPaletteTheme("dark-faded", "night", "faded"),
11808
+ "dark-monochrome": defineStreetsPaletteTheme("dark-monochrome", "night", "monochrome")
11809
+ })
11810
+ );
10988
11811
  var streetsVisual = {
10989
11812
  boundary: {
10990
- admin: token7.color("boundaries.admin"),
10991
- halo: token7.color("boundaries.halo"),
10992
- regional: token7.color("boundaries.regional"),
10993
- overviewLabel: token7.color("labels.overview")
11813
+ admin: token11.color("boundaries.admin"),
11814
+ halo: token11.color("boundaries.halo"),
11815
+ regional: token11.color("boundaries.regional"),
11816
+ overviewLabel: token11.color("labels.overview")
10994
11817
  },
10995
11818
  building: {
10996
- contactShadow: token7.color("buildings.contactShadow"),
10997
- extrusion: token7.color("buildings.extrusion"),
10998
- fill: token7.color("buildings.fill"),
10999
- outline: token7.color("buildings.outline"),
11000
- shadow: token7.color("buildings.shadow")
11819
+ contactShadow: token11.color("buildings.contactShadow"),
11820
+ extrusion: token11.color("buildings.extrusion"),
11821
+ fill: token11.color("buildings.fill"),
11822
+ outline: token11.color("buildings.outline"),
11823
+ shadow: token11.color("buildings.shadow")
11001
11824
  },
11002
11825
  terrain: {
11003
- accent: token7.color("terrain.hillshade.accent"),
11004
- highlight: token7.color("terrain.hillshade.highlight"),
11005
- shadow: token7.color("terrain.hillshade.shadow")
11826
+ accent: token11.color("terrain.hillshade.accent"),
11827
+ highlight: token11.color("terrain.hillshade.highlight"),
11828
+ shadow: token11.color("terrain.hillshade.shadow")
11006
11829
  },
11007
11830
  hydro: {
11008
- depth0: token7.color("hydro.depth.m0"),
11009
- depth200: token7.color("hydro.depth.m200"),
11010
- depth2000: token7.color("hydro.depth.m2000"),
11011
- depth7000: token7.color("hydro.depth.m7000"),
11012
- ocean: token7.color("hydro.ocean"),
11013
- water: token7.color("hydro.water"),
11014
- overview: token7.color("hydro.water.overview"),
11015
- regional: token7.color("hydro.water.regional"),
11016
- waterway: token7.color("hydro.waterway")
11831
+ depth0: token11.color("hydro.depth.m0"),
11832
+ depth200: token11.color("hydro.depth.m200"),
11833
+ depth2000: token11.color("hydro.depth.m2000"),
11834
+ depth7000: token11.color("hydro.depth.m7000"),
11835
+ ocean: token11.color("hydro.ocean"),
11836
+ water: token11.color("hydro.water"),
11837
+ overview: token11.color("hydro.water.overview"),
11838
+ regional: token11.color("hydro.water.regional"),
11839
+ waterway: token11.color("hydro.waterway")
11017
11840
  },
11018
11841
  label: {
11019
- address: token7.color("labels.address"),
11020
- aerodrome: token7.color("labels.aerodrome"),
11021
- country: token7.color("labels.country"),
11022
- ferry: token7.color("labels.ferry"),
11023
- ferryHalo: token7.color("labels.ferryHalo"),
11024
- halo: token7.color("labels.halo"),
11025
- muted: token7.color("labels.muted"),
11026
- neighborhood: token7.color("labels.neighborhood"),
11027
- overview: token7.color("labels.overview"),
11028
- poi: token7.color("labels.poi"),
11029
- primary: token7.color("labels.primary"),
11030
- road: token7.color("labels.road"),
11031
- settlement: token7.color("labels.settlement"),
11032
- shieldDark: token7.color("labels.shield.dark"),
11033
- shieldLight: token7.color("labels.shield.light"),
11034
- strong: token7.color("labels.strong"),
11035
- water: token7.color("labels.water"),
11036
- waterHalo: token7.color("labels.waterHalo"),
11037
- placeHalo: token7.color("labels.placeHalo"),
11038
- roadHalo: token7.color("labels.roadHalo")
11842
+ address: token11.color("labels.address"),
11843
+ aerodrome: token11.color("labels.aerodrome"),
11844
+ country: token11.color("labels.country"),
11845
+ ferry: token11.color("labels.ferry"),
11846
+ ferryHalo: token11.color("labels.ferryHalo"),
11847
+ halo: token11.color("labels.halo"),
11848
+ muted: token11.color("labels.muted"),
11849
+ neighborhood: token11.color("labels.neighborhood"),
11850
+ overview: token11.color("labels.overview"),
11851
+ poi: token11.color("labels.poi"),
11852
+ primary: token11.color("labels.primary"),
11853
+ road: token11.color("labels.road"),
11854
+ settlement: token11.color("labels.settlement"),
11855
+ shieldDark: token11.color("labels.shield.dark"),
11856
+ shieldLight: token11.color("labels.shield.light"),
11857
+ strong: token11.color("labels.strong"),
11858
+ water: token11.color("labels.water"),
11859
+ waterHalo: token11.color("labels.waterHalo"),
11860
+ placeHalo: token11.color("labels.placeHalo"),
11861
+ roadHalo: token11.color("labels.roadHalo")
11039
11862
  },
11040
11863
  landcover: Object.fromEntries(
11041
11864
  [
@@ -11056,12 +11879,12 @@ var streetsVisual = {
11056
11879
  "villageGreen",
11057
11880
  "wetland",
11058
11881
  "wood"
11059
- ].map((name) => [name, token7.color(`landcover.${name}`)])
11882
+ ].map((name) => [name, token11.color(`landcover.${name}`)])
11060
11883
  ),
11061
11884
  globalLandcover: Object.fromEntries(
11062
11885
  ["barren", "crop", "grass", "shrub", "snow", "trees", "urban"].map((name) => [
11063
11886
  name,
11064
- token7.color(`landcover.global.${name}`)
11887
+ token11.color(`landcover.global.${name}`)
11065
11888
  ])
11066
11889
  ),
11067
11890
  landuse: Object.fromEntries(
@@ -11082,7 +11905,7 @@ var streetsVisual = {
11082
11905
  "recreation",
11083
11906
  "recreationOutline",
11084
11907
  "residential"
11085
- ].map((name) => [name, token7.color(`landuse.${name}`)])
11908
+ ].map((name) => [name, token11.color(`landuse.${name}`)])
11086
11909
  ),
11087
11910
  poi: Object.fromEntries(
11088
11911
  [
@@ -11102,120 +11925,120 @@ var streetsVisual = {
11102
11925
  "sport-leisure",
11103
11926
  "transport",
11104
11927
  "visitor-amenity"
11105
- ].map((name) => [name, token7.color(`poi.${name}`)])
11928
+ ].map((name) => [name, token11.color(`poi.${name}`)])
11106
11929
  ),
11107
11930
  road: {
11108
- casing: token7.color("roads.default.casing"),
11109
- detailCasing: token7.color("roads.detail.casing"),
11110
- cityCasing: token7.color("roads.city.casing"),
11111
- cityMinor: token7.color("roads.city.minor"),
11112
- cityPrimary: token7.color("roads.city.primary"),
11113
- citySecondary: token7.color("roads.city.secondary"),
11114
- cityTertiary: token7.color("roads.city.tertiary"),
11115
- cityTunnel: token7.color("roads.city.tunnel"),
11116
- cityTunnelCasing: token7.color("roads.city.tunnelCasing"),
11117
- cycleway: token7.color("roads.cycleway"),
11118
- default: token7.color("roads.default"),
11119
- ferry: token7.color("roads.ferry"),
11120
- motorway: token7.color("roads.motorway"),
11121
- motorwayCasing: token7.color("roads.motorway.casing"),
11122
- motorwayTunnel: token7.color("roads.motorway.tunnel"),
11123
- parkPath: token7.color("roads.parkPath"),
11124
- path: token7.color("roads.path"),
11125
- pathCasing: token7.color("roads.path.casing"),
11126
- pathTransition: token7.color("roads.path.transition"),
11127
- pathTunnel: token7.color("roads.path.tunnel"),
11128
- pedestrianSurface: token7.color("roads.pedestrian.surface"),
11129
- primary: token7.color("roads.primary"),
11130
- rail: token7.color("roads.rail"),
11131
- railTransit: token7.color("roads.railTransit"),
11132
- sidewalkSurface: token7.color("roads.sidewalk.surface"),
11133
- trunk: token7.color("roads.trunk"),
11134
- trunkCasing: token7.color("roads.trunk.casing"),
11135
- trunkTunnel: token7.color("roads.trunk.tunnel"),
11136
- tunnel: token7.color("roads.default.tunnel")
11931
+ casing: token11.color("roads.default.casing"),
11932
+ detailCasing: token11.color("roads.detail.casing"),
11933
+ cityCasing: token11.color("roads.city.casing"),
11934
+ cityMinor: token11.color("roads.city.minor"),
11935
+ cityPrimary: token11.color("roads.city.primary"),
11936
+ citySecondary: token11.color("roads.city.secondary"),
11937
+ cityTertiary: token11.color("roads.city.tertiary"),
11938
+ cityTunnel: token11.color("roads.city.tunnel"),
11939
+ cityTunnelCasing: token11.color("roads.city.tunnelCasing"),
11940
+ cycleway: token11.color("roads.cycleway"),
11941
+ default: token11.color("roads.default"),
11942
+ ferry: token11.color("roads.ferry"),
11943
+ motorway: token11.color("roads.motorway"),
11944
+ motorwayCasing: token11.color("roads.motorway.casing"),
11945
+ motorwayTunnel: token11.color("roads.motorway.tunnel"),
11946
+ parkPath: token11.color("roads.parkPath"),
11947
+ path: token11.color("roads.path"),
11948
+ pathCasing: token11.color("roads.path.casing"),
11949
+ pathTransition: token11.color("roads.path.transition"),
11950
+ pathTunnel: token11.color("roads.path.tunnel"),
11951
+ pedestrianSurface: token11.color("roads.pedestrian.surface"),
11952
+ primary: token11.color("roads.primary"),
11953
+ rail: token11.color("roads.rail"),
11954
+ railTransit: token11.color("roads.railTransit"),
11955
+ sidewalkSurface: token11.color("roads.sidewalk.surface"),
11956
+ trunk: token11.color("roads.trunk"),
11957
+ trunkCasing: token11.color("roads.trunk.casing"),
11958
+ trunkTunnel: token11.color("roads.trunk.tunnel"),
11959
+ tunnel: token11.color("roads.default.tunnel")
11137
11960
  },
11138
11961
  surface: {
11139
- background: token7.color("surface.background"),
11140
- backgroundOverview: token7.color("surface.background.overview"),
11141
- building: token7.color("surface.building"),
11142
- land: token7.color("surface.land"),
11143
- park: token7.color("surface.park"),
11144
- water: token7.color("surface.water")
11962
+ background: token11.color("surface.background"),
11963
+ backgroundOverview: token11.color("surface.background.overview"),
11964
+ building: token11.color("surface.building"),
11965
+ land: token11.color("surface.land"),
11966
+ park: token11.color("surface.park"),
11967
+ water: token11.color("surface.water")
11145
11968
  },
11146
- transit: token7.color("transit.primary"),
11969
+ transit: token11.color("transit.primary"),
11147
11970
  barrier: {
11148
- fence: token7.color("land.fence"),
11149
- hedge: token7.color("landcover.hedge"),
11150
- hedgeShade: token7.color("landcover.hedgeShade"),
11151
- wall: token7.color("land.wall")
11971
+ fence: token11.color("land.fence"),
11972
+ hedge: token11.color("landcover.hedge"),
11973
+ hedgeShade: token11.color("landcover.hedgeShade"),
11974
+ wall: token11.color("land.wall")
11152
11975
  },
11153
11976
  tree: {
11154
- bark: token7.color("vegetation.tree.bark"),
11977
+ bark: token11.color("vegetation.tree.bark"),
11155
11978
  broadleaf: ["a", "b", "c", "d"].map(
11156
- (suffix) => token7.color(`vegetation.tree.broadleaf.${suffix}`)
11979
+ (suffix) => token11.color(`vegetation.tree.broadleaf.${suffix}`)
11157
11980
  ),
11158
- conifer: ["a", "b", "c"].map((suffix) => token7.color(`vegetation.tree.conifer.${suffix}`))
11981
+ conifer: ["a", "b", "c"].map((suffix) => token11.color(`vegetation.tree.conifer.${suffix}`))
11159
11982
  },
11160
11983
  image: {
11161
- crosswalk: token7.image("roads.crosswalk"),
11162
- oneway: token7.image("roads.oneway"),
11163
- shieldCircleNeutral: token7.image("roads.shield.circleNeutral"),
11164
- shieldRectangleBlue: token7.image("roads.shield.rectangleBlue"),
11165
- shieldRectangleGreen: token7.image("roads.shield.rectangleGreen"),
11166
- shieldRectangleNeutral: token7.image("roads.shield.rectangleNeutral"),
11167
- shieldRectangleOrange: token7.image("roads.shield.rectangleOrange"),
11168
- shieldRectangleRed: token7.image("roads.shield.rectangleRed"),
11169
- shieldRectangleYellow: token7.image("roads.shield.rectangleYellow"),
11170
- sidewalkPattern: token7.image("roads.sidewalkPattern")
11984
+ crosswalk: token11.image("roads.crosswalk"),
11985
+ oneway: token11.image("roads.oneway"),
11986
+ shieldCircleNeutral: token11.image("roads.shield.circleNeutral"),
11987
+ shieldRectangleBlue: token11.image("roads.shield.rectangleBlue"),
11988
+ shieldRectangleGreen: token11.image("roads.shield.rectangleGreen"),
11989
+ shieldRectangleNeutral: token11.image("roads.shield.rectangleNeutral"),
11990
+ shieldRectangleOrange: token11.image("roads.shield.rectangleOrange"),
11991
+ shieldRectangleRed: token11.image("roads.shield.rectangleRed"),
11992
+ shieldRectangleYellow: token11.image("roads.shield.rectangleYellow"),
11993
+ sidewalkPattern: token11.image("roads.sidewalkPattern")
11171
11994
  },
11172
11995
  font: {
11173
- default: token7.font("default"),
11174
- navigation: token7.font("navigation"),
11175
- shield: token7.font("shield"),
11176
- places: token7.font("places"),
11177
- regular: token7.font("regular"),
11178
- water: token7.font("water")
11996
+ default: token11.font("default"),
11997
+ navigation: token11.font("navigation"),
11998
+ shield: token11.font("shield"),
11999
+ places: token11.font("places"),
12000
+ regular: token11.font("regular"),
12001
+ water: token11.font("water")
11179
12002
  }
11180
12003
  };
11181
12004
 
11182
12005
  // src/official/streets-trees.ts
11183
12006
  import {
11184
- expr as expr11,
11185
- field as field10,
11186
- renderPass as renderPass9,
11187
- token as token8,
12007
+ expr as expr13,
12008
+ field as field13,
12009
+ renderPass as renderPass12,
12010
+ token as token12,
11188
12011
  vegetation as vegetation5,
11189
- withRenderStack as withRenderStack9,
11190
- zoom as zoom9
12012
+ withRenderStack as withRenderStack10,
12013
+ zoom as zoom12
11191
12014
  } from "@tileflow/core";
11192
- var seed = expr11.toNumber(expr11.id(), 0);
11193
- var genus = expr11.get(field10("genus"));
11194
- var leaf = expr11.get(field10("leafType"));
11195
- var named = (names) => expr11.match(
12015
+ var seed = expr13.toNumber(expr13.id(), 0);
12016
+ var genus = expr13.get(field13("genus"));
12017
+ var leaf = expr13.get(field13("leafType"));
12018
+ var named = (names) => expr13.match(
11196
12019
  genus,
11197
12020
  [{ labels: names.flatMap((name) => [name, name.toLowerCase()]), value: true }],
11198
12021
  false
11199
12022
  );
11200
- var image = (form) => token8.image(`vegetation.tree.${form}`);
11201
- var broadleaf = expr11.match(
11202
- expr11.modulo(seed, 3),
12023
+ var image = (form) => token12.image(`vegetation.tree.${form}`);
12024
+ var broadleaf = expr13.match(
12025
+ expr13.modulo(seed, 3),
11203
12026
  [
11204
12027
  { labels: [0], value: image("round") },
11205
12028
  { labels: [1], value: image("open") }
11206
12029
  ],
11207
12030
  image("tall")
11208
12031
  );
11209
- var palm = expr11.match(
11210
- expr11.modulo(seed, 2),
12032
+ var palm = expr13.match(
12033
+ expr13.modulo(seed, 2),
11211
12034
  [{ labels: [0], value: image("palm-feather") }],
11212
12035
  image("palm-fan")
11213
12036
  );
11214
- var crownImage = expr11.case(
12037
+ var crownImage = expr13.case(
11215
12038
  [
11216
12039
  {
11217
- when: expr11.any(
11218
- expr11.eq(leaf, "palm"),
12040
+ when: expr13.any(
12041
+ expr13.eq(leaf, "palm"),
11219
12042
  named([
11220
12043
  "Acoelorrhaphe",
11221
12044
  "Adonidia",
@@ -11254,8 +12077,8 @@ var crownImage = expr11.case(
11254
12077
  },
11255
12078
  { when: named(["Cupressus", "Calocedrus", "Thuja"]), value: image("columnar") },
11256
12079
  {
11257
- when: expr11.any(
11258
- expr11.eq(leaf, "needleleaved"),
12080
+ when: expr13.any(
12081
+ expr13.eq(leaf, "needleleaved"),
11259
12082
  named([
11260
12083
  "Abies",
11261
12084
  "Araucaria",
@@ -11337,16 +12160,16 @@ var crownImage = expr11.case(
11337
12160
  ],
11338
12161
  broadleaf
11339
12162
  );
11340
- var diameter = expr11.toNumber(expr11.get(field10("diameterCrown")), 0);
11341
- var crownFactor = expr11.divide(
11342
- expr11.max(3, expr11.min(18, expr11.case([{ when: expr11.gt(diameter, 0), value: diameter }], 7))),
12163
+ var diameter = expr13.toNumber(expr13.get(field13("diameterCrown")), 0);
12164
+ var crownFactor = expr13.divide(
12165
+ expr13.max(3, expr13.min(18, expr13.case([{ when: expr13.gt(diameter, 0), value: diameter }], 7))),
11343
12166
  7
11344
12167
  );
11345
- var size = (divisor) => expr11.interpolate({ kind: "exponential", base: 2 }, expr11.zoom(), [
11346
- [15, expr11.multiply(crownFactor, 2.1 / divisor)],
11347
- [22, expr11.multiply(crownFactor, 268.8 / divisor)]
12168
+ var size = (divisor) => expr13.interpolate({ kind: "exponential", base: 2 }, expr13.zoom(), [
12169
+ [15, expr13.multiply(crownFactor, 2.1 / divisor)],
12170
+ [22, expr13.multiply(crownFactor, 268.8 / divisor)]
11348
12171
  ]);
11349
- var streetsTrees = withRenderStack9(
12172
+ var streetsTrees = withRenderStack10(
11350
12173
  vegetation5({
11351
12174
  // Models stay 3D in overhead and tilted views; unsupported renderers omit trees.
11352
12175
  mode: "3d",
@@ -11354,9 +12177,9 @@ var streetsTrees = withRenderStack9(
11354
12177
  visible: true,
11355
12178
  flat: {
11356
12179
  minZoom: 15.5,
11357
- color: token8.color("vegetation.tree.broadleaf.a"),
12180
+ color: token12.color("vegetation.tree.broadleaf.a"),
11358
12181
  radius: size(2),
11359
- opacity: zoom9.linear([
12182
+ opacity: zoom12.linear([
11360
12183
  [15.5, 0],
11361
12184
  [16, 0.12]
11362
12185
  ]),
@@ -11366,34 +12189,76 @@ var streetsTrees = withRenderStack9(
11366
12189
  strokeOpacity: 0
11367
12190
  },
11368
12191
  threeDimensional: {
11369
- barkColor: token8.color("vegetation.tree.bark"),
12192
+ barkColor: token12.color("vegetation.tree.bark"),
11370
12193
  broadleafColors: ["a", "b", "c", "d"].map(
11371
- (shade) => token8.color(`vegetation.tree.broadleaf.${shade}`)
12194
+ (shade) => token12.color(`vegetation.tree.broadleaf.${shade}`)
11372
12195
  ),
11373
12196
  coniferColors: ["a", "b", "c"].map(
11374
- (shade) => token8.color(`vegetation.tree.conifer.${shade}`)
12197
+ (shade) => token12.color(`vegetation.tree.conifer.${shade}`)
11375
12198
  ),
11376
- palmColors: ["a", "b", "c"].map((shade) => token8.color(`vegetation.tree.broadleaf.${shade}`)),
12199
+ palmColors: ["a", "b", "c"].map((shade) => token12.color(`vegetation.tree.broadleaf.${shade}`)),
11377
12200
  // The flat hedge's shade and fill, so a hedge keeps its colour as it rises.
11378
- hedgeColors: [token8.color("landcover.hedgeShade"), token8.color("landcover.hedge")],
12201
+ hedgeColors: [token12.color("landcover.hedgeShade"), token12.color("landcover.hedge")],
11379
12202
  crownScale: 1,
11380
12203
  heightScale: 1,
11381
- minimumHeight: 8,
12204
+ minimumHeight: 6.4,
11382
12205
  materialVariation: 1,
11383
12206
  finish: "smooth",
11384
12207
  edges: 0,
11385
12208
  forms: {
11386
- round: { models: ["streets-tree-round", "streets-tree-open"] },
11387
- open: { models: ["streets-tree-open"] },
11388
- tall: { models: ["streets-tree-tall", "streets-tree-open"] },
11389
- conifer: { models: ["streets-tree-conifer"] },
11390
- columnar: { models: ["streets-tree-columnar"] },
11391
- palm: { models: ["streets-tree-palm-feather", "streets-tree-palm-fan"] }
12209
+ round: {
12210
+ heightScale: 0.8,
12211
+ crownScale: 0.8,
12212
+ sizeAnchor: 8.5,
12213
+ crownAnchor: 4.8,
12214
+ sizeCompression: 0.5,
12215
+ models: ["streets-tree-round"]
12216
+ },
12217
+ open: {
12218
+ heightScale: 0.8,
12219
+ crownScale: 0.8,
12220
+ sizeAnchor: 8,
12221
+ crownAnchor: 5.2,
12222
+ sizeCompression: 0.5,
12223
+ models: ["streets-tree-open"]
12224
+ },
12225
+ tall: {
12226
+ heightScale: 0.8,
12227
+ crownScale: 0.8,
12228
+ sizeAnchor: 9.5,
12229
+ crownAnchor: 4.6,
12230
+ sizeCompression: 0.5,
12231
+ models: ["streets-tree-tall"]
12232
+ },
12233
+ conifer: {
12234
+ heightScale: 0.8,
12235
+ crownScale: 0.8,
12236
+ sizeAnchor: 9,
12237
+ crownAnchor: 4.5,
12238
+ sizeCompression: 0.5,
12239
+ models: ["streets-tree-conifer"]
12240
+ },
12241
+ columnar: {
12242
+ heightScale: 0.8,
12243
+ crownScale: 0.8,
12244
+ sizeAnchor: 10,
12245
+ crownAnchor: 2.4,
12246
+ sizeCompression: 0.5,
12247
+ models: ["streets-tree-columnar"]
12248
+ },
12249
+ palm: {
12250
+ heightScale: 0.8,
12251
+ crownScale: 0.8,
12252
+ sizeAnchor: 11,
12253
+ crownAnchor: 6,
12254
+ sizeCompression: 0.5,
12255
+ models: ["streets-tree-palm-feather", "streets-tree-palm-fan"]
12256
+ }
11392
12257
  }
11393
12258
  }
11394
12259
  }),
11395
12260
  {
11396
- crowns: renderPass9({
12261
+ crowns: renderPass12({
11397
12262
  placement: { above: "vegetation.trees" },
11398
12263
  // Inherit the optional tree binding from the anchor; generic OpenMapTiles omits it.
11399
12264
  requirements: ["vegetation"],
@@ -11404,12 +12269,12 @@ var streetsTrees = withRenderStack9(
11404
12269
  icon: {
11405
12270
  image: crownImage,
11406
12271
  size: size(52),
11407
- opacity: zoom9.linear([
12272
+ opacity: zoom12.linear([
11408
12273
  [15.5, 0],
11409
12274
  [16, 0.88],
11410
12275
  [18, 1]
11411
12276
  ]),
11412
- rotate: expr11.modulo(expr11.multiply(seed, 137.508), 360),
12277
+ rotate: expr13.modulo(expr13.multiply(seed, 137.508), 360),
11413
12278
  rotationAlignment: "map",
11414
12279
  pitchAlignment: "map",
11415
12280
  allowOverlap: true,
@@ -11453,7 +12318,7 @@ var mapboxRoadPalette = {
11453
12318
  };
11454
12319
  var mapboxRailColor = streetsVisual.road.railTransit;
11455
12320
  var streetsSurfacePalette = {
11456
- background: zoom10.linear([
12321
+ background: zoom13.linear([
11457
12322
  [13, streetsVisual.surface.backgroundOverview],
11458
12323
  [14, streetsVisual.surface.background]
11459
12324
  ]),
@@ -11484,14 +12349,14 @@ var streetsSurfacePalette = {
11484
12349
  scrub: streetsVisual.landcover.scrub,
11485
12350
  urbanPark: streetsVisual.landcover.urbanPark,
11486
12351
  villageGreen: streetsVisual.landcover.villageGreen,
11487
- water: expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
12352
+ water: expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
11488
12353
  [5, streetsVisual.hydro.overview],
11489
12354
  [7, streetsVisual.hydro.regional],
11490
12355
  [13, streetsVisual.hydro.regional],
11491
12356
  [
11492
12357
  14,
11493
- expr12.match(
11494
- expr12.get(field11("class")),
12358
+ expr14.match(
12359
+ expr14.get(field14("class")),
11495
12360
  [{ labels: ["ocean", "sea"], value: streetsVisual.hydro.ocean }],
11496
12361
  streetsVisual.hydro.water
11497
12362
  )
@@ -11514,7 +12379,7 @@ var streetsGlobalLandcoverPalette = {
11514
12379
  trees: streetsVisual.globalLandcover.trees,
11515
12380
  urban: streetsVisual.globalLandcover.urban
11516
12381
  };
11517
- var globalLandcoverOpacity = zoom10.linear([
12382
+ var globalLandcoverOpacity = zoom13.linear([
11518
12383
  // At world and country zooms the source classes are the terrain palette.
11519
12384
  // Blending them into the neutral land token desaturates forests and crops
11520
12385
  // into one pale wash, so keep the authored colours intact until the detailed
@@ -11529,26 +12394,26 @@ var globalLandcoverOpacity = zoom10.linear([
11529
12394
  [10.75, 0.25],
11530
12395
  [11, 0]
11531
12396
  ]);
11532
- var detailedLandcoverOpacity = zoom10.linear([
12397
+ var detailedLandcoverOpacity = zoom13.linear([
11533
12398
  [7, 0],
11534
12399
  [8, 0.35],
11535
12400
  [9, 0.7],
11536
12401
  [10, 0.9],
11537
12402
  [11, 1]
11538
12403
  ]);
11539
- var detailedUrbanGreenOpacity = zoom10.linear([
12404
+ var detailedUrbanGreenOpacity = zoom13.linear([
11540
12405
  [8, 0],
11541
12406
  [9, 1]
11542
12407
  ]);
11543
- var protectedAreaOpacity = zoom10.linear([
12408
+ var protectedAreaOpacity = zoom13.linear([
11544
12409
  [5, 0],
11545
12410
  [6, 1]
11546
12411
  ]);
11547
12412
  function streetsPoiStyle(category) {
11548
- const filterRank = expr12.toNumber(expr12.get(field11("poiFilterRank")), 6);
11549
- const sizeRank = expr12.toNumber(expr12.get(field11("poiSizeRank")), 17);
11550
- const featured = expr12.all(expr12.lte(filterRank, 0), expr12.lt(sizeRank, 5));
11551
- const featuredDetail = expr12.all(expr12.lte(filterRank, 1), expr12.lt(sizeRank, 13));
12413
+ const filterRank = expr14.toNumber(expr14.get(field14("poiFilterRank")), 6);
12414
+ const sizeRank = expr14.toNumber(expr14.get(field14("poiSizeRank")), 17);
12415
+ const featured = expr14.all(expr14.lte(filterRank, 0), expr14.lt(sizeRank, 5));
12416
+ const featuredDetail = expr14.all(expr14.lte(filterRank, 1), expr14.lt(sizeRank, 13));
11552
12417
  return {
11553
12418
  icon: {
11554
12419
  image: streetsPoiImage(),
@@ -11567,12 +12432,12 @@ function streetsPoiStyle(category) {
11567
12432
  maxWidth: 9,
11568
12433
  anchor: "top",
11569
12434
  offset: [0, 0.8],
11570
- padding: zoom10.linear([
12435
+ padding: zoom13.linear([
11571
12436
  [16, 6],
11572
12437
  [17, 4]
11573
12438
  ]),
11574
- size: category === "transport" ? 13 : expr12.step(expr12.zoom(), expr12.case([{ when: featured, value: 18 }], 13), [
11575
- [17, expr12.case([{ when: featuredDetail, value: 18 }], 13)]
12439
+ size: category === "transport" ? 13 : expr14.step(expr14.zoom(), expr14.case([{ when: featured, value: 18 }], 13), [
12440
+ [17, expr14.case([{ when: featuredDetail, value: 18 }], 13)]
11576
12441
  ])
11577
12442
  }
11578
12443
  };
@@ -11613,7 +12478,7 @@ function cityRoadCasingColorStops(minZoom) {
11613
12478
  minZoom,
11614
12479
  streetsDetailPalette.roadCasing,
11615
12480
  mapboxRoadPalette.detailCasing
11616
- );
12481
+ ).map(([level, color]) => [level === 13 ? 14 : level, color]);
11617
12482
  }
11618
12483
  var roadBorderZoom = 15;
11619
12484
  var roadBorderTotalWidth = 1;
@@ -11663,35 +12528,35 @@ var groundedBuilding3dSelector = {
11663
12528
  }
11664
12529
  ]
11665
12530
  };
11666
- var building3dHeight = expr12.max(
12531
+ var building3dHeight = expr14.max(
11667
12532
  0,
11668
- expr12.toNumber(expr12.coalesce(expr12.get(field11("renderHeight")), 5), 5)
12533
+ expr14.toNumber(expr14.coalesce(expr14.get(field14("renderHeight")), 5), 5)
11669
12534
  );
11670
- var building3dBase = expr12.max(
12535
+ var building3dBase = expr14.max(
11671
12536
  0,
11672
- expr12.min(
11673
- expr12.toNumber(expr12.coalesce(expr12.get(field11("renderMinHeight")), 0), 0),
12537
+ expr14.min(
12538
+ expr14.toNumber(expr14.coalesce(expr14.get(field14("renderMinHeight")), 0), 0),
11674
12539
  building3dHeight
11675
12540
  )
11676
12541
  );
11677
- var roadLineCap = zoom10.step([
12542
+ var roadLineCap = zoom13.step([
11678
12543
  [3, "butt"],
11679
12544
  [14, "round"]
11680
12545
  ]);
11681
- var roadLineJoin = zoom10.step([
12546
+ var roadLineJoin = zoom13.step([
11682
12547
  [3, "miter"],
11683
12548
  [14, "round"]
11684
12549
  ]);
11685
- var pathLineCap = zoom10.step([
12550
+ var pathLineCap = zoom13.step([
11686
12551
  [12, "butt"],
11687
12552
  [16, "round"]
11688
12553
  ]);
11689
- var pathLineJoin = zoom10.step([
12554
+ var pathLineJoin = zoom13.step([
11690
12555
  [12, "miter"],
11691
12556
  [16, "round"]
11692
12557
  ]);
11693
- var circularRoadBaseWidth = expr12.match(
11694
- expr12.coalesce(expr12.get(field11("class")), "minor"),
12558
+ var circularRoadBaseWidth = expr14.match(
12559
+ expr14.coalesce(expr14.get(field14("class")), "minor"),
11695
12560
  [
11696
12561
  { labels: "motorway", value: 6 },
11697
12562
  { labels: "trunk", value: 5.5 },
@@ -11703,15 +12568,15 @@ var circularRoadBaseWidth = expr12.match(
11703
12568
  ],
11704
12569
  3
11705
12570
  );
11706
- var circularRoadFallbackWidth = expr12.interpolate(
12571
+ var circularRoadFallbackWidth = expr14.interpolate(
11707
12572
  { kind: "exponential", base: 2 },
11708
- expr12.zoom(),
12573
+ expr14.zoom(),
11709
12574
  [
11710
12575
  [15, circularRoadBaseWidth],
11711
12576
  ...Array.from({ length: 9 }, (_, index) => {
11712
12577
  const level = 16 + index;
11713
12578
  const scale = 1 + (1.35 ** (level - 15) - 1) / (1.35 ** 7 - 1) * 1.2;
11714
- return [level, expr12.multiply(circularRoadBaseWidth, scale)];
12579
+ return [level, expr14.multiply(circularRoadBaseWidth, scale)];
11715
12580
  })
11716
12581
  ]
11717
12582
  );
@@ -11721,14 +12586,14 @@ var tunnelBorderWidth = 1;
11721
12586
  function roadWidth(widths2, oneWayScale, rampWidths) {
11722
12587
  const augmentedWidths = [...widths2].sort(([left], [right]) => left - right);
11723
12588
  const widthOutput = (level, width) => {
11724
- const ordinaryWidth = oneWayScale === 1 ? width : expr12.match(
11725
- expr12.get(field11("oneway")),
12589
+ const ordinaryWidth = oneWayScale === 1 ? width : expr14.match(
12590
+ expr14.get(field14("oneway")),
11726
12591
  [{ labels: [1, -1], value: width * oneWayScale }],
11727
12592
  width
11728
12593
  );
11729
12594
  const rampWidth = rampWidths ? sampleRoadWidth(rampWidths, level) : void 0;
11730
- const surfaceWidth = rampWidth === void 0 ? ordinaryWidth : expr12.case(
11731
- [{ when: expr12.eq(expr12.get(field11("ramp")), 1), value: rampWidth }],
12595
+ const surfaceWidth = rampWidth === void 0 ? ordinaryWidth : expr14.case(
12596
+ [{ when: expr14.eq(expr14.get(field14("ramp")), 1), value: rampWidth }],
11732
12597
  ordinaryWidth
11733
12598
  );
11734
12599
  return surfaceWidth;
@@ -11738,7 +12603,7 @@ function roadWidth(widths2, oneWayScale, rampWidths) {
11738
12603
  );
11739
12604
  const firstWidthStop = widthStops[0];
11740
12605
  if (firstWidthStop === void 0) throw new Error("Road widths require at least one zoom stop.");
11741
- return expr12.interpolate({ base: roadWidthInterpolationBase, kind: "exponential" }, expr12.zoom(), [
12606
+ return expr14.interpolate({ base: roadWidthInterpolationBase, kind: "exponential" }, expr14.zoom(), [
11742
12607
  firstWidthStop,
11743
12608
  ...widthStops.slice(1)
11744
12609
  ]);
@@ -11765,20 +12630,20 @@ function cityRoadWidths(widths2, at12, at14) {
11765
12630
  ];
11766
12631
  }
11767
12632
  function roadCasingWidth(major) {
11768
- return expr12.interpolate({ kind: "exponential", base: 1.5 }, expr12.zoom(), [
12633
+ return expr14.interpolate({ kind: "exponential", base: 1.5 }, expr14.zoom(), [
11769
12634
  [
11770
12635
  14,
11771
- major ? expr12.case([{ when: expr12.eq(expr12.get(field11("ramp")), 1), value: 0.8 }], 1) : 0.8
12636
+ major ? expr14.case([{ when: expr14.eq(expr14.get(field14("ramp")), 1), value: 0.8 }], 1) : 0.8
11772
12637
  ],
11773
12638
  [22, 2]
11774
12639
  ]);
11775
12640
  }
11776
- var pathCasingStrokeWidth = zoom10.exponential(1.5, [
12641
+ var pathCasingStrokeWidth = zoom13.exponential(1.5, [
11777
12642
  [14, 0.5],
11778
12643
  [18, 1],
11779
12644
  [22, 2]
11780
12645
  ]);
11781
- var pathTunnelCasingWidth = zoom10.linear([
12646
+ var pathTunnelCasingWidth = zoom13.linear([
11782
12647
  [15, 0],
11783
12648
  [15.5, tunnelBorderWidth],
11784
12649
  [22, tunnelBorderWidth]
@@ -11788,8 +12653,8 @@ var mapboxPathWidthStops = [
11788
12653
  [18, 6],
11789
12654
  [22, 80]
11790
12655
  ];
11791
- var contextualPathLineWidth = zoom10.exponential(1.5, mapboxPathWidthStops);
11792
- var contextualPathColor = expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
12656
+ var contextualPathLineWidth = zoom13.exponential(1.5, mapboxPathWidthStops);
12657
+ var contextualPathColor = expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
11793
12658
  [15, mapboxRoadPalette.pathAtZ15],
11794
12659
  [16, mapboxRoadPalette.pathFromZ16]
11795
12660
  ]);
@@ -11800,7 +12665,7 @@ function parkPathRefinements() {
11800
12665
  (roadClass) => ["surface", "bridge"].flatMap((structure) => [
11801
12666
  [
11802
12667
  `${roadClass}-${structure}-fill`,
11803
- refineRenderTarget5({
12668
+ refineRenderTarget6({
11804
12669
  renderer: "line",
11805
12670
  style: {
11806
12671
  color: roadClass === "steps" ? mapboxRoadPalette.pathFromZ16 : contextualPathColor,
@@ -11813,7 +12678,7 @@ function parkPathRefinements() {
11813
12678
  ],
11814
12679
  [
11815
12680
  `${roadClass}-${structure}-casing`,
11816
- refineRenderTarget5({
12681
+ refineRenderTarget6({
11817
12682
  renderer: "line",
11818
12683
  style: {
11819
12684
  color: mapboxRoadPalette.pathCasing,
@@ -11869,7 +12734,7 @@ var namedCitySelector = {
11869
12734
  };
11870
12735
  function streetsBoundaryRenderStack() {
11871
12736
  return {
11872
- admin2Background: renderPass10({
12737
+ admin2Background: renderPass13({
11873
12738
  placement: { below: "boundaries.admin4" },
11874
12739
  feature: "boundary",
11875
12740
  renderer: "line",
@@ -11895,23 +12760,23 @@ function streetsBoundaryRenderStack() {
11895
12760
  ]
11896
12761
  },
11897
12762
  style: {
11898
- blur: zoom10.linear([
12763
+ blur: zoom13.linear([
11899
12764
  [3, 0],
11900
12765
  [12, 2]
11901
12766
  ]),
11902
12767
  color: streetsVisual.boundary.halo,
11903
12768
  minZoom: 1,
11904
- opacity: zoom10.linear([
12769
+ opacity: zoom13.linear([
11905
12770
  [3, 0],
11906
12771
  [4, 0.5]
11907
12772
  ]),
11908
- width: zoom10.linear([
12773
+ width: zoom13.linear([
11909
12774
  [3, 4],
11910
12775
  [12, 8]
11911
12776
  ])
11912
12777
  }
11913
12778
  }),
11914
- admin4Background: renderPass10({
12779
+ admin4Background: renderPass13({
11915
12780
  placement: { below: "boundaries.admin4" },
11916
12781
  feature: "boundary",
11917
12782
  renderer: "line",
@@ -11937,17 +12802,17 @@ function streetsBoundaryRenderStack() {
11937
12802
  ]
11938
12803
  },
11939
12804
  style: {
11940
- blur: zoom10.linear([
12805
+ blur: zoom13.linear([
11941
12806
  [3, 0],
11942
12807
  [12, 1]
11943
12808
  ]),
11944
12809
  color: streetsVisual.boundary.halo,
11945
12810
  minZoom: 2,
11946
- opacity: zoom10.linear([
12811
+ opacity: zoom13.linear([
11947
12812
  [2, 0],
11948
12813
  [4, 0.42]
11949
12814
  ]),
11950
- width: zoom10.linear([
12815
+ width: zoom13.linear([
11951
12816
  [3, 2.4],
11952
12817
  [6, 3.1],
11953
12818
  [12, 4.2]
@@ -11958,7 +12823,7 @@ function streetsBoundaryRenderStack() {
11958
12823
  // module deliberately exposes only the stable admin-2/admin-4 pair.
11959
12824
  // Standard uses the next tier as a restrained dotted municipal cue from
11960
12825
  // metro zooms onward, so Streets adds it as an explicit semantic pass.
11961
- admin6: renderPass10({
12826
+ admin6: renderPass13({
11962
12827
  placement: { above: "boundaries.admin4" },
11963
12828
  feature: "boundary",
11964
12829
  renderer: "line",
@@ -11987,12 +12852,12 @@ function streetsBoundaryRenderStack() {
11987
12852
  color: streetsVisual.boundary.regional,
11988
12853
  dash: [1, 1.5],
11989
12854
  minZoom: 8,
11990
- opacity: zoom10.linear([
12855
+ opacity: zoom13.linear([
11991
12856
  [8, 0],
11992
12857
  [9, 0.5],
11993
12858
  [12, 0.68]
11994
12859
  ]),
11995
- width: zoom10.linear([
12860
+ width: zoom13.linear([
11996
12861
  [8, 0.45],
11997
12862
  [10, 0.7],
11998
12863
  [12, 0.95]
@@ -12005,7 +12870,7 @@ function streetsLandRenderStack() {
12005
12870
  return {
12006
12871
  // Core orders general cover, parks, lawn detail and mapped built surfaces.
12007
12872
  // Streets adds only its own business-corridor treatment.
12008
- businessArea: renderPass10({
12873
+ businessArea: renderPass13({
12009
12874
  placement: { above: "land.landuse.residential.fill" },
12010
12875
  feature: "landuse",
12011
12876
  renderer: "fill",
@@ -12018,7 +12883,7 @@ function streetsLandRenderStack() {
12018
12883
  })
12019
12884
  };
12020
12885
  }
12021
- var hedgeWidth = zoom10.linear([
12886
+ var hedgeWidth = zoom13.linear([
12022
12887
  [15, 0.6],
12023
12888
  [16, 1],
12024
12889
  [18, 2],
@@ -12029,7 +12894,7 @@ var streetsBarriers = {
12029
12894
  line: {
12030
12895
  color: streetsVisual.barrier.fence,
12031
12896
  minZoom: 16,
12032
- width: zoom10.linear([
12897
+ width: zoom13.linear([
12033
12898
  [16, 1],
12034
12899
  [20, 3]
12035
12900
  ])
@@ -12039,7 +12904,7 @@ var streetsBarriers = {
12039
12904
  line: {
12040
12905
  color: streetsVisual.barrier.wall,
12041
12906
  minZoom: 16,
12042
- width: zoom10.linear([
12907
+ width: zoom13.linear([
12043
12908
  [16, 1],
12044
12909
  [20, 3.5]
12045
12910
  ])
@@ -12052,7 +12917,7 @@ var streetsBarriers = {
12052
12917
  color: streetsVisual.barrier.hedgeShade,
12053
12918
  join: "round",
12054
12919
  minZoom: 17,
12055
- opacity: zoom10.linear([
12920
+ opacity: zoom13.linear([
12056
12921
  [17, 0],
12057
12922
  [18, 0.7]
12058
12923
  ]),
@@ -12073,7 +12938,7 @@ function streetsBuildingRenderStack() {
12073
12938
  // Keep just enough ambient separation for dense footprint clusters. The
12074
12939
  // fill and its close-colour outline carry the 2D building hierarchy; a
12075
12940
  // dark shadow at z15 would turn every footprint into a heavy sticker.
12076
- flatShadow: renderPass10({
12941
+ flatShadow: renderPass13({
12077
12942
  placement: { below: "buildings.flat.fill" },
12078
12943
  feature: "building",
12079
12944
  renderer: "line",
@@ -12081,7 +12946,7 @@ function streetsBuildingRenderStack() {
12081
12946
  blur: 2,
12082
12947
  color: buildingShadowColor,
12083
12948
  minZoom: 15.5,
12084
- opacity: zoom10.linear([
12949
+ opacity: zoom13.linear([
12085
12950
  [15.5, 0],
12086
12951
  [16, 0.03],
12087
12952
  [18, 0.08],
@@ -12089,7 +12954,7 @@ function streetsBuildingRenderStack() {
12089
12954
  ]),
12090
12955
  translate: [0.5, 0.75],
12091
12956
  translateAnchor: "viewport",
12092
- width: zoom10.linear([
12957
+ width: zoom13.linear([
12093
12958
  [15.5, 0.5],
12094
12959
  [16, 1],
12095
12960
  [18, 3],
@@ -12097,7 +12962,7 @@ function streetsBuildingRenderStack() {
12097
12962
  ])
12098
12963
  }
12099
12964
  }),
12100
- shadowSoft: renderPass10({
12965
+ shadowSoft: renderPass13({
12101
12966
  placement: { below: "buildings.flat.fill" },
12102
12967
  feature: "building",
12103
12968
  renderer: "line",
@@ -12105,7 +12970,7 @@ function streetsBuildingRenderStack() {
12105
12970
  style: {
12106
12971
  // A diffuse contact band, not a displaced footprint. It stays attached
12107
12972
  // to the walls when the camera rotates and fades in at street detail.
12108
- blur: zoom10.linear([
12973
+ blur: zoom13.linear([
12109
12974
  [15.5, 2],
12110
12975
  [18, 6],
12111
12976
  [20, 10]
@@ -12114,14 +12979,14 @@ function streetsBuildingRenderStack() {
12114
12979
  color: streetsVisual.building.contactShadow,
12115
12980
  join: "round",
12116
12981
  minZoom: 15.5,
12117
- opacity: zoom10.linear([
12982
+ opacity: zoom13.linear([
12118
12983
  [15.5, 0],
12119
12984
  [16.5, 0.12],
12120
12985
  [18, 0.22],
12121
12986
  [20, 0.24]
12122
12987
  ]),
12123
12988
  visibilityGroup: "building",
12124
- width: zoom10.linear([
12989
+ width: zoom13.linear([
12125
12990
  [15.5, 1],
12126
12991
  [16.5, 4],
12127
12992
  [18, 10],
@@ -12129,13 +12994,13 @@ function streetsBuildingRenderStack() {
12129
12994
  ])
12130
12995
  }
12131
12996
  }),
12132
- shadowCore: renderPass10({
12997
+ shadowCore: renderPass13({
12133
12998
  placement: { below: "buildings.flat.fill" },
12134
12999
  feature: "building",
12135
13000
  renderer: "line",
12136
13001
  selector: groundedBuilding3dSelector,
12137
13002
  style: {
12138
- blur: zoom10.linear([
13003
+ blur: zoom13.linear([
12139
13004
  [15.5, 0.5],
12140
13005
  [18, 1.5],
12141
13006
  [20, 2.5]
@@ -12144,14 +13009,14 @@ function streetsBuildingRenderStack() {
12144
13009
  color: streetsVisual.building.contactShadow,
12145
13010
  join: "round",
12146
13011
  minZoom: 15.5,
12147
- opacity: zoom10.linear([
13012
+ opacity: zoom13.linear([
12148
13013
  [15.5, 0],
12149
13014
  [16.5, 0.08],
12150
13015
  [18, 0.16],
12151
13016
  [20, 0.18]
12152
13017
  ]),
12153
13018
  visibilityGroup: "building",
12154
- width: zoom10.linear([
13019
+ width: zoom13.linear([
12155
13020
  [15.5, 0.5],
12156
13021
  [16.5, 1],
12157
13022
  [18, 2.5],
@@ -12159,7 +13024,7 @@ function streetsBuildingRenderStack() {
12159
13024
  ])
12160
13025
  }
12161
13026
  }),
12162
- extrusion: renderPass10({
13027
+ extrusion: renderPass13({
12163
13028
  // Keep raised geometry after the ground names, which already cover flat footprints.
12164
13029
  placement: "above-buildings",
12165
13030
  feature: "building",
@@ -12179,7 +13044,7 @@ function streetsBuildingRenderStack() {
12179
13044
  }
12180
13045
  function streetsLabelRenderStack() {
12181
13046
  return {
12182
- ferry: renderPass10({
13047
+ ferry: renderPass13({
12183
13048
  feature: "roadName",
12184
13049
  placement: "below-labels",
12185
13050
  renderer: "symbol",
@@ -12202,7 +13067,7 @@ function streetsLabelRenderStack() {
12202
13067
  placement: "line",
12203
13068
  spacing: 250,
12204
13069
  text: {
12205
- field: expr12.get(field11("name")),
13070
+ field: expr14.get(field14("name")),
12206
13071
  font: streetsVisual.font.default,
12207
13072
  color: streetsVisual.label.ferry,
12208
13073
  haloColor: streetsVisual.label.ferryHalo,
@@ -12213,7 +13078,7 @@ function streetsLabelRenderStack() {
12213
13078
  padding: 1,
12214
13079
  pitchAlignment: "viewport",
12215
13080
  rotationAlignment: "map",
12216
- size: zoom10.linear([
13081
+ size: zoom13.linear([
12217
13082
  [10, 6.5],
12218
13083
  [18, 13]
12219
13084
  ]),
@@ -12221,7 +13086,7 @@ function streetsLabelRenderStack() {
12221
13086
  }
12222
13087
  }
12223
13088
  }),
12224
- settlementMarker: renderPass10({
13089
+ settlementMarker: renderPass13({
12225
13090
  placement: { below: "labels.places.city" },
12226
13091
  feature: "place",
12227
13092
  renderer: "circle",
@@ -12230,7 +13095,7 @@ function streetsLabelRenderStack() {
12230
13095
  color: streetsVisual.label.settlement,
12231
13096
  maxZoom: 8,
12232
13097
  minZoom: 2,
12233
- radius: expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 3, [
13098
+ radius: expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 3, [
12234
13099
  [3, 2.5],
12235
13100
  [7, 2]
12236
13101
  ]),
@@ -12238,7 +13103,7 @@ function streetsLabelRenderStack() {
12238
13103
  strokeWidth: 0.8
12239
13104
  }
12240
13105
  }),
12241
- country: refineRenderTarget5({
13106
+ country: refineRenderTarget6({
12242
13107
  renderer: "symbol",
12243
13108
  selector: {
12244
13109
  kind: "all",
@@ -12258,7 +13123,7 @@ function streetsLabelRenderStack() {
12258
13123
  style: {},
12259
13124
  target: "labels.places.country"
12260
13125
  }),
12261
- state: refineRenderTarget5({
13126
+ state: refineRenderTarget6({
12262
13127
  renderer: "symbol",
12263
13128
  selector: {
12264
13129
  kind: "all",
@@ -12282,13 +13147,13 @@ function streetsLabelRenderStack() {
12282
13147
  style: {},
12283
13148
  target: "labels.places.state"
12284
13149
  }),
12285
- city: refineRenderTarget5({
13150
+ city: refineRenderTarget6({
12286
13151
  renderer: "symbol",
12287
13152
  selector: namedCitySelector,
12288
13153
  style: {},
12289
13154
  target: "labels.places.city"
12290
13155
  }),
12291
- town: refineRenderTarget5({
13156
+ town: refineRenderTarget6({
12292
13157
  renderer: "symbol",
12293
13158
  selector: {
12294
13159
  kind: "all",
@@ -12309,7 +13174,7 @@ function streetsLabelRenderStack() {
12309
13174
  style: {},
12310
13175
  target: "labels.places.town"
12311
13176
  }),
12312
- village: refineRenderTarget5({
13177
+ village: refineRenderTarget6({
12313
13178
  renderer: "symbol",
12314
13179
  selector: {
12315
13180
  kind: "all",
@@ -12331,7 +13196,7 @@ function streetsLabelRenderStack() {
12331
13196
  style: {},
12332
13197
  target: "labels.places.village"
12333
13198
  }),
12334
- neighborhood: refineRenderTarget5({
13199
+ neighborhood: refineRenderTarget6({
12335
13200
  renderer: "symbol",
12336
13201
  selector: {
12337
13202
  kind: "all",
@@ -12370,14 +13235,14 @@ function cityRoadSurfaceColor(roadClass) {
12370
13235
  const outputs = stops.map(
12371
13236
  ([level, color]) => [
12372
13237
  level,
12373
- expr12.case(
13238
+ expr14.case(
12374
13239
  [
12375
13240
  {
12376
- when: expr12.eq(expr12.get(field11("class")), `${roadClass}_construction`),
13241
+ when: expr14.eq(expr14.get(field14("class")), `${roadClass}_construction`),
12377
13242
  value: roadSurfaceColor
12378
13243
  },
12379
13244
  {
12380
- when: expr12.eq(expr12.get(field11("surface")), "unpaved"),
13245
+ when: expr14.eq(expr14.get(field14("surface")), "unpaved"),
12381
13246
  value: level >= 12 && level < 15 ? streetsCityRoadPalette[roadClass] : roadSurfaceColor
12382
13247
  }
12383
13248
  ],
@@ -12385,7 +13250,7 @@ function cityRoadSurfaceColor(roadClass) {
12385
13250
  )
12386
13251
  ]
12387
13252
  );
12388
- return expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
13253
+ return expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
12389
13254
  outputs[0],
12390
13255
  ...outputs.slice(1)
12391
13256
  ]);
@@ -12395,7 +13260,7 @@ function streetsRoadEligibility() {
12395
13260
  ["motorway", "trunk", "primary", "secondary", "tertiary"].flatMap(
12396
13261
  (roadClass) => ["fill", "rampFill"].map((phase) => [
12397
13262
  `${roadClass}-surface-${phase}-eligibility`,
12398
- refineRenderTarget5({
13263
+ refineRenderTarget6({
12399
13264
  renderer: "line",
12400
13265
  selector: {
12401
13266
  kind: "all",
@@ -12444,7 +13309,7 @@ function streetsRoadEligibility() {
12444
13309
  }
12445
13310
  function streetsRoadRenderStack() {
12446
13311
  return {
12447
- pedestrianGround: refineRenderTarget5({
13312
+ pedestrianGround: refineRenderTarget6({
12448
13313
  // Walkable ground covers commercial zoning, while explicit grass, gardens
12449
13314
  // and parks remain above broad pedestrian complexes. Share the canonical
12450
13315
  // anchor with the earlier business-area pass; replacement land modules do
@@ -12455,17 +13320,17 @@ function streetsRoadRenderStack() {
12455
13320
  }),
12456
13321
  ...parkPathRefinements(),
12457
13322
  ...streetsRoadEligibility(),
12458
- minorSurfaceColor: refineRenderTarget5({
13323
+ minorSurfaceColor: refineRenderTarget6({
12459
13324
  renderer: "line",
12460
13325
  style: { color: cityRoadSurfaceColor("minor") },
12461
13326
  target: "roads.classes.minor.surface.fill"
12462
13327
  }),
12463
- minorLinkColor: refineRenderTarget5({
13328
+ minorLinkColor: refineRenderTarget6({
12464
13329
  renderer: "line",
12465
13330
  style: { color: cityRoadSurfaceColor("minor") },
12466
13331
  target: "roads.classes.minor.surface.rampFill"
12467
13332
  }),
12468
- oneWayMarkers: refineRenderTarget5({
13333
+ oneWayMarkers: refineRenderTarget6({
12469
13334
  renderer: "symbol",
12470
13335
  style: {
12471
13336
  icon: {
@@ -12473,19 +13338,19 @@ function streetsRoadRenderStack() {
12473
13338
  ignorePlacement: true,
12474
13339
  image: streetsVisual.image.oneway,
12475
13340
  keepUpright: false,
12476
- opacity: expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
13341
+ opacity: expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
12477
13342
  [16.5, 0],
12478
13343
  [17, 0.92],
12479
13344
  [17.5, 1]
12480
13345
  ]),
12481
13346
  padding: 0,
12482
13347
  pitchAlignment: "map",
12483
- rotate: expr12.case(
12484
- [{ when: expr12.eq(expr12.get(field11("oneway")), -1), value: 180 }],
13348
+ rotate: expr14.case(
13349
+ [{ when: expr14.eq(expr14.get(field14("oneway")), -1), value: 180 }],
12485
13350
  0
12486
13351
  ),
12487
13352
  rotationAlignment: "map",
12488
- size: expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
13353
+ size: expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
12489
13354
  [15, 0.38],
12490
13355
  [17, 0.55],
12491
13356
  [19, 0.7],
@@ -12493,7 +13358,7 @@ function streetsRoadRenderStack() {
12493
13358
  ])
12494
13359
  },
12495
13360
  minZoom: 16.5,
12496
- spacing: expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
13361
+ spacing: expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
12497
13362
  [15, 95],
12498
13363
  [17, 115],
12499
13364
  [19, 150],
@@ -12501,8 +13366,8 @@ function streetsRoadRenderStack() {
12501
13366
  ]),
12502
13367
  text: {
12503
13368
  allowOverlap: true,
12504
- field: expr12.case(
12505
- [{ when: expr12.eq(expr12.get(field11("oneway")), -1), value: "\u2190" }],
13369
+ field: expr14.case(
13370
+ [{ when: expr14.eq(expr14.get(field14("oneway")), -1), value: "\u2190" }],
12506
13371
  "\u2192"
12507
13372
  ),
12508
13373
  ignorePlacement: true,
@@ -12511,7 +13376,7 @@ function streetsRoadRenderStack() {
12511
13376
  padding: 0,
12512
13377
  pitchAlignment: "map",
12513
13378
  rotationAlignment: "map",
12514
- size: expr12.interpolate({ kind: "linear" }, expr12.zoom(), [
13379
+ size: expr14.interpolate({ kind: "linear" }, expr14.zoom(), [
12515
13380
  [15, 11],
12516
13381
  [17, 17],
12517
13382
  [19, 20],
@@ -12556,12 +13421,12 @@ function cityRoadStyle(color, widths2, options = {}) {
12556
13421
  tunnelVisible = true
12557
13422
  } = options;
12558
13423
  const zoomRange = minZoom === void 0 ? {} : { minZoom };
12559
- const opacity = zoom10.linear([
13424
+ const opacity = zoom13.linear([
12560
13425
  [3, 0],
12561
13426
  [3.5, 1]
12562
13427
  ]);
12563
- const surfaceColor = colorStops ? zoom10.linear(colorStops) : color;
12564
- const resolvedCasingColor = zoom10.linear(roadCasingColorStops(casingColorStops));
13428
+ const surfaceColor = colorStops ? zoom13.linear(colorStops) : color;
13429
+ const resolvedCasingColor = zoom13.linear(roadCasingColorStops(casingColorStops));
12565
13430
  const fill = {
12566
13431
  ...zoomRange,
12567
13432
  cap: roadLineCap,
@@ -12587,8 +13452,6 @@ function cityRoadStyle(color, widths2, options = {}) {
12587
13452
  surface: { casing, fill },
12588
13453
  bridge: {
12589
13454
  casing: { ...casing, cap: "butt", join: "miter", width: roadCasingWidth((minZoom ?? 0) < 12) },
12590
- // Local structures join their streets at z12; major structures take over
12591
- // the continuous overview strokes at z13.
12592
13455
  fill: {
12593
13456
  ...fill,
12594
13457
  cap: "round",
@@ -12603,7 +13466,7 @@ function cityRoadStyle(color, widths2, options = {}) {
12603
13466
  join: "miter",
12604
13467
  minZoom: minZoom === 3 ? 13 : (minZoom ?? 0) < 12 ? 14 : minZoom === 12 ? 15 : 16,
12605
13468
  // Standard's HD setting unifies carriageway borders at z15, including tunnels.
12606
- color: expr12.step(expr12.zoom(), tunnelCasingColor, [
13469
+ color: expr14.step(expr14.zoom(), tunnelCasingColor, [
12607
13470
  [15, mapboxRoadPalette.detailCasing]
12608
13471
  ]),
12609
13472
  dash: tunnelBorderDash,
@@ -12617,7 +13480,7 @@ function cityRoadStyle(color, widths2, options = {}) {
12617
13480
  join: "miter",
12618
13481
  minZoom: Math.max(minZoom ?? 0, minZoom === 12 ? 12 : 13),
12619
13482
  color: tunnelColor,
12620
- opacity: zoom10.linear([
13483
+ opacity: zoom13.linear([
12621
13484
  [3, 0],
12622
13485
  [3.5, 0.8]
12623
13486
  ])
@@ -12635,7 +13498,7 @@ function cityRoadStyle(color, widths2, options = {}) {
12635
13498
  }
12636
13499
  function pathRoadStyle(color, widths2, options = {}) {
12637
13500
  const zoomRange = options.minZoom === void 0 ? {} : { minZoom: options.minZoom };
12638
- const surfaceColor = options.colorStops ? zoom10.linear(options.colorStops) : color;
13501
+ const surfaceColor = options.colorStops ? zoom13.linear(options.colorStops) : color;
12639
13502
  const cap = options.steps ? "butt" : pathLineCap;
12640
13503
  const tunnelCap = "butt";
12641
13504
  const join = options.steps ? "round" : pathLineJoin;
@@ -12696,8 +13559,8 @@ function roadLabelStyle(kind, minZoom) {
12696
13559
  minZoom,
12697
13560
  // Resolve dense parallel streets by road hierarchy, not incidental tile order.
12698
13561
  // All classes share this expression so the compiler retains one collision network.
12699
- priority: expr12.match(
12700
- expr12.coalesce(expr12.get(field11("class")), "minor"),
13562
+ priority: expr14.match(
13563
+ expr14.coalesce(expr14.get(field14("class")), "minor"),
12701
13564
  [
12702
13565
  { labels: ["motorway", "motorway_construction"], value: 6 },
12703
13566
  { labels: ["trunk", "trunk_construction"], value: 5 },
@@ -12710,7 +13573,7 @@ function roadLabelStyle(kind, minZoom) {
12710
13573
  ),
12711
13574
  // World name geometry is split into more short segments at street detail.
12712
13575
  // Increase repeat distance gently without thinning the overview network.
12713
- spacing: zoom10.linear([
13576
+ spacing: zoom13.linear([
12714
13577
  [13, 250],
12715
13578
  [15, 300],
12716
13579
  [17, 400],
@@ -12726,14 +13589,14 @@ function roadLabelStyle(kind, minZoom) {
12726
13589
  maxAngle: 30,
12727
13590
  // Screen-space breathing room at city overview. Restore normal padding by z14
12728
13591
  // so the same policy does not suppress useful names on the neighbourhood view.
12729
- padding: zoom10.linear([
13592
+ padding: zoom13.linear([
12730
13593
  [13, 5],
12731
13594
  [14, 1]
12732
13595
  ]),
12733
13596
  // Follow the road's bearing while retaining readable glyph height in perspective.
12734
13597
  pitchAlignment: "viewport",
12735
13598
  rotationAlignment: "map",
12736
- size: zoom10.linear([
13599
+ size: zoom13.linear([
12737
13600
  [10, startSize],
12738
13601
  [18, endSize]
12739
13602
  ]),
@@ -12741,8 +13604,8 @@ function roadLabelStyle(kind, minZoom) {
12741
13604
  }
12742
13605
  };
12743
13606
  }
12744
- var streets = bindOfficialMapTheme(
12745
- defineMap7({
13607
+ var streetsBase = bindOfficialMapTheme(
13608
+ defineMap8({
12746
13609
  id: "streets",
12747
13610
  version: 1,
12748
13611
  name: "Streets",
@@ -12762,12 +13625,13 @@ var streets = bindOfficialMapTheme(
12762
13625
  systemThemes: { light: "light", dark: "dark" },
12763
13626
  projection: "globe",
12764
13627
  // 'globe' | 'mercator'. Globe becomes planar at street zooms.
13628
+ camera: { adaptivePerspective: true, pitchLimit: { maxZoom: 15, maxPitch: 38 } },
12765
13629
  // Each theme paints the sky seen when the camera tilts up the street; night shows stars.
12766
13630
  sky: {
12767
- color: token9.color("sky.color"),
12768
- horizonColor: token9.color("sky.horizon"),
12769
- horizonBlend: token9.number("sky.horizonBlend"),
12770
- glowColor: token9.color("sky.glow"),
13631
+ color: token13.color("sky.color"),
13632
+ horizonColor: token13.color("sky.horizon"),
13633
+ horizonBlend: token13.number("sky.horizonBlend"),
13634
+ glowColor: token13.color("sky.glow"),
12771
13635
  starIntensity: 0.6
12772
13636
  },
12773
13637
  data: {
@@ -12813,14 +13677,14 @@ var streets = bindOfficialMapTheme(
12813
13677
  haloWidth: 1,
12814
13678
  maxWidth: 10,
12815
13679
  padding: 20,
12816
- size: zoom10.linear([
13680
+ size: zoom13.linear([
12817
13681
  [18, 11],
12818
13682
  [20, 13]
12819
13683
  ])
12820
13684
  }
12821
13685
  }
12822
13686
  }),
12823
- land: withRenderStack10(
13687
+ land: withRenderStack11(
12824
13688
  land7({
12825
13689
  barriers: streetsBarriers,
12826
13690
  background: {
@@ -12828,8 +13692,8 @@ var streets = bindOfficialMapTheme(
12828
13692
  opacity: 1
12829
13693
  },
12830
13694
  globalLandcover: {
12831
- color: expr12.match(
12832
- expr12.get(field11("class")),
13695
+ color: expr14.match(
13696
+ expr14.get(field14("class")),
12833
13697
  [
12834
13698
  { labels: "barren", value: streetsGlobalLandcoverPalette.barren },
12835
13699
  { labels: "crop", value: streetsGlobalLandcoverPalette.crop },
@@ -12995,9 +13859,9 @@ var streets = bindOfficialMapTheme(
12995
13859
  water: water7({
12996
13860
  bathymetry: {
12997
13861
  antialias: false,
12998
- color: expr12.interpolate(
13862
+ color: expr14.interpolate(
12999
13863
  { kind: "linear" },
13000
- expr12.multiply(-1, expr12.toNumber(expr12.get(field11("bathymetryMinDepth")), 0)),
13864
+ expr14.multiply(-1, expr14.toNumber(expr14.get(field14("bathymetryMinDepth")), 0)),
13001
13865
  [
13002
13866
  [0, streetsSurfacePalette.waterDepth0],
13003
13867
  [200, streetsSurfacePalette.waterDepth200],
@@ -13007,7 +13871,7 @@ var streets = bindOfficialMapTheme(
13007
13871
  ),
13008
13872
  maxZoom: 8,
13009
13873
  minZoom: 0,
13010
- opacity: zoom10.linear([
13874
+ opacity: zoom13.linear([
13011
13875
  [0, 1],
13012
13876
  [6, 1],
13013
13877
  [8, 0]
@@ -13037,7 +13901,7 @@ var streets = bindOfficialMapTheme(
13037
13901
  join: "round",
13038
13902
  minZoom: 8,
13039
13903
  opacity: 0.96,
13040
- width: zoom10.linear([
13904
+ width: zoom13.linear([
13041
13905
  [8, 0.35],
13042
13906
  [13, 1.05],
13043
13907
  [16, 2.2]
@@ -13049,7 +13913,7 @@ var streets = bindOfficialMapTheme(
13049
13913
  join: "round",
13050
13914
  minZoom: 12,
13051
13915
  opacity: 0.92,
13052
- width: zoom10.linear([
13916
+ width: zoom13.linear([
13053
13917
  [12, 0.35],
13054
13918
  [14, 0.8],
13055
13919
  [16, 1.4]
@@ -13061,7 +13925,7 @@ var streets = bindOfficialMapTheme(
13061
13925
  join: "round",
13062
13926
  minZoom: 6,
13063
13927
  opacity: 0.96,
13064
- width: zoom10.linear([
13928
+ width: zoom13.linear([
13065
13929
  [6, 0.45],
13066
13930
  [13, 1.25],
13067
13931
  [16, 3.2]
@@ -13073,7 +13937,7 @@ var streets = bindOfficialMapTheme(
13073
13937
  join: "round",
13074
13938
  minZoom: 10,
13075
13939
  opacity: 0.94,
13076
- width: zoom10.linear([
13940
+ width: zoom13.linear([
13077
13941
  [10, 0.3],
13078
13942
  [12, 0.55],
13079
13943
  [13, 0.9],
@@ -13084,7 +13948,7 @@ var streets = bindOfficialMapTheme(
13084
13948
  }
13085
13949
  }),
13086
13950
  vegetation: streetsTrees,
13087
- boundaries: withRenderStack10(
13951
+ boundaries: withRenderStack11(
13088
13952
  boundaries7({
13089
13953
  // Mapbox Standard's admin-0/admin-1 layers map to OpenMapTiles
13090
13954
  // admin_level 2/4 respectively.
@@ -13093,7 +13957,7 @@ var streets = bindOfficialMapTheme(
13093
13957
  dash: [10, 0],
13094
13958
  minZoom: 1,
13095
13959
  opacity: 1,
13096
- width: zoom10.linear([
13960
+ width: zoom13.linear([
13097
13961
  [3, 0.8],
13098
13962
  [6, 1.35],
13099
13963
  [12, 2.1]
@@ -13103,11 +13967,11 @@ var streets = bindOfficialMapTheme(
13103
13967
  color: streetsOverviewPalette.admin1,
13104
13968
  dash: [3, 2],
13105
13969
  minZoom: 2,
13106
- opacity: zoom10.linear([
13970
+ opacity: zoom13.linear([
13107
13971
  [2, 0],
13108
13972
  [3, 1]
13109
13973
  ]),
13110
- width: zoom10.linear([
13974
+ width: zoom13.linear([
13111
13975
  [3, 0.7],
13112
13976
  [6, 1.2],
13113
13977
  [12, 1.8]
@@ -13115,12 +13979,12 @@ var streets = bindOfficialMapTheme(
13115
13979
  },
13116
13980
  disputed: {
13117
13981
  color: streetsOverviewPalette.admin0,
13118
- dash: expr12.step(expr12.zoom(), expr12.literal([3, 2, 5]), [
13119
- [7, expr12.literal([2, 1.5])]
13982
+ dash: expr14.step(expr14.zoom(), expr14.literal([3, 2, 5]), [
13983
+ [7, expr14.literal([2, 1.5])]
13120
13984
  ]),
13121
13985
  minZoom: 1,
13122
13986
  opacity: 1,
13123
- width: zoom10.linear([
13987
+ width: zoom13.linear([
13124
13988
  [3, 0.5],
13125
13989
  [12, 2]
13126
13990
  ])
@@ -13151,7 +14015,7 @@ var streets = bindOfficialMapTheme(
13151
14015
  // At city detail these white markings wash out otherwise matching
13152
14016
  // road fills. Introduce them with the closer street-level detail.
13153
14017
  minZoom: 16.5,
13154
- opacity: zoom10.linear([
14018
+ opacity: zoom13.linear([
13155
14019
  [16.5, 0],
13156
14020
  [17, 1]
13157
14021
  ])
@@ -13484,14 +14348,14 @@ var streets = bindOfficialMapTheme(
13484
14348
  cycleway: pathRoadStyle(mapboxRoadPalette.cycleway, mapboxPathWidthStops, {
13485
14349
  casingColor: mapboxRoadPalette.pathCasing,
13486
14350
  casingGapWidth: roadWidth(mapboxPathWidthStops, 1),
13487
- fillOpacity: zoom10.linear([
14351
+ fillOpacity: zoom13.linear([
13488
14352
  [15, 0],
13489
14353
  [16, 1]
13490
14354
  ]),
13491
14355
  minZoom: 15,
13492
14356
  underlay: {
13493
14357
  cap: pathLineCap,
13494
- color: zoom10.linear([
14358
+ color: zoom13.linear([
13495
14359
  [15, mapboxRoadPalette.pathAtZ15],
13496
14360
  [16, mapboxRoadPalette.pathFromZ16]
13497
14361
  ]),
@@ -13500,7 +14364,7 @@ var streets = bindOfficialMapTheme(
13500
14364
  opacity: 1,
13501
14365
  width: roadWidth(mapboxPathWidthStops, 1)
13502
14366
  },
13503
- width: zoom10.linear([
14367
+ width: zoom13.linear([
13504
14368
  [12, 0],
13505
14369
  [18, 2],
13506
14370
  [22, 20]
@@ -13534,88 +14398,80 @@ var streets = bindOfficialMapTheme(
13534
14398
  ferry: {
13535
14399
  color: streetsVisual.road.ferry,
13536
14400
  minZoom: 8,
13537
- dash: expr12.step(expr12.zoom(), expr12.literal([1, 0]), [
13538
- [13, expr12.literal([12, 4])]
14401
+ dash: expr14.step(expr14.zoom(), expr14.literal([1, 0]), [
14402
+ [13, expr14.literal([12, 4])]
13539
14403
  ]),
13540
- opacity: zoom10.linear([
14404
+ opacity: zoom13.linear([
13541
14405
  [8, 0],
13542
14406
  [17, 1]
13543
14407
  ]),
13544
- width: zoom10.exponential(1.5, [
14408
+ width: zoom13.exponential(1.5, [
13545
14409
  [14, 0.5],
13546
14410
  [20, 1]
13547
14411
  ])
13548
14412
  }
13549
14413
  }),
13550
- buildings: withRenderStack10(
14414
+ buildings: withRenderStack11(
13551
14415
  buildings6({
13552
14416
  // Footprints; the render stack's extrusion pass raises them from z15, and its shadows
13553
14417
  // stand beside the flat fill, so they require this mode.
13554
14418
  mode: "flat",
13555
14419
  threeDimensional: {
14420
+ flatFootprints: false,
14421
+ entrance: { buildings: [14.25, 14.25], models: [14.25, 14.25] },
13556
14422
  edgeRadius: 1.5,
13557
- groundOcclusion: 0.12,
14423
+ groundOcclusion: 0.1,
14424
+ groundOcclusionRadius: 1.5,
13558
14425
  // Models name pools, planting and timber with these parts to follow the map's colours.
13559
14426
  modelColors: {
13560
- surface: token9.color("buildings.modelSurface"),
13561
- secondary: token9.color("buildings.modelSecondary"),
13562
- roof: token9.color("buildings.modelRoof"),
13563
- accent: token9.color("buildings.modelAccent"),
13564
- water: token9.color("buildings.modelWater"),
13565
- vegetation: token9.color("buildings.modelVegetation"),
13566
- wood: token9.color("buildings.modelWood")
14427
+ surface: token13.color("buildings.modelSurface"),
14428
+ secondary: token13.color("buildings.modelSecondary"),
14429
+ roof: token13.color("buildings.modelRoof"),
14430
+ accent: token13.color("buildings.modelAccent"),
14431
+ glass: token13.color("buildings.modelGlass"),
14432
+ water: token13.color("buildings.modelWater"),
14433
+ vegetation: token13.color("buildings.modelVegetation"),
14434
+ wood: token13.color("buildings.modelWood")
13567
14435
  },
13568
14436
  floodLight: {
13569
- intensity: token9.number("buildings.floodLight.intensity"),
13570
- brightnessScale: token9.number("buildings.floodLight.brightnessScale"),
13571
- color: token9.color("buildings.floodLight")
14437
+ intensity: token13.number("buildings.floodLight.intensity"),
14438
+ brightnessScale: token13.number("buildings.floodLight.brightnessScale"),
14439
+ color: token13.color("buildings.floodLight")
13572
14440
  },
13573
14441
  modelLighting: {
13574
14442
  wall: {
13575
14443
  shading: "map",
13576
- ambientOcclusion: 0.32,
13577
- color: token9.color("buildings.modelSurface"),
14444
+ ambientOcclusion: 0.5,
14445
+ color: token13.color("buildings.modelSurface"),
13578
14446
  roughness: 1,
13579
14447
  metallic: 0
13580
14448
  },
13581
14449
  roof: {
13582
14450
  shading: "map",
13583
- ambientOcclusion: 0.32,
13584
- color: token9.color("buildings.modelRoof"),
14451
+ ambientOcclusion: 0.45,
14452
+ color: token13.color("buildings.modelRoof"),
13585
14453
  roughness: 1,
13586
14454
  metallic: 0
13587
14455
  },
13588
14456
  window: {
13589
- // Glass keeps its original role colour even on a shared stone part.
14457
+ shading: "map",
14458
+ ambientOcclusion: 0.4,
14459
+ color: token13.color("buildings.modelGlass"),
14460
+ colorScale: 0.96,
14461
+ // Glazing keeps its material even when it shares a named stone part.
13590
14462
  partColorMix: 0,
13591
- roughness: 0,
13592
- metallic: 1,
13593
- emissiveStrength: token9.number("buildings.modelWindow.strength"),
13594
- emissiveVariation: token9.number("buildings.modelWindow.variation"),
13595
- emissiveHeight: [0, 0.9, 0, 1, 0.5],
13596
- colorVariation: {
13597
- hue: [
13598
- token9.number("buildings.modelWindow.hueLow"),
13599
- token9.number("buildings.modelWindow.hueHigh")
13600
- ],
13601
- saturation: [
13602
- token9.number("buildings.modelWindow.saturationLow"),
13603
- token9.number("buildings.modelWindow.saturationHigh")
13604
- ],
13605
- lightness: [
13606
- token9.number("buildings.modelWindow.lightnessLow"),
13607
- token9.number("buildings.modelWindow.lightnessHigh")
13608
- ],
13609
- space: "linear"
13610
- }
14463
+ roughness: 1,
14464
+ metallic: 0,
14465
+ emissiveStrength: 0,
14466
+ emissiveVariation: 0
13611
14467
  },
13612
14468
  ...Object.fromEntries(
13613
14469
  ["unclassified", "door", "lamp", "logo"].map((role) => [
13614
14470
  role,
13615
14471
  {
13616
14472
  shading: "map",
13617
- ambientOcclusion: 0.32,
13618
- color: token9.color("buildings.modelSurface"),
14473
+ ambientOcclusion: 0.5,
14474
+ color: token13.color("buildings.modelSurface"),
13619
14475
  roughness: 1,
13620
14476
  metallic: 0
13621
14477
  }
@@ -13634,7 +14490,7 @@ var streets = bindOfficialMapTheme(
13634
14490
  fill: {
13635
14491
  color: buildingFillColor,
13636
14492
  minZoom: 14.25,
13637
- opacity: zoom10.linear([
14493
+ opacity: zoom13.linear([
13638
14494
  [14.25, 0],
13639
14495
  [14.75, 0.5],
13640
14496
  [15, 1]
@@ -13643,14 +14499,14 @@ var streets = bindOfficialMapTheme(
13643
14499
  outline: {
13644
14500
  color: buildingOutlineColor,
13645
14501
  minZoom: 14.5,
13646
- opacity: zoom10.linear([
14502
+ opacity: zoom13.linear([
13647
14503
  [14.5, 0],
13648
14504
  [15, 0.6],
13649
14505
  [16, 0.82],
13650
14506
  [17, 0.96],
13651
14507
  [18, 1]
13652
14508
  ]),
13653
- width: zoom10.linear([
14509
+ width: zoom13.linear([
13654
14510
  [14.5, 0.25],
13655
14511
  [15, 0.4],
13656
14512
  [16, 0.65],
@@ -13662,7 +14518,7 @@ var streets = bindOfficialMapTheme(
13662
14518
  }),
13663
14519
  streetsBuildingRenderStack()
13664
14520
  ),
13665
- labels: withRenderStack10(
14521
+ labels: withRenderStack11(
13666
14522
  labels7({
13667
14523
  collisionPriority: "navigation",
13668
14524
  language: "local",
@@ -13728,12 +14584,12 @@ var streets = bindOfficialMapTheme(
13728
14584
  letterSpacing: 0.05,
13729
14585
  lineHeight: 1.1,
13730
14586
  maxWidth: 6,
13731
- opacity: zoom10.linear([
14587
+ opacity: zoom13.linear([
13732
14588
  [0, 0.8],
13733
14589
  [1.5, 0.5],
13734
14590
  [2.5, 0.5]
13735
14591
  ]),
13736
- size: zoom10.exponential(0.5, [
14592
+ size: zoom13.exponential(0.5, [
13737
14593
  [0, 10],
13738
14594
  [2.5, 15]
13739
14595
  ]),
@@ -13752,24 +14608,24 @@ var streets = bindOfficialMapTheme(
13752
14608
  lineHeight: 1.1,
13753
14609
  maxWidth: 6,
13754
14610
  padding: 3,
13755
- radialOffset: zoom10.step([
14611
+ radialOffset: zoom13.step([
13756
14612
  [1, 0.6],
13757
14613
  [8, 0]
13758
14614
  ]),
13759
- size: expr12.interpolate(
14615
+ size: expr14.interpolate(
13760
14616
  { kind: "cubic-bezier", x1: 0.2, x2: 0.7, y1: 0, y2: 1 },
13761
- expr12.zoom(),
14617
+ expr14.zoom(),
13762
14618
  [
13763
14619
  [
13764
14620
  1,
13765
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 11, [
14621
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 11, [
13766
14622
  [4, 9],
13767
14623
  [5, 8]
13768
14624
  ])
13769
14625
  ],
13770
14626
  [
13771
14627
  9,
13772
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 22, [
14628
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 22, [
13773
14629
  [4, 19],
13774
14630
  [5, 17]
13775
14631
  ])
@@ -13791,20 +14647,20 @@ var streets = bindOfficialMapTheme(
13791
14647
  letterSpacing: 0.15,
13792
14648
  maxWidth: 6,
13793
14649
  opacity: 0.5,
13794
- size: expr12.interpolate(
14650
+ size: expr14.interpolate(
13795
14651
  { kind: "cubic-bezier", x1: 0.85, x2: 0.65, y1: 0.7, y2: 1 },
13796
- expr12.zoom(),
14652
+ expr14.zoom(),
13797
14653
  [
13798
14654
  [
13799
14655
  4,
13800
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 9, [
14656
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 9, [
13801
14657
  [6, 8],
13802
14658
  [7, 7]
13803
14659
  ])
13804
14660
  ],
13805
14661
  [
13806
14662
  9,
13807
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 21, [
14663
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 21, [
13808
14664
  [6, 16],
13809
14665
  [7, 14]
13810
14666
  ])
@@ -13817,9 +14673,9 @@ var streets = bindOfficialMapTheme(
13817
14673
  city: {
13818
14674
  minZoom: 2,
13819
14675
  maxZoom: 15,
13820
- priority: expr12.subtract(100, expr12.coalesce(expr12.get(field11("rank")), 20)),
14676
+ priority: expr14.subtract(100, expr14.coalesce(expr14.get(field14("rank")), 20)),
13821
14677
  text: {
13822
- color: zoom10.linear([
14678
+ color: zoom13.linear([
13823
14679
  [2, streetsOverviewPalette.label],
13824
14680
  [4, streetsOverviewPalette.label],
13825
14681
  [6, streetsVisual.label.settlement]
@@ -13830,32 +14686,32 @@ var streets = bindOfficialMapTheme(
13830
14686
  lineHeight: 1.1,
13831
14687
  maxWidth: 7,
13832
14688
  padding: 1,
13833
- radialOffset: zoom10.step([
14689
+ radialOffset: zoom13.step([
13834
14690
  [2, 0.6],
13835
14691
  [8, 0]
13836
14692
  ]),
13837
- size: expr12.interpolate(
14693
+ size: expr14.interpolate(
13838
14694
  { kind: "cubic-bezier", x1: 0.2, x2: 0.9, y1: 0, y2: 1 },
13839
- expr12.zoom(),
14695
+ expr14.zoom(),
13840
14696
  [
13841
- [3, expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 13, [[6, 11]])],
14697
+ [3, expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 13, [[6, 11]])],
13842
14698
  [
13843
14699
  6,
13844
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 18, [
14700
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 18, [
13845
14701
  [6, 16],
13846
14702
  [7, 14]
13847
14703
  ])
13848
14704
  ],
13849
14705
  [
13850
14706
  8,
13851
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 20, [
14707
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 20, [
13852
14708
  [9, 16],
13853
14709
  [10, 14]
13854
14710
  ])
13855
14711
  ],
13856
14712
  [
13857
14713
  15,
13858
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 24, [
14714
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 24, [
13859
14715
  [9, 20],
13860
14716
  [12, 16],
13861
14717
  [15, 14]
@@ -13870,7 +14726,7 @@ var streets = bindOfficialMapTheme(
13870
14726
  town: {
13871
14727
  minZoom: 2,
13872
14728
  maxZoom: 13,
13873
- priority: expr12.subtract(80, expr12.coalesce(expr12.get(field11("rank")), 20)),
14729
+ priority: expr14.subtract(80, expr14.coalesce(expr14.get(field14("rank")), 20)),
13874
14730
  text: {
13875
14731
  color: streetsVisual.label.settlement,
13876
14732
  haloColor: streetsVisual.label.placeHalo,
@@ -13879,25 +14735,25 @@ var streets = bindOfficialMapTheme(
13879
14735
  lineHeight: 1.1,
13880
14736
  maxWidth: 7,
13881
14737
  padding: 1,
13882
- radialOffset: zoom10.step([
14738
+ radialOffset: zoom13.step([
13883
14739
  [2, 0.55],
13884
14740
  [8, 0]
13885
14741
  ]),
13886
- size: expr12.interpolate(
14742
+ size: expr14.interpolate(
13887
14743
  { kind: "cubic-bezier", x1: 0.2, x2: 0.9, y1: 0, y2: 1 },
13888
- expr12.zoom(),
14744
+ expr14.zoom(),
13889
14745
  [
13890
- [3, expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 11, [[9, 10]])],
14746
+ [3, expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 11, [[9, 10]])],
13891
14747
  [
13892
14748
  6,
13893
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 14, [
14749
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 14, [
13894
14750
  [9, 12],
13895
14751
  [12, 10]
13896
14752
  ])
13897
14753
  ],
13898
14754
  [
13899
14755
  8,
13900
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 16, [
14756
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 16, [
13901
14757
  [9, 14],
13902
14758
  [12, 12],
13903
14759
  [15, 10]
@@ -13905,7 +14761,7 @@ var streets = bindOfficialMapTheme(
13905
14761
  ],
13906
14762
  [
13907
14763
  13,
13908
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 22, [
14764
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 22, [
13909
14765
  [9, 20],
13910
14766
  [12, 16],
13911
14767
  [15, 14]
@@ -13929,7 +14785,7 @@ var streets = bindOfficialMapTheme(
13929
14785
  village: {
13930
14786
  minZoom: 2,
13931
14787
  maxZoom: 13,
13932
- priority: expr12.subtract(65, expr12.coalesce(expr12.get(field11("rank")), 20)),
14788
+ priority: expr14.subtract(65, expr14.coalesce(expr14.get(field14("rank")), 20)),
13933
14789
  text: {
13934
14790
  color: streetsVisual.label.settlement,
13935
14791
  haloColor: streetsVisual.label.placeHalo,
@@ -13938,25 +14794,25 @@ var streets = bindOfficialMapTheme(
13938
14794
  lineHeight: 1.1,
13939
14795
  maxWidth: 7,
13940
14796
  padding: 1,
13941
- radialOffset: zoom10.step([
14797
+ radialOffset: zoom13.step([
13942
14798
  [2, 0.55],
13943
14799
  [8, 0]
13944
14800
  ]),
13945
- size: expr12.interpolate(
14801
+ size: expr14.interpolate(
13946
14802
  { kind: "cubic-bezier", x1: 0.2, x2: 0.9, y1: 0, y2: 1 },
13947
- expr12.zoom(),
14803
+ expr14.zoom(),
13948
14804
  [
13949
- [3, expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 11, [[9, 10]])],
14805
+ [3, expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 11, [[9, 10]])],
13950
14806
  [
13951
14807
  6,
13952
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 14, [
14808
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 14, [
13953
14809
  [9, 12],
13954
14810
  [12, 10]
13955
14811
  ])
13956
14812
  ],
13957
14813
  [
13958
14814
  8,
13959
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 16, [
14815
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 16, [
13960
14816
  [9, 14],
13961
14817
  [12, 12],
13962
14818
  [15, 10]
@@ -13964,7 +14820,7 @@ var streets = bindOfficialMapTheme(
13964
14820
  ],
13965
14821
  [
13966
14822
  13,
13967
- expr12.step(expr12.coalesce(expr12.get(field11("rank")), 99), 22, [
14823
+ expr14.step(expr14.coalesce(expr14.get(field14("rank")), 99), 22, [
13968
14824
  [9, 20],
13969
14825
  [12, 16],
13970
14826
  [15, 14]
@@ -13988,37 +14844,37 @@ var streets = bindOfficialMapTheme(
13988
14844
  neighborhood: {
13989
14845
  minZoom: 10,
13990
14846
  maxZoom: 15,
13991
- priority: expr12.subtract(65, expr12.coalesce(expr12.get(field11("rank")), 20)),
14847
+ priority: expr14.subtract(65, expr14.coalesce(expr14.get(field14("rank")), 20)),
13992
14848
  text: {
13993
14849
  font: streetsVisual.font.default,
13994
14850
  color: streetsVisual.label.neighborhood,
13995
14851
  haloColor: streetsVisual.label.placeHalo,
13996
14852
  haloBlur: 0,
13997
14853
  haloWidth: 1.3,
13998
- letterSpacing: expr12.match(
13999
- expr12.get(field11("class")),
14854
+ letterSpacing: expr14.match(
14855
+ expr14.get(field14("class")),
14000
14856
  [{ labels: "suburb", value: 0.15 }],
14001
14857
  0.05
14002
14858
  ),
14003
14859
  lineHeight: 1.1,
14004
14860
  maxWidth: 7,
14005
14861
  padding: 3,
14006
- size: expr12.interpolate(
14862
+ size: expr14.interpolate(
14007
14863
  { kind: "cubic-bezier", x1: 0.5, x2: 1, y1: 0, y2: 1 },
14008
- expr12.zoom(),
14864
+ expr14.zoom(),
14009
14865
  [
14010
14866
  [
14011
14867
  11,
14012
- expr12.match(
14013
- expr12.get(field11("class")),
14868
+ expr14.match(
14869
+ expr14.get(field14("class")),
14014
14870
  [{ labels: "suburb", value: 12 }],
14015
14871
  11.5
14016
14872
  )
14017
14873
  ],
14018
14874
  [
14019
14875
  15,
14020
- expr12.match(
14021
- expr12.get(field11("class")),
14876
+ expr14.match(
14877
+ expr14.get(field14("class")),
14022
14878
  [{ labels: "suburb", value: 16 }],
14023
14879
  15
14024
14880
  )
@@ -14038,7 +14894,7 @@ var streets = bindOfficialMapTheme(
14038
14894
  haloColor: streetsVisual.label.placeHalo,
14039
14895
  haloBlur: 0.5,
14040
14896
  haloWidth: 1,
14041
- size: zoom10.linear([
14897
+ size: zoom13.linear([
14042
14898
  [11, 10],
14043
14899
  [15, 14]
14044
14900
  ])
@@ -14090,12 +14946,11 @@ var streets = bindOfficialMapTheme(
14090
14946
  minZoom: 6
14091
14947
  },
14092
14948
  detail: {
14093
- // World splits route lines more often than the reference source. A shorter
14094
- // interval keeps route references available in regional views; collision
14095
- // still suppresses adjacent shields, and street-scale repetition stays sparse.
14096
- spacing: zoom10.linear([
14097
- [11, 220],
14098
- [13, 300],
14949
+ // Reserve room for the road network in metropolitan views; retain the
14950
+ // existing street-detail interval from z14.
14951
+ spacing: zoom13.linear([
14952
+ [11, token13.number("labels.shield.spacing11")],
14953
+ [13, token13.number("labels.shield.spacing13")],
14099
14954
  [14, 600]
14100
14955
  ])
14101
14956
  },
@@ -14124,7 +14979,7 @@ var streets = bindOfficialMapTheme(
14124
14979
  haloColor: streetsVisual.label.waterHalo,
14125
14980
  haloWidth: 0,
14126
14981
  letterSpacing: 0.25,
14127
- size: zoom10.linear([
14982
+ size: zoom13.linear([
14128
14983
  [1, 12],
14129
14984
  [8, 18]
14130
14985
  ])
@@ -14139,7 +14994,7 @@ var streets = bindOfficialMapTheme(
14139
14994
  color: streetsDetailPalette.waterText,
14140
14995
  haloColor: streetsVisual.label.waterHalo,
14141
14996
  haloWidth: 0,
14142
- size: zoom10.linear([
14997
+ size: zoom13.linear([
14143
14998
  [5, 11],
14144
14999
  [14, 16]
14145
15000
  ])
@@ -14154,8 +15009,8 @@ var streets = bindOfficialMapTheme(
14154
15009
  color: streetsDetailPalette.waterText,
14155
15010
  haloColor: streetsVisual.label.waterHalo,
14156
15011
  haloWidth: 0,
14157
- letterSpacing: expr12.match(
14158
- expr12.get(field11("class")),
15012
+ letterSpacing: expr14.match(
15013
+ expr14.get(field14("class")),
14159
15014
  [
14160
15015
  { labels: "ocean", value: 0.25 },
14161
15016
  { labels: ["sea", "bay"], value: 0.15 }
@@ -14163,7 +15018,7 @@ var streets = bindOfficialMapTheme(
14163
15018
  0
14164
15019
  ),
14165
15020
  maxAngle: 30,
14166
- size: zoom10.linear([
15021
+ size: zoom13.linear([
14167
15022
  [1, 12],
14168
15023
  [8, 18]
14169
15024
  ])
@@ -14172,7 +15027,7 @@ var streets = bindOfficialMapTheme(
14172
15027
  waterway: {
14173
15028
  minZoom: 13,
14174
15029
  placement: "line",
14175
- spacing: zoom10.linear([
15030
+ spacing: zoom13.linear([
14176
15031
  [15, 250],
14177
15032
  [17, 400]
14178
15033
  ]),
@@ -14182,7 +15037,7 @@ var streets = bindOfficialMapTheme(
14182
15037
  haloColor: streetsVisual.label.waterHalo,
14183
15038
  haloWidth: 0,
14184
15039
  maxAngle: 30,
14185
- size: zoom10.linear([
15040
+ size: zoom13.linear([
14186
15041
  [13, 12],
14187
15042
  [18, 18]
14188
15043
  ])
@@ -14200,7 +15055,7 @@ var streets = bindOfficialMapTheme(
14200
15055
  letterSpacing: 0.01,
14201
15056
  lineHeight: 1.1,
14202
15057
  maxWidth: 9,
14203
- size: zoom10.linear([
15058
+ size: zoom13.linear([
14204
15059
  [8, 12],
14205
15060
  [14, 15]
14206
15061
  ])
@@ -14236,7 +15091,9 @@ var streets = bindOfficialMapTheme(
14236
15091
  detailZoom: 18,
14237
15092
  // World also calls botanical collections gardens. Keep only the main destinations;
14238
15093
  // zooming in must not turn individual planting sections into named POIs.
14239
- maxRankByType: { garden: 1 },
15094
+ // Generic airport POIs can describe travel businesses or misplaced listings.
15095
+ // Keep only the highest rank; mapped airports use labels.aerodrome.
15096
+ maxRankByType: { airport: 0, garden: 1 },
14240
15097
  densityByCategory: {
14241
15098
  lodging: 1,
14242
15099
  "park-nature": 3,
@@ -14279,6 +15136,7 @@ var streets = bindOfficialMapTheme(
14279
15136
  }
14280
15137
  })
14281
15138
  );
15139
+ var streets = bindOfficialMapTheme(withStreetsCartography(streetsBase));
14282
15140
 
14283
15141
  // src/index.ts
14284
15142
  var baedeker2 = freezeOfficialMap(baedeker);