@seniorsistemas/angular-components 19.5.4 → 19.5.5
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/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +2 -0
- package/accordion/lib/accordion/models/accordion-button-settings.d.ts +5 -0
- package/button/lib/button/button.component.d.ts +5 -1
- package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +11 -3
- package/esm2022/accordion/lib/accordion/models/accordion-button-settings.mjs +1 -1
- package/esm2022/button/lib/button/button.component.mjs +9 -3
- package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +1 -1
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +2 -2
- package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +1 -1
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +1 -1
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +2 -2
- package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +1 -1
- package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
- package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
- package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +2 -2
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +1 -1
- package/esm2022/select/lib/select/select.component.mjs +86 -4
- package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +541 -0
- package/esm2022/shared/public-api.mjs +2 -1
- package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +2 -2
- package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +10 -2
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +8 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +9 -9
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +85 -3
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +541 -3
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/package.json +7 -7
- package/select/lib/select/select.component.d.ts +40 -2
- package/shared/lib/accessibility/datepicker-no-period-tab.directive.d.ts +177 -0
- package/shared/public-api.d.ts +1 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Diretiva para corrigir a acessibilidade do painel do DatePicker PrimeNG.
|
|
5
|
+
*
|
|
6
|
+
* Resolve os seguintes problemas:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Foco inicial ao abrir overlay**: move foco programaticamente para
|
|
9
|
+
* a célula selecionada, hoje, ou primeira célula disponível — evitando
|
|
10
|
+
* que NVDA leia toda estrutura do grid ao entrar no painel.
|
|
11
|
+
*
|
|
12
|
+
* 2. **Re-foco ao trocar view (mês/ano)**: ao navegar para views de mês ou
|
|
13
|
+
* ano, o DOM é destruído e recriado. Sem intervenção, foco escapa para
|
|
14
|
+
* `<body>` e NVDA lê conteúdo fora do overlay. A diretiva re-foca o
|
|
15
|
+
* primeiro elemento interativo da nova view.
|
|
16
|
+
*
|
|
17
|
+
* 3. **Focus-visible nos elementos internos**: injeta CSS global com
|
|
18
|
+
* outline para todos elementos interativos do overlay, garantindo
|
|
19
|
+
* feedback visual mesmo com `appendTo="body"`.
|
|
20
|
+
*
|
|
21
|
+
* 4. **aria-label enriquecido nos day cells**: PrimeNG seta apenas o
|
|
22
|
+
* número do dia. A diretiva sobrescreve com data completa formatada
|
|
23
|
+
* (ex: "3 de junho de 2026, Qua") — NVDA narra label sem precisar
|
|
24
|
+
* contextualizar toda grid.
|
|
25
|
+
*
|
|
26
|
+
* 5. **View de meses/anos sem tabindex**: spans de mês/ano recebem
|
|
27
|
+
* `tabindex="0"` e `role="option"` para navegação por teclado.
|
|
28
|
+
*
|
|
29
|
+
* Utiliza `MutationObserver` para detectar mudanças internas de view,
|
|
30
|
+
* já que PrimeNG não emite eventos para essas transições.
|
|
31
|
+
*
|
|
32
|
+
* **CSS**: A diretiva injeta um `<style>` global no `<head>` (uma vez).
|
|
33
|
+
* Para projetos que preferem controle manual, desabilite via Input
|
|
34
|
+
* `[sDatepickerInjectStyles]="false"` e importe os estilos manualmente.
|
|
35
|
+
*
|
|
36
|
+
* Uso: `<p-datepicker sDatepickerNoPeriodTab ...>`
|
|
37
|
+
*
|
|
38
|
+
* @category Directives
|
|
39
|
+
*/
|
|
40
|
+
export declare class DatepickerNoPeriodTabDirective implements OnDestroy {
|
|
41
|
+
private readonly datePicker;
|
|
42
|
+
private readonly renderer;
|
|
43
|
+
private readonly locale;
|
|
44
|
+
private readonly document;
|
|
45
|
+
private observer;
|
|
46
|
+
private focusListenerCleanups;
|
|
47
|
+
constructor();
|
|
48
|
+
onPanelShow(): void;
|
|
49
|
+
onNavigationChange(): void;
|
|
50
|
+
ngOnDestroy(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Move foco para melhor alvo disponível no painel.
|
|
53
|
+
* Usado ao abrir overlay e ao trocar view (mês/ano).
|
|
54
|
+
*
|
|
55
|
+
* Ao abrir: evita que NVDA leia toda estrutura do grid.
|
|
56
|
+
* Ao trocar view: previne foco escapar para `<body>` quando
|
|
57
|
+
* PrimeNG destrói DOM da view anterior.
|
|
58
|
+
*
|
|
59
|
+
* Prioridade: selecionado > hoje > primeiro disponível.
|
|
60
|
+
* Pula se foco já está no target correto (evita double-announce no NVDA).
|
|
61
|
+
*/
|
|
62
|
+
private focusBestTarget;
|
|
63
|
+
/**
|
|
64
|
+
* Injeta CSS global de focus-visible no `<head>` do documento.
|
|
65
|
+
* Executa apenas uma vez (idempotente via ID do style element).
|
|
66
|
+
* Necessário porque overlay com `appendTo="body"` fica fora do
|
|
67
|
+
* escopo de ViewEncapsulation do componente host.
|
|
68
|
+
*/
|
|
69
|
+
private injectGlobalFocusStyles;
|
|
70
|
+
/**
|
|
71
|
+
* Encontra melhor elemento para receber foco no painel atual.
|
|
72
|
+
* Busca em ordem: selecionado → hoje → primeiro disponível.
|
|
73
|
+
* Funciona para views de dias, meses e anos.
|
|
74
|
+
*/
|
|
75
|
+
private findFocusTarget;
|
|
76
|
+
/**
|
|
77
|
+
* Aplica correções de acessibilidade no painel do DatePicker,
|
|
78
|
+
* independente da view interna ativa (dias, meses ou anos).
|
|
79
|
+
*/
|
|
80
|
+
private fixPanelAccessibility;
|
|
81
|
+
/**
|
|
82
|
+
* Adiciona `role="gridcell"` nos `<span class="p-datepicker-day">` que recebem foco.
|
|
83
|
+
*
|
|
84
|
+
* PrimeNG coloca `tabindex` no `<span>` dentro do `<td>`, mas sem role explícito.
|
|
85
|
+
* NVDA não entra automaticamente em focus mode quando foca um elemento sem
|
|
86
|
+
* role de widget (gridcell, button, etc). Resultado: NVDA fica em browse mode
|
|
87
|
+
* e lê toda a tabela sequencialmente ao invés de anunciar só a célula focada.
|
|
88
|
+
*
|
|
89
|
+
* Ao adicionar `role="gridcell"` no span focável, NVDA reconhece que é um
|
|
90
|
+
* widget interativo e entra em focus mode — anunciando apenas o aria-label
|
|
91
|
+
* da célula focada.
|
|
92
|
+
*/
|
|
93
|
+
private applyGridcellRoleToDays;
|
|
94
|
+
/**
|
|
95
|
+
* Enriquece `aria-label` dos day cells com data completa formatada.
|
|
96
|
+
* PrimeNG por padrão usa apenas o número do dia, forçando NVDA
|
|
97
|
+
* a narrar contexto de grid (linha/coluna/weekday) para informar a data.
|
|
98
|
+
* Com aria-label completo, NVDA narra diretamente a data sem verbosidade.
|
|
99
|
+
*/
|
|
100
|
+
private enrichDayCellAriaLabels;
|
|
101
|
+
/**
|
|
102
|
+
* Adiciona aria-label no grid com mês/ano atual para dar contexto
|
|
103
|
+
* imediato ao NVDA ao entrar na tabela de dias.
|
|
104
|
+
* Exemplo: "Calendário, Junho 2026"
|
|
105
|
+
*/
|
|
106
|
+
private enrichGridAriaLabel;
|
|
107
|
+
/**
|
|
108
|
+
* Formata data para aria-label legível por leitor de tela.
|
|
109
|
+
* Sempre usa pt-BR para garantir consistência com labels traduzidos,
|
|
110
|
+
* independente do LOCALE_ID configurado no Angular.
|
|
111
|
+
* Exemplo: "3 de junho de 2026"
|
|
112
|
+
*/
|
|
113
|
+
private formatDateForAriaLabel;
|
|
114
|
+
/**
|
|
115
|
+
* Retorna locale string para formatação.
|
|
116
|
+
*/
|
|
117
|
+
private getLocale;
|
|
118
|
+
/**
|
|
119
|
+
* Traduz aria-labels dos botões do header que PrimeNG renderiza em inglês.
|
|
120
|
+
* PrimeNG usa `getTranslation('chooseDate')` etc, que retorna inglês
|
|
121
|
+
* se `PrimeNGConfig.setTranslation()` não foi configurado pelo projeto.
|
|
122
|
+
*
|
|
123
|
+
* Busca botões com aria-label em inglês e traduz pro locale atual.
|
|
124
|
+
*/
|
|
125
|
+
private translateAriaLabels;
|
|
126
|
+
/**
|
|
127
|
+
* Corrige aria-label dos botões prev/next do PrimeNG.
|
|
128
|
+
* PrimeNG usa `p-button` component que seta `aria-label` no host element `<p-button>`,
|
|
129
|
+
* mas NVDA foca o `<button>` interno que não herda o label do custom element.
|
|
130
|
+
*
|
|
131
|
+
* Estrutura DOM: `<p-button aria-label="Previous Month"><button class="p-datepicker-prev-button">...</button></p-button>`
|
|
132
|
+
*
|
|
133
|
+
* Fix: lê aria-label do `<p-button>` host, traduz, e propaga pro `<button>` interno.
|
|
134
|
+
*/
|
|
135
|
+
private fixNavigationButtonLabels;
|
|
136
|
+
/**
|
|
137
|
+
* Remove `role="application"` do container do calendário.
|
|
138
|
+
*
|
|
139
|
+
* PrimeNG seta `role="application"` no `.p-datepicker-calendar-container`
|
|
140
|
+
* para que arrow keys cheguem no JavaScript sem interceptação do browse mode.
|
|
141
|
+
* Porém `role="grid"` na table já garante esse comportamento — NVDA entra
|
|
142
|
+
* automaticamente em focus mode ao focar uma gridcell.
|
|
143
|
+
*
|
|
144
|
+
* O `role="application"` no container PAI causa NVDA a despeja o conteúdo
|
|
145
|
+
* virtual do container inteiro ao entrar no dialog, antes de pousar na célula.
|
|
146
|
+
* Removê-lo resolve a leitura excessiva sem quebrar navegação por setas.
|
|
147
|
+
*/
|
|
148
|
+
private removeApplicationRoleFromContainer;
|
|
149
|
+
/**
|
|
150
|
+
* Retorna mapa de traduções pro locale atual.
|
|
151
|
+
* Se locale é inglês ou não reconhecido, fallback pra pt-BR
|
|
152
|
+
* (assumimos que labels em inglês devem ser traduzidos).
|
|
153
|
+
*/
|
|
154
|
+
private getTranslations;
|
|
155
|
+
/**
|
|
156
|
+
* Adiciona listeners de focus/blur nos elementos interativos para
|
|
157
|
+
* garantir indicador visual quando `.focus()` é chamado programaticamente.
|
|
158
|
+
*
|
|
159
|
+
* `:focus-visible` pode não ser aplicado quando foco é movido via JS,
|
|
160
|
+
* então usamos classe auxiliar `s-datepicker-day-focused` como fallback.
|
|
161
|
+
*/
|
|
162
|
+
private setupFocusTracking;
|
|
163
|
+
/**
|
|
164
|
+
* Remove listeners de focus/blur registrados anteriormente.
|
|
165
|
+
*/
|
|
166
|
+
private removeFocusListeners;
|
|
167
|
+
/**
|
|
168
|
+
* Observa mudanças no DOM do painel para reaplicar correções
|
|
169
|
+
* quando o PrimeNG troca a view interna (dias → meses → anos).
|
|
170
|
+
* Usa debounce e só reage a childList changes (não attributes)
|
|
171
|
+
* para evitar loop infinito com as próprias mutações da diretiva.
|
|
172
|
+
*/
|
|
173
|
+
private observePanelChanges;
|
|
174
|
+
private disconnectObserver;
|
|
175
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerNoPeriodTabDirective, never>;
|
|
176
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DatepickerNoPeriodTabDirective, "[sDatepickerNoPeriodTab]", never, {}, {}, never, never, true, never>;
|
|
177
|
+
}
|
package/shared/public-api.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export { EnumSeverity } from './lib/shared/models/severities';
|
|
|
4
4
|
export { BorderButtonComponent } from './lib/shared/border-button/border-button.component';
|
|
5
5
|
export { BorderButtonModule } from './lib/shared/border-button/border-button.module';
|
|
6
6
|
export * from './lib/shared/helpers';
|
|
7
|
+
export { DatepickerNoPeriodTabDirective } from './lib/accessibility/datepicker-no-period-tab.directive';
|
|
7
8
|
export { PaginatorAccessibilityDirective } from './lib/accessibility/paginator-accessibility.directive';
|
|
8
9
|
export { TableCheckboxAccessibilityDirective } from './lib/accessibility/table-checkbox-accessibility.directive';
|