├── .github ├── dependabot.yml └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── LICENSE.md ├── README.MD ├── codecov.yml ├── eslint.config.js ├── icons ├── LICENSE.md ├── icon │ ├── aerialway.svg │ ├── airfield.svg │ ├── airport.svg │ ├── alcohol_shop.svg │ ├── american_football.svg │ ├── amusement_park.svg │ ├── animal_shelter.svg │ ├── aquarium.svg │ ├── art_gallery.svg │ ├── artwork.svg │ ├── atm.svg │ ├── attraction.svg │ ├── bakery.svg │ ├── bank.svg │ ├── bank_JP.svg │ ├── bar.svg │ ├── barrier.svg │ ├── baseball.svg │ ├── basketball.svg │ ├── bbq.svg │ ├── beach.svg │ ├── beauty.svg │ ├── beer.svg │ ├── beergarden.svg │ ├── bench.svg │ ├── beverages.svg │ ├── bicycle.svg │ ├── bicycle_share.svg │ ├── blood_bank.svg │ ├── books.svg │ ├── bowling_alley.svg │ ├── bridge.svg │ ├── building.svg │ ├── building_alt1.svg │ ├── bus.svg │ ├── butcher.svg │ ├── cafe.svg │ ├── campsite.svg │ ├── car.svg │ ├── car_rental.svg │ ├── car_repair.svg │ ├── car_wash.svg │ ├── casino.svg │ ├── castle.svg │ ├── castle_JP.svg │ ├── caution.svg │ ├── cemetery.svg │ ├── cemetery_JP.svg │ ├── chalet.svg │ ├── charging_station.svg │ ├── chemist.svg │ ├── cinema.svg │ ├── city.svg │ ├── clothes.svg │ ├── clothing_store.svg │ ├── college.svg │ ├── college_JP.svg │ ├── commercial.svg │ ├── communications_tower.svg │ ├── community.svg │ ├── computer.svg │ ├── confectionery.svg │ ├── construction.svg │ ├── convenience.svg │ ├── cricket.svg │ ├── dam.svg │ ├── danger.svg │ ├── defibrillator.svg │ ├── dentist.svg │ ├── diamond.svg │ ├── doctor.svg │ ├── dog_park.svg │ ├── doityourself.svg │ ├── drinking_water.svg │ ├── drycleaning.svg │ ├── elevator.svg │ ├── embassy.svg │ ├── emergency_access.svg │ ├── emergency_phone.svg │ ├── entrance.svg │ ├── entrance1.svg │ ├── farm.svg │ ├── fast_food.svg │ ├── fence.svg │ ├── ferry.svg │ ├── ferry_JP.svg │ ├── fire_station.svg │ ├── fire_station_JP.svg │ ├── fitness_centre.svg │ ├── florist.svg │ ├── fountain.svg │ ├── fuel.svg │ ├── furniture.svg │ ├── gaming.svg │ ├── garden.svg │ ├── garden_centre.svg │ ├── gate.svg │ ├── gift.svg │ ├── globe.svg │ ├── golf.svg │ ├── greengrocer.svg │ ├── grocery.svg │ ├── hairdresser.svg │ ├── harbor.svg │ ├── hardware.svg │ ├── heart.svg │ ├── heliport.svg │ ├── highway_rest_area.svg │ ├── historic.svg │ ├── home.svg │ ├── horse_riding.svg │ ├── hospital.svg │ ├── hospital_JP.svg │ ├── hot_spring.svg │ ├── huntingstand.svg │ ├── hydrant.svg │ ├── ice_cream.svg │ ├── icerink.svg │ ├── industry.svg │ ├── information.svg │ ├── jewelry.svg │ ├── jewelry_store.svg │ ├── justice.svg │ ├── karaoke.svg │ ├── kiosk.svg │ ├── landmark.svg │ ├── landmark_JP.svg │ ├── landuse.svg │ ├── laundry.svg │ ├── library.svg │ ├── lift_gate.svg │ ├── lighthouse.svg │ ├── lighthouse_JP.svg │ ├── lodging.svg │ ├── logging.svg │ ├── marker.svg │ ├── marker_stroked.svg │ ├── marketplace.svg │ ├── mobile_phone.svg │ ├── monument.svg │ ├── monument_JP.svg │ ├── mountain.svg │ ├── museum.svg │ ├── mushroom.svg │ ├── music.svg │ ├── natural.svg │ ├── newsagent.svg │ ├── nightclub.svg │ ├── nursinghome.svg │ ├── observation_tower.svg │ ├── optician.svg │ ├── outdoor.svg │ ├── paint.svg │ ├── park.svg │ ├── park1.svg │ ├── parking.svg │ ├── parking_garage.svg │ ├── parking_paid.svg │ ├── pharmacy.svg │ ├── picnic_site.svg │ ├── pitch.svg │ ├── place_of_worship.svg │ ├── playground.svg │ ├── police.svg │ ├── police_JP.svg │ ├── post.svg │ ├── post_JP.svg │ ├── postbox.svg │ ├── prison.svg │ ├── racetrack.svg │ ├── racetrack_boat.svg │ ├── racetrack_cycling.svg │ ├── racetrack_horse.svg │ ├── rail.svg │ ├── rail_light.svg │ ├── rail_metro.svg │ ├── ranger_station.svg │ ├── recycling.svg │ ├── religious_buddhist.svg │ ├── religious_christian.svg │ ├── religious_jewish.svg │ ├── religious_muslim.svg │ ├── religious_shinto.svg │ ├── residential_community.svg │ ├── restaurant.svg │ ├── restaurant_bbq.svg │ ├── restaurant_noodle.svg │ ├── restaurant_pizza.svg │ ├── restaurant_seafood.svg │ ├── restaurant_sushi.svg │ ├── road_accident.svg │ ├── roadblock.svg │ ├── rocket.svg │ ├── school.svg │ ├── school_JP.svg │ ├── scooter.svg │ ├── shelter.svg │ ├── shoe.svg │ ├── shoes.svg │ ├── shop.svg │ ├── shrine.svg │ ├── skateboard.svg │ ├── skiing.svg │ ├── slaughterhouse.svg │ ├── slipway.svg │ ├── snowmobile.svg │ ├── soccer.svg │ ├── sports.svg │ ├── stadium.svg │ ├── stationery.svg │ ├── suitcase.svg │ ├── surveillance.svg │ ├── swimming.svg │ ├── table_tennis.svg │ ├── teahouse.svg │ ├── telephone.svg │ ├── tennis.svg │ ├── terminal.svg │ ├── theatre.svg │ ├── toilet.svg │ ├── toll.svg │ ├── town.svg │ ├── town_hall.svg │ ├── toys.svg │ ├── travel_agent.svg │ ├── tunnel.svg │ ├── vendingmachine.svg │ ├── veterinary.svg │ ├── video.svg │ ├── viewpoint.svg │ ├── village.svg │ ├── volcano.svg │ ├── volleyball.svg │ ├── warehouse.svg │ ├── waste_basket.svg │ ├── wastewater.svg │ ├── watch.svg │ ├── water.svg │ ├── waterfall.svg │ ├── watermill.svg │ ├── waterpark.svg │ ├── waterworks.svg │ ├── wetland.svg │ ├── wheelchair.svg │ ├── windmill.svg │ └── zoo.svg ├── marking │ └── arrow.svg ├── pattern │ ├── barred.svg │ ├── checkerboard.svg │ ├── circles.svg │ ├── crossed.svg │ ├── diamonds.svg │ ├── hatched.svg │ ├── hatched_thick.svg │ ├── hatched_thin.svg │ ├── hexgrid.svg │ ├── striped.svg │ ├── warning.svg │ └── wave.svg ├── shield │ ├── road_1.svg │ ├── road_2.svg │ ├── road_3.svg │ ├── road_4.svg │ ├── road_5.svg │ ├── road_6.svg │ └── road_7.svg ├── symbol │ ├── arrow.svg │ ├── arrow1.svg │ ├── arrow2.svg │ ├── circle.svg │ ├── circle_outline.svg │ ├── cross.svg │ ├── cross_outline.svg │ ├── diamond.svg │ ├── diamond_outline.svg │ ├── hexagon.svg │ ├── hexagon_outline.svg │ ├── marker.svg │ ├── marker_outline.svg │ ├── square.svg │ ├── square_outline.svg │ ├── star.svg │ ├── star_outline.svg │ ├── triangle.svg │ ├── triangle_outline.svg │ ├── x.svg │ └── x_outline.svg └── transport │ ├── bicycle.svg │ ├── car.svg │ ├── halt.svg │ ├── harbor.svg │ ├── information.svg │ ├── lightrail.svg │ ├── metro.svg │ ├── parking.svg │ ├── roundel.svg │ ├── subway.svg │ ├── suitcase.svg │ ├── train.svg │ └── tram.svg ├── jest.config.js ├── package-lock.json ├── package.json ├── rollup.config.ts ├── scripts ├── build-sprites.test.ts ├── build-sprites.ts ├── build-styles.test.ts ├── build-styles.ts ├── config-sprites.ts ├── dev.test.ts ├── dev.ts ├── lib │ ├── icons.test.ts │ ├── icons.ts │ ├── mime.test.ts │ ├── mime.ts │ ├── optipng.test.ts │ ├── optipng.ts │ ├── sdf.ts │ ├── sprites.test.ts │ └── sprites.ts ├── package.test.ts └── screenshots.ts ├── src ├── color │ ├── abstract.ts │ ├── hsl.test.ts │ ├── hsl.ts │ ├── hsv.test.ts │ ├── hsv.ts │ ├── index.test.ts │ ├── index.ts │ ├── random.test.ts │ ├── random.ts │ ├── rgb.test.ts │ ├── rgb.ts │ ├── utils.test.ts │ └── utils.ts ├── guess_style │ ├── guess_style.test.ts │ ├── guess_style.ts │ └── index.ts ├── index.test.ts ├── index.ts ├── lib │ ├── utils.test.ts │ └── utils.ts ├── shortbread │ ├── index.ts │ ├── layers.test.ts │ ├── layers.ts │ ├── properties.test.ts │ ├── properties.ts │ ├── template.test.ts │ └── template.ts ├── style_builder │ ├── decorator.test.ts │ ├── decorator.ts │ ├── recolor.test.ts │ ├── recolor.ts │ ├── style_builder.test.ts │ ├── style_builder.ts │ └── types.ts ├── styles │ ├── LICENSE.md │ ├── colorful.ts │ ├── eclipse.ts │ ├── empty.ts │ ├── graybeard.ts │ ├── index.ts │ └── neutrino.ts └── types │ ├── index.ts │ ├── maplibre.ts │ ├── tilejson.test.ts │ ├── tilejson.ts │ ├── vector_layer.test.ts │ └── vector_layer.ts └── tsconfig.json /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: / 5 | schedule: { interval: monthly } 6 | groups: { npm: { patterns: ['*'] } } 7 | versioning-strategy: increase 8 | - package-ecosystem: github-actions 9 | directory: / 10 | schedule: { interval: monthly } 11 | groups: { github-action: { patterns: ['*'] } } 12 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - "**" 7 | tags: 8 | - "!**" # Avoid running twice for commits with tags 9 | pull_request: 10 | workflow_dispatch: 11 | 12 | env: 13 | FORCE_COLOR: 3 14 | 15 | jobs: 16 | lint-test: 17 | name: Lint and Test 18 | runs-on: macos-latest 19 | steps: 20 | - name: Install optipng 21 | run: brew install optipng 22 | 23 | - name: Checkout 24 | uses: actions/checkout@v4 25 | 26 | - name: Use Node 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: 22 30 | cache: "npm" 31 | 32 | - name: Install dependencies 33 | run: npm ci 34 | 35 | - name: Audit 36 | run: npm audit --omit dev 37 | 38 | - name: Lint 39 | run: npm run lint 40 | 41 | - name: Build 42 | run: npm run build 43 | 44 | - name: Test 45 | run: npm run test 46 | 47 | - name: Generate coverage 48 | run: npm run test-coverage 49 | 50 | - name: Upload coverage 51 | uses: codecov/codecov-action@v5 52 | env: 53 | CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | coverage 4 | dist/**/*.js 5 | dist/**/*.map 6 | dist/**/*.ts 7 | docs/ 8 | node_modules 9 | release 10 | test 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to [unlicense.org](https://unlicense.org/) 25 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | github_checks: false 3 | coverage: 4 | status: 5 | project: off 6 | patch: off -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js'; 2 | import ts from 'typescript-eslint'; 3 | import parser from '@typescript-eslint/parser'; 4 | import eslint_plugin from '@typescript-eslint/eslint-plugin'; 5 | 6 | export default [ 7 | js.configs.recommended, 8 | ...ts.configs.recommended, 9 | { 10 | ignores: [ 11 | '**/dist/**/*.*', 12 | '**/coverage/**/*.*', 13 | '**/release/**/*.*', 14 | '**/docs/**/*.*', 15 | ] 16 | }, 17 | { 18 | files: [ 19 | '**/scripts/**/*.ts', 20 | '**/src/**/*.ts', 21 | ], 22 | languageOptions: { 23 | ecmaVersion: 'latest', 24 | sourceType: 'module', 25 | globals: { 26 | browser: true, 27 | es6: true, 28 | node: true 29 | }, 30 | parser, 31 | parserOptions: { 32 | sourceType: 'module', 33 | project: './tsconfig.json', 34 | tsconfigRootDir: import.meta.dirname, 35 | }, 36 | }, 37 | plugins: { 38 | '@typescript-eslint': eslint_plugin, 39 | }, 40 | linterOptions: { 41 | reportUnusedDisableDirectives: true, 42 | }, 43 | rules: { 44 | 'no-unused-vars': 'off', 45 | '@typescript-eslint/no-unused-vars': [ 46 | 'error', 47 | { 48 | argsIgnorePattern: '^_', 49 | varsIgnorePattern: '^_', 50 | caughtErrorsIgnorePattern: '^_' 51 | } 52 | ] 53 | } 54 | } 55 | ] 56 | -------------------------------------------------------------------------------- /icons/icon/aerialway.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/airfield.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/airport.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/alcohol_shop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/american_football.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/amusement_park.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/animal_shelter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/aquarium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/art_gallery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/artwork.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/attraction.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bakery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bank_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/barrier.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/baseball.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/beach.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/beauty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/beer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bench.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/bicycle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bicycle_share.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/blood_bank.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bowling_alley.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bridge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/building.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/building_alt1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/bus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/cafe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/campsite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/car.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/car_rental.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/car_repair.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/casino.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/castle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/castle_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/caution.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/cemetery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/cemetery_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/charging_station.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/chemist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/cinema.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/city.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/clothes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/clothing_store.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/college.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/college_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/commercial.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/communications_tower.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/confectionery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/construction.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/convenience.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/cricket.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/defibrillator.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/dentist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/diamond.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/doctor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/doityourself.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/drinking_water.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/drycleaning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/elevator.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/embassy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/emergency_phone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/entrance.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/entrance1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/farm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/fast_food.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/ferry_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/fire_station.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/fire_station_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/fitness_centre.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/florist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/fuel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/furniture.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/gaming.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/garden.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/garden_centre.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/gate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/gift.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/globe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/golf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/grocery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/hairdresser.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/harbor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/hardware.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/heliport.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/highway_rest_area.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/historic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/horse_riding.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/hospital.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/hospital_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/hydrant.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/ice_cream.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/icerink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/industry.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/information.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/jewelry.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/jewelry_store.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/karaoke.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/kiosk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/landmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/landmark_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/laundry.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/lift_gate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/lighthouse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/lighthouse_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/lodging.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/logging.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/marker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/marker_stroked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/mobile_phone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/monument.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/monument_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/mountain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/museum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/mushroom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /icons/icon/music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/natural.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/nightclub.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/observation_tower.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/outdoor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/paint.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/park.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/park1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/parking.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/parking_garage.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/parking_paid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/pharmacy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/picnic_site.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/pitch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/place_of_worship.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/playground.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/police.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/police_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/post.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/post_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/prison.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/racetrack_boat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/rail_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/rail_metro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/ranger_station.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/recycling.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/religious_christian.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/religious_jewish.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/religious_muslim.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/religious_shinto.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/residential_community.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/restaurant.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/restaurant_bbq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/restaurant_noodle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/restaurant_pizza.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/restaurant_seafood.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/road_accident.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/roadblock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/rocket.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/school.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/school_JP.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/scooter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/shelter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/shoe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/shoes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/shop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/shrine.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/skateboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/skiing.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/slaughterhouse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/slipway.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/snowmobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/soccer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/stadium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/stationery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/suitcase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/surveillance.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/swimming.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/table_tennis.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/teahouse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/telephone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/tennis.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/terminal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/theatre.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/toilet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/toll.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/town.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/town_hall.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/toys.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/tunnel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/veterinary.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/icon/viewpoint.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/village.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/volcano.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/warehouse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/waste_basket.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/watch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/water.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/waterfall.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/wheelchair.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/windmill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/icon/zoo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/marking/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/barred.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/checkerboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/circles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/crossed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/pattern/diamonds.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/hatched.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/hatched_thick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/hatched_thin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/hexgrid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/striped.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/pattern/wave.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/shield/road_1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/shield/road_2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/shield/road_3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/shield/road_4.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/shield/road_5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/shield/road_6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/shield/road_7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/symbol/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/symbol/arrow1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/symbol/arrow2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/symbol/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/circle_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/cross_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/diamond.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/diamond_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/hexagon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/hexagon_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/marker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/marker_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/square_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/star_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/triangle_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/symbol/x_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/transport/harbor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/transport/information.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/transport/metro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/transport/parking.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/transport/roundel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/transport/subway.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/transport/suitcase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /icons/transport/train.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | verbose: true, 3 | testEnvironment: 'node', 4 | transform: { 5 | '^.+\\.ts$': ['ts-jest', { useESM: true }] 6 | }, 7 | testMatch: [ 8 | '**/src/**/*.test.ts', 9 | '**/scripts/**/*.test.ts', 10 | '!**/src/**/*.mock.test.ts', 11 | ], 12 | extensionsToTreatAsEsm: ['.ts'], 13 | moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1' }, 14 | coveragePathIgnorePatterns: [ 15 | '/dist/' 16 | ], 17 | collectCoverageFrom: [ 18 | '**/src/**/*.ts', 19 | '**/scripts/**/*.ts', 20 | '!**/*.test.ts', 21 | '!**/node_modules/**', 22 | '!jest*.ts', 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /scripts/lib/mime.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Utility function to determine MIME type based on file extension. 3 | * @param filePath - Path of the file 4 | * @returns MIME type string 5 | */ 6 | export function getMimeType(filePath: string): string { 7 | const extension = filePath.split('.').pop()?.toLowerCase(); 8 | switch (extension) { 9 | case 'html': 10 | return 'text/html'; 11 | case 'css': 12 | return 'text/css'; 13 | case 'js': 14 | return 'application/javascript'; 15 | case 'json': 16 | return 'application/json'; 17 | case 'png': 18 | return 'image/png'; 19 | case 'jpg': 20 | case 'jpeg': 21 | return 'image/jpeg'; 22 | case 'gif': 23 | return 'image/gif'; 24 | case 'svg': 25 | return 'image/svg+xml'; 26 | default: 27 | return 'application/octet-stream'; 28 | } 29 | } -------------------------------------------------------------------------------- /src/color/index.ts: -------------------------------------------------------------------------------- 1 | import { Color } from './abstract.js'; 2 | import { HSL } from './hsl.js'; 3 | import { HSV } from './hsv.js'; 4 | import randomColor from './random.js'; 5 | import { RGB } from './rgb.js'; 6 | 7 | Color.parse = function (input: string | Color): Color { 8 | if (input instanceof Color) return input; 9 | 10 | input = input.trim().toLowerCase(); 11 | 12 | if (input.startsWith('#')) return RGB.parse(input); 13 | 14 | const prefix = input.replace(/\d.*/, '').trim().toLowerCase(); 15 | 16 | switch (prefix) { 17 | case 'rgb(': 18 | case 'rgba(': 19 | return RGB.parse(input); 20 | case 'hsl(': 21 | case 'hsla(': 22 | return HSL.parse(input); 23 | default: 24 | throw Error('Unknown color format: ' + input); 25 | } 26 | } 27 | 28 | Color.HSL = HSL; 29 | Color.HSV = HSV; 30 | Color.RGB = RGB; 31 | 32 | Color.random = randomColor; 33 | 34 | export type { RandomColorOptions } from './random.js'; 35 | export type { HSL } from './hsl.js'; 36 | export type { HSV } from './hsv.js'; 37 | export type { RGB } from './rgb.js'; 38 | export { Color }; 39 | -------------------------------------------------------------------------------- /src/color/utils.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | export function clamp(value: number, min: number, max: number): number { 4 | if (value == null || isNaN(value)) return min; 5 | if (value < min) return min; 6 | if (value > max) return max; 7 | return value; 8 | } 9 | 10 | export function mod(value: number, max: number): number { 11 | value = value % max; 12 | if (value < 0) value += max; 13 | if (value == 0) return 0; 14 | return value; 15 | } 16 | 17 | export function formatFloat(num: number, precision: number): string { 18 | return num.toFixed(precision).replace(/0+$/, '').replace(/\.$/, ''); 19 | } -------------------------------------------------------------------------------- /src/guess_style/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export type { GuessStyleOptions } from './guess_style.js'; 3 | export { guessStyle } from './guess_style.js'; 4 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { colorful, eclipse, graybeard, neutrino, type StyleBuilderFunction } from './styles/index.js'; 2 | import { colorful, eclipse, graybeard, neutrino } from './styles/index.js'; 3 | export const styles = { 4 | colorful, 5 | eclipse, 6 | graybeard, 7 | neutrino, 8 | }; 9 | 10 | export type { GuessStyleOptions } from './guess_style/index.js'; 11 | export type { RGB, HSL, HSV, RandomColorOptions } from './color/index.js'; 12 | export type { TileJSONSpecification, TileJSONSpecificationRaster, TileJSONSpecificationVector } from './types/tilejson.js'; 13 | export type { VectorLayer } from './types/index.js'; 14 | export type { StyleBuilderOptions, Language, StyleBuilderColors, StyleBuilderColorsEnsured, StyleBuilderFonts } from './style_builder/types.js'; 15 | export type { RecolorOptions } from './style_builder/recolor.js'; 16 | 17 | export { guessStyle } from './guess_style/index.js'; 18 | export { Color } from './color/index.js'; 19 | -------------------------------------------------------------------------------- /src/shortbread/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export { getShortbreadTemplate } from './template.js'; 3 | export { getShortbreadLayers } from './layers.js'; 4 | -------------------------------------------------------------------------------- /src/styles/eclipse.ts: -------------------------------------------------------------------------------- 1 | import Colorful from './colorful.js'; 2 | 3 | export default class Eclipse extends Colorful { 4 | public readonly name: string = 'Eclipse'; 5 | 6 | public constructor() { 7 | super(); 8 | 9 | this.transformDefaultColors(color => color.invertLuminosity()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/styles/empty.ts: -------------------------------------------------------------------------------- 1 | import type { StyleRules, StyleRulesOptions } from '../style_builder/types.js'; 2 | import Colorful from './colorful.js'; 3 | 4 | export default class Empty extends Colorful { 5 | public readonly name: string = 'Empty'; 6 | 7 | protected getStyleRules(_options: StyleRulesOptions): StyleRules { 8 | return {}; 9 | } 10 | } -------------------------------------------------------------------------------- /src/styles/graybeard.ts: -------------------------------------------------------------------------------- 1 | import Colorful from './colorful.js'; 2 | 3 | export default class Graybeard extends Colorful { 4 | public readonly name: string = 'Graybeard'; 5 | 6 | public constructor() { 7 | super(); 8 | 9 | this.transformDefaultColors(color => color.saturate(-1)); 10 | } 11 | } -------------------------------------------------------------------------------- /src/styles/index.ts: -------------------------------------------------------------------------------- 1 | import type { StyleBuilder } from '../style_builder/style_builder.js'; 2 | import type { StyleBuilderOptions } from '../style_builder/types.js'; 3 | import { StyleSpecification } from '@maplibre/maplibre-gl-style-spec'; 4 | 5 | 6 | 7 | // import styles 8 | import Colorful from './colorful.js'; 9 | import Eclipse from './eclipse.js'; 10 | import Graybeard from './graybeard.js'; 11 | import Neutrino from './neutrino.js'; 12 | import Empty from './empty.js'; 13 | 14 | export interface StyleBuilderFunction { 15 | (options?: StyleBuilderOptions): StyleSpecification; 16 | getOptions(): StyleBuilderOptions; 17 | } 18 | 19 | function getStyleBuilder(styleBuilder: new () => StyleBuilder): StyleBuilderFunction { 20 | const fn = function (options?: StyleBuilderOptions): StyleSpecification { 21 | return new styleBuilder().build(options); 22 | }; 23 | fn.getOptions = (): StyleBuilderOptions => new styleBuilder().getDefaultOptions(); 24 | return fn; 25 | } 26 | 27 | 28 | // generate style builders 29 | export const colorful = getStyleBuilder(Colorful); 30 | export const eclipse = getStyleBuilder(Eclipse); 31 | export const graybeard = getStyleBuilder(Graybeard); 32 | export const neutrino = getStyleBuilder(Neutrino); 33 | export const empty = getStyleBuilder(Empty); 34 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export type { MaplibreLayerDefinition, MaplibreLayer } from './maplibre.js'; 3 | export type { VectorLayer } from './vector_layer.js'; 4 | export { isTileJSONSpecification } from './tilejson.js'; 5 | export type { TileJSONSpecification, TileJSONSpecificationRaster, TileJSONSpecificationVector } from './tilejson.js'; 6 | export { isVectorLayers } from './vector_layer.js'; 7 | -------------------------------------------------------------------------------- /src/types/maplibre.ts: -------------------------------------------------------------------------------- 1 | import type { BackgroundLayerSpecification, FillLayerSpecification, FilterSpecification, LineLayerSpecification, SymbolLayerSpecification } from '@maplibre/maplibre-gl-style-spec'; 2 | export type { StyleSpecification } from '@maplibre/maplibre-gl-style-spec'; 3 | 4 | /** Type for Maplibre layers, including background, fill, line, and symbol specifications. */ 5 | export type MaplibreLayer = BackgroundLayerSpecification | FillLayerSpecification | LineLayerSpecification | SymbolLayerSpecification; 6 | 7 | /** Defines the structure of Maplibre layer definitions, omitting the 'source' property for fill, line, and symbol specifications. */ 8 | export type MaplibreLayerDefinition = BackgroundLayerSpecification | Omit | Omit | Omit; 9 | 10 | /** Represents a filter specification in Maplibre styles. */ 11 | export type MaplibreFilter = FilterSpecification; 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": [ 4 | "ESNext" 5 | ], 6 | "module": "ESNext", 7 | "moduleResolution": "bundler", 8 | "target": "ES2022", 9 | "strict": true, 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "allowJs": true, 14 | "allowImportingTsExtensions": false, 15 | "noEmit": true, 16 | "sourceMap": true, 17 | }, 18 | "include": [ 19 | "rollup.config.*", 20 | "scripts/**/*.ts", 21 | "src/**/*.ts" 22 | ] 23 | } --------------------------------------------------------------------------------