├── .devcontainer └── devcontainer.json ├── .dockerignore ├── .editorconfig ├── .env ├── .eslintignore ├── .eslintrc.json ├── .github ├── FUNDING.yml ├── pull_request_template.md ├── vercel.svg └── workflows │ ├── node.js.yml │ ├── pr-title-check.yml │ └── ssr-check.yml ├── .gitignore ├── .gitpod.yml ├── .lintstagedrc.js ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── ARCHITECTURE.md ├── Dockerfile ├── LICENSE.txt ├── README.md ├── __mocks__ ├── isomorphic-unfetch.js └── next-codegrid.js ├── eslint-local-rules.js ├── flake.lock ├── flake.nix ├── instrumentation.ts ├── jest.config.js ├── jest.globalSetup.js ├── next.config.mjs ├── package.json ├── pages ├── _app.tsx ├── _document.tsx ├── api │ ├── climbing-tiles │ │ ├── refresh.ts │ │ ├── stats.ts │ │ └── tile.ts │ ├── og-image.tsx │ ├── sentry-example-api.js │ └── user.ts ├── climbing-areas.tsx ├── climbing-grades.ts ├── directions │ └── [[...all]].ts ├── feature │ └── [...all].ts ├── index.ts ├── install.ts ├── last-url.ts ├── my-ticks.ts ├── sentry-example-page.tsx ├── sitemap.txt.tsx └── start.ts ├── public ├── 404.html ├── favicon.ico ├── icons-climbing │ ├── icons │ │ ├── area-blue.svg │ │ ├── area-gray.svg │ │ ├── climbing-gym-gray.svg │ │ ├── crag-gray.svg │ │ ├── crag-red.svg │ │ └── via-ferrata-gray.svg │ ├── readme.md │ └── sprites │ │ ├── climbing.json │ │ ├── climbing.png │ │ ├── climbing@2x.json │ │ ├── climbing@2x.png │ │ ├── climbing@3x.json │ │ └── climbing@3x.png ├── icons │ ├── abseiling_11.svg │ ├── accessible_space_11.svg │ ├── accounting_11.svg │ ├── adit_profile_11.svg │ ├── aerialway_11.svg │ ├── aerialway_pole_11.svg │ ├── airfield_11.svg │ ├── airport_11.svg │ ├── alcohol_shop_11.svg │ ├── american_football_11.svg │ ├── amusement_park_11.svg │ ├── anchor_medal_11.svg │ ├── animal_shelter_11.svg │ ├── antenna_11.svg │ ├── anvil_11.svg │ ├── anvil_and_hammer_11.svg │ ├── app_terminal_11.svg │ ├── aquarium_11.svg │ ├── archery_11.svg │ ├── army_tent_11.svg │ ├── arrow_11.svg │ ├── art_gallery_11.svg │ ├── asterisk_11.svg │ ├── atm2_11.svg │ ├── atm_11.svg │ ├── attraction_11.svg │ ├── bakery_11.svg │ ├── balance_beam_11.svg │ ├── balloon_11.svg │ ├── bank_11.svg │ ├── bank_JP_11.svg │ ├── bar_11.svg │ ├── barn_11.svg │ ├── barrier_11.svg │ ├── baseball_11.svg │ ├── basketball_11.svg │ ├── bbq_11.svg │ ├── beach_11.svg │ ├── beauty_salon_11.svg │ ├── beer_11.svg │ ├── bench_11.svg │ ├── benchmark_disk_11.svg │ ├── bicycle_11.svg │ ├── bicycle_box_11.svg │ ├── bicycle_locker_11.svg │ ├── bicycle_parked_11.svg │ ├── bicycle_rental_11.svg │ ├── bicycle_repair_11.svg │ ├── bicycle_share_11.svg │ ├── bicycle_shed_11.svg │ ├── bicycle_structure_11.svg │ ├── bicycle_wash_11.svg │ ├── bikini_11.svg │ ├── billboard_11.svg │ ├── binoculars_11.svg │ ├── bleachers_11.svg │ ├── blind_11.svg │ ├── blood_bank_11.svg │ ├── board_bus_11.svg │ ├── board_ferry_11.svg │ ├── board_gondola_lift_11.svg │ ├── board_hanging_rail_11.svg │ ├── board_heavy_rail_11.svg │ ├── board_light_rail_11.svg │ ├── board_monorail_11.svg │ ├── board_school_bus_11.svg │ ├── board_subway_11.svg │ ├── board_train_11.svg │ ├── board_train_bullet_11.svg │ ├── board_train_diesel_11.svg │ ├── board_train_kids_11.svg │ ├── board_train_steam_11.svg │ ├── board_tram_11.svg │ ├── board_transit_11.svg │ ├── board_trolleybus_11.svg │ ├── boat_11.svg │ ├── boat_dry_dock_11.svg │ ├── boat_floating_11.svg │ ├── boat_ramp_11.svg │ ├── boat_rental_11.svg │ ├── boat_repair_11.svg │ ├── boat_tour_11.svg │ ├── boating_11.svg │ ├── bollard_11.svg │ ├── bollard_row_11.svg │ ├── book_store_11.svg │ ├── bottles_11.svg │ ├── boulder1_11.svg │ ├── boulder2_11.svg │ ├── boulder3_11.svg │ ├── bow_and_arrow_11.svg │ ├── bowling_11.svg │ ├── bowling_alley_11.svg │ ├── bowling_alt1_11.svg │ ├── bread_11.svg │ ├── brick_trowel_11.svg │ ├── bridge_11.svg │ ├── briefcase_11.svg │ ├── briefcase_asterisk_11.svg │ ├── briefcase_bolt_11.svg │ ├── briefcase_cross_11.svg │ ├── briefcase_info_11.svg │ ├── briefcase_shield_11.svg │ ├── bubble_tea_11.svg │ ├── buffer_stop_11.svg │ ├── building_11.svg │ ├── building_alt1_11.svg │ ├── bulb2_11.svg │ ├── bulb3_11.svg │ ├── bulb_11.svg │ ├── bulldozer_11.svg │ ├── bulletin_board_11.svg │ ├── bunk_beds_11.svg │ ├── bunker_11.svg │ ├── bunker_silo_11.svg │ ├── buoy_11.svg │ ├── bus_11.svg │ ├── bus_guided_11.svg │ ├── cabin_11.svg │ ├── cable_11.svg │ ├── cable_device_11.svg │ ├── cable_manhole_11.svg │ ├── cable_meter_11.svg │ ├── cable_shutoff_11.svg │ ├── cafe_11.svg │ ├── cairn_11.svg │ ├── camper_trailer_11.svg │ ├── camper_trailer_dump_11.svg │ ├── campfire_11.svg │ ├── campsite_11.svg │ ├── can_11.svg │ ├── canoe_11.svg │ ├── cape_landform_11.svg │ ├── capitol_11.svg │ ├── car_11.svg │ ├── car_dealer_11.svg │ ├── car_parked_11.svg │ ├── car_pool_11.svg │ ├── car_rental_11.svg │ ├── car_repair_11.svg │ ├── car_structure_11.svg │ ├── car_wash_11.svg │ ├── carport_11.svg │ ├── casino_11.svg │ ├── castle_11.svg │ ├── castle_JP_11.svg │ ├── catering_11.svg │ ├── cattle_grid_11.svg │ ├── caution_11.svg │ ├── cemetery_11.svg │ ├── cemetery_JP_11.svg │ ├── chairlift_11.svg │ ├── charging_station_11.svg │ ├── checkpoint_11.svg │ ├── chefs_knife_11.svg │ ├── chicane_arrow_11.svg │ ├── chimney_11.svg │ ├── chocolate_11.svg │ ├── cinema_11.svg │ ├── circle2_11.svg │ ├── circle_11.svg │ ├── circle_stroked_11.svg │ ├── city_11.svg │ ├── cleaver_11.svg │ ├── cliff_falling_rocks_11.svg │ ├── climbing_11.svg │ ├── clock_11.svg │ ├── cloth_11.svg │ ├── clothes_hanger_11.svg │ ├── clothing_store_11.svg │ ├── coffee_11.svg │ ├── college_11.svg │ ├── college_JP_11.svg │ ├── commercial_11.svg │ ├── communications_tower_11.svg │ ├── compass_11.svg │ ├── confectionery_11.svg │ ├── construction_11.svg │ ├── convenience_11.svg │ ├── conveyor_11.svg │ ├── cooling_tower_11.svg │ ├── cooling_tower_radiation_11.svg │ ├── coral_reef_11.svg │ ├── courthouse_11.svg │ ├── crane_11.svg │ ├── cricket_11.svg │ ├── cross_11.svg │ ├── cross_country_skiing_11.svg │ ├── crossing_markings-dashes_11.svg │ ├── crossing_markings-dots_11.svg │ ├── crossing_markings-ladder_11.svg │ ├── crossing_markings-ladder_paired_11.svg │ ├── crossing_markings-ladder_skewed_11.svg │ ├── crossing_markings-lines_11.svg │ ├── crossing_markings-lines_paired_11.svg │ ├── crossing_markings-surface_11.svg │ ├── crossing_markings-zebra_11.svg │ ├── crossing_markings-zebra_bicolour_11.svg │ ├── crossing_markings-zebra_double_11.svg │ ├── crossing_markings-zebra_paired_11.svg │ ├── crossing_rail_rail_11.svg │ ├── crossing_rail_road_11.svg │ ├── crossing_rail_solid_11.svg │ ├── crossing_rail_striped_11.svg │ ├── crossing_tram_road_11.svg │ ├── crossing_tram_solid_11.svg │ ├── crossing_tram_striped_11.svg │ ├── curtains_11.svg │ ├── cycle_barrier_11.svg │ ├── cyclist_crosswalk_11.svg │ ├── dagger_11.svg │ ├── dam_11.svg │ ├── danger_11.svg │ ├── defibrillator_11.svg │ ├── dentist_11.svg │ ├── desk_lamp_11.svg │ ├── detergent_bottle_11.svg │ ├── diamond_11.svg │ ├── dice_11.svg │ ├── disc_golf_basket_11.svg │ ├── diving_11.svg │ ├── doctor_11.svg │ ├── dog_park_11.svg │ ├── dog_shelter_11.svg │ ├── domed_tower_11.svg │ ├── donut_11.svg │ ├── drag_lift_11.svg │ ├── dress_11.svg │ ├── drink_cup_11.svg │ ├── drinking_water_11.svg │ ├── ear_11.svg │ ├── egg_11.svg │ ├── electronic_11.svg │ ├── elevator_11.svg │ ├── embassy_11.svg │ ├── emergency_phone_11.svg │ ├── entrance_11.svg │ ├── entrance_alt1_11.svg │ ├── farm_11.svg │ ├── fashion_accessories_11.svg │ ├── fast_food_11.svg │ ├── fence_11.svg │ ├── ferry_11.svg │ ├── ferry_JP_11.svg │ ├── ferry_terminal_11.svg │ ├── field_hockey_11.svg │ ├── fighter_jet_11.svg │ ├── fire_hydrant_11.svg │ ├── fire_hydrant_underground_11.svg │ ├── fire_station_11.svg │ ├── fire_station_JP_11.svg │ ├── fireplace_11.svg │ ├── fish_cleaning_11.svg │ ├── fish_ladder_11.svg │ ├── fishing_pier_11.svg │ ├── fitness_centre_11.svg │ ├── florist_11.svg │ ├── food_11.svg │ ├── fountain_11.svg │ ├── freight_car_11.svg │ ├── fuel_11.svg │ ├── furniture_11.svg │ ├── gaming_11.svg │ ├── garden_11.svg │ ├── garden_bed_11.svg │ ├── garden_centre_11.svg │ ├── gas_11.svg │ ├── gas_device_11.svg │ ├── gas_manhole_11.svg │ ├── gas_meter_11.svg │ ├── gas_shutoff_11.svg │ ├── gate_11.svg │ ├── gift_11.svg │ ├── globe_11.svg │ ├── golf_11.svg │ ├── golf_cart_11.svg │ ├── golf_green_11.svg │ ├── gondola_lift_11.svg │ ├── goods_lift_11.svg │ ├── gown_11.svg │ ├── grapes_11.svg │ ├── grass_11.svg │ ├── grocery_11.svg │ ├── guard_rail_11.svg │ ├── gym_11.svg │ ├── hair_care_11.svg │ ├── hairdresser_11.svg │ ├── hammer_shoe_11.svg │ ├── hand_11.svg │ ├── handbag_11.svg │ ├── hang_gliding_11.svg │ ├── hangar_11.svg │ ├── hanging_rail_11.svg │ ├── harbor_11.svg │ ├── hardware_11.svg │ ├── hearing_aid_11.svg │ ├── heart_11.svg │ ├── heavy_rail_11.svg │ ├── hedge_11.svg │ ├── height_restrictor_11.svg │ ├── heliport_11.svg │ ├── highway_rest_area_11.svg │ ├── hinduism_11.svg │ ├── historic_11.svg │ ├── home_11.svg │ ├── horizontal_bar_11.svg │ ├── horn_cleat_11.svg │ ├── horse_riding_11.svg │ ├── horse_shelter_11.svg │ ├── horseshoe_11.svg │ ├── horseshoes_11.svg │ ├── hospital_11.svg │ ├── hospital_JP_11.svg │ ├── hot_drink_cup_11.svg │ ├── hot_spring_11.svg │ ├── houseboat_11.svg │ ├── hunting_blind_11.svg │ ├── hut_11.svg │ ├── ice_cream_11.svg │ ├── ice_fishing_11.svg │ ├── ice_skating_11.svg │ ├── industry_11.svg │ ├── info_board_11.svg │ ├── information_11.svg │ ├── inline_skating_11.svg │ ├── island_trees_building_11.svg │ ├── islet_tree_11.svg │ ├── j_bar_lift_11.svg │ ├── jet_skiing_11.svg │ ├── jetplane_front_11.svg │ ├── jewelry_store_11.svg │ ├── junction_11.svg │ ├── junk_car_11.svg │ ├── karaoke_11.svg │ ├── kayaking_11.svg │ ├── kerb-flush_11.svg │ ├── kerb-lowered_11.svg │ ├── kerb-raised_11.svg │ ├── kerb-rolled_11.svg │ ├── kerb-unspecified_11.svg │ ├── kitchen_sink_11.svg │ ├── landmark_11.svg │ ├── landmark_JP_11.svg │ ├── landuse_11.svg │ ├── latrine_11.svg │ ├── laundry_11.svg │ ├── lawn_11.svg │ ├── lawyer_11.svg │ ├── letter_box_11.svg │ ├── library_11.svg │ ├── lift_gate_11.svg │ ├── light_rail_11.svg │ ├── lighthouse_11.svg │ ├── lighthouse_JP_11.svg │ ├── lipstick_11.svg │ ├── lock_11.svg │ ├── lodging_11.svg │ ├── logging_11.svg │ ├── lounger_11.svg │ ├── lounging_11.svg │ ├── manhole_11.svg │ ├── manufactured_home_11.svg │ ├── marker_11.svg │ ├── marker_stroked_11.svg │ ├── mast_11.svg │ ├── mast_communication_11.svg │ ├── mast_lighting_11.svg │ ├── maze_11.svg │ ├── meat_11.svg │ ├── milestone_11.svg │ ├── military_11.svg │ ├── military_checkpoint_11.svg │ ├── milk_jug_11.svg │ ├── mineshaft_cage_11.svg │ ├── mineshaft_profile_11.svg │ ├── mobile_phone_11.svg │ ├── money_hand_11.svg │ ├── monorail_11.svg │ ├── monument_11.svg │ ├── monument_JP_11.svg │ ├── motorcycle_11.svg │ ├── motorcycle_rental_11.svg │ ├── motorcycle_repair_11.svg │ ├── mountain_11.svg │ ├── mountain_asterisk_11.svg │ ├── mountain_cross_11.svg │ ├── mountain_range_11.svg │ ├── movie_rental_11.svg │ ├── museum_11.svg │ ├── music_11.svg │ ├── natural_11.svg │ ├── needle_and_spool_11.svg │ ├── nightclub_11.svg │ ├── obelisk_11.svg │ ├── observation_tower_11.svg │ ├── oil_well_11.svg │ ├── oneway.svg │ ├── optician_11.svg │ ├── os_benchmark_11.svg │ ├── paint_11.svg │ ├── park_11.svg │ ├── park_alt1_11.svg │ ├── parking_11.svg │ ├── parking_garage_11.svg │ ├── parking_paid_11.svg │ ├── parking_space_11.svg │ ├── passport_checkpoint_11.svg │ ├── ped_cyclist_crosswalk_11.svg │ ├── pedestrian_11.svg │ ├── pedestrian_and_cyclist_11.svg │ ├── pedestrian_crosswalk_11.svg │ ├── pedestrian_walled_11.svg │ ├── perfume_11.svg │ ├── pet_grooming_11.svg │ ├── pet_store_11.svg │ ├── pharmacy_11.svg │ ├── physiotherapist_11.svg │ ├── pick_hammer_11.svg │ ├── picnic_shelter_11.svg │ ├── picnic_site_11.svg │ ├── pier_fixed_11.svg │ ├── pier_floating_11.svg │ ├── pin_11.svg │ ├── pipe_11.svg │ ├── pitch_11.svg │ ├── place_of_worship_11.svg │ ├── plane_taxiing_11.svg │ ├── planes_11.svg │ ├── planes_bidirectional_11.svg │ ├── plant_11.svg │ ├── plaque_11.svg │ ├── platter_lift_11.svg │ ├── play_structure_11.svg │ ├── playground_11.svg │ ├── plumber_11.svg │ ├── police_11.svg │ ├── police_JP_11.svg │ ├── police_checkpoint_11.svg │ ├── police_officer_11.svg │ ├── polished_nail_11.svg │ ├── portrait_11.svg │ ├── portrait_framed_11.svg │ ├── post_11.svg │ ├── post_JP_11.svg │ ├── post_box_11.svg │ ├── poster_box_11.svg │ ├── power_11.svg │ ├── power_cb2_11.svg │ ├── power_cb_11.svg │ ├── power_circuit_11.svg │ ├── power_ct_11.svg │ ├── power_device_11.svg │ ├── power_isolator_11.svg │ ├── power_la_11.svg │ ├── power_manhole_11.svg │ ├── power_meter_11.svg │ ├── power_pole_11.svg │ ├── power_shutoff_11.svg │ ├── power_switch_11.svg │ ├── power_tower_11.svg │ ├── power_transformer_11.svg │ ├── powered_pump_11.svg │ ├── prison_11.svg │ ├── propane_tank_11.svg │ ├── psychic_11.svg │ ├── quakerism_11.svg │ ├── quay_11.svg │ ├── racetrack_11.svg │ ├── racetrack_boat_11.svg │ ├── racetrack_cycling_11.svg │ ├── racetrack_horse_11.svg │ ├── racetrack_oval_11.svg │ ├── radiation_11.svg │ ├── radio_11.svg │ ├── rafting_11.svg │ ├── rail_11.svg │ ├── rail_flag_11.svg │ ├── rail_light_11.svg │ ├── rail_metro_11.svg │ ├── rail_profile_11.svg │ ├── railing_11.svg │ ├── railway_11.svg │ ├── railway_cable_track_11.svg │ ├── railway_signals_11.svg │ ├── railway_track_11.svg │ ├── railway_track_askew_11.svg │ ├── railway_track_mini_11.svg │ ├── railway_track_narrow_11.svg │ ├── railway_track_partial_11.svg │ ├── ranger_station_11.svg │ ├── real_estate_agency_11.svg │ ├── recycling_11.svg │ ├── religious_buddhist_11.svg │ ├── religious_christian_11.svg │ ├── religious_jewish_11.svg │ ├── religious_muslim_11.svg │ ├── religious_shinto_11.svg │ ├── residential_community_11.svg │ ├── restaurant_11.svg │ ├── restaurant_bbq_11.svg │ ├── restaurant_noodle_11.svg │ ├── restaurant_pizza_11.svg │ ├── restaurant_seafood_11.svg │ ├── restaurant_sushi_11.svg │ ├── rigging_11.svg │ ├── road_1.svg │ ├── road_2.svg │ ├── road_3.svg │ ├── road_4.svg │ ├── road_5.svg │ ├── road_6.svg │ ├── road_accident_11.svg │ ├── roadblock_11.svg │ ├── rocket_11.svg │ ├── rocket_firework_11.svg │ ├── roller_coaster_11.svg │ ├── room_11.svg │ ├── rope_fence_11.svg │ ├── row_houses_11.svg │ ├── ruins_11.svg │ ├── rumble_strip_11.svg │ ├── saddle_11.svg │ ├── sail_11.svg │ ├── sailboat_11.svg │ ├── sailing_11.svg │ ├── sandbox_11.svg │ ├── sandwich_11.svg │ ├── scaffold_11.svg │ ├── school_11.svg │ ├── school_JP_11.svg │ ├── school_bus_11.svg │ ├── scooter_11.svg │ ├── scuba_diving_11.svg │ ├── sculpture_11.svg │ ├── security_camera_11.svg │ ├── seesaw_11.svg │ ├── shelter_11.svg │ ├── shield_11.svg │ ├── shinto_11.svg │ ├── shoe_11.svg │ ├── shop_11.svg │ ├── shopping_mall_11.svg │ ├── shower_11.svg │ ├── shrub_11.svg │ ├── shrub_low_11.svg │ ├── shuffleboard_11.svg │ ├── sign_and_bench_11.svg │ ├── sign_and_car_11.svg │ ├── sign_and_pedestrian_11.svg │ ├── sikhism_11.svg │ ├── silo_11.svg │ ├── skateboard_11.svg │ ├── skateboarding_11.svg │ ├── ski_jumping_11.svg │ ├── skiing_11.svg │ ├── slaughterhouse_11.svg │ ├── sledding_11.svg │ ├── sleep_shelter_11.svg │ ├── slide_11.svg │ ├── slipway_11.svg │ ├── snow_11.svg │ ├── snow_shoeing_11.svg │ ├── snowboarding_11.svg │ ├── snowmobile_11.svg │ ├── soccer_11.svg │ ├── social_facility_11.svg │ ├── spa_11.svg │ ├── speaker_11.svg │ ├── speed_bump_11.svg │ ├── speed_dip_11.svg │ ├── speed_dip_double_11.svg │ ├── speed_hump_11.svg │ ├── speed_table_11.svg │ ├── speedway_8_11.svg │ ├── speedway_oval_11.svg │ ├── spice_bottle_11.svg │ ├── spike_strip_11.svg │ ├── spotting_scope_11.svg │ ├── spring_rider_11.svg │ ├── square_11.svg │ ├── square_stroked_11.svg │ ├── stadium_11.svg │ ├── stamp_11.svg │ ├── star_11.svg │ ├── star_stroked_11.svg │ ├── statue_11.svg │ ├── stile_squeezer_11.svg │ ├── stop_11.svg │ ├── storage_11.svg │ ├── storage_drum_11.svg │ ├── storage_fermenter_11.svg │ ├── storage_rental_11.svg │ ├── storage_tank_11.svg │ ├── street_lamp_arm_11.svg │ ├── striped_way_11.svg │ ├── striped_zone_11.svg │ ├── subway_11.svg │ ├── suitcase_11.svg │ ├── suitcase_key_11.svg │ ├── suitcase_xray_11.svg │ ├── surfing_11.svg │ ├── swamp_11.svg │ ├── swimming_11.svg │ ├── t_bar_lift_11.svg │ ├── table_tennis_11.svg │ ├── tall_gate_11.svg │ ├── tanning2_11.svg │ ├── tanning_11.svg │ ├── taoism_11.svg │ ├── tattoo_machine_11.svg │ ├── taxi_stand_11.svg │ ├── teahouse_11.svg │ ├── telephone_11.svg │ ├── telescope_11.svg │ ├── temaki_11.svg │ ├── tennis_11.svg │ ├── tents_11.svg │ ├── terminal_11.svg │ ├── theatre_11.svg │ ├── ticket_11.svg │ ├── tiling_11.svg │ ├── tire_11.svg │ ├── tire_course_11.svg │ ├── toilet_11.svg │ ├── toll_11.svg │ ├── toll_gantry_11.svg │ ├── toolbox_11.svg │ ├── tools_11.svg │ ├── tower_11.svg │ ├── tower_communication_11.svg │ ├── town_11.svg │ ├── town_hall_11.svg │ ├── traffic_signals_11.svg │ ├── train_11.svg │ ├── train_bullet_11.svg │ ├── train_diesel_11.svg │ ├── train_kids_11.svg │ ├── train_steam_11.svg │ ├── train_wash_11.svg │ ├── tram_11.svg │ ├── tram_side_11.svg │ ├── transit_11.svg │ ├── transit_shelter_11.svg │ ├── tree_and_bench_11.svg │ ├── tree_broadleaved_11.svg │ ├── tree_cactus_11.svg │ ├── tree_leafless_11.svg │ ├── tree_needleleaved_11.svg │ ├── tree_palm_11.svg │ ├── tree_row_11.svg │ ├── tree_stump_11.svg │ ├── trench_11.svg │ ├── triangle_11.svg │ ├── triangle_stroked_11.svg │ ├── trolleybus_11.svg │ ├── truck_11.svg │ ├── tunnel_11.svg │ ├── turnstile_11.svg │ ├── us-highway_1.svg │ ├── us-highway_2.svg │ ├── us-highway_3.svg │ ├── us-interstate_1.svg │ ├── us-interstate_2.svg │ ├── us-interstate_3.svg │ ├── us-state_1.svg │ ├── us-state_2.svg │ ├── us-state_3.svg │ ├── us-state_4.svg │ ├── us-state_5.svg │ ├── us-state_6.svg │ ├── utility_pole_11.svg │ ├── vacuum_11.svg │ ├── vacuum_station_11.svg │ ├── valley_11.svg │ ├── vase_11.svg │ ├── vending_bread_11.svg │ ├── vending_cigarettes_11.svg │ ├── vending_cold_drink2_11.svg │ ├── vending_cold_drink_11.svg │ ├── vending_eggs_11.svg │ ├── vending_flat_coin_11.svg │ ├── vending_hot_drink2_11.svg │ ├── vending_hot_drink_11.svg │ ├── vending_ice_11.svg │ ├── vending_ice_cream2_11.svg │ ├── vending_ice_cream_11.svg │ ├── vending_lockers_11.svg │ ├── vending_love_11.svg │ ├── vending_machine_11.svg │ ├── vending_medicine_11.svg │ ├── vending_newspaper_11.svg │ ├── vending_pet_waste_11.svg │ ├── vending_stamps_11.svg │ ├── vending_tickets_11.svg │ ├── vending_venus_11.svg │ ├── vertex_11.svg │ ├── vertical_rotisserie_11.svg │ ├── veterinary_11.svg │ ├── veterinary_care_11.svg │ ├── viewpoint_11.svg │ ├── village_11.svg │ ├── volcano_11.svg │ ├── volleyball_11.svg │ ├── wall_11.svg │ ├── warehouse_11.svg │ ├── waste_11.svg │ ├── waste_basket_11.svg │ ├── waste_device_11.svg │ ├── waste_manhole_11.svg │ ├── waste_meter_11.svg │ ├── waste_shutoff_11.svg │ ├── watch_11.svg │ ├── water_11.svg │ ├── water_bottle_11.svg │ ├── water_device_11.svg │ ├── water_manhole_11.svg │ ├── water_meter_11.svg │ ├── water_shutoff_11.svg │ ├── water_tap_11.svg │ ├── water_tap_drinkable_11.svg │ ├── water_tower_11.svg │ ├── waterfall_11.svg │ ├── watermill_11.svg │ ├── waterskiing_11.svg │ ├── wave.svg │ ├── well_pump_manual_11.svg │ ├── well_pump_powered_11.svg │ ├── wetland_11.svg │ ├── whale_watching_11.svg │ ├── wheel_11.svg │ ├── wheelchair_11.svg │ ├── wheelchair_active_11.svg │ ├── wind_surfing_11.svg │ ├── wind_turbine_11.svg │ ├── windmill_11.svg │ ├── window_11.svg │ ├── windpump_11.svg │ ├── windsock_11.svg │ ├── x_oblique_11.svg │ ├── yield_11.svg │ └── zoo_11.svg ├── images │ ├── Lomy_nad_Velkou_-_Borová_věž.jpg │ ├── Lomy_nad_Velkou_-_Borová_věž3.jpg │ ├── Lomy_nad_Velkou_-_Borová_věž4.jpg │ └── homepage │ │ ├── frankenjura-2.jpg │ │ ├── frankenjura.jpg │ │ ├── hlubocepske-plotny-2.jpg │ │ ├── hlubocepske-plotny.jpg │ │ ├── kobyla-2.jpg │ │ ├── kobyla.jpg │ │ ├── lomy-nad-velkou-2.jpg │ │ ├── lomy-nad-velkou.jpg │ │ ├── roviste-2.jpg │ │ ├── roviste.jpg │ │ ├── solvayovy-lomy-2.jpg │ │ ├── solvayovy-lomy.jpg │ │ ├── tetinske-skaly-2.jpg │ │ ├── tetinske-skaly.jpg │ │ ├── u-zidovy-strouhy-2.jpg │ │ ├── u-zidovy-strouhy.jpg │ │ ├── udoli-kacaku-2.jpg │ │ ├── udoli-kacaku.jpg │ │ ├── velka-2.jpg │ │ ├── velka.jpg │ │ ├── zupanovice-2.jpg │ │ └── zupanovice.jpg ├── install │ ├── android_add.png │ ├── android_menu.png │ ├── desktop_add.png │ ├── desktop_add_screen.png │ ├── ios_add.png │ ├── ios_addicon.png │ ├── ios_share.png │ ├── ios_shareicon.png │ └── ios_shareicon@2.png ├── logo-osm.svg ├── manifest-openclimbing.json ├── manifest-osmapp.json ├── maptiler-api.svg ├── oauth-token.html ├── openclimbing │ ├── btcln.png │ ├── favicon.ico │ ├── homepage.png │ ├── logo │ │ ├── fav │ │ │ ├── apple-touch-icon.png │ │ │ ├── browserconfig.xml │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon.ico │ │ │ ├── mstile-150x150.png │ │ │ └── safari-pinned-tab.svg │ │ ├── openclimbing.svg │ │ ├── openclimbing_1024.png │ │ ├── openclimbing_16.png │ │ ├── openclimbing_192.png │ │ ├── openclimbing_256.png │ │ ├── openclimbing_64.png │ │ ├── pwa │ │ │ ├── maskable_x128.png │ │ │ ├── maskable_x192.png │ │ │ ├── maskable_x384.png │ │ │ ├── maskable_x48.png │ │ │ ├── maskable_x512.png │ │ │ ├── maskable_x72.png │ │ │ └── maskable_x96.png │ │ └── splash │ │ │ ├── dark │ │ │ ├── ipad_splash.png │ │ │ ├── ipadpro1_splash.png │ │ │ ├── ipadpro2_splash.png │ │ │ ├── ipadpro3_splash.png │ │ │ ├── iphone5_splash.png │ │ │ ├── iphone6_splash.png │ │ │ ├── iphoneplus_splash.png │ │ │ ├── iphonex_splash.png │ │ │ ├── iphonexr_splash.png │ │ │ └── iphonexsmax_splash.png │ │ │ └── light │ │ │ ├── ipad_splash.png │ │ │ ├── ipadpro1_splash.png │ │ │ ├── ipadpro2_splash.png │ │ │ ├── ipadpro3_splash.png │ │ │ ├── iphone5_splash.png │ │ │ ├── iphone6_splash.png │ │ │ ├── iphoneplus_splash.png │ │ │ ├── iphonex_splash.png │ │ │ ├── iphonexr_splash.png │ │ │ └── iphonexsmax_splash.png │ ├── openclimbing-screenshot-300px.png │ ├── openclimbing-screenshot-300px@2x.png │ ├── openclimbing-screenshot.png │ └── taginfo.json ├── osmapp │ ├── favicon.ico │ ├── logo │ │ ├── fav │ │ │ ├── apple-touch-icon.png │ │ │ ├── browserconfig.xml │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon.ico │ │ │ ├── mstile-150x150.png │ │ │ └── safari-pinned-tab.svg │ │ ├── osmapp.svg │ │ ├── osmapp_1024.png │ │ ├── osmapp_16.png │ │ ├── osmapp_192.png │ │ ├── osmapp_256.png │ │ ├── osmapp_64.png │ │ ├── osmapp_logo_square.svg │ │ ├── pwa │ │ │ ├── maskable_x128.png │ │ │ ├── maskable_x192.png │ │ │ ├── maskable_x384.png │ │ │ ├── maskable_x48.png │ │ │ ├── maskable_x512.png │ │ │ ├── maskable_x72.png │ │ │ └── maskable_x96.png │ │ └── splash │ │ │ ├── ipad_splash.png │ │ │ ├── ipadpro1_splash.png │ │ │ ├── ipadpro2_splash.png │ │ │ ├── ipadpro3_splash.png │ │ │ ├── iphone5_splash.png │ │ │ ├── iphone6_splash.png │ │ │ ├── iphoneplus_splash.png │ │ │ ├── iphonex_splash.png │ │ │ ├── iphonexr_splash.png │ │ │ └── iphonexsmax_splash.png │ ├── osmapp-screenshot-300px.png │ ├── osmapp-screenshot-300px@2x.png │ └── osmapp-screenshot.png ├── pannellum │ └── pannellum.html ├── robots.txt ├── screens │ └── karlstejn2.png ├── sockets │ ├── schuko.svg │ ├── type1.svg │ ├── type2.svg │ └── unknown.svg ├── sprites.md ├── sprites │ ├── osmapp.json │ ├── osmapp.png │ ├── osmapp@2x.json │ ├── osmapp@2x.png │ ├── osmapp@3x.json │ └── osmapp@3x.png ├── sw.js ├── taginfo.json ├── vercel.svg └── workbox-588899ac.js ├── sentry.client.config.ts ├── sentry.edge.config.ts ├── sentry.server.config.ts ├── src ├── assets │ ├── GithubIcon.tsx │ ├── LogoMaptiler.tsx │ ├── LogoOpenClimbing.tsx │ ├── LogoOsmapp.tsx │ └── WikipediaIcon.tsx ├── components │ ├── App │ │ ├── Loading.tsx │ │ ├── google-analytics.tsx │ │ ├── helpers.ts │ │ └── umami.tsx │ ├── Climbing │ │ └── Climbing.tsx │ ├── ClimbingAreasPanel │ │ └── ClimbingAreasPanel.tsx │ ├── Directions │ │ ├── Directions.tsx │ │ ├── DirectionsAutocomplete.tsx │ │ ├── DirectionsBox.tsx │ │ ├── DirectionsButton.tsx │ │ ├── DirectionsContext.tsx │ │ ├── DirectionsForm.tsx │ │ ├── Instructions.tsx │ │ ├── ModeToggler.tsx │ │ ├── Result.tsx │ │ ├── TextMarker.tsx │ │ ├── helpers.tsx │ │ ├── routing │ │ │ ├── getBrouterResults.ts │ │ │ ├── getGraphhopperResults.ts │ │ │ ├── handleRouting.ts │ │ │ ├── instructions.ts │ │ │ └── types.ts │ │ └── useGetOnSubmit.tsx │ ├── FeaturePanel │ │ ├── Climbing │ │ │ ├── AreaIcon.tsx │ │ │ ├── CameraMarker.tsx │ │ │ ├── ClimbingCragDialog.tsx │ │ │ ├── ClimbingCragDialogHeader.tsx │ │ │ ├── ClimbingEditorHelperText.tsx │ │ │ ├── ClimbingGradesTable │ │ │ │ ├── ClimbingGradesTable.tsx │ │ │ │ ├── ClimbingGradesTableBody.tsx │ │ │ │ ├── ClimbingGradesTableHead.tsx │ │ │ │ └── ClimbingGradesTableSettings.tsx │ │ │ ├── ClimbingGuideInfo.tsx │ │ │ ├── ClimbingRestriction.tsx │ │ │ ├── ClimbingStructuredData.tsx │ │ │ ├── ClimbingTypeBadge.tsx │ │ │ ├── ClimbingView.tsx │ │ │ ├── ClimbingViewContent.tsx │ │ │ ├── ContentContainer.tsx │ │ │ ├── ConvertedRouteDifficultyBadge.tsx │ │ │ ├── CragIcon.tsx │ │ │ ├── CragMap.tsx │ │ │ ├── Editor │ │ │ │ ├── MouseTrackingLine.tsx │ │ │ │ ├── PathWithBorder.tsx │ │ │ │ ├── PointMenu.tsx │ │ │ │ ├── Points │ │ │ │ │ ├── Anchor.tsx │ │ │ │ │ ├── Bolt.tsx │ │ │ │ │ ├── Piton.tsx │ │ │ │ │ ├── Point.tsx │ │ │ │ │ ├── PulsedPoint.tsx │ │ │ │ │ ├── Sling.tsx │ │ │ │ │ ├── UnfinishedPoint.tsx │ │ │ │ │ └── pointTypes.ts │ │ │ │ ├── RouteDifficulty.tsx │ │ │ │ ├── RouteFloatingMenu.tsx │ │ │ │ ├── RouteMarks.tsx │ │ │ │ ├── RouteNumber.tsx │ │ │ │ ├── RoutePath.tsx │ │ │ │ ├── RouteWithLabel.tsx │ │ │ │ ├── RoutesEditor.tsx │ │ │ │ ├── RoutesLayer.tsx │ │ │ │ └── StartPoint.tsx │ │ │ ├── FeaturePanelClimbingGuideInfo.tsx │ │ │ ├── GradeSystemSelect.tsx │ │ │ ├── PanelLabel.tsx │ │ │ ├── PhotoLink.tsx │ │ │ ├── RouteDifficultyBadge.tsx │ │ │ ├── RouteDistribution.tsx │ │ │ ├── RouteList │ │ │ │ ├── ClimbingRouteTableRow.tsx │ │ │ │ ├── EmptyValue.tsx │ │ │ │ ├── Label.tsx │ │ │ │ ├── RouteList.tsx │ │ │ │ ├── RouteListDndContent.tsx │ │ │ │ └── RouteListRow.tsx │ │ │ ├── RouteNumber.tsx │ │ │ ├── TickRow.tsx │ │ │ ├── Ticks │ │ │ │ ├── AddTickButton.tsx │ │ │ │ ├── MyRouteTicks.tsx │ │ │ │ └── TickStyleSelect.tsx │ │ │ ├── TransformWrapper.tsx │ │ │ ├── YellowedBadge.tsx │ │ │ ├── config.ts │ │ │ ├── contexts │ │ │ │ ├── ClimbingContext.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ └── osmToClimbingRoutes.test.ts │ │ │ │ └── osmToClimbingRoutes.ts │ │ │ ├── types.ts │ │ │ ├── useGetHandleSave.tsx │ │ │ └── utils │ │ │ │ ├── __tests__ │ │ │ │ └── photo.test.ts │ │ │ │ ├── array.ts │ │ │ │ ├── boltCodes.ts │ │ │ │ ├── climbingTagValues.ts │ │ │ │ ├── findCloserPoint.ts │ │ │ │ ├── getDividedFeaturesBySections.ts │ │ │ │ ├── getEmptyRoute.ts │ │ │ │ ├── grades │ │ │ │ ├── gradeData.ts │ │ │ │ └── routeGrade.ts │ │ │ │ ├── image.ts │ │ │ │ ├── mousePositionUtils.ts │ │ │ │ ├── number.ts │ │ │ │ ├── photo.ts │ │ │ │ ├── positionUtilsFactory.ts │ │ │ │ ├── startPoint.ts │ │ │ │ ├── useCragViewLayout.tsx │ │ │ │ ├── useGetMachineFactory.ts │ │ │ │ ├── useRouteNumberColors.tsx │ │ │ │ ├── useScrollShadow.tsx │ │ │ │ └── useVisibleGradeSystems.ts │ │ ├── ClimbingRouteGrade.tsx │ │ ├── Coordinates.tsx │ │ ├── CragsInArea.tsx │ │ ├── EditButton.tsx │ │ ├── EditDialog │ │ │ ├── EditContent │ │ │ │ ├── ChangeDialogEditor.tsx │ │ │ │ ├── CommentField.tsx │ │ │ │ ├── ContributionInfoBox.tsx │ │ │ │ ├── EditContent.tsx │ │ │ │ ├── EditDialogActions.tsx │ │ │ │ ├── FeatureEditSection │ │ │ │ │ ├── AddMemberForm.tsx │ │ │ │ │ ├── ConvertNodeToRelation.tsx │ │ │ │ │ ├── ItemHeading.tsx │ │ │ │ │ ├── LocationEditor │ │ │ │ │ │ ├── EditFeatureMap.tsx │ │ │ │ │ │ ├── LocationEditor.tsx │ │ │ │ │ │ ├── getMapStyle.tsx │ │ │ │ │ │ ├── isGpsValid.tsx │ │ │ │ │ │ ├── useDraggableMarker.ts │ │ │ │ │ │ ├── useInitEditFeatureMap.ts │ │ │ │ │ │ └── useStaticMarkers.tsx │ │ │ │ │ ├── MajorKeysEditor.tsx │ │ │ │ │ ├── MembersEditor.tsx │ │ │ │ │ ├── OpeningHoursEditor │ │ │ │ │ │ ├── AddSlotButton.tsx │ │ │ │ │ │ ├── CopyFromAboveButton.tsx │ │ │ │ │ │ ├── OpeningHoursEditor.tsx │ │ │ │ │ │ ├── OpeningHoursInput.tsx │ │ │ │ │ │ ├── TimeSlot.tsx │ │ │ │ │ │ ├── YoHoursLink.tsx │ │ │ │ │ │ ├── parser │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ └── parser.test.ts │ │ │ │ │ │ │ ├── buildString.ts │ │ │ │ │ │ │ ├── canItHandle.ts │ │ │ │ │ │ │ ├── getDaysTable.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetBlurValidation.tsx │ │ │ │ │ ├── OptionsEditor.tsx │ │ │ │ │ ├── ParentsEditor.tsx │ │ │ │ │ ├── PresetSelect │ │ │ │ │ │ ├── PresetMenu.tsx │ │ │ │ │ │ ├── PresetSelect.tsx │ │ │ │ │ │ ├── SearchRow.tsx │ │ │ │ │ │ └── useOptions.tsx │ │ │ │ │ └── TagsEditor │ │ │ │ │ │ ├── KeyInput.tsx │ │ │ │ │ │ ├── TagsEditor.tsx │ │ │ │ │ │ ├── ValueInput.tsx │ │ │ │ │ │ └── helpers.tsx │ │ │ │ ├── FeatureRow.tsx │ │ │ │ ├── ItemEditSection.tsx │ │ │ │ ├── ItemsTabs.tsx │ │ │ │ ├── OsmUserLogged.tsx │ │ │ │ ├── OsmUserLoggedOut.tsx │ │ │ │ ├── helpers.tsx │ │ │ │ └── useHandleItemClick.tsx │ │ │ ├── EditContext.tsx │ │ │ ├── EditDialog.tsx │ │ │ ├── EditDialogContent.tsx │ │ │ ├── EditDialogTitle.tsx │ │ │ ├── SuccessContent.tsx │ │ │ ├── __tests__ │ │ │ │ └── useEditItems.test.tsx │ │ │ ├── components.tsx │ │ │ ├── createNoteText.ts │ │ │ ├── itemsHelpers.ts │ │ │ ├── useEditItems.tsx │ │ │ ├── useGetHandleSave.tsx │ │ │ └── utils.ts │ │ ├── FeatureDescription.tsx │ │ ├── FeatureHeading.tsx │ │ ├── FeatureImages │ │ │ ├── FeatureImages.tsx │ │ │ ├── Image │ │ │ │ ├── Image.tsx │ │ │ │ ├── InfoButton.tsx │ │ │ │ ├── PanoramaImg.tsx │ │ │ │ └── helpers.tsx │ │ │ ├── NoImage.tsx │ │ │ ├── PathsSvg.tsx │ │ │ ├── __tests__ │ │ │ │ └── useLoadImages.test.ts │ │ │ ├── helpers.tsx │ │ │ ├── types.ts │ │ │ └── useLoadImages.tsx │ │ ├── FeatureOpenPlaceGuideLink.tsx │ │ ├── FeaturePanel.tsx │ │ ├── FeaturePanelFooter.tsx │ │ ├── FeaturePanelInDrawer.tsx │ │ ├── FeaturePanelOnSide.tsx │ │ ├── FeaturedTag.tsx │ │ ├── FeaturedTags.tsx │ │ ├── MemberFeatures │ │ │ ├── ClimbingItem.tsx │ │ │ ├── MemberFeatures.tsx │ │ │ └── MemberItem.tsx │ │ ├── Members.tsx │ │ ├── NwrIcon.tsx │ │ ├── ObjectsAround.tsx │ │ ├── OsmError.tsx │ │ ├── ParentLink.tsx │ │ ├── Properties │ │ │ ├── Direction.tsx │ │ │ ├── IdSchemaFields.tsx │ │ │ ├── Properties.tsx │ │ │ ├── Table.tsx │ │ │ ├── TagsTableInner.tsx │ │ │ ├── Wrapper.tsx │ │ │ ├── getUrlForTag.tsx │ │ │ ├── helpers.tsx │ │ │ └── renderTag.tsx │ │ ├── PublicTransport │ │ │ ├── PublicTransport.tsx │ │ │ ├── route │ │ │ │ ├── PublicTransportRoute.tsx │ │ │ │ ├── Stop.tsx │ │ │ │ ├── Stops.tsx │ │ │ │ └── helpers.tsx │ │ │ └── routes │ │ │ │ ├── CategoryHeading.tsx │ │ │ │ ├── LineNumber.tsx │ │ │ │ ├── PublicTransportWrapper.tsx │ │ │ │ ├── Routes.tsx │ │ │ │ ├── __tests__ │ │ │ │ ├── helpers.test.ts │ │ │ │ └── requestRoutes.test.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── requestRoutes.ts │ │ │ │ └── useShowOnMap.ts │ │ ├── QuickActions │ │ │ ├── QuickActionButton.tsx │ │ │ ├── QuickActions.tsx │ │ │ ├── ShareDialog │ │ │ │ ├── ActionButtons.tsx │ │ │ │ ├── CoordinateSection.tsx │ │ │ │ ├── ImageAttribution.tsx │ │ │ │ ├── LinkSection.tsx │ │ │ │ ├── OpenInSection.tsx │ │ │ │ ├── ShareButton.tsx │ │ │ │ ├── ShareDialog.tsx │ │ │ │ ├── helpers.tsx │ │ │ │ ├── items.ts │ │ │ │ └── useGetItems.ts │ │ │ └── StarButton.tsx │ │ ├── ResponsiveFeaturePanel.tsx │ │ ├── Runways │ │ │ ├── Runways.tsx │ │ │ ├── SuccessRunways.tsx │ │ │ ├── __tests__ │ │ │ │ └── loadRunways.test.ts │ │ │ └── loadRunways.ts │ │ ├── Sockets │ │ │ ├── Socket.tsx │ │ │ ├── Sockets.tsx │ │ │ ├── img.ts │ │ │ └── useSocketTags.tsx │ │ ├── helpers │ │ │ ├── EditDialogContext.tsx │ │ │ ├── InlineEditButton.tsx │ │ │ ├── PoiDescription.tsx │ │ │ ├── Puller.tsx │ │ │ ├── Subheading.tsx │ │ │ ├── TestApiWarning.tsx │ │ │ ├── ToggleButton.tsx │ │ │ ├── color.ts │ │ │ ├── externalLinks.ts │ │ │ └── importance.ts │ │ └── renderers │ │ │ ├── ClimbingGradeRenderer.tsx │ │ │ ├── FoodHygieneRatingScheme.tsx │ │ │ ├── OpeningHoursRenderer.tsx │ │ │ ├── PhoneRenderer.tsx │ │ │ ├── ScaleRenderer.tsx │ │ │ ├── WebsiteRenderer.tsx │ │ │ ├── WikidataRenderer.tsx │ │ │ ├── WikipediaRenderer.tsx │ │ │ └── openingHours │ │ │ ├── __tests__ │ │ │ └── utils.test.ts │ │ │ ├── complex.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ ├── HomepagePanel │ │ ├── DividerOpenClimbing.tsx │ │ ├── Homepage.tsx │ │ ├── HomepageOpenClimbing.tsx │ │ ├── HomepageOpenClimbingGallery.tsx │ │ ├── HomepagePanel.tsx │ │ ├── InstallDialog.tsx │ │ ├── SupportUs.tsx │ │ └── UserSettingsDialog.tsx │ ├── LayerSwitcher │ │ ├── AddCustomLayer.tsx │ │ ├── AddLayerButton.tsx │ │ ├── BaseLayers.tsx │ │ ├── LayerSwitcher.tsx │ │ ├── LayerSwitcherButton.tsx │ │ ├── LayerSwitcherContent.tsx │ │ ├── LayersIcon.tsx │ │ ├── Overlays.tsx │ │ ├── SuccessLayerInput.tsx │ │ ├── helpers.tsx │ │ ├── helpers │ │ │ └── loadLayers.ts │ │ └── osmappLayers.tsx │ ├── Map │ │ ├── BrowserMap.tsx │ │ ├── Map.tsx │ │ ├── MapFooter │ │ │ ├── AttributionLinks.tsx │ │ │ ├── ClimbingLegend.tsx │ │ │ ├── MapDataLink.tsx │ │ │ ├── MapFooter.tsx │ │ │ └── MaptilerLogo.tsx │ │ ├── TopMenu │ │ │ ├── HamburgerIconButton.tsx │ │ │ ├── HamburgerMenu.tsx │ │ │ ├── LangSwitcher.tsx │ │ │ ├── LoginIconButton.tsx │ │ │ ├── TopMenu.tsx │ │ │ └── UserMenu.tsx │ │ ├── Weather │ │ │ ├── CoordinateSystem.tsx │ │ │ ├── DaySelector.tsx │ │ │ ├── DetailedWeather.tsx │ │ │ ├── FocusedWeather.tsx │ │ │ ├── TemperatureChart.tsx │ │ │ ├── Weather.tsx │ │ │ ├── WeatherInner.tsx │ │ │ ├── helpers.tsx │ │ │ ├── icons.ts │ │ │ ├── loadWeather.tsx │ │ │ └── wmoCodeForDay.tsx │ │ ├── behaviour │ │ │ ├── PersistedScaleControl.ts │ │ │ ├── featureHover.ts │ │ │ ├── indoor.tsx │ │ │ ├── maptilerFix.tsx │ │ │ ├── useFeatureMarker.tsx │ │ │ ├── useInitMap.tsx │ │ │ ├── useOnMapClicked.tsx │ │ │ ├── useOnMapLongPressed.tsx │ │ │ ├── useToggleTerrainControl.tsx │ │ │ ├── useUpdateStyle.tsx │ │ │ ├── useUpdateViewOnMove.tsx │ │ │ └── utils.ts │ │ ├── climbingTiles │ │ │ ├── climbingLayers │ │ │ │ ├── climbingLayers.ts │ │ │ │ ├── groupsLayer.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── routesLines.ts │ │ │ │ └── routesPoints.ts │ │ │ ├── climbingTilesSource.ts │ │ │ ├── computeTiles.ts │ │ │ └── consts.ts │ │ ├── consts.ts │ │ ├── helpers.ts │ │ ├── styles │ │ │ ├── basicStyle.ts │ │ │ ├── layers │ │ │ │ ├── buildings3dLayers.ts │ │ │ │ ├── cliffsLayers.ts │ │ │ │ ├── climbingLayers.ts │ │ │ │ ├── contruction.ts │ │ │ │ ├── overpassLayers.ts │ │ │ │ └── poiLayers.ts │ │ │ ├── makinaAfricaStyle.ts │ │ │ ├── outdoorStyle.ts │ │ │ └── rasterStyle.ts │ │ └── useAddTopRightControls.tsx │ ├── MyTicksPanel │ │ ├── MyTicksPanel.tsx │ │ ├── MyTicksRow.tsx │ │ ├── useAddHeatmap.tsx │ │ └── useSortedTable.tsx │ ├── SearchBox │ │ ├── AutocompleteInput.tsx │ │ ├── SearchBox.tsx │ │ ├── consts.ts │ │ ├── getOptionLabel.tsx │ │ ├── getOptionToLonLat.tsx │ │ ├── helpers.tsx │ │ ├── options │ │ │ ├── coords.tsx │ │ │ ├── geocoder.tsx │ │ │ ├── osm.tsx │ │ │ ├── overpass.tsx │ │ │ ├── preset.tsx │ │ │ └── stars.tsx │ │ ├── optionsPopper.tsx │ │ ├── queryWizard │ │ │ ├── __tests__ │ │ │ │ └── queryWizard.test.ts │ │ │ ├── ast.ts │ │ │ ├── generateQuery.ts │ │ │ ├── isAst.ts │ │ │ ├── queryWizard.ts │ │ │ └── tokens.ts │ │ ├── renderInputFactory.tsx │ │ ├── renderOptionFactory.tsx │ │ ├── types.ts │ │ ├── useGetOnHighlight.ts │ │ ├── useGetOnSelected.ts │ │ ├── useGetOptions.tsx │ │ ├── useHandleDirectQuery.tsx │ │ └── utils.tsx │ ├── helpers.tsx │ └── utils │ │ ├── ClosePanelButton.tsx │ │ ├── DragHandler.tsx │ │ ├── Drawer.tsx │ │ ├── FeatureContext.tsx │ │ ├── MapStateContext.tsx │ │ ├── MobilePageDrawer.tsx │ │ ├── OsmAuthContext.tsx │ │ ├── PanelHelpers.tsx │ │ ├── SnackbarContext.tsx │ │ ├── StarsContext.tsx │ │ ├── TooltipButton.tsx │ │ ├── UserSettingsContext.tsx │ │ ├── colorUtils.tsx │ │ ├── icons │ │ ├── Maki.tsx │ │ ├── PoiIcon.tsx │ │ └── iconsLookup.ts │ │ ├── nl2br.tsx │ │ ├── useDragItems.tsx │ │ └── usePersistedState.ts ├── config.mjs ├── helpers │ ├── FaviconsOpenClimbing.tsx │ ├── FaviconsOsmapp.tsx │ ├── GlobalStyle.tsx │ ├── LangLinks.tsx │ ├── TitleAndMetaTags.tsx │ ├── featureLabel.ts │ ├── hooks.ts │ ├── platforms.ts │ ├── theme.tsx │ └── utils.ts ├── locales │ ├── README.md │ ├── am.js │ ├── cs.js │ ├── de.js │ ├── es.js │ ├── fr.js │ ├── it.js │ ├── ja.js │ ├── pl.js │ └── vocabulary.js ├── server │ ├── climbing-tiles │ │ ├── db.sql │ │ ├── db.ts │ │ ├── getClimbingStats.ts │ │ ├── getClimbingTile.ts │ │ ├── optimizeGeojsonToGrid.ts │ │ ├── overpass │ │ │ ├── __tests__ │ │ │ │ └── basic.test.ts │ │ │ └── overpassToGeojsons.ts │ │ ├── refreshClimbingTiles.ts │ │ ├── refreshClimbingTilesHelpers.ts │ │ ├── tileToBBOX.ts │ │ └── utils.ts │ ├── images │ │ ├── fetchImage.tsx │ │ ├── logo.tsx │ │ ├── renderStyledHtml.tsx │ │ ├── sendImageResponse.tsx │ │ └── svg2png.ts │ ├── logRequest.tsx │ └── osmApiAuthServer.ts ├── services │ ├── __tests__ │ │ ├── fetchCrags.test.ts │ │ ├── fhrsApi.test.ts │ │ ├── osmApi.fixture.ts │ │ ├── overpassAroundToSkeletons.test.ts │ │ ├── overpassSearch.test.ts │ │ └── shortener.test.ts │ ├── climbing-areas │ │ └── getClimbingAreas.ts │ ├── fetch.ts │ ├── fetchCache.ts │ ├── fetchCrags.tsx │ ├── fhrsApi.ts │ ├── getCenter.ts │ ├── getCoordsFeature.ts │ ├── getPoiClass.ts │ ├── helpers.ts │ ├── images │ │ ├── __tests__ │ │ │ ├── apiMocks.fixture.ts │ │ │ ├── getBearing.test.ts │ │ │ ├── getImageDefs.test.ts │ │ │ └── getImageFromApi.test.ts │ │ ├── getCommonsImageUrl.ts │ │ ├── getFodyImage.ts │ │ ├── getImageDefs.ts │ │ ├── getImageFromApi.ts │ │ ├── getImageFromCenterFactory.ts │ │ ├── getMapillaryImage.ts │ │ ├── getPanoramaxImage.ts │ │ └── getkartaViewImage.ts │ ├── intl.tsx │ ├── intlServer.tsx │ ├── lastFeatureStorage.ts │ ├── mapStorage.ts │ ├── my-ticks │ │ └── getMyTicks.ts │ ├── osm │ │ ├── __tests__ │ │ │ ├── osmApi.test.ts │ │ │ └── osmToFeature.test.ts │ │ ├── auth │ │ │ ├── __tests__ │ │ │ │ ├── getDiffXml.test.ts │ │ │ │ └── getFirstExistingId.test.ts │ │ │ ├── api.ts │ │ │ ├── authFetch.ts │ │ │ ├── editCrag.ts │ │ │ ├── getDIffXml.ts │ │ │ ├── osmApiAuth.ts │ │ │ ├── stringifyDomXml.ts │ │ │ ├── user.ts │ │ │ ├── xmlHelpers.ts │ │ │ └── xmlTypes.ts │ │ ├── consts.ts │ │ ├── featureCenterToCache.ts │ │ ├── fetchParentFeatures.ts │ │ ├── fetchWays.ts │ │ ├── fetchWithMemberFeatures.ts │ │ ├── getCountryCode.ts │ │ ├── getFirstExistingId.ts │ │ ├── getFullFeatureWithMemberFeatures.ts │ │ ├── helpers.ts │ │ ├── insertOsmNote.ts │ │ ├── offlineItems.tsx │ │ ├── osmApi.ts │ │ ├── osmToFeature.ts │ │ ├── quickFetchFeature.ts │ │ ├── types.ts │ │ └── urls.ts │ ├── overpass │ │ ├── fetchAroundFeatures.ts │ │ ├── fetchOverpassCenter.ts │ │ ├── overpassAroundToSkeletons.ts │ │ └── overpassSearch.ts │ ├── project.tsx │ ├── shortener.ts │ ├── tagging │ │ ├── __tests__ │ │ │ └── idTaggingScheme.test.ts │ │ ├── climbing.ts │ │ ├── data.ts │ │ ├── featuredKeys.ts │ │ ├── fields.ts │ │ ├── idTaggingScheme.ts │ │ ├── keysTodo.ts │ │ ├── ourPresets.ts │ │ ├── presets.ts │ │ ├── translations.ts │ │ ├── types │ │ │ ├── Fields.ts │ │ │ └── Presets.ts │ │ └── utils.ts │ ├── ticks.ts │ └── types.ts ├── types.ts └── utils.ts ├── tsconfig.json ├── types.d.ts ├── vercel.json └── yarn.lock /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasks": { 3 | "test": "yarn install && yarn test", 4 | "build": "yarn install && yarn build", 5 | "launch": "yarn install && yarn dev" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .dockerignore 3 | node_modules 4 | npm-debug.log 5 | README.md 6 | .next 7 | .git 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/node_modules/ 2 | __tests__/fixtures/ 3 | dist/ 4 | .next/ 5 | public/workbox-*.js 6 | public/sw.js 7 | public/tmp/ 8 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### Description 4 | 5 | ### Example links 6 | 7 | ### Screenshots 8 | 9 | 10 | 11 | ### Checklist 12 | 13 | - [ ] dark mode / light mode 14 | - [ ] mobile / desktop 15 | - [ ] server-side-rendering (SSR) 16 | - [ ] all texts are localized (in vocabulary.ts) 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /coverage 3 | /build 4 | /dist 5 | /tsconfig.tsbuildinfo 6 | .next 7 | .DS_Store 8 | .idea 9 | .vscode 10 | next-env.d.ts 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | /public/tmp 15 | /.vercel 16 | .env.local 17 | .env.sentry-build-plugin 18 | /public/icons-indoor 19 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | tasks: 2 | - init: yarn 3 | command: yarn dev 4 | -------------------------------------------------------------------------------- /.lintstagedrc.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const buildEslintCommand = (filenames) => 4 | `next lint --fix --file ${filenames 5 | .map((f) => path.relative(process.cwd(), f)) 6 | .join(' --file ')}`; 7 | 8 | module.exports = { 9 | '*.{js,jsx,ts,tsx,mjs}': ['prettier --write', buildEslintCommand], 10 | '*.{json,css,md}': ['prettier --write'], 11 | }; 12 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /coverage 3 | /build 4 | /dist 5 | .next 6 | .DS_Store 7 | .env 8 | .idea 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | /.next 13 | /public 14 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "printWidth": 80, 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "trailingComma": "all", 7 | "overrides": [ 8 | { 9 | "files": "src/locales/**/*.js", 10 | "options": { 11 | "printWidth": 150 12 | } 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /ARCHITECTURE.md: -------------------------------------------------------------------------------- 1 | https://github.com/zbycz/osmapp/wiki/Architecture 2 | -------------------------------------------------------------------------------- /__mocks__/isomorphic-unfetch.js: -------------------------------------------------------------------------------- 1 | module.exports = () => { 2 | throw new Error(`Calling fetch in tests is not allowed. Use mocks instead. 3 | eg: jest.spyOn(fetchModule, 'fetchJson').mockResolvedValue(...); 4 | `); 5 | }; 6 | -------------------------------------------------------------------------------- /__mocks__/next-codegrid.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | resolveCountryCode: jest.fn().mockReturnValue(undefined), 3 | }; 4 | -------------------------------------------------------------------------------- /instrumentation.ts: -------------------------------------------------------------------------------- 1 | export async function register() { 2 | if (process.env.NEXT_RUNTIME === 'nodejs') { 3 | await import('./sentry.server.config'); 4 | } 5 | 6 | if (process.env.NEXT_RUNTIME === 'edge') { 7 | await import('./sentry.edge.config'); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /jest.globalSetup.js: -------------------------------------------------------------------------------- 1 | module.exports = async () => { 2 | process.env.TZ = 'UTC'; 3 | }; 4 | -------------------------------------------------------------------------------- /pages/api/sentry-example-api.js: -------------------------------------------------------------------------------- 1 | // A faulty API route to test Sentry's error monitoring 2 | export default function handler(_req, res) { 3 | throw new Error('Sentry Example API Route Error'); 4 | res.status(200).json({ name: 'John Doe' }); 5 | } 6 | -------------------------------------------------------------------------------- /pages/api/user.ts: -------------------------------------------------------------------------------- 1 | import type { NextApiRequest, NextApiResponse } from 'next'; 2 | import { serverFetchOsmUser } from '../../src/server/osmApiAuthServer'; 3 | import { OSM_TOKEN_COOKIE } from '../../src/services/osm/consts'; 4 | 5 | export default async (req: NextApiRequest, res: NextApiResponse) => { 6 | try { 7 | const user = await serverFetchOsmUser(req.cookies[OSM_TOKEN_COOKIE]); 8 | 9 | res.status(200).json({ user }); 10 | } catch (err) { 11 | console.error(err); // eslint-disable-line no-console 12 | res.status(500).send(String(err)); 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /pages/climbing-grades.ts: -------------------------------------------------------------------------------- 1 | export { ClimbingGradesTable as default } from '../src/components/FeaturePanel/Climbing/ClimbingGradesTable/ClimbingGradesTable'; 2 | -------------------------------------------------------------------------------- /pages/directions/[[...all]].ts: -------------------------------------------------------------------------------- 1 | export { Directions as default } from '../../src/components/Directions/Directions'; 2 | -------------------------------------------------------------------------------- /pages/feature/[...all].ts: -------------------------------------------------------------------------------- 1 | // The FeaturePanel is rendered in _app (skeleton shows it before URL change, see ARCHITECTURE.md for more info) 2 | export default () => null; 3 | -------------------------------------------------------------------------------- /pages/index.ts: -------------------------------------------------------------------------------- 1 | // HomepagePanel is rendered conditionally, see useFeatureContext() and HomepagePanel 2 | export default () => null; 3 | -------------------------------------------------------------------------------- /pages/install.ts: -------------------------------------------------------------------------------- 1 | export { InstallDialog as default } from '../src/components/HomepagePanel/InstallDialog'; 2 | -------------------------------------------------------------------------------- /pages/last-url.ts: -------------------------------------------------------------------------------- 1 | // Remove this file after 9/2024 2 | // superseded by pages/start.ts 3 | 4 | export { getServerSideProps } from './start'; 5 | 6 | export default () => null; 7 | -------------------------------------------------------------------------------- /pages/my-ticks.ts: -------------------------------------------------------------------------------- 1 | export { MyTicksPanel as default } from '../src/components/MyTicksPanel/MyTicksPanel'; 2 | -------------------------------------------------------------------------------- /pages/sitemap.txt.tsx: -------------------------------------------------------------------------------- 1 | import { fetchText } from '../src/services/fetch'; 2 | 3 | const Sitemap = () => null; 4 | 5 | export const getServerSideProps = async ({ res }) => { 6 | const content = await fetchText( 7 | 'https://zbycz.github.io/osm-static/sitemap.txt', 8 | ); 9 | 10 | res.setHeader('Content-Type', 'text/plain'); 11 | res.write(content); 12 | res.end(); 13 | 14 | return { 15 | props: {}, 16 | }; 17 | }; 18 | 19 | export default Sitemap; 20 | -------------------------------------------------------------------------------- /pages/start.ts: -------------------------------------------------------------------------------- 1 | // This route handles the PWA start page, 2 | // which is a redirect to the last visited page. 3 | // see manifest-*.json 4 | 5 | export const getServerSideProps = async ({ req, res }) => { 6 | res.setHeader('Location', req.cookies['last-url'] ?? '/'); 7 | res.statusCode = 302; 8 | res.end(); 9 | 10 | return { 11 | props: {}, 12 | }; 13 | }; 14 | 15 | export default () => null; 16 | -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Page Not Found 7 | 8 | 9 |

