@thibezer/ui-components-kit 2.5.0 → 2.6.1

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 (33) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +4 -4
  3. package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +12 -0
  4. package/dist/components/ui-barra-ferramentas/tipos.d.ts +30 -0
  5. package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +35 -5
  6. package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +16 -8
  7. package/dist/components/ui-cores/tipos.d.ts +2 -0
  8. package/dist/components/ui-cores/ui-controle-cores.d.ts +8 -3
  9. package/dist/components/ui-cores/ui-seletor-cor.d.ts +3 -1
  10. package/dist/cores.cjs +1 -1
  11. package/dist/cores.js +1 -1
  12. package/dist/custom-elements.json +10049 -9544
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.js +2 -2
  15. package/dist/register.cjs +1 -1
  16. package/dist/register.js +2 -2
  17. package/dist/tipos-elementos.d.ts +12 -4
  18. package/dist/tipos-vue.d.ts +12 -4
  19. package/dist/tools.cjs +1 -1
  20. package/dist/tools.js +1 -1
  21. package/dist/ui-controle-cores-DgEza3wF.js +612 -0
  22. package/dist/ui-controle-cores-uY__TgwW.cjs +117 -0
  23. package/dist/ui-paleta-ferramentas-Ccmo-rB5.cjs +21 -0
  24. package/dist/ui-paleta-ferramentas-DNN5i6nL.js +860 -0
  25. package/package.json +1 -1
  26. package/dist/ui-botao-OGJV6Vfk.js +0 -165
  27. package/dist/ui-botao-psS1juof.cjs +0 -12
  28. package/dist/ui-controle-cores-BS0WYPdi.js +0 -572
  29. package/dist/ui-controle-cores-Er6ZcQ7U.cjs +0 -111
  30. package/dist/ui-paleta-ferramentas-CEZYcN4J.js +0 -624
  31. package/dist/ui-paleta-ferramentas-Dbj1kBS9.cjs +0 -18
  32. package/dist/ui-tabela-propriedades-BBr5sqki.cjs +0 -145
  33. package/dist/ui-tabela-propriedades-Boy7I5yW.js +0 -2412
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.6.1 — 2026-10-17
4
+
5
+ ### `<ui-controle-cores>` e `<ui-seletor-cor>`: revisão de erros e visual
6
+
7
+ **Correções**
8
+
9
+ - O botão "sem cor" ficava por cima da amostra do traço e roubava os cliques da metade inferior esquerda dela. As ações (inverter, sem cor, restaurar padrão) agora ficam numa coluna ao lado das amostras, cada uma com a própria área de clique, sem sobreposição.
10
+ - `desabilitado` agora desativa todos os botões (antes só bloqueava o mouse: Tab + Enter ainda inverter/limpar/restaurar) e fecha um seletor aberto; remover o atributo reativa o controle.
11
+ - Trocar o alvo pelo controle (`alternarAlvo()`, `definirAlvo()`, clique na outra amostra) agora acompanha a aba do seletor aberto, em vez de deixá-las divergentes.
12
+ - `fecharSeletor(false)` agora cancela de verdade: as cores iniciais voltam (com um `ui-cores-change` não confirmado) em vez de ficar a pré-visualização aplicada sem nenhuma confirmação.
13
+ - `ui-alvo-change` não é mais emitido em duplicidade no documento (o painel do seletor deixou de repassá-lo ao abrir pelo popover; use `aoTrocarAlvo`).
14
+ - Espaço/Enter na amostra ativa com o seletor aberto fecham como o clique, e o Espaço não fecha mais o painel recém-aberto em navegadores que disparam o clique ao soltar a tecla.
15
+
16
+ **Acessibilidade**
17
+
18
+ - `abrirSeletorCor({ focar: true })` leva o foco ao painel (o controle usa ao abrir por teclado); ao fechar, o foco volta para a âncora. O painel ganha `aria-label` e as amostras da paleta `aria-pressed`.
19
+ - O grupo de amostras é anunciado como "Cores de desenho"; a dica/`aria-label` do preenchimento informa a opacidade.
20
+
21
+ **Visual**
22
+
23
+ - Amostras maiores (`--ui-controle-cores-amostra`, padrão 26px), coluna de ações alinhada, ícone "padrão" refeito e anel de foco visível.
24
+ - Ambos os componentes passam a usar os tokens do kit (`--ui-cor-texto`, `--ui-cor-borda`, `--ui-cor-primaria`…) e acompanham o tema claro; antes eram fixos no escuro.
25
+ - Seletor: trilha da opacidade preenchida até o valor, rótulos ORIGINAL/NOVA sempre legíveis, diagonal de "sem cor" igual à do controle, aba de preenchimento "sem cor" com a diagonal vermelha, `prefers-reduced-motion` respeitado e painel reposicionado ao redimensionar a janela.
26
+
27
+ ## 2.6.0 — 2026-10-17
28
+
29
+ ### `<ui-ribbon>` e `<ui-paleta-ferramentas>`: contrato com o consumidor
30
+
31
+ - **Valor inicial pendente**: `aba-ativa` / `valor` definidos antes de `abas` / `ferramentas` são aplicados quando os dados chegam; `aba-ativa` reflete a aba realmente ativa.
32
+ - **`valor = ''` / `limpar()`** removem a seleção da paleta (`ui-change` com `item: null`). Novas propriedades `orientacao`, `colunas`, `tamanho` (paleta) e `compacto` (ribbon); `valor` reflete no atributo usado (`valor` ou `value`).
33
+ - **Eventos**: `ui-ferramenta` agora é cancelável (`preventDefault()` reverte toggle/seleção); `definirAbaVisivel` emite `ui-aba-change` quando a aba ativa muda; novo `ui-recolhido-change`; tipos dos eventos no `HTMLElementEventMap` (`FerramentaDetail`, `AbaChangeDetail`, `PaletaChangeDetail`, `RecolhidoChangeDetail`).
34
+ - **Foco e roving tabindex**: re-renderizações preservam o foco; o tabindex acompanha o botão focado; `atualizarItem` não recria o DOM para mudanças de estado (paleta) nem para itens de outra aba (ribbon).
35
+ - **Menu/flyout**: `menuitemcheckbox`/`menuitemradio` com `aria-checked`, `aria-controls`, foco devolvido ao botão, fecha ao rolar, `ArrowDown` com menu aberto foca o primeiro item.
36
+ - **ARIA**: abas/painel ligados (`aria-controls`/`aria-labelledby`), `aria-label` e `rotulo-abas` configuráveis, `FerramentaItem.rotuloAcessivel`, `aria-keyshortcuts`; o nome acessível não cai mais no `id` quando há `rotulo` ou ícone nomeado.
37
+ - **Paleta**: grupo pula filho desabilitado/separador; clique longo cancelado ao arrastar; `suprimirClique` não prende mais o clique seguinte; atalhos ignoram `role=textbox` e `aria-modal`.
38
+ - `console.warn` para ids duplicados, `ativar()`/`atualizarItem()`/`selecionarAba()` com id inválido.
39
+
3
40
  ## 2.5.0
