@thibezer/ui-components-kit 2.8.2 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +146 -0
- package/README.md +32 -8
- package/dist/acessibilidade-CSzX-DkG.cjs +1 -0
- package/dist/acessibilidade-CUlSXc2X.js +38 -0
- package/dist/altura-controle-ukMRPckR.cjs +1 -0
- package/dist/altura-controle-vxQiXG4q.js +62 -0
- package/dist/botao.cjs +1 -1
- package/dist/botao.js +1 -1
- package/dist/camadas.cjs +114 -110
- package/dist/camadas.js +1343 -1177
- package/dist/campo-texto.cjs +1 -1
- package/dist/campo-texto.js +1 -1
- package/dist/canvas.cjs +86 -85
- package/dist/canvas.js +5437 -4304
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/components/ui-avatar/ui-avatar.d.ts +11 -0
- package/dist/components/ui-badge/ui-badge.d.ts +2 -0
- package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +3 -1
- package/dist/components/ui-barra-ferramentas/paleta-atalhos.d.ts +23 -0
- package/dist/components/ui-barra-ferramentas/paleta-pressao-longa.d.ts +24 -0
- package/dist/components/ui-barra-ferramentas/ribbon-render.d.ts +22 -0
- package/dist/components/ui-barra-ferramentas/ribbon-teclado.d.ts +24 -0
- package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +3 -7
- package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +0 -1
- package/dist/components/ui-camadas/camadas-arraste-controles.d.ts +2 -0
- package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +4 -11
- package/dist/components/ui-camadas/camadas-colecao.d.ts +27 -0
- package/dist/components/ui-camadas/camadas-drag-drop.d.ts +13 -1
- package/dist/components/ui-camadas/camadas-drop-ops.d.ts +31 -0
- package/dist/components/ui-camadas/camadas-hierarquia.d.ts +10 -0
- package/dist/components/ui-camadas/camadas-host.d.ts +1 -0
- package/dist/components/ui-camadas/camadas-lembranca.d.ts +34 -0
- package/dist/components/ui-camadas/camadas-mapas-base.d.ts +3 -1
- package/dist/components/ui-camadas/camadas-render.d.ts +15 -0
- package/dist/components/ui-camadas/camadas-renomear.d.ts +12 -0
- package/dist/components/ui-camadas/camadas-selecao-api.d.ts +17 -0
- package/dist/components/ui-camadas/camadas-selecao.d.ts +12 -0
- package/dist/components/ui-camadas/camadas-thumb.d.ts +1 -0
- package/dist/components/ui-camadas/ui-camadas.d.ts +8 -5
- package/dist/components/ui-canvas-cad/cad-acessibilidade.d.ts +15 -0
- package/dist/components/ui-canvas-cad/cad-atributos-sync.d.ts +2 -1
- package/dist/components/ui-canvas-cad/cad-broadcast.d.ts +1 -1
- package/dist/components/ui-canvas-cad/cad-evento-coordenadas.d.ts +22 -0
- package/dist/components/ui-canvas-cad/cad-eventos-canvas.d.ts +3 -8
- package/dist/components/ui-canvas-cad/cad-feicoes-camera.d.ts +26 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-consulta.d.ts +21 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-dados.d.ts +39 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-desenho.d.ts +68 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-edicao.d.ts +37 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-operacoes.d.ts +48 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-ponteiro.d.ts +28 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-selecao-regiao.d.ts +22 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-tipos.d.ts +53 -0
- package/dist/components/ui-canvas-cad/cad-feicoes-versoes.d.ts +33 -0
- package/dist/components/ui-canvas-cad/cad-feicoes.d.ts +39 -106
- package/dist/components/ui-canvas-cad/cad-inicializador.d.ts +3 -1
- package/dist/components/ui-canvas-cad/cad-leaflet-adaptador.d.ts +5 -0
- package/dist/components/ui-canvas-cad/cad-selecao-pontos.d.ts +5 -0
- package/dist/components/ui-canvas-cad/tipos.d.ts +37 -0
- package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +30 -1
- package/dist/components/ui-checkbox/ui-checkbox.d.ts +4 -1
- package/dist/components/ui-cores/tipos.d.ts +2 -0
- package/dist/components/ui-cores/ui-controle-cores.d.ts +8 -3
- package/dist/components/ui-cores/ui-seletor-cor.d.ts +3 -1
- package/dist/components/ui-linha/index.d.ts +1 -0
- package/dist/components/ui-linha/ui-linha.d.ts +48 -0
- package/dist/components/ui-mapa/mapa-atributos.d.ts +14 -0
- package/dist/components/ui-mapa/mapa-basemaps.d.ts +7 -0
- package/dist/components/ui-mapa/mapa-icones.d.ts +4 -0
- package/dist/components/ui-mapa/mapa-leaflet.d.ts +5 -0
- package/dist/components/ui-mapa/mapa-vinculo-pai.d.ts +22 -0
- package/dist/components/ui-mapa/tipos.d.ts +13 -0
- package/dist/components/ui-mapa/ui-mapa-linha.d.ts +12 -5
- package/dist/components/ui-mapa/ui-mapa-marcador.d.ts +15 -6
- package/dist/components/ui-mapa/ui-mapa.d.ts +14 -1
- package/dist/components/ui-modal/modal-acessibilidade.d.ts +5 -5
- package/dist/components/ui-modal/modal-foco.d.ts +28 -0
- package/dist/components/ui-modal/ui-modal.d.ts +1 -11
- package/dist/components/ui-radio/radio-grupo-registry.d.ts +10 -0
- package/dist/components/ui-radio/ui-radio.d.ts +9 -2
- package/dist/components/ui-skeleton/ui-skeleton.d.ts +9 -0
- package/dist/components/ui-switch/ui-switch.d.ts +3 -1
- package/dist/components/ui-tabela/tabela-estados.d.ts +16 -0
- package/dist/components/ui-tabela/tabela-rolagem.d.ts +44 -0
- package/dist/components/ui-tabela/tabela-teclado.d.ts +16 -0
- package/dist/components/ui-tabela/ui-tabela.d.ts +1 -19
- package/dist/components/ui-tooltip/tooltip-popover.d.ts +7 -0
- package/dist/components/ui-tooltip/tooltip-posicionamento.d.ts +29 -0
- package/dist/components/ui-tooltip/ui-tooltip.d.ts +24 -1
- package/dist/core/altura-controle.d.ts +34 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/opcoes.d.ts +9 -0
- package/dist/core/rotulo-controle.d.ts +13 -0
- package/dist/core.cjs +1 -1
- package/dist/core.js +28 -18
- package/dist/cores.cjs +1 -1
- package/dist/cores.js +1 -1
- package/dist/custom-elements.json +22088 -16390
- package/dist/data.cjs +1 -1
- package/dist/data.js +2 -2
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +2 -2
- package/dist/form-validacao-BlQFxUVj.js +104 -0
- package/dist/form-validacao-DIeyQVH5.cjs +1 -0
- package/dist/forms.cjs +1 -1
- package/dist/forms.js +2 -2
- package/dist/gerencigeo-canvas/canvas_interacao.d.ts +0 -1
- package/dist/gerencigeo-canvas/curva_leaflet.d.ts +2 -2
- package/dist/gerencigeo-canvas/feature_curvas.d.ts +3 -1
- package/dist/gerencigeo-canvas/feature_lod.d.ts +38 -0
- package/dist/gerencigeo-canvas/feature_popup.d.ts +2 -0
- package/dist/gerencigeo-canvas/feature_simplificacao.d.ts +16 -8
- package/dist/gerencigeo-canvas/index.d.ts +7 -0
- package/dist/gerencigeo-canvas/layer_hit_test.d.ts +22 -0
- package/dist/gerencigeo-canvas/layer_manager.d.ts +5 -0
- package/dist/gerencigeo-canvas/mapa_core.d.ts +6 -0
- package/dist/gerencigeo-canvas/motor/dados-camada.d.ts +39 -0
- package/dist/gerencigeo-canvas/motor/estilo.d.ts +28 -0
- package/dist/gerencigeo-canvas/motor/geometria-px.d.ts +27 -0
- package/dist/gerencigeo-canvas/motor/index.d.ts +5 -0
- package/dist/gerencigeo-canvas/motor/motor-formas.d.ts +107 -0
- package/dist/gerencigeo-canvas/motor/tipos.d.ts +100 -0
- package/dist/gerencigeo-canvas/popup_gate.d.ts +30 -0
- package/dist/gerencigeo-canvas/renderers/canvas_formas_leaflet.d.ts +87 -0
- package/dist/gerencigeo-canvas/renderers/feicoes_canvas_renderer.d.ts +58 -0
- package/dist/gerencigeo-canvas/renderers/feicoes_despachante.d.ts +31 -0
- package/dist/gerencigeo-canvas/renderers/feicoes_renderer.d.ts +48 -9
- package/dist/gerencigeo-canvas/renderers/marcadores_feicoes.d.ts +11 -0
- package/dist/gerencigeo-canvas/renderers/marcas_lod_layer.d.ts +19 -0
- package/dist/gerencigeo-canvas/renderers/renderizador_feicoes_tipos.d.ts +44 -0
- package/dist/gerencigeo-canvas/renderers/renderizador_formas.d.ts +95 -0
- package/dist/gerencigeo-canvas/renderers/selecao_visual.d.ts +6 -0
- package/dist/gerencigeo-canvas/types.d.ts +2 -0
- package/dist/gerencigeo-canvas/zoom_opcoes.d.ts +10 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +179 -176
- package/dist/mapa.cjs +11 -16
- package/dist/mapa.js +242 -170
- package/dist/modal.cjs +1 -1
- package/dist/modal.js +1 -1
- package/dist/motor-BB6tB6U-.cjs +1 -0
- package/dist/motor-CFI84lM2.js +1301 -0
- package/dist/motor.cjs +1 -0
- package/dist/motor.d.ts +7 -0
- package/dist/motor.js +52 -0
- package/dist/opcoes-CJYLi6kd.js +12 -0
- package/dist/opcoes-CkyDxBuQ.cjs +1 -0
- package/dist/register.cjs +1 -1
- package/dist/register.js +11 -11
- package/dist/tabela.cjs +1 -1
- package/dist/tabela.js +1 -1
- package/dist/tipos-elementos.d.ts +49 -8
- package/dist/tipos-react.d.ts +2 -0
- package/dist/tipos-vue.d.ts +45 -8
- package/dist/tools.cjs +1 -1
- package/dist/tools.js +1 -1
- package/dist/ui-badge-BWhoGgo9.js +197 -0
- package/dist/ui-badge-SIR81R9l.cjs +28 -0
- package/dist/ui-botao-D24oXySA.cjs +12 -0
- package/dist/ui-botao-Dsj08jjw.js +165 -0
- package/dist/{ui-campo-texto-Uu2dJE_0.js → ui-campo-texto-B_OHVGiN.js} +51 -51
- package/dist/ui-campo-texto-DauJCde3.cjs +16 -0
- package/dist/{ui-card-C_o5_0cB.js → ui-card-BNYCQ7g-.js} +50 -42
- package/dist/ui-card-BrjBL-yo.cjs +20 -0
- package/dist/ui-controle-cores-DgEza3wF.js +612 -0
- package/dist/ui-controle-cores-uY__TgwW.cjs +117 -0
- package/dist/ui-kit.css +1 -1
- package/dist/ui-linha-BYAX4W6x.cjs +19 -0
- package/dist/{ui-segmented-DyF5YLsV.js → ui-linha-aqLlaYi7.js} +209 -114
- package/dist/{ui-modal-DBOtSTbR.js → ui-modal-BkYvNP0G.js} +116 -140
- package/dist/ui-modal-CUNbpbZ1.cjs +18 -0
- package/dist/{ui-paleta-ferramentas-DbwdWVtT.js → ui-paleta-ferramentas-BXXrI1Y7.js} +491 -431
- package/dist/ui-paleta-ferramentas-CsPMTY0G.cjs +21 -0
- package/dist/{ui-skeleton-W9uwIceA.js → ui-skeleton-B2Rgrv8o.js} +254 -191
- package/dist/{ui-skeleton-SPYqku8P.cjs → ui-skeleton-DiOxTBZK.cjs} +10 -10
- package/dist/ui-switch-D9a8XlVX.cjs +53 -0
- package/dist/{ui-switch-BcOqOkiV.js → ui-switch-DO1R0Ce7.js} +187 -128
- package/dist/{ui-tabela-propriedades-C-PeuW1i.cjs → ui-tabela-propriedades-CjK2gG14.cjs} +10 -10
- package/dist/{ui-tabela-propriedades-BokvDD3b.js → ui-tabela-propriedades-DoL4SE0r.js} +845 -826
- package/package.json +8 -3
- package/dist/form-validacao-BIOXxt-1.js +0 -140
- package/dist/form-validacao-ytRYSF3E.cjs +0 -1
- package/dist/svg-seguro-BsbNQqpd.js +0 -50
- package/dist/svg-seguro-C76iLlAZ.cjs +0 -1
- package/dist/ui-badge-BxT-sDmV.cjs +0 -28
- package/dist/ui-badge-C0eKBI8E.js +0 -183
- package/dist/ui-botao-BOOnP8ds.cjs +0 -12
- package/dist/ui-botao-DfqSivHl.js +0 -165
- package/dist/ui-botao-OGJV6Vfk.js +0 -165
- package/dist/ui-botao-psS1juof.cjs +0 -12
- package/dist/ui-campo-texto-Cnn2UAkS.cjs +0 -16
- package/dist/ui-card-B86lJXTP.cjs +0 -20
- package/dist/ui-controle-cores-BS0WYPdi.js +0 -572
- package/dist/ui-controle-cores-Er6ZcQ7U.cjs +0 -111
- package/dist/ui-modal-CvGFGh1h.cjs +0 -18
- package/dist/ui-paleta-ferramentas-CEZYcN4J.js +0 -624
- package/dist/ui-paleta-ferramentas-CU4icLl0.js +0 -1171
- package/dist/ui-paleta-ferramentas-Ccmo-rB5.cjs +0 -21
- package/dist/ui-paleta-ferramentas-DLwZHIDv.cjs +0 -21
- package/dist/ui-paleta-ferramentas-DNN5i6nL.js +0 -860
- package/dist/ui-paleta-ferramentas-Dbj1kBS9.cjs +0 -18
- package/dist/ui-paleta-ferramentas-bvqxj1Yd.cjs +0 -21
- package/dist/ui-segmented-D6b6zxVs.cjs +0 -19
- package/dist/ui-segmented-rn9RxRGM.cjs +0 -19
- package/dist/ui-segmented-wUraId2e.js +0 -412
- package/dist/ui-skeleton-DI4_9WOX.js +0 -428
- package/dist/ui-skeleton-elhKIh2B.cjs +0 -33
- package/dist/ui-switch-D7iPKDj-.cjs +0 -53
- package/dist/ui-tabela-propriedades-BBr5sqki.cjs +0 -145
- package/dist/ui-tabela-propriedades-BecPqC-e.cjs +0 -141
- package/dist/ui-tabela-propriedades-Boy7I5yW.js +0 -2412
- package/dist/ui-tabela-propriedades-Df9ajC6M.js +0 -2648
- package/dist/ui-toast-Bp_NlM5G.js +0 -156
- package/dist/ui-toast-DGTZKne5.cjs +0 -20
- package/dist/zero-js-triggers-C_KrvFOQ.js +0 -244
- package/dist/zero-js-triggers-C_gtaojZ.cjs +0 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { CaixaGeo } from '../feature_indice';
|
|
2
|
+
import { PontoMundo } from '../feature_lod';
|
|
3
|
+
import { Feicao, LatLonPar } from '../feature_types';
|
|
4
|
+
import { LayerStyleDef } from '../types';
|
|
5
|
+
import { EstiloVetor } from './estilo';
|
|
6
|
+
export type { PontoMundo };
|
|
7
|
+
/**
|
|
8
|
+
* Janela que o motor desenha. `caixa` é o que cabe no canvas (geográfica); `origemPx` são os pixels de mundo, no
|
|
9
|
+
* zoom, do canto superior esquerdo do canvas: o pintor subtrai esse valor em dupla precisão (coordenadas de mundo em
|
|
10
|
+
* zoom alto não cabem em float32 do canvas). Sem `origemPx` ela é derivada de `caixa`.
|
|
11
|
+
*/
|
|
12
|
+
export interface Vista {
|
|
13
|
+
caixa: CaixaGeo;
|
|
14
|
+
zoom: number;
|
|
15
|
+
larguraPx: number;
|
|
16
|
+
alturaPx: number;
|
|
17
|
+
dpr: number;
|
|
18
|
+
origemPx?: PontoMundo;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Formas de desenho:
|
|
22
|
+
* - pintadas no canvas: `marca` (LOD), `poligono`, `circulo`, `linha`, `ponto` (sem ícone);
|
|
23
|
+
* - marcadores DOM (dependem de CSS e arraste, ficam no Leaflet): `icone`, `texto`, `cluster`, `rotulo`;
|
|
24
|
+
* - `curva` (linha/polígono Bézier): caminho Leaflet legado dentro do mesmo renderizador (pendência explícita).
|
|
25
|
+
*/
|
|
26
|
+
export type FormaDesenho = 'marca' | 'poligono' | 'circulo' | 'linha' | 'ponto' | 'icone' | 'texto' | 'cluster' | 'rotulo' | 'curva';
|
|
27
|
+
export interface ItemDesenho {
|
|
28
|
+
camadaId: string;
|
|
29
|
+
/** Id da feição; no cluster, a chave da célula; no rótulo, `rotulo:<id>`. */
|
|
30
|
+
id: string;
|
|
31
|
+
forma: FormaDesenho;
|
|
32
|
+
/**
|
|
33
|
+
* Pixels de MUNDO no zoom da vista (subtraia `origem` ao pintar). Poligono/linha: um array `[x0, y0, x1, y1, ...]`
|
|
34
|
+
* por anel/parte. Círculo, ponto e marca: um array `[x, y]` com o centro. Marcadores DOM e curva: vazio.
|
|
35
|
+
*/
|
|
36
|
+
geometriaEmPx: Float64Array[];
|
|
37
|
+
/** Círculo e ponto: raio em px (círculo em metros convertido por zoom e latitude). Marca: lado (1 ou 2). */
|
|
38
|
+
raioPx: number;
|
|
39
|
+
/** Estilo normal (sem seleção); o realce de seleção vem de `listaSelecao`. Interno: itens iguais compartilham o objeto. */
|
|
40
|
+
estilo: EstiloVetor;
|
|
41
|
+
/** A feição está selecionada? (marcadores DOM trocam de aparência; o canvas base não depende disto.) */
|
|
42
|
+
selecionada: boolean;
|
|
43
|
+
/** Realce temporário (hover/edição), pedido por `destacar`. */
|
|
44
|
+
destaque?: boolean;
|
|
45
|
+
/** Feição de origem (marcadores DOM, curva, clique). Ausente no cluster. */
|
|
46
|
+
feicao?: Feicao;
|
|
47
|
+
/** Icone, texto, rótulo e cluster: posição [lat, lon]. */
|
|
48
|
+
coordenada?: LatLonPar;
|
|
49
|
+
/** Cluster: quantos pontos há na célula e quantos aparecem no cluster (o resto está selecionado). */
|
|
50
|
+
total?: number;
|
|
51
|
+
restantes?: number;
|
|
52
|
+
/** Rótulo: texto a exibir. */
|
|
53
|
+
texto?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface EstatisticasCamada {
|
|
56
|
+
/** Feições na camada. */
|
|
57
|
+
total: number;
|
|
58
|
+
/** Itens no canvas ou em marcadores DOM nesta vista (sem contar as marcas de LOD). */
|
|
59
|
+
desenhadas: number;
|
|
60
|
+
/** Feições pequenas pintadas como marca de 1–2 px. */
|
|
61
|
+
marcasLOD: number;
|
|
62
|
+
clusters: number;
|
|
63
|
+
/** Marcadores DOM pedidos (ícones, textos, clusters, rótulos). */
|
|
64
|
+
marcadoresDom: number;
|
|
65
|
+
/** Quantas vezes o LOD foi calculado (no pan puro não cresce). */
|
|
66
|
+
avaliacoesLOD: number;
|
|
67
|
+
}
|
|
68
|
+
export interface CamadaDesenho {
|
|
69
|
+
camadaId: string;
|
|
70
|
+
zIndex: number;
|
|
71
|
+
opacidade: number;
|
|
72
|
+
/** Pintar primeiro as marcas, depois polígonos/círculos, linhas e pontos; DOM e curvas vêm separados. */
|
|
73
|
+
itens: ItemDesenho[];
|
|
74
|
+
estatisticas: EstatisticasCamada;
|
|
75
|
+
}
|
|
76
|
+
/** Camadas visíveis, na ordem de empilhamento (zIndex crescente = a última fica por cima). */
|
|
77
|
+
export interface ListaDesenho {
|
|
78
|
+
vista: Vista;
|
|
79
|
+
/** Pixels de mundo do canto superior esquerdo do canvas (a `origemPx` da vista, já resolvida). */
|
|
80
|
+
origem: PontoMundo;
|
|
81
|
+
camadas: CamadaDesenho[];
|
|
82
|
+
}
|
|
83
|
+
export interface DefCamadaMotor {
|
|
84
|
+
id: string;
|
|
85
|
+
zIndex: number;
|
|
86
|
+
opacidade: number;
|
|
87
|
+
visivel: boolean;
|
|
88
|
+
interativo: boolean;
|
|
89
|
+
bloqueada?: boolean;
|
|
90
|
+
estilo: LayerStyleDef;
|
|
91
|
+
}
|
|
92
|
+
/** Regra de visibilidade por versão (oficial × prévia): `RegraVersoes.visivel` serve direto. */
|
|
93
|
+
export type RegraVisivel = (f: Feicao, comOficial: Set<string>) => boolean;
|
|
94
|
+
/** Mudança incremental (a mesma que o gerenciador manda ao renderizador Leaflet). */
|
|
95
|
+
export interface DeltaMotor {
|
|
96
|
+
/** A lista que o motor sincronizou por último; se não bater, o motor refaz a camada por inteiro. */
|
|
97
|
+
base: Feicao[];
|
|
98
|
+
mudadas: Feicao[];
|
|
99
|
+
removidas: string[];
|
|
100
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
export type ModoPopups = 'sob-demanda' | 'automatico' | 'desligado';
|
|
3
|
+
export declare const MODO_POPUPS_PADRAO: ModoPopups;
|
|
4
|
+
export declare function lerModoPopups(valor: string | null | undefined): ModoPopups;
|
|
5
|
+
/** Executa `fn` com os popups do mapa liberados (pedido explícito do usuário). Sem portão, só executa. */
|
|
6
|
+
export declare function liberarPopups<T>(map: object | null | undefined, fn: () => T): T;
|
|
7
|
+
export declare function obterPortaoPopups(map: object | null | undefined): PortaoPopups | undefined;
|
|
8
|
+
export declare class PortaoPopups {
|
|
9
|
+
private map;
|
|
10
|
+
private modoAtual;
|
|
11
|
+
private liberados;
|
|
12
|
+
/** Verdadeiro durante o despacho síncrono de um clique no mapa (o Leaflet abre popups dentro dele). */
|
|
13
|
+
private emClique;
|
|
14
|
+
private pendentes;
|
|
15
|
+
private instalado;
|
|
16
|
+
private readonly original;
|
|
17
|
+
constructor(map: L.Map, modoAtual?: ModoPopups);
|
|
18
|
+
private container;
|
|
19
|
+
/** Fase de captura: roda antes dos tratadores do Leaflet, que abrem o popup dentro do mesmo clique. */
|
|
20
|
+
private marcarClique;
|
|
21
|
+
get modo(): ModoPopups;
|
|
22
|
+
definirModo(modo: ModoPopups): void;
|
|
23
|
+
/** Abre o que `fn` abrir, independentemente do modo. Reentrante e sempre devolve o portão ao estado anterior. */
|
|
24
|
+
liberar<T>(fn: () => T): T;
|
|
25
|
+
destruir(): void;
|
|
26
|
+
private aoAbrir;
|
|
27
|
+
/** O clique foi barrado: se vier um duplo clique na mesma camada logo em seguida, abre. */
|
|
28
|
+
private aguardarDuploClique;
|
|
29
|
+
private cancelarPendentes;
|
|
30
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CaixaGeo } from '../feature_indice';
|
|
3
|
+
import { PontoMundo } from '../motor/tipos';
|
|
4
|
+
import { RegiaoPx } from './renderizador_formas';
|
|
5
|
+
/** Tudo que o renderizador precisa para pintar um quadro. */
|
|
6
|
+
export interface QuadroCanvas {
|
|
7
|
+
ctx: CanvasRenderingContext2D;
|
|
8
|
+
/** Multiplicador de retina do Leaflet (1 ou 2). */
|
|
9
|
+
dpr: number;
|
|
10
|
+
/** Tamanho do canvas em px CSS. */
|
|
11
|
+
larguraPx: number;
|
|
12
|
+
alturaPx: number;
|
|
13
|
+
/** Pixels de mundo, no zoom, do canto superior esquerdo do canvas. */
|
|
14
|
+
origemPx: PontoMundo;
|
|
15
|
+
/** O que cabe no canvas, em coordenadas geográficas. */
|
|
16
|
+
caixa: CaixaGeo;
|
|
17
|
+
zoom: number;
|
|
18
|
+
/**
|
|
19
|
+
* `null`: pintar o canvas inteiro. Lista: o bitmap já foi deslocado e só estas regiões (px CSS) estão vazias e
|
|
20
|
+
* precisam ser pintadas (vazia = nada novo ficou à mostra).
|
|
21
|
+
*/
|
|
22
|
+
regioes: RegiaoPx[] | null;
|
|
23
|
+
/**
|
|
24
|
+
* O bitmap está em branco antes desta pintura? Quem pinta pode então não tocar no canvas quando não há o que desenhar:
|
|
25
|
+
* qualquer chamada de desenho (até um `clearRect`) faz o navegador reenviar o canvas inteiro ao compositor.
|
|
26
|
+
*/
|
|
27
|
+
branco: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Devolve quantos itens de canvas a pintura deixou no bitmap (numa faixa do pan, quantos ACRESCENTOU), ou só se deixou
|
|
31
|
+
* algo (`true`/`void`: algo, quantidade desconhecida; `false`: nada).
|
|
32
|
+
*/
|
|
33
|
+
export type PintarQuadro = (quadro: QuadroCanvas) => number | boolean | void;
|
|
34
|
+
export interface OpcoesCanvasFormas extends L.RendererOptions {
|
|
35
|
+
/** Pan incremental: desloca o bitmap e pinta só as faixas expostas (padrão: não; a sobreposição repinta inteira). */
|
|
36
|
+
incremental?: boolean;
|
|
37
|
+
/** Pan incremental com até tantos itens no bitmap: repinta inteiro em vez de deslocar (padrão: `CanvasFormas.limiteRepintar`). */
|
|
38
|
+
limiteRepintar?: number;
|
|
39
|
+
}
|
|
40
|
+
/** Regiões que ficam vazias quando o conteúdo se desloca de (`dx`, `dy`) px: a faixa vertical inteira e a horizontal sem a quina. */
|
|
41
|
+
export declare function regioesExpostas(largura: number, altura: number, dx: number, dy: number): RegiaoPx[];
|
|
42
|
+
export declare class CanvasFormas extends L.Canvas {
|
|
43
|
+
/**
|
|
44
|
+
* Com poucos itens no bitmap, repintar a vista inteira custa menos que deslocá-lo: o deslocamento copia o bitmap
|
|
45
|
+
* todo (3072×1920 com dpr 2), seja qual for o conteúdo. Medido (sem GPU): ~180 itens por camada repintam 3× mais
|
|
46
|
+
* rápido; ~650 empatam; ~1 500 já perdem. Ajustável (benchmark); ver docs/desempenho-feicoes.md.
|
|
47
|
+
*/
|
|
48
|
+
static limiteRepintar: number;
|
|
49
|
+
private readonly aoPintar;
|
|
50
|
+
private readonly incremental;
|
|
51
|
+
private readonly limiteProprio;
|
|
52
|
+
/** Itens de canvas no bitmap (estimativa por cima entre repinturas completas: as faixas só somam). */
|
|
53
|
+
private itens;
|
|
54
|
+
/** O bitmap tem um quadro completo válido (deslocável)? Cai para falso ao redimensionar ou se a pintura falhar. */
|
|
55
|
+
private conteudoValido;
|
|
56
|
+
/**
|
|
57
|
+
* O bitmap está em branco? Canvas em branco não é deslocado no pan nem apagado de novo no `_update`: com várias
|
|
58
|
+
* camadas sem nada na vista (zoom alto, camada esparsa), o pan deixa de reenviar canvases vazios ao compositor.
|
|
59
|
+
*/
|
|
60
|
+
private branco;
|
|
61
|
+
/** Canto superior esquerdo do bitmap em pixels de MUNDO no último `_update`: o deslocamento do conteúdo se mede aqui. */
|
|
62
|
+
private mundoMin;
|
|
63
|
+
/** Regiões a pintar no próximo quadro (calculadas no `_update`); `null` = canvas inteiro. */
|
|
64
|
+
private regioesDaVez;
|
|
65
|
+
/** Quantas pinturas falharam (e a última causa): diagnóstico, já que a falha é engolida. */
|
|
66
|
+
falhas: number;
|
|
67
|
+
ultimoErro: unknown;
|
|
68
|
+
constructor(opcoes: OpcoesCanvasFormas, aoPintar: PintarQuadro);
|
|
69
|
+
private get limiteRepintar();
|
|
70
|
+
/**
|
|
71
|
+
* O primeiro `update` do canvas acontece antes de o Leaflet ouvi-lo (e o `onAdd` do L.Canvas ainda limpa o canvas):
|
|
72
|
+
* por isso o primeiro quadro é pintado aqui.
|
|
73
|
+
*/
|
|
74
|
+
onAdd(map: L.Map): this;
|
|
75
|
+
/**
|
|
76
|
+
* Reposiciona o canvas para a vista (moveend, zoomend, resize). Igual ao `L.Canvas._update`, exceto que o bitmap é
|
|
77
|
+
* preservado e deslocado quando só houve pan, em vez de ser sempre apagado pelo redimensionamento.
|
|
78
|
+
*/
|
|
79
|
+
protected _update(): void;
|
|
80
|
+
/** O Leaflet chama isto depois de cada `update` do canvas (moveend, zoomend, resize); aqui vai a pintura. */
|
|
81
|
+
protected _updatePaths(): void;
|
|
82
|
+
/** Repinta o canvas INTEIRO agora (dados, estilo ou seleção que afeta o conjunto mudaram). */
|
|
83
|
+
pintar(): void;
|
|
84
|
+
private pintarQuadro;
|
|
85
|
+
/** O quadro com a vista atual do canvas, ou `null` se o canvas ainda não foi posicionado. */
|
|
86
|
+
quadroAtual(regioes?: RegiaoPx[] | null): QuadroCanvas | null;
|
|
87
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CanvasLayerDef, CanvasRenderContext } from '../types';
|
|
3
|
+
import { Feicao } from '../feature_types';
|
|
4
|
+
import { CaixaGeo } from '../feature_indice';
|
|
5
|
+
import { EstatisticasFeicoes, IRenderizadorFeicoes } from './renderizador_feicoes_tipos';
|
|
6
|
+
export declare class FeicoesCanvasRenderer implements IRenderizadorFeicoes {
|
|
7
|
+
private estados;
|
|
8
|
+
/** Por definição de camada, para a seleção sobreviver à recriação do grupo (ocultar e exibir a camada). */
|
|
9
|
+
private selecionadas;
|
|
10
|
+
render(layerDef: CanvasLayerDef, map: L.Map, context: CanvasRenderContext): L.LayerGroup;
|
|
11
|
+
update(layerDef: CanvasLayerDef, grupo: L.Layer | L.LayerGroup, changes: Partial<CanvasLayerDef>, context: CanvasRenderContext, _map: L.Map): void;
|
|
12
|
+
destroy(grupo: L.Layer | L.LayerGroup, map: L.Map): void;
|
|
13
|
+
reavaliarVersoes(grupo: L.LayerGroup): void;
|
|
14
|
+
feicaoVisivel(grupo: L.LayerGroup, f: Feicao): boolean;
|
|
15
|
+
consultarProximas(grupo: L.LayerGroup, caixa: CaixaGeo): Feicao[];
|
|
16
|
+
/** Geometria provisória (arrasto de vértice): a feição sai do base e a sobreposição a mostra com a geometria nova. */
|
|
17
|
+
previsualizar(grupo: L.LayerGroup, f: Feicao): void;
|
|
18
|
+
/**
|
|
19
|
+
* Marca como selecionadas as feições `ids` da camada. O custo é O(mudanças): a seleção só repinta a sobreposição e
|
|
20
|
+
* atualiza os marcadores DOM afetados; a base só é refeita se um ponto sob cluster entrou ou saiu da seleção.
|
|
21
|
+
*/
|
|
22
|
+
aplicarSelecao(grupo: L.LayerGroup, ids: Set<string>): void;
|
|
23
|
+
estatisticas(grupo: L.LayerGroup): EstatisticasFeicoes | null;
|
|
24
|
+
/** Detalhe completo = formas, marcadores DOM e as selecionadas (a sobreposição as desenha inteiras); marca = LOD. */
|
|
25
|
+
idsDesenhados(grupo: L.LayerGroup): {
|
|
26
|
+
materializadas: string[];
|
|
27
|
+
marcas: string[];
|
|
28
|
+
} | null;
|
|
29
|
+
/** Repinta já (testes e benchmark; no uso normal o repaint é agendado por quadro). */
|
|
30
|
+
redesenharAgora(grupo: L.LayerGroup): void;
|
|
31
|
+
private defMotor;
|
|
32
|
+
private feicoesDe;
|
|
33
|
+
private pedirBase;
|
|
34
|
+
/** Sincroniza só os marcadores DOM com a vista atual (clusters, ícones, textos, rótulos), sem repintar o canvas. */
|
|
35
|
+
private pedirDom;
|
|
36
|
+
/** Lista do quadro atual da camada (sem pintar). */
|
|
37
|
+
private listaAtual;
|
|
38
|
+
/** A vista de uma faixa exposta no pan incremental (a origem continua sendo a do canvas inteiro). */
|
|
39
|
+
private vistaDaFaixa;
|
|
40
|
+
/**
|
|
41
|
+
* Pinta um quadro. Quadro completo: lista e pintura da vista inteira. Pan incremental (o bitmap já foi deslocado pelo
|
|
42
|
+
* host): só as faixas expostas são listadas e pintadas, recortadas na faixa; os marcadores DOM acompanham a vista
|
|
43
|
+
* inteira (são poucos e não custam projeção nem simplificação).
|
|
44
|
+
*/
|
|
45
|
+
private pintarBase;
|
|
46
|
+
private acao;
|
|
47
|
+
private sincronizarDom;
|
|
48
|
+
private colocarDom;
|
|
49
|
+
private trocarIcone;
|
|
50
|
+
/** A seleção de UMA feição mudou: só o marcador DOM (ícone, texto) ou a curva dela precisa de aparência nova. */
|
|
51
|
+
private atualizarSelecaoDom;
|
|
52
|
+
/**
|
|
53
|
+
* Formas pintadas no canvas respondem ao clique pelo hit-test central do mapa, na geometria ORIGINAL (índice +
|
|
54
|
+
* `feicaoNoPonto`). Ícones, textos e curvas têm objetos Leaflet próprios e não entram aqui; pontos dentro de um
|
|
55
|
+
* cluster também não (o cluster é que responde).
|
|
56
|
+
*/
|
|
57
|
+
private registrarHit;
|
|
58
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CaixaGeo } from '../feature_indice';
|
|
3
|
+
import { Feicao } from '../feature_types';
|
|
4
|
+
import { CanvasLayerDef, CanvasRenderContext } from '../types';
|
|
5
|
+
import { EstatisticasFeicoes, IRenderizadorFeicoes } from './renderizador_feicoes_tipos';
|
|
6
|
+
export type ModoRenderizador = 'leaflet' | 'canvas';
|
|
7
|
+
/** `renderizador` inválido ou ausente cai em `leaflet` (padrão até a Fase 4 do motor de formas). */
|
|
8
|
+
export declare function lerModoRenderizador(valor: string | null | undefined): ModoRenderizador;
|
|
9
|
+
export declare class DespachanteFeicoes implements IRenderizadorFeicoes {
|
|
10
|
+
readonly leaflet: IRenderizadorFeicoes;
|
|
11
|
+
readonly canvas: IRenderizadorFeicoes;
|
|
12
|
+
private roteamento;
|
|
13
|
+
constructor(leaflet?: IRenderizadorFeicoes, canvas?: IRenderizadorFeicoes);
|
|
14
|
+
private modo;
|
|
15
|
+
private de;
|
|
16
|
+
/** Qual caminho desenha este grupo? */
|
|
17
|
+
modoDe(grupo: object): ModoRenderizador;
|
|
18
|
+
render(layerDef: CanvasLayerDef, map: L.Map, context: CanvasRenderContext): L.Layer | L.LayerGroup | null;
|
|
19
|
+
update(layerDef: CanvasLayerDef, grupo: L.Layer | L.LayerGroup, changes: Partial<CanvasLayerDef>, context: CanvasRenderContext, map: L.Map): void;
|
|
20
|
+
destroy(grupo: L.Layer | L.LayerGroup, map: L.Map): void;
|
|
21
|
+
reavaliarVersoes(grupo: L.LayerGroup): void;
|
|
22
|
+
feicaoVisivel(grupo: L.LayerGroup, f: Feicao): boolean;
|
|
23
|
+
consultarProximas(grupo: L.LayerGroup, caixa: CaixaGeo): Feicao[];
|
|
24
|
+
previsualizar(grupo: L.LayerGroup, f: Feicao): void;
|
|
25
|
+
estatisticas(grupo: L.LayerGroup): EstatisticasFeicoes | null;
|
|
26
|
+
idsDesenhados(grupo: L.LayerGroup): {
|
|
27
|
+
materializadas: string[];
|
|
28
|
+
marcas: string[];
|
|
29
|
+
} | null;
|
|
30
|
+
aplicarSelecao(grupo: L.LayerGroup, ids: Set<string>): void;
|
|
31
|
+
}
|
|
@@ -3,9 +3,10 @@ import { ILayerRenderer } from '../layer_renderer_factory';
|
|
|
3
3
|
import { CanvasLayerDef, CanvasRenderContext } from '../types';
|
|
4
4
|
import { Feicao } from '../feature_types';
|
|
5
5
|
import { CaixaGeo } from '../feature_indice';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
6
|
+
import { ICONES_FEICAO } from './marcadores_feicoes';
|
|
7
|
+
import { COR_SELECAO, corSegura } from '../motor/estilo';
|
|
8
|
+
export { ICONES_FEICAO };
|
|
9
|
+
export { corSegura, COR_SELECAO };
|
|
9
10
|
/**
|
|
10
11
|
* Mudança incremental enviada pelo gerenciador junto com os dados (`dados.delta`). Só vale se `base` for a lista que
|
|
11
12
|
* este renderizador sincronizou por último; senão a camada é reconciliada por inteiro.
|
|
@@ -17,7 +18,6 @@ export interface DeltaFeicoes {
|
|
|
17
18
|
removidas: string[];
|
|
18
19
|
}
|
|
19
20
|
type Grupo = L.LayerGroup;
|
|
20
|
-
export declare const COR_SELECAO = "#38bdf8";
|
|
21
21
|
/** Até aqui mantém tudo carregado (sem pop-in); acima, só o que está perto da tela. */
|
|
22
22
|
export declare const LIMITE_CULLING = 300;
|
|
23
23
|
export declare class FeicoesLayerRenderer implements ILayerRenderer {
|
|
@@ -36,11 +36,21 @@ export declare class FeicoesLayerRenderer implements ILayerRenderer {
|
|
|
36
36
|
consultarProximas(group: Grupo, caixa: CaixaGeo): Feicao[];
|
|
37
37
|
/** Mostra uma geometria provisória (durante um arrasto) sem tocar nos dados nem no índice. */
|
|
38
38
|
previsualizar(group: Grupo, f: Feicao): void;
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Para testes, benchmark e diagnóstico: `total` (na camada), `materializadas` (objetos Leaflet), `marcasLOD` (feições
|
|
41
|
+
* pequenas pintadas em lote), `clusters` e `avaliacoesLOD` (quantas vezes o LOD foi calculado; no pan puro não cresce).
|
|
42
|
+
*/
|
|
40
43
|
estatisticas(group: Grupo): {
|
|
41
44
|
total: number;
|
|
42
45
|
materializadas: number;
|
|
46
|
+
marcasLOD: number;
|
|
43
47
|
clusters: number;
|
|
48
|
+
avaliacoesLOD: number;
|
|
49
|
+
} | null;
|
|
50
|
+
/** Ids desenhados, separados por forma (Leaflet × marca de LOD). Base da comparação "incremental = completo". */
|
|
51
|
+
idsDesenhados(group: Grupo): {
|
|
52
|
+
materializadas: string[];
|
|
53
|
+
marcas: string[];
|
|
44
54
|
} | null;
|
|
45
55
|
private feicoesDe;
|
|
46
56
|
private obterEstado;
|
|
@@ -55,8 +65,34 @@ export declare class FeicoesLayerRenderer implements ILayerRenderer {
|
|
|
55
65
|
private desenhavel;
|
|
56
66
|
private estaCarregado;
|
|
57
67
|
private caixaDe;
|
|
58
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Decide como a feição é desenhada: marca de LOD (menor que ~3 px) ou camada Leaflet. Sempre em detalhe completo:
|
|
70
|
+
* selecionada (inclui a em edição, que é sempre selecionada), com rótulo e em par oficial × prévia. Pontos e textos
|
|
71
|
+
* nunca viram marca (já têm a regra de cluster). `zoomLod < 0` = mapa sem vista: sem LOD.
|
|
72
|
+
* O resultado é guardado por (feição, zoom): no pan só se consulta; muda ao trocar de zoom ou de geometria.
|
|
73
|
+
*/
|
|
74
|
+
private comoMarca;
|
|
75
|
+
private novaMarca;
|
|
76
|
+
/** Desenha a feição como marca ou camada Leaflet, trocando de uma forma para a outra quando preciso. */
|
|
77
|
+
private colocarFeicao;
|
|
78
|
+
/**
|
|
79
|
+
* Cria a camada das marcas na primeira necessidade e pede o redesenho. Sem marcas ela é desfeita: um canvas vazio por
|
|
80
|
+
* camada ainda custaria limpeza e rasterização a cada vista. O clique nas marcas entra no hit-test central do mapa
|
|
81
|
+
* (`layer_hit_test`), que escolhe UMA feição entre todas as camadas e dispara `click` na camada das marcas.
|
|
82
|
+
*/
|
|
83
|
+
private sincronizarMarcas;
|
|
84
|
+
/**
|
|
85
|
+
* Hit-test das marcas na geometria ORIGINAL (índice + `feicaoNoPonto`): uma feição de 1 px continua clicável.
|
|
86
|
+
* Devolve as feições sob o ponto, da melhor para a pior, para a alternância de cliques empilhados do clique central.
|
|
87
|
+
*/
|
|
88
|
+
private fonteDeMarcas;
|
|
89
|
+
private descartarMarcas;
|
|
90
|
+
/**
|
|
91
|
+
* Cria a camada Leaflet da feição ou remenda a que existe (e só se algo mudou). `'estilo'` só troca o estilo.
|
|
92
|
+
* Uma feição que o Leaflet recusa (coordenada NaN, por exemplo) fica sem desenho em vez de derrubar a camada inteira.
|
|
93
|
+
*/
|
|
59
94
|
private materializar;
|
|
95
|
+
private materializarFeicao;
|
|
60
96
|
private tirarEntrada;
|
|
61
97
|
private colocarCluster;
|
|
62
98
|
private tirarCluster;
|
|
@@ -69,11 +105,13 @@ export declare class FeicoesLayerRenderer implements ILayerRenderer {
|
|
|
69
105
|
* o estado de conjunto muda: regra oficial × prévia, entrada/saída do corte por viewport ou do agrupamento.
|
|
70
106
|
*/
|
|
71
107
|
private reconciliarParcial;
|
|
108
|
+
private reconciliarParcialInterno;
|
|
72
109
|
private criarMarcadorCluster;
|
|
73
110
|
/**
|
|
74
111
|
* Marca como selecionadas as feições `ids` deste grupo (as demais voltam ao estilo normal).
|
|
75
|
-
* Só as que mudaram são tocadas
|
|
76
|
-
*
|
|
112
|
+
* Só as que mudaram são tocadas, e só no estilo: o custo é O(mudanças), não O(visíveis). A camada inteira só é
|
|
113
|
+
* reconciliada quando a mudança pode alterar o CONJUNTO desenhado, ou seja, quando há ponto sob agrupamento
|
|
114
|
+
* (selecionado sai do cluster, desmarcado volta a ele). Mudanças grandes são aplicadas em blocos, as visíveis primeiro.
|
|
77
115
|
*/
|
|
78
116
|
aplicarSelecao(group: Grupo, ids: Set<string>): void;
|
|
79
117
|
private formaDe;
|
|
@@ -81,9 +119,10 @@ export declare class FeicoesLayerRenderer implements ILayerRenderer {
|
|
|
81
119
|
private estiloVetor;
|
|
82
120
|
private criar;
|
|
83
121
|
private remendar;
|
|
122
|
+
/** Só o estilo (seleção): sem `setLatLngs`, que reprojetaria e recalcularia limites da forma. */
|
|
123
|
+
private restilizar;
|
|
84
124
|
private iconeSvg;
|
|
85
125
|
private iconeTexto;
|
|
86
126
|
private aplicarRotulo;
|
|
87
127
|
private ligarEventos;
|
|
88
128
|
}
|
|
89
|
-
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { Feicao } from '../feature_types';
|
|
3
|
+
import { LayerStyleDef } from '../types';
|
|
4
|
+
import { EstiloVetor } from '../motor/estilo';
|
|
5
|
+
export declare const ICONES_FEICAO: Record<string, string>;
|
|
6
|
+
export declare function iconeSvg(f: Feicao, estiloCamada: LayerStyleDef, selecionada?: boolean): L.DivIcon;
|
|
7
|
+
export declare function iconeTexto(f: Feicao, estiloCamada: LayerStyleDef, selecionada?: boolean): L.DivIcon;
|
|
8
|
+
/** Bolinha numerada do agrupamento de pontos. */
|
|
9
|
+
export declare function iconeCluster(n: number, estiloCamada: LayerStyleDef): L.DivIcon;
|
|
10
|
+
/** Opções de `L.Path` a partir do estilo resolvido pelo motor (mesma tradução nos dois renderizadores). */
|
|
11
|
+
export declare function opcoesPath(e: EstiloVetor, interativo: boolean): L.PathOptions;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { MarcaLOD } from '../feature_lod';
|
|
3
|
+
export declare class CamadaMarcasLOD extends L.Layer {
|
|
4
|
+
private canvas;
|
|
5
|
+
private agendado;
|
|
6
|
+
private vivo;
|
|
7
|
+
private readonly nomePane;
|
|
8
|
+
private readonly obterMarcas;
|
|
9
|
+
/** Quantas marcas caíram dentro do canvas na última pintura (diagnóstico e testes). */
|
|
10
|
+
ultimaPintura: number;
|
|
11
|
+
constructor(nomePane: string, obterMarcas: () => Iterable<MarcaLOD>);
|
|
12
|
+
onAdd(map: L.Map): this;
|
|
13
|
+
onRemove(map: L.Map): this;
|
|
14
|
+
/** Pede um redesenho no próximo quadro (vários pedidos viram um só). */
|
|
15
|
+
solicitarRedesenho(): void;
|
|
16
|
+
private esconder;
|
|
17
|
+
/** Posiciona o canvas sobre a vista atual e pinta as marcas. Nunca lança: mapa sem vista ou sem Canvas 2D só não pinta. */
|
|
18
|
+
redesenhar(): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CaixaGeo } from '../feature_indice';
|
|
3
|
+
import { Feicao } from '../feature_types';
|
|
4
|
+
import { ILayerRenderer } from '../layer_renderer_factory';
|
|
5
|
+
/**
|
|
6
|
+
* Contrato comum dos renderizadores de camadas de feições (`leaflet` e `canvas`): o gerenciador de feições fala só
|
|
7
|
+
* com isto e não sabe qual dos dois está desenhando.
|
|
8
|
+
*/
|
|
9
|
+
export interface EstatisticasFeicoes {
|
|
10
|
+
/** Feições na camada. */
|
|
11
|
+
total: number;
|
|
12
|
+
/** Desenhadas com detalhe completo: objetos Leaflet (caminho `leaflet`) ou formas no canvas e marcadores DOM (`canvas`). */
|
|
13
|
+
materializadas: number;
|
|
14
|
+
/** Feições pequenas pintadas como marca de 1–2 px (LOD). */
|
|
15
|
+
marcasLOD: number;
|
|
16
|
+
clusters: number;
|
|
17
|
+
/** Quantas vezes o LOD foi calculado (no pan puro não cresce). */
|
|
18
|
+
avaliacoesLOD: number;
|
|
19
|
+
/** Caminho `canvas`: itens pintados no canvas (sem as marcas). */
|
|
20
|
+
desenhadas?: number;
|
|
21
|
+
/** Caminho `canvas`: marcadores DOM (ícones, textos, clusters, rótulos). */
|
|
22
|
+
marcadoresDom?: number;
|
|
23
|
+
/** Canvases usados pela camada (o canvas dela + a sobreposição compartilhada, no caminho `canvas`). */
|
|
24
|
+
canvases?: number;
|
|
25
|
+
renderizador?: 'leaflet' | 'canvas';
|
|
26
|
+
}
|
|
27
|
+
export interface IRenderizadorFeicoes extends ILayerRenderer {
|
|
28
|
+
/** A regra de versões mudou (prévias ligadas/desligadas): recalcula o que aparece. */
|
|
29
|
+
reavaliarVersoes(grupo: L.LayerGroup): void;
|
|
30
|
+
/** A feição aparece segundo a regra de oficial × prévia? */
|
|
31
|
+
feicaoVisivel(grupo: L.LayerGroup, f: Feicao): boolean;
|
|
32
|
+
/** Feições da camada cujo envelope toca `caixa` (snap e consultas espaciais), sem as ocultas. */
|
|
33
|
+
consultarProximas(grupo: L.LayerGroup, caixa: CaixaGeo): Feicao[];
|
|
34
|
+
/** Mostra uma geometria provisória (arrasto de vértice) sem tocar nos dados nem no índice. */
|
|
35
|
+
previsualizar(grupo: L.LayerGroup, f: Feicao): void;
|
|
36
|
+
estatisticas(grupo: L.LayerGroup): EstatisticasFeicoes | null;
|
|
37
|
+
/** Ids desenhados em detalhe completo e ids desenhados como marca de LOD (comparação entre renderizadores). */
|
|
38
|
+
idsDesenhados(grupo: L.LayerGroup): {
|
|
39
|
+
materializadas: string[];
|
|
40
|
+
marcas: string[];
|
|
41
|
+
} | null;
|
|
42
|
+
/** Marca como selecionadas as feições `ids` da camada (as demais voltam ao estilo normal). */
|
|
43
|
+
aplicarSelecao(grupo: L.LayerGroup, ids: Set<string>): void;
|
|
44
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { CamadaDesenho, ListaDesenho, Vista } from '../motor/tipos';
|
|
2
|
+
/** O que a pintura usa do Canvas 2D (permite testar com um contexto falso que grava as chamadas). */
|
|
3
|
+
export interface ContextoFormas2D {
|
|
4
|
+
fillStyle: string | CanvasGradient | CanvasPattern;
|
|
5
|
+
strokeStyle: string | CanvasGradient | CanvasPattern;
|
|
6
|
+
lineWidth: number;
|
|
7
|
+
lineJoin: CanvasLineJoin;
|
|
8
|
+
lineCap: CanvasLineCap;
|
|
9
|
+
globalAlpha: number;
|
|
10
|
+
setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
|
11
|
+
clearRect(x: number, y: number, w: number, h: number): void;
|
|
12
|
+
save(): void;
|
|
13
|
+
restore(): void;
|
|
14
|
+
rect(x: number, y: number, w: number, h: number): void;
|
|
15
|
+
clip(): void;
|
|
16
|
+
beginPath(): void;
|
|
17
|
+
moveTo(x: number, y: number): void;
|
|
18
|
+
lineTo(x: number, y: number): void;
|
|
19
|
+
closePath(): void;
|
|
20
|
+
arc(x: number, y: number, r: number, a0: number, a1: number): void;
|
|
21
|
+
fill(): void;
|
|
22
|
+
stroke(): void;
|
|
23
|
+
fillRect(x: number, y: number, w: number, h: number): void;
|
|
24
|
+
setLineDash(segmentos: number[]): void;
|
|
25
|
+
}
|
|
26
|
+
/** Superfície de pintura de uma camada (ou da sobreposição): o contexto e o tamanho do canvas em px CSS. */
|
|
27
|
+
export interface SuperficiePintura {
|
|
28
|
+
ctx: ContextoFormas2D;
|
|
29
|
+
largura: number;
|
|
30
|
+
altura: number;
|
|
31
|
+
dpr: number;
|
|
32
|
+
}
|
|
33
|
+
export interface AlvosPintura {
|
|
34
|
+
camada(camadaId: string): SuperficiePintura | null;
|
|
35
|
+
sobreposicao(): SuperficiePintura | null;
|
|
36
|
+
}
|
|
37
|
+
/** Região do canvas, em px CSS a partir do canto superior esquerdo. */
|
|
38
|
+
export interface RegiaoPx {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
largura: number;
|
|
42
|
+
altura: number;
|
|
43
|
+
}
|
|
44
|
+
export interface OpcoesDesenho {
|
|
45
|
+
/** `'base'` (padrão): um canvas por camada. `'sobreposicao'`: seleção, destaque e edição, todas as camadas no mesmo canvas. */
|
|
46
|
+
alvo?: 'base' | 'sobreposicao';
|
|
47
|
+
/** Limpa antes de pintar (padrão: sim). A sobreposição é limpa uma vez, antes de todas as camadas. */
|
|
48
|
+
limpar?: boolean;
|
|
49
|
+
/** Pinta só nesta região (nada fora dela é tocado). Use com `limpar: false` sobre um bitmap já deslocado. */
|
|
50
|
+
recorte?: RegiaoPx;
|
|
51
|
+
}
|
|
52
|
+
export interface EstatisticasPintura {
|
|
53
|
+
itens: number;
|
|
54
|
+
marcas: number;
|
|
55
|
+
preenchimentos: number;
|
|
56
|
+
tracos: number;
|
|
57
|
+
chamadas: number;
|
|
58
|
+
}
|
|
59
|
+
/** Contrato pequeno do renderizador das formas. */
|
|
60
|
+
export interface RenderizadorFormas {
|
|
61
|
+
desenhar(lista: ListaDesenho, vista: Vista, opcoes?: OpcoesDesenho): EstatisticasPintura;
|
|
62
|
+
destacar(ids: Iterable<string>): void;
|
|
63
|
+
limpar(): void;
|
|
64
|
+
destruir(): void;
|
|
65
|
+
}
|
|
66
|
+
/** `dashArray` do SVG/Leaflet ("6 4", "6,4") em segmentos; inválido ou vazio = linha contínua. */
|
|
67
|
+
export declare function parseDash(dash: string | undefined): number[];
|
|
68
|
+
/** Quantos itens da camada o pintor desenha no canvas (os demais são marcadores DOM e curvas). */
|
|
69
|
+
export declare function contarItensCanvas(camada: CamadaDesenho | null | undefined): number;
|
|
70
|
+
export declare class PintorCanvas2D implements RenderizadorFormas {
|
|
71
|
+
private readonly alvos;
|
|
72
|
+
private destaques;
|
|
73
|
+
private destruido;
|
|
74
|
+
/** Estatística da última pintura (diagnóstico e testes). */
|
|
75
|
+
ultima: EstatisticasPintura;
|
|
76
|
+
constructor(alvos: AlvosPintura);
|
|
77
|
+
destacar(ids: Iterable<string>): void;
|
|
78
|
+
limpar(): void;
|
|
79
|
+
destruir(): void;
|
|
80
|
+
desenhar(lista: ListaDesenho, vista: Vista, opcoes?: OpcoesDesenho): EstatisticasPintura;
|
|
81
|
+
private limparSuperficie;
|
|
82
|
+
private pintarCamada;
|
|
83
|
+
private agrupar;
|
|
84
|
+
/** Marcas de LOD: `fillRect` por marca, a cor definida uma vez por grupo. */
|
|
85
|
+
private pintarMarcas;
|
|
86
|
+
/** Caminho de um item: anéis/partes (polígono e linha), círculo ou ponto. */
|
|
87
|
+
private caminho;
|
|
88
|
+
/**
|
|
89
|
+
* Polígonos, círculos, linhas e pontos: o estilo do grupo é definido uma vez; cada forma é um caminho próprio com
|
|
90
|
+
* preenchimento (se o estilo preenche) e traço. `areas` = tipos que podem ser preenchidos.
|
|
91
|
+
*/
|
|
92
|
+
private pintarGrupos;
|
|
93
|
+
/** Halo de destaque (hover): traço claro, mais grosso, por baixo do desenho normal. */
|
|
94
|
+
private halo;
|
|
95
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CanvasLayerDef } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Seleção visual por definição de camada, compartilhada pelos renderizadores de feições (`leaflet` e `canvas`): ela
|
|
4
|
+
* sobrevive à recriação do grupo (ocultar e exibir a camada) e à troca de renderizador.
|
|
5
|
+
*/
|
|
6
|
+
export declare const selecaoVisual: WeakMap<CanvasLayerDef, Set<string>>;
|
|
@@ -178,4 +178,6 @@ export interface CanvasRenderContext {
|
|
|
178
178
|
onPopupAcao?: (acaoId: string, elementoId: string | number, elemento: any) => void;
|
|
179
179
|
/** Regra de oficial × prévia das camadas de feições (uma por componente). */
|
|
180
180
|
regraVersoes?: import('./feature_versoes').RegraVersoes;
|
|
181
|
+
/** Qual renderizador desenha as camadas de feições (atributo `renderizador` do componente). Ausente = `leaflet`. */
|
|
182
|
+
renderizador?: () => 'leaflet' | 'canvas';
|
|
181
183
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zoom em passos finos (como CAD/GIS). O padrão do Leaflet (`zoomSnap: 1`) arredonda cada giro da roda para um nível
|
|
3
|
+
* inteiro, e um nível dobra a escala: o mapa "pula". Com 0,25 de passo, cada giro da roda anda cerca de meio nível (medido no Chrome/Windows) e as teclas +/- andam 0,5.
|
|
4
|
+
* Funções que dependem do zoom (simplificação, clusters, densidade, pré-carga de tiles) aceitam valores fracionários.
|
|
5
|
+
*/
|
|
6
|
+
export declare const OPCOES_ZOOM_FINO: {
|
|
7
|
+
readonly zoomSnap: 0.25;
|
|
8
|
+
readonly zoomDelta: 0.5;
|
|
9
|
+
readonly wheelPxPerZoomLevel: 90;
|
|
10
|
+
};
|