@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,127 @@
1
+ # StarRating
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de avaliação por estrelas para coletar feedback de usuários. Permite selecionar uma nota em uma escala visual de estrelas, com suporte à integração com Reactive Forms e ngModel.
6
+
7
+ ## Quando usar
8
+
9
+ - Avaliação de produtos em e-commerce
10
+ - Coleta de feedback de serviços ou atendimento
11
+ - Classificação de conteúdo (artigos, vídeos, cursos)
12
+ - Formulários de satisfação do usuário
13
+
14
+ ## Quando não usar
15
+
16
+ - Escalas de avaliação com texto descritivo por nível — prefira `RadioButtonGroup` com labels
17
+ - Coleta de sentimento binário (positivo/negativo) — prefira um par de botões ou `Switch`
18
+ - Exibição de média de avaliações sem interação — considere usar ícones estáticos
19
+
20
+ ## Instalação
21
+
22
+ ```typescript
23
+ import { StarRatingComponent } from '@seniorsistemas/angular-components/star-rating';
24
+
25
+ @Component({ standalone: true, imports: [StarRatingComponent] })
26
+ export class MeuComponent {}
27
+ ```
28
+
29
+ ## Uso básico
30
+
31
+ ```html
32
+ <s-star-rating formControlName="avaliacao" [starsRange]="5" />
33
+ ```
34
+
35
+ ## API
36
+
37
+ ### Inputs
38
+
39
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
40
+ |-------------|------|--------|:-----------:|-----------|
41
+ | `selectedStar` | `ModelSignal<number>` | `0` | Não | Índice da estrela selecionada (1-based). Suporta `[(selectedStar)]` |
42
+ | `starsRange` | `InputSignal<number>` | `5` | Não | Número total de estrelas exibidas |
43
+ | `justifyContent` | `JustifyTypes` | `'center'` | Não | Alinhamento horizontal das estrelas |
44
+ | `disabled` | `ModelSignal<boolean>` | `false` | Não | Desabilita a seleção de estrelas. Suporta `[(disabled)]` |
45
+
46
+ ### Tipos
47
+
48
+ ```typescript
49
+ type JustifyTypes =
50
+ | 'start' | 'end' | 'center'
51
+ | 'between' | 'around' | 'evenly'
52
+ | 'stretch' | 'baseline' | 'normal'
53
+ | 'end-safe' | 'center-safe';
54
+ ```
55
+
56
+ ## Exemplos
57
+
58
+ ### Avaliação padrão com 5 estrelas
59
+
60
+ ```html
61
+ <s-star-rating
62
+ [selectedStar]="3"
63
+ [starsRange]="5"
64
+ justifyContent="center"
65
+ ></s-star-rating>
66
+ ```
67
+
68
+ ### Integração com Reactive Forms
69
+
70
+ ```html
71
+ <form [formGroup]="formGroup">
72
+ <s-star-rating
73
+ formControlName="avaliacao"
74
+ [starsRange]="5"
75
+ justifyContent="center"
76
+ ></s-star-rating>
77
+ <p>Valor selecionado: {{ formGroup.get('avaliacao')?.value }} estrela(s)</p>
78
+ </form>
79
+ ```
80
+
81
+ ```typescript
82
+ formGroup = new FormGroup({
83
+ avaliacao: new FormControl(2),
84
+ });
85
+ ```
86
+
87
+ ### Escala customizada de 10 estrelas
88
+
89
+ ```html
90
+ <s-star-rating
91
+ [(selectedStar)]="nota"
92
+ [starsRange]="10"
93
+ justifyContent="center"
94
+ ></s-star-rating>
95
+ ```
96
+
97
+ ### Somente leitura (desabilitado)
98
+
99
+ ```html
100
+ <s-star-rating
101
+ [selectedStar]="mediaAvaliacoes"
102
+ [starsRange]="5"
103
+ [disabled]="true"
104
+ justifyContent="start"
105
+ ></s-star-rating>
106
+ ```
107
+
108
+ ### Alinhamento à esquerda em listagem
109
+
110
+ ```html
111
+ <s-star-rating
112
+ [selectedStar]="produto.avaliacao"
113
+ [starsRange]="5"
114
+ justifyContent="start"
115
+ ></s-star-rating>
116
+ ```
117
+
118
+ ## Acessibilidade
119
+
120
+ - Cada estrela é renderizada com `role="radio"` dentro de um grupo de radiobuttons
121
+ - Navegação por teclado: `Tab` para focar o grupo, `ArrowLeft`/`ArrowRight` para navegar entre estrelas
122
+ - Clicar na estrela já selecionada a deseleciona (retorna o valor para `0`)
123
+ - O estado `disabled` bloqueia totalmente a interação e é propagado via `setDisabledState` do `ControlValueAccessor`
124
+
125
+ ## Componentes relacionados
126
+
127
+ - [`RadioButtonGroup`](../radio-button-group/README.md) — seleção única com rótulos descritivos por opção
@@ -0,0 +1,135 @@
1
+ # StatsCard
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Card de estatística que exibe um valor numérico com ícone, rótulo e animação de contagem. Suporta diferentes estilos visuais (modo claro, modo escuro, versão leve) e pode emitir evento ao ser clicado.
6
+
7
+ ## Quando usar
8
+
9
+ - Dashboards com métricas e indicadores de performance
10
+ - Painéis de resumo com dados numéricos relevantes (totais, contagens, KPIs)
11
+ - Indicadores visuais que precisam destacar variações de valor com animação
12
+
13
+ ## Quando não usar
14
+
15
+ - Exibição de dados textuais complexos — prefira `Card` ou um componente de lista
16
+ - Navegação para outra seção — prefira `Tile`
17
+ - Indicadores sem valor numérico central
18
+
19
+ ## Instalação
20
+
21
+ ```typescript
22
+ import { StatsCardModule } from '@seniorsistemas/angular-components/stats-card';
23
+
24
+ @NgModule({ imports: [StatsCardModule] })
25
+ export class MeuModule {}
26
+ ```
27
+
28
+ ## Uso básico
29
+
30
+ ```html
31
+ <s-stats-card
32
+ label="Vendas"
33
+ value="1.234"
34
+ iconClass="fas fa-shopping-cart"
35
+ color="#3399ff"
36
+ />
37
+ ```
38
+
39
+ ## API
40
+
41
+ ### Inputs
42
+
43
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
44
+ |-------------|------|--------|:-----------:|-----------|
45
+ | `label` | `string` | — | Sim | Rótulo descritivo da estatística exibida |
46
+ | `value` | `string` | `'0'` | Não | Valor numérico exibido. Quando `animateNumbers` está ativo, a contagem é animada |
47
+ | `iconClass` | `string` | `'fa fa-bar-chart'` | Não | Classe CSS do ícone (Font Awesome) |
48
+ | `color` | `string` | `'#339966'` | Não | Cor de destaque do card em formato CSS |
49
+ | `lightMode` | `boolean` | `true` | Não | Ativa o modo de cores claras (ícone com fundo colorido) |
50
+ | `lightVersion` | `boolean` | `false` | Não | Ativa a versão visual leve (sem sombra e com fundo claro) |
51
+ | `alwaysWithBorder` | `boolean` | `false` | Não | Exibe borda mesmo quando o card não está em destaque |
52
+ | `animateNumbers` | `boolean` | `true` | Não | Habilita a animação de contagem ao atualizar o valor |
53
+ | `clickable` | `boolean` | `false` | Não | Habilita o cursor de ponteiro e o evento de clique |
54
+ | `tooltip` | `string` | `''` | Não | Texto do tooltip exibido ao passar o mouse sobre o card |
55
+ | `id` | `string` | `'s-stats-card-{n}'` | Não | Identificador único do card no DOM |
56
+
57
+ ### Outputs
58
+
59
+ | Evento | Tipo | Descrição |
60
+ |--------|------|-----------|
61
+ | `clicked` | `EventEmitter<MouseEvent>` | Emitido quando o usuário clica no card (requer `clickable = true`) |
62
+
63
+ ## Exemplos
64
+
65
+ ### Card padrão (modo claro)
66
+
67
+ ```html
68
+ <s-stats-card
69
+ label="População"
70
+ value="214000000"
71
+ iconClass="fa fa-users"
72
+ color="#339966"
73
+ [lightMode]="true"
74
+ ></s-stats-card>
75
+ ```
76
+
77
+ ### Card modo escuro
78
+
79
+ ```html
80
+ <s-stats-card
81
+ label="Área territorial"
82
+ value="8515767 km²"
83
+ iconClass="fa fa-map"
84
+ color="#F45B5B"
85
+ [lightMode]="false"
86
+ ></s-stats-card>
87
+ ```
88
+
89
+ ### Card clicável
90
+
91
+ ```html
92
+ <s-stats-card
93
+ label="Estados"
94
+ value="27"
95
+ iconClass="fa fa-flag"
96
+ color="#4A90E2"
97
+ [clickable]="true"
98
+ [alwaysWithBorder]="true"
99
+ tooltip="Clique para ver detalhes"
100
+ (clicked)="onVerDetalhes($event)"
101
+ ></s-stats-card>
102
+ ```
103
+
104
+ ### Grid de múltiplos cards
105
+
106
+ ```html
107
+ <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 1rem;">
108
+ <s-stats-card label="Total de pedidos" value="1.234" iconClass="fa fa-shopping-cart" color="#339966" [lightMode]="true"></s-stats-card>
109
+ <s-stats-card label="Receita" value="R$ 45.200" iconClass="fa fa-dollar" color="#4A90E2" [lightMode]="false"></s-stats-card>
110
+ <s-stats-card label="Usuários ativos" value="892" iconClass="fa fa-users" color="#9B59B6" [lightMode]="true" [lightVersion]="true"></s-stats-card>
111
+ </div>
112
+ ```
113
+
114
+ ### Com valor dinâmico e animação
115
+
116
+ ```html
117
+ <s-stats-card
118
+ label="Visitantes hoje"
119
+ [value]="visitantesHoje.toString()"
120
+ iconClass="fa fa-eye"
121
+ color="#339966"
122
+ [animateNumbers]="true"
123
+ ></s-stats-card>
124
+ ```
125
+
126
+ ## Acessibilidade
127
+
128
+ - Quando `clickable = true`, o card recebe cursor pointer; recomenda-se fornecer `tooltip` descritivo para leitores de tela
129
+ - A animação de contagem tem duração de 200ms com steps de 20ms; não é disparada quando `animateNumbers = false`
130
+ - O atributo `id` permite associar o card a outros elementos acessíveis na página
131
+
132
+ ## Componentes relacionados
133
+
134
+ - [`Tile`](../tile/README.md) — card clicável para navegação
135
+ - [`Card`](../card/README.md) — container genérico de conteúdo
@@ -0,0 +1,164 @@
1
+ # Stepper
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de progresso em etapas que exibe uma linha do tempo horizontal de passos com animações. Permite ao usuário visualizar e navegar entre etapas de um fluxo sequencial. Suporta passos ocultos, desabilitados e diferentes estados visuais (sucesso, aviso).
6
+
7
+ > **Nota:** O seletor `s-steps` e o pacote `steps` estão descontinuados. Use `s-stepper` e o pacote `stepper` em novos projetos. O seletor antigo será removido na versão 20.0.0.
8
+
9
+ ## Quando usar
10
+
11
+ - Formulários multi-etapa (wizard) com progresso visível
12
+ - Onboarding de novos usuários com passos sequenciais
13
+ - Processos de checkout ou cadastro com etapas bem definidas
14
+ - Fluxos onde o usuário pode navegar de volta para corrigir etapas anteriores
15
+
16
+ ## Quando não usar
17
+
18
+ - Fluxos com apenas 2 passos — prefira botões Anterior/Próximo simples
19
+ - Navegação geral da aplicação — prefira tabs ou breadcrumbs
20
+ - Processos sem sequência clara entre etapas
21
+
22
+ ## Instalação
23
+
24
+ ```typescript
25
+ import { StepperModule } from '@seniorsistemas/angular-components/stepper';
26
+
27
+ @NgModule({ imports: [StepperModule] })
28
+ export class MeuModule {}
29
+ ```
30
+
31
+ ## Uso básico
32
+
33
+ ```html
34
+ <s-stepper
35
+ [steps]="etapas"
36
+ [activeIndex]="etapaAtiva"
37
+ (stepSelected)="onEtapaSelecionada($event)"
38
+ />
39
+ ```
40
+
41
+ ## API
42
+
43
+ ### Inputs
44
+
45
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
46
+ |-------------|------|--------|:-----------:|-----------|
47
+ | `steps` | `Step[]` | — | Sim | Lista de etapas exibidas no stepper |
48
+ | `activeIndex` | `number` | `0` | Sim | Índice (0-based) da etapa atualmente ativa. Controlado externamente |
49
+ | `id` | `string` | `'s-steps-{n}'` | Não | Identificador único do componente no DOM |
50
+
51
+ ### Outputs
52
+
53
+ | Evento | Tipo | Descrição |
54
+ |--------|------|-----------|
55
+ | `stepSelected` | `EventEmitter<StepSelectionEvent>` | Emitido quando o usuário clica em uma etapa habilitada e não ativa |
56
+
57
+ ### Tipos
58
+
59
+ ```typescript
60
+ interface Step {
61
+ id: any;
62
+ label: string; // Texto exibido abaixo do indicador. Obrigatório.
63
+ state?: StepState; // Estado visual do passo
64
+ disabled?: boolean; // Impede clique e aplica estilo desabilitado
65
+ hidden?: boolean; // Remove o passo da renderização
66
+ tooltip?: string; // Texto do tooltip ao passar o mouse
67
+ ariaLabel?: string; // Label acessível alternativo
68
+ ariaControls?: string; // ID do painel controlado por este passo
69
+ }
70
+
71
+ enum StepState {
72
+ Default = 'default',
73
+ Success = 'success',
74
+ Warning = 'warning',
75
+ }
76
+
77
+ interface StepSelectionEvent {
78
+ step: Step; // Objeto Step selecionado
79
+ index: number; // Índice da etapa selecionada
80
+ event: Event; // Evento de clique original
81
+ }
82
+ ```
83
+
84
+ ## Exemplos
85
+
86
+ ### Fluxo básico com 4 etapas
87
+
88
+ ```html
89
+ <s-stepper
90
+ [steps]="etapas"
91
+ [activeIndex]="etapaAtual"
92
+ (stepSelected)="onSelecionar($event)"
93
+ ></s-stepper>
94
+ ```
95
+
96
+ ```typescript
97
+ etapas: Step[] = [
98
+ { id: '1', label: 'Dados Pessoais' },
99
+ { id: '2', label: 'Endereço' },
100
+ { id: '3', label: 'Contato' },
101
+ { id: '4', label: 'Confirmação' },
102
+ ];
103
+
104
+ onSelecionar(event: StepSelectionEvent): void {
105
+ this.etapaAtual = event.index;
106
+ }
107
+ ```
108
+
109
+ ### Com estados visuais
110
+
111
+ ```typescript
112
+ etapas: Step[] = [
113
+ { id: '1', label: 'Dados Pessoais', state: StepState.Success },
114
+ { id: '2', label: 'Endereço', state: StepState.Warning },
115
+ { id: '3', label: 'Documentos', state: StepState.Success },
116
+ { id: '4', label: 'Confirmação' },
117
+ ];
118
+ ```
119
+
120
+ ### Modo linear (passos futuros bloqueados)
121
+
122
+ ```typescript
123
+ etapas: Step[] = [
124
+ { id: '1', label: 'Concluído', state: StepState.Success },
125
+ { id: '2', label: 'Em Andamento' },
126
+ { id: '3', label: 'Bloqueado', disabled: true },
127
+ { id: '4', label: 'Bloqueado', disabled: true },
128
+ ];
129
+ ```
130
+
131
+ ### Com tooltips explicativos
132
+
133
+ ```typescript
134
+ etapas: Step[] = [
135
+ { id: '1', label: 'Cadastro', state: StepState.Success, tooltip: 'Etapa concluída' },
136
+ { id: '2', label: 'Validação', tooltip: 'Valide seu e-mail e telefone' },
137
+ { id: '3', label: 'Aprovação', disabled: true, tooltip: 'Aguardando validação' },
138
+ ];
139
+ ```
140
+
141
+ ### Com botões de navegação
142
+
143
+ ```html
144
+ <s-stepper [steps]="etapas" [activeIndex]="etapaAtual" (stepSelected)="onSelecionar($event)"></s-stepper>
145
+
146
+ <div style="display: flex; gap: 8px; margin-top: 16px; justify-content: flex-end;">
147
+ <button [disabled]="etapaAtual === 0" (click)="voltar()">Voltar</button>
148
+ <button [disabled]="etapaAtual === etapas.length - 1" (click)="avancar()">Avançar</button>
149
+ </div>
150
+ ```
151
+
152
+ ## Acessibilidade
153
+
154
+ - O componente possui `role="tablist"` e `aria-orientation="horizontal"`
155
+ - Cada passo é renderizado com `role="tab"` e `aria-selected`
156
+ - O atributo `ariaLabel` permite fornecer um nome alternativo mais descritivo para leitores de tela
157
+ - O atributo `ariaControls` vincula o passo ao painel de conteúdo correspondente
158
+ - Passos visitados (índice menor que `activeIndex`) recebem ícone de check automaticamente
159
+ - A barra de progresso entre os passos é animada ao mudar o `activeIndex`
160
+
161
+ ## Componentes relacionados
162
+
163
+ - [`Steps`](../steps/README.md) — alias depreciado para este componente
164
+ - [`Accordion`](../accordion/README.md) — organização de conteúdo em seções expansíveis
@@ -0,0 +1,125 @@
1
+ # Switch
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de chave tipo switch (liga/desliga) para alternar entre dois estados booleanos. Implementa `ControlValueAccessor` para uso em formulários Angular. Suporta rótulos personalizados para os estados verdadeiro e falso, além de modo somente leitura.
6
+
7
+ ## Quando usar
8
+
9
+ - Ativar ou desativar funcionalidades ou configurações
10
+ - Preferências do usuário (notificações, atualizações automáticas)
11
+ - Qualquer contexto com decisão binária clara (ligado/desligado, ativo/inativo)
12
+
13
+ ## Quando não usar
14
+
15
+ - Seleção de múltiplas opções — prefira `Checkbox`
16
+ - Escolha entre mais de dois estados — prefira `RadioButtonGroup` ou `SelectButton`
17
+ - Quando o estado precisa de confirmação antes de ser aplicado — prefira `Checkbox` com botão de submissão
18
+
19
+ ## Instalação
20
+
21
+ ```typescript
22
+ import { SwitchModule } from '@seniorsistemas/angular-components/switch';
23
+
24
+ @NgModule({ imports: [SwitchModule] })
25
+ export class MeuModule {}
26
+ ```
27
+
28
+ ## Uso básico
29
+
30
+ ```html
31
+ <s-switch formControlName="ativo" trueLabel="Ativo" falseLabel="Inativo" />
32
+ ```
33
+
34
+ ## API
35
+
36
+ ### Inputs
37
+
38
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
39
+ |-------------|------|--------|:-----------:|-----------|
40
+ | `value` | `boolean` | `false` | Não | Estado atual do switch |
41
+ | `trueLabel` | `string` | `'Ligado'` | Não | Rótulo exibido quando o valor é `true` |
42
+ | `falseLabel` | `string` | `'Desligado'` | Não | Rótulo exibido quando o valor é `false` |
43
+ | `disabled` | `boolean` | `false` | Não | Desabilita o componente, impedindo interação e alterações |
44
+ | `readonly` | `boolean` | `false` | Não | Impede alterações pelo usuário sem desabilitar visualmente o campo |
45
+ | `showStatusLabel` | `boolean` | `true` | Não | Controla se o label de status (trueLabel/falseLabel) é exibido |
46
+ | `inputId` | `string` | `undefined` | Não | ID do `<input>` interno para associação com `<label>` externo |
47
+ | `inputName` | `string` | `undefined` | Não | Atributo `name` do `<input>` interno |
48
+ | `label` | `string` | `undefined` | Não | Nome acessível descritivo para tecnologias assistivas (`aria-label`) |
49
+
50
+ ### Outputs
51
+
52
+ | Evento | Tipo | Descrição |
53
+ |--------|------|-----------|
54
+ | `valueChanged` | `EventEmitter<boolean>` | Emitido quando o valor do switch muda, com o novo estado booleano |
55
+
56
+ ## Exemplos
57
+
58
+ ### Switch básico sem labels
59
+
60
+ ```html
61
+ <s-switch formControlName="ativo"></s-switch>
62
+ ```
63
+
64
+ ### Com labels customizados
65
+
66
+ ```html
67
+ <s-switch
68
+ formControlName="notificacoes"
69
+ trueLabel="Notificações ativadas"
70
+ falseLabel="Notificações desativadas"
71
+ ></s-switch>
72
+ ```
73
+
74
+ ### Integração com Reactive Forms
75
+
76
+ ```html
77
+ <form [formGroup]="form" (ngSubmit)="salvar()">
78
+ <s-switch
79
+ formControlName="notificacoes"
80
+ trueLabel="Notificações Ativadas"
81
+ falseLabel="Notificações Desativadas"
82
+ ></s-switch>
83
+ <s-switch
84
+ formControlName="marketing"
85
+ trueLabel="Aceito receber ofertas"
86
+ falseLabel="Não aceito ofertas"
87
+ ></s-switch>
88
+ <s-switch
89
+ formControlName="atualizacoes"
90
+ trueLabel="Atualizações automáticas"
91
+ falseLabel="Atualizações manuais"
92
+ ></s-switch>
93
+ <button type="submit">Salvar Preferências</button>
94
+ </form>
95
+ ```
96
+
97
+ ### Somente leitura (readonly)
98
+
99
+ ```html
100
+ <!-- Mantém aparência habilitada, mas bloqueia alterações -->
101
+ <s-switch [value]="true" trueLabel="Ativo" falseLabel="Inativo" [readonly]="true"></s-switch>
102
+ ```
103
+
104
+ ### Desabilitado
105
+
106
+ ```html
107
+ <s-switch
108
+ trueLabel="Habilitado"
109
+ falseLabel="Desabilitado"
110
+ [disabled]="true"
111
+ ></s-switch>
112
+ ```
113
+
114
+ ## Acessibilidade
115
+
116
+ - O elemento interno é um `<input type="checkbox">` com `role="switch"`, garantindo semântica correta para leitores de tela
117
+ - Pode ser ativado/desativado com `Espaço` quando em foco
118
+ - O input recebe foco visual ao ser navegado por teclado (classe CSS `switch--focus` adicionada via `focusin`/`focusout`)
119
+ - O `inputId` permite associar um `<label>` externo para melhor acessibilidade
120
+ - O `label` define um `aria-label` descritivo quando não há label visual associado
121
+
122
+ ## Componentes relacionados
123
+
124
+ - [`Checkbox`](../checkbox/README.md) — seleção de múltiplas opções independentes
125
+ - [`RadioButton`](../radio-button/README.md) — seleção única entre opções mutuamente exclusivas