4
41
 
5
42
  ### `<ui-tabela>`: robustez, modo remoto e ordenação
package/README.md CHANGED
@@ -725,10 +725,10 @@ window.addEventListener('message', (event) => {
725
725
  | `<ui-stat>` | Cartão KPI de estatísticas, métricas e tendências. | `rotulo`, `valor`, `variacao`, `tendencia` (`alta`, `baixa`, `neutro`) | - |
726
726
  | `<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) |
727
727
  | `<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` |
728
- | `<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). | `abas`, `aba-ativa`, `recolhido`, `compacto` | `ui-ferramenta`, `ui-aba-change` |
729
- | `<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. | `ferramentas`, `valor`, `orientacao`, `colunas`, `tamanho`, `atalhos` | `ui-change`, `ui-selecionar`, `ui-ferramenta` |
730
- | `<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`. 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` |
731
- | `<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` | `ui-cor-input`, `ui-cor-confirmar`, `ui-cor-cancelar`, `ui-alvo-change` |
728
+ | `<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` |
729
+ | `<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` |
730
+ | `<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` |
731
+ | `<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` |
732
732
  | `<ui-mapa>` | Mapa geográfico interativo com camadas OpenStreetMap. | `lat`, `lng`, `zoom`, `camadas` | - |
733
733
  | `<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` |
734
734
  | `<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`, `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`) |