Page Not Found

10 |

The page you are looking for does not exist.

11 |

Go back to the home page.

12 | 13 | 14 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/favicon.ico -------------------------------------------------------------------------------- /public/icons-climbing/readme.md: -------------------------------------------------------------------------------- 1 | 2 | Run docker.app first. 3 | 4 | Then run this in `icons-climbing` folder. 5 | 6 | ```bash 7 | 8 | rm -r sprites 9 | mkdir sprites 10 | mv icons sprites/ 11 | docker run --platform linux/amd64 -it -e FOLDER=icons -e THEME=climbing -v ${PWD}:/data dolomate/spritezero 12 | mv sprites/icons ./ 13 | 14 | ``` 15 | 16 | All in one command: 17 | 18 | ```bash 19 | rm -r sprites && mkdir sprites && mv icons sprites/ && docker run --platform linux/amd64 -it -e FOLDER=icons -e THEME=climbing -v ${PWD}:/data dolomate/spritezero && mv sprites/icons ./ 20 | ``` 21 | -------------------------------------------------------------------------------- /public/icons-climbing/sprites/climbing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/icons-climbing/sprites/climbing.png -------------------------------------------------------------------------------- /public/icons-climbing/sprites/climbing@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/icons-climbing/sprites/climbing@2x.png -------------------------------------------------------------------------------- /public/icons-climbing/sprites/climbing@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/icons-climbing/sprites/climbing@3x.png -------------------------------------------------------------------------------- /public/icons/airfield_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/airport_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/anvil_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/army_tent_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/arrow_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/art_gallery_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/asterisk_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bakery_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/balloon_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bank_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/bar_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/barn_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bench_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/blood_bank_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/boat_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/boat_dry_dock_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/boat_rental_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/boat_repair_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bollard_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bollard_row_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/book_store_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/boulder1_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/boulder2_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/boulder3_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bread_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/brick_trowel_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/briefcase_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/briefcase_asterisk_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/briefcase_bolt_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/briefcase_info_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/buffer_stop_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/building_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/building_alt1_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/bulletin_board_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bunk_beds_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bunker_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/bunker_silo_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/cabin_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/cafe_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/campfire_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/campsite_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/can_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/capitol_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/car_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/carport_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/castle_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/cemetery_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/cemetery_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/checkpoint_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/chefs_knife_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/chicane_arrow_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/chimney_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/chocolate_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/circle2_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/circle_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/circle_stroked_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/clothes_hanger_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/clothing_store_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/coffee_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/college_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/commercial_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/construction_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/cooling_tower_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crane_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-dashes_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-ladder_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-ladder_paired_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-ladder_skewed_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-lines_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-lines_paired_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-zebra_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-zebra_double_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_markings-zebra_paired_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_tram_road_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_tram_solid_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/crossing_tram_striped_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/cycle_barrier_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/dagger_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/dentist_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/desk_lamp_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/detergent_bottle_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/domed_tower_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/drag_lift_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/drink_cup_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/drinking_water_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/egg_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/electronic_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/elevator_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/entrance_alt1_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/farm_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/ferry_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/field_hockey_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/fire_station_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/fire_station_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/fireplace_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/fitness_centre_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/food_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/gas_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/globe_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/gown_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/hand_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/handbag_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/heart_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/hedge_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/height_restrictor_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/highway_rest_area_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/historic_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/horse_shelter_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/horseshoe_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/hospital_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/hot_drink_cup_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/hunting_blind_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/hut_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/ice_cream_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/industry_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/information_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/j_bar_lift_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/jewelry_store_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/junction_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/karaoke_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/kerb-flush_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/kerb-lowered_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/kerb-raised_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/kerb-rolled_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/landmark_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/latrine_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/laundry_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/lawn_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/letter_box_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/lift_gate_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/lighthouse_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/lounger_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/marker_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/mast_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/maze_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/milestone_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/military_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/military_checkpoint_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/milk_jug_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/mineshaft_cage_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/mineshaft_profile_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/mobile_phone_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/monument_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/monument_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/mountain_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/mountain_asterisk_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/mountain_cross_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/mountain_range_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/movie_rental_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/museum_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/music_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/obelisk_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/oneway.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/os_benchmark_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/parking_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/parking_paid_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/parking_space_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/pedestrian_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/pedestrian_crosswalk_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/pharmacy_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/pick_hammer_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/picnic_shelter_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/pin_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/pipe_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/pitch_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/place_of_worship_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/planes_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/platter_lift_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/play_structure_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/police_JP_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/polished_nail_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/post_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/post_box_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/power_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/power_pole_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/power_tower_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/prison_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/propane_tank_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/quakerism_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/radiation_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/rail_profile_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/railing_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/railway_signals_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/ranger_station_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/real_estate_agency_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/religious_christian_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/religious_jewish_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/religious_shinto_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/residential_community_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/restaurant_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/restaurant_noodle_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/restaurant_pizza_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/roadblock_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/rocket_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/rocket_firework_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/room_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/row_houses_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/ruins_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/rumble_strip_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/sailboat_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/scaffold_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/sculpture_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/security_camera_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/shelter_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/shield_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/shoe_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/shrub_low_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/shuffleboard_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/sign_and_bench_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/silo_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/skateboard_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/ski_jumping_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/sleep_shelter_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/slide_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/slipway_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/snowmobile_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/speed_bump_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/speed_dip_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/speed_dip_double_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/speed_hump_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/speed_table_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/spike_strip_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/spotting_scope_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/square_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/square_stroked_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/star_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/star_stroked_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/statue_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/stile_squeezer_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/stop_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/storage_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/storage_drum_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/storage_fermenter_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/storage_tank_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/street_lamp_arm_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/striped_way_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/striped_zone_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/suitcase_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/t_bar_lift_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/taoism_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/telescope_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/temaki_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/ticket_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tiling_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tower_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tower_communication_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/town_hall_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/traffic_signals_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/transit_shelter_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tree_and_bench_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tree_cactus_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tree_leafless_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tree_needleleaved_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/tree_row_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/trench_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/triangle_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/triangle_stroked_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/tunnel_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/us-highway_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/us-highway_2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/us-highway_3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/us-interstate_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/us-interstate_2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/us-interstate_3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/utility_pole_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/valley_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/vending_lockers_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/vertex_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/vertical_rotisserie_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/warehouse_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/watch_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/water_11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/water_tap_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/water_tower_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/wave.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/well_pump_manual_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/wheel_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/wind_turbine_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/window_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/windsock_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/x_oblique_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/yield_11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/images/Lomy_nad_Velkou_-_Borová_věž.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/Lomy_nad_Velkou_-_Borová_věž.jpg -------------------------------------------------------------------------------- /public/images/Lomy_nad_Velkou_-_Borová_věž3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/Lomy_nad_Velkou_-_Borová_věž3.jpg -------------------------------------------------------------------------------- /public/images/Lomy_nad_Velkou_-_Borová_věž4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/Lomy_nad_Velkou_-_Borová_věž4.jpg -------------------------------------------------------------------------------- /public/images/homepage/frankenjura-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/frankenjura-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/frankenjura.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/frankenjura.jpg -------------------------------------------------------------------------------- /public/images/homepage/hlubocepske-plotny-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/hlubocepske-plotny-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/hlubocepske-plotny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/hlubocepske-plotny.jpg -------------------------------------------------------------------------------- /public/images/homepage/kobyla-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/kobyla-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/kobyla.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/kobyla.jpg -------------------------------------------------------------------------------- /public/images/homepage/lomy-nad-velkou-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/lomy-nad-velkou-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/lomy-nad-velkou.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/lomy-nad-velkou.jpg -------------------------------------------------------------------------------- /public/images/homepage/roviste-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/roviste-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/roviste.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/roviste.jpg -------------------------------------------------------------------------------- /public/images/homepage/solvayovy-lomy-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/solvayovy-lomy-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/solvayovy-lomy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/solvayovy-lomy.jpg -------------------------------------------------------------------------------- /public/images/homepage/tetinske-skaly-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/tetinske-skaly-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/tetinske-skaly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/tetinske-skaly.jpg -------------------------------------------------------------------------------- /public/images/homepage/u-zidovy-strouhy-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/u-zidovy-strouhy-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/u-zidovy-strouhy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/u-zidovy-strouhy.jpg -------------------------------------------------------------------------------- /public/images/homepage/udoli-kacaku-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/udoli-kacaku-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/udoli-kacaku.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/udoli-kacaku.jpg -------------------------------------------------------------------------------- /public/images/homepage/velka-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/velka-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/velka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/velka.jpg -------------------------------------------------------------------------------- /public/images/homepage/zupanovice-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/zupanovice-2.jpg -------------------------------------------------------------------------------- /public/images/homepage/zupanovice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/images/homepage/zupanovice.jpg -------------------------------------------------------------------------------- /public/install/android_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/android_add.png -------------------------------------------------------------------------------- /public/install/android_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/android_menu.png -------------------------------------------------------------------------------- /public/install/desktop_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/desktop_add.png -------------------------------------------------------------------------------- /public/install/desktop_add_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/desktop_add_screen.png -------------------------------------------------------------------------------- /public/install/ios_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/ios_add.png -------------------------------------------------------------------------------- /public/install/ios_addicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/ios_addicon.png -------------------------------------------------------------------------------- /public/install/ios_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/ios_share.png -------------------------------------------------------------------------------- /public/install/ios_shareicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/ios_shareicon.png -------------------------------------------------------------------------------- /public/install/ios_shareicon@2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/install/ios_shareicon@2.png -------------------------------------------------------------------------------- /public/openclimbing/btcln.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/btcln.png -------------------------------------------------------------------------------- /public/openclimbing/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/favicon.ico -------------------------------------------------------------------------------- /public/openclimbing/homepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/homepage.png -------------------------------------------------------------------------------- /public/openclimbing/logo/fav/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/fav/apple-touch-icon.png -------------------------------------------------------------------------------- /public/openclimbing/logo/fav/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #9f00a7 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/openclimbing/logo/fav/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/fav/favicon-16x16.png -------------------------------------------------------------------------------- /public/openclimbing/logo/fav/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/fav/favicon-32x32.png -------------------------------------------------------------------------------- /public/openclimbing/logo/fav/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/fav/favicon.ico -------------------------------------------------------------------------------- /public/openclimbing/logo/fav/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/fav/mstile-150x150.png -------------------------------------------------------------------------------- /public/openclimbing/logo/openclimbing_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/openclimbing_1024.png -------------------------------------------------------------------------------- /public/openclimbing/logo/openclimbing_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/openclimbing_16.png -------------------------------------------------------------------------------- /public/openclimbing/logo/openclimbing_192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/openclimbing_192.png -------------------------------------------------------------------------------- /public/openclimbing/logo/openclimbing_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/openclimbing_256.png -------------------------------------------------------------------------------- /public/openclimbing/logo/openclimbing_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/openclimbing_64.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x128.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x192.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x384.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x48.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x512.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x72.png -------------------------------------------------------------------------------- /public/openclimbing/logo/pwa/maskable_x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/pwa/maskable_x96.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/ipad_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/ipad_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/ipadpro1_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/ipadpro1_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/ipadpro2_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/ipadpro2_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/ipadpro3_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/ipadpro3_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/iphone5_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/iphone5_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/iphone6_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/iphone6_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/iphoneplus_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/iphoneplus_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/iphonex_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/iphonex_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/iphonexr_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/iphonexr_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/dark/iphonexsmax_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/dark/iphonexsmax_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/ipad_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/ipad_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/ipadpro1_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/ipadpro1_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/ipadpro2_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/ipadpro2_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/ipadpro3_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/ipadpro3_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/iphone5_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/iphone5_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/iphone6_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/iphone6_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/iphoneplus_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/iphoneplus_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/iphonex_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/iphonex_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/iphonexr_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/iphonexr_splash.png -------------------------------------------------------------------------------- /public/openclimbing/logo/splash/light/iphonexsmax_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/logo/splash/light/iphonexsmax_splash.png -------------------------------------------------------------------------------- /public/openclimbing/openclimbing-screenshot-300px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/openclimbing-screenshot-300px.png -------------------------------------------------------------------------------- /public/openclimbing/openclimbing-screenshot-300px@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/openclimbing-screenshot-300px@2x.png -------------------------------------------------------------------------------- /public/openclimbing/openclimbing-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/openclimbing/openclimbing-screenshot.png -------------------------------------------------------------------------------- /public/osmapp/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/favicon.ico -------------------------------------------------------------------------------- /public/osmapp/logo/fav/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/fav/apple-touch-icon.png -------------------------------------------------------------------------------- /public/osmapp/logo/fav/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #9f00a7 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/osmapp/logo/fav/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/fav/favicon-16x16.png -------------------------------------------------------------------------------- /public/osmapp/logo/fav/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/fav/favicon-32x32.png -------------------------------------------------------------------------------- /public/osmapp/logo/fav/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/fav/favicon.ico -------------------------------------------------------------------------------- /public/osmapp/logo/fav/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/fav/mstile-150x150.png -------------------------------------------------------------------------------- /public/osmapp/logo/osmapp_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/osmapp_1024.png -------------------------------------------------------------------------------- /public/osmapp/logo/osmapp_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/osmapp_16.png -------------------------------------------------------------------------------- /public/osmapp/logo/osmapp_192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/osmapp_192.png -------------------------------------------------------------------------------- /public/osmapp/logo/osmapp_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/osmapp_256.png -------------------------------------------------------------------------------- /public/osmapp/logo/osmapp_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/osmapp_64.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x128.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x192.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x384.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x48.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x512.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x72.png -------------------------------------------------------------------------------- /public/osmapp/logo/pwa/maskable_x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/pwa/maskable_x96.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/ipad_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/ipad_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/ipadpro1_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/ipadpro1_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/ipadpro2_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/ipadpro2_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/ipadpro3_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/ipadpro3_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/iphone5_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/iphone5_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/iphone6_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/iphone6_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/iphoneplus_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/iphoneplus_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/iphonex_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/iphonex_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/iphonexr_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/iphonexr_splash.png -------------------------------------------------------------------------------- /public/osmapp/logo/splash/iphonexsmax_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/logo/splash/iphonexsmax_splash.png -------------------------------------------------------------------------------- /public/osmapp/osmapp-screenshot-300px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/osmapp-screenshot-300px.png -------------------------------------------------------------------------------- /public/osmapp/osmapp-screenshot-300px@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/osmapp-screenshot-300px@2x.png -------------------------------------------------------------------------------- /public/osmapp/osmapp-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/osmapp/osmapp-screenshot.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # empty file, only to route requests to a static file 2 | # otherwise our execution time on vercel become too high 3 | -------------------------------------------------------------------------------- /public/screens/karlstejn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/screens/karlstejn2.png -------------------------------------------------------------------------------- /public/sprites/osmapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/sprites/osmapp.png -------------------------------------------------------------------------------- /public/sprites/osmapp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/sprites/osmapp@2x.png -------------------------------------------------------------------------------- /public/sprites/osmapp@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/public/sprites/osmapp@3x.png -------------------------------------------------------------------------------- /public/sw.js: -------------------------------------------------------------------------------- 1 | // empty file, only to route requests from old installed PWAs to a static file 2 | // otherwise our execution time on vercel become too high 3 | -------------------------------------------------------------------------------- /public/workbox-588899ac.js: -------------------------------------------------------------------------------- 1 | // empty file, only to route requests from old installed PWAs to a static file 2 | // otherwise our execution time on vercel become too high 3 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/ContentContainer.tsx: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | 3 | export const ContentContainer = styled.div` 4 | width: 100%; 5 | max-width: 800px; 6 | margin: 0 auto; 7 | `; 8 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/Editor/Points/pointTypes.ts: -------------------------------------------------------------------------------- 1 | export type PointProps = { 2 | x: number; 3 | y: number; 4 | isPointSelected: boolean; 5 | onClick?: (e: any) => void; 6 | pointerEvents?: string; 7 | }; 8 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/FeaturePanelClimbingGuideInfo.tsx: -------------------------------------------------------------------------------- 1 | import { ClimbingGuideInfo } from './ClimbingGuideInfo'; 2 | import { PROJECT_ID } from '../../../services/project'; 3 | 4 | export const FeaturePanelClimbingGuideInfo = () => { 5 | const isOpenClimbing = PROJECT_ID === 'openclimbing'; 6 | 7 | if (!isOpenClimbing) { 8 | return null; 9 | } 10 | 11 | return ; 12 | }; 13 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/RouteList/EmptyValue.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styled from '@emotion/styled'; 3 | 4 | const EmptyValueWrapper = styled.div` 5 | color: #666; 6 | `; 7 | export const EmptyValue = () => ?; 8 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/RouteList/Label.tsx: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | 3 | export const Label = styled.div` 4 | font-size: 10px; 5 | color: ${({ theme }) => theme.palette.text.secondary}; 6 | display: block; 7 | `; 8 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/utils/boltCodes.ts: -------------------------------------------------------------------------------- 1 | import { invert } from 'lodash'; 2 | import { PointType } from '../types'; 3 | 4 | export const boltCodeMap: Record = { 5 | B: 'bolt', 6 | A: 'anchor', 7 | P: 'piton', 8 | S: 'sling', 9 | U: 'unfinished', 10 | }; 11 | 12 | export const invertedBoltCodeMap = invert(boltCodeMap); 13 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/utils/climbingTagValues.ts: -------------------------------------------------------------------------------- 1 | export const climbingTagValues = [ 2 | 'crag', 3 | 'area', 4 | 'route', 5 | 'route_bottom', 6 | 'route_top', 7 | ]; 8 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/utils/image.ts: -------------------------------------------------------------------------------- 1 | export const getContainedSizeImage = (image) => { 2 | const ratio = 3 | image.naturalHeight === 0 ? 0 : image.naturalWidth / image.naturalHeight; 4 | let width = image.height * ratio; 5 | let { height } = image; 6 | 7 | if (width > image.width) { 8 | width = image.width; 9 | height = image.width / ratio; 10 | } 11 | 12 | return [width, height]; 13 | }; 14 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Climbing/utils/number.ts: -------------------------------------------------------------------------------- 1 | export const roundNumber = (number: number, digits: number = 3) => { 2 | const squaredDigits = 10 ** digits; 3 | return Math.round((number + Number.EPSILON) * squaredDigits) / squaredDigits; 4 | }; 5 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/EditContent/ChangeDialogEditor.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zbycz/osmapp/00fbc248fb6f6e49290a67c609f8847ef87d5b8e/src/components/FeaturePanel/EditDialog/EditContent/ChangeDialogEditor.tsx -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/EditContent/FeatureEditSection/LocationEditor/getMapStyle.tsx: -------------------------------------------------------------------------------- 1 | import { outdoorStyle } from '../../../../../Map/styles/outdoorStyle'; 2 | 3 | const apiKey = process.env.NEXT_PUBLIC_API_KEY_MAPTILER; 4 | 5 | export const getMapStyle = (mapStyle) => { 6 | if (mapStyle === 'satellite') { 7 | return `https://api.maptiler.com/maps/hybrid/style.json?key=${apiKey}`; 8 | } 9 | return outdoorStyle; 10 | }; 11 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/EditContent/FeatureEditSection/LocationEditor/isGpsValid.tsx: -------------------------------------------------------------------------------- 1 | import { LonLat } from '../../../../../../services/types'; 2 | 3 | export const isGpsValid = (nodeLonLat: LonLat) => { 4 | if (!nodeLonLat) return false; 5 | 6 | const [lng, lat] = nodeLonLat; 7 | return lng >= -90 && lng <= 90 && lat >= -180 && lat <= 180; 8 | }; 9 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/EditContent/FeatureEditSection/OpeningHoursEditor/parser/types.ts: -------------------------------------------------------------------------------- 1 | export type Slot = { 2 | slotIdx: number; 3 | from: string; 4 | to: string; 5 | error?: boolean; 6 | }; 7 | export type Day = { 8 | day: string; 9 | dayLabel: string; 10 | timeSlots: Slot[]; 11 | }; 12 | export type DaysTable = Day[]; 13 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/EditContent/FeatureEditSection/OpeningHoursEditor/types.ts: -------------------------------------------------------------------------------- 1 | import { Day } from './parser/types'; 2 | 3 | export type SetDaysFn = (value: ((prevState: Day[]) => Day[]) | Day[]) => void; 4 | export type SetDaysAndTagFn = (value: (prev: Day[]) => Day[]) => void; 5 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/components.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { Typography } from '@mui/material'; 4 | 5 | export const DialogHeading = ({ children }) => ( 6 | 7 | {children} 8 | 9 | ); 10 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/EditDialog/utils.ts: -------------------------------------------------------------------------------- 1 | import { useFeatureContext } from '../../utils/FeatureContext'; 2 | import { useBoolState } from '../../helpers'; 3 | import React, { useCallback, useEffect } from 'react'; 4 | 5 | export const useEditDialogFeature = () => { 6 | const { feature } = useFeatureContext(); 7 | return { 8 | feature, 9 | isAddPlace: feature.point, 10 | isUndelete: feature.deleted, 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/FeatureImages/types.ts: -------------------------------------------------------------------------------- 1 | export type Size = { 2 | width: number; 3 | height: number; 4 | }; 5 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Properties/Wrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | 3 | export const Wrapper = styled.div` 4 | position: relative; 5 | margin-bottom: 2em; 6 | `; 7 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/QuickActions/ShareDialog/helpers.tsx: -------------------------------------------------------------------------------- 1 | import IosShare from '@mui/icons-material/IosShare'; 2 | import Share from '@mui/icons-material/Share'; 3 | import { isIOS } from '../../../../helpers/platforms'; 4 | import type { SvgIconProps } from '@mui/material/SvgIcon'; 5 | 6 | export const ShareIcon = (props: SvgIconProps) => 7 | isIOS() ? : ; 8 | 9 | export const supportsSharing = () => 10 | typeof navigator !== 'undefined' && !!navigator.share; 11 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Sockets/Sockets.tsx: -------------------------------------------------------------------------------- 1 | import { Stack } from '@mui/material'; 2 | import { useSocketTags } from './useSocketTags'; 3 | import { Socket } from './Socket'; 4 | 5 | export const Sockets = () => { 6 | const socketTags = useSocketTags(); 7 | 8 | return ( 9 | 10 | {Object.entries(socketTags).map(([type, details]) => ( 11 | 12 | ))} 13 | 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/Sockets/img.ts: -------------------------------------------------------------------------------- 1 | import * as Sentry from '@sentry/nextjs'; 2 | 3 | const typeToFilename = { 4 | type1: 'type1', 5 | type1_cable: 'type1', 6 | type2: 'type2', 7 | type2_cable: 'type2', 8 | schuko: 'schuko', 9 | }; 10 | 11 | export const getImageSrc = (type: string) => { 12 | if (typeToFilename[type]) { 13 | return `/sockets/${typeToFilename[type]}.svg`; 14 | } 15 | Sentry.captureMessage('Missing Icon for EV Socket', { 16 | level: 'info', 17 | tags: { socketType: type }, 18 | }); 19 | return '/sockets/unknown.svg'; 20 | }; 21 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/helpers/Subheading.tsx: -------------------------------------------------------------------------------- 1 | import { Typography } from '@mui/material'; 2 | import React from 'react'; 3 | 4 | export const Subheading = ({ children }) => ( 5 | 6 | {children} 7 | 8 | ); 9 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/renderers/WebsiteRenderer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Language from '@mui/icons-material/Language'; 3 | 4 | const protocol = /^\w+:\/\//; 5 | const fixHttp = (url: string) => (url.match(protocol) ? url : `http://${url}`); 6 | const displayForm = (url: string) => 7 | decodeURI(url.replace(protocol, '').replace(/([^/]+)\/$/, '$1')); 8 | 9 | export const WebsiteRenderer = ({ v }) => ( 10 | <> 11 | 12 | 13 | {displayForm(v)} 14 | 15 | 16 | ); 17 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/renderers/WikidataRenderer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { renderTag } from '../Properties/renderTag'; 3 | import { WikipediaIcon } from '../../../assets/WikipediaIcon'; 4 | 5 | export const WikidataRenderer = ({ k, v }) => ( 6 | <> 7 | 8 | {renderTag(k, v, true)} 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/renderers/WikipediaRenderer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { WikipediaIcon } from '../../../assets/WikipediaIcon'; 3 | import { renderTag } from '../Properties/renderTag'; 4 | 5 | export const WikipediaRenderer = ({ k, v }) => ( 6 | <> 7 | 8 | {renderTag(k, v)} 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/renderers/openingHours/index.ts: -------------------------------------------------------------------------------- 1 | import { LonLat } from '../../../../services/types'; 2 | import { parseComplexOpeningHours } from './complex'; 3 | import { Address } from './types'; 4 | 5 | export const parseOpeningHours = ( 6 | value: string, 7 | coords: LonLat, 8 | address: Address, 9 | ): ReturnType | null => { 10 | try { 11 | return parseComplexOpeningHours(value, coords, address); 12 | } catch { 13 | return null; 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /src/components/FeaturePanel/renderers/openingHours/types.ts: -------------------------------------------------------------------------------- 1 | export interface SimpleOpeningHoursTable { 2 | su: string[]; 3 | mo: string[]; 4 | tu: string[]; 5 | we: string[]; 6 | th: string[]; 7 | fr: string[]; 8 | sa: string[]; 9 | ph: string[]; 10 | } 11 | 12 | export type Address = { 13 | country_code: string; 14 | state: string; 15 | }; 16 | -------------------------------------------------------------------------------- /src/components/Map/climbingTiles/climbingLayers/climbingLayers.ts: -------------------------------------------------------------------------------- 1 | import { LayerSpecification } from '@maplibre/maplibre-gl-style-spec'; 2 | import { routesLines } from './routesLines'; 3 | import { ferrataLayer, groupsLayer, gymsLayer } from './groupsLayer'; 4 | import { routesPoints } from './routesPoints'; 5 | 6 | export const climbingLayers: LayerSpecification[] = [ 7 | ...routesLines, 8 | ...routesPoints, 9 | gymsLayer, 10 | ferrataLayer, 11 | groupsLayer, 12 | ]; 13 | -------------------------------------------------------------------------------- /src/components/Map/styles/makinaAfricaStyle.ts: -------------------------------------------------------------------------------- 1 | import { OSMAPP_SOURCES } from '../consts'; 2 | import { basicStyle } from './basicStyle'; 3 | 4 | const sources = JSON.parse(JSON.stringify(OSMAPP_SOURCES)); 5 | 6 | sources.maptiler_planet.url = 7 | 'https://africa.tiles.openplaceguide.org/data/v3.json'; 8 | 9 | export const makinaAfricaStyle = { ...basicStyle, sources }; 10 | -------------------------------------------------------------------------------- /src/components/SearchBox/consts.ts: -------------------------------------------------------------------------------- 1 | export const SEARCH_BOX_HEIGHT = 68; 2 | export const SEARCH_THRESHOLD: number = 0.7; 3 | -------------------------------------------------------------------------------- /src/components/SearchBox/getOptionToLonLat.tsx: -------------------------------------------------------------------------------- 1 | import { Option } from './types'; 2 | 3 | export const getOptionToLonLat = (option: Option) => { 4 | if (option.type === 'coords') { 5 | return option.coords.center; 6 | } 7 | 8 | if (option.type === 'star') { 9 | return option.star.center; 10 | } 11 | 12 | if (option.type === 'geocoder') { 13 | return option.geocoder.geometry.coordinates; 14 | } 15 | 16 | throw new Error(`Unsupported option type: ${option.type}`); 17 | }; 18 | -------------------------------------------------------------------------------- /src/components/utils/colorUtils.tsx: -------------------------------------------------------------------------------- 1 | export const convertHexToRgba = (hexCode: string, opacity = 1) => { 2 | let hex = hexCode.replace('#', ''); 3 | 4 | if (hex.length === 3) { 5 | hex = `${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`; 6 | } 7 | 8 | const r = parseInt(hex.substring(0, 2), 16); 9 | const g = parseInt(hex.substring(2, 4), 16); 10 | const b = parseInt(hex.substring(4, 6), 16); 11 | 12 | return `rgba(${r},${g},${b},${opacity})`; 13 | }; 14 | -------------------------------------------------------------------------------- /src/components/utils/nl2br.tsx: -------------------------------------------------------------------------------- 1 | import React, { Fragment } from 'react'; 2 | 3 | export const nl2br = (text: string) => 4 | text.split('\n').map((line, idx) => ( 5 | // eslint-disable-next-line react/no-array-index-key 6 | 7 | {idx > 0 &&
} 8 | {line} 9 |
10 | )); 11 | -------------------------------------------------------------------------------- /src/config.mjs: -------------------------------------------------------------------------------- 1 | // This file is imported by next.config.mjs, keep clean 2 | 3 | export const SHOW_PROTOTYPE_UI = false; 4 | 5 | export const DEFAULT_MAP = 'basic'; 6 | 7 | export const DEBUG_ID_SCHEMA = false; 8 | 9 | export const DEFAULT_DATA_FORMAT = 'd.M.yyyy'; 10 | 11 | export const LANGUAGES = { 12 | de: 'Deutsch', 13 | cs: 'Česky', 14 | en: 'English', 15 | es: 'Español', 16 | fr: 'Français', 17 | it: 'Italiano', 18 | pl: 'Polski', 19 | am: 'አማርኛ', 20 | ja: '日本語', 21 | }; 22 | -------------------------------------------------------------------------------- /src/locales/README.md: -------------------------------------------------------------------------------- 1 | # Translations 2 | 3 | To add a new translation, copy `vocabulary.js` to a new file and change the texts. Some javascript knowledge is needed. 4 | 5 | Then add the language to the options menu: `/next.config.js`. Restart your dev server for the changes to take effect. Or wait for deployment on a pull request. 6 | 7 | Example: [PR #89](https://github.com/zbycz/osmapp/pull/77/files) 8 | -------------------------------------------------------------------------------- /src/services/lastFeatureStorage.ts: -------------------------------------------------------------------------------- 1 | import { Feature } from './types'; 2 | 3 | let lastFeature: Feature = null; 4 | 5 | export const getLastFeature = (): Feature => lastFeature; 6 | 7 | export const setLastFeature = (feature: Feature) => { 8 | lastFeature = feature; 9 | }; 10 | -------------------------------------------------------------------------------- /src/services/osm/auth/stringifyDomXml.ts: -------------------------------------------------------------------------------- 1 | import { isString } from '../../../components/helpers'; 2 | 3 | export const stringifyDomXml = (itemXml: Node) => { 4 | if (isString(itemXml)) { 5 | throw new Error('String given'); 6 | } 7 | return new XMLSerializer().serializeToString(itemXml); 8 | }; 9 | -------------------------------------------------------------------------------- /src/services/tagging/utils.ts: -------------------------------------------------------------------------------- 1 | export const deduplicate = (strings: string[]) => Array.from(new Set(strings)); 2 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export type Setter = React.Dispatch>; 2 | 3 | export type Tile = { z: number; x: number; y: number }; 4 | 5 | export type ClimbingStatsResponse = { 6 | lastRefresh: string; 7 | osmDataTimestamp: string; 8 | devStats: Record; 9 | groupsCount: number; 10 | groupsWithNameCount: number; 11 | routesCount: number; 12 | }; 13 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "pages/api/climbing-tiles/refresh.ts": { 4 | "memory": 3000, 5 | "maxDuration": 200 6 | }, 7 | "pages/api/climbing-tiles/tile.ts": { 8 | "maxDuration": 40 9 | } 10 | }, 11 | "crons": [ 12 | { 13 | "path": "/api/climbing-tiles/refresh", 14 | "schedule": "0 2 * * *" 15 | } 16 | ] 17 | } 18 | --------------------------------------------------------------------------------