@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.
Files changed (69) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +3 -3
  3. package/dist/canvas.cjs +70 -70
  4. package/dist/canvas.js +3125 -2473
  5. package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +24 -1
  6. package/dist/components/ui-barra-ferramentas/paleta-atalhos.d.ts +10 -3
  7. package/dist/components/ui-barra-ferramentas/ribbon-render.d.ts +10 -2
  8. package/dist/components/ui-barra-ferramentas/ribbon-teclado.d.ts +10 -3
  9. package/dist/components/ui-barra-ferramentas/tipos.d.ts +31 -0
  10. package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +12 -0
  11. package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +16 -0
  12. package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +15 -0
  13. package/dist/core.cjs +1 -1
  14. package/dist/core.js +1 -1
  15. package/dist/custom-elements.json +8934 -8415
  16. package/dist/data.cjs +1 -1
  17. package/dist/data.js +1 -1
  18. package/dist/gerencigeo-canvas/curva_leaflet.d.ts +2 -2
  19. package/dist/gerencigeo-canvas/feature_curvas.d.ts +3 -1
  20. package/dist/gerencigeo-canvas/feature_lod.d.ts +38 -0
  21. package/dist/gerencigeo-canvas/feature_metricas.d.ts +9 -0
  22. package/dist/gerencigeo-canvas/feature_simplificacao.d.ts +16 -8
  23. package/dist/gerencigeo-canvas/index.d.ts +7 -0
  24. package/dist/gerencigeo-canvas/layer_hit_test.d.ts +22 -0
  25. package/dist/gerencigeo-canvas/layer_manager.d.ts +5 -0
  26. package/dist/gerencigeo-canvas/motor/dados-camada.d.ts +39 -0
  27. package/dist/gerencigeo-canvas/motor/estilo.d.ts +28 -0
  28. package/dist/gerencigeo-canvas/motor/geometria-px.d.ts +27 -0
  29. package/dist/gerencigeo-canvas/motor/index.d.ts +5 -0
  30. package/dist/gerencigeo-canvas/motor/motor-formas.d.ts +107 -0
  31. package/dist/gerencigeo-canvas/motor/tipos.d.ts +100 -0
  32. package/dist/gerencigeo-canvas/renderers/canvas_formas_leaflet.d.ts +87 -0
  33. package/dist/gerencigeo-canvas/renderers/feicoes_canvas_renderer.d.ts +58 -0
  34. package/dist/gerencigeo-canvas/renderers/feicoes_despachante.d.ts +31 -0
  35. package/dist/gerencigeo-canvas/renderers/feicoes_renderer.d.ts +48 -9
  36. package/dist/gerencigeo-canvas/renderers/marcadores_feicoes.d.ts +11 -0
  37. package/dist/gerencigeo-canvas/renderers/marcas_lod_layer.d.ts +19 -0
  38. package/dist/gerencigeo-canvas/renderers/renderizador_feicoes_tipos.d.ts +44 -0
  39. package/dist/gerencigeo-canvas/renderers/renderizador_formas.d.ts +95 -0
  40. package/dist/gerencigeo-canvas/renderers/selecao_visual.d.ts +6 -0
  41. package/dist/gerencigeo-canvas/types.d.ts +2 -0
  42. package/dist/index.cjs +1 -1
  43. package/dist/index.js +3 -3
  44. package/dist/motor-BB6tB6U-.cjs +1 -0
  45. package/dist/motor-CFI84lM2.js +1301 -0
  46. package/dist/motor.cjs +1 -0
  47. package/dist/motor.d.ts +7 -0
  48. package/dist/motor.js +52 -0
  49. package/dist/register.cjs +1 -1
  50. package/dist/register.js +3 -3
  51. package/dist/svg-seguro-ChVJ2L2z.js +74 -0
  52. package/dist/svg-seguro-J2RM1Ssf.cjs +1 -0
  53. package/dist/tabela.cjs +1 -1
  54. package/dist/tabela.js +1 -1
  55. package/dist/tipos-elementos.d.ts +13 -0
  56. package/dist/tipos-vue.d.ts +8 -0
  57. package/dist/tools.cjs +1 -1
  58. package/dist/tools.js +1 -1
  59. package/dist/{ui-linha-C6HBnsaw.cjs → ui-linha-BYAX4W6x.cjs} +5 -5
  60. package/dist/{ui-linha-nCDh2wPm.js → ui-linha-aqLlaYi7.js} +57 -51
  61. package/dist/ui-paleta-ferramentas-BXXrI1Y7.js +1233 -0
  62. package/dist/ui-paleta-ferramentas-CsPMTY0G.cjs +21 -0
  63. package/dist/{ui-tabela-propriedades-DzZlyNZ_.cjs → ui-tabela-propriedades-CjK2gG14.cjs} +1 -1
  64. package/dist/{ui-tabela-propriedades-D9Echt2X.js → ui-tabela-propriedades-DoL4SE0r.js} +1 -1
  65. package/package.json +6 -1
  66. package/dist/svg-seguro-BsbNQqpd.js +0 -50
  67. package/dist/svg-seguro-C76iLlAZ.cjs +0 -1
  68. package/dist/ui-paleta-ferramentas-Ksh6gMW3.js +0 -890
  69. package/dist/ui-paleta-ferramentas-bDLPbiGA.cjs +0 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,70 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.9.0 — 2026-10-23