@@ -1,22 +1,34 @@
1
1
  import { FerramentaItem } from './tipos';
2
2
  export type VarianteBotaoFerramenta = 'grande' | 'pequeno' | 'paleta';
3
3
  export declare function criarIcone(icone: string | undefined, tamanho: number): HTMLElement | null;
4
+ export declare function nomeAcessivel(item: FerramentaItem): string;
4
5
  export declare function textoTooltip(item: FerramentaItem): string;
6
+ /** Avisa (console.warn) sobre ids repetidos. */
7
+ export declare function avisarIdsDuplicados(ids: string[], contexto: string): void;
8
+ export declare function coletarIds(itens: FerramentaItem[], saida?: string[]): string[];
5
9
  export declare function aplicarEstadoBotao(btn: HTMLButtonElement, item: FerramentaItem): void;
6
10
  export declare function criarBotaoFerramenta(item: FerramentaItem, variante: VarianteBotaoFerramenta, tamanhoIcone: number): HTMLButtonElement;
7
11
  export declare function acharItem(itens: FerramentaItem[], id: string): FerramentaItem | undefined;
8
12
  export declare function definirRoving(botoes: HTMLButtonElement[]): void;
13
+ /** Garante um único botão com tabindex 0, preservando o atual se ainda estiver habilitado. */
14
+ export declare function atualizarRoving(botoes: HTMLButtonElement[]): void;
15
+ /** O roving tabindex acompanha o botão que recebeu foco (clique, Tab ou programático). */
16
+ export declare function seguirFoco(botoes: HTMLButtonElement[], alvo: EventTarget | null): void;
9
17
  /** Move o foco entre botões com as setas informadas. Retorna true se tratou a tecla. */
10
18
  export declare function navegarRoving(e: KeyboardEvent, botoes: HTMLButtonElement[], teclasAnterior: string[], teclasProximo: string[]): boolean;
11
19
  export interface OpcoesMenu {
12
20
  lado?: 'baixo' | 'direita';
13
21
  /** Foca o primeiro item ao abrir (abertura por teclado). */
14
22
  focar?: boolean;
23
+ /** Papel dos itens sem `tipo`: ribbon = botao (menuitem), paleta = ferramenta (menuitemradio). */
24
+ tipoPadrao?: 'botao' | 'ferramenta';
15
25
  onFechar?: () => void;
16
26
  }
17
27
  export interface MenuHandle {
18
28
  elemento: HTMLElement;
19
29
  ancora: HTMLElement;
20
30
  fechar(): void;
31
+ /** Move o foco para o primeiro item habilitado. */
32
+ focarPrimeiro(): void;
21
33
  }
22
34
  export declare function abrirMenu(raiz: ShadowRoot, ancora: HTMLElement, itens: FerramentaItem[], onEscolher: (item: FerramentaItem) => void, opcoes?: OpcoesMenu): MenuHandle;
