@seniorsistemas/angular-components 19.3.3 → 19.3.4

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 (76) hide show
  1. package/accordion/README.md +166 -0
  2. package/alert/README.md +92 -0
  3. package/autocomplete/README.md +162 -0
  4. package/badge/README.md +126 -0
  5. package/bignumber-input/README.md +122 -0
  6. package/breadcrumb/README.md +144 -0
  7. package/button/README.md +159 -0
  8. package/calendar-mask/README.md +89 -0
  9. package/card/README.md +133 -0
  10. package/chat/README.md +130 -0
  11. package/checkbox/README.md +108 -0
  12. package/checkbox-list/README.md +149 -0
  13. package/chips/README.md +152 -0
  14. package/code-editor/README.md +149 -0
  15. package/collapse-link/README.md +128 -0
  16. package/confirm-dialog/README.md +105 -0
  17. package/content-generator/README.md +111 -0
  18. package/control-errors/README.md +92 -0
  19. package/country-phone-picker/README.md +121 -0
  20. package/currency/README.md +90 -0
  21. package/custom-fields/README.md +142 -0
  22. package/dialog/README.md +152 -0
  23. package/dynamic-form/README.md +176 -0
  24. package/editable-overlay/README.md +98 -0
  25. package/empty-state/README.md +134 -0
  26. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +4 -4
  27. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +3 -3
  28. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  29. package/fieldset/README.md +135 -0
  30. package/file-picker/README.md +162 -0
  31. package/file-upload/README.md +23 -7
  32. package/gantt/README.md +173 -0
  33. package/global-search/README.md +151 -0
  34. package/grid-menu/README.md +123 -0
  35. package/help-popover/README.md +134 -0
  36. package/ia-insight/README.md +24 -6
  37. package/image-cropper/README.md +140 -0
  38. package/infinite-scroll/README.md +130 -0
  39. package/info-sign/README.md +111 -0
  40. package/inline-edit/README.md +139 -0
  41. package/insights/README.md +159 -0
  42. package/interactive-content/README.md +120 -0
  43. package/kanban/README.md +184 -0
  44. package/label-value/README.md +154 -0
  45. package/loading-state/README.md +141 -0
  46. package/localized-number-input/README.md +128 -0
  47. package/mouse-events/README.md +157 -0
  48. package/navigation-button/README.md +160 -0
  49. package/numeric/README.md +147 -0
  50. package/numeric-mask/README.md +170 -0
  51. package/object-card/README.md +158 -0
  52. package/package.json +1 -1
  53. package/paginator/README.md +121 -0
  54. package/panel/README.md +147 -0
  55. package/password-strength/README.md +144 -0
  56. package/picklist/README.md +170 -0
  57. package/pin-code-field/README.md +137 -0
  58. package/product-header/README.md +33 -6
  59. package/profile-picture-picker/README.md +159 -0
  60. package/progressbar/README.md +136 -0
  61. package/radio-button/README.md +117 -0
  62. package/rating-scale/README.md +154 -0
  63. package/select/README.md +147 -0
  64. package/select-button/README.md +137 -0
  65. package/sidebar/README.md +117 -0
  66. package/slide-in-bar/README.md +122 -0
  67. package/slider/README.md +127 -0
  68. package/speech-recognition/README.md +104 -0
  69. package/split-button/README.md +126 -0
  70. package/spotlight/README.md +200 -0
  71. package/star-rating/README.md +127 -0
  72. package/stats-card/README.md +135 -0
  73. package/stepper/README.md +164 -0
  74. package/switch/README.md +125 -0
  75. package/table/README.md +185 -0
  76. package/text-area-ia/README.md +17 -6
