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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ijusplab/svg-mapa

v2.0.1

Published

Componente Vue para renderização de mapa interativo da Seção Judiciária e de suas Subseções

Downloads

6

Readme

Componente criado em Vue para a renderização de mapa interativo em svg da Seção Judiciária.

O mapa é descrito inteiramente em um objeto Javascript, com ou sem metadados de agrupamento das unidades territoriais (definidos em outro objeto Javascript), permitindo customização de tamanho, cores e isolamento de partes do mapa para visualização destacada.

O componente permite também captar eventos de clique em cada uma das unidades territoriais, retornando o código da unidade e, se houver, do grupo ao qual ela pertence.

O screenshot abaixo ilustra o mapa da Seção Judiciária de São Paulo, com suas Subseções, renderizado pelo componente:

1. Incluindo o componente em seu projeto

Para incorporar o componente ao seu projeto, digite:

yarn add @ijusplab/svg-mapa

// ou

npm install @ijusplab/svg-mapa --save

Alternativamente, no Laravel, você pode instalar o componente como dependência de desenvolvimento:

yarn add -D @ijusplab/svg-mapa

// ou

npm install @ijusplab/svg-mapa --save-dev

Em seguida, você porde importar o componente para uso em seu projeto do seguinte modo:

import SvgMapa from '@ijusplab/svg-mapa';
import '@ijusplab/svg-mapa/dist/svg-mapa.css';

...

export default {
  name: 'app',
  components: {
    SvgMapa
  },
  ...

}

2. Configurando o mapa

Os parâmetros do mapa devem ser fornecidos pelo desenvolvedor, conforme descrito a seguir.

1.1. A aplicação deve fornecer ao componente um objeto Javascript, com a estrutura dada pelo json a seguir.

{
    "title": {
        "name": "Seção Judiciária de São Paulo",
        "style": {
            "fill": "#212121",
            "font-family": "Segoe UI",
            "font-size": 24,
            "font-weight": "normal"
        },
        "containerStyle": {
            "stroke": "#212121",
            "stroke-width": "2px",
            "fill": "#E0E0E0",
            "rx": "5px",
            "ry": "5px",
            "padding": "5px"
        },
        "off-set": {
            "x": 220,
            "y": 310
        }
    },
    "svg": {
        "width": "1086.4963",
        "height": "707.90271",
        "viewBox": "0 0 1086.4963 707.90271",
        "style": {
            "stroke": "#ffffff",
            "stroke-width": "0.1px",
            "stroke-linecap": "butt",
            "stroke-linejoin": "miter"
        }
    },
    "paths": [ // array de paths (cada path deve corresponder a uma unidade territorial)
        {
            "name": "..." // nome da unidade,
            "label": {
                "style": {
                    "fill": "#000000",
                    "font-family": "Segoe UI",
                    "font-size": "16px",
                    "font-weight": "bold",
                    "stroke": "#ffffff",
                    "stroke-width": "0px",
                    "stroke-linecap": "round"
                },
                "containerStyle": {
                    "stroke": "#212121",
                    "stroke-width": "0px",
                    "fill": "none",
                    "rx": "5px",
                    "padding": "5px"
                },
                "off-set": { // off-set em relação ao centroid calculado automaticamente
                    "x": 0,
                    "y": 0
                }
            },
            "id": 5, // código numérico
            "d": "...", // elemento <d></d> do path
            "style": { // parâmetro opcional; na ausência, aplica-se o estilo do grupo ou um estilo default
                "stroke": "#ffffff",
                "stroke-width": "0.1px",
                "stroke-linecap": "round"
            }
        },
        ...
    ]
}

1.2. Opcionalmente, os paths podem ser agrupados fornecendo ao componente um objeto com a seguinte estrutura:

{
    "name": "...", // nome do agrupamento
    "groups": [ // array com os grupos pertencentes ao agrupamento
        {
            "name": "Presidente\nPrudente", // utilize \n para dividir o texto
            "label": {
                "style": {
                    "fill": "#000000",
                    "font-family": "Segoe UI",
                    "font-size": "10",
                    "font-weight": "bold",
                    "stroke": "#ffffff",
                    "stroke-width": "0px",
                    "stroke-linecap": "round"            
                },
                "containerStyle": {
                    "stroke": "#212121",
                    "stroke-width": "0px",
                    "fill": "none",
                    "rx": "5px",
                    "padding": "5px"
                },
                "off-set": { // off-set em relação à posição do centroid calculado automaticamente
                    "x": 2,
                    "y": -10
                }
            },
            "id": 30,
            "paths": [ 30 ],
            "style": { // parâmetro opcional; na ausência, aplica-se o estilo default
                "fill": "#FFEBEE",
                "stroke": "#ffffff",
                "stroke-width": "3px",
                "stroke-linecap": "round"            
            }
        },
        ...
    ]
}

