@tileflow/maps 0.1.0-alpha.8 → 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -4
- package/THIRD_PARTY_NOTICES.md +24 -6
- package/assets/README.md +23 -2
- package/assets/streets/build-trees.mjs +425 -0
- package/assets/streets/icons/aerialway-dark.svg +11 -0
- package/assets/streets/icons/aerialway-monochrome-dark.svg +11 -0
- package/assets/streets/icons/aerialway-monochrome.svg +11 -0
- package/assets/streets/icons/aerialway.svg +11 -0
- package/assets/streets/icons/airport-dark.svg +11 -0
- package/assets/streets/icons/airport-monochrome-dark.svg +11 -0
- package/assets/streets/icons/airport-monochrome.svg +11 -0
- package/assets/streets/icons/airport.svg +11 -0
- package/assets/streets/icons/amusement-park-dark.svg +11 -0
- package/assets/streets/icons/amusement-park-monochrome-dark.svg +11 -0
- package/assets/streets/icons/amusement-park-monochrome.svg +11 -0
- package/assets/streets/icons/amusement-park.svg +11 -0
- package/assets/streets/icons/aquarium-dark.svg +11 -0
- package/assets/streets/icons/aquarium-monochrome-dark.svg +11 -0
- package/assets/streets/icons/aquarium-monochrome.svg +11 -0
- package/assets/streets/icons/aquarium.svg +11 -0
- package/assets/streets/icons/art-gallery-dark.svg +11 -0
- package/assets/streets/icons/art-gallery-monochrome-dark.svg +11 -0
- package/assets/streets/icons/art-gallery-monochrome.svg +11 -0
- package/assets/streets/icons/art-gallery.svg +11 -0
- package/assets/streets/icons/bank-dark.svg +11 -0
- package/assets/streets/icons/bank-monochrome-dark.svg +11 -0
- package/assets/streets/icons/bank-monochrome.svg +11 -0
- package/assets/streets/icons/bank.svg +11 -0
- package/assets/streets/icons/bar-dark.svg +11 -0
- package/assets/streets/icons/bar-monochrome-dark.svg +11 -0
- package/assets/streets/icons/bar-monochrome.svg +11 -0
- package/assets/streets/icons/bar.svg +11 -0
- package/assets/streets/icons/beach-dark.svg +11 -0
- package/assets/streets/icons/beach-monochrome-dark.svg +11 -0
- package/assets/streets/icons/beach-monochrome.svg +11 -0
- package/assets/streets/icons/beach.svg +11 -0
- package/assets/streets/icons/beauty-dark.svg +11 -0
- package/assets/streets/icons/beauty-monochrome-dark.svg +11 -0
- package/assets/streets/icons/beauty-monochrome.svg +11 -0
- package/assets/streets/icons/beauty.svg +11 -0
- package/assets/streets/icons/bookstore-dark.svg +11 -0
- package/assets/streets/icons/bookstore-monochrome-dark.svg +11 -0
- package/assets/streets/icons/bookstore-monochrome.svg +11 -0
- package/assets/streets/icons/bookstore.svg +11 -0
- package/assets/streets/icons/buddhist-dark.svg +11 -0
- package/assets/streets/icons/buddhist-monochrome-dark.svg +11 -0
- package/assets/streets/icons/buddhist-monochrome.svg +11 -0
- package/assets/streets/icons/buddhist.svg +11 -0
- package/assets/streets/icons/bus-dark.svg +11 -0
- package/assets/streets/icons/bus-monochrome-dark.svg +11 -0
- package/assets/streets/icons/bus-monochrome.svg +11 -0
- package/assets/streets/icons/bus.svg +11 -0
- package/assets/streets/icons/campsite-dark.svg +11 -0
- package/assets/streets/icons/campsite-monochrome-dark.svg +11 -0
- package/assets/streets/icons/campsite-monochrome.svg +11 -0
- package/assets/streets/icons/campsite.svg +11 -0
- package/assets/streets/icons/car-dark.svg +11 -0
- package/assets/streets/icons/car-monochrome-dark.svg +11 -0
- package/assets/streets/icons/car-monochrome.svg +11 -0
- package/assets/streets/icons/car-repair-dark.svg +11 -0
- package/assets/streets/icons/car-repair-monochrome-dark.svg +11 -0
- package/assets/streets/icons/car-repair-monochrome.svg +11 -0
- package/assets/streets/icons/car-repair.svg +11 -0
- package/assets/streets/icons/car.svg +11 -0
- package/assets/streets/icons/casino-dark.svg +11 -0
- package/assets/streets/icons/casino-monochrome-dark.svg +11 -0
- package/assets/streets/icons/casino-monochrome.svg +11 -0
- package/assets/streets/icons/casino.svg +11 -0
- package/assets/streets/icons/castle-dark.svg +11 -0
- package/assets/streets/icons/castle-monochrome-dark.svg +11 -0
- package/assets/streets/icons/castle-monochrome.svg +11 -0
- package/assets/streets/icons/castle.svg +11 -0
- package/assets/streets/icons/cemetery-dark.svg +11 -0
- package/assets/streets/icons/cemetery-monochrome-dark.svg +11 -0
- package/assets/streets/icons/cemetery-monochrome.svg +11 -0
- package/assets/streets/icons/cemetery.svg +11 -0
- package/assets/streets/icons/charging-station-dark.svg +11 -0
- package/assets/streets/icons/charging-station-monochrome-dark.svg +11 -0
- package/assets/streets/icons/charging-station-monochrome.svg +11 -0
- package/assets/streets/icons/charging-station.svg +11 -0
- package/assets/streets/icons/christian-dark.svg +11 -0
- package/assets/streets/icons/christian-monochrome-dark.svg +11 -0
- package/assets/streets/icons/christian-monochrome.svg +11 -0
- package/assets/streets/icons/christian.svg +11 -0
- package/assets/streets/icons/cinema-dark.svg +11 -0
- package/assets/streets/icons/cinema-monochrome-dark.svg +11 -0
- package/assets/streets/icons/cinema-monochrome.svg +11 -0
- package/assets/streets/icons/cinema.svg +11 -0
- package/assets/streets/icons/clothing-dark.svg +11 -0
- package/assets/streets/icons/clothing-monochrome-dark.svg +11 -0
- package/assets/streets/icons/clothing-monochrome.svg +11 -0
- package/assets/streets/icons/clothing.svg +11 -0
- package/assets/streets/icons/coffee-dark.svg +11 -0
- package/assets/streets/icons/coffee-monochrome-dark.svg +11 -0
- package/assets/streets/icons/coffee-monochrome.svg +11 -0
- package/assets/streets/icons/coffee.svg +4 -5
- package/assets/streets/icons/college-dark.svg +11 -0
- package/assets/streets/icons/college-monochrome-dark.svg +11 -0
- package/assets/streets/icons/college-monochrome.svg +11 -0
- package/assets/streets/icons/college.svg +11 -0
- package/assets/streets/icons/community-dark.svg +11 -0
- package/assets/streets/icons/community-monochrome-dark.svg +11 -0
- package/assets/streets/icons/community-monochrome.svg +11 -0
- package/assets/streets/icons/community.svg +11 -0
- package/assets/streets/icons/convenience-dark.svg +11 -0
- package/assets/streets/icons/convenience-monochrome-dark.svg +11 -0
- package/assets/streets/icons/convenience-monochrome.svg +11 -0
- package/assets/streets/icons/convenience.svg +11 -0
- package/assets/streets/icons/culture-dark.svg +11 -0
- package/assets/streets/icons/culture-monochrome-dark.svg +11 -0
- package/assets/streets/icons/culture-monochrome.svg +11 -0
- package/assets/streets/icons/culture.svg +4 -5
- package/assets/streets/icons/dentist-dark.svg +11 -0
- package/assets/streets/icons/dentist-monochrome-dark.svg +11 -0
- package/assets/streets/icons/dentist-monochrome.svg +11 -0
- package/assets/streets/icons/dentist.svg +11 -0
- package/assets/streets/icons/doctor-dark.svg +11 -0
- package/assets/streets/icons/doctor-monochrome-dark.svg +11 -0
- package/assets/streets/icons/doctor-monochrome.svg +11 -0
- package/assets/streets/icons/doctor.svg +11 -0
- package/assets/streets/icons/dog-park-dark.svg +11 -0
- package/assets/streets/icons/dog-park-monochrome-dark.svg +11 -0
- package/assets/streets/icons/dog-park-monochrome.svg +11 -0
- package/assets/streets/icons/dog-park.svg +11 -0
- package/assets/streets/icons/drinking-water-dark.svg +11 -0
- package/assets/streets/icons/drinking-water-monochrome-dark.svg +11 -0
- package/assets/streets/icons/drinking-water-monochrome.svg +11 -0
- package/assets/streets/icons/drinking-water.svg +11 -0
- package/assets/streets/icons/education-dark.svg +11 -0
- package/assets/streets/icons/education-monochrome-dark.svg +11 -0
- package/assets/streets/icons/education-monochrome.svg +11 -0
- package/assets/streets/icons/education.svg +5 -6
- package/assets/streets/icons/electronics-dark.svg +11 -0
- package/assets/streets/icons/electronics-monochrome-dark.svg +11 -0
- package/assets/streets/icons/electronics-monochrome.svg +11 -0
- package/assets/streets/icons/electronics.svg +11 -0
- package/assets/streets/icons/embassy-dark.svg +11 -0
- package/assets/streets/icons/embassy-monochrome-dark.svg +11 -0
- package/assets/streets/icons/embassy-monochrome.svg +11 -0
- package/assets/streets/icons/embassy.svg +11 -0
- package/assets/streets/icons/entertainment-dark.svg +11 -0
- package/assets/streets/icons/entertainment-monochrome-dark.svg +11 -0
- package/assets/streets/icons/entertainment-monochrome.svg +11 -0
- package/assets/streets/icons/entertainment.svg +11 -0
- package/assets/streets/icons/fast-food-dark.svg +11 -0
- package/assets/streets/icons/fast-food-monochrome-dark.svg +11 -0
- package/assets/streets/icons/fast-food-monochrome.svg +11 -0
- package/assets/streets/icons/fast-food.svg +11 -0
- package/assets/streets/icons/ferry-dark.svg +11 -0
- package/assets/streets/icons/ferry-monochrome-dark.svg +11 -0
- package/assets/streets/icons/ferry-monochrome.svg +11 -0
- package/assets/streets/icons/ferry.svg +11 -0
- package/assets/streets/icons/fire-station-dark.svg +11 -0
- package/assets/streets/icons/fire-station-monochrome-dark.svg +11 -0
- package/assets/streets/icons/fire-station-monochrome.svg +11 -0
- package/assets/streets/icons/fire-station.svg +11 -0
- package/assets/streets/icons/fitness-dark.svg +11 -0
- package/assets/streets/icons/fitness-monochrome-dark.svg +11 -0
- package/assets/streets/icons/fitness-monochrome.svg +11 -0
- package/assets/streets/icons/fitness.svg +11 -0
- package/assets/streets/icons/florist-dark.svg +11 -0
- package/assets/streets/icons/florist-monochrome-dark.svg +11 -0
- package/assets/streets/icons/florist-monochrome.svg +11 -0
- package/assets/streets/icons/florist.svg +11 -0
- package/assets/streets/icons/food-dark.svg +11 -0
- package/assets/streets/icons/food-monochrome-dark.svg +11 -0
- package/assets/streets/icons/food-monochrome.svg +11 -0
- package/assets/streets/icons/food.svg +4 -5
- package/assets/streets/icons/fuel-dark.svg +11 -0
- package/assets/streets/icons/fuel-monochrome-dark.svg +11 -0
- package/assets/streets/icons/fuel-monochrome.svg +11 -0
- package/assets/streets/icons/fuel.svg +11 -0
- package/assets/streets/icons/garden-dark.svg +11 -0
- package/assets/streets/icons/garden-monochrome-dark.svg +11 -0
- package/assets/streets/icons/garden-monochrome.svg +11 -0
- package/assets/streets/icons/garden.svg +11 -0
- package/assets/streets/icons/golf-dark.svg +11 -0
- package/assets/streets/icons/golf-monochrome-dark.svg +11 -0
- package/assets/streets/icons/golf-monochrome.svg +11 -0
- package/assets/streets/icons/golf.svg +11 -0
- package/assets/streets/icons/grocery-dark.svg +11 -0
- package/assets/streets/icons/grocery-monochrome-dark.svg +11 -0
- package/assets/streets/icons/grocery-monochrome.svg +11 -0
- package/assets/streets/icons/grocery.svg +11 -0
- package/assets/streets/icons/harbor-dark.svg +11 -0
- package/assets/streets/icons/harbor-monochrome-dark.svg +11 -0
- package/assets/streets/icons/harbor-monochrome.svg +11 -0
- package/assets/streets/icons/harbor.svg +11 -0
- package/assets/streets/icons/hardware-dark.svg +11 -0
- package/assets/streets/icons/hardware-monochrome-dark.svg +11 -0
- package/assets/streets/icons/hardware-monochrome.svg +11 -0
- package/assets/streets/icons/hardware.svg +11 -0
- package/assets/streets/icons/health-dark.svg +11 -0
- package/assets/streets/icons/health-monochrome-dark.svg +11 -0
- package/assets/streets/icons/health-monochrome.svg +11 -0
- package/assets/streets/icons/health.svg +4 -5
- package/assets/streets/icons/historic-dark.svg +11 -0
- package/assets/streets/icons/historic-monochrome-dark.svg +11 -0
- package/assets/streets/icons/historic-monochrome.svg +11 -0
- package/assets/streets/icons/historic.svg +11 -0
- package/assets/streets/icons/jewish-dark.svg +11 -0
- package/assets/streets/icons/jewish-monochrome-dark.svg +11 -0
- package/assets/streets/icons/jewish-monochrome.svg +11 -0
- package/assets/streets/icons/jewish.svg +11 -0
- package/assets/streets/icons/landmark-dark.svg +11 -0
- package/assets/streets/icons/landmark-monochrome-dark.svg +11 -0
- package/assets/streets/icons/landmark-monochrome.svg +11 -0
- package/assets/streets/icons/landmark.svg +11 -0
- package/assets/streets/icons/laundry-dark.svg +11 -0
- package/assets/streets/icons/laundry-monochrome-dark.svg +11 -0
- package/assets/streets/icons/laundry-monochrome.svg +11 -0
- package/assets/streets/icons/laundry.svg +11 -0
- package/assets/streets/icons/library-dark.svg +11 -0
- package/assets/streets/icons/library-monochrome-dark.svg +11 -0
- package/assets/streets/icons/library-monochrome.svg +11 -0
- package/assets/streets/icons/library.svg +11 -0
- package/assets/streets/icons/lodging-dark.svg +11 -0
- package/assets/streets/icons/lodging-monochrome-dark.svg +11 -0
- package/assets/streets/icons/lodging-monochrome.svg +11 -0
- package/assets/streets/icons/lodging.svg +3 -4
- package/assets/streets/icons/major-transit-dark.svg +11 -0
- package/assets/streets/icons/major-transit-monochrome-dark.svg +11 -0
- package/assets/streets/icons/major-transit-monochrome.svg +11 -0
- package/assets/streets/icons/major-transit.svg +4 -5
- package/assets/streets/icons/monument-dark.svg +11 -0
- package/assets/streets/icons/monument-monochrome-dark.svg +11 -0
- package/assets/streets/icons/monument-monochrome.svg +11 -0
- package/assets/streets/icons/monument.svg +11 -0
- package/assets/streets/icons/mountain-dark.svg +11 -0
- package/assets/streets/icons/mountain-monochrome-dark.svg +11 -0
- package/assets/streets/icons/mountain-monochrome.svg +11 -0
- package/assets/streets/icons/mountain.svg +11 -0
- package/assets/streets/icons/music-dark.svg +11 -0
- package/assets/streets/icons/music-monochrome-dark.svg +11 -0
- package/assets/streets/icons/music-monochrome.svg +11 -0
- package/assets/streets/icons/music.svg +11 -0
- package/assets/streets/icons/muslim-dark.svg +11 -0
- package/assets/streets/icons/muslim-monochrome-dark.svg +11 -0
- package/assets/streets/icons/muslim-monochrome.svg +11 -0
- package/assets/streets/icons/muslim.svg +11 -0
- package/assets/streets/icons/natural-dark.svg +11 -0
- package/assets/streets/icons/natural-monochrome-dark.svg +11 -0
- package/assets/streets/icons/natural-monochrome.svg +11 -0
- package/assets/streets/icons/natural.svg +11 -0
- package/assets/streets/icons/nature-dark.svg +11 -0
- package/assets/streets/icons/nature-monochrome-dark.svg +11 -0
- package/assets/streets/icons/nature-monochrome.svg +11 -0
- package/assets/streets/icons/nature.svg +11 -0
- package/assets/streets/icons/nightclub-dark.svg +11 -0
- package/assets/streets/icons/nightclub-monochrome-dark.svg +11 -0
- package/assets/streets/icons/nightclub-monochrome.svg +11 -0
- package/assets/streets/icons/nightclub.svg +11 -0
- package/assets/streets/icons/parking-dark.svg +11 -0
- package/assets/streets/icons/parking-garage-dark.svg +11 -0
- package/assets/streets/icons/parking-garage-monochrome-dark.svg +11 -0
- package/assets/streets/icons/parking-garage-monochrome.svg +11 -0
- package/assets/streets/icons/parking-garage.svg +11 -0
- package/assets/streets/icons/parking-monochrome-dark.svg +11 -0
- package/assets/streets/icons/parking-monochrome.svg +11 -0
- package/assets/streets/icons/parking.svg +3 -4
- package/assets/streets/icons/pharmacy-dark.svg +11 -0
- package/assets/streets/icons/pharmacy-monochrome-dark.svg +11 -0
- package/assets/streets/icons/pharmacy-monochrome.svg +11 -0
- package/assets/streets/icons/pharmacy.svg +11 -0
- package/assets/streets/icons/playground-dark.svg +11 -0
- package/assets/streets/icons/playground-monochrome-dark.svg +11 -0
- package/assets/streets/icons/playground-monochrome.svg +11 -0
- package/assets/streets/icons/playground.svg +11 -0
- package/assets/streets/icons/plaza-dark.svg +11 -0
- package/assets/streets/icons/plaza-monochrome-dark.svg +11 -0
- package/assets/streets/icons/plaza-monochrome.svg +11 -0
- package/assets/streets/icons/plaza.svg +11 -0
- package/assets/streets/icons/police-dark.svg +11 -0
- package/assets/streets/icons/police-monochrome-dark.svg +11 -0
- package/assets/streets/icons/police-monochrome.svg +11 -0
- package/assets/streets/icons/police.svg +11 -0
- package/assets/streets/icons/post-dark.svg +11 -0
- package/assets/streets/icons/post-monochrome-dark.svg +11 -0
- package/assets/streets/icons/post-monochrome.svg +11 -0
- package/assets/streets/icons/post.svg +11 -0
- package/assets/streets/icons/prison-dark.svg +11 -0
- package/assets/streets/icons/prison-monochrome-dark.svg +11 -0
- package/assets/streets/icons/prison-monochrome.svg +11 -0
- package/assets/streets/icons/prison.svg +11 -0
- package/assets/streets/icons/rail-dark.svg +11 -0
- package/assets/streets/icons/rail-light-dark.svg +11 -0
- package/assets/streets/icons/rail-light-monochrome-dark.svg +11 -0
- package/assets/streets/icons/rail-light-monochrome.svg +11 -0
- package/assets/streets/icons/rail-light.svg +11 -0
- package/assets/streets/icons/rail-monochrome-dark.svg +11 -0
- package/assets/streets/icons/rail-monochrome.svg +11 -0
- package/assets/streets/icons/rail.svg +11 -0
- package/assets/streets/icons/services-dark.svg +11 -0
- package/assets/streets/icons/services-monochrome-dark.svg +11 -0
- package/assets/streets/icons/services-monochrome.svg +11 -0
- package/assets/streets/icons/services.svg +4 -5
- package/assets/streets/icons/shopping-dark.svg +11 -0
- package/assets/streets/icons/shopping-monochrome-dark.svg +11 -0
- package/assets/streets/icons/shopping-monochrome.svg +11 -0
- package/assets/streets/icons/shopping.svg +4 -5
- package/assets/streets/icons/sidewalk-dot-dark.svg +1 -1
- package/assets/streets/icons/sidewalk-dot.svg +1 -1
- package/assets/streets/icons/sport-dark.svg +11 -0
- package/assets/streets/icons/sport-monochrome-dark.svg +11 -0
- package/assets/streets/icons/sport-monochrome.svg +11 -0
- package/assets/streets/icons/sport.svg +11 -0
- package/assets/streets/icons/stadium-dark.svg +11 -0
- package/assets/streets/icons/stadium-monochrome-dark.svg +11 -0
- package/assets/streets/icons/stadium-monochrome.svg +11 -0
- package/assets/streets/icons/stadium.svg +11 -0
- package/assets/streets/icons/street-art-dark.svg +11 -0
- package/assets/streets/icons/street-art-monochrome-dark.svg +11 -0
- package/assets/streets/icons/street-art-monochrome.svg +11 -0
- package/assets/streets/icons/street-art.svg +11 -0
- package/assets/streets/icons/streets-tree-columnar-dark.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-columnar.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-conifer-dark.pattern.svg +57 -0
- package/assets/streets/icons/streets-tree-conifer.pattern.svg +57 -0
- package/assets/streets/icons/streets-tree-open-dark.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-open.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-palm-fan-dark.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-palm-fan.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-palm-feather-dark.pattern.svg +305 -0
- package/assets/streets/icons/streets-tree-palm-feather.pattern.svg +305 -0
- package/assets/streets/icons/streets-tree-round-dark.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-round.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-tall-dark.pattern.svg +108 -0
- package/assets/streets/icons/streets-tree-tall.pattern.svg +108 -0
- package/assets/streets/icons/swimming-dark.svg +11 -0
- package/assets/streets/icons/swimming-monochrome-dark.svg +11 -0
- package/assets/streets/icons/swimming-monochrome.svg +11 -0
- package/assets/streets/icons/swimming.svg +11 -0
- package/assets/streets/icons/theatre-dark.svg +11 -0
- package/assets/streets/icons/theatre-monochrome-dark.svg +11 -0
- package/assets/streets/icons/theatre-monochrome.svg +11 -0
- package/assets/streets/icons/theatre.svg +11 -0
- package/assets/streets/icons/toilet-dark.svg +11 -0
- package/assets/streets/icons/toilet-monochrome-dark.svg +11 -0
- package/assets/streets/icons/toilet-monochrome.svg +11 -0
- package/assets/streets/icons/toilet.svg +11 -0
- package/assets/streets/icons/town-hall-dark.svg +11 -0
- package/assets/streets/icons/town-hall-monochrome-dark.svg +11 -0
- package/assets/streets/icons/town-hall-monochrome.svg +11 -0
- package/assets/streets/icons/town-hall.svg +11 -0
- package/assets/streets/icons/viewpoint-dark.svg +11 -0
- package/assets/streets/icons/viewpoint-monochrome-dark.svg +11 -0
- package/assets/streets/icons/viewpoint-monochrome.svg +11 -0
- package/assets/streets/icons/viewpoint.svg +11 -0
- package/assets/streets/icons/waterfall-dark.svg +11 -0
- package/assets/streets/icons/waterfall-monochrome-dark.svg +11 -0
- package/assets/streets/icons/waterfall-monochrome.svg +11 -0
- package/assets/streets/icons/waterfall.svg +11 -0
- package/assets/streets/icons/worship-dark.svg +11 -0
- package/assets/streets/icons/worship-monochrome-dark.svg +11 -0
- package/assets/streets/icons/worship-monochrome.svg +11 -0
- package/assets/streets/icons/worship.svg +11 -0
- package/assets/streets/icons/zoo-dark.svg +11 -0
- package/assets/streets/icons/zoo-monochrome-dark.svg +11 -0
- package/assets/streets/icons/zoo-monochrome.svg +11 -0
- package/assets/streets/icons/zoo.svg +11 -0
- package/assets/streets/models/streets-tree-columnar.far.glb +0 -0
- package/assets/streets/models/streets-tree-columnar.glb +0 -0
- package/assets/streets/models/streets-tree-conifer.far.glb +0 -0
- package/assets/streets/models/streets-tree-conifer.glb +0 -0
- package/assets/streets/models/streets-tree-open.far.glb +0 -0
- package/assets/streets/models/streets-tree-open.glb +0 -0
- package/assets/streets/models/streets-tree-palm-fan.far.glb +0 -0
- package/assets/streets/models/streets-tree-palm-fan.glb +0 -0
- package/assets/streets/models/streets-tree-palm-feather.far.glb +0 -0
- package/assets/streets/models/streets-tree-palm-feather.glb +0 -0
- package/assets/streets/models/streets-tree-round.far.glb +0 -0
- package/assets/streets/models/streets-tree-round.glb +0 -0
- package/assets/streets/models/streets-tree-tall.far.glb +0 -0
- package/assets/streets/models/streets-tree-tall.glb +0 -0
- package/dist/index.d.ts +87 -7
- package/dist/index.js +1638 -766
- package/docs/design-and-assets.md +35 -14
- package/package.json +3 -3
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
// Original Streets tree artwork. Near/far glTF meshes and their top-down SVG crowns share
|
|
2
|
+
// one geometry description. Run `node packages/maps/assets/streets/build-trees.mjs [--check]`.
|
|
3
|
+
import {mkdir, readFile, writeFile} from 'node:fs/promises';
|
|
4
|
+
import {dirname, join} from 'node:path';
|
|
5
|
+
import {fileURLToPath} from 'node:url';
|
|
6
|
+
|
|
7
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const tau = Math.PI * 2;
|
|
9
|
+
const golden = Math.PI * (3 - Math.sqrt(5));
|
|
10
|
+
const add = (a, b) => a.map((n, i) => n + b[i]);
|
|
11
|
+
const mul = (v, n) => v.map((x) => x * n);
|
|
12
|
+
const sub = (a, b) => a.map((n, i) => n - b[i]);
|
|
13
|
+
const cross = (a, b) => [
|
|
14
|
+
a[1] * b[2] - a[2] * b[1],
|
|
15
|
+
a[2] * b[0] - a[0] * b[2],
|
|
16
|
+
a[0] * b[1] - a[1] * b[0],
|
|
17
|
+
];
|
|
18
|
+
const unit = (v) => mul(v, 1 / (Math.hypot(...v) || 1));
|
|
19
|
+
const dot = (a, b) => a.reduce((n, v, i) => n + v * b[i], 0);
|
|
20
|
+
const mesh = (material) => ({material, positions: [], normals: [], shades: [], indices: []});
|
|
21
|
+
function vertex(m, p, n, shade = 1) {
|
|
22
|
+
m.positions.push(...p);
|
|
23
|
+
m.normals.push(...unit(n));
|
|
24
|
+
m.shades.push(shade);
|
|
25
|
+
return m.shades.length - 1;
|
|
26
|
+
}
|
|
27
|
+
function face(m, a, b, c, outward) {
|
|
28
|
+
const point = (i) => m.positions.slice(i * 3, i * 3 + 3);
|
|
29
|
+
const normal = cross(sub(point(b), point(a)), sub(point(c), point(a)));
|
|
30
|
+
if (dot(normal, outward) < 0) m.indices.push(a, c, b);
|
|
31
|
+
else m.indices.push(a, b, c);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Small irregular lobes, with a continuous normal field and a faceted silhouette. The
|
|
35
|
+
// variation is in the authored mesh, so it never shimmers or changes while the camera moves.
|
|
36
|
+
function crown(m, centre, radii, seed, far, farSides = 6) {
|
|
37
|
+
const sides = far ? farSides : 7;
|
|
38
|
+
const rings = far ? 2 : 4;
|
|
39
|
+
const top = vertex(m, add(centre, [0, radii[1], 0]), [0, 1, 0], 1.07);
|
|
40
|
+
const rows = [];
|
|
41
|
+
for (let r = 1; r < rings; r++) {
|
|
42
|
+
const latitude = (r / rings) * Math.PI;
|
|
43
|
+
const row = [];
|
|
44
|
+
for (let s = 0; s < sides; s++) {
|
|
45
|
+
const angle = (s / sides) * tau + seed * 0.7 + (r % 2) * 0.1;
|
|
46
|
+
const ripple = 1 + 0.065 * Math.sin(angle * 3 + seed) + 0.035 * Math.cos(angle * 5 - seed);
|
|
47
|
+
const n = [
|
|
48
|
+
Math.sin(latitude) * Math.cos(angle),
|
|
49
|
+
Math.cos(latitude),
|
|
50
|
+
Math.sin(latitude) * Math.sin(angle),
|
|
51
|
+
];
|
|
52
|
+
row.push(
|
|
53
|
+
vertex(
|
|
54
|
+
m,
|
|
55
|
+
add(
|
|
56
|
+
centre,
|
|
57
|
+
n.map((v, i) => v * radii[i] * (i === 1 ? 1 : ripple)),
|
|
58
|
+
),
|
|
59
|
+
n.map((v, i) => v / radii[i]),
|
|
60
|
+
0.94 + 0.07 * n[1] + 0.025 * Math.sin(s * 2 + seed),
|
|
61
|
+
),
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
rows.push(row);
|
|
65
|
+
}
|
|
66
|
+
const bottom = vertex(m, add(centre, [0, -radii[1], 0]), [0, -1, 0], 0.86);
|
|
67
|
+
for (let s = 0; s < sides; s++) {
|
|
68
|
+
const n = (s + 1) % sides;
|
|
69
|
+
face(m, top, rows[0][s], rows[0][n], [0, 1, 0]);
|
|
70
|
+
for (let r = 0; r + 1 < rows.length; r++) {
|
|
71
|
+
const out = sub(m.positions.slice(rows[r][s] * 3, rows[r][s] * 3 + 3), centre);
|
|
72
|
+
face(m, rows[r][s], rows[r + 1][s], rows[r + 1][n], out);
|
|
73
|
+
face(m, rows[r][s], rows[r + 1][n], rows[r][n], out);
|
|
74
|
+
}
|
|
75
|
+
face(m, bottom, rows.at(-1)[n], rows.at(-1)[s], [0, -1, 0]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function branch(m, from, to, base, tip, sides) {
|
|
80
|
+
const axis = unit(sub(to, from));
|
|
81
|
+
const u = unit(cross(axis, Math.abs(axis[1]) > 0.9 ? [1, 0, 0] : [0, 1, 0]));
|
|
82
|
+
const v = cross(axis, u);
|
|
83
|
+
const rows = [from, to].map((p, r) =>
|
|
84
|
+
Array.from({length: sides}, (_, s) => {
|
|
85
|
+
const n = add(mul(u, Math.cos((s * tau) / sides)), mul(v, Math.sin((s * tau) / sides)));
|
|
86
|
+
return vertex(
|
|
87
|
+
m,
|
|
88
|
+
add(p, mul(n, r ? tip : base)),
|
|
89
|
+
n,
|
|
90
|
+
0.94 + 0.06 * Math.cos((s * tau) / sides),
|
|
91
|
+
);
|
|
92
|
+
}),
|
|
93
|
+
);
|
|
94
|
+
for (let s = 0; s < sides; s++) {
|
|
95
|
+
const n = (s + 1) % sides;
|
|
96
|
+
const outward = sub(m.positions.slice(rows[0][s] * 3, rows[0][s] * 3 + 3), from);
|
|
97
|
+
face(m, rows[0][s], rows[1][s], rows[1][n], outward);
|
|
98
|
+
face(m, rows[0][s], rows[1][n], rows[0][n], outward);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const broadleaf = {
|
|
103
|
+
round: [
|
|
104
|
+
[-1.95, 7.4, 0.75, 1.85, 1.8, 1.8],
|
|
105
|
+
[1.75, 7.7, 1.1, 1.8, 1.85, 1.75],
|
|
106
|
+
[0.35, 7.05, -2, 1.9, 1.6, 1.7],
|
|
107
|
+
[-0.65, 8.65, -0.65, 1.65, 1.65, 1.7],
|
|
108
|
+
[0.1, 6.85, 2.35, 1.5, 1.35, 1.4],
|
|
109
|
+
],
|
|
110
|
+
open: [
|
|
111
|
+
[-2.65, 6.6, 0.8, 1.95, 1.15, 1.8],
|
|
112
|
+
[2.55, 7.05, 0.95, 1.9, 1.25, 1.8],
|
|
113
|
+
[0.45, 6.5, -2.5, 2, 1.1, 1.65],
|
|
114
|
+
[-0.9, 7.85, -0.8, 1.8, 1.25, 1.6],
|
|
115
|
+
[-0.15, 6.8, 2.65, 1.75, 1.05, 1.55],
|
|
116
|
+
],
|
|
117
|
+
tall: [
|
|
118
|
+
[-1.55, 9, 0.55, 1.45, 2, 1.35],
|
|
119
|
+
[1.5, 9.5, 0.8, 1.4, 1.95, 1.4],
|
|
120
|
+
[0.25, 8.75, -1.6, 1.45, 1.8, 1.35],
|
|
121
|
+
[-0.45, 11.15, -0.35, 1.45, 2.05, 1.45],
|
|
122
|
+
[0, 9.35, 1.85, 1.2, 1.6, 1.1],
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
function deciduous(form, far) {
|
|
127
|
+
const bark = mesh('bark');
|
|
128
|
+
const leaves = mesh('leaves');
|
|
129
|
+
const tall = form === 'tall';
|
|
130
|
+
const foot = [0, 0, 0];
|
|
131
|
+
const waist = [0.04, 0.85, -0.02];
|
|
132
|
+
const fork = [0.12, tall ? 5.1 : 3.65, -0.08];
|
|
133
|
+
// A flared foot and a substantial fork read at street scale. Branches enter the
|
|
134
|
+
// individual leaf clusters, leaving the space between them open to the sky.
|
|
135
|
+
branch(bark, foot, waist, tall ? 0.43 : 0.46, 0.29, far ? 4 : 7);
|
|
136
|
+
branch(bark, waist, fork, 0.29, 0.24, far ? 4 : 7);
|
|
137
|
+
for (const [i, lobe] of broadleaf[form].entries()) {
|
|
138
|
+
const centre = lobe.slice(0, 3);
|
|
139
|
+
if (far) {
|
|
140
|
+
branch(bark, fork, centre, 0.19, 0.055, 3);
|
|
141
|
+
} else {
|
|
142
|
+
const elbow = add(fork, mul(sub(centre, fork), 0.52));
|
|
143
|
+
elbow[1] -= 0.25;
|
|
144
|
+
branch(bark, fork, elbow, i < 3 ? 0.22 : 0.16, 0.14, 5);
|
|
145
|
+
branch(bark, elbow, centre, 0.14, 0.045, 4);
|
|
146
|
+
}
|
|
147
|
+
// Both LODs retain every cluster and branch. Only tessellation changes, so
|
|
148
|
+
// switching to the distant mesh does not close holes or remove crown limbs.
|
|
149
|
+
crown(leaves, centre, lobe.slice(3), i + form.length, far, 5);
|
|
150
|
+
}
|
|
151
|
+
return [bark, leaves];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function evergreen(form, far) {
|
|
155
|
+
const bark = mesh('bark');
|
|
156
|
+
const leaves = mesh('leaves');
|
|
157
|
+
const column = form === 'columnar';
|
|
158
|
+
branch(bark, [0, 0, 0], [0, 8, 0], column ? 0.17 : 0.23, 0.06, far ? 4 : 6);
|
|
159
|
+
const tiers = far ? 3 : column ? 5 : 6;
|
|
160
|
+
for (let i = 0; i < tiers; i++) {
|
|
161
|
+
const t = i / (tiers - 1);
|
|
162
|
+
const radius = column ? 1.35 - t * 0.65 : 3.2 - t * 2.4;
|
|
163
|
+
const y = (column ? 3.5 : 3) + t * (column ? 7.4 : 7);
|
|
164
|
+
if (column)
|
|
165
|
+
crown(
|
|
166
|
+
leaves,
|
|
167
|
+
[0.12 * Math.sin(i * 2), y, 0.1 * Math.cos(i)],
|
|
168
|
+
[radius, 2.1 - t * 0.7, radius],
|
|
169
|
+
i + 2,
|
|
170
|
+
far,
|
|
171
|
+
);
|
|
172
|
+
else {
|
|
173
|
+
const sides = far ? 6 : 9;
|
|
174
|
+
const top = vertex(leaves, [0, y + 2.6, 0], [0, 1, 0], 1.06);
|
|
175
|
+
const bottom = vertex(leaves, [0, y - 0.25, 0], [0, -1, 0], 0.86);
|
|
176
|
+
const ring = Array.from({length: sides}, (_, s) => {
|
|
177
|
+
const a = (s * tau) / sides + i * golden;
|
|
178
|
+
const r = radius * (1 + 0.07 * Math.sin(s * 3 + i));
|
|
179
|
+
return vertex(
|
|
180
|
+
leaves,
|
|
181
|
+
[Math.cos(a) * r, y + 0.12 * Math.sin(s * 2), Math.sin(a) * r],
|
|
182
|
+
[Math.cos(a), 0.45, Math.sin(a)],
|
|
183
|
+
0.94 + 0.03 * Math.sin(s),
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
for (let s = 0; s < sides; s++) {
|
|
187
|
+
const n = (s + 1) % sides;
|
|
188
|
+
face(leaves, top, ring[s], ring[n], [
|
|
189
|
+
Math.cos((s * tau) / sides + i * golden),
|
|
190
|
+
1,
|
|
191
|
+
Math.sin((s * tau) / sides + i * golden),
|
|
192
|
+
]);
|
|
193
|
+
face(leaves, bottom, ring[n], ring[s], [0, -1, 0]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return [bark, leaves];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function palm(form, far) {
|
|
201
|
+
const fan = form === 'palm-fan';
|
|
202
|
+
const stem = mesh('stem');
|
|
203
|
+
const leaves = mesh('leaves');
|
|
204
|
+
const fronds = mesh('fronds');
|
|
205
|
+
const height = fan ? 8.2 : 12;
|
|
206
|
+
const sections = far ? 2 : 6;
|
|
207
|
+
const centre = (t) => [0.36 * t * t, height * t, 0.14 * t * t];
|
|
208
|
+
for (let r = 0; r < sections; r++)
|
|
209
|
+
branch(
|
|
210
|
+
stem,
|
|
211
|
+
centre(r / sections),
|
|
212
|
+
centre((r + 1) / sections),
|
|
213
|
+
0.24 - (r / sections) * 0.06,
|
|
214
|
+
0.24 - ((r + 1) / sections) * 0.06,
|
|
215
|
+
far ? 4 : 7,
|
|
216
|
+
);
|
|
217
|
+
const top = centre(1);
|
|
218
|
+
if (!fan) branch(leaves, top, add(top, [0, 1.05, 0]), 0.21, 0.1, far ? 4 : 7);
|
|
219
|
+
const origin = add(top, [0, fan ? 0 : 1.05, 0]);
|
|
220
|
+
const count = far ? 6 : fan ? 15 : 12;
|
|
221
|
+
for (let f = 0; f < count; f++) {
|
|
222
|
+
const a = f * golden;
|
|
223
|
+
const age = f / (count - 1);
|
|
224
|
+
const direction = [Math.cos(a), 0, Math.sin(a)];
|
|
225
|
+
const side = [-Math.sin(a), 0, Math.cos(a)];
|
|
226
|
+
const shade = 1.04 - age * 0.16;
|
|
227
|
+
if (fan) {
|
|
228
|
+
const end = add(origin, add(mul(direction, 1 + age * 0.8), [0, 1.15 - age * 1.8, 0]));
|
|
229
|
+
branch(leaves, origin, end, 0.035, 0.015, 3);
|
|
230
|
+
const mid = vertex(fronds, end, [0, 1, 0], shade);
|
|
231
|
+
const folds = far ? 3 : 5;
|
|
232
|
+
const rim = Array.from({length: folds + 1}, (_, i) => {
|
|
233
|
+
const t = -1.35 + (i * 2.7) / folds;
|
|
234
|
+
const p = add(end, add(mul(direction, Math.cos(t) * 1.05), mul(side, Math.sin(t) * 1.2)));
|
|
235
|
+
p[1] += (i % 2 ? 0.12 : -0.12) - age * 0.4;
|
|
236
|
+
return vertex(
|
|
237
|
+
fronds,
|
|
238
|
+
p,
|
|
239
|
+
add([0, 1, 0], mul(side, i % 2 ? 0.3 : -0.3)),
|
|
240
|
+
shade * (i % 2 ? 1.03 : 0.95),
|
|
241
|
+
);
|
|
242
|
+
});
|
|
243
|
+
for (let i = 0; i < folds; i++) face(fronds, mid, rim[i], rim[i + 1], [0, 1, 0]);
|
|
244
|
+
} else {
|
|
245
|
+
const segments = far ? 2 : 6;
|
|
246
|
+
const rows = [];
|
|
247
|
+
for (let s = 0; s <= segments; s++) {
|
|
248
|
+
const t = s / segments;
|
|
249
|
+
const width = s === segments ? 0.015 : 0.52 * Math.sin(Math.PI * (0.13 + t * 0.82));
|
|
250
|
+
const p = add(
|
|
251
|
+
origin,
|
|
252
|
+
add(mul(direction, t * (3.4 + 0.3 * Math.sin(f))), [
|
|
253
|
+
0,
|
|
254
|
+
Math.sin(t * Math.PI * 0.8) * (1.7 - age) - t * t * (0.7 + age * 1.4),
|
|
255
|
+
0,
|
|
256
|
+
]),
|
|
257
|
+
);
|
|
258
|
+
rows.push(
|
|
259
|
+
[-1, 0, 1].map((flank) =>
|
|
260
|
+
vertex(
|
|
261
|
+
fronds,
|
|
262
|
+
add(p, add(mul(side, width * flank), [0, -Math.abs(flank) * width * 0.55, 0])),
|
|
263
|
+
add([0, 1, 0], mul(side, flank * 0.4)),
|
|
264
|
+
shade * (flank ? 0.95 : 1.04),
|
|
265
|
+
),
|
|
266
|
+
),
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
for (let s = 0; s < segments; s++)
|
|
270
|
+
for (let side = 0; side < 2; side++) {
|
|
271
|
+
face(fronds, rows[s][side], rows[s + 1][side], rows[s + 1][side + 1], [0, 1, 0]);
|
|
272
|
+
face(fronds, rows[s][side], rows[s + 1][side + 1], rows[s][side + 1], [0, 1, 0]);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return [stem, leaves, fronds].filter((m) => m.indices.length);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function glb(parts, name) {
|
|
280
|
+
const blocks = [],
|
|
281
|
+
views = [],
|
|
282
|
+
accessors = [];
|
|
283
|
+
let offset = 0;
|
|
284
|
+
const accessor = (array, type, componentType, target, bounds) => {
|
|
285
|
+
const bytes = new Uint8Array(array.buffer);
|
|
286
|
+
const block = new Uint8Array(Math.ceil(bytes.length / 4) * 4);
|
|
287
|
+
block.set(bytes);
|
|
288
|
+
blocks.push(block);
|
|
289
|
+
views.push({buffer: 0, byteOffset: offset, byteLength: bytes.length, target});
|
|
290
|
+
offset += block.length;
|
|
291
|
+
accessors.push({
|
|
292
|
+
bufferView: views.length - 1,
|
|
293
|
+
componentType,
|
|
294
|
+
count: array.length / (type === 'VEC3' ? 3 : 1),
|
|
295
|
+
type,
|
|
296
|
+
...bounds,
|
|
297
|
+
});
|
|
298
|
+
return accessors.length - 1;
|
|
299
|
+
};
|
|
300
|
+
const primitives = parts.map((m, material) => ({
|
|
301
|
+
attributes: {
|
|
302
|
+
POSITION: accessor(new Float32Array(m.positions), 'VEC3', 5126, 34962, {
|
|
303
|
+
min: [0, 1, 2].map((axis) => Math.min(...m.positions.filter((_, i) => i % 3 === axis))),
|
|
304
|
+
max: [0, 1, 2].map((axis) => Math.max(...m.positions.filter((_, i) => i % 3 === axis))),
|
|
305
|
+
}),
|
|
306
|
+
NORMAL: accessor(new Float32Array(m.normals), 'VEC3', 5126, 34962),
|
|
307
|
+
COLOR_0: accessor(
|
|
308
|
+
new Float32Array(m.shades.flatMap((s) => [s * 0.8, s * 0.8, s * 0.8])),
|
|
309
|
+
'VEC3',
|
|
310
|
+
5126,
|
|
311
|
+
34962,
|
|
312
|
+
),
|
|
313
|
+
},
|
|
314
|
+
indices: accessor(new Uint16Array(m.indices), 'SCALAR', 5123, 34963),
|
|
315
|
+
material,
|
|
316
|
+
}));
|
|
317
|
+
const json = {
|
|
318
|
+
asset: {version: '2.0', generator: 'Tileflow Streets tree artwork'},
|
|
319
|
+
scene: 0,
|
|
320
|
+
scenes: [{nodes: [0]}],
|
|
321
|
+
nodes: [{mesh: 0}],
|
|
322
|
+
meshes: [{name, primitives}],
|
|
323
|
+
materials: parts.map((m) => ({
|
|
324
|
+
name: m.material,
|
|
325
|
+
doubleSided: m.material === 'fronds',
|
|
326
|
+
pbrMetallicRoughness: {baseColorFactor: [1, 1, 1, 1], metallicFactor: 0, roughnessFactor: 1},
|
|
327
|
+
})),
|
|
328
|
+
accessors,
|
|
329
|
+
bufferViews: views,
|
|
330
|
+
buffers: [{byteLength: offset}],
|
|
331
|
+
};
|
|
332
|
+
const text = Buffer.from(JSON.stringify(json));
|
|
333
|
+
const padded = Buffer.alloc(Math.ceil(text.length / 4) * 4, 32);
|
|
334
|
+
text.copy(padded);
|
|
335
|
+
const header = Buffer.alloc(20);
|
|
336
|
+
header.writeUInt32LE(0x46546c67, 0);
|
|
337
|
+
header.writeUInt32LE(2, 4);
|
|
338
|
+
header.writeUInt32LE(28 + padded.length + offset, 8);
|
|
339
|
+
header.writeUInt32LE(padded.length, 12);
|
|
340
|
+
header.writeUInt32LE(0x4e4f534a, 16);
|
|
341
|
+
const bin = Buffer.alloc(8);
|
|
342
|
+
bin.writeUInt32LE(offset, 0);
|
|
343
|
+
bin.writeUInt32LE(0x004e4942, 4);
|
|
344
|
+
return Buffer.concat([header, padded, bin, ...blocks]);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function topView(parts, dark) {
|
|
348
|
+
const foliage = parts.filter((m) => m.material === 'leaves' || m.material === 'fronds');
|
|
349
|
+
const reach = Math.max(
|
|
350
|
+
...foliage.flatMap((m) => m.positions.filter((_, i) => i % 3 !== 1).map(Math.abs)),
|
|
351
|
+
);
|
|
352
|
+
const scale = 26 / reach;
|
|
353
|
+
const light = unit([-0.6, 1, -0.7]);
|
|
354
|
+
const base = dark ? [67, 91, 77] : [146, 186, 136];
|
|
355
|
+
const triangles = [];
|
|
356
|
+
for (const m of foliage)
|
|
357
|
+
for (let i = 0; i < m.indices.length; i += 3) {
|
|
358
|
+
const ids = m.indices.slice(i, i + 3);
|
|
359
|
+
const points = ids.map((id) => m.positions.slice(id * 3, id * 3 + 3));
|
|
360
|
+
const normal = unit(cross(sub(points[1], points[0]), sub(points[2], points[0])));
|
|
361
|
+
if (normal[1] < 0.01) continue;
|
|
362
|
+
const luminance = 0.87 + 0.22 * Math.max(0, dot(normal, light));
|
|
363
|
+
const fill =
|
|
364
|
+
'#' +
|
|
365
|
+
base
|
|
366
|
+
.map((v) =>
|
|
367
|
+
Math.round(Math.min(255, v * luminance))
|
|
368
|
+
.toString(16)
|
|
369
|
+
.padStart(2, '0'),
|
|
370
|
+
)
|
|
371
|
+
.join('');
|
|
372
|
+
triangles.push({
|
|
373
|
+
height: points.reduce((n, p) => n + p[1], 0) / 3,
|
|
374
|
+
path: `<path d="M${points.map((p) => `${(32 + p[0] * scale).toFixed(2)},${(32 + p[2] * scale).toFixed(2)}`).join('L')}Z" fill="${fill}" stroke="${fill}" stroke-width="0.35"/>`,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
triangles.sort((a, b) => a.height - b.height);
|
|
378
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">\n<!-- Generated by build-trees.mjs. Original Tileflow crown artwork. -->\n${triangles.map((t) => t.path).join('\n')}\n</svg>\n`;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export function buildStreetsTrees() {
|
|
382
|
+
const files = new Map();
|
|
383
|
+
const catalogue = [];
|
|
384
|
+
for (const form of ['round', 'open', 'tall', 'conifer', 'columnar', 'palm-feather', 'palm-fan']) {
|
|
385
|
+
const build = (far) =>
|
|
386
|
+
form.startsWith('palm')
|
|
387
|
+
? palm(form, far)
|
|
388
|
+
: form in broadleaf
|
|
389
|
+
? deciduous(form, far)
|
|
390
|
+
: evergreen(form, far);
|
|
391
|
+
const near = build(false),
|
|
392
|
+
far = build(true);
|
|
393
|
+
const id = `streets-tree-${form}`;
|
|
394
|
+
for (const [level, parts] of [
|
|
395
|
+
['near', near],
|
|
396
|
+
['far', far],
|
|
397
|
+
]) {
|
|
398
|
+
const triangles = parts.reduce((n, m) => n + m.indices.length / 3, 0);
|
|
399
|
+
if (triangles > (level === 'near' ? 700 : 100))
|
|
400
|
+
throw new Error(`${id} ${level}: ${triangles} triangles exceeds the Streets budget`);
|
|
401
|
+
files.set(`models/${id}${level === 'far' ? '.far' : ''}.glb`, glb(parts, id));
|
|
402
|
+
catalogue.push({id, level, triangles});
|
|
403
|
+
}
|
|
404
|
+
files.set(`icons/${id}.pattern.svg`, topView(near, false));
|
|
405
|
+
files.set(`icons/${id}-dark.pattern.svg`, topView(near, true));
|
|
406
|
+
}
|
|
407
|
+
return {files, catalogue};
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
411
|
+
const {files, catalogue} = buildStreetsTrees();
|
|
412
|
+
const check = process.argv.includes('--check');
|
|
413
|
+
for (const [path, content] of files) {
|
|
414
|
+
const expected = Buffer.from(content);
|
|
415
|
+
const target = join(here, path);
|
|
416
|
+
if (check) {
|
|
417
|
+
const actual = await readFile(target).catch(() => undefined);
|
|
418
|
+
if (!actual?.equals(expected)) throw new Error(`Regenerate Streets tree artwork: ${path}`);
|
|
419
|
+
} else {
|
|
420
|
+
await mkdir(dirname(target), {recursive: true});
|
|
421
|
+
await writeFile(target, expected);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
console.log(JSON.stringify({files: files.size, catalogue}, null, 2));
|
|
425
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Night Aerial cableway</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#252839" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#8296E6" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#252839"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Night Aerial cableway</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#292929" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#989898" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#292929"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Aerial cableway</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#ffffff" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#606060" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#ffffff"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Aerial cableway</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#FFFFFF" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#465DCD" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#FFFFFF"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Night Airport</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#252839" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#8296E6" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#252839"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Night Airport</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#292929" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#989898" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#292929"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Airport</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#ffffff" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#606060" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#ffffff"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Airport</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#FFFFFF" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#465DCD" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#FFFFFF"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Night Amusement park</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki amusement-park pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#252839" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#C786BC" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#252839"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13.5 7C13.5 9.02798 12.4939 10.821 10.9535 11.907L12 13.9999H3L4.04645 11.907C2.50613 10.821 1.5 9.02798 1.5 7C1.5 3.68629 4.18629 1 7.5 1C10.8137 1 13.5 3.68629 13.5 7ZM12.2984 7.125H8.99487C8.96844 7.4453 8.84138 7.73706 8.64538 7.96861L10.9814 10.3046C11.7719 9.47202 12.2669 8.35614 12.2984 7.125ZM10.8046 10.4814L8.46861 8.14538C8.33136 8.26156 8.17296 8.35351 8 8.41465V11.7743C9.08206 11.6623 10.0574 11.1908 10.8046 10.4814ZM6.00513 7.125H2.7016C2.73307 8.35614 3.2281 9.47202 4.01864 10.3046L6.35462 7.96861C6.15862 7.73706 6.03156 7.4453 6.00513 7.125ZM4.19542 10.4814C4.94259 11.1908 5.91794 11.6623 7 11.7743V8.41465C6.82704 8.35351 6.66864 8.26156 6.53139 8.14538L4.19542 10.4814ZM12.2984 6.875C12.2669 5.64386 11.7719 4.52798 10.9814 3.69542L8.64538 6.03139C8.84138 6.26294 8.96844 6.5547 8.99487 6.875H12.2984ZM10.8046 3.51864C9.97202 2.7281 8.85614 2.23307 7.625 2.2016V5.50513C7.9453 5.53156 8.23706 5.65862 8.46861 5.85462L10.8046 3.51864ZM7.375 5.50513V2.2016C6.14386 2.23307 5.02798 2.7281 4.19542 3.51864L6.53139 5.85462C6.76294 5.65862 7.0547 5.53156 7.375 5.50513ZM6.35462 6.03139L4.01864 3.69542C3.2281 4.52798 2.73307 5.64386 2.7016 6.875H6.00513C6.03156 6.5547 6.15862 6.26294 6.35462 6.03139Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Night Amusement park</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki amusement-park pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#292929" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#989898" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#292929"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13.5 7C13.5 9.02798 12.4939 10.821 10.9535 11.907L12 13.9999H3L4.04645 11.907C2.50613 10.821 1.5 9.02798 1.5 7C1.5 3.68629 4.18629 1 7.5 1C10.8137 1 13.5 3.68629 13.5 7ZM12.2984 7.125H8.99487C8.96844 7.4453 8.84138 7.73706 8.64538 7.96861L10.9814 10.3046C11.7719 9.47202 12.2669 8.35614 12.2984 7.125ZM10.8046 10.4814L8.46861 8.14538C8.33136 8.26156 8.17296 8.35351 8 8.41465V11.7743C9.08206 11.6623 10.0574 11.1908 10.8046 10.4814ZM6.00513 7.125H2.7016C2.73307 8.35614 3.2281 9.47202 4.01864 10.3046L6.35462 7.96861C6.15862 7.73706 6.03156 7.4453 6.00513 7.125ZM4.19542 10.4814C4.94259 11.1908 5.91794 11.6623 7 11.7743V8.41465C6.82704 8.35351 6.66864 8.26156 6.53139 8.14538L4.19542 10.4814ZM12.2984 6.875C12.2669 5.64386 11.7719 4.52798 10.9814 3.69542L8.64538 6.03139C8.84138 6.26294 8.96844 6.5547 8.99487 6.875H12.2984ZM10.8046 3.51864C9.97202 2.7281 8.85614 2.23307 7.625 2.2016V5.50513C7.9453 5.53156 8.23706 5.65862 8.46861 5.85462L10.8046 3.51864ZM7.375 5.50513V2.2016C6.14386 2.23307 5.02798 2.7281 4.19542 3.51864L6.53139 5.85462C6.76294 5.65862 7.0547 5.53156 7.375 5.50513ZM6.35462 6.03139L4.01864 3.69542C3.2281 4.52798 2.73307 5.64386 2.7016 6.875H6.00513C6.03156 6.5547 6.15862 6.26294 6.35462 6.03139Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Amusement park</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki amusement-park pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#ffffff" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#9b9b9b" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#ffffff"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13.5 7C13.5 9.02798 12.4939 10.821 10.9535 11.907L12 13.9999H3L4.04645 11.907C2.50613 10.821 1.5 9.02798 1.5 7C1.5 3.68629 4.18629 1 7.5 1C10.8137 1 13.5 3.68629 13.5 7ZM12.2984 7.125H8.99487C8.96844 7.4453 8.84138 7.73706 8.64538 7.96861L10.9814 10.3046C11.7719 9.47202 12.2669 8.35614 12.2984 7.125ZM10.8046 10.4814L8.46861 8.14538C8.33136 8.26156 8.17296 8.35351 8 8.41465V11.7743C9.08206 11.6623 10.0574 11.1908 10.8046 10.4814ZM6.00513 7.125H2.7016C2.73307 8.35614 3.2281 9.47202 4.01864 10.3046L6.35462 7.96861C6.15862 7.73706 6.03156 7.4453 6.00513 7.125ZM4.19542 10.4814C4.94259 11.1908 5.91794 11.6623 7 11.7743V8.41465C6.82704 8.35351 6.66864 8.26156 6.53139 8.14538L4.19542 10.4814ZM12.2984 6.875C12.2669 5.64386 11.7719 4.52798 10.9814 3.69542L8.64538 6.03139C8.84138 6.26294 8.96844 6.5547 8.99487 6.875H12.2984ZM10.8046 3.51864C9.97202 2.7281 8.85614 2.23307 7.625 2.2016V5.50513C7.9453 5.53156 8.23706 5.65862 8.46861 5.85462L10.8046 3.51864ZM7.375 5.50513V2.2016C6.14386 2.23307 5.02798 2.7281 4.19542 3.51864L6.53139 5.85462C6.76294 5.65862 7.0547 5.53156 7.375 5.50513ZM6.35462 6.03139L4.01864 3.69542C3.2281 4.52798 2.73307 5.64386 2.7016 6.875H6.00513C6.03156 6.5547 6.15862 6.26294 6.35462 6.03139Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Amusement park</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki amusement-park pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#FFFFFF" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#F37CCC" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#FFFFFF"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M13.5 7C13.5 9.02798 12.4939 10.821 10.9535 11.907L12 13.9999H3L4.04645 11.907C2.50613 10.821 1.5 9.02798 1.5 7C1.5 3.68629 4.18629 1 7.5 1C10.8137 1 13.5 3.68629 13.5 7ZM12.2984 7.125H8.99487C8.96844 7.4453 8.84138 7.73706 8.64538 7.96861L10.9814 10.3046C11.7719 9.47202 12.2669 8.35614 12.2984 7.125ZM10.8046 10.4814L8.46861 8.14538C8.33136 8.26156 8.17296 8.35351 8 8.41465V11.7743C9.08206 11.6623 10.0574 11.1908 10.8046 10.4814ZM6.00513 7.125H2.7016C2.73307 8.35614 3.2281 9.47202 4.01864 10.3046L6.35462 7.96861C6.15862 7.73706 6.03156 7.4453 6.00513 7.125ZM4.19542 10.4814C4.94259 11.1908 5.91794 11.6623 7 11.7743V8.41465C6.82704 8.35351 6.66864 8.26156 6.53139 8.14538L4.19542 10.4814ZM12.2984 6.875C12.2669 5.64386 11.7719 4.52798 10.9814 3.69542L8.64538 6.03139C8.84138 6.26294 8.96844 6.5547 8.99487 6.875H12.2984ZM10.8046 3.51864C9.97202 2.7281 8.85614 2.23307 7.625 2.2016V5.50513C7.9453 5.53156 8.23706 5.65862 8.46861 5.85462L10.8046 3.51864ZM7.375 5.50513V2.2016C6.14386 2.23307 5.02798 2.7281 4.19542 3.51864L6.53139 5.85462C6.76294 5.65862 7.0547 5.53156 7.375 5.50513ZM6.35462 6.03139L4.01864 3.69542C3.2281 4.52798 2.73307 5.64386 2.7016 6.875H6.00513C6.03156 6.5547 6.15862 6.26294 6.35462 6.03139Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Night Aquarium</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aquarium pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#252839" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#C786BC" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#252839"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M1.13505 8.57743C1.98919 6.14741 4.72075 2 10 2C12.6518 2 14 3 14 3C14 3 11.6865 3 10.6203 3.44512C10.54 3.47864 10.4747 3.53744 10.4329 3.61375C10.2432 3.95995 9.75252 5.04744 10.3231 6.19506C10.4172 6.38427 10.6364 6.46548 10.8383 6.40312C11.3474 6.24589 12.3301 5.89727 13.0761 5.35729C13.2973 5.1972 13.615 5.25773 13.6797 5.52298C13.9401 6.59045 13.9401 8.40955 13.6797 9.47702C13.615 9.74227 13.2973 9.8028 13.0761 9.64271C12.3301 9.10273 11.3474 8.75411 10.8383 8.59688C10.6364 8.53452 10.4172 8.61573 10.3231 8.80494C9.75252 9.95256 10.2432 11.04 10.4329 11.3863C10.4747 11.4626 10.54 11.5214 10.6203 11.5549C11.6865 12 14 12 14 12C13.5 12.3333 11.8 13 9.00001 13C4.51722 13 2.02736 10.3427 1.25972 9.35985C1.08546 9.13673 1.04117 8.84452 1.13505 8.57743ZM5.00001 9C5.69037 9 6.25001 8.44036 6.25001 7.75C6.25001 7.05964 5.69037 6.5 5.00001 6.5C4.30966 6.5 3.75001 7.05964 3.75001 7.75C3.75001 8.44036 4.30966 9 5.00001 9Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Night Aquarium</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aquarium pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#292929" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#989898" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#292929"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M1.13505 8.57743C1.98919 6.14741 4.72075 2 10 2C12.6518 2 14 3 14 3C14 3 11.6865 3 10.6203 3.44512C10.54 3.47864 10.4747 3.53744 10.4329 3.61375C10.2432 3.95995 9.75252 5.04744 10.3231 6.19506C10.4172 6.38427 10.6364 6.46548 10.8383 6.40312C11.3474 6.24589 12.3301 5.89727 13.0761 5.35729C13.2973 5.1972 13.615 5.25773 13.6797 5.52298C13.9401 6.59045 13.9401 8.40955 13.6797 9.47702C13.615 9.74227 13.2973 9.8028 13.0761 9.64271C12.3301 9.10273 11.3474 8.75411 10.8383 8.59688C10.6364 8.53452 10.4172 8.61573 10.3231 8.80494C9.75252 9.95256 10.2432 11.04 10.4329 11.3863C10.4747 11.4626 10.54 11.5214 10.6203 11.5549C11.6865 12 14 12 14 12C13.5 12.3333 11.8 13 9.00001 13C4.51722 13 2.02736 10.3427 1.25972 9.35985C1.08546 9.13673 1.04117 8.84452 1.13505 8.57743ZM5.00001 9C5.69037 9 6.25001 8.44036 6.25001 7.75C6.25001 7.05964 5.69037 6.5 5.00001 6.5C4.30966 6.5 3.75001 7.05964 3.75001 7.75C3.75001 8.44036 4.30966 9 5.00001 9Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>monochrome Aquarium</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aquarium pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#ffffff" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#9b9b9b" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#ffffff"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M1.13505 8.57743C1.98919 6.14741 4.72075 2 10 2C12.6518 2 14 3 14 3C14 3 11.6865 3 10.6203 3.44512C10.54 3.47864 10.4747 3.53744 10.4329 3.61375C10.2432 3.95995 9.75252 5.04744 10.3231 6.19506C10.4172 6.38427 10.6364 6.46548 10.8383 6.40312C11.3474 6.24589 12.3301 5.89727 13.0761 5.35729C13.2973 5.1972 13.615 5.25773 13.6797 5.52298C13.9401 6.59045 13.9401 8.40955 13.6797 9.47702C13.615 9.74227 13.2973 9.8028 13.0761 9.64271C12.3301 9.10273 11.3474 8.75411 10.8383 8.59688C10.6364 8.53452 10.4172 8.61573 10.3231 8.80494C9.75252 9.95256 10.2432 11.04 10.4329 11.3863C10.4747 11.4626 10.54 11.5214 10.6203 11.5549C11.6865 12 14 12 14 12C13.5 12.3333 11.8 13 9.00001 13C4.51722 13 2.02736 10.3427 1.25972 9.35985C1.08546 9.13673 1.04117 8.84452 1.13505 8.57743ZM5.00001 9C5.69037 9 6.25001 8.44036 6.25001 7.75C6.25001 7.05964 5.69037 6.5 5.00001 6.5C4.30966 6.5 3.75001 7.05964 3.75001 7.75C3.75001 8.44036 4.30966 9 5.00001 9Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Aquarium</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki aquarium pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#FFFFFF" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#F37CCC" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#FFFFFF"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="M1.13505 8.57743C1.98919 6.14741 4.72075 2 10 2C12.6518 2 14 3 14 3C14 3 11.6865 3 10.6203 3.44512C10.54 3.47864 10.4747 3.53744 10.4329 3.61375C10.2432 3.95995 9.75252 5.04744 10.3231 6.19506C10.4172 6.38427 10.6364 6.46548 10.8383 6.40312C11.3474 6.24589 12.3301 5.89727 13.0761 5.35729C13.2973 5.1972 13.615 5.25773 13.6797 5.52298C13.9401 6.59045 13.9401 8.40955 13.6797 9.47702C13.615 9.74227 13.2973 9.8028 13.0761 9.64271C12.3301 9.10273 11.3474 8.75411 10.8383 8.59688C10.6364 8.53452 10.4172 8.61573 10.3231 8.80494C9.75252 9.95256 10.2432 11.04 10.4329 11.3863C10.4747 11.4626 10.54 11.5214 10.6203 11.5549C11.6865 12 14 12 14 12C13.5 12.3333 11.8 13 9.00001 13C4.51722 13 2.02736 10.3427 1.25972 9.35985C1.08546 9.13673 1.04117 8.84452 1.13505 8.57743ZM5.00001 9C5.69037 9 6.25001 8.44036 6.25001 7.75C6.25001 7.05964 5.69037 6.5 5.00001 6.5C4.30966 6.5 3.75001 7.05964 3.75001 7.75C3.75001 8.44036 4.30966 9 5.00001 9Z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<title>Night Art gallery</title>
|
|
3
|
+
<desc>Tileflow POI disc with a Maki art-gallery pictogram, CC0-1.0.</desc>
|
|
4
|
+
<circle cx="12" cy="12" r="10" fill="#252839" />
|
|
5
|
+
<circle cx="12" cy="12" r="8.5" fill="#C786BC" />
|
|
6
|
+
<path
|
|
7
|
+
fill="#252839"
|
|
8
|
+
transform="translate(6 6) scale(.8)"
|
|
9
|
+
d="m10.71 3-2.86-2.849996c-.1945-.1960996-.511-.1973996-.7071-.0029-.001.001-.0019.0019-.0029.0029l-2.85 2.849996h-2.79c-.2761 0-.5.2239-.5.5v9c0 .2761.2239.5.5.5h12c.2761 0 .5-.2239.5-.5v-9c0-.2761-.2239-.5-.5-.5zm-3.21-1.79 1.79 1.79h-3.58zm5.5 10.79h-11v-8h11zm-8-5c-.5523 0-1-.4477-1-1s.4477-1 1-1 1 .4477 1 1-.4477 1-1 1zm7 4h-7.5l1.5-3 1.25 2.5 2.25-4.5z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|