@@ -0,0 +1,158 @@
1
+ # ObjectCard
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de card para exibição de um objeto de análise com cabeçalho principal, campos adicionais e painel expansível. Distribui automaticamente os campos visíveis conforme a largura disponível e suporta nível de severidade visual.
6
+
7
+ ## Quando usar
8
+
9
+ - Listar entidades de negócio (funcionários, contratos, produtos, servidores) com atributos estruturados
10
+ - Painéis de detalhes de registros que precisam exibir múltiplas informações de forma compacta e responsiva
11
+ - Dashboards com indicadores de status ou alertas visuais em entidades
12
+
13
+ ## Quando não usar
14
+
15
+ - Para exibir apenas métricas numéricas — use `StatsCard`
16
+ - Para containers genéricos de conteúdo sem estrutura de campos — use `Card` ou `Panel`
17
+ - Quando os dados são tabulares — use `Table`
18
+
19
+ ## Instalação
20
+
21
+ ```typescript
22
+ import { ObjectCardModule } from '@seniorsistemas/angular-components/object-card';
23
+
24
+ @NgModule({ imports: [ObjectCardModule] })
25
+ export class MeuModulo {}
26
+ ```
27
+
28
+ ## Uso básico
29
+
30
+ ```html
31
+ <s-object-card>
32
+ <s-object-card-main
33
+ label="Senior Sistemas"
34
+ description="Tecnologia para Gestão Empresarial"
35
+ iconClass="fa fa-building"
36
+ ></s-object-card-main>
37
+ <s-object-card-field label="Fundação" description="1988"></s-object-card-field>
38
+ <s-object-card-field label="Cidade" description="Blumenau - SC"></s-object-card-field>
39
+ </s-object-card>
40
+ ```
41
+
42
+ ## API
43
+
44
+ ### Inputs (`s-object-card`)
45
+
46
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
47
+ |-------------|------|--------|:-----------:|-----------|
48
+ | `id` | `string` | `'s-object-card-{n}'` | Não | Identificador do componente no DOM. Gerado automaticamente se omitido |
49
+ | `expanded` | `boolean` | `false` | Não | Define se o painel expansível está aberto |
50
+ | `expandTooltip` | `string` | `'Abrir painel'` | Não | Tooltip do botão de expandir |
51
+ | `collapseTooltip` | `string` | `'Fechar painel'` | Não | Tooltip do botão de colapsar |
52
+ | `fieldsMinWidth` | `number` | `200` | Não | Largura mínima em pixels de cada campo visível |
53
+ | `severity` | `Severities` | `'default'` | Não | Nível de severidade que altera o estilo da borda |
54
+ | `borderButtonOptions` | `BorderButtonOptions` | `undefined` | Não | Configuração do botão animado na borda lateral |
55
+
56
+ ### Outputs (`s-object-card`)
57
+
58
+ | Evento | Tipo | Descrição |
59
+ |--------|------|-----------|
60
+ | `expandedChange` | `EventEmitter<boolean>` | Emitido quando o estado de expansão muda |
61
+
62
+ ### Inputs (`s-object-card-main`)
63
+
64
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
65
+ |-------------|------|--------|:-----------:|-----------|
66
+ | `label` | `string` | `undefined` | Não | Texto principal do cabeçalho |
67
+ | `description` | `string` | `undefined` | Não | Subtítulo do cabeçalho |
68
+ | `imageSource` | `string` | `undefined` | Não | URL da imagem do thumbnail |
69
+ | `imageAlt` | `string` | `undefined` | Não | Texto alternativo da imagem |
70
+ | `imageFallback` | `string` | `undefined` | Não | URL de imagem de fallback |
71
+ | `iconClass` | `string` | `'fa fa-picture-o'` | Não | Classe de ícone exibido quando não há imagem |
72
+ | `hasThumbnail` | `boolean` | `true` | Não | Exibe ou oculta a área de thumbnail |
73
+ | `hasDescription` | `boolean` | `true` | Não | Exibe ou oculta a descrição |
74
+ | `isBrand` | `boolean` | `false` | Não | Modo logo/marca — altera proporção do thumbnail |
75
+ | `buttonLabel` | `string` | `undefined` | Não | Label do botão de ações |
76
+ | `buttonModel` | `TieredMenuItemData[]` | `[]` | Não | Itens do menu de ações |
77
+
78
+ ### Inputs (`s-object-card-field`)
79
+
80
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
81
+ |-------------|------|--------|:-----------:|-----------|
82
+ | `label` | `string` | `undefined` | Não | Rótulo do campo |
83
+ | `description` | `string` | `undefined` | Não | Valor textual do campo |
84
+ | `iconClass` | `string` | `undefined` | Não | Classe de ícone exibido no campo |
85
+ | `buttonLabel` | `string` | `undefined` | Não | Label de botão no campo (ex: link) |
86
+ | `buttonModel` | `TieredMenuItemData[]` | `[]` | Não | Itens do menu do botão do campo |
87
+ | `badge` | `string` | `''` | Não | Texto do badge colorido |
88
+ | `badgeColor` | `BadgeColors` | `'blue'` | Não | Cor do badge |
89
+
90
+ ### Tipos
91
+
92
+ ```typescript
93
+ type Severities = 'default' | 'info' | 'warn' | 'error' | 'success';
94
+
95
+ interface BorderButtonOptions {
96
+ visible?: (severity: Severities) => boolean;
97
+ label?: (severity: Severities) => string;
98
+ tooltip?: (severity: Severities) => string;
99
+ icon?: (severity: Severities) => string;
100
+ onClick?: () => void;
101
+ }
102
+ ```
103
+
104
+ ## Exemplos
105
+
106
+ ### Com botão de ações e campos
107
+
108
+ ```html
109
+ <s-object-card [expanded]="false" [fieldsMinWidth]="200">
110
+ <s-object-card-main
111
+ label="Colaborador"
112
+ description="Departamento de TI"
113
+ iconClass="far fa-user"
114
+ buttonLabel="Ações"
115
+ [buttonModel]="actionMenu"
116
+ ></s-object-card-main>
117
+ <s-object-card-field label="Cargo" description="Desenvolvedor Frontend"></s-object-card-field>
118
+ <s-object-card-field label="E-mail" buttonLabel="contato@empresa.com" iconClass="fa fa-envelope"></s-object-card-field>
119
+ <s-object-card-field label="Status" badge="Ativo" badgeColor="green"></s-object-card-field>
120
+ </s-object-card>
121
+ ```
122
+
123
+ ### Com severidade visual
124
+
125
+ ```html
126
+ <s-object-card [severity]="'error'">
127
+ <s-object-card-main
128
+ label="Servidor de Produção"
129
+ description="Infraestrutura"
130
+ iconClass="fa fa-server"
131
+ ></s-object-card-main>
132
+ <s-object-card-field label="CPU" description="87%"></s-object-card-field>
133
+ <s-object-card-field label="Status" badge="Crítico" badgeColor="red"></s-object-card-field>
134
+ </s-object-card>
135
+ ```
136
+
137
+ ### Com template customizado no label
138
+
139
+ ```html
140
+ <s-object-card-main description="Empresa parceira" iconClass="fa fa-building">
141
+ <span labelTemplate style="color: #2d7d46; font-weight: 600;">
142
+ <i class="fa fa-check-circle"></i> Senior Sistemas
143
+ </span>
144
+ </s-object-card-main>
145
+ ```
146
+
147
+ ## Acessibilidade
148
+
149
+ - O botão de expandir/colapsar possui tooltip acessível via `expandTooltip` e `collapseTooltip`
150
+ - Campos ocultos são acessíveis via teclado após expandir o painel
151
+ - Responsivo: em telas pequenas (≤ SM), todos os campos ficam ocultos e acessíveis via expansão
152
+ - Suporta navegação por teclado no botão de ações e no chevron de expansão
153
+
154
+ ## Componentes relacionados
155
+
156
+ - [`Card`](../card/README.md) — container genérico de conteúdo
157
+ - [`StatsCard`](../stats-card/README.md) — exibição de métricas numéricas
158
+ - [`Thumbnail`](../thumbnail/README.md) — exibição de imagem em miniatura
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seniorsistemas/angular-components",
3
- "version": "19.3.3",
3
+ "version": "19.3.4",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^18.2.14",
6
6
  "@angular/common": "^18.2.0",
