@thibezer/ui-components-kit 2.12.0 → 2.12.2

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 CHANGED
@@ -1,87 +1,101 @@
1
- # Changelog
2
-
3
- ## 2.12.0 — 2026-10-26
4
-
5
- ### `<ui-camadas>`: Verificação e Correção Profunda, Robustez e UX Avançada
6
-
7
- - **Proteção Numérica e Degradação Graciosa (Regra #0 do AGENTS.md)**:
8
- - Eliminação de recursão infinita e loops em `construirHierarquiaCamadas` e `achatarCamadas`: proteção com detecção de ciclos via `Set` de nós visitados e quebra do ciclo elegendo a raiz sem perder camadas da árvore nem travar a UI.
9
- - Correção do cálculo de área geodésica em `camadas-metricas.ts`: substituição da soma de produtos vetoriais de arestas por Shoelace projetado na esfera WGS84 com projeção local ($\phi_m$), blindagem contra `NaN`/`Infinity`, divisão por zero e clamp trigonométrico na distância esférica.
10
- - Saneamento defensivo em `atualizarFeicaoNoHost`: proteção contra objetos `feicao` nulos ou indefinidos e clonagem segura de propriedades.
11
- - **Persistência Completa de Hierarquia**:
12
- - `montarEstadoPersistido` e `aplicarEstadoPersistido` agora salvam e restauram `parentId`, impedindo o "desaninhamento" de subcamadas após reload da página. Saneamento preventivo contra reidratação de ciclos (`ehDescendente`).
13
- - **UX de Paginação Incremental ("Mostrar mais")**:
14
- - Em camadas densas com centenas de feições, o componente limita a renderização inicial a 80 itens por camada e disponibiliza o botão "Mostrar mais (+80)" e o método público `incrementarLimiteFeicoes(camadaId)`.
15
- - A seleção em intervalo (Shift+Clique) e seleções em lote respeitam estritamente a hierarquia real das subcamadas e o limite visível.
16
- - **Acessibilidade e Atalhos de Teclado**:
17
- - `F2`: Inicia a renomeação inline da camada ou feição focada.
18
- - `Ctrl+A` / `Cmd+A`: Seleciona todas as feições visíveis na árvore (respeitando busca ativa e nós colapsados).
19
- - `Delete`: Aciona o fluxo de exclusão segura das feições selecionadas com confirmação em dois passos.
20
- - `Escape`: Cancela o estado de confirmação pendente ou fecha o drawer lateral de configurações.
21
- - **Sincronização de Estado e Rodapé**:
22
- - O alvo de seleção da camada (`ui-target-circle`) agora monitora a subárvore completa (camada pai e subcamadas filhas), aplicando corretamente os estados `selected`, `partial` ou vazio.
23
- - O preview de cor do rodapé é atualizado com a cor real da primeira feição selecionada.
24
- - O evento `ui-camada-mover-hierarquia` agora informa `parentAnteriorId` para rastreabilidade e histórico de operações.
25
- - Adicionado método público `alternarExpansao(camadaId)`.
26
- - **Customização e Shadow Parts (`::part()`)**:
27
- - Exposição de partes padronizadas: `base`, `corpo`, `toolbar`, `busca`, `arvore`, `grupo`, `camada`, `camada-ativa`, `feicao`, `feicao-selecionada`, `mapas-base`, `rodape`, `drawer`, `resizer` e `botao-expandir`.
28
-
29
- ### `<ui-tabela-propriedades>`: Verificação e Correção Profunda, Robustez, UX e Acessibilidade CAD/Revit
30
-
31
- - **Proteção e Degradação Graciosa (Regra #0 do AGENTS.md)**:
32
- - Higienização e tolerância a entradas hostis em `categorias` e `tipos` (itens `null`, propriedades sem rótulo ou malformadas são aceitas sem disparar `TypeError`).
33
- - Blindagem do parser matemático contra divisão por zero, `NaN`, `Infinity` e estouro de pilha por parênteses recursivos profundos (`MAX_PROFUNDIDADE = 64`).
34
- - Tratamento seguro de `flutuante`: prevenção contra ciclo de recursão de mutação em `attributeChangedCallback`.
35
- - **Motor Matemático e Expressões Inline CAD/Revit (`avaliador-expressao.ts`)**:
36
- - Suporte a prefixo `=` opcional de fórmula (ex.: `=10.5 * 2 + (4 / 2)`).
37
- - Suporte completo a números em notação científica (ex.: `1e-5`, `2.5e3`).
38
- - Correção na avaliação contextual de porcentagem em termos compostos (`100 + 50 * 10% = 105`).
39
- - Suporte a funções matemáticas avançadas: `min`, `max`, `pow`, `hypot`, `atan2`, `mod`, `trunc`, `sign`, `log`, `ln`, `deg`, `rad`.
40
- - Preview visual em tempo real no atributo `title` do campo numérico enquanto uma fórmula é digitada (`.ui-prop__editor-input--calculando`).
41
- - **Ergonomia e UX Técnica (AutoCAD, Revit, Blender e Figma)**:
42
- - Suporte a limites numéricos `min` e `max` em propriedades numéricas (com clamp automático na digitação, no teclado e no scrubber).
43
- - Suporte a `passo` e `step` customizados para ajuste fino e grosso via setas `ArrowUp`/`ArrowDown` e scrubber.
44
- - Suporte a aliases `precisao` (para `casasDecimais`) e `aberta` (para `aberto` em categorias).
45
- - Exibição de dicas técnicas (`dica?: string` em `ItemPropriedade`) no `title` do rótulo e em `aria-description` do editor.
46
- - Formatação e cópia de valores somente leitura (`readonly`), suportando casas decimais, resolução de labels de seleção e booleanos.
47
- - Novo método público `redefinirValor(propId)` para reverter uma propriedade individual ao seu valor original sem descartar as demais alterações.
48
- - Novo botão de limpar busca (`#btn-limpar-filtro`) e atalho `Escape` para limpar o filtro de busca instantaneamente.
49
- - Busca expandida: agora localiza propriedades também pelo título da categoria (`cat.titulo`) e pelo valor atual.
50
- - Exibição de estado vazio informativo quando nenhum resultado coincidir com o filtro.
51
- - Atalho `Ctrl+Enter` / `Cmd+Enter` para aplicar alterações no modo manual.
52
- - Tecla `Escape` durante a edição de campos numéricos e de texto cancela a alteração sem propagar o evento para modais ou overlays pais.
53
- - Suporte a `Shift+Enter` para navegar ao editor anterior, e navegação restrita estritamente a editores visíveis de categorias abertas.
54
- - **Acessibilidade e WAI-ARIA**:
55
- - Splitter vertical (`#splitter`) agora é um separador acessível (`role="separator"`, `tabindex="0"`, `aria-orientation="vertical"`, `aria-valuenow` dinâmico) ajustável via teclado com `ArrowLeft`, `ArrowRight`, `Home`, `End` e `Enter` para restaurar os 45% padrão.
56
- - Cabeçalhos de categorias (`.ui-prop__categoria-header`) navegáveis por teclado via `ArrowDown`, `ArrowUp`, `ArrowLeft` (recolhe), `ArrowRight` (expande), `Home` e `End`.
57
- - Correção de contraste para conformidade WCAG AA no tema claro (`[data-tema="claro"]`).
58
- - Adição de `aria-label` descritivo nos seletores de tipo e de linha.
59
- - **Shadow Parts (`::part()`) e Registro de Aliases**:
60
- - Exposição completa de shadow parts: `base`, `faixa-estreita`, `cabecalho`, `titulo`, `acoes-cabecalho`, `seletor-tipo`, `filtro`, `filtro-input`, `splitter`, `corpo`, `lista-categorias`, `vazio`, `categoria`, `categoria-aberta`, `categoria-cabecalho`, `categoria-conteudo`, `linha`, `linha-modificada`, `linha-mista`, `rotulo`, `valor`, `editor`, `unidade`, `rodape`, `ajuda`, `desfazer`, `aplicar`.
61
- - Registro oficial dos Custom Elements aliases `<ui-painel-propriedades>` e `<ui-propriedades>` (classes `UIPainelPropriedades` e `UIPropriedades`), com tipagem completa gerada para HTML nativo, React e Vue.
62
-
63
-
64
- ## 2.11.1 — 2026-10-23
65
-
66
- Junta à 2.11.0 o que estava fora do npm (PR #14): o redesign compacto do seletor de cor no estilo Illustrator.
67
-
68
- ### `<ui-seletor-cor>`: painel mais compacto, campos no estilo Illustrator
69
-
70
- - Opacidade e espessura do traçado viram **campos numéricos** compactos (rótulo à esquerda, campo com setas ▲▼ e unidade `%`/`px`), no lugar das faixas deslizantes e dos atalhos (25–100 % e 1–8 px). No campo: ↑/↓ e a roda do mouse (com o campo em foco) somam um passo (1 % ou 0,5 px), Shift soma dez; o valor digitado ("50", "50%", "2,5 px") vale no Enter, no Tab ou ao sair; texto inválido volta ao valor atual sem emitir evento. Enter no campo não fecha o seletor.
71
- - "Sem cor" deixa de ser um botão largo com texto e vira uma amostra quadrada de 30 px (fundo neutro com diagonal vermelha, como o *None* do Illustrator) ao lado do hexadecimal e do seletor do sistema; mantém a classe `.sem-cor`, `data-cor="none"`, `aria-pressed` e o rótulo acessível.
72
- - Saem as amostras "Cores do projeto" e "Paleta padrão". As opções `coresProjeto` e `paleta` de `abrirSeletorCor()`/`configurar()`, a propriedade `coresProjeto` do `<ui-controle-cores>` e a constante `PALETA_CORES_PADRAO` continuam aceitas, mas ficam obsoletas (`@deprecated`) e são ignoradas pelo seletor.
73
-
74
- ## 2.11.0 — 2026-10-23
75
-
76
- ### `<ui-canvas-cad>`: personalização da linha padrão (tipos de linha CAD)
77
-
78
- - **Tipos de linha estilo CAD** (`tipoLinha`): `continua`, `tracejada`, `tracejada-curta`, `tracejada-longa`, `pontilhada`, `traco-ponto`, `traco-ponto-ponto`, `oculta`, `centro`, `fantasma` e `divisa`. Os nomes do AutoCAD (`Dashed`, `Hidden`, `Center`, `Phantom`...) também valem, inclusive os do editor de tipo de linha do `<ui-tabela-propriedades>`.
79
- - **Novas opções de traço** em `EstiloFeicao`: `tipoLinha`, `escalaTipoLinha` (LTSCALE), `deslocamentoTracejado`, `opacidadeTraco`, `terminacaoTraco` (`arredondada`/`reta`/`quadrada`) e `juncaoTraco` (`arredondada`/`chanfrada`/`angular`). Em `LayerStyleDef`, como padrão da camada: `tipoLinha`, `escalaTipoLinha`, `opacidadeLinha`, `terminacaoLinha` e `juncaoLinha`. Valem nos renderizadores `leaflet` e `canvas`.
80
- - **Linha padrão do componente**: atributos `linha-cor`, `linha-espessura`, `linha-tipo`, `linha-escala`, `linha-tracejado`, `linha-deslocamento`, `linha-opacidade`, `linha-terminacao` e `linha-juncao`, e os métodos `definirLinhaPadrao(opcoes)` / `obterLinhaPadrao()` (tipo `OpcoesLinhaPadrao`). Gravam no estilo de desenho: as feições desenhadas daqui para frente saem com essa linha.
81
- - O conta-gotas copia também as novas opções.
82
- - Entrada hostil: valor inválido não é aplicado (a opção volta ao padrão); cor e tracejado são saneados; `null` remove a opção. Feição selecionada sempre tem traço opaco.
83
- - Utilitários puros em `gerencigeo-canvas`: `TIPOS_LINHA`, `normalizarTipoLinha`, `dashTipoLinha`, `escalaTipoLinhaSegura`, `terminacaoCanvas`, `juncaoCanvas`. `EstiloVetor` ganha os campos opcionais `opacidadeTraco`, `terminacao`, `juncao` e `deslocamentoDash`.
84
- - Guia: [`docs/linha-padrao-cad.md`](docs/linha-padrao-cad.md).
1
+ # Changelog
2
+
3
+ ## 2.12.2 — 2026-10-30
4
+
5
+ ### `<ui-camadas>`: cabeçalho e rodapé simplificados
6
+
7
+ - **Barras unificadas**: cabeçalho (título + contador) e rodapé usam a mesma altura (`--camada-barra-altura`, 28px), coladas nas bordas do painel e com linha divisória de ponta a ponta.
8
+ - **Botões sem borda dupla**: olho, chevron, `Grupo` e `Camada` perdem a borda própria; ficam só com fundo sutil.
9
+ - **Criação no rodapé**: `Grupo` e `Camada` saíram da toolbar do topo e ficam à direita do rodapé (eventos `ui-camada-adicionar` e `ui-camada-grupo-adicionar` inalterados). Os ids `btn-add-layer` e `btn-add-group` deixam de existir; use `btn-footer-new-layer` e `btn-footer-new-group`.
10
+ - **Rodapé enxuto**: o texto "N camadas" virou ícone de camadas + número (o texto fica em `title`/`aria-label`). Saíram o olho e o cadeado coletivos, a bolinha de cor, a métrica de área e o botão "X" (o `Esc` limpa a seleção).
11
+ - **Ações em massa**: `visibilidade`, `bloqueio` e `cor` deixam de ser disparadas pelo painel; seguem `mover` e `excluir`. O seletor de camada de destino ocupa o espaço livre.
12
+
13
+ ### `<ui-texto-editavel>` (novo)
14
+
15
+ - Novo componente de texto editável inline, exportado em `src/index.ts` e registrado em `src/register.ts`.
16
+
17
+ ## 2.12.0 — 2026-10-26
18
+
19
+ ### `<ui-camadas>`: Verificação e Correção Profunda, Robustez e UX Avançada
20
+
21
+ - **Proteção Numérica e Degradação Graciosa (Regra #0 do AGENTS.md)**:
22
+ - Eliminação de recursão infinita e loops em `construirHierarquiaCamadas` e `achatarCamadas`: proteção com detecção de ciclos via `Set` de nós visitados e quebra do ciclo elegendo a raiz sem perder camadas da árvore nem travar a UI.
23
+ - Correção do cálculo de área geodésica em `camadas-metricas.ts`: substituição da soma de produtos vetoriais de arestas por Shoelace projetado na esfera WGS84 com projeção local ($\phi_m$), blindagem contra `NaN`/`Infinity`, divisão por zero e clamp trigonométrico na distância esférica.
24
+ - Saneamento defensivo em `atualizarFeicaoNoHost`: proteção contra objetos `feicao` nulos ou indefinidos e clonagem segura de propriedades.
25
+ - **Persistência Completa de Hierarquia**:
26
+ - `montarEstadoPersistido` e `aplicarEstadoPersistido` agora salvam e restauram `parentId`, impedindo o "desaninhamento" de subcamadas após reload da página. Saneamento preventivo contra reidratação de ciclos (`ehDescendente`).
27
+ - **UX de Paginação Incremental ("Mostrar mais")**:
28
+ - Em camadas densas com centenas de feições, o componente limita a renderização inicial a 80 itens por camada e disponibiliza o botão "Mostrar mais (+80)" e o método público `incrementarLimiteFeicoes(camadaId)`.
29
+ - A seleção em intervalo (Shift+Clique) e seleções em lote respeitam estritamente a hierarquia real das subcamadas e o limite visível.
30
+ - **Acessibilidade e Atalhos de Teclado**:
31
+ - `F2`: Inicia a renomeação inline da camada ou feição focada.
32
+ - `Ctrl+A` / `Cmd+A`: Seleciona todas as feições visíveis na árvore (respeitando busca ativa e nós colapsados).
33
+ - `Delete`: Aciona o fluxo de exclusão segura das feições selecionadas com confirmação em dois passos.
34
+ - `Escape`: Cancela o estado de confirmação pendente ou fecha o drawer lateral de configurações.
35
+ - **Sincronização de Estado e Rodapé**:
36
+ - O alvo de seleção da camada (`ui-target-circle`) agora monitora a subárvore completa (camada pai e subcamadas filhas), aplicando corretamente os estados `selected`, `partial` ou vazio.
37
+ - O preview de cor do rodapé é atualizado com a cor real da primeira feição selecionada.
38
+ - O evento `ui-camada-mover-hierarquia` agora informa `parentAnteriorId` para rastreabilidade e histórico de operações.
39
+ - Adicionado método público `alternarExpansao(camadaId)`.
40
+ - **Customização e Shadow Parts (`::part()`)**:
41
+ - Exposição de partes padronizadas: `base`, `corpo`, `toolbar`, `busca`, `arvore`, `grupo`, `camada`, `camada-ativa`, `feicao`, `feicao-selecionada`, `mapas-base`, `rodape`, `drawer`, `resizer` e `botao-expandir`.
42
+
43
+ ### `<ui-tabela-propriedades>`: Verificação e Correção Profunda, Robustez, UX e Acessibilidade CAD/Revit
44
+
45
+ - **Proteção e Degradação Graciosa (Regra #0 do AGENTS.md)**:
46
+ - Higienização e tolerância a entradas hostis em `categorias` e `tipos` (itens `null`, propriedades sem rótulo ou malformadas são aceitas sem disparar `TypeError`).
47
+ - Blindagem do parser matemático contra divisão por zero, `NaN`, `Infinity` e estouro de pilha por parênteses recursivos profundos (`MAX_PROFUNDIDADE = 64`).
48
+ - Tratamento seguro de `flutuante`: prevenção contra ciclo de recursão de mutação em `attributeChangedCallback`.
49
+ - **Motor Matemático e Expressões Inline CAD/Revit (`avaliador-expressao.ts`)**:
50
+ - Suporte a prefixo `=` opcional de fórmula (ex.: `=10.5 * 2 + (4 / 2)`).
51
+ - Suporte completo a números em notação científica (ex.: `1e-5`, `2.5e3`).
52
+ - Correção na avaliação contextual de porcentagem em termos compostos (`100 + 50 * 10% = 105`).
53
+ - Suporte a funções matemáticas avançadas: `min`, `max`, `pow`, `hypot`, `atan2`, `mod`, `trunc`, `sign`, `log`, `ln`, `deg`, `rad`.
54
+ - Preview visual em tempo real no atributo `title` do campo numérico enquanto uma fórmula é digitada (`.ui-prop__editor-input--calculando`).
55
+ - **Ergonomia e UX Técnica (AutoCAD, Revit, Blender e Figma)**:
56
+ - Suporte a limites numéricos `min` e `max` em propriedades numéricas (com clamp automático na digitação, no teclado e no scrubber).
57
+ - Suporte a `passo` e `step` customizados para ajuste fino e grosso via setas `ArrowUp`/`ArrowDown` e scrubber.
58
+ - Suporte a aliases `precisao` (para `casasDecimais`) e `aberta` (para `aberto` em categorias).
59
+ - Exibição de dicas técnicas (`dica?: string` em `ItemPropriedade`) no `title` do rótulo e em `aria-description` do editor.
60
+ - Formatação e cópia de valores somente leitura (`readonly`), suportando casas decimais, resolução de labels de seleção e booleanos.
61
+ - Novo método público `redefinirValor(propId)` para reverter uma propriedade individual ao seu valor original sem descartar as demais alterações.
62
+ - Novo botão de limpar busca (`#btn-limpar-filtro`) e atalho `Escape` para limpar o filtro de busca instantaneamente.
63
+ - Busca expandida: agora localiza propriedades também pelo título da categoria (`cat.titulo`) e pelo valor atual.
64
+ - Exibição de estado vazio informativo quando nenhum resultado coincidir com o filtro.
65
+ - Atalho `Ctrl+Enter` / `Cmd+Enter` para aplicar alterações no modo manual.
66
+ - Tecla `Escape` durante a edição de campos numéricos e de texto cancela a alteração sem propagar o evento para modais ou overlays pais.
67
+ - Suporte a `Shift+Enter` para navegar ao editor anterior, e navegação restrita estritamente a editores visíveis de categorias abertas.
68
+ - **Acessibilidade e WAI-ARIA**:
69
+ - Splitter vertical (`#splitter`) agora é um separador acessível (`role="separator"`, `tabindex="0"`, `aria-orientation="vertical"`, `aria-valuenow` dinâmico) ajustável via teclado com `ArrowLeft`, `ArrowRight`, `Home`, `End` e `Enter` para restaurar os 45% padrão.
70
+ - Cabeçalhos de categorias (`.ui-prop__categoria-header`) navegáveis por teclado via `ArrowDown`, `ArrowUp`, `ArrowLeft` (recolhe), `ArrowRight` (expande), `Home` e `End`.
71
+ - Correção de contraste para conformidade WCAG AA no tema claro (`[data-tema="claro"]`).
72
+ - Adição de `aria-label` descritivo nos seletores de tipo e de linha.
73
+ - **Shadow Parts (`::part()`) e Registro de Aliases**:
74
+ - Exposição completa de shadow parts: `base`, `faixa-estreita`, `cabecalho`, `titulo`, `acoes-cabecalho`, `seletor-tipo`, `filtro`, `filtro-input`, `splitter`, `corpo`, `lista-categorias`, `vazio`, `categoria`, `categoria-aberta`, `categoria-cabecalho`, `categoria-conteudo`, `linha`, `linha-modificada`, `linha-mista`, `rotulo`, `valor`, `editor`, `unidade`, `rodape`, `ajuda`, `desfazer`, `aplicar`.
75
+ - Registro oficial dos Custom Elements aliases `<ui-painel-propriedades>` e `<ui-propriedades>` (classes `UIPainelPropriedades` e `UIPropriedades`), com tipagem completa gerada para HTML nativo, React e Vue.
76
+
77
+
78
+ ## 2.11.1 — 2026-10-23
79
+
80
+ Junta à 2.11.0 o que estava fora do npm (PR #14): o redesign compacto do seletor de cor no estilo Illustrator.
81
+
82
+ ### `<ui-seletor-cor>`: painel mais compacto, campos no estilo Illustrator
83
+
84
+ - Opacidade e espessura do traçado viram **campos numéricos** compactos (rótulo à esquerda, campo com setas ▲▼ e unidade `%`/`px`), no lugar das faixas deslizantes e dos atalhos (25–100 % e 1–8 px). No campo: ↑/↓ e a roda do mouse (com o campo em foco) somam um passo (1 % ou 0,5 px), Shift soma dez; o valor digitado ("50", "50%", "2,5 px") vale no Enter, no Tab ou ao sair; texto inválido volta ao valor atual sem emitir evento. Enter no campo não fecha o seletor.
85
+ - "Sem cor" deixa de ser um botão largo com texto e vira uma amostra quadrada de 30 px (fundo neutro com diagonal vermelha, como o *None* do Illustrator) ao lado do hexadecimal e do seletor do sistema; mantém a classe `.sem-cor`, `data-cor="none"`, `aria-pressed` e o rótulo acessível.
86
+ - Saem as amostras "Cores do projeto" e "Paleta padrão". As opções `coresProjeto` e `paleta` de `abrirSeletorCor()`/`configurar()`, a propriedade `coresProjeto` do `<ui-controle-cores>` e a constante `PALETA_CORES_PADRAO` continuam aceitas, mas ficam obsoletas (`@deprecated`) e são ignoradas pelo seletor.
87
+
88
+ ## 2.11.0 — 2026-10-23
89
+
90
+ ### `<ui-canvas-cad>`: personalização da linha padrão (tipos de linha CAD)
91
+
92
+ - **Tipos de linha estilo CAD** (`tipoLinha`): `continua`, `tracejada`, `tracejada-curta`, `tracejada-longa`, `pontilhada`, `traco-ponto`, `traco-ponto-ponto`, `oculta`, `centro`, `fantasma` e `divisa`. Os nomes do AutoCAD (`Dashed`, `Hidden`, `Center`, `Phantom`...) também valem, inclusive os do editor de tipo de linha do `<ui-tabela-propriedades>`.
93
+ - **Novas opções de traço** em `EstiloFeicao`: `tipoLinha`, `escalaTipoLinha` (LTSCALE), `deslocamentoTracejado`, `opacidadeTraco`, `terminacaoTraco` (`arredondada`/`reta`/`quadrada`) e `juncaoTraco` (`arredondada`/`chanfrada`/`angular`). Em `LayerStyleDef`, como padrão da camada: `tipoLinha`, `escalaTipoLinha`, `opacidadeLinha`, `terminacaoLinha` e `juncaoLinha`. Valem nos renderizadores `leaflet` e `canvas`.
94
+ - **Linha padrão do componente**: atributos `linha-cor`, `linha-espessura`, `linha-tipo`, `linha-escala`, `linha-tracejado`, `linha-deslocamento`, `linha-opacidade`, `linha-terminacao` e `linha-juncao`, e os métodos `definirLinhaPadrao(opcoes)` / `obterLinhaPadrao()` (tipo `OpcoesLinhaPadrao`). Gravam no estilo de desenho: as feições desenhadas daqui para frente saem com essa linha.
95
+ - O conta-gotas copia também as novas opções.
96
+ - Entrada hostil: valor inválido não é aplicado (a opção volta ao padrão); cor e tracejado são saneados; `null` remove a opção. Feição selecionada sempre tem traço opaco.
97
+ - Utilitários puros em `gerencigeo-canvas`: `TIPOS_LINHA`, `normalizarTipoLinha`, `dashTipoLinha`, `escalaTipoLinhaSegura`, `terminacaoCanvas`, `juncaoCanvas`. `EstiloVetor` ganha os campos opcionais `opacidadeTraco`, `terminacao`, `juncao` e `deslocamentoDash`.
98
+ - Guia: [`docs/linha-padrao-cad.md`](docs/linha-padrao-cad.md).
85
99
 
86
100
  ## 2.10.1 — 2026-10-23
87
101