1.3. Também opcionalmente, os paths podem ser coloridos segundo o padrão fornecido por um objeto chart com a estrutura abaixo. Sendo habilitada a opção de exibir legenda, o componente criará a legenda automaticamente.

{
    "name": "Teste",
    "legend": {
        "width": 300,
        "height": 100,
        "x": 30,
        "y": 480
    },
    "groups": [
        {
            "name": "Item 1",
            "label": {
                "style": {
                    "fill": "#000000",
                    "font-family": "Segoe UI",
                    "font-size": "20",
                    "font-weight": "bold",
                    "stroke": "#ffffff",
                    "stroke-width": "0px",
                    "stroke-linecap": "round"            
                },
                "containerStyle": {
                    "stroke": "#212121",
                    "stroke-width": "1px",
                    "fill": "#E0E0E0",
                    "rx": "5px",
                    "padding": "5px"
                },
                "off-set": {
                    "x": null,
                    "y": null
                }
            },
            "paths": [
                40, 17, 25, 33, 35, 26, 27, 8
            ],
            "style": {
                "fill": "#90CAF9"
            }
        },
        ...
    ]
}

1.4. Observação: os parâmetros style e containerStyle nos três objetos acima podem receber qualquer propriedade CSS aplicável aos elementos do svg. O containerStyle permite, ainda, a utilização das propriedades padding, padding-top, padding-bottom, padding-left e/ou padding-right, que são convertidas em espaçamento entre o texto do label (elementos text e tspan) e o seu container (elementos rect e svg).

2. Lista das propriedades

| Propriedade | Valor | Finalidade | | ----------- | ----- | ---------- | | map | Object | Objeto descrito no item 1.1 | | width | String | Valor da propriedade width do objeto de estilo (css) do div em que está contido o elemento svg. O valor default é 100% | | height | String | Valor da propriedade height do objeto de estilo (css) do div em que está contido o elemento svg. O valor default é auto | | show-title | Boolean | Indica se o título do mapa deve ser exibido. Default: false | | show-labels | Boolean | Indica se os rótulos devem ser mostrados. Default: false. Se true, não exibe tooltips para os mesmos elementos, ainda que a opção showTooltips seja também true | | show-tooltips | Boolean | Indica se os tooltips (elemento title) serão exibidos no evento hover. Caso show-labels também for true, os tooltips não será exibidos para o mesmo elemento em que houver um label sendo exibido. | | visible-paths | Array | Um array de números correspondentes aos códigos dos paths que deverão ficar visíveis. Todos os demais deixarão de ser renderizados. Se fornecida uma lista vazia, todos os paths são renderizados. | | detach-path | Number | Código do path a ser destacado e renderizado isoladamente. Para desabilitar a opção, basta atribuir valor -1 à propriedade. | | grouping | Object | Objeto descrito no item 1.2 | | visible-groups | Array | Um array de números correspondentes aos códigos dos grupos definidos no grouping que deverão ficar visíveis. Todos os demais grupos deixarão de ser renderizados. Se fornecida uma lista vazia, todos os grupos serão renderizados. | | detach-group | Number | Código do grupo em grouping a ser destacado e renderizado isoladamente. Esse grupo passa a ocupar todo o espaço do viewBox. Para desabilitar a opção, basta atribuir valor -1 à propriedade. A opção será ignorada se houver um path selecionado em detach-path. | | chart | Object | Objecto descrito no item 1.3 | | show-legend | Boolean | Indica se a legenda do chart deve ser exibida. | | enable-group-hover | Boolean | Quando true, os elementos path do grupo sofrem decréscimo da opacidade no evento hover em qualquer um dos paths do mesmo grupo. O valor default é false. Pode ser utilizado em conjunto com enable-path-hover, caso em que os dois efeitos são percebidos simultaneamente.| | enable-path-hover | Boolean | Quanto true, o elemento path sofre sofre decréscimo da opacidade no evento hover. O valor default é true. Pode ser utilizado em conjunto com enable-group-hover, caso em que os dois efeitos são percebidos simultaneamente. |

3. Dados sobre as versões

Atenção: A versão 2.0.0 traz algumas alterações na API do componente que o tornam incompatível com as versões anteriores.

4. Dependências

O componente foi desenhado para funcionar com Vue.