npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

vue-simple-svg-map

v0.1.7

Published

Vue component to display an interactive SVG map. Zoom, drag, clicks, etc.

Readme

Vue component to display an interactive SVG map. Zoom, drag, clicks, etc.

Installation

npm

npm install vue-simple-svg-map --save

Demo

https://walkerz88.github.io/vue-simple-svg-map/

Usage

Custom map

First of all you should get SVG image of your map with regions. For example this map of Moscow Regions and transform it to an array (only required parameter is d - path of your svg region):

[
  {
    id: '1',
    title: 'Мытищи',
    fill: '#ffffe0',
    stroke: '#878787',
    strokeWidth: 30,
    strokeLinejoin: 'bevel',
    d: 'm 11774.8,8296 -95,-80.2 75,-35.09 20,-95.23 135.1,-90.23 10,-35.09 -120.1,10.03 -5,40.1 -50,-15.04 -5,-140.35 20,-115.28 120.1,-150.37 -75.1,-55.15 45,-160.39 -90,-120.3 60,-15.03 -35,-105.27 260.1,-95.24 230,30.08 290.1,250.63 180,-10.03 45,20.04 -5,95.25 -90,20.04 -65,310.77 115,65.16 -25,35.09 565.1,486.22 -50,35.07 v 5.02 l -35,20.05 10,20.05 10,5.01 -10,10.03 -25,15.03 5,5.02 25,35.08 h 10 l -40,75.19 -50,-10.03 -15,15.05 50,75.18 -50,-5.01 -30,85.22 45,85.2 65,30.07 120.1,150.38 v 15.04 l -60.1,55.13 -65,180.45 15,95.24 230.1,-45.12 105,70.19 -105,160.39 -180.1,15.03 5,45.12 -135,10.03 v 135.33 l -370.1,-330.83 -75,-10.01 -50,-5.02 h -135 l -335.1,-130.32 -120,10.02 -15,5.01 30,-40.1 -5,-165.41 25,-15.04 15,-5 10,-45.12 -30,-20.05 v -65.16 l 65,5.01 -5,-50.13 -30,-25.06 -155,40.11 20,85.21 h -35 l -25,-100.26 -35.1,-5 65.1,-85.22 -55.1,-75.18 20.1,-75.19 -150.1,-130.32 -165,105.26 -15,-65.16 -100,30.07 5,-85.2 305,-55.15 20,-50.13 z',
  },
  {
    id: '2',
    title: 'Видное',
    name: '#_Vidnoe',
    fill: '#ffffe0',
    stroke: '#878787',
    strokeWidth: 30,
    strokeLinejoin: 'bevel',
    d: 'm 12264.9,12897.4 -25,-105.2 -60,-70.2 -30,-15 20,-135.4 30,-200.5 80,-35.1 -45,-115.3 345.1,40.1 120,-40.1 360.1,-260.6 160,-160.4 20,20 5,80.3 85.1,15 50,-60.2 125,-5 90,100.3 -80,40.1 80,35.1 v 80.2 l 115,155.3 75,20.1 45.1,65.2 105,60.1 -65,160.4 30,205.5 45,-50.1 100,175.4 -85,75.2 -70,-110.3 -90.1,85.3 -50,-60.2 v -80.2 l -105,-55.1 -30,-95.3 -130,195.5 -110,-125.3 25,255.6 -320.1,-85.2 -40,100.3 -210,-100.3 -70.1,-205.5 -215,135.4 -230.1,-45.2 -30,195.5 -110,-30 z',
  },
  ...
]

Ready maps

You can use geometry from one of this ready maps

Usage in single file component

<template>
  <SvgMap
    :map="map"
    view-box="0 0 25220 23850"
    :thin-border-on-zoom="true"
  />
</template>

<script>
import SvgMap from 'vue-simple-svg-map'
import map from './assets/map'

export default {
  name: 'App',
  components: {
    SvgMap
  },
  data () {
    return {
      map
    }
  }
}
</script>

Props

Prop | Type | Default | Description --- | ---- | ------- | ----------- map | Array| [] | Array of regions <path>, made from SVG image view-box | String | null | viewBox parameter of original svg image data-path | String | d | Your regions <path> geometry variable name in map array wrapper-styles | Object | {position: 'relative', width: '100%', height: '600px'} | Map wrapper css parameters map-styles | Object | {shapeRendering: 'geometricPrecision', textRendering: 'geometricPrecision' imageRendering: 'optimizeQuality', fillRule: 'evenodd', clipRule: 'evenodd'} | Styles of default svg image region-additional-styles | Object | {} | Additional styles for every regions <path> mobilePreventScroll | Boolean, Object | false | Prevent page from scroll on map drag on mobile devices. You could pass object with options {breakpoint: 1024, selector: 'body'} breakpoint - media breakpoint where scroll prevents, default: 1024. selector - selector of element to prevent scroll, default: 'body'. If you just pass TRUE - default values would be used. drag-cursor | String | grabbing | CSS cursor name when drag is active hover-cursor | String | pointer | CSS cursor name on region hover zoom-factor | Number | 0.8 | Zoom speed min-size | Number | 50 | Minimum size of your map image max-size | Number | 1500 | Maximum size of your map image size | Number | 600 | Init size of your map image enable-zoom | Boolean | true | Enable zoom on scroll enable-drag | Boolean | true | Enable drag by mouse mouse-change-diff | Number | 2 | How many pixels mouse should move, to change cursor and prevent mouse events center-map-on-init | Boolean | true | Center map in wrapper on mount thin-border-on-zoom | Boolean | false | Automaticly thin borders of region on zoom in max-thin-border | Number | 30 | Max border width on zoom out min-thin-border | Number | 1 | Min border width on zoom in

Events

Event | Description --- | --- mouseover | Hover mouse on region (You will receive full data from region object) mouseleave | Leave mouse from region (You will receive full data from region object) click | Click on region (You will receive full data from region object) dragstart | Drag started (Even if drag is disabled) drag | Drag in progress (Even if drag is disabled) dragend | Drag ended (Even if drag is disabled) zoom | Scroll event (Event if zoom is disabled) center-map | Fires if map was centered

Feature

I just started to create this component, so it will be improved in feature.