@thibezer/ui-components-kit 2.2.2 → 2.4.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.
@@ -60,6 +60,13 @@ interface Contexto {
60
60
  aoFerramenta?: (ferramenta: Ferramenta | null) => void;
61
61
  /** Regra de oficial × prévia compartilhada com o renderizador (o componente a põe no contexto de renderização). */
62
62
  regra?: RegraVersoes;
63
+ /** A edição de vértices começou (`true`) ou terminou (`false`), para refletir no botão da barra. */
64
+ aoEdicao?: (ativa: boolean) => void;
65
+ /**
66
+ * Os atalhos de teclado do canvas (S do snap, Enter para editar) valem agora? O componente responde que sim com o mouse
67
+ * sobre ele ou o foco dentro dele; sem esta função, valem sempre (a edição e as ferramentas em andamento também sempre valem).
68
+ */
69
+ atalhoValido?: () => boolean;
63
70
  }
64
71
  /** Opções do popup da feição. */
65
72
  export interface OpcoesPopup {
@@ -72,13 +79,14 @@ export interface ResultadoFerramenta {
72
79
  }
73
80
  export interface ResultadoEdicao {
74
81
  ok: boolean;
75
- motivo?: MotivoRecusaEdicao | 'inexistente' | 'sem-mapa';
82
+ motivo?: MotivoRecusaEdicao | 'inexistente' | 'sem-mapa' | 'sem-selecao';
76
83
  }
77
84
  export declare class GerenciadorFeicoes {
78
85
  private contexto;
79
86
  private selecao;
80
87
  private popup;
81
88
  private editor;
89
+ private vigiaCamadaEmEdicao;
82
90
  private snap;
83
91
  private desenho;
84
92
  private camadaDesenho;
@@ -194,12 +202,18 @@ export declare class GerenciadorFeicoes {
194
202
  alternarSnap(): void;
195
203
  conectarTeclado(): void;
196
204
  desconectarTeclado(): void;
205
+ private atalhosValem;
206
+ /** Enter com uma só feição selecionada (e nada em andamento) abre a edição de vértices. */
207
+ private aoTeclaEdicao;
208
+ /** Botão "Editar" da barra: encerra a edição em curso ou edita a feição selecionada (uma só). */
209
+ alternarEdicaoDaSelecao(): ResultadoEdicao;
197
210
  /** Feições visíveis das camadas de feições cujo envelope toca um quadrado de `tolPx` px em volta de `coord`. */
198
211
  private candidatasEm;
199
212
  /** Snap de uma coordenada contra as feições visíveis de todas as camadas de feições (via índice espacial). */
200
213
  buscarSnapEm(coord: [number, number], excluir?: ExcluirSnap): import('../../gerencigeo-canvas').ResultadoSnap | null;
201
214
  get editando(): boolean;
202
215
  iniciarEdicao(camadaId: string, id: string): ResultadoEdicao;
216
+ private pararDeVigiarCamadaEmEdicao;
203
217
  pararEdicao(): void;
204
218
  get ferramentaAtiva(): Ferramenta | null;
205
219
  /** Camada que recebe o que for desenhado. Não existe camada padrão: o consumidor escolhe. */
@@ -1,15 +1,22 @@
1
1
  import { Ferramenta } from '../../gerencigeo-canvas/feature_desenho';
2
2
  /** Interpreta o atributo; nomes desconhecidos são ignorados e a ordem da barra é sempre a canônica. */
3
3
  export declare function interpretarFerramentas(valor: string | null): Ferramenta[];
4
+ /** O atributo pede o botão "Editar" (edição de vértices da feição selecionada)? Vale em "todas" ou com a palavra `editar`. */
5
+ export declare function barraPedeEdicao(valor: string | null): boolean;
4
6
  export interface ContextoBarraFerramentas {
5
7
  raiz: HTMLElement;
6
8
  aoEscolher: (ferramenta: Ferramenta) => void;
9
+ /** Clique em "Editar". Sem isto o botão não é montado. */
10
+ aoEditar?: () => void;
7
11
  }
8
12
  export declare class BarraFerramentas {
9
13
  private ctx;
10
14
  private barra;
11
15
  constructor(ctx: ContextoBarraFerramentas);
12
- montar(ferramentas: Ferramenta[]): void;
16
+ montar(ferramentas: Ferramenta[], comEdicao?: boolean): void;
17
+ private editando;
18
+ /** Reflete no botão "Editar" se a edição está em curso. */
19
+ marcarEdicao(ativa: boolean): void;
13
20
  marcar(ativa: Ferramenta | null): void;
14
21
  desmontar(): void;
15
22
  }
@@ -5,6 +5,8 @@ export interface ContextoControleSnap {
5
5
  ligado: boolean;
6
6
  temporario: boolean;
7
7
  }) => void;
8
+ /** A tecla S só vale quando isto devolve `true` (ex.: mouse sobre o canvas ou foco dentro dele). Sem a função, vale sempre. */
9
+ aplica?: () => boolean;
8
10
  /** Alvo dos listeners de teclado (padrão: window). */
9
11
  alvo?: Pick<Window, 'addEventListener' | 'removeEventListener'>;
10
12
  }
@@ -25,10 +25,17 @@ export declare class UICanvasCAD extends SafeHTMLElement {
25
25
  private estilosExternos;
26
26
  private lastPopupActionEmit?;
27
27
  private lastCanvasClickTime;
28
+ /** Mouse sobre o componente: junto com o foco dentro dele, decide se S e Enter valem quando há vários canvases na página. */
29
+ private ponteiroSobre;
28
30
  private _chaveGrupo?;
29
31
  private _zonaProjecao;
30
32
  constructor();
31
33
  connectedCallback(): void;
34
+ private montarBarra;
35
+ /** Único canvas da página: os atalhos valem em qualquer lugar (comportamento de sempre). Com vários, só no que está sob o mouse ou com foco. */
36
+ private ehUnicoCanvas;
37
+ /** O foco do teclado está dentro do componente (inclusive no shadow DOM)? */
38
+ private matchesFocoInterno;
32
39
  destroy(): void;
33
40
  disconnectedCallback(): void;
34
41
  invalidateSizeSafely(): void;
@@ -0,0 +1,13 @@
1
+ import { ValorCor } from './tipos';
2
+ /** Paleta técnica padrão (CAD/GIS) do seletor de cor. */
3
+ export declare const PALETA_CORES_PADRAO: readonly string[];
4
+ /**
5
+ * Normaliza uma cor para `#rrggbb` minúsculo ou `'none'`.
6
+ * Aceita `#rgb`, `#rrggbb`, `none` e `transparent` (sem cor); devolve `null` para qualquer outro valor.
7
+ */
8
+ export declare function normalizarCor(cor: unknown): ValorCor | null;
9
+ /** Limita a opacidade a [0, 1]; valores inválidos viram `padrao`. */
10
+ export declare function normalizarOpacidade(valor: unknown, padrao?: number): number;
11
+ /** Lista de cores válidas e sem repetição, na ordem recebida. */
12
+ export declare function coresUnicas(cores: unknown): string[];
13
+ export declare function escaparHtml(texto: unknown): string;
@@ -0,0 +1,4 @@
1
+ export * from './tipos';
2
+ export * from './cores-utils';
3
+ export * from './ui-seletor-cor';
4
+ export * from './ui-controle-cores';
@@ -0,0 +1,79 @@
1
+ /** Qual das duas cores de uma forma está em edição. */
2
+ export type AlvoCor = 'preenchimento' | 'traco';
3
+ /**
4
+ * Cor aceita pelos componentes de cor: hexadecimal `#rrggbb` (ou `#rgb`) ou `'none'` (sem cor).
5
+ * Internamente tudo é normalizado para `#rrggbb` minúsculo ou `'none'`.
6
+ */
7
+ export type ValorCor = string;
8
+ /** Estado emitido pelo `<ui-seletor-cor>` a cada alteração, confirmação ou cancelamento. */
9
+ export interface DetalheSeletorCor {
10
+ /** Alvo em edição no momento do evento. */
11
+ alvo: AlvoCor;
12
+ /** Cor do alvo em edição (no modo simples, a única cor). */
13
+ cor: ValorCor;
14
+ preenchimento: ValorCor;
15
+ traco: ValorCor;
16
+ /** Opacidade do preenchimento, de 0 a 1. */
17
+ opacidade: number;
18
+ }
19
+ /** Opções de `abrirSeletorCor()`. */
20
+ export interface OpcoesSeletorCor {
21
+ /** Elemento ao lado do qual o seletor aparece (à direita; à esquerda se não couber). */
22
+ ancora: Element;
23
+ titulo?: string;
24
+ /**
25
+ * `duplo` mostra as abas Preenchimento/Traço (exige `preenchimento` e `traco`);
26
+ * `simples` edita uma única `cor`. Padrão: `duplo` quando `preenchimento` e `traco` são informados.
27
+ */
28
+ modo?: 'duplo' | 'simples';
29
+ alvo?: AlvoCor;
30
+ preenchimento?: ValorCor;
31
+ traco?: ValorCor;
32
+ /** Cor inicial do modo simples. */
33
+ cor?: ValorCor;
34
+ /** Opacidade inicial do preenchimento (0 a 1). Padrão 0.35. */
35
+ opacidade?: number;
36
+ /** Mostra o controle de opacidade. Padrão: só quando o alvo é o preenchimento. */
37
+ mostrarOpacidade?: boolean;
38
+ /** A cor inicial representa uma seleção com cores diferentes (mostra "MISTO"). */
39
+ misto?: boolean;
40
+ /** Cores extras oferecidas em "Cores do projeto" (duplicadas e inválidas são ignoradas). */
41
+ coresProjeto?: ValorCor[];
42
+ /** Substitui a paleta padrão. */
43
+ paleta?: ValorCor[];
44
+ /** Cada alteração (pré-visualização, ainda não confirmada). */
45
+ aoAlterar?: (detalhe: DetalheSeletorCor) => void;
46
+ /** Ao fechar confirmando: Concluir, ✕, Enter no hexadecimal, Esc ou clique fora. */
47
+ aoConfirmar?: (detalhe: DetalheSeletorCor) => void;
48
+ /** Ao cancelar: as cores iniciais são restauradas (com um `aoAlterar` antes) e não há confirmação. */
49
+ aoCancelar?: (detalhe: DetalheSeletorCor) => void;
50
+ /** Ao trocar de aba Preenchimento/Traço. */
51
+ aoTrocarAlvo?: (alvo: AlvoCor) => void;
52
+ }
53
+ /** Controle de um seletor aberto por `abrirSeletorCor()`. */
54
+ export interface SeletorCorAberto {
55
+ readonly elemento: HTMLElement;
56
+ /** Fecha o seletor; com `confirmar` (padrão `true`) chama `aoConfirmar`. */
57
+ fechar(confirmar?: boolean): void;
58
+ readonly aberto: boolean;
59
+ }
60
+ /** Detalhe do evento `ui-cores-change` do `<ui-controle-cores>`. */
61
+ export interface DetalheControleCores {
62
+ preenchimento: ValorCor;
63
+ traco: ValorCor;
64
+ opacidade: number;
65
+ alvo: AlvoCor;
66
+ /** `false` durante a pré-visualização no seletor; `true` quando a alteração deve ser gravada. */
67
+ confirmado: boolean;
68
+ /** Quais valores mudaram. */
69
+ alterados: Array<'preenchimento' | 'traco' | 'opacidade'>;
70
+ /** O que gerou a mudança. */
71
+ origem: 'seletor' | 'inverter' | 'sem-cor' | 'padrao';
72
+ }
73
+ /** Textos de atalho exibidos nas dicas dos botões (o kit não registra os atalhos; quem usa decide). */
74
+ export interface AtalhosControleCores {
75
+ alternar?: string;
76
+ inverter?: string;
77
+ semCor?: string;
78
+ padrao?: string;
79
+ }
@@ -0,0 +1,93 @@
1
+ import { SafeHTMLElement } from '../../core/ssr-safe';
2
+ import { AlvoCor, AtalhosControleCores, ValorCor } from './tipos';
3
+ /**
4
+ * <ui-controle-cores> — par de cores de desenho no estilo Illustrator: preenchimento na frente,
5
+ * traço atrás, e botões de canto para inverter, "sem cor" e restaurar o padrão.
6
+ *
7
+ * - Clique na amostra de trás: ela vira o alvo ativo. Clique no alvo ativo (ou duplo clique,
8
+ * Enter, Espaço): abre o `<ui-seletor-cor>` ao lado.
9
+ * - Mudanças feitas pelo usuário emitem `ui-cores-change`; `confirmado: false` é pré-visualização
10
+ * (seletor aberto), `confirmado: true` deve ser gravado. Métodos `definir*` não emitem eventos.
11
+ * - O kit não registra atalhos de teclado; quem usa chama `alternarAlvo()`, `inverter()`,
12
+ * `semCor()` e `restaurarPadrao()` e pode exibir as teclas nas dicas via `atalhos`.
13
+ *
14
+ * Atributos: preenchimento, traco, opacidade, alvo (preenchimento|traco), padrao-preenchimento,
15
+ * padrao-traco, titulo-seletor, so-traco, desabilitado
16
+ * Propriedades: preenchimento, traco, opacidade, alvo, coresProjeto, atalhos, seletorAberto
17
+ * Métodos: definirCores(), obterCores(), definirAlvo(), alternarAlvo(), definirMisto(), inverter(),
18
+ * semCor(), restaurarPadrao(), abrirSeletor(), fecharSeletor()
19
+ * Eventos: ui-cores-change (DetalheControleCores), ui-alvo-change { alvo }
20
+ */
21
+ export declare class UIControleCores extends SafeHTMLElement {
22
+ static get observedAttributes(): string[];
23
+ private raiz;
24
+ private listeners;
25
+ private renderizado;
26
+ private _preenchimento;
27
+ private _traco;
28
+ private _opacidade;
29
+ private _alvo;
30
+ private _misto;
31
+ private _padrao;
32
+ private _coresProjeto;
33
+ private _atalhos;
34
+ private seletor;
35
+ private estadoAoAbrir;
36
+ constructor();
37
+ connectedCallback(): void;
38
+ disconnectedCallback(): void;
39
+ attributeChangedCallback(nome: string, antigo: string | null, valor: string | null): void;
40
+ get preenchimento(): ValorCor;
41
+ set preenchimento(v: ValorCor);
42
+ get traco(): ValorCor;
43
+ set traco(v: ValorCor);
44
+ get opacidade(): number;
45
+ set opacidade(v: number);
46
+ get alvo(): AlvoCor;
47
+ set alvo(v: AlvoCor);
48
+ /** Cores oferecidas em "Cores do projeto" no seletor. */
49
+ get coresProjeto(): string[];
50
+ set coresProjeto(v: string[]);
51
+ /** Teclas exibidas nas dicas dos botões (ex.: `{ inverter: 'Shift+X' }`). */
52
+ get atalhos(): AtalhosControleCores;
53
+ set atalhos(v: AtalhosControleCores);
54
+ get seletorAberto(): boolean;
55
+ /** Define cores e/ou opacidade sem emitir eventos. Valores inválidos são ignorados; uma cor definida deixa de ser "mista". */
56
+ definirCores(cores?: {
57
+ preenchimento?: ValorCor;
58
+ traco?: ValorCor;
59
+ opacidade?: number;
60
+ }): void;
61
+ obterCores(): {
62
+ preenchimento: ValorCor;
63
+ traco: ValorCor;
64
+ opacidade: number;
65
+ alvo: AlvoCor;
66
+ };
67
+ /** Marca a amostra como ativa sem emitir eventos. */
68
+ definirAlvo(alvo: AlvoCor): void;
69
+ /** Mostra "?" nas amostras cujas cores divergem na seleção atual. */
70
+ definirMisto(misto?: {
71
+ preenchimento?: boolean;
72
+ traco?: boolean;
73
+ }): void;
74
+ /** Alterna o alvo ativo entre preenchimento e traço; emite `ui-alvo-change`. */
75
+ alternarAlvo(): void;
76
+ /** Troca preenchimento e traço; emite `ui-cores-change` confirmado. */
77
+ inverter(): void;
78
+ /** "Sem cor" no alvo indicado (padrão: o ativo); emite `ui-cores-change` confirmado. */
79
+ semCor(alvo?: AlvoCor): void;
80
+ /** Volta às cores de `padrao-preenchimento` e `padrao-traco`; emite `ui-cores-change` confirmado. */
81
+ restaurarPadrao(): void;
82
+ /** Abre o seletor de cor ancorado na amostra do alvo (que passa a ser o ativo). */
83
+ abrirSeletor(alvo?: AlvoCor): void;
84
+ /** Fecha o seletor aberto por este controle (confirmando, por padrão). */
85
+ fecharSeletor(confirmar?: boolean): void;
86
+ private mudarAlvo;
87
+ private aplicarDoSeletor;
88
+ private emitirCores;
89
+ private dica;
90
+ private renderizar;
91
+ private vincularEventos;
92
+ private atualizar;
93
+ }
@@ -0,0 +1,65 @@
1
+ import { SafeHTMLElement } from '../../core/ssr-safe';
2
+ import { AlvoCor, DetalheSeletorCor, OpcoesSeletorCor, SeletorCorAberto, ValorCor } from './tipos';
3
+ /** Configuração aceita por `UISeletorCor.configurar()` (as opções de `abrirSeletorCor` sem âncora e callbacks). */
4
+ export type ConfiguracaoSeletorCor = Omit<OpcoesSeletorCor, 'ancora' | 'aoAlterar' | 'aoConfirmar' | 'aoCancelar' | 'aoTrocarAlvo'>;
5
+ /**
6
+ * <ui-seletor-cor> — painel de cor no estilo Illustrator: abas Preenchimento/Traço, prévia
7
+ * antes × depois, hexadecimal, seletor do sistema, opacidade do preenchimento, cores do projeto,
8
+ * paleta padrão e "sem cor".
9
+ *
10
+ * Normalmente aberto por `abrirSeletorCor()`, que posiciona o painel junto a uma âncora e cuida
11
+ * de fechar com Esc ou clique fora. Pode também ser usado direto no DOM.
12
+ *
13
+ * Métodos: configurar(opcoes), trocarAlvo(alvo), definirCor(cor), definirOpacidade(v),
14
+ * confirmar(), cancelar(), obterEstado()
15
+ * Eventos: ui-cor-input (pré-visualização), ui-cor-confirmar, ui-cor-cancelar — detail: DetalheSeletorCor;
16
+ * ui-alvo-change { alvo }
17
+ */
18
+ export declare class UISeletorCor extends SafeHTMLElement {
19
+ private raiz;
20
+ private listeners;
21
+ private _titulo;
22
+ private _duplo;
23
+ private _alvo;
24
+ private _preenchimento;
25
+ private _traco;
26
+ private _opacidade;
27
+ private _mostrarOpacidade;
28
+ private _misto;
29
+ private _coresProjeto;
30
+ private _paleta;
31
+ private inicial;
32
+ constructor();
33
+ connectedCallback(): void;
34
+ disconnectedCallback(): void;
35
+ /** Define o estado inicial (também usado pelo "Cancelar" para restaurar). */
36
+ configurar(opcoes?: ConfiguracaoSeletorCor): void;
37
+ get alvo(): AlvoCor;
38
+ /** Cor do alvo em edição. */
39
+ get cor(): ValorCor;
40
+ get opacidade(): number;
41
+ obterEstado(): DetalheSeletorCor;
42
+ /** Alterna entre Preenchimento e Traço (só no modo duplo). */
43
+ trocarAlvo(alvo: AlvoCor): void;
44
+ /** Aplica uma cor ao alvo em edição e emite `ui-cor-input`. Cores inválidas são ignoradas. */
45
+ definirCor(cor: ValorCor): void;
46
+ /** Opacidade do preenchimento (0 a 1); emite `ui-cor-input`. */
47
+ definirOpacidade(valor: number): void;
48
+ confirmar(): void;
49
+ /** Restaura as cores iniciais (emitindo `ui-cor-input`) e emite `ui-cor-cancelar`. */
50
+ cancelar(): void;
51
+ private get opacidadeVisivel();
52
+ private renderizar;
53
+ private atualizarVisual;
54
+ private vincularEventos;
55
+ private emitir;
56
+ }
57
+ /**
58
+ * Abre um `<ui-seletor-cor>` flutuante ao lado de `ancora` (à direita; à esquerda se não couber).
59
+ * Só um seletor fica aberto por vez: abrir outro descarta o anterior sem confirmar.
60
+ * Fecha confirmando com Concluir, ✕, Enter no hexadecimal, Esc ou clique fora; "Cancelar"
61
+ * restaura as cores iniciais. `X` alterna Preenchimento/Traço enquanto ele está aberto.
62
+ */
63
+ export declare function abrirSeletorCor(opcoes: OpcoesSeletorCor): SeletorCorAberto;
64
+ /** Fecha o seletor aberto por `abrirSeletorCor()`, se houver. */
65
+ export declare function fecharSeletorCor(confirmar?: boolean): void;
package/dist/cores.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const r=require("./ui-controle-cores-Er6ZcQ7U.cjs");exports.PALETA_CORES_PADRAO=r.PALETA_CORES_PADRAO;exports.UIControleCores=r.UIControleCores;exports.UISeletorCor=r.UISeletorCor;exports.abrirSeletorCor=r.abrirSeletorCor;exports.coresUnicas=r.coresUnicas;exports.escaparHtml=r.escaparHtml;exports.fecharSeletorCor=r.fecharSeletorCor;exports.normalizarCor=r.normalizarCor;exports.normalizarOpacidade=r.normalizarOpacidade;
@@ -0,0 +1,8 @@
1
+ import { UIControleCores, UISeletorCor } from './components/ui-cores';
2
+ export * from './components/ui-cores';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'ui-controle-cores': UIControleCores;
6
+ 'ui-seletor-cor': UISeletorCor;
7
+ }
8
+ }
package/dist/cores.js ADDED
@@ -0,0 +1,13 @@
1
+ /* empty css */
2
+ import { P as e, U as s, a as l, b as t, c as C, e as c, f as i, n as m, d as n } from "./ui-controle-cores-BS0WYPdi.js";
3
+ export {
4
+ e as PALETA_CORES_PADRAO,
5
+ s as UIControleCores,
6
+ l as UISeletorCor,
7
+ t as abrirSeletorCor,
8
+ C as coresUnicas,
9
+ c as escaparHtml,
10
+ i as fecharSeletorCor,
11
+ m as normalizarCor,
12
+ n as normalizarOpacidade
13
+ };