@thibezer/ui-components-kit 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +2 -2
- package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +12 -0
- package/dist/components/ui-barra-ferramentas/tipos.d.ts +30 -0
- package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +35 -5
- package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +16 -8
- package/dist/custom-elements.json +13654 -13181
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/register.cjs +1 -1
- package/dist/register.js +1 -1
- package/dist/tipos-elementos.d.ts +11 -4
- package/dist/tipos-vue.d.ts +11 -4
- package/dist/tools.cjs +1 -1
- package/dist/tools.js +1 -1
- package/dist/ui-paleta-ferramentas-Ccmo-rB5.cjs +21 -0
- package/dist/ui-paleta-ferramentas-DNN5i6nL.js +860 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.6.0 — 2026-10-17
|
|
4
|
+
|
|
5
|
+
### `<ui-ribbon>` e `<ui-paleta-ferramentas>`: contrato com o consumidor
|
|
6
|
+
|
|
7
|
+
- **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.
|
|
8
|
+
- **`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`).
|
|
9
|
+
- **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`).
|
|
10
|
+
- **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).
|
|
11
|
+
- **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.
|
|
12
|
+
- **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.
|
|
13
|
+
- **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`.
|
|
14
|
+
- `console.warn` para ids duplicados, `ativar()`/`atualizarItem()`/`selecionarAba()` com id inválido.
|
|
15
|
+
|
|
3
16
|
## 2.5.0
|
|
4
17
|
|
|
5
18
|
### `<ui-tabela>`: robustez, modo remoto e ordenação
|
package/README.md
CHANGED
|
@@ -725,8 +725,8 @@ 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` |
|
|
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
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
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` |
|
|
732
732
|
| `<ui-mapa>` | Mapa geográfico interativo com camadas OpenStreetMap. | `lat`, `lng`, `zoom`, `camadas` | - |
|
|
@@ -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),
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
-
|
|
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
|
}
|