4
+
5
+ ### Junta a 2.8.2 com a linha 2.6.1–2.8.1
6
+
7
+ - **Atenção a quem instalou a 2.8.2:** ela foi publicada a partir de um branch baseado na 2.6.0 e **não continha** o que saiu na 2.6.1, 2.7.0, 2.8.0 e 2.8.1 (entre outros: `<ui-linha>` e a altura única dos controles; popups e câmera só a pedido no `<ui-canvas-cad>`; busca por nome de camada e mapa base recolhível no `<ui-camadas>`; as correções de robustez e acessibilidade da 2.7.0 em `<ui-tooltip>`, `<ui-modal>`, `<ui-mapa>`, `<ui-tabela>`, `<ui-camadas>` e `<ui-canvas-cad>`). A 2.9.0 traz as duas linhas juntas: tudo da 2.8.1 mais tudo da 2.8.2 (medidas no elipsoide GRS80 e as pendências do ribbon e da paleta).
8
+ - As mudanças da 2.8.2 no `<ui-ribbon>` e na `<ui-paleta-ferramentas>` foram portadas para os módulos extraídos na 2.7.0: grupo colapsado, botão dividido e lançador de diálogo em `ribbon-render.ts` (os cliques seguem delegados pelo painel); ativação manual das abas em `ribbon-teclado.ts` (`acaoDaTeclaAba` ganha a ação `ativar`); atalhos compostos e a paleta "dona" dos atalhos em `paleta-atalhos.ts` (`resolverAtalho` aceita o evento de teclado; `paletaDonaDosAtalhos`).
9
+
10
+ ### `<ui-canvas-cad>`: desenho de muitas formas (Fases 0 e 1 do motor de formas)
11
+
12
+ - **LOD por tamanho em pixels:** feição (linha, polígono, círculo) com diagonal abaixo de 3 px na tela deixa de ser um objeto Leaflet e vira uma **marca de 1–2 px** na cor do preenchimento/contorno, pintada em lote por cor num canvas por camada (`feature_lod.ts`, `renderers/marcas_lod_layer.ts`). O mapa não fica "furado". Sempre em detalhe completo: selecionada (e em edição), com rótulo e em par oficial × prévia; ponto e texto nunca viram marca. Hit-test, snap, caixa, laço e hover seguem na geometria original, então uma feição de 1 px continua clicável. Reavaliado ao mudar de zoom, não a cada pan.
13
+ - **Seleção incremental:** `aplicarSelecao` deixou de reconciliar a camada inteira. Só as feições que mudaram de estado são tocadas, e só no estilo (`setStyle`/`setIcon`, sem `setLatLngs`); a camada só é reconciliada quando há ponto sob agrupamento (selecionado sai do cluster). Selecionar 1 feição em 100 mil: de ~60 ms síncronos para ~6 ms (medido no navegador).
14
+ - **Simplificação em pixels:** a tolerância de 1,2 px passa a valer para feições com **mais de 8 vértices** (antes 40) em **qualquer zoom abaixo de 17** (antes 12). `simplificarLinha`/`simplificarAnel` ganham o parâmetro opcional `escalaLat` e a tolerância deixa de ser 1/cos(lat) vezes maior na vertical (2× a 60° de latitude).
15
+ - **Instrumentação:** `FeicoesLayerRenderer.estatisticas()` ganha `marcasLOD` e `avaliacoesLOD`; novo `idsDesenhados()`. Página de benchmark `bench/bench-formas.html` (rAF por canal de mensagens e `getImageData`, dados sintéticos com semente fixa) para medir mudança de vista, seleção e ocultar/exibir no navegador.
16
+ - **Correções (Regra #0):** `feicaoNoPonto` estourava a pilha (`Math.max(...xs)`) em polígono com ~120 mil vértices ou mais; `toleranciaPorZoom(NaN)` colapsava geometrias a 2 pontos; uma feição que o Leaflet recusa (coordenada NaN) derrubava a reconciliação da camada inteira e agora fica sem desenho.
17
+
18
+ **Mudanças de comportamento**
19
+
20
+ - Feições minúsculas não estão mais em `grupo.getLayers()` nem em `map._layers`: quem contava camadas Leaflet para medir desenho deve usar `estatisticas()` (o app usa `map._layers` só no benchmark).
21
+ - O desenho de feições com mais de 8 vértices é mais simplificado (até 1,2 px de desvio) abaixo do zoom 17. A geometria da feição nunca é alterada.
22
+ - O clique numa marca passa pelo hit-test central do mapa (`layer_hit_test`: nova `FonteHit`), não por um objeto Leaflet: uma ação `feicao-clique` por clique, com a mesma ordem das formas (linha antes de área, camada do topo, menor área) e alternância em cliques repetidos sobre marcas empilhadas (até 20).
23
+ - Cada camada com marcas ganha um canvas extra (removido quando não há marcas). Não foi consolidado nesta fase.
24
+
25
+ ### Motor das formas headless e renderizador Canvas opt-in (Fases 2 e 3)
26
+
27
+ - **Novo atributo/propriedade `renderizador`** em `<ui-canvas-cad>`: `leaflet` (padrão, inalterado) ou `canvas`. Com `canvas`, as camadas de feições são desenhadas por um motor próprio em Canvas 2D em vez de um objeto Leaflet por feição. Trocar o valor em tempo de execução recria só as camadas de feições (`CanvasLayerManager.recriarCamadasDoTipo`), mantendo dados e seleção. Valor inválido cai em `leaflet`. Guia: [`docs/motor-formas.md`](docs/motor-formas.md).
28
+ - **`estatisticasFeicoes(camadaId)`:** contadores da camada desenhada (`total`, `materializadas`, `marcasLOD`, `clusters`, `avaliacoesLOD` e, no caminho canvas, `desenhadas`, `marcadoresDom`, `canvases`; mais `renderizador`), para diagnóstico e benchmark. `null` se a camada não está desenhada.
29
+ - **Motor headless** (`src/gerencigeo-canvas/motor/`, L2, sem DOM e sem Leaflet; roda em Node e serve para Web Worker): `MotorFormas` com `definirCamada`, `definirFeicoes`, `aplicarDelta`, `listaDesenho(vista, { camadas, parte })`, `listaSobreposicao`, `consultarCaixa`, seleção, `previsualizar`, `destacar` e clusters. Estilo resolvido compartilhado pelos dois renderizadores (`estilo.ts`), geometria em `Float64Array` com projeção própria e Douglas-Peucker em px (`geometria-px.ts`), loja + índice + oficial × prévia (`dados-camada.ts`).
30
+ - **Novo entrypoint `@thibezer/ui-components-kit/motor`** (`src/motor.ts`): o motor sem o componente. O `check-layers` garante que nada alcançado por ele importa `leaflet` (`dist/motor.js` não importa).
31
+ - **Renderizador Canvas** (`renderers/renderizador_formas.ts`, `PintorCanvas2D`): pinta forma a forma, agrupado por estilo, com recorte. **Pan incremental** (`renderers/canvas_formas_leaflet.ts`): o bitmap é deslocado em pixels de mundo e só as faixas expostas são listadas e pintadas. Seleção, hover e edição vão para uma sobreposição única por mapa, sem repintar a base. Clique e hover passam pelo hit-test central (`FonteHit`).
32
+ - **Números com GPU** (máquina do dono, canvas × leaflet intercalados; tabelas em `docs/RELATORIO-motor-formas.md`): o canvas fica de 2 a 6 vezes abaixo do leaflet em todos os tamanhos. Mudança de vista: 20 mil em zoom 12, 90–222 contra 473–676 ms; 100 mil em zoom 15, 166–197 contra 811–1 652 ms. Selecionar 2 000 feições numa camada de 50 mil: 114 contra 1 316 ms. As metas absolutas do prompt (zoom 12: 20 mil ≤ 60 ms, 50 mil ≤ 100 ms, 100 mil ≤ 200 ms) não foram atingidas.
33
+ - **Desempenho do caminho canvas:** o item da marca de LOD fica em cache por zoom e é reaproveitado no pan enquanto feição, estilo da camada, seleção e destaque não mudam (lista de 100 mil marcas em zoom 12: de ~390 para ~140 ms por mudança de vista, no Node). Canvas em branco (camada sem nada na vista, sobreposição sem seleção) não é mais deslocado, limpo nem redimensionado a cada pan: cada chamada de desenho fazia o navegador reenviar o canvas inteiro ao compositor (1 000 formas em zoom 18: de ~130 para ~30 ms por pan, medido sem GPU). Camada com até 500 itens na vista é repintada inteira no pan em vez de ter o bitmap deslocado (`CanvasFormas.limiteRepintar`, ajustável; também por instância): com poucas formas, deslocar o bitmap de 3072×1920 custava 3–5× mais que repintar e deixava o canvas mais lento que o leaflet (1 000 formas em zoom 12: de ~200 para ~60 ms).
34
+ - **Correções** achadas pela suíte de equivalência: marca de LOD antiga ficava na tela quando a feição passava a ponto agrupado (também no caminho `leaflet`); ícone selecionado ou único restante numa célula de cluster sumia no caminho canvas.
35
+
36
+ **Mudanças de comportamento do caminho `canvas`** (o caminho `leaflet` não muda)
37
+
38
+ - Preenchimento translúcido é pintado forma a forma: polígonos sobrepostos da mesma camada continuam escurecendo onde se cruzam, como no Leaflet. A ordem de desenho dentro da camada é por grupo de estilo, não por ordem de inserção.
39
+ - Há um canvas por camada de feições mais uma sobreposição por mapa (não 2 canvases no total). Opacidade e visibilidade seguem o pane da camada; a sobreposição ignora a opacidade da camada (a seleção aparece sempre cheia).
40
+ - Curvas Bézier (`LinhaCurva`/`PoligonoCurvo`), ícone, texto, cluster e rótulo continuam como objetos/marcadores Leaflet dentro do mesmo renderizador.
41
+ - As feições não aparecem em `grupo.getLayers()` nem em `map._layers`; use `estatisticasFeicoes()`.
42
+
43
+ ## 2.8.2 — 2026-10-23
44
+
45
+ > Publicada a partir de um branch baseado na 2.6.0: não inclui a 2.6.1, a 2.7.0, a 2.8.0 nem a 2.8.1. Use a 2.9.0, que junta as duas linhas.
46
+
47
+ ### Canvas de feições: medidas no elipsoide GRS80
48
+
49
+ - **Distância, comprimento e área** (`feature_metricas`) deixam a esfera de 6371 km: distância pela escala local do elipsoide (M e N) até 0,1° e Vincenty acima disso; área por Σ(λ[i+1]−λ[i−1])·sen φ·M·N/2. Antes o erro chegava a 0,5% na distância e 0,45% na área; agora fica abaixo de 0,01% na área e de 2e-7 na distância curta (linha Flinders–Buninyong confere em milímetros).
50
+ - **Deslocamentos, offsets e alça de borda do círculo** (`feature_algoritmos`, `feature_edicao_ops`) usam a mesma escala (`metrosPorGrau`, exportada), para o raio lido da alça bater com o desenhado.
51
+
52
+ ### `<ui-ribbon>` e `<ui-paleta-ferramentas>`: pendências de UX, acessibilidade e robustez
53
+
54
+ - **Harmonização de bordas, raios e alinhamento vertical no Ribbon**: botões pequenos agora utilizam `--ui-raio-sm` (4px) com `padding: 0 8px` proporcional; colunas de ferramentas recebem `gap: 2px` evitando colisão de cantos arredondados entre itens adjacentes; botões grandes têm altura calibrada em 76px (equivalente a 3 slots de 24px + gaps) com área de itens centrada verticalmente; grupos sem rótulo não geram nó vazio, eliminando o espaçamento inferior fantasma e garantindo margens perfeitamente simétricas.
55
+ - **Tooltip estilizado leve (M2)**: substituição do `title` nativo do browser por tooltip no Shadow DOM exibido em `focus-visible` e `pointerover`, com renderização do atalho formatado (`kbd`). Remoção de `aria-label` duplicado em botões que já possuem rótulo visível.
56
+ - **Colapso automático de grupos no Ribbon (A4)**: suporte a `prioridade` em `RibbonGrupo` e colapso dinâmico via `ResizeObserver` quando o espaço é insuficiente, transformando o grupo em botão único com flyout (estilo Office).
57
+ - **Botão dividido e Lançador de Diálogo (M4)**: suporte a `item.dividido` no ribbon (ação primária + gatilho de menu independente) e botão lançador de diálogo opcional (`grupo.lancadorDialogo`) com emissão do evento `ui-grupo-dialogo`.
58
+ - **Atalhos compostos e escopo multi-paletas (M7/B9)**: suporte a atalhos combinados (`Ctrl+Z`, `Shift+V`, `Esc`, etc.) via `correspondeAtalho`. No ribbon, suporte ao atributo `atalhos` e `keytips` (Alt). Conflito entre múltiplas paletas com atalhos na mesma página resolvido via escopo de foco (`:focus-within`) e ordenação DOM.
59
+ - **Navegação em grade de 2 colunas (M9)**: em paletas verticais com `colunas="2"`, navegação bidimensional intuitiva com `ArrowUp`, `ArrowDown`, `ArrowLeft` e `ArrowRight` respeitando a ordem visual e layout RTL.
60
+ - **Ativação manual de abas (M10)**: atributo opt-in `ativacao-manual` e propriedade `ativacaoManual` no ribbon, onde setas apenas transferem o foco do teclado e Enter/Espaço ativam a aba.
61
+ - **Fechamento de menu no window blur (M8)**: removido fechamento indevido em `window blur` para permitir inspeção no DevTools e troca de janelas; menus fecham apenas por clique fora, `Escape` ou rolagem.
62
+ - **Exclusividade configurável de ferramentas no Ribbon (B8)**: suporte a `tipo: 'ferramenta'` com seleção única por grupo e propriedade `grupo.exclusivo` (padrão `true`, `false` para múltipla ativação).
63
+ - **Submenus aninhados**: suporte a múltiplos níveis de `filhos` dentro de `filhos` na paleta e no ribbon, com abertura/fechamento via `ArrowRight` e `ArrowLeft` (respeitando RTL).
64
+ - **Modo controlado sem mutação de dados (A1)**: propriedade `modoControlado` e atributos `modo-controlado` / `copiar-dados` para clonagem profunda na entrada, garantindo que objetos do consumidor não sofram mutações.
65
+ - **IDs em SVG inline e allowlist (B1)**: prefixagem de IDs em `<defs>` de ícones SVG (`url(#...)` e `href`) no `svg-seguro.ts` para evitar colisões no DOM, e aviso em console para elementos descartados pela allowlist.
66
+ - **SSR e prevenção de layout shift (B9)**: reserva de altura mínima no `:host` do ribbon para evitar Cumulative Layout Shift (CLS) antes da hidratação.
67
+
3
68
  ## 2.8.1 — 2026-10-21
4
69
 
5
70
  ### `<ui-canvas-cad>`: popups e câmera só a pedido (como CAD/GIS)
package/README.md CHANGED
@@ -749,13 +749,13 @@ window.addEventListener('message', (event) => {
749
749
  | `<ui-stat>` | Cartão KPI de estatísticas, métricas e tendências. | `rotulo`, `valor`, `variacao`, `tendencia` (`alta`, `baixa`, `neutro`) | - |
750
750
  | `<ui-tabela>` | Tabela orientada a dados, virtualizada tipo Excel. **Teclado**: cabeçalhos ordenáveis são botões (Tab + Enter/Espaço, com `aria-sort`); nas linhas, ↑/↓, Home/End e PageUp/PageDown movem o foco e Enter/Espaço selecionam (`aria-current`). A seleção é mantida ao ordenar e filtrar. Nome acessível via `aria-label`. | `colunas`, `dados`, `src`, `densidade`, `aria-label` | `ui-sort`, `ui-column-resize`, `ui-linha-clique` (demais eventos: ver seção 4) |
751
751
  | `<ui-tabela-propriedades>` | Inspetor de propriedades técnicas padrão AutoCAD & Revit com cálculos matemáticos inline (+, -, *, /, ^, %), arraste de valor contínuo (scrubbing), splitter redimensionável e editores CAD. | `categorias`, `tipo-objeto`, `splitter-pos`, `modo-aplicar`, `filtro` | `ui-propriedade-alterada`, `ui-aplicar`, `ui-desfazer`, `ui-editar-tipo`, `ui-acao-clique`, `ui-quick-select`, `ui-calculadora` |
752
- | `<ui-ribbon>` | Barra de ferramentas em abas e grupos (estilo AutoCAD / Word / Excel): botões grandes e pequenos em colunas de 3, toggles, menus suspensos, abas contextuais, modo recolhido (duplo clique na aba) e navegação por teclado (roving tabindex). `aba-ativa` pode ser definido antes de `abas` (fica pendente); `aria-label` e `rotulo-abas` rotulam a toolbar e o tablist; `ui-ferramenta` é cancelável (`preventDefault()` reverte o toggle); `atalho` é só texto no ribbon. Use `id` únicos e `rotulo`/`rotuloAcessivel` em botões só de ícone. | `abas`, `aba-ativa`, `recolhido`, `compacto`, `aria-label`, `rotulo-abas` | `ui-ferramenta`, `ui-aba-change`, `ui-recolhido-change` |
753
- | `<ui-paleta-ferramentas>` | Paleta de ferramentas (estilo Illustrator / Photoshop): seleção exclusiva, grupos com flyout (clique longo, botão direito ou seta), 1 ou 2 colunas, vertical/horizontal e atalhos de teclado que percorrem o grupo. `valor` pode vir antes de `ferramentas` (pendente) e `valor = ''` / `limpar()` remove a seleção; `ui-ferramenta` dispara sempre e é cancelável (`preventDefault()` reverte), `ui-change`/`ui-selecionar` só quando a seleção muda (ouça um deles, não ambos). Atalhos: use `atalhos` em uma paleta por página. | `ferramentas`, `valor`, `orientacao`, `colunas`, `tamanho`, `atalhos`, `aria-label` | `ui-change`, `ui-selecionar`, `ui-ferramenta` |
752
+ | `<ui-ribbon>` | Barra de ferramentas em abas e grupos (estilo AutoCAD / Word / Excel): botões grandes e pequenos em colunas de 3, split buttons (`item.dividido`), toggles, exclusividade configurável (`grupo.exclusivo`), menus suspensos com submenus aninhados, lançador de diálogo (`grupo.lancadorDialogo`), colapso automático responsivo de grupos (`ResizeObserver` + `grupo.prioridade`), abas contextuais, ativação manual de abas (`ativacao-manual`), atalhos de teclado e KeyTips (`keytips`), modo controlado sem mutação (`copiar-dados`), tooltips estilizados e navegação por teclado (roving tabindex). `aba-ativa` pode ser definido antes de `abas` (fica pendente); `aria-label` e `rotulo-abas` rotulam a toolbar e o tablist; `ui-ferramenta` é cancelável (`preventDefault()` reverte o toggle). Use `id` únicos e `rotulo`/`rotuloAcessivel` em botões só de ícone. | `abas`, `aba-ativa`, `recolhido`, `compacto`, `ativacao-manual`, `copiar-dados`, `atalhos`, `keytips`, `aria-label`, `rotulo-abas` | `ui-ferramenta`, `ui-aba-change`, `ui-recolhido-change`, `ui-grupo-dialogo` |
753
+ | `<ui-paleta-ferramentas>` | Paleta de ferramentas gráficas (estilo Illustrator / Photoshop): seleção exclusiva, grupos com flyout expansível e submenus aninhados, navegação em grade bidimensional para `colunas="2"`, suporte a atalhos compostos (`Ctrl+Z`, `Shift+V`, `Esc`) com isolamento multi-paleta, modo controlado sem mutação (`copiar-dados`), orientações vertical/horizontal e tooltips leves integrados no Shadow DOM. `valor` pode vir antes de `ferramentas` (pendente) e `valor = ''` / `limpar()` remove a seleção; `ui-ferramenta` dispara sempre e é cancelável (`preventDefault()` reverte), `ui-change`/`ui-selecionar` só quando a seleção muda (ouça um deles, não ambos). | `ferramentas`, `valor`, `orientacao`, `colunas`, `tamanho`, `atalhos`, `copiar-dados`, `aria-label` | `ui-change`, `ui-selecionar`, `ui-ferramenta` |
754
754
  | `<ui-controle-cores>` | Par de cores de desenho (estilo Illustrator): preenchimento na frente, traço atrás, botões de inverter, "sem cor" e restaurar padrão, estado misto (`?`) e modo só traço. Clique no alvo ativo abre o `<ui-seletor-cor>`. Não registra atalhos: quem usa chama `alternarAlvo()`, `inverter()`, `semCor()`, `restaurarPadrao()` e pode exibir as teclas via `atalhos`. Tamanho ajustável com `--ui-controle-cores-amostra`. Entrada: `@thibezer/ui-components-kit/cores`. | `preenchimento`, `traco`, `opacidade`, `alvo`, `padrao-preenchimento`, `padrao-traco`, `titulo-seletor`, `so-traco`, `desabilitado`, `coresProjeto`, `definirCores()`, `definirMisto()` | `ui-cores-change` (`confirmado` false = pré-visualização), `ui-alvo-change` |
755
755
  | `<ui-seletor-cor>` | Painel de cor flutuante: abas Preenchimento/Traço (ou cor única), prévia antes × depois, hexadecimal, seletor do sistema, opacidade, cores do projeto, paleta e "sem cor". Abra com `abrirSeletorCor({ ancora, ... })`: um por vez, Esc/clique fora confirmam, Cancelar restaura, `X` alterna o alvo. | `abrirSeletorCor()`, `fecharSeletorCor()`, `configurar()`, `modo` (`duplo`, `simples`), `alvo`, `preenchimento`, `traco`, `cor`, `opacidade`, `mostrarOpacidade`, `misto`, `coresProjeto`, `paleta`, `focar` | `ui-cor-input`, `ui-cor-confirmar`, `ui-cor-cancelar`, `ui-alvo-change` |
756
756
  | `<ui-mapa>` | Mapa geográfico interativo com camadas OpenStreetMap. | `lat`, `lng`, `zoom`, `camadas` | - |
757
757
  | `<ui-camadas>` | Painel de camadas vetoriais CAD/GIS com hierarquia em árvore, barra de arraste vertical (`redimensionavel`), estabilidade de altura sem colapso, drag-and-drop, métricas geodésicas e persistência no LocalStorage. | `redimensionavel`, `altura`, `min-altura`, `max-altura`, `flutuante`, `colapsado`, `camada-ativa`, `persistir` | `ui-redimensionar-altura`, `ui-camada-selecionada`, `ui-camada-visibilidade`, `ui-camadas-reordenadas`, `ui-acao-massa` |
758
- | `<ui-canvas-cad>` | Mesa CAD/GIS para poligonais, vértices geodésicos e **feições genéricas** (ponto, linha, polígono, círculo, texto) que você cria: seleção por clique e caixa, popup, edição de vértices, snap, 15 ferramentas de desenho/medição, oficial × prévia, cursores remotos e culling/clusters para 100 mil feições. Linha multiparte, feição `oculta`, selo de texto e contorno de ponto. Nenhuma camada vem pronta. Guia: [`docs/guia-migracao-mapengine.md`](docs/guia-migracao-mapengine.md). | `pontos`, `segmentos`, `ferramentas`, `sem-camadas-padrao`, `sem-painel-camadas`, `sem-barra-rapida`, `sem-atalho-snap`, `aceitar-origem`, `popups`, `abrirPopupFeicao()`, `inicializarAgora()`, `definirFeicoes()`, `aplicarLote()`, `definirFerramenta()`, `editarVertices()`, `definirMargensHud()`, `definirEstilosExternos()`, `fitBounds()` | `ui-ponto-selecionado`, `cad-selecao`, `cad-feicao-selecionada`, `cad-feicao-criada`, `cad-feicao-atualizada`, `cad-feicao-hover`, `cad-feicao-menu`, `cad-snap`, `cad-previas` e outros (ver `docs/canvas-cad-eventos.md`) |
758
+ | `<ui-canvas-cad>` | Mesa CAD/GIS para poligonais, vértices geodésicos e **feições genéricas** (ponto, linha, polígono, círculo, texto) que você cria: seleção por clique e caixa, popup, edição de vértices, snap, 15 ferramentas de desenho/medição, oficial × prévia, cursores remotos e culling/clusters para 100 mil feições. Linha multiparte, feição `oculta`, selo de texto e contorno de ponto. Nenhuma camada vem pronta. Guia: [`docs/guia-migracao-mapengine.md`](docs/guia-migracao-mapengine.md). | `pontos`, `segmentos`, `ferramentas`, `sem-camadas-padrao`, `sem-painel-camadas`, `sem-barra-rapida`, `sem-atalho-snap`, `aceitar-origem`, `popups`, `renderizador` (`leaflet` \| `canvas`: motor + Canvas 2D para dezenas de milhares de formas, ver [`docs/motor-formas.md`](docs/motor-formas.md)), `estatisticasFeicoes()`, `abrirPopupFeicao()`, `inicializarAgora()`, `definirFeicoes()`, `aplicarLote()`, `definirFerramenta()`, `editarVertices()`, `definirMargensHud()`, `definirEstilosExternos()`, `fitBounds()` | `ui-ponto-selecionado`, `cad-selecao`, `cad-feicao-selecionada`, `cad-feicao-criada`, `cad-feicao-atualizada`, `cad-feicao-hover`, `cad-feicao-menu`, `cad-snap`, `cad-previas` e outros (ver `docs/canvas-cad-eventos.md`) |
759
759
 
760
760
  #### `<ui-canvas-cad>`: montar só com API pública (2.1)
761
761