@@ -0,0 +1,121 @@
1
+ # Paginator
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente standalone de paginação que exibe botões de navegação de páginas, seletor de itens por página e atalhos para a primeira e última página. Emite o evento `pageChange` a cada mudança de página ou de tamanho de página.
6
+
7
+ ## Quando usar
8
+
9
+ - Listagens e tabelas com dados paginados no servidor ou no cliente
10
+ - Sempre que o volume de registros tornar impraticável exibir tudo de uma vez
11
+ - Quando o usuário precisa controlar quantos itens são exibidos por página
12
+
13
+ ## Quando não usar
14
+
15
+ - Para listas com poucos itens que cabem em uma única tela — exiba todos sem paginação
16
+ - Quando a navegação é por rolagem infinita (infinite scroll) — use um mecanismo de scroll virtual
17
+
18
+ ## Instalação
19
+
20
+ ```typescript
21
+ import { PaginatorComponent } from '@seniorsistemas/angular-components/paginator';
22
+
23
+ @Component({
24
+ standalone: true,
25
+ imports: [PaginatorComponent],
26
+ })
27
+ export class MeuComponent {}
28
+ ```
29
+
30
+ ## Uso básico
31
+
32
+ ```html
33
+ <s-paginator
34
+ [totalRecords]="total"
35
+ [(rows)]="tamanhoPagina"
36
+ (pageChange)="onPaginaMudou($event)"
37
+ />
38
+ ```
39
+
40
+ ## API
41
+
42
+ ### Inputs
43
+
44
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
45
+ |-------------|------|--------|:-----------:|-----------|
46
+ | `totalRecords` | `number` | — | Sim | Número total de registros disponíveis para paginação |
47
+ | `rows` | `number` | `10` | Não | Número de itens por página. Suporta two-way binding via `[(rows)]` |
48
+ | `rowsPerPageOptions` | `number[]` | `[10, 20, 50, 100, 200]` | Não | Opções disponíveis no seletor de itens por página |
49
+
50
+ ### Outputs
51
+
52
+ | Evento | Tipo | Descrição |
53
+ |--------|------|-----------|
54
+ | `pageChange` | `OutputEmitterRef<PageChange>` | Emitido sempre que a página atual ou o número de itens por página muda |
55
+
56
+ ### Tipos
57
+
58
+ ```typescript
59
+ interface PageChange {
60
+ page: number; // Índice da página atual (base 0)
61
+ pageCount: number; // Total de páginas
62
+ rows: number; // Número de itens por página
63
+ first: number; // Índice do primeiro registro da página atual
64
+ }
65
+ ```
66
+
67
+ ## Exemplos
68
+
69
+ ### Paginação básica
70
+
71
+ ```html
72
+ <s-paginator
73
+ [totalRecords]="120"
74
+ [rows]="10"
75
+ [rowsPerPageOptions]="[10, 20, 50, 100, 200]"
76
+ (pageChange)="onPageChange($event)"
77
+ ></s-paginator>
78
+ ```
79
+
80
+ ### Com two-way binding nas linhas
81
+
82
+ ```html
83
+ <s-paginator
84
+ [totalRecords]="totalRegistros"
85
+ [(rows)]="itensPorPagina"
86
+ (pageChange)="carregarPagina($event)"
87
+ ></s-paginator>
88
+ ```
89
+
90
+ ### Grande volume de dados
91
+
92
+ ```html
93
+ <s-paginator
94
+ [totalRecords]="1000"
95
+ [rows]="20"
96
+ [rowsPerPageOptions]="[10, 20, 50, 100, 200]"
97
+ (pageChange)="onPageChange($event)"
98
+ ></s-paginator>
99
+ ```
100
+
101
+ ### Com opções personalizadas de itens por página
102
+
103
+ ```html
104
+ <s-paginator
105
+ [totalRecords]="80"
106
+ [rows]="10"
107
+ [rowsPerPageOptions]="[5, 10, 25]"
108
+ (pageChange)="onPageChange($event)"
109
+ ></s-paginator>
110
+ ```
111
+
112
+ ## Acessibilidade
113
+
114
+ - Os botões de navegação (primeira página, anterior, próxima, última) são elementos `<button>` nativos com estados desabilitados declarados via `disabled`
115
+ - Os botões de número de página são clicáveis via teclado (Tab + Enter/Space)
116
+ - O seletor de itens por página usa o componente `Select` com suporte a navegação por teclado
117
+
118
+ ## Componentes relacionados
119
+
120
+ - [`Table`](../table/README.md) — tabela de dados que integra o Paginator para navegação entre páginas
121
+ - [`Select`](../select/README.md) — componente de seleção usado internamente para o seletor de itens por página
@@ -0,0 +1,147 @@
1
+ # Panel
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente container com cabeçalho, corpo e rodapé opcionais. Suporta colapso com animação, diferentes níveis de severidade visual na borda e templates customizáveis para cada seção via `sTemplate`.
6
+
7
+ ## Quando usar
8
+
9
+ - Agrupar seções de conteúdo relacionado com título em formulários ou dashboards
10
+ - Seções opcionais que podem ser ocultadas pelo usuário (modo colapsável)
11
+ - Destacar áreas com estado de alerta, erro ou sucesso via severidade visual
12
+
13
+ ## Quando não usar
14
+
15
+ - Para múltiplas seções expansíveis e exclusivas — use `Accordion`
16
+ - Para agrupamento de campos de formulário com borda — use `Fieldset`
17
+ - Para containers sem necessidade de cabeçalho ou severidade — use `Card`
18
+
19
+ ## Instalação
20
+
21
+ ```typescript
22
+ import { PanelModule } from '@seniorsistemas/angular-components/panel';
23
+
24
+ @NgModule({ imports: [PanelModule] })
25
+ export class MeuModulo {}
26
+ ```
27
+
28
+ ## Uso básico
29
+
30
+ ```html
31
+ <s-panel header="Título do Painel">
32
+ <p>Conteúdo do painel via ng-content.</p>
33
+ </s-panel>
34
+ ```
35
+
36
+ ## API
37
+
38
+ ### Inputs
39
+
40
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
41
+ |-------------|------|--------|:-----------:|-----------|
42
+ | `header` | `string` | `undefined` | Não | Texto exibido no cabeçalho. Quando omitido, o cabeçalho não é renderizado |
43
+ | `toggleable` | `boolean` | `false` | Não | Exibe botão +/- no cabeçalho para colapsar/expandir o conteúdo |
44
+ | `collapsed` | `boolean` | `false` | Não | Define o estado inicial como colapsado. Requer `toggleable: true` |
45
+ | `severity` | `Severities` | `'default'` | Não | Aplica uma borda colorida lateral ao painel |
46
+ | `borderButtonOptions` | `BorderButtonOptions` | `undefined` | Não | Configuração do botão animado exibido na borda quando `severity` não é `'default'` |
47
+ | `class` | `string` | `''` | Não | Classes CSS adicionais aplicadas ao elemento raiz |
48
+
49
+ ### Outputs
50
+
51
+ | Evento | Tipo | Descrição |
52
+ |--------|------|-----------|
53
+ | `collapsedChange` | `EventEmitter<boolean>` | Emitido ao colapsar ou expandir o painel. Emite o novo estado booleano |
54
+
55
+ ### Tipos
56
+
57
+ ```typescript
58
+ type Severities = 'default' | 'info' | 'warn' | 'error' | 'success';
59
+
60
+ type PanelTemplateTypes = 'header' | 'body' | 'footer';
61
+
62
+ interface BorderButtonOptions {
63
+ visible?: (severity: Severities) => boolean;
64
+ label?: (severity: Severities) => string;
65
+ tooltip?: (severity: Severities) => string;
66
+ icon?: (severity: Severities) => string;
67
+ disabled?: (severity: Severities) => boolean;
68
+ onClick?: () => void;
69
+ }
70
+ ```
71
+
72
+ ## Exemplos
73
+
74
+ ### Painel básico com cabeçalho
75
+
76
+ ```html
77
+ <s-panel header="Informações Gerais">
78
+ <p>Conteúdo do painel via ng-content.</p>
79
+ </s-panel>
80
+ ```
81
+
82
+ ### Painel colapsável
83
+
84
+ ```html
85
+ <s-panel
86
+ header="Dados Adicionais"
87
+ [toggleable]="true"
88
+ [collapsed]="false"
89
+ (collapsedChange)="onColapsou($event)"
90
+ >
91
+ <p>Clique no +/- para colapsar ou expandir.</p>
92
+ </s-panel>
93
+ ```
94
+
95
+ ### Painel com severidade
96
+
97
+ ```html
98
+ <s-panel header="Atenção" severity="warn">
99
+ <p>Painel com borda de aviso.</p>
100
+ </s-panel>
101
+
102
+ <s-panel header="Erro Crítico" severity="error">
103
+ <p>Painel com borda de erro.</p>
104
+ </s-panel>
105
+ ```
106
+
107
+ ### Com template customizado no cabeçalho
108
+
109
+ ```html
110
+ <s-panel [toggleable]="true">
111
+ <ng-template sTemplate="header">
112
+ <div style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
113
+ <span style="font-weight: 600;">Header Customizado</span>
114
+ <span class="badge">Novo</span>
115
+ </div>
116
+ </ng-template>
117
+ <p>Conteúdo do painel.</p>
118
+ </s-panel>
119
+ ```
120
+
121
+ ### Com template de body e footer
122
+
123
+ ```html
124
+ <s-panel header="Painel com Footer">
125
+ <ng-template sTemplate="body">
126
+ <p>Conteúdo via sTemplate="body".</p>
127
+ </ng-template>
128
+ <ng-template sTemplate="footer">
129
+ <div style="display: flex; justify-content: flex-end; gap: 8px;">
130
+ <s-button label="Cancelar" priority="secondary"></s-button>
131
+ <s-button label="Salvar" priority="primary"></s-button>
132
+ </div>
133
+ </ng-template>
134
+ </s-panel>
135
+ ```
136
+
137
+ ## Acessibilidade
138
+
139
+ - O botão de toggle (+/-) é um elemento `<button>` nativo, acessível via teclado e leitores de tela
140
+ - A animação de colapso usa Angular Animations e não afeta a navegação por teclado
141
+ - O cabeçalho customizado via `sTemplate="header"` deve garantir contraste e semântica adequados pelo implementador
142
+
143
+ ## Componentes relacionados
144
+
145
+ - [`Accordion`](../accordion/README.md) — painéis expansíveis com múltiplos itens mutuamente exclusivos
146
+ - [`Card`](../card/README.md) — container com suporte a banner e templates
147
+ - [`Fieldset`](../fieldset/README.md) — agrupamento de campos de formulário
@@ -0,0 +1,144 @@
1
+ # PasswordStrength
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Diretiva Angular que adiciona um indicador visual de força de senha a qualquer campo de input. Ao receber foco ou a cada tecla digitada, exibe um popover com três barras coloridas e um título indicando o nível de força: fraca, média ou forte. Desaparece ao perder o foco.
6
+
7
+ ## Quando usar
8
+
9
+ - Formulários de cadastro e alteração de senha onde o feedback de segurança é importante
10
+ - Qualquer campo de senha que precise orientar o usuário sobre a complexidade mínima exigida
11
+
12
+ ## Quando não usar
13
+
14
+ - Para validação de senha no servidor — esta diretiva é apenas feedback visual no cliente
15
+ - Quando as regras de senha são exibidas de forma estática (lista de requisitos) — use texto informativo diretamente no formulário
16
+ - Em campos que não sejam de senha — use outros mecanismos de feedback
17
+
18
+ ## Instalação
19
+
20
+ ```typescript
21
+ import { PasswordStrengthModule } from '@seniorsistemas/angular-components/password-strength';
22
+
23
+ @NgModule({ imports: [PasswordStrengthModule] })
24
+ export class MeuModulo {}
25
+ ```
26
+
27
+ ## Uso básico
28
+
29
+ ```html
30
+ <input
31
+ type="password"
32
+ [sPasswordStrength]="true"
33
+ passwordStrengthDescription="A senha deve conter letras maiúsculas, números e caracteres especiais."
34
+ />
35
+ ```
36
+
37
+ ## API
38
+
39
+ ### Inputs (diretiva `sPasswordStrength`)
40
+
41
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
42
+ |-------------|------|--------|:-----------:|-----------|
43
+ | `sPasswordStrength` | `boolean` | `true` | Não | Habilita ou desabilita o indicador de força |
44
+ | `passwordStrengthDescription` | `string` | — | Sim | Texto de orientação exibido no indicador |
45
+ | `passwordStrengthPosition` | `PasswordStrengthPositions` | `'right'` | Não | Posição preferencial do indicador em relação ao campo |
46
+ | `passwordStrengthWeakTitle` | `string` | Tradução padrão | Não | Texto customizado para o nível fraco |
47
+ | `passwordStrengthMediumTitle` | `string` | Tradução padrão | Não | Texto customizado para o nível médio |
48
+ | `passwordStrengthStrongTitle` | `string` | Tradução padrão | Não | Texto customizado para o nível forte |
49
+ | `passwordStrengthValidation` | `(content: string) => PasswordStrengths` | Validação padrão | Não | Função customizada para calcular a força da senha |
50
+
51
+ ### Tipos
52
+
53
+ ```typescript
54
+ type PasswordStrengthPositions = 'top' | 'right' | 'left';
55
+
56
+ type PasswordStrengths = 'veryWeak' | 'weak' | 'medium' | 'strong';
57
+ ```
58
+
59
+ ### Validação padrão
60
+
61
+ A função padrão avalia os seguintes critérios (1 ponto cada):
62
+
63
+ - Comprimento mínimo de 6 caracteres
64
+ - Contém pelo menos um número
65
+ - Contém pelo menos uma letra minúscula
66
+ - Contém pelo menos uma letra maiúscula
67
+ - Contém pelo menos um caractere especial (`!@#$%&*.\\=+^~-`)
68
+
69
+ | Pontos | Nível |
70
+ |--------|-------|
71
+ | 0 | `veryWeak` |
72
+ | 1–3 | `weak` |
73
+ | 4 | `medium` |
74
+ | 5 | `strong` |
75
+
76
+ ## Exemplos
77
+
78
+ ### Campo padrão com validação padrão
79
+
80
+ ```html
81
+ <div style="display: flex; flex-direction: column; gap: 8px;">
82
+ <label>Senha</label>
83
+ <input
84
+ type="password"
85
+ [sPasswordStrength]="true"
86
+ passwordStrengthDescription="A senha deve ter letras maiúsculas, números e caracteres especiais."
87
+ />
88
+ </div>
89
+ ```
90
+
91
+ ### Com validação customizada
92
+
93
+ ```html
94
+ <input
95
+ type="password"
96
+ [sPasswordStrength]="true"
97
+ passwordStrengthDescription="A senha deve ter no mínimo 8 caracteres."
98
+ [passwordStrengthValidation]="meuValidador"
99
+ />
100
+ ```
101
+
102
+ ```typescript
103
+ meuValidador(content: string): PasswordStrengths {
104
+ if (content.length < 4) return 'veryWeak';
105
+ if (content.length < 6) return 'weak';
106
+ if (content.length < 8) return 'medium';
107
+ return 'strong';
108
+ }
109
+ ```
110
+
111
+ ### Com títulos customizados
112
+
113
+ ```html
114
+ <input
115
+ type="password"
116
+ [sPasswordStrength]="true"
117
+ passwordStrengthDescription="Use letras, números e símbolos."
118
+ passwordStrengthWeakTitle="Insegura"
119
+ passwordStrengthMediumTitle="Razoável"
120
+ passwordStrengthStrongTitle="Segura"
121
+ />
122
+ ```
123
+
124
+ ### Posicionado à esquerda
125
+
126
+ ```html
127
+ <input
128
+ type="password"
129
+ [sPasswordStrength]="true"
130
+ passwordStrengthDescription="Requisitos da senha."
131
+ passwordStrengthPosition="left"
132
+ />
133
+ ```
134
+
135
+ ## Acessibilidade
136
+
137
+ - O indicador é exibido ao focar o campo (`focus`) e a cada tecla digitada (`keyup`)
138
+ - O indicador desaparece ao perder o foco (`blur`)
139
+ - O componente reposiciona automaticamente entre `right`, `left` e `top` conforme o espaço disponível na viewport
140
+ - O texto de `passwordStrengthDescription` orienta o usuário sobre os requisitos da senha
141
+
142
+ ## Componentes relacionados
143
+
144
+ - [`PinCodeField`](../pin-code-field/README.md) — campo de código PIN com navegação entre dígitos