@@ -21,6 +21,11 @@ export interface FerramentaItem {
21
21
  tipo?: TipoFerramenta;
22
22
  ativo?: boolean;
23
23
  disabled?: boolean;
24
+ /**
25
+ * Nome acessível (leitor de tela) quando não há `rotulo` visível (ex.: botões só de ícone).
26
+ * Sem ele e sem `rotulo`, usa-se o nome do ícone e, por último, o `id`.
27
+ */
28
+ rotuloAcessivel?: string;
24
29
  /** Apenas ribbon: botão grande (ícone sobre o rótulo) ou pequeno (em colunas de 3). Padrão: 'pequeno'. */
25
30
  tamanho?: 'grande' | 'pequeno';
26
31
  /** Apenas ribbon: oculta o rótulo em botões pequenos. */
@@ -53,3 +58,28 @@ export interface FerramentaDetail {
53
58
  /** Apenas ribbon: id da aba ativa no momento do disparo. */
54
59
  aba?: string;
55
60
  }
61
+ /** `detail` de `ui-aba-change`. */
62
+ export interface AbaChangeDetail {
63
+ id: string;
64
+ aba: RibbonAba;
65
+ }
66
+ /** `detail` de `ui-change` / `ui-selecionar` da paleta. `item` é `null` quando a seleção é limpa (`valor = ''`). */
67
+ export interface PaletaChangeDetail {
68
+ valor: string;
69
+ item: FerramentaItem | null;
70
+ anterior: string;
71
+ }
72
+ /** `detail` de `ui-recolhido-change` do ribbon. */
73
+ export interface RecolhidoChangeDetail {
74
+ recolhido: boolean;
75
+ }
76
+ declare global {
77
+ interface HTMLElementEventMap {
78
+ /** Cancelável: `preventDefault()` reverte o toggle / a seleção feita pelo clique. */
79
+ 'ui-ferramenta': CustomEvent<FerramentaDetail>;
80
+ 'ui-aba-change': CustomEvent<AbaChangeDetail>;
81
+ 'ui-recolhido-change': CustomEvent<RecolhidoChangeDetail>;
82
+ 'ui-change': CustomEvent<PaletaChangeDetail>;
83
+ 'ui-selecionar': CustomEvent<PaletaChangeDetail>;
84
+ }
85
+ }
@@ -9,19 +9,26 @@ import { SafeHTMLElement } from '../../core/ssr-safe';
9
9
  * - Com o atributo `atalhos`, a tecla `atalho` do item ativa a ferramenta; teclas repetidas
10
10
  * entre itens percorrem o grupo.
11
11
  *
12
- * Atributos: valor, orientacao (vertical|horizontal), colunas (1|2), tamanho (sm|md|lg), atalhos
13
- * Propriedades: ferramentas, valor
14
- * Métodos: ativar(id), atualizarItem(id, parcial)
15
- * Eventos: ui-change / ui-selecionar { valor, item, anterior }, ui-ferramenta { id, item, pai?, ativo?, origem }
12
+ * Atributos: valor (vazio limpa a seleção), orientacao (vertical|horizontal), colunas (1|2),
13
+ * tamanho (sm|md|lg), atalhos, aria-label (rótulo da toolbar)
14
+ * Propriedades: ferramentas, valor, orientacao, colunas, tamanho
15
+ * Métodos: ativar(id), limpar(), atualizarItem(id, parcial)
16
+ * Eventos: ui-change / ui-selecionar { valor, item, anterior },
17
+ * ui-ferramenta { id, item, pai?, ativo?, origem } (cancelável: preventDefault reverte a ação)
18
+ *
19
+ * `valor` pode ser definido antes de `ferramentas`: fica pendente até a ferramenta existir.
16
20
  */
17
21
  export declare class UIPaletaFerramentas extends SafeHTMLElement {
18
22
  static get observedAttributes(): string[];
19
23
  private rootElement;
20
24
  private _ferramentas;
21
25
  private _ativo;
26
+ private _pendente;
22
27
  private visiveis;
23
28
  private menu;
24
29
  private timerPressao;
30
+ private timerSupressao;
31
+ private inicioPressao;
25
32
  private suprimirClique;
26
33
  private listeners;
27
34
  constructor();
@@ -34,17 +41,40 @@ export declare class UIPaletaFerramentas extends SafeHTMLElement {
34
41
  set valor(id: string);
35
42
  get value(): string;
36
43
  set value(id: string);
37
- /** Ativa uma ferramenta (exclusiva). Se estiver dentro de um grupo, ela passa a ser a exibida. */
44
+ get orientacao(): 'vertical' | 'horizontal';
45
+ set orientacao(val: 'vertical' | 'horizontal');
46
+ get colunas(): 1 | 2;
47
+ set colunas(val: 1 | 2);
48
+ get tamanho(): 'sm' | 'md' | 'lg';
49
+ set tamanho(val: 'sm' | 'md' | 'lg');
50
+ /**
51
+ * Ativa uma ferramenta (exclusiva). Se estiver dentro de um grupo, ela passa a ser a exibida.
52
+ * `id` vazio limpa a seleção. Se as `ferramentas` ainda não foram definidas, o valor fica pendente.
53
+ */
38
54
  ativar(id: string, emitir?: boolean): void;
55
+ /** Remove a seleção atual (nenhuma ferramenta ativa). Equivale a `valor = ''`. */
56
+ limpar(emitir?: boolean): void;
39
57
  atualizarItem(id: string, parcial: Partial<FerramentaItem>): void;
58
+ private refletirValor;
59
+ private aplicarPendente;
40
60
  private definirAtivoInterno;
61
+ private emitirMudanca;
62
+ /** Filho exibido de um grupo: o último usado, pulando separadores e itens desabilitados. */
41
63
  private itemExibido;
64
+ private itemParaBotao;
42
65
  private todasFerramentas;
43
66
  private renderizar;
44
67
  private botoes;
68
+ /** Reflete no botão o estado atual do item (sem recriar o DOM). */
69
+ private atualizarBotaoDe;
45
70
  private acionar;
46
71
  private handleClick;
72
+ private handleFocusIn;
47
73
  private handlePointerDown;
74
+ /** Arrastar/rolar com o dedo cancela o clique longo. */
75
+ private handlePointerMove;
76
+ /** Fim do gesto: cancela o timer e, se o flyout abriu, descarta a supressão logo após o `click` residual. */
77
+ private handlePointerFim;
48
78
  private cancelarPressao;
49
79
  private handleContextMenu;
50
80
  private handleKeyDown;
@@ -1,18 +1,15 @@
1
1
  import { FerramentaItem, RibbonAba } from './tipos';
2
2
  import { SafeHTMLElement } from '../../core/ssr-safe';
3
- /**
4
- * <ui-ribbon> — barra de ferramentas em abas com grupos (estilo AutoCAD / Word / Excel).
5
- *
6
- * Atributos: aba-ativa, recolhido, compacto
7
- * Propriedades: abas, abaAtiva, recolhido
8
- * Métodos: atualizarItem(id, parcial), definirAbaVisivel(id, visivel), selecionarAba(id)
9
- * Eventos: ui-ferramenta { id, item, pai?, ativo?, origem, aba }, ui-aba-change { id, aba }
10
- */
11
3
  export declare class UIRibbon extends SafeHTMLElement {
12
4
  static get observedAttributes(): string[];
13
5
  private rootElement;
14
6
  private abasElement;
15
7
  private gruposElement;
8
+ private painelElement;
9
+ private fixarElement;
10
+ private readonly uid;
11
+ private _abaPendente;
12
+ private _pronto;
16
13
  private _abas;
17
14
  private _abaAtiva;
18
15
  private menu;
@@ -21,24 +18,34 @@ export declare class UIRibbon extends SafeHTMLElement {
21
18
  connectedCallback(): void;
22
19
  disconnectedCallback(): void;
23
20
  attributeChangedCallback(name: string, old: string | null, value: string | null): void;
21
+ private aplicarRotulos;
24
22
  get abas(): RibbonAba[];
25
23
  set abas(val: RibbonAba[]);
26
24
  get abaAtiva(): string;
27
25
  set abaAtiva(id: string);
28
26
  get recolhido(): boolean;
29
27
  set recolhido(val: boolean);
28
+ get compacto(): boolean;
29
+ set compacto(val: boolean);
30
30
  selecionarAba(id: string, emitir?: boolean): void;
31
31
  definirAbaVisivel(id: string, visivel: boolean): void;
32
32
  /** Atualiza um item (estado ou aparência) sem precisar recriar as abas. */
33
33
  atualizarItem(id: string, parcial: Partial<FerramentaItem>): void;
34
+ private efetivo;
35
+ private capturarFoco;
36
+ private comFoco;
37
+ private handleFocusInGrupos;
34
38
  private abasVisiveis;
35
39
  private renderizar;
36
40
  private renderizarAbas;
41
+ private idAba;
37
42
  private renderizarPainel;
38
43
  private criarGrupo;
39
44
  private criarBotao;
40
45
  private botoesPainel;
41
46
  private handleClickAbas;
47
+ private handleClickFixar;
48
+ private get rtl();
42
49
  private handleDblClickAbas;
43
50
  private handleKeyDownAbas;
44
51
  private handleClickGrupos;
@@ -48,5 +55,6 @@ export declare class UIRibbon extends SafeHTMLElement {
48
55
  private acionar;
49
56
  private alternarMenu;
50
57
  private fecharMenu;
58
+ /** Retorna false se o consumidor cancelou o evento (preventDefault). */
51
59
  private emitir;
52
60
  }
@@ -41,6 +41,8 @@ export interface OpcoesSeletorCor {
41
41
  coresProjeto?: ValorCor[];
42
42
  /** Substitui a paleta padrão. */
43
43
  paleta?: ValorCor[];
44
+ /** Leva o foco do teclado para o painel ao abrir (ao fechar, o foco volta para a âncora). Padrão: `false`. */
45
+ focar?: boolean;
44
46
  /** Cada alteração (pré-visualização, ainda não confirmada). */
45
47
  aoAlterar?: (detalhe: DetalheSeletorCor) => void;
46
48
  /** Ao fechar confirmando: Concluir, ✕, Enter no hexadecimal, Esc ou clique fora. */
@@ -79,11 +79,16 @@ export declare class UIControleCores extends SafeHTMLElement {
79
79
  semCor(alvo?: AlvoCor): void;
80
80
  /** Volta às cores de `padrao-preenchimento` e `padrao-traco`; emite `ui-cores-change` confirmado. */
81
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). */
82
+ /** Abre o seletor de cor ancorado na amostra do alvo (que passa a ser o ativo). Com `focar`, leva o foco do teclado para o painel. */
83
+ abrirSeletor(alvo?: AlvoCor, focar?: boolean): void;
84
+ /**
85
+ * Fecha o seletor aberto por este controle. Com `confirmar` (padrão), grava o que foi editado;
86
+ * sem ele, cancela: as cores iniciais voltam (com um `ui-cores-change` não confirmado) e nada é confirmado.
87
+ */
85
88
  fecharSeletor(confirmar?: boolean): void;
86
89
  private mudarAlvo;
90
+ /** Mantém a aba do seletor aberto igual ao alvo do controle. */
91
+ private sincronizarSeletor;
87
92
  private aplicarDoSeletor;
88
93
  private emitirCores;
89
94
  private dica;
@@ -1,7 +1,7 @@
1
1
  import { SafeHTMLElement } from '../../core/ssr-safe';
2
2
  import { AlvoCor, DetalheSeletorCor, OpcoesSeletorCor, SeletorCorAberto, ValorCor } from './tipos';
3
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'>;
4
+ export type ConfiguracaoSeletorCor = Omit<OpcoesSeletorCor, 'ancora' | 'focar' | 'aoAlterar' | 'aoConfirmar' | 'aoCancelar' | 'aoTrocarAlvo'>;
5
5
  /**
6
6
  * <ui-seletor-cor> — painel de cor no estilo Illustrator: abas Preenchimento/Traço, prévia
7
7
  * antes × depois, hexadecimal, seletor do sistema, opacidade do preenchimento, cores do projeto,
@@ -51,6 +51,8 @@ export declare class UISeletorCor extends SafeHTMLElement {
51
51
  private get opacidadeVisivel();
52
52
  private renderizar;
53
53
  private atualizarVisual;
54
+ /** `activeElement` lança em alguns DOMs simulados quando o foco está em outra árvore de sombra. */
55
+ private campoEmFoco;
54
56
  private vincularEventos;
55
57
  private emitir;
56
58
  }
package/dist/cores.cjs CHANGED
@@ -1 +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;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const r=require("./ui-controle-cores-uY__TgwW.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;
package/dist/cores.js CHANGED
@@ -1,5 +1,5 @@
1
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";
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-DgEza3wF.js";
3
3
  export {
4
4
  e as PALETA_CORES_PADRAO,
5
5
  s as UIControleCores,