@thibezer/ui-components-kit 2.8.1 → 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 +65 -0
- package/README.md +3 -3
- package/dist/canvas.cjs +70 -70
- package/dist/canvas.js +3125 -2473
- package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +24 -1
- package/dist/components/ui-barra-ferramentas/paleta-atalhos.d.ts +10 -3
- package/dist/components/ui-barra-ferramentas/ribbon-render.d.ts +10 -2
- package/dist/components/ui-barra-ferramentas/ribbon-teclado.d.ts +10 -3
- package/dist/components/ui-barra-ferramentas/tipos.d.ts +31 -0
- package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +12 -0
- package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +16 -0
- package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +15 -0
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/custom-elements.json +8934 -8415
- package/dist/data.cjs +1 -1
- package/dist/data.js +1 -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_metricas.d.ts +9 -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/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/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/index.cjs +1 -1
- package/dist/index.js +3 -3
- 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/register.cjs +1 -1
- package/dist/register.js +3 -3
- package/dist/svg-seguro-ChVJ2L2z.js +74 -0
- package/dist/svg-seguro-J2RM1Ssf.cjs +1 -0
- package/dist/tabela.cjs +1 -1
- package/dist/tabela.js +1 -1
- package/dist/tipos-elementos.d.ts +13 -0
- package/dist/tipos-vue.d.ts +8 -0
- package/dist/tools.cjs +1 -1
- package/dist/tools.js +1 -1
- package/dist/{ui-linha-C6HBnsaw.cjs → ui-linha-BYAX4W6x.cjs} +5 -5
- package/dist/{ui-linha-nCDh2wPm.js → ui-linha-aqLlaYi7.js} +57 -51
- package/dist/ui-paleta-ferramentas-BXXrI1Y7.js +1233 -0
- package/dist/ui-paleta-ferramentas-CsPMTY0G.cjs +21 -0
- package/dist/{ui-tabela-propriedades-DzZlyNZ_.cjs → ui-tabela-propriedades-CjK2gG14.cjs} +1 -1
- package/dist/{ui-tabela-propriedades-D9Echt2X.js → ui-tabela-propriedades-DoL4SE0r.js} +1 -1
- package/package.json +6 -1
- package/dist/svg-seguro-BsbNQqpd.js +0 -50
- package/dist/svg-seguro-C76iLlAZ.cjs +0 -1
- package/dist/ui-paleta-ferramentas-Ksh6gMW3.js +0 -890
- package/dist/ui-paleta-ferramentas-bDLPbiGA.cjs +0 -21
|
@@ -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
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const I=require("./ui-botao-D24oXySA.cjs"),o=require("./ui-switch-D9a8XlVX.cjs"),i=require("./ui-linha-C6HBnsaw.cjs"),n=require("./ui-campo-texto-DauJCde3.cjs"),c=require("./ui-paleta-ferramentas-bDLPbiGA.cjs"),s=require("./ui-badge-SIR81R9l.cjs"),p=require("./ui-card-BrjBL-yo.cjs"),l=require("./ui-modal-CUNbpbZ1.cjs"),e=require("./ui-skeleton-DiOxTBZK.cjs"),a=require("./ui-tabela-propriedades-DzZlyNZ_.cjs"),U=require("./tools.cjs"),t=require("./ui-controle-cores-uY__TgwW.cjs"),r=require("./camadas.cjs"),C=require("./seletor-mapa-base.cjs"),E=require("./ui-bus-XqBLlTYQ.cjs"),T=require("./zero-js-triggers-CgM9IIQB.cjs"),g=require("./listener-bag-D5omxZ9h.cjs"),S=require("./leaflet-loader-94z5VsdY.cjs"),d=require("./ssr-safe-CiHD1adl.cjs"),u=require("./acessibilidade-CSzX-DkG.cjs"),P=()=>Promise.resolve().then(()=>require("./mapa.cjs")),A=()=>Promise.resolve().then(()=>require("./canvas.cjs"));if(typeof document<"u"){const m=()=>{document.querySelector("ui-mapa, ui-mapa-marcador, ui-mapa-linha")&&!customElements.get("ui-mapa")&&Promise.resolve().then(()=>require("./mapa.cjs")),document.querySelector("ui-canvas-cad")&&!customElements.get("ui-canvas-cad")&&Promise.resolve().then(()=>require("./canvas.cjs"))};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",m,{once:!0}):m()}typeof document<"u"&&T.initZeroJSTriggers();exports.UIBotao=I.UIBotao;exports.UIBotaoPrimario=I.UIBotaoPrimario;exports.ATRIBUTOS_OBSERVADOS_LISTA_FLUTUANTE=o.ATRIBUTOS_OBSERVADOS_LISTA_FLUTUANTE;exports.ListaFlutuantePosicionamento=o.ListaFlutuantePosicionamento;exports.ListaFlutuanteTeclado=o.ListaFlutuanteTeclado;exports.RadioGrupoRegistry=o.RadioGrupoRegistry;exports.UICheckbox=o.UICheckbox;exports.UIListaFlutuante=o.UIListaFlutuante;exports.UIRadio=o.UIRadio;exports.UISelect=o.UISelect;exports.UISwitch=o.UISwitch;exports.UIToggle=o.UIToggle;exports.atualizarEstadoSelecaoLista=o.atualizarEstadoSelecaoLista;exports.criarTemplateListaFlutuante=o.criarTemplateListaFlutuante;exports.renderizarItensLista=o.renderizarItensLista;exports.ATRIBUTOS_OBSERVADOS_SEGMENTED=i.ATRIBUTOS_OBSERVADOS_SEGMENTED;exports.SegmentedIndicadorController=i.SegmentedIndicadorController;exports.UIAvatar=i.UIAvatar;exports.UILinha=i.UILinha;exports.UISegmented=i.UISegmented;exports.UISegmento=i.UISegmento;exports.UITexto=i.UITexto;exports.criarBotaoOpcao=i.criarBotaoOpcao;exports.criarTemplateSegmented=i.criarTemplateSegmented;exports.tratarTecladoSegmented=i.tratarTecladoSegmented;exports.ATRIBUTOS_OBSERVADOS_CAMPO_TEXTO=n.ATRIBUTOS_OBSERVADOS_CAMPO_TEXTO;exports.UICampoTexto=n.UICampoTexto;exports.UIInput=n.UIInput;exports.criarTemplateCampoTexto=n.criarTemplateCampoTexto;exports.sincronizarFeedbackErro=n.sincronizarFeedbackErro;exports.sincronizarIconeSenha=n.sincronizarIconeSenha;exports.sincronizarLabelEPlaceholder=n.sincronizarLabelEPlaceholder;exports.UIIcone=c.UIIcone;exports.UIPaletaFerramentas=c.UIPaletaFerramentas;exports.UIRibbon=c.UIRibbon;exports.UIBadge=s.UIBadge;exports.UIChip=s.UIChip;exports.UIKpi=s.UIKpi;exports.UIMetrica=s.UIMetrica;exports.UIStat=s.UIStat;exports.UITag=s.UITag;exports.UICard=p.UICard;exports.UIDialog=l.UIDialog;exports.UIModal=l.UIModal;exports.aplicarInertForaDoModal=l.aplicarInertForaDoModal;exports.removerInertForaDoModal=l.removerInertForaDoModal;exports.ICONES_ALERTA=e.ICONES_ALERTA;exports.UIAlerta=e.UIAlerta;exports.UIDrawer=e.UIDrawer;exports.UIEsqueleto=e.UIEsqueleto;exports.UIGaveta=e.UIGaveta;exports.UIPainelLateral=e.UIPainelLateral;exports.UIPopover=e.UIPopover;exports.UISheet=e.UISheet;exports.UISkeleton=e.UISkeleton;exports.UIToast=e.UIToast;exports.UITooltip=e.UITooltip;exports.atualizarScrollLockDrawer=e.atualizarScrollLockDrawer;exports.gerenciarTabTrap=e.gerenciarTabTrap;exports.isTopMostDrawer=e.isTopMostDrawer;exports.obterElementosFocaveis=e.obterElementosFocaveis;exports.registrarToastNoBus=e.registrarToastNoBus;exports.GerenciadorValoresPropriedades=a.GerenciadorValoresPropriedades;exports.TabelaOrquestradorDados=a.TabelaOrquestradorDados;exports.TabelaRemotaController=a.TabelaRemotaController;exports.TabelaSelecaoController=a.TabelaSelecaoController;exports.UITabela=a.UITabela;exports.UITabelaPropriedades=a.UITabelaPropriedades;exports.abrirPopoverRedimensionamento=a.abrirPopoverRedimensionamento;exports.alternarCategoria=a.alternarCategoria;exports.alternarDirecaoOrdenacao=a.alternarDirecaoOrdenacao;exports.alternarPosicionamentoFlutuante=a.alternarPosicionamentoFlutuante;exports.aplicarOrdenacaoTabela=a.aplicarOrdenacaoTabela;exports.atualizarCampoVisual=a.atualizarCampoVisual;exports.avaliarExpressaoMatematica=a.avaliarExpressaoMatematica;exports.buscarLinhaPropriedade=a.buscarLinhaPropriedade;exports.colapsarTodasCategorias=a.colapsarTodasCategorias;exports.conectarArrastoFlutuante=a.conectarArrastoFlutuante;exports.conectarPainelControles=a.conectarPainelControles;exports.criarControladorSplitter=a.criarControladorSplitter;exports.criarEditorAcao=a.criarEditorAcao;exports.criarEditorBooleano=a.criarEditorBooleano;exports.criarEditorCorCad=a.criarEditorCorCad;exports.criarEditorCorSwatch=a.criarEditorCorSwatch;exports.criarEditorLinetype=a.criarEditorLinetype;exports.criarEditorLineweight=a.criarEditorLineweight;exports.criarEditorNumero=a.criarEditorNumero;exports.criarEditorReadonly=a.criarEditorReadonly;exports.criarEditorSelecao=a.criarEditorSelecao;exports.criarEditorTexto=a.criarEditorTexto;exports.criarEditorValor=a.criarEditorValor;exports.criarLinhaPropriedade=a.criarLinhaPropriedade;exports.executarOrquestracaoCorpo=a.executarOrquestracaoCorpo;exports.executarOrquestracaoHeader=a.executarOrquestracaoHeader;exports.executarRedimensionamentoColuna=a.executarRedimensionamentoColuna;exports.executarRedimensionamentoTeclado=a.executarRedimensionamentoTeclado;exports.exibirPromptPopoverRedimensionamento=a.exibirPromptPopoverRedimensionamento;exports.expandirTodasCategorias=a.expandirTodasCategorias;exports.focarProximoEditor=a.focarProximoEditor;exports.formatWidth=a.formatWidth;exports.getAlignmentClass=a.getAlignmentClass;exports.getRowHeight=a.getRowHeight;exports.getTextAlign=a.getTextAlign;exports.inicializarScrollVirtualizacao=a.inicializarScrollVirtualizacao;exports.iniciarRedimensionamentoColuna=a.iniciarRedimensionamentoColuna;exports.interpretarIndice=a.interpretarIndice;exports.limitarLarguraColuna=a.limitarLarguraColuna;exports.localizarIndiceItem=a.localizarIndiceItem;exports.montarEstruturaDOM=a.montarEstruturaDOM;exports.normalizarTexto=a.normalizarTexto;exports.orquestrarEstruturaInicial=a.orquestrarEstruturaInicial;exports.proximaDensidade=a.proximaDensidade;exports.redimensionarColunaPorDelta=a.redimensionarColunaPorDelta;exports.registrarAtualizadorEditor=a.registrarAtualizadorEditor;exports.renderizarCategoriasETree=a.renderizarCategoriasETree;exports.renderizarCorpoTabela=a.renderizarCorpoTabela;exports.renderizarHeaderTabela=a.renderizarHeaderTabela;exports.renderizarSeletorTipos=a.renderizarSeletorTipos;exports.sincronizarAtributosTabela=a.sincronizarAtributosTabela;exports.sincronizarPainelControles=a.sincronizarPainelControles;exports.sincronizarSelect=a.sincronizarSelect;exports.tratarMudancaAtributoTabela=a.tratarMudancaAtributoTabela;exports.valoresIguais=a.valoresIguais;exports.ICONES_FERRAMENTAS=U.ICONES_FERRAMENTAS;exports.PALETA_CORES_PADRAO=t.PALETA_CORES_PADRAO;exports.UIControleCores=t.UIControleCores;exports.UISeletorCor=t.UISeletorCor;exports.abrirSeletorCor=t.abrirSeletorCor;exports.coresUnicas=t.coresUnicas;exports.escaparHtml=t.escaparHtml;exports.fecharSeletorCor=t.fecharSeletorCor;exports.normalizarCor=t.normalizarCor;exports.normalizarOpacidade=t.normalizarOpacidade;exports.CamadasDragDropManager=r.CamadasDragDropManager;exports.ICONES=r.ICONES;exports.LIMITE_FEICOES_POR_CAMADA=r.LIMITE_FEICOES_POR_CAMADA;exports.MAPAS_BASE_PADRAO=r.MAPAS_BASE_PADRAO;exports.UICamadas=r.UICamadas;exports.UILayerPanel=r.UILayerPanel;exports.UIPainelCamadas=r.UIPainelCamadas;exports.calcularAreaAnelSimples=r.calcularAreaAnelSimples;exports.calcularAreaPoligono=r.calcularAreaPoligono;exports.calcularComprimentoLinha=r.calcularComprimentoLinha;exports.calcularDistanciaPontos=r.calcularDistanciaPontos;exports.calcularSelecaoFeicao=r.calcularSelecaoFeicao;exports.carregarEstadoPersistido=r.carregarEstadoPersistido;exports.construirHierarquiaCamadas=r.construirHierarquiaCamadas;exports.converterCamadaItemParaCanvasLayer=r.converterCamadaItemParaCanvasLayer;exports.converterCanvasLayerParaCamadaItem=r.converterCanvasLayerParaCamadaItem;exports.converterFeicaoParaItem=r.converterFeicaoParaItem;exports.escapeHtml=r.escapeHtml;exports.filtrarCamadasPorBusca=r.filtrarCamadasPorBusca;exports.filtrarFeicoesPorBusca=r.filtrarFeicoesPorBusca;exports.formatarMetricaFeicoes=r.formatarMetricaFeicoes;exports.formatarOpcoesCamadasHierarquicas=r.formatarOpcoesCamadasHierarquicas;exports.gerarChaveStorage=r.gerarChaveStorage;exports.limparEstadoPersistido=r.limparEstadoPersistido;exports.montarEstadoPersistido=r.montarEstadoPersistido;exports.nomeDoMapaBase=r.nomeDoMapaBase;exports.obterIdsVisiveisFeicoes=r.obterIdsVisiveisFeicoes;exports.reidratarCamadasComOverrides=r.reidratarCamadasComOverrides;exports.removerSelecoesInvalidas=r.removerSelecoesInvalidas;exports.renderizarArvoreCamadas=r.renderizarArvoreCamadas;exports.renderizarGridMapasBase=r.renderizarGridMapasBase;exports.renderizarRodapeAcoes=r.renderizarRodapeAcoes;exports.renderizarThumbGeometria=r.renderizarThumbGeometria;exports.salvarEstadoPersistido=r.salvarEstadoPersistido;exports.snapshotCamada=r.snapshotCamada;exports.UIMapaBase=C.UIMapaBase;exports.UISeletorMapaBase=C.UISeletorMapaBase;exports.UIBus=E.UIBus;exports.initZeroJSTriggers=T.initZeroJSTriggers;exports.ListenerBag=g.ListenerBag;exports.carregarLeaflet=S.carregarLeaflet;exports.obterLeafletSincrono=S.obterLeafletSincrono;exports.SafeHTMLElement=d.SafeHTMLElement;exports.definirCustomElement=d.definirCustomElement;exports.isBrowser=d.isBrowser;exports.cliqueVeioDeRotuloExterno=u.cliqueVeioDeRotuloExterno;exports.gerarIdUnico=u.gerarIdUnico;exports.obterRotuloExterno=u.obterRotuloExterno;exports.carregarModuloCanvas=A;exports.carregarModuloMapa=P;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const I=require("./ui-botao-D24oXySA.cjs"),o=require("./ui-switch-D9a8XlVX.cjs"),i=require("./ui-linha-BYAX4W6x.cjs"),n=require("./ui-campo-texto-DauJCde3.cjs"),c=require("./ui-paleta-ferramentas-CsPMTY0G.cjs"),s=require("./ui-badge-SIR81R9l.cjs"),p=require("./ui-card-BrjBL-yo.cjs"),l=require("./ui-modal-CUNbpbZ1.cjs"),e=require("./ui-skeleton-DiOxTBZK.cjs"),a=require("./ui-tabela-propriedades-CjK2gG14.cjs"),U=require("./tools.cjs"),t=require("./ui-controle-cores-uY__TgwW.cjs"),r=require("./camadas.cjs"),C=require("./seletor-mapa-base.cjs"),E=require("./ui-bus-XqBLlTYQ.cjs"),T=require("./zero-js-triggers-CgM9IIQB.cjs"),g=require("./listener-bag-D5omxZ9h.cjs"),S=require("./leaflet-loader-94z5VsdY.cjs"),d=require("./ssr-safe-CiHD1adl.cjs"),u=require("./acessibilidade-CSzX-DkG.cjs"),P=()=>Promise.resolve().then(()=>require("./mapa.cjs")),A=()=>Promise.resolve().then(()=>require("./canvas.cjs"));if(typeof document<"u"){const m=()=>{document.querySelector("ui-mapa, ui-mapa-marcador, ui-mapa-linha")&&!customElements.get("ui-mapa")&&Promise.resolve().then(()=>require("./mapa.cjs")),document.querySelector("ui-canvas-cad")&&!customElements.get("ui-canvas-cad")&&Promise.resolve().then(()=>require("./canvas.cjs"))};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",m,{once:!0}):m()}typeof document<"u"&&T.initZeroJSTriggers();exports.UIBotao=I.UIBotao;exports.UIBotaoPrimario=I.UIBotaoPrimario;exports.ATRIBUTOS_OBSERVADOS_LISTA_FLUTUANTE=o.ATRIBUTOS_OBSERVADOS_LISTA_FLUTUANTE;exports.ListaFlutuantePosicionamento=o.ListaFlutuantePosicionamento;exports.ListaFlutuanteTeclado=o.ListaFlutuanteTeclado;exports.RadioGrupoRegistry=o.RadioGrupoRegistry;exports.UICheckbox=o.UICheckbox;exports.UIListaFlutuante=o.UIListaFlutuante;exports.UIRadio=o.UIRadio;exports.UISelect=o.UISelect;exports.UISwitch=o.UISwitch;exports.UIToggle=o.UIToggle;exports.atualizarEstadoSelecaoLista=o.atualizarEstadoSelecaoLista;exports.criarTemplateListaFlutuante=o.criarTemplateListaFlutuante;exports.renderizarItensLista=o.renderizarItensLista;exports.ATRIBUTOS_OBSERVADOS_SEGMENTED=i.ATRIBUTOS_OBSERVADOS_SEGMENTED;exports.SegmentedIndicadorController=i.SegmentedIndicadorController;exports.UIAvatar=i.UIAvatar;exports.UILinha=i.UILinha;exports.UISegmented=i.UISegmented;exports.UISegmento=i.UISegmento;exports.UITexto=i.UITexto;exports.criarBotaoOpcao=i.criarBotaoOpcao;exports.criarTemplateSegmented=i.criarTemplateSegmented;exports.tratarTecladoSegmented=i.tratarTecladoSegmented;exports.ATRIBUTOS_OBSERVADOS_CAMPO_TEXTO=n.ATRIBUTOS_OBSERVADOS_CAMPO_TEXTO;exports.UICampoTexto=n.UICampoTexto;exports.UIInput=n.UIInput;exports.criarTemplateCampoTexto=n.criarTemplateCampoTexto;exports.sincronizarFeedbackErro=n.sincronizarFeedbackErro;exports.sincronizarIconeSenha=n.sincronizarIconeSenha;exports.sincronizarLabelEPlaceholder=n.sincronizarLabelEPlaceholder;exports.UIIcone=c.UIIcone;exports.UIPaletaFerramentas=c.UIPaletaFerramentas;exports.UIRibbon=c.UIRibbon;exports.UIBadge=s.UIBadge;exports.UIChip=s.UIChip;exports.UIKpi=s.UIKpi;exports.UIMetrica=s.UIMetrica;exports.UIStat=s.UIStat;exports.UITag=s.UITag;exports.UICard=p.UICard;exports.UIDialog=l.UIDialog;exports.UIModal=l.UIModal;exports.aplicarInertForaDoModal=l.aplicarInertForaDoModal;exports.removerInertForaDoModal=l.removerInertForaDoModal;exports.ICONES_ALERTA=e.ICONES_ALERTA;exports.UIAlerta=e.UIAlerta;exports.UIDrawer=e.UIDrawer;exports.UIEsqueleto=e.UIEsqueleto;exports.UIGaveta=e.UIGaveta;exports.UIPainelLateral=e.UIPainelLateral;exports.UIPopover=e.UIPopover;exports.UISheet=e.UISheet;exports.UISkeleton=e.UISkeleton;exports.UIToast=e.UIToast;exports.UITooltip=e.UITooltip;exports.atualizarScrollLockDrawer=e.atualizarScrollLockDrawer;exports.gerenciarTabTrap=e.gerenciarTabTrap;exports.isTopMostDrawer=e.isTopMostDrawer;exports.obterElementosFocaveis=e.obterElementosFocaveis;exports.registrarToastNoBus=e.registrarToastNoBus;exports.GerenciadorValoresPropriedades=a.GerenciadorValoresPropriedades;exports.TabelaOrquestradorDados=a.TabelaOrquestradorDados;exports.TabelaRemotaController=a.TabelaRemotaController;exports.TabelaSelecaoController=a.TabelaSelecaoController;exports.UITabela=a.UITabela;exports.UITabelaPropriedades=a.UITabelaPropriedades;exports.abrirPopoverRedimensionamento=a.abrirPopoverRedimensionamento;exports.alternarCategoria=a.alternarCategoria;exports.alternarDirecaoOrdenacao=a.alternarDirecaoOrdenacao;exports.alternarPosicionamentoFlutuante=a.alternarPosicionamentoFlutuante;exports.aplicarOrdenacaoTabela=a.aplicarOrdenacaoTabela;exports.atualizarCampoVisual=a.atualizarCampoVisual;exports.avaliarExpressaoMatematica=a.avaliarExpressaoMatematica;exports.buscarLinhaPropriedade=a.buscarLinhaPropriedade;exports.colapsarTodasCategorias=a.colapsarTodasCategorias;exports.conectarArrastoFlutuante=a.conectarArrastoFlutuante;exports.conectarPainelControles=a.conectarPainelControles;exports.criarControladorSplitter=a.criarControladorSplitter;exports.criarEditorAcao=a.criarEditorAcao;exports.criarEditorBooleano=a.criarEditorBooleano;exports.criarEditorCorCad=a.criarEditorCorCad;exports.criarEditorCorSwatch=a.criarEditorCorSwatch;exports.criarEditorLinetype=a.criarEditorLinetype;exports.criarEditorLineweight=a.criarEditorLineweight;exports.criarEditorNumero=a.criarEditorNumero;exports.criarEditorReadonly=a.criarEditorReadonly;exports.criarEditorSelecao=a.criarEditorSelecao;exports.criarEditorTexto=a.criarEditorTexto;exports.criarEditorValor=a.criarEditorValor;exports.criarLinhaPropriedade=a.criarLinhaPropriedade;exports.executarOrquestracaoCorpo=a.executarOrquestracaoCorpo;exports.executarOrquestracaoHeader=a.executarOrquestracaoHeader;exports.executarRedimensionamentoColuna=a.executarRedimensionamentoColuna;exports.executarRedimensionamentoTeclado=a.executarRedimensionamentoTeclado;exports.exibirPromptPopoverRedimensionamento=a.exibirPromptPopoverRedimensionamento;exports.expandirTodasCategorias=a.expandirTodasCategorias;exports.focarProximoEditor=a.focarProximoEditor;exports.formatWidth=a.formatWidth;exports.getAlignmentClass=a.getAlignmentClass;exports.getRowHeight=a.getRowHeight;exports.getTextAlign=a.getTextAlign;exports.inicializarScrollVirtualizacao=a.inicializarScrollVirtualizacao;exports.iniciarRedimensionamentoColuna=a.iniciarRedimensionamentoColuna;exports.interpretarIndice=a.interpretarIndice;exports.limitarLarguraColuna=a.limitarLarguraColuna;exports.localizarIndiceItem=a.localizarIndiceItem;exports.montarEstruturaDOM=a.montarEstruturaDOM;exports.normalizarTexto=a.normalizarTexto;exports.orquestrarEstruturaInicial=a.orquestrarEstruturaInicial;exports.proximaDensidade=a.proximaDensidade;exports.redimensionarColunaPorDelta=a.redimensionarColunaPorDelta;exports.registrarAtualizadorEditor=a.registrarAtualizadorEditor;exports.renderizarCategoriasETree=a.renderizarCategoriasETree;exports.renderizarCorpoTabela=a.renderizarCorpoTabela;exports.renderizarHeaderTabela=a.renderizarHeaderTabela;exports.renderizarSeletorTipos=a.renderizarSeletorTipos;exports.sincronizarAtributosTabela=a.sincronizarAtributosTabela;exports.sincronizarPainelControles=a.sincronizarPainelControles;exports.sincronizarSelect=a.sincronizarSelect;exports.tratarMudancaAtributoTabela=a.tratarMudancaAtributoTabela;exports.valoresIguais=a.valoresIguais;exports.ICONES_FERRAMENTAS=U.ICONES_FERRAMENTAS;exports.PALETA_CORES_PADRAO=t.PALETA_CORES_PADRAO;exports.UIControleCores=t.UIControleCores;exports.UISeletorCor=t.UISeletorCor;exports.abrirSeletorCor=t.abrirSeletorCor;exports.coresUnicas=t.coresUnicas;exports.escaparHtml=t.escaparHtml;exports.fecharSeletorCor=t.fecharSeletorCor;exports.normalizarCor=t.normalizarCor;exports.normalizarOpacidade=t.normalizarOpacidade;exports.CamadasDragDropManager=r.CamadasDragDropManager;exports.ICONES=r.ICONES;exports.LIMITE_FEICOES_POR_CAMADA=r.LIMITE_FEICOES_POR_CAMADA;exports.MAPAS_BASE_PADRAO=r.MAPAS_BASE_PADRAO;exports.UICamadas=r.UICamadas;exports.UILayerPanel=r.UILayerPanel;exports.UIPainelCamadas=r.UIPainelCamadas;exports.calcularAreaAnelSimples=r.calcularAreaAnelSimples;exports.calcularAreaPoligono=r.calcularAreaPoligono;exports.calcularComprimentoLinha=r.calcularComprimentoLinha;exports.calcularDistanciaPontos=r.calcularDistanciaPontos;exports.calcularSelecaoFeicao=r.calcularSelecaoFeicao;exports.carregarEstadoPersistido=r.carregarEstadoPersistido;exports.construirHierarquiaCamadas=r.construirHierarquiaCamadas;exports.converterCamadaItemParaCanvasLayer=r.converterCamadaItemParaCanvasLayer;exports.converterCanvasLayerParaCamadaItem=r.converterCanvasLayerParaCamadaItem;exports.converterFeicaoParaItem=r.converterFeicaoParaItem;exports.escapeHtml=r.escapeHtml;exports.filtrarCamadasPorBusca=r.filtrarCamadasPorBusca;exports.filtrarFeicoesPorBusca=r.filtrarFeicoesPorBusca;exports.formatarMetricaFeicoes=r.formatarMetricaFeicoes;exports.formatarOpcoesCamadasHierarquicas=r.formatarOpcoesCamadasHierarquicas;exports.gerarChaveStorage=r.gerarChaveStorage;exports.limparEstadoPersistido=r.limparEstadoPersistido;exports.montarEstadoPersistido=r.montarEstadoPersistido;exports.nomeDoMapaBase=r.nomeDoMapaBase;exports.obterIdsVisiveisFeicoes=r.obterIdsVisiveisFeicoes;exports.reidratarCamadasComOverrides=r.reidratarCamadasComOverrides;exports.removerSelecoesInvalidas=r.removerSelecoesInvalidas;exports.renderizarArvoreCamadas=r.renderizarArvoreCamadas;exports.renderizarGridMapasBase=r.renderizarGridMapasBase;exports.renderizarRodapeAcoes=r.renderizarRodapeAcoes;exports.renderizarThumbGeometria=r.renderizarThumbGeometria;exports.salvarEstadoPersistido=r.salvarEstadoPersistido;exports.snapshotCamada=r.snapshotCamada;exports.UIMapaBase=C.UIMapaBase;exports.UISeletorMapaBase=C.UISeletorMapaBase;exports.UIBus=E.UIBus;exports.initZeroJSTriggers=T.initZeroJSTriggers;exports.ListenerBag=g.ListenerBag;exports.carregarLeaflet=S.carregarLeaflet;exports.obterLeafletSincrono=S.obterLeafletSincrono;exports.SafeHTMLElement=d.SafeHTMLElement;exports.definirCustomElement=d.definirCustomElement;exports.isBrowser=d.isBrowser;exports.cliqueVeioDeRotuloExterno=u.cliqueVeioDeRotuloExterno;exports.gerarIdUnico=u.gerarIdUnico;exports.obterRotuloExterno=u.obterRotuloExterno;exports.carregarModuloCanvas=A;exports.carregarModuloMapa=P;
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/* empty css */
|
|
2
2
|
import { U as c, a as l } from "./ui-botao-Dsj08jjw.js";
|
|
3
3
|
import { A as m, L as u, a as p, R as I, U, b as C, c as S, d as T, e as E, f as g, g as f, h as A, r as x } from "./ui-switch-DO1R0Ce7.js";
|
|
4
|
-
import { A as b, S as L, U as O, a as R, b as v, c as z, d as M, e as D, f as B, t as h } from "./ui-linha-
|
|
4
|
+
import { A as b, S as L, U as O, a as R, b as v, c as z, d as M, e as D, f as B, t as h } from "./ui-linha-aqLlaYi7.js";
|
|
5
5
|
import { A as _, U as y, a as q, c as V, s as w, b as H, d as N } from "./ui-campo-texto-B_OHVGiN.js";
|
|
6
|
-
import { U as k, a as j, b as J } from "./ui-paleta-ferramentas-
|
|
6
|
+
import { U as k, a as j, b as J } from "./ui-paleta-ferramentas-BXXrI1Y7.js";
|
|
7
7
|
import { U as W, a as X, b as Z, c as Q, d as Y, e as $ } from "./ui-badge-BWhoGgo9.js";
|
|
8
8
|
import { U as ra } from "./ui-card-BNYCQ7g-.js";
|
|
9
9
|
import { U as oa, a as sa, b as ta, r as ia } from "./ui-modal-BkYvNP0G.js";
|
|
10
10
|
import { I as ca, U as la, a as da, b as ma, c as ua, d as pa, e as Ia, f as Ua, g as Ca, h as Sa, i as Ta, j as Ea, k as ga, l as fa, o as Aa, r as xa } from "./ui-skeleton-B2Rgrv8o.js";
|
|
11
|
-
import { G as ba, T as La, a as Oa, b as Ra, U as va, c as za, d as Ma, e as Da, f as Ba, g as ha, h as Fa, i as _a, j as ya, k as qa, l as Va, m as wa, n as Ha, o as Na, p as Ga, q as ka, r as ja, s as Ja, t as Ka, u as Wa, v as Xa, w as Za, x as Qa, y as Ya, z as $a, A as ar, B as rr, C as er, D as or, E as sr, F as tr, H as ir, I as nr, J as cr, K as lr, L as dr, M as mr, N as ur, O as pr, P as Ir, Q as Ur, R as Cr, S as Sr, V as Tr, W as Er, X as gr, Y as fr, Z as Ar, _ as xr, $ as Pr, a0 as br, a1 as Lr, a2 as Or, a3 as Rr, a4 as vr, a5 as zr, a6 as Mr } from "./ui-tabela-propriedades-
|
|
11
|
+
import { G as ba, T as La, a as Oa, b as Ra, U as va, c as za, d as Ma, e as Da, f as Ba, g as ha, h as Fa, i as _a, j as ya, k as qa, l as Va, m as wa, n as Ha, o as Na, p as Ga, q as ka, r as ja, s as Ja, t as Ka, u as Wa, v as Xa, w as Za, x as Qa, y as Ya, z as $a, A as ar, B as rr, C as er, D as or, E as sr, F as tr, H as ir, I as nr, J as cr, K as lr, L as dr, M as mr, N as ur, O as pr, P as Ir, Q as Ur, R as Cr, S as Sr, V as Tr, W as Er, X as gr, Y as fr, Z as Ar, _ as xr, $ as Pr, a0 as br, a1 as Lr, a2 as Or, a3 as Rr, a4 as vr, a5 as zr, a6 as Mr } from "./ui-tabela-propriedades-DoL4SE0r.js";
|
|
12
12
|
import { ICONES_FERRAMENTAS as Br } from "./tools.js";
|
|
13
13
|
import { P as Fr, U as _r, a as yr, b as qr, c as Vr, e as wr, f as Hr, n as Nr, d as Gr } from "./ui-controle-cores-DgEza3wF.js";
|
|
14
14
|
import { CamadasDragDropManager as jr, ICONES as Jr, LIMITE_FEICOES_POR_CAMADA as Kr, MAPAS_BASE_PADRAO as Wr, UICamadas as Xr, UILayerPanel as Zr, UIPainelCamadas as Qr, calcularAreaAnelSimples as Yr, calcularAreaPoligono as $r, calcularComprimentoLinha as ae, calcularDistanciaPontos as re, calcularSelecaoFeicao as ee, carregarEstadoPersistido as oe, construirHierarquiaCamadas as se, converterCamadaItemParaCanvasLayer as te, converterCanvasLayerParaCamadaItem as ie, converterFeicaoParaItem as ne, escapeHtml as ce, filtrarCamadasPorBusca as le, filtrarFeicoesPorBusca as de, formatarMetricaFeicoes as me, formatarOpcoesCamadasHierarquicas as ue, gerarChaveStorage as pe, limparEstadoPersistido as Ie, montarEstadoPersistido as Ue, nomeDoMapaBase as Ce, obterIdsVisiveisFeicoes as Se, reidratarCamadasComOverrides as Te, removerSelecoesInvalidas as Ee, renderizarArvoreCamadas as ge, renderizarGridMapasBase as fe, renderizarRodapeAcoes as Ae, renderizarThumbGeometria as xe, salvarEstadoPersistido as Pe, snapshotCamada as be } from "./camadas.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var Kt=Object.defineProperty;var Wt=(a,t,o)=>t in a?Kt(a,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[t]=o;var M=(a,t,o)=>Wt(a,typeof t!="symbol"?t+"":t,o);function R(a){return a.partes&&a.partes.length>1?a.partes:[a.coordenadas]}function to(a){return a.tipo==="LineString"&&!!a.partes&&a.partes.length>1}function Dt(a){return a.length>1?{tipo:"LineString",coordenadas:a[0],partes:a}:{tipo:"LineString",coordenadas:a[0]}}const F=6378137,q=1/298.257222101,mt=q*(2-q),A=a=>a*Math.PI/180;function nt(a){const t=Math.sin(A(a)),o=1-mt*t*t;return{N:F/Math.sqrt(o),M:F*(1-mt)/(o*Math.sqrt(o))}}function oo(a){const{M:t,N:o}=nt(a);return{lat:A(1)*t,lng:A(1)*o*Math.cos(A(a))}}function eo(a,t){const o=F*(1-q),e=q,i=A(t[1]-a[1]),n=Math.atan((1-e)*Math.tan(A(a[0]))),s=Math.atan((1-e)*Math.tan(A(t[0]))),r=Math.sin(n),c=Math.cos(n),l=Math.sin(s),d=Math.cos(s);let h=i,u=0,v=0,x=0,f=0,m=0;for(let g=0;g<100;g++){const p=Math.sin(h),L=Math.cos(h);if(u=Math.hypot(d*p,c*l-r*d*L),u===0)return 0;v=r*l+c*d*L,x=Math.atan2(u,v);const D=c*d*p/u;f=1-D*D,m=f===0?0:v-2*r*l/f;const I=e/16*f*(4+e*(4-3*f)),E=h;if(h=i+(1-I)*e*D*(x+I*u*(m+I*v*(-1+2*m*m))),Math.abs(h-E)<1e-12)break}const P=f*(F*F-o*o)/(o*o),w=1+P/16384*(4096+P*(-768+P*(320-175*P))),O=P/1024*(256+P*(-128+P*(74-47*P))),C=O*u*(m+O/4*(v*(-1+2*m*m)-O/6*m*(-3+4*u*u)*(-3+4*m*m)));return o*w*(x-C)}function Q(a,t){const o=t[0]-a[0],e=t[1]-a[1];if(Math.abs(o)<.1&&Math.abs(e)<.1){const{M:i,N:n}=nt((a[0]+t[0])/2),s=A(o)*i,r=A(e)*n*Math.cos(A((a[0]+t[0])/2));return Math.hypot(r,s)}return eo(a,t)}function K(a,t=!1){let o=0;for(let e=1;e<a.length;e++)o+=Q(a[e-1],a[e]);return t&&a.length>2&&(o+=Q(a[a.length-1],a[0])),o}function pt(a){const t=a.length;if(t<3)return 0;let o=0,e=0;for(let r=0;r<t;r++){const c=a[(r-1+t)%t],l=a[r],d=a[(r+1)%t];o+=A(d[1]-c[1])*Math.sin(A(l[0])),e+=l[0]}const{M:i,N:n}=nt(e/t),s=Math.abs(o*i*n/2);return Number.isFinite(s)?s:0}function At(a){const[t,...o]=a;return t?Math.max(0,pt(t)-o.reduce((e,i)=>e+pt(i),0)):0}const ao=new Intl.NumberFormat("pt-BR",{minimumFractionDigits:4,maximumFractionDigits:4}),gt=new Intl.NumberFormat("pt-BR",{minimumFractionDigits:2,maximumFractionDigits:2});function Ct(a){return`${ao.format(a/1e4)} ha`}function It(a){return a>=1e3?`${gt.format(a/1e3)} km`:`${gt.format(a)} m`}function St(a){return a.tipo==="Polygon"?At(a.aneis):a.tipo==="Circle"?Math.PI*a.raioMetros**2:null}function yt(a){return a.tipo==="LineString"?R(a).reduce((t,o)=>t+K(o),0):a.tipo==="Polygon"?K(a.aneis[0]??[],!0):a.tipo==="Circle"?2*Math.PI*a.raioMetros:null}function Ot(a,t){var i;const o=t??"name";if(o==="area"){const n=St(a.geometria);return n===null?"":Ct(n)}if(o==="extensao"){const n=yt(a.geometria);return n===null?"":It(n)}if(o==="id")return a.id;const e=(i=a.propriedades)==null?void 0:i[o];return e!=null&&e!==""?String(e):t?"":a.id}function Et(a){let t;switch(a.tipo){case"Point":case"Text":t=[a.coordenada];break;case"LineString":t=R(a).flat();break;case"Polygon":t=a.aneis.flat();break;case"Circle":{const i=a.raioMetros/111320,n=i/Math.max(.01,Math.cos(A(a.centro[0])));t=[[a.centro[0]-i,a.centro[1]-n],[a.centro[0]+i,a.centro[1]+n]];break}}const o=t.map(i=>i[0]),e=t.map(i=>i[1]);return[[Math.min(...o),Math.min(...e)],[Math.max(...o),Math.max(...e)]]}const B=16,io=256;function W(a){const[[t,o],[e,i]]=Et(a.geometria);return{minLon:o,minLat:t,maxLon:i,maxLat:e}}function j(a,t){return a.minLon<=t.maxLon&&a.maxLon>=t.minLon&&a.minLat<=t.maxLat&&a.maxLat>=t.minLat}function vt(a){let t=1/0,o=1/0,e=-1/0,i=-1/0;for(const n of a)n.minLon<t&&(t=n.minLon),n.minLat<o&&(o=n.minLat),n.maxLon>e&&(e=n.maxLon),n.maxLat>i&&(i=n.maxLat);return{minLon:t,minLat:o,maxLon:e,maxLat:i}}function Mt(a){const t=a.length,o=Math.ceil(t/B),i=Math.ceil(Math.sqrt(o))*B,n=[...a].sort((r,c)=>r.minLon+r.maxLon-(c.minLon+c.maxLon)),s=[];for(let r=0;r<t;r+=i){const c=n.slice(r,r+i).sort((l,d)=>l.minLat+l.maxLat-(d.minLat+d.maxLat));for(let l=0;l<c.length;l+=B)s.push(c.slice(l,l+B))}return s}function no(a){if(a.length===0)return null;let t=Mt(a).map(o=>({...vt(o),folhas:o}));for(;t.length>1;)t=Mt(t).map(o=>({...vt(o),filhos:o}));return t[0]}class bt{constructor(){M(this,"raiz",null);M(this,"itens",new Map);M(this,"delta",new Map);M(this,"obsoletos",new Set)}get tamanho(){return this.itens.size}construir(t){this.itens.clear();for(const o of t)o.excluida||this.itens.set(o.id,{id:o.id,...W(o)});this.remontar()}inserir(t){this.atualizar(t)}atualizar(t){if(t.excluida){this.remover(t.id);return}const o={id:t.id,...W(t)};this.itens.has(t.id)&&this.obsoletos.add(t.id),this.itens.set(t.id,o),this.delta.set(t.id,o),this.compactarSeNecessario()}remover(t){this.itens.delete(t)&&(this.obsoletos.add(t),this.delta.delete(t),this.compactarSeNecessario())}limpar(){this.itens.clear(),this.remontar()}consultar(t){const o=[],e=this.raiz?[this.raiz]:[];for(;e.length>0;){const i=e.pop();if(j(i,t))if(i.folhas)for(const n of i.folhas)!this.obsoletos.has(n.id)&&j(n,t)&&o.push(n.id);else i.filhos&&e.push(...i.filhos)}for(const i of this.delta.values())j(i,t)&&o.push(i.id);return o}intersecta(t){return this.consultar(t).length>0}caixaDe(t){return this.itens.get(t)}compactarSeNecessario(){this.delta.size+this.obsoletos.size>Math.max(io,this.itens.size*.1)&&this.remontar()}remontar(){this.raiz=no([...this.itens.values()]),this.delta.clear(),this.obsoletos.clear()}}const st=17,G=9,so=1.2;function Nt(a){return!Number.isFinite(a)||a>=st?0:360/(256*2**a)*so}function tt(a){return Number.isFinite(a)?1/Math.max(.05,Math.cos(Math.max(-85,Math.min(85,a))*Math.PI/180)):1}function ro(a,t,o,e){const i=o[1]-t[1],n=(o[0]-t[0])*e,s=i*i+n*n,r=(a[0]-t[0])*e;let c=s===0?0:((a[1]-t[1])*i+r*n)/s;return c=Math.max(0,Math.min(1,c)),Math.hypot(a[1]-(t[1]+c*i),r-c*n)}function rt(a,t,o=1){if(!(t>0)||a.length<3)return a;const e=Number.isFinite(o)&&o>0?o:1,i=new Uint8Array(a.length);i[0]=1,i[a.length-1]=1;const n=[[0,a.length-1]];for(;n.length>0;){const[s,r]=n.pop();let c=0,l=-1;for(let d=s+1;d<r;d++){const h=ro(a[d],a[s],a[r],e);h>c&&(c=h,l=d)}l!==-1&&c>t&&(i[l]=1,n.push([s,l],[l,r]))}return a.filter((s,r)=>i[r]===1)}function Rt(a,t,o=1){if(!(t>0)||a.length<4)return a;const e=[...a,a[0]],i=rt(e,t,o);return i.pop(),i.length>=3?i:a}function wt(a){return(a.tipo==="LineString"||a.tipo==="Polygon")&&a.curva?0:a.tipo==="LineString"?R(a).reduce((t,o)=>t+o.length,0):a.tipo==="Polygon"?a.aneis.reduce((t,o)=>t+o.length,0):0}function co(a,t){var e,i,n,s;const o=Nt(t);if(o===0||wt(a)<G)return a;if(a.tipo==="LineString"){const r=R(a),c=tt(((i=(e=r[0])==null?void 0:e[0])==null?void 0:i[0])??NaN);return Dt(r.map(l=>rt(l,o,c)))}if(a.tipo==="Polygon"){const r=tt(((s=(n=a.aneis[0])==null?void 0:n[0])==null?void 0:s[0])??NaN);return{tipo:"Polygon",aneis:a.aneis.map(c=>Rt(c,o,r))}}return a}const lo=new Set(["previa","prévia","preview","rascunho","draft","proposta"]);function S(a){var o,e;const t=[a.status,(o=a.propriedades)==null?void 0:o.status,(e=a.propriedades)==null?void 0:e.tipo_geometria];for(const i of t)if(typeof i=="string"&&lo.has(i.trim().toLowerCase()))return"previa";return"oficial"}function y(a){var o;const t=a.entidadeId??((o=a.propriedades)==null?void 0:o.entidadeId);return typeof t=="string"||typeof t=="number"?String(t):a.id}const H=(a,t)=>`${a}\0${t}`;class uo{constructor(){M(this,"global",!1);M(this,"individuais",new Set)}alternarIndividual(t,o){const e=H(t,o);return this.individuais.has(e)?this.individuais.delete(e):this.individuais.add(e),this.individuais.has(e)}definirIndividual(t,o,e){const i=H(t,o);e?this.individuais.add(i):this.individuais.delete(i)}individualAtiva(t,o){return this.individuais.has(H(t,o))}static oficiais(t){const o=new Set;for(const e of t)!e.excluida&&S(e)==="oficial"&&o.add(y(e));return o}visivel(t,o){if(S(t)==="oficial")return!0;const e=y(t);return this.global||!o.has(e)||this.individualAtiva(t.camadaId,e)}previaSolicitada(t){return this.global||this.individualAtiva(t.camadaId,y(t))}}const ho=24,fo=2,xt=a=>typeof a=="number"&&Number.isFinite(a),J=a=>Array.isArray(a)&&a.length===2&&xt(a[0])&&xt(a[1]);function mo(a,t){return[2*a[0]-t[0],2*a[1]-t[1]]}function _t(a){return a.some(t=>t.entrada!==void 0||t.saida!==void 0)}function ct(a,t){return[a.saida??a.ponto,t.entrada??t.ponto]}function Ft(a,t){const o=[];for(let e=0;e<a-1;e++)o.push([e,e+1]);return t&&a>2&&o.push([a-1,0]),o}function jt(a,t,o,e,i){const n=1-i,s=n*n*n,r=3*n*n*i,c=3*n*i*i,l=i*i*i;return[s*a[0]+r*t[0]+c*o[0]+l*e[0],s*a[1]+r*t[1]+c*o[1]+l*e[1]]}function po(a,t=!1,o=ho){if(a.length===0)return[];const e=[[a[0].ponto[0],a[0].ponto[1]]];for(const[i,n]of Ft(a.length,t)){const s=a[i],r=a[n];if(!(s.saida===void 0&&r.entrada===void 0)){const[l,d]=ct(s,r);for(let h=1;h<o;h++)e.push(jt(s.ponto,l,d,r.ponto,h/o))}n!==0&&e.push([r.ponto[0],r.ponto[1]])}return e}function zt(a,t){if(a.length===0)return[];const o=[{cmd:"M",pts:[a[0].ponto]}];for(const[e,i]of Ft(a.length,t)){const n=a[e],s=a[i];if(n.saida===void 0&&s.entrada===void 0)o.push({cmd:"L",pts:[s.ponto]});else{const[r,c]=ct(n,s);o.push({cmd:"C",pts:[r,c,s.ponto]})}}return o}function go(a,t,o){const e=n=>String(Math.round(n*100)/100),i=zt(a,t).map(n=>n.cmd+n.pts.map(s=>{const r=o(s);return`${e(r.x)} ${e(r.y)}`}).join(" ")).join("");return i&&t?`${i}Z`:i}function vo(a,t=fo){if(!Array.isArray(a)||a.length<t)return null;const o=[];for(const e of a){if(!e||typeof e!="object"||!J(e.ponto))return null;const i=e,n={ponto:[i.ponto[0],i.ponto[1]]};J(i.entrada)&&(n.entrada=[i.entrada[0],i.entrada[1]]),J(i.saida)&&(n.saida=[i.saida[0],i.saida[1]]),o.push(n)}return _t(o)?o:null}function Mo(a,t){return a.map(o=>{const e={ponto:t(o.ponto)};return o.entrada&&(e.entrada=t(o.entrada)),o.saida&&(e.saida=t(o.saida)),e})}function ot(a){return a.tipo==="LineString"?a.curva&&a.curva.length>=2&&!(a.partes&&a.partes.length>1)?a.curva:null:a.tipo==="Polygon"&&a.curva&&a.curva.length>=3&&a.aneis.length===1?a.curva:null}const T=55,Tt=17,$t=8;function dt(a,t){return t<Tt&&a>$t}function Vt(a){let t=0,o=0;for(const e of a)t+=e.coordenada[0],o+=e.coordenada[1];return[t/a.length,o/a.length]}function xo(a,t,o){if(!dt(a.length,t))return{clusters:[],isolados:a};const e=new Map;for(const s of a){const{x:r,y:c}=o(s.coordenada),l=`${t}:${Math.floor(r/T)}:${Math.floor(c/T)}`,d=e.get(l);d?d.push(s):e.set(l,[s])}const i=[],n=[];for(const[s,r]of e)r.length===1?n.push(r[0]):i.push({chave:s,coordenada:Vt(r),membros:r});return{clusters:i,isolados:n}}class Bt{constructor(t,o){M(this,"celulas",new Map);M(this,"celulaDe",new Map);M(this,"multiplas",new Set);this.zoom=t,this.projetar=o}get total(){return this.celulaDe.size}chaveDoPonto(t){return this.celulaDe.get(t)}celula(t){return this.celulas.get(t)}*celulasAgrupadas(){for(const t of this.multiplas){const o=this.celulas.get(t);o&&(yield[t,o])}}emCluster(t){var e;const o=this.celulaDe.get(t);return o!==void 0&&(((e=this.celulas.get(o))==null?void 0:e.membros.size)??0)>=2}inserir(t){this.remover(t.id);const{x:o,y:e}=this.projetar(t.coordenada),i=`${this.zoom}:${Math.floor(o/T)}:${Math.floor(e/T)}`;let n=this.celulas.get(i);return n||(n={membros:new Map,somaLat:0,somaLon:0},this.celulas.set(i,n)),n.membros.set(t.id,t),n.somaLat+=t.coordenada[0],n.somaLon+=t.coordenada[1],n.membros.size>=2&&this.multiplas.add(i),this.celulaDe.set(t.id,i),i}remover(t){const o=this.celulaDe.get(t);if(o===void 0)return;this.celulaDe.delete(t);const e=this.celulas.get(o),i=e==null?void 0:e.membros.get(t);return e&&i&&(e.membros.delete(t),e.somaLat-=i.coordenada[0],e.somaLon-=i.coordenada[1],e.membros.size<2&&this.multiplas.delete(o),e.membros.size===0&&this.celulas.delete(o)),o}}const Ut=3,lt=.75,Pt=85.0511287798,Po=256;function X(a,t,o){const e=Po*2**o,i=Math.max(-Pt,Math.min(Pt,a)),n=Math.sin(i*Math.PI/180);return{x:(t+180)/360*e,y:(.5-Math.log((1+n)/(1-n))/(4*Math.PI))*e}}const Lo=a=>Number.isFinite(a.minLat)&&Number.isFinite(a.maxLat)&&Number.isFinite(a.minLon)&&Number.isFinite(a.maxLon)&&a.minLat<=a.maxLat&&a.minLon<=a.maxLon;function ut(a,t){if(!Number.isFinite(t)||t<0||!Lo(a))return NaN;const o=X(a.minLat,a.minLon,t),e=X(a.maxLat,a.maxLon,t);return Math.hypot(e.x-o.x,e.y-o.y)}function kt(a,t,o=Ut){if(!a)return!1;const e=ut(a,t);return Number.isFinite(e)&&e<o}function qt(a){return Number.isFinite(a)&&a<1.5?1:2}function Gt(a){const t=new Map;for(const o of a){const e=t.get(o.cor);e?e.push(o):t.set(o.cor,[o])}return t}const Do="#38bdf8";function Ao(a,t,o,e,i,n,s){let r=0;const c=Gt(t);for(const[l,d]of c){let h=!1;for(const u of d){const v=X(u.lat,u.lon,o),x=v.x-e,f=v.y-i;x>=-2&&f>=-2&&x<=n+2&&f<=s+2&&(h||(a.fillStyle=l||Do,a.globalAlpha=lt,h=!0),a.fillRect(Math.round(x-u.lado/2),Math.round(f-u.lado/2),u.lado,u.lado),r++)}}return r}const $="#38bdf8",Xt="#38bdf8",Co=/^(#[0-9a-f]{3,8}|(rgb|hsl)a?\([0-9.,%\s\/-]+\)|[a-z]{3,20})$/i;function z(a,t){return typeof a=="string"&&Co.test(a.trim())?a.trim():t}const _=a=>typeof a=="number"&&Number.isFinite(a);function et(a,t,o=!1){const e=a.estilo??{},i=z(e.corTraco??t.corPrimaria,$),n=a.geometria.tipo,s=n==="Polygon"||n==="Circle",r=n==="Point",c=r&&z(e.corContorno,"")||i,l=r&&_(e.espessuraContorno)&&e.espessuraContorno>=0?e.espessuraContorno:void 0,d=l??(_(e.espessuraTraco)?e.espessuraTraco:void 0)??(_(t.espessuraLinha)?t.espessuraLinha:2),h=_(e.opacidadePreenchimento)?e.opacidadePreenchimento:s?.2:.85;return{cor:o?Xt:c,traco:!(l===0&&!o),peso:o?d+2:d,dash:e.dashArray??(S(a)==="previa"?"6 4":t.dashArray),preencher:s||r,corPreenchimento:z(e.corPreenchimento,i),opacidadePreenchimento:o?Math.min(1,h+.18):h}}function Zt(a,t){var e;const o=((e=a.estilo)==null?void 0:e.tamanhoIcone)??t.tamanhoMarcador??8;return(_(o)&&o>0?o:8)/2}class Ht{constructor(){M(this,"porChave",new Map)}interno(t){const o=`${t.cor}|${t.traco?1:0}|${t.peso}|${t.dash??""}|${t.preencher?1:0}|${t.corPreenchimento}|${t.opacidadePreenchimento}`,e=this.porChave.get(o);return e||(this.porChave.set(o,t),t)}limpar(){this.porChave.clear()}}const Io=.3,Lt=a=>!!a&&typeof a.id=="string"&&!!a.geometria&&typeof a.geometria.tipo=="string";class Jt{constructor(){M(this,"loja",new Map);M(this,"indice",new bt);M(this,"revisao",0);M(this,"revisaoBase",0);M(this,"listaSincronizada",null);M(this,"oficiais",new Set);M(this,"contOficiais",new Map);M(this,"contPrevias",new Map);M(this,"nPrevias",0);M(this,"selecionadas",new Set);M(this,"regra",null);M(this,"revisaoDe",new Map);M(this,"contador",0)}revisaoDaFeicao(t){return this.revisaoDe.get(t)??0}desenhavel(t){return t.oculta?!1:!this.regra||this.regra(t,this.oficiais)}visivelPorVersao(t){return!this.regra||this.regra(t,this.oficiais)}sincronizar(t){const o=t.filter(s=>Lt(s)&&!s.excluida),e=new Set,i=new Set;for(const s of o)i.add(s.id),this.loja.get(s.id)!==s&&e.add(s.id);const n=[...this.loja.keys()].filter(s=>!i.has(s));if(e.size>0||n.length>0){if(this.revisao++,this.revisaoBase++,this.loja.size===0||e.size+n.length>o.length*Io)this.indice.construir(o);else{for(const s of o)e.has(s.id)&&this.indice.atualizar(s);for(const s of n)this.indice.remover(s)}this.loja.clear();for(const s of o)this.loja.set(s.id,s);for(const s of n)this.revisaoDe.delete(s);for(const s of e)this.revisaoDe.set(s,++this.contador);this.recontarOficiais()}this.listaSincronizada=t;for(const s of[...this.selecionadas])i.has(s)||this.selecionadas.delete(s);return{mudadas:[...e],removidas:n,oficiaisMudou:!1}}recontarOficiais(){this.contOficiais=new Map,this.contPrevias=new Map,this.nPrevias=0;for(const t of this.loja.values()){if(S(t)!=="oficial"){this.nPrevias++;const e=y(t);this.contPrevias.set(e,(this.contPrevias.get(e)??0)+1);continue}const o=y(t);this.contOficiais.set(o,(this.contOficiais.get(o)??0)+1)}this.oficiais=new Set(this.contOficiais.keys())}aplicarDelta(t,o){if(!o||o.base!==this.listaSincronizada)return null;const e=new Map,i=(d,h)=>{if(!d||d.excluida||S(d)!=="oficial")return;const u=y(d);e.has(u)||e.set(u,this.oficiais.has(u));const v=(this.contOficiais.get(u)??0)+h;v<=0?(this.contOficiais.delete(u),this.oficiais.delete(u)):(this.contOficiais.set(u,v),this.oficiais.add(u))},n=(d,h)=>{const u=y(d),v=(this.contPrevias.get(u)??0)+h;v<=0?this.contPrevias.delete(u):this.contPrevias.set(u,v)},s=[],r=[],c=d=>{const h=this.loja.get(d);h&&(S(h)==="previa"&&(this.nPrevias--,n(h,-1)),i(h,-1),this.loja.delete(d),this.indice.remover(d),this.selecionadas.delete(d),this.revisaoDe.delete(d),r.push(d))};for(const d of o.removidas??[])c(d);for(const d of o.mudadas??[]){if(!Lt(d))continue;if(d.excluida){c(d.id);continue}const h=this.loja.get(d.id);S(d)==="previa"&&(this.nPrevias++,n(d,1)),h&&(S(h)==="previa"&&(this.nPrevias--,n(h,-1)),i(h,-1)),this.loja.set(d.id,d),this.indice.atualizar(d),i(d,1),this.revisaoDe.set(d.id,++this.contador),s.push(d.id)}let l=!1;if(this.nPrevias>0)for(const[d,h]of e)h!==this.oficiais.has(d)&&(l=!0);return this.listaSincronizada=t,this.revisao++,l&&this.revisaoBase++,{mudadas:s,removidas:r,oficiaisMudou:l}}}const So=256,N=85.0511287798,yo=4007501668557849e-8;function ht(a,t,o,e,i){const n=o>N?N:o<-N?-N:o,s=Math.sin(n*Math.PI/180);a[t]=(e+180)/360*i,a[t+1]=(.5-Math.log((1+s)/(1-s))/(4*Math.PI))*i}const V=a=>So*2**a;function Oo(a,t,o){const e=V(o);return[Math.atan(Math.sinh(Math.PI*(1-2*t/e)))*180/Math.PI,a/e*360-180]}function at(a,t){const o=V(t),e=new Float64Array(a.length*2);for(let i=0;i<a.length;i++){const n=a[i];ht(e,i*2,n[0],n[1],o)}return e}function b(a,t,o){const e=new Float64Array(2);return ht(e,0,a,t,V(o)),e}function Yt(a,t){const o=Math.max(-N,Math.min(N,a));return yo*Math.cos(o*Math.PI/180)/V(t)}function Qt(a,t,o){const e=Yt(a,o),i=t/e;return Number.isFinite(i)&&i>=0?i:0}function Eo(a){let t=1/0,o=1/0,e=-1/0,i=-1/0;for(const n of a)for(let s=0;s+1<n.length;s+=2){const r=n[s],c=n[s+1];Number.isFinite(r)&&Number.isFinite(c)&&(r<t&&(t=r),r>e&&(e=r),c<o&&(o=c),c>i&&(i=c))}return t<=e&&o<=i?{minX:t,minY:o,maxX:e,maxY:i}:null}function bo(a,t,o,e,i,n){const s=i-o,r=n-e,c=s*s+r*r;let l=c===0?0:((a-o)*s+(t-e)*r)/c;return l=l<0?0:l>1?1:l,Math.hypot(a-(o+l*s),t-(e+l*r))}function it(a,t,o){const e=a.length>>1;if(!(t>0)||e<3)return a;let i=a,n=e;o&&(i=new Float64Array((e+1)*2),i.set(a),i[e*2]=a[0],i[e*2+1]=a[1],n=e+1);const s=new Uint8Array(n);s[0]=1,s[n-1]=1;const r=[0,n-1];for(;r.length>0;){const u=r.pop(),v=r.pop();let x=0,f=-1;const m=i[v*2],P=i[v*2+1],w=i[u*2],O=i[u*2+1];for(let C=v+1;C<u;C++){const g=bo(i[C*2],i[C*2+1],m,P,w,O);g>x&&(x=g,f=C)}f!==-1&&x>t&&(s[f]=1,r.push(v,f,f,u))}const c=o?n-1:n;let l=0;for(let u=0;u<c;u++)s[u]&&l++;if(o&&l<3||l===c)return a;const d=new Float64Array(l*2);let h=0;for(let u=0;u<c;u++)s[u]&&(d[h++]=i[u*2],d[h++]=i[u*2+1]);return d}const No=1.2,U=1e-9,Ro=6,k={cor:$,traco:!1,peso:0,dash:void 0,preencher:!1,corPreenchimento:$,opacidadePreenchimento:0},Y=a=>!!a&&Number.isFinite(a.zoom)&&a.zoom>=0&&!!a.caixa&&Number.isFinite(a.caixa.minLat)&&Number.isFinite(a.caixa.maxLat)&&Number.isFinite(a.caixa.minLon)&&Number.isFinite(a.caixa.maxLon);class wo{constructor(){M(this,"camadas",new Map);M(this,"regra",null)}definirCamada(t){if(!t||typeof t.id!="string")return;let o=this.camadas.get(t.id);if(!o){o={def:t,dados:new Jt,zoomCache:-1,geom:new Map,estilos:new Map,lod:new Map,avaliacoesLOD:0,agrupador:null,agrupadorRev:-1,nPontos:0,nPontosRev:-1,previas:new Map,destaques:new Set,revEstilo:0,internador:new Ht,ultima:{total:0,desenhadas:0,marcasLOD:0,clusters:0,marcadoresDom:0,avaliacoesLOD:0}},o.dados.regra=this.regra,this.camadas.set(t.id,o);return}const e=JSON.stringify(o.def.estilo)!==JSON.stringify(t.estilo);o.def=t,e&&(o.revEstilo++,o.estilos.clear(),o.internador.limpar())}removerCamada(t){this.camadas.delete(t)}temCamada(t){return this.camadas.has(t)}definirRegra(t){this.regra=t;for(const o of this.camadas.values())o.dados.regra=t}reavaliarVersoes(t){const o=this.camadas.get(t);o&&(o.dados.revisao++,o.dados.revisaoBase++)}definirFeicoes(t,o){const e=this.camadas.get(t);if(!e)return;const i=Array.isArray(o)?o:[],n=e.dados.sincronizar(i);this.aposMudanca(e,n.mudadas,n.removidas,!0)}aplicarDelta(t,o,e){const i=this.camadas.get(t);if(!i)return;const n=Array.isArray(o)?o:[],s=new Map;if(e){for(const l of e.removidas??[])s.set(l,this.pontoVisivel(i,i.dados.loja.get(l)));for(const l of e.mudadas??[])l&&typeof l.id=="string"&&s.set(l.id,this.pontoVisivel(i,i.dados.loja.get(l.id)))}const r=i.dados.aplicarDelta(n,e);if(!r){this.definirFeicoes(t,n);return}let c=i.nPontos;for(const[l,d]of s){const h=this.pontoVisivel(i,i.dados.loja.get(l));c+=(h?1:0)-(d?1:0)}i.nPontos=Math.max(0,c),this.aposMudanca(i,r.mudadas,r.removidas,r.oficiaisMudou),r.oficiaisMudou||this.manterAgrupador(i,r.mudadas,r.removidas)}pontoVisivel(t,o){var e;return!!o&&((e=o.geometria)==null?void 0:e.tipo)==="Point"&&t.dados.desenhavel(o)}aposMudanca(t,o,e,i){for(const n of o)t.lod.delete(n),t.geom.delete(n),t.estilos.delete(n),t.previas.delete(n);for(const n of e)t.lod.delete(n),t.geom.delete(n),t.estilos.delete(n),t.previas.delete(n),t.destaques.delete(n);i&&(t.agrupador=null)}manterAgrupador(t,o,e){const i=t.agrupador;if(i){for(const n of e)i.remover(n);for(const n of o){const s=t.dados.loja.get(n);s&&s.geometria.tipo==="Point"&&t.dados.desenhavel(s)?i.inserir({id:n,coordenada:s.geometria.coordenada}):i.remover(n)}}}selecionar(t,o){const e=this.camadas.get(t);if(!e)return{entrou:[],saiu:[]};const i=new Set;for(const r of o)e.dados.loja.has(r)&&i.add(r);const n=[],s=[];for(const r of i)e.dados.selecionadas.has(r)||n.push(r);for(const r of e.dados.selecionadas)i.has(r)||s.push(r);e.dados.selecionadas.clear();for(const r of i)e.dados.selecionadas.add(r);return{entrou:n,saiu:s}}selecionadas(t){var o;return((o=this.camadas.get(t))==null?void 0:o.dados.selecionadas)??new Set}previsualizar(t,o){const e=this.camadas.get(t);!e||!o||typeof o.id!="string"||!e.dados.loja.has(o.id)||e.previas.set(o.id,o)}temPrevia(t,o){var e;return((e=this.camadas.get(t))==null?void 0:e.previas.has(o))??!1}destacar(t,o){const e=this.camadas.get(t);e&&(e.destaques=new Set(o))}feicao(t,o){var e;return(e=this.camadas.get(t))==null?void 0:e.dados.loja.get(o)}caixaDe(t,o){var e;return(e=this.camadas.get(t))==null?void 0:e.dados.indice.caixaDe(o)}consultarCaixa(t,o){const e=this.camadas.get(t);if(!e)return[];const i=[];for(const n of e.dados.indice.consultar(o)){const s=e.dados.loja.get(n);s&&!s.oculta&&i.push(s)}return i}feicaoVisivel(t,o){const e=this.camadas.get(t);return!e||e.dados.visivelPorVersao(o)}estatisticas(t){const o=this.camadas.get(t);return o?{...o.ultima,total:o.dados.loja.size,avaliacoesLOD:o.avaliacoesLOD}:null}ehPar(t,o){const e=this.camadas.get(t);return!!e&&this.emPar(e,o)}listaDesenho(t,o){const e=this.origemDe(t),i={vista:t,origem:e,camadas:[]};if(!Y(t))return i;const n=o!=null&&o.camadas?new Set(o.camadas):null,s=[...this.camadas.values()].filter(r=>r.def.visivel&&(!n||n.has(r.def.id)));s.sort((r,c)=>r.def.zIndex-c.def.zIndex);for(const r of s)try{i.camadas.push(this.listarCamada(r,t,(o==null?void 0:o.parte)??"tudo"))}catch{i.camadas.push(this.camadaVazia(r))}return i}origemDe(t){if(t!=null&&t.origemPx&&Number.isFinite(t.origemPx.x)&&Number.isFinite(t.origemPx.y))return t.origemPx;if(!Y(t))return{x:0,y:0};const o=b(t.caixa.maxLat,t.caixa.minLon,t.zoom);return{x:o[0],y:o[1]}}camadaVazia(t){return{camadaId:t.def.id,zIndex:t.def.zIndex,opacidade:t.def.opacidade,itens:[],estatisticas:{total:t.dados.loja.size,desenhadas:0,marcasLOD:0,clusters:0,marcadoresDom:0,avaliacoesLOD:t.avaliacoesLOD}}}prepararZoom(t,o){o!==t.zoomCache&&(t.geom.clear(),t.lod.clear(),t.zoomCache=o)}estiloDe(t,o){const e=t.dados.revisaoDaFeicao(o.id),i=t.estilos.get(o.id);if(i&&i.rev===e&&i.revEstilo===t.revEstilo)return i.estilo;const n=t.internador.interno(et(o,t.def.estilo,!1));return t.estilos.set(o.id,{rev:e,revEstilo:t.revEstilo,estilo:n}),n}emPar(t,o){if(t.dados.contPrevias.size===0)return!1;const e=y(o);return t.dados.contPrevias.has(e)&&t.dados.oficiais.has(e)}comoMarca(t,o,e){var r;const i=o.geometria.tipo;if(i==="Point"||i==="Text"||(r=o.estilo)!=null&&r.mostrarRotulo||this.emPar(t,o))return!1;const n=t.lod.get(o.id);if(n!==void 0)return n;t.avaliacoesLOD++;const s=kt(t.dados.indice.caixaDe(o.id),e);return t.lod.set(o.id,s),s}geometriaProjetada(t,o,e){const i=t.dados.revisaoDaFeicao(o.id),n=t.geom.get(o.id);if(n&&n.rev===i)return n;const s=this.construirGeometria(t,o,e,i);return s&&t.geom.set(o.id,s),s}construirGeometria(t,o,e,i){const n=o.geometria,s=e<st?No:0;if(n.tipo==="Polygon"){const r=[];for(const c of n.aneis??[]){if(!Array.isArray(c)||c.length<3)continue;let l=at(c,e);s>0&&c.length>=G&&(l=it(l,s,!0)),r.push(l)}return r.length>0?{rev:i,partes:r,raioPx:0,marca:!1}:null}if(n.tipo==="LineString"){const r=[];for(const c of R(n)){if(!Array.isArray(c)||c.length<2)continue;let l=at(c,e);s>0&&c.length>=G&&(l=it(l,s,!1)),r.push(l)}return r.length>0?{rev:i,partes:r,raioPx:0,marca:!1}:null}if(n.tipo==="Circle"){const r=n.centro;if(!Array.isArray(r))return null;const c=b(r[0],r[1],e);return{rev:i,partes:[c],raioPx:Qt(r[0],n.raioMetros,e),marca:!1}}return n.tipo==="Point"||n.tipo==="Text"?{rev:i,partes:[b(n.coordenada[0],n.coordenada[1],e)],raioPx:n.tipo==="Point"?Zt(o,t.def.estilo):0,marca:!1}:null}marcaDe(t,o,e){const i=t.dados.revisaoDaFeicao(o.id),n=t.geom.get(o.id);if(n&&n.rev===i)return n;const s=t.dados.indice.caixaDe(o.id);if(!s)return null;const r=b((s.minLat+s.maxLat)/2,(s.minLon+s.maxLon)/2,e);if(!(Number.isFinite(r[0])&&Number.isFinite(r[1])))return null;const c={rev:i,partes:[r],raioPx:qt(ut(s,e)),marca:!0};return t.geom.set(o.id,c),c}itemMarca(t,o,e){const i=this.marcaDe(t,o,e);if(!i)return null;const n=i.item;if(n&&n.feicao===o&&i.revEstilo===t.revEstilo&&n.selecionada===t.dados.selecionadas.has(o.id)&&n.destaque===!0===t.destaques.has(o.id))return n;const s=this.itemBase(t,o,"marca",i.partes,i.raioPx,this.estiloMarca(t,o));return i.item=s,i.revEstilo=t.revEstilo,s}estiloMarca(t,o){const e=o.estilo??{},i=z(e.corPreenchimento??e.corTraco??t.def.estilo.corPrimaria,$);return t.internador.interno({cor:i,traco:!1,peso:0,dash:void 0,preencher:!0,corPreenchimento:i,opacidadePreenchimento:lt})}agrupadorAtivo(t,o){const{dados:e}=t;if(t.nPontosRev!==e.revisaoBase){let s=0;for(const r of e.loja.values())r.geometria.tipo==="Point"&&e.desenhavel(r)&&s++;t.nPontos=s,t.nPontosRev=e.revisaoBase}if(!dt(t.nPontos,o))return t.agrupador=null,null;const i=t.agrupador;if(i&&i.zoom===o&&t.agrupadorRev===e.revisaoBase)return i;const n=new Bt(o,s=>{const r=b(s[0],s[1],o);return{x:r[0],y:r[1]}});for(const s of e.loja.values())s.geometria.tipo==="Point"&&e.desenhavel(s)&&n.inserir({id:s.id,coordenada:s.geometria.coordenada});return t.agrupador=n,t.agrupadorRev=e.revisaoBase,n}itemBase(t,o,e,i,n,s){return{camadaId:t.def.id,id:o.id,forma:e,geometriaEmPx:i,raioPx:n,estilo:s,selecionada:t.dados.selecionadas.has(o.id),feicao:o,...t.destaques.has(o.id)?{destaque:!0}:{}}}caixaComFolga(t){const o=t.caixa,i=360/(256*2**t.zoom)*Ro,n=i*Math.cos((o.minLat+o.maxLat)/2*Math.PI/180);return{minLat:o.minLat-n,maxLat:o.maxLat+n,minLon:o.minLon-i,maxLon:o.maxLon+i}}listarCamada(t,o,e){var C;const{dados:i,def:n}=t,s=e!=="dom",r=e!=="canvas",c=o.zoom;this.prepararZoom(t,c);const l=i.indice.consultar(this.caixaComFolga(o)),d=this.agrupadorAtivo(t,c),h=[],u=[],v=[],x=[],f=[],m={total:i.loja.size,desenhadas:0,marcasLOD:0,clusters:0,marcadoresDom:0,avaliacoesLOD:0},P=g=>{var D;if(!r||!((D=g.estilo)!=null&&D.mostrarRotulo)||g.geometria.tipo==="Text")return;const p=Ot(g,g.estilo.campoRotulo),L=i.indice.caixaDe(g.id);!p||!L||(f.push({camadaId:n.id,id:`rotulo:${g.id}`,forma:"rotulo",geometriaEmPx:[],raioPx:0,estilo:k,selecionada:!1,feicao:g,texto:p,coordenada:[(L.minLat+L.maxLat)/2,(L.minLon+L.maxLon)/2]}),m.marcadoresDom++)},w=g=>{var D;const p=g.geometria;if(p.tipo!=="Point")return;if((D=g.estilo)!=null&&D.icone){if(!r)return;f.push({...this.itemBase(t,g,"icone",[],0,k),coordenada:p.coordenada}),m.marcadoresDom++;return}if(!s)return;const L=this.geometriaProjetada(t,g,c);L&&(x.push(this.itemBase(t,g,"ponto",L.partes,L.raioPx,this.estiloDe(t,g))),m.desenhadas++)};for(const g of l){const p=i.loja.get(g);if(!p||!i.desenhavel(p)||t.previas.has(g))continue;const L=p.geometria;if(L.tipo==="Point"){if(d&&d.emCluster(g)&&(!((C=p.estilo)!=null&&C.icone)||!r||!this.soltoDoCluster(t,d,g)))continue;w(p),P(p);continue}if(L.tipo==="Text"){if(!r)continue;f.push({...this.itemBase(t,p,"texto",[],0,k),coordenada:L.coordenada}),m.marcadoresDom++;continue}if(ot(L)){if(!r)continue;f.push(this.itemBase(t,p,"curva",[],0,this.estiloDe(t,p))),m.marcadoresDom++,P(p);continue}if(!s){P(p);continue}const D=t.geom.get(g),I=D==null?void 0:D.item;if(I&&I.feicao===p&&D.revEstilo===t.revEstilo&&!this.emPar(t,p)&&I.selecionada===i.selecionadas.has(g)&&I.destaque===!0===t.destaques.has(g)){h.push(I),m.marcasLOD++;continue}if(this.comoMarca(t,p,c)){const ft=this.itemMarca(t,p,c);ft&&(h.push(ft),m.marcasLOD++);continue}const E=this.geometriaProjetada(t,p,c);if(!E)continue;const Z=this.estiloDe(t,p);L.tipo==="LineString"?v.push(this.itemBase(t,p,"linha",E.partes,0,Z)):L.tipo==="Circle"?u.push(this.itemBase(t,p,"circulo",E.partes,E.raioPx,Z)):u.push(this.itemBase(t,p,"poligono",E.partes,0,Z)),m.desenhadas++,P(p)}d&&r&&this.listarClusters(t,o,d,f,m,r),m.avaliacoesLOD=t.avaliacoesLOD,e==="tudo"&&(t.ultima=m);const O=h;for(const g of[u,v,x,f])for(const p of g)O.push(p);return{camadaId:n.id,zIndex:n.zIndex,opacidade:n.opacidade,itens:O,estatisticas:m}}listarClusters(t,o,e,i,n,s){const{dados:r,def:c}=t;for(const[l,d]of e.celulasAgrupadas()){const h=d.membros.size;let u=0,v=d.somaLat,x=d.somaLon;for(const P of d.membros.values())r.selecionadas.has(P.id)&&(u++,v-=P.coordenada[0],x-=P.coordenada[1]);const f=h-u,m=[d.somaLat/h,d.somaLon/h];m[0]>=o.caixa.minLat-U&&m[0]<=o.caixa.maxLat+U&&m[1]>=o.caixa.minLon-U&&m[1]<=o.caixa.maxLon+U&&(f<2||!s||(i.push({camadaId:c.id,id:l,forma:"cluster",geometriaEmPx:[],raioPx:0,estilo:k,selecionada:!1,coordenada:[v/f,x/f],total:h,restantes:f}),n.clusters++,n.marcadoresDom++))}}pontoAgrupado(t,o){const e=this.camadas.get(t);return!!(e!=null&&e.agrupador)&&e.agrupador.emCluster(o)&&!e.dados.selecionadas.has(o)}soltoDoCluster(t,o,e){if(t.dados.selecionadas.has(e))return!0;const i=o.chaveDoPonto(e),n=i===void 0?void 0:o.celula(i);if(!n)return!1;let s=0;for(const r of n.membros.keys())t.dados.selecionadas.has(r)||s++;return s===1}membrosDoCluster(t,o){var n;const e=this.camadas.get(t),i=(n=e==null?void 0:e.agrupador)==null?void 0:n.celula(o);return i?[...i.membros.values()].map(s=>({id:s.id,coordenada:s.coordenada})):[]}listaSobreposicao(t,o){var r;const e=this.camadas.get(t);if(!e||!Y(o))return null;this.prepararZoom(e,o.zoom);const i=[],n=new Set([...e.dados.selecionadas,...e.previas.keys(),...e.destaques]),s=e.agrupador;if(s&&e.dados.selecionadas.size>0){const c=new Set;for(const l of e.dados.selecionadas){const d=s.chaveDoPonto(l);d!==void 0&&c.add(d)}for(const l of c){const d=s.celula(l);if(!d||d.membros.size<2)continue;const h=[...d.membros.keys()].filter(u=>!e.dados.selecionadas.has(u));h.length===1&&n.add(h[0])}}for(const c of n){const l=e.dados.loja.get(c);if(!l||!e.dados.desenhavel(l))continue;const d=e.previas.get(c),h=d??l,u=h.geometria;if(u.tipo==="Text"||ot(u)||u.tipo==="Point"&&((r=h.estilo)!=null&&r.icone))continue;const v=d?null:e.dados.indice.caixaDe(c);if(v&&!j(v,o.caixa))continue;const x=e.dados.selecionadas.has(c)||!!d;if(!x&&!e.destaques.has(c)&&!(u.tipo==="Point"&&(s!=null&&s.emCluster(c))))continue;const f=d?this.construirGeometria(e,h,o.zoom,-1):this.geometriaProjetada(e,h,o.zoom);if(!f)continue;const m=e.internador.interno(et(h,e.def.estilo,x)),P=u.tipo==="LineString"?"linha":u.tipo==="Circle"?"circulo":u.tipo==="Point"?"ponto":"poligono";i.push({camadaId:t,id:c,forma:P,geometriaEmPx:f.partes,raioPx:f.raioPx,estilo:m,selecionada:x,feicao:h,...e.destaques.has(c)?{destaque:!0}:{}})}return{camadaId:t,zIndex:e.def.zIndex,opacidade:e.def.opacidade,itens:i,estatisticas:{total:e.dados.loja.size,desenhadas:i.length,marcasLOD:0,clusters:0,marcadoresDom:0,avaliacoesLOD:e.avaliacoesLOD}}}selecaoAfetaAgrupamento(t,o){var i;const e=this.camadas.get(t);if(!e||!e.agrupador)return!1;for(const n of o)if(((i=e.dados.loja.get(n))==null?void 0:i.geometria.tipo)==="Point")return!0;return!1}}exports.AgrupadorCluster=Bt;exports.CELULA_CLUSTER_PX=T;exports.COR_PADRAO=$;exports.COR_SELECAO=Xt;exports.DadosCamada=Jt;exports.IndiceEspacial=bt;exports.InternadorEstilos=Ht;exports.LIMITE_MARCA_PX=Ut;exports.MAX_PONTOS_SEM_CLUSTER=$t;exports.MIN_VERTICES_SIMPLIFICAR=G;exports.MotorFormas=wo;exports.OPACIDADE_MARCA=lt;exports.RegraVersoes=uo;exports.ZOOM_DESMEMBRAR=Tt;exports.ZOOM_SEM_SIMPLIFICACAO=st;exports.agruparMarcasPorCor=Gt;exports.agruparPontos=xo;exports.amostrarCurva=po;exports.areaDaGeometria=St;exports.areaMetros2=At;exports.caixaDaFeicao=W;exports.caixaPx=Eo;exports.caixasSeTocam=j;exports.caminhoSvg=go;exports.centroDe=Vt;exports.comprimentoMetros=K;exports.controlesDoSegmento=ct;exports.corSegura=z;exports.criarLinha=Dt;exports.deveAgrupar=dt;exports.diagonalPx=ut;exports.distanciaMetros=Q;exports.ehMarca=kt;exports.ehMultilinha=to;exports.entidadeDe=y;exports.escalaDoZoom=V;exports.escalaLatitude=tt;exports.espelhoDaAlca=mo;exports.estiloVetorDe=et;exports.extensaoDaGeometria=yt;exports.formatarArea=Ct;exports.formatarExtensao=It;exports.ladoMarca=qt;exports.latLonDoMundo=Oo;exports.limitesDaGeometria=Et;exports.metrosPorGrau=oo;exports.metrosPorPixel=Yt;exports.moverNos=Mo;exports.normalizarNos=vo;exports.nosDaGeometria=ot;exports.partesDaLinha=R;exports.passosDaCurva=zt;exports.pintarMarcas=Ao;exports.pontoDaCubica=jt;exports.projetarCentro=b;exports.projetarEm=ht;exports.projetarMercator=X;exports.projetarVertices=at;exports.raioCirculoPx=Qt;exports.raioPontoPx=Zt;exports.simplificarAnel=Rt;exports.simplificarGeometria=co;exports.simplificarLinha=rt;exports.simplificarPx=it;exports.statusDe=S;exports.temAlcas=_t;exports.textoRotulo=Ot;exports.toleranciaPorZoom=Nt;exports.vertices=wt;
|