├── .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 |
--------------------------------------------------------------------------------
/icons/icon/airfield.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/airport.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/alcohol_shop.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/american_football.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/amusement_park.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/animal_shelter.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/aquarium.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/art_gallery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/artwork.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/attraction.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bakery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bank_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bar.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/barrier.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/baseball.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/beach.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/beauty.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/beer.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bench.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bicycle.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bicycle_share.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/blood_bank.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bowling_alley.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bridge.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/building.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/building_alt1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/bus.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/cafe.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/campsite.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/car.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/car_rental.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/car_repair.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/casino.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/castle.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/castle_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/caution.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/cemetery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/cemetery_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/charging_station.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/chemist.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/cinema.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/city.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/clothes.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/clothing_store.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/college.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/college_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/commercial.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/communications_tower.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/confectionery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/construction.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/convenience.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/cricket.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/defibrillator.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/dentist.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/diamond.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/doctor.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/doityourself.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/drinking_water.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/drycleaning.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/elevator.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/embassy.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/emergency_phone.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/entrance.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/entrance1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/farm.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/fast_food.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/ferry_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/fire_station.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/fire_station_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/fitness_centre.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/florist.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/fuel.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/furniture.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/gaming.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/garden.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/garden_centre.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/gate.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/gift.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/globe.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/golf.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/grocery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/hairdresser.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/harbor.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/hardware.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/heart.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/heliport.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/highway_rest_area.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/historic.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/home.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/horse_riding.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/hospital.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/hospital_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/hydrant.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/ice_cream.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/icerink.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/industry.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/information.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/jewelry.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/jewelry_store.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/karaoke.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/kiosk.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/landmark.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/landmark_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/laundry.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/lift_gate.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/lighthouse.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/lighthouse_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/lodging.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/logging.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/marker.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/marker_stroked.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/mobile_phone.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/monument.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/monument_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/mountain.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/museum.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/mushroom.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/icons/icon/music.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/natural.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/nightclub.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/observation_tower.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/outdoor.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/paint.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/park.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/park1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/parking.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/parking_garage.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/parking_paid.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/pharmacy.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/picnic_site.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/pitch.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/place_of_worship.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/playground.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/police.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/police_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/post.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/post_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/prison.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/racetrack_boat.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/rail_light.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/rail_metro.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/ranger_station.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/recycling.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/religious_christian.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/religious_jewish.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/religious_muslim.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/religious_shinto.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/residential_community.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/restaurant.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/restaurant_bbq.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/restaurant_noodle.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/restaurant_pizza.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/restaurant_seafood.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/road_accident.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/roadblock.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/rocket.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/school.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/school_JP.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/scooter.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/shelter.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/shoe.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/shoes.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/shop.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/shrine.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/skateboard.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/skiing.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/slaughterhouse.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/slipway.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/snowmobile.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/soccer.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/stadium.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/stationery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/suitcase.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/surveillance.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/swimming.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/table_tennis.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/teahouse.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/telephone.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/tennis.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/terminal.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/theatre.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/toilet.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/toll.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/town.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/town_hall.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/toys.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/tunnel.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/veterinary.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/video.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/viewpoint.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/village.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/volcano.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/warehouse.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/waste_basket.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/watch.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/water.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/waterfall.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/wheelchair.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/windmill.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/icon/zoo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/marking/arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/barred.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/checkerboard.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/circles.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/crossed.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/diamonds.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/hatched.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/hatched_thick.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/hatched_thin.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/hexgrid.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/striped.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/warning.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/pattern/wave.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_3.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_4.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_5.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_6.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/shield/road_7.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/arrow1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/arrow2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/circle_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/cross.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/cross_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/diamond.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/diamond_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/hexagon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/hexagon_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/marker.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/marker_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/square.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/square_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/star.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/star_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/triangle.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/triangle_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/x.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/symbol/x_outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/harbor.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/information.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/metro.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/parking.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/roundel.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/subway.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/suitcase.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/icons/transport/train.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------