@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.
Files changed (77) hide show
  1. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +2 -0
  2. package/accordion/lib/accordion/models/accordion-button-settings.d.ts +5 -0
  3. package/button/lib/button/button.component.d.ts +5 -1
  4. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +11 -3
  5. package/esm2022/accordion/lib/accordion/models/accordion-button-settings.mjs +1 -1
  6. package/esm2022/button/lib/button/button.component.mjs +9 -3
  7. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +1 -1
  8. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +1 -1
  9. package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +2 -2
  10. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +2 -2
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +2 -2
  15. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +2 -2
  16. package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +2 -2
  17. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +2 -2
  18. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
  19. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +1 -1
  20. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +1 -1
  21. package/esm2022/global-search/lib/global-search/global-search.component.mjs +2 -2
  22. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
  23. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
  24. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  25. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +1 -1
  26. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
  27. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
  28. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
  29. package/esm2022/picklist/lib/picklist/picklist.component.mjs +2 -2
  30. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +1 -1
  31. package/esm2022/select/lib/select/select.component.mjs +86 -4
  32. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +541 -0
  33. package/esm2022/shared/public-api.mjs +2 -1
  34. package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +2 -2
  35. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +10 -2
  37. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-button.mjs +8 -2
  39. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
  41. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
  43. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +9 -9
  45. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
  47. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  48. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
  49. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
  51. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
  53. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
  55. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
  57. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  58. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +1 -1
  59. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  61. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  64. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-select.mjs +85 -3
  67. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-shared.mjs +541 -3
  69. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  70. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -1
  72. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  74. package/package.json +7 -7
  75. package/select/lib/select/select.component.d.ts +40 -2
  76. package/shared/lib/accessibility/datepicker-no-period-tab.directive.d.ts +177 -0
  77. 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
+ }
@@ -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';