@dev-tcloud/tcloud-ui 6.15.0 → 6.18.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.
Files changed (79) hide show
  1. package/docs/tcloud-ui-accordion.md +345 -0
  2. package/docs/tcloud-ui-actions.md +88 -0
  3. package/docs/tcloud-ui-alert-banner.md +104 -0
  4. package/docs/tcloud-ui-array-to-text.md +361 -0
  5. package/docs/tcloud-ui-breadcrumb.md +103 -0
  6. package/docs/tcloud-ui-bytes.md +109 -0
  7. package/docs/tcloud-ui-calendar.md +387 -0
  8. package/docs/tcloud-ui-card-accordion.md +266 -0
  9. package/docs/tcloud-ui-card-title.md +47 -0
  10. package/docs/tcloud-ui-card.md +40 -0
  11. package/docs/tcloud-ui-choice-issues.md +59 -0
  12. package/docs/tcloud-ui-cnpj.md +102 -0
  13. package/docs/tcloud-ui-container.md +171 -0
  14. package/docs/tcloud-ui-cpf.md +102 -0
  15. package/docs/tcloud-ui-currency.md +271 -0
  16. package/docs/tcloud-ui-data-list.md +91 -0
  17. package/docs/tcloud-ui-datebr.md +139 -0
  18. package/docs/tcloud-ui-datepicker-time.md +191 -0
  19. package/docs/tcloud-ui-datepicker.md +186 -0
  20. package/docs/tcloud-ui-dropdown-multi.md +444 -0
  21. package/docs/tcloud-ui-dropdown.md +369 -0
  22. package/docs/tcloud-ui-el-copy.md +113 -0
  23. package/docs/tcloud-ui-empty-content.md +412 -0
  24. package/docs/tcloud-ui-faq.md +496 -0
  25. package/docs/tcloud-ui-filter-bar.md +86 -0
  26. package/docs/tcloud-ui-filters.md +337 -0
  27. package/docs/tcloud-ui-hover-parent.md +467 -0
  28. package/docs/tcloud-ui-icon-button.md +104 -0
  29. package/docs/tcloud-ui-input-container.md +520 -0
  30. package/docs/tcloud-ui-input-password.md +258 -0
  31. package/docs/tcloud-ui-input-search.md +314 -0
  32. package/docs/tcloud-ui-label-token.md +286 -0
  33. package/docs/tcloud-ui-legend.md +72 -0
  34. package/docs/tcloud-ui-line-step-circle.md +98 -0
  35. package/docs/tcloud-ui-line-step-title.md +194 -0
  36. package/docs/tcloud-ui-linha-logo.md +550 -0
  37. package/docs/tcloud-ui-loading.md +88 -0
  38. package/docs/tcloud-ui-message.md +539 -0
  39. package/docs/tcloud-ui-modal.md +196 -0
  40. package/docs/tcloud-ui-monthname.md +123 -0
  41. package/docs/tcloud-ui-multi-input.md +290 -0
  42. package/docs/tcloud-ui-multi-select.md +311 -0
  43. package/docs/tcloud-ui-multiples-values.md +157 -0
  44. package/docs/tcloud-ui-not-found.md +88 -0
  45. package/docs/tcloud-ui-number-step.md +134 -0
  46. package/docs/tcloud-ui-pagination.md +579 -0
  47. package/docs/tcloud-ui-progress-bar.md +65 -0
  48. package/docs/tcloud-ui-radio.md +83 -0
  49. package/docs/tcloud-ui-reorder-items.md +418 -0
  50. package/docs/tcloud-ui-respective.md +167 -0
  51. package/docs/tcloud-ui-scroll-box.md +109 -0
  52. package/docs/tcloud-ui-search-bar.md +88 -0
  53. package/docs/tcloud-ui-search-in-object.md +143 -0
  54. package/docs/tcloud-ui-search-input.md +74 -0
  55. package/docs/tcloud-ui-skeleton-loading.md +394 -0
  56. package/docs/tcloud-ui-slide-toggle.md +210 -0
  57. package/docs/tcloud-ui-statusinfo.md +138 -0
  58. package/docs/tcloud-ui-tab-group.md +376 -0
  59. package/docs/tcloud-ui-tab-menu.md +109 -0
  60. package/docs/tcloud-ui-table.md +96 -0
  61. package/docs/tcloud-ui-tag.md +379 -0
  62. package/docs/tcloud-ui-tc-badge.md +168 -0
  63. package/docs/tcloud-ui-tc-btn.md +189 -0
  64. package/docs/tcloud-ui-tc-colors.md +204 -0
  65. package/docs/tcloud-ui-tc-form-control.md +200 -0
  66. package/docs/tcloud-ui-tc-text.md +139 -0
  67. package/docs/tcloud-ui-tc-title.md +118 -0
  68. package/docs/tcloud-ui-tcloud-form.md +55 -0
  69. package/docs/tcloud-ui-toast.md +83 -0
  70. package/docs/tcloud-ui-tooltip.md +88 -0
  71. package/docs/tcloud-ui-topology.md +232 -0
  72. package/docs/tcloud-ui-upload-area.md +195 -0
  73. package/docs/tcloud-ui-welcome.md +112 -0
  74. package/docs/tcloud-ui-wizard-steps.md +103 -0
  75. package/js/tcloud-ui-app.js +11 -0
  76. package/package.json +1 -1
  77. package/scss/tcloud-revitalizacao/components/_tcloud-ui-table.scss +95 -0
  78. package/scss/tcloud-revitalizacao/tc-rev-styles.scss +1 -1
  79. package/scss/tcloud-revitalizacao/components/_tc-rev-table.scss +0 -57
@@ -0,0 +1,361 @@
1
+ # Array To Text
2
+
3
+ O pipe **Array To Text** transforma um array em uma string formatada com separação por vírgulas e conjunção "e" antes do último elemento. É útil para exibir listas de valores de forma legível e gramaticalmente correta.
4
+
5
+ ## Características
6
+
7
+ - **Formatação legível**: Converte arrays em texto com vírgulas e conjunção "e"
8
+ - **Tratamento de listas**: Separa items com ", " (vírgula-espaço)
9
+ - **Conjunção gramatical**: Usa "e " antes do último item
10
+ - **Validação de entrada**: Verifica se o array tem conteúdo antes de processar
11
+ - **Standalone**: Pode ser usado em qualquer template após importação no componente
12
+
13
+ ## Instalação
14
+
15
+ ```typescript
16
+ import { TCloudUiModule } from 'projects/tcloud-ui/src/public-api';
17
+
18
+ @Component({
19
+ imports: [TCloudUiModule],
20
+ // ... resto da configuração
21
+ })
22
+ export class MyComponent {}
23
+ ```
24
+
25
+ ## Propriedades (API)
26
+
27
+ ### Nome do Pipe
28
+
29
+ | Nome | Descrição |
30
+ |------|-----------|
31
+ | `toText` | Nome do pipe usado na sintaxe de template |
32
+
33
+ ### Transform
34
+
35
+ | Parâmetro | Tipo | Descrição |
36
+ |-----------|------|-----------|
37
+ | `value` | `any[]` | Array de valores a serem transformados em texto |
38
+
39
+ ### Retorno
40
+
41
+ | Tipo | Descrição |
42
+ |------|-----------|
43
+ | `string` | String formatada com items separados por vírgulas e "e" antes do último item |
44
+ | `any` | Retorna o valor original se for vazio ou nulo |
45
+
46
+ ## Comportamento de Transformação
47
+
48
+ ### Regra de Formatação
49
+
50
+ O pipe segue a seguinte formatação:
51
+ - **Um item**: `valor1` → `valor1`
52
+ - **Dois items**: `[valor1, valor2]` → `valor1 e valor2`
53
+ - **Três ou mais items**: `[valor1, valor2, valor3]` → `valor1, valor2 e valor3`
54
+
55
+ ### Exemplos de Transformação
56
+
57
+ | Input | Output |
58
+ |-------|--------|
59
+ | `['item']` | `item` |
60
+ | `['item1', 'item2']` | `item1 e item2` |
61
+ | `['item1', 'item2', 'item3']` | `item1, item2 e item3` |
62
+ | `['A', 'B', 'C', 'D']` | `A, B, C e D` |
63
+ | `[]` | `[]` |
64
+ | `null` | `null` |
65
+
66
+ ## Exemplos de Uso
67
+
68
+ ### Uso Básico
69
+
70
+ Transformação simples de um array em formato legível:
71
+
72
+ ```typescript
73
+ @Component({
74
+ selector: 'app-array-basic',
75
+ imports: [CommonModule, TCloudUiModule],
76
+ template: `
77
+ <div>
78
+ <h3>Frutas Selecionadas:</h3>
79
+ <p>{{ fruits | toText }}</p>
80
+ </div>
81
+ `
82
+ })
83
+ export class ArrayBasicComponent {
84
+ fruits = ['Maçã', 'Banana', 'Laranja', 'Morango'];
85
+ }
86
+ ```
87
+
88
+ **Output esperado:** `Maçã, Banana, Laranja e Morango`
89
+
90
+ ### Uso com Listas Dinâmicas
91
+
92
+ Exibição de items selecionados com pipe:
93
+
94
+ ```typescript
95
+ @Component({
96
+ selector: 'app-array-dynamic',
97
+ imports: [CommonModule, ReactiveFormsModule, TCloudUiModule],
98
+ template: `
99
+ <div>
100
+ <h3>Permissões Concedidas:</h3>
101
+
102
+ <div class="permissions-list">
103
+ <label *ngFor="let perm of availablePermissions">
104
+ <input
105
+ type="checkbox"
106
+ [value]="perm"
107
+ [formControl]="selectedPermissions"
108
+ >
109
+ {{ perm }}
110
+ </label>
111
+ </div>
112
+
113
+ <div *ngIf="selectedPermissions.value && selectedPermissions.value.length > 0" class="result">
114
+ <p><strong>Permissões ativas:</strong></p>
115
+ <p>{{ selectedPermissions.value | toText }}</p>
116
+ </div>
117
+
118
+ <div *ngIf="!selectedPermissions.value || selectedPermissions.value.length === 0" class="empty">
119
+ Nenhuma permissão selecionada
120
+ </div>
121
+ </div>
122
+ `
123
+ })
124
+ export class ArrayDynamicComponent {
125
+ availablePermissions = ['Leitura', 'Escrita', 'Exclusão', 'Exportação', 'Configuração'];
126
+ selectedPermissions = new FormControl([], { nonNullable: true });
127
+ }
128
+ ```
129
+
130
+ ### Uso Avançado com Transformação de Dados
131
+
132
+ Pipeline de transformação para exibir dados estruturados:
133
+
134
+ ```typescript
135
+ @Component({
136
+ selector: 'app-array-advanced',
137
+ imports: [CommonModule, TCloudUiModule],
138
+ template: `
139
+ <div class="recipients-group">
140
+ <h3>Configuração de E-mails</h3>
141
+
142
+ <div class="recipient-section">
143
+ <h4>Destinatários Para (To):</h4>
144
+ <div *ngIf="emailConfig.to.length > 0" class="email-list">
145
+ {{ emailConfig.to.map(e => e.email) | toText }}
146
+ </div>
147
+ <div *ngIf="emailConfig.to.length === 0" class="empty-state">
148
+ Nenhum destinatário adicionado
149
+ </div>
150
+ </div>
151
+
152
+ <div class="recipient-section">
153
+ <h4>Destinatários CC:</h4>
154
+ <div *ngIf="emailConfig.cc.length > 0" class="email-list">
155
+ {{ emailConfig.cc.map(e => e.email) | toText }}
156
+ </div>
157
+ <div *ngIf="emailConfig.cc.length === 0" class="empty-state">
158
+ Nenhum CC adicionado
159
+ </div>
160
+ </div>
161
+
162
+ <div class="recipient-section">
163
+ <h4>Tópicos Relacionados:</h4>
164
+ <div *ngIf="topics.length > 0">
165
+ {{ topics | toText }}
166
+ </div>
167
+ </div>
168
+
169
+ <div class="preview">
170
+ <h4>Prévia do Resumo:</h4>
171
+ <p>Este e-mail será enviado para {{ emailConfig.to.length }} destinatário(s) {{ (emailConfig.cc.length > 0 ? 'com ' + emailConfig.cc.length + ' em cópia' : 'sem cópia') }}.</p>
172
+ <p *ngIf="topics.length > 0">Tópicos abordados: {{ topics | toText }}</p>
173
+ </div>
174
+ </div>
175
+ `
176
+ })
177
+ export class ArrayAdvancedComponent {
178
+ emailConfig = {
179
+ to: [
180
+ { email: 'user1@example.com', name: 'Usuário 1' },
181
+ { email: 'user2@example.com', name: 'Usuário 2' },
182
+ { email: 'user3@example.com', name: 'Usuário 3' }
183
+ ],
184
+ cc: [
185
+ { email: 'admin@example.com', name: 'Administrador' }
186
+ ]
187
+ };
188
+
189
+ topics = ['Relatório Mensal', 'Planejamento Q1', 'Performance de Vendas'];
190
+ }
191
+ ```
192
+
193
+ ### Uso com Filtros e Busca
194
+
195
+ Aplicar o pipe após transformar dados verificados:
196
+
197
+ ```typescript
198
+ @Component({
199
+ selector: 'app-array-filtered',
200
+ imports: [CommonModule, FormsModule, TCloudUiModule],
201
+ template: `
202
+ <div>
203
+ <h3>Filtrar e Exibir Departamentos</h3>
204
+
205
+ <input
206
+ type="text"
207
+ placeholder="Buscar departamento..."
208
+ [(ngModel)]="searchTerm"
209
+ (ngModelChange)="filterDepartments()"
210
+ >
211
+
212
+ <div *ngIf="filteredDepartments.length > 0" class="result">
213
+ <p><strong>Departamentos encontrados:</strong></p>
214
+ <p>{{ filteredDepartments | toText }}</p>
215
+ </div>
216
+
217
+ <div *ngIf="filteredDepartments.length === 0 && searchTerm" class="no-results">
218
+ Nenhum departamento encontrado para "{{ searchTerm }}"
219
+ </div>
220
+
221
+ <div *ngIf="filteredDepartments.length === 0 && !searchTerm" class="info">
222
+ Digite para filtrar departamentos
223
+ </div>
224
+
225
+ <div class="all-departments">
226
+ <h4>Todos os Departamentos ({{ departments.length }}):</h4>
227
+ <p>{{ departments | toText }}</p>
228
+ </div>
229
+ </div>
230
+ `
231
+ })
232
+ export class ArrayFilteredComponent {
233
+ departments = [
234
+ 'Desenvolvimento',
235
+ 'Design',
236
+ 'Recursos Humanos',
237
+ 'Financeiro',
238
+ 'Vendas',
239
+ 'Suporte',
240
+ 'Operações',
241
+ 'Marketing'
242
+ ];
243
+
244
+ filteredDepartments: string[] = [];
245
+ searchTerm: string = '';
246
+
247
+ ngOnInit() {
248
+ this.filteredDepartments = [...this.departments];
249
+ }
250
+
251
+ filterDepartments() {
252
+ if (!this.searchTerm.trim()) {
253
+ this.filteredDepartments = [...this.departments];
254
+ } else {
255
+ this.filteredDepartments = this.departments.filter(dept =>
256
+ dept.toLowerCase().includes(this.searchTerm.toLowerCase())
257
+ );
258
+ }
259
+ }
260
+ }
261
+ ```
262
+
263
+ ### Uso com Validação de Formulário
264
+
265
+ Exibir campos com erro usando o pipe:
266
+
267
+ ```typescript
268
+ @Component({
269
+ selector: 'app-array-validation',
270
+ imports: [CommonModule, ReactiveFormsModule, TCloudUiModule],
271
+ template: `
272
+ <form [formGroup]="form">
273
+ <div class="form-group">
274
+ <label>Nome:</label>
275
+ <input formControlName="name" type="text">
276
+ </div>
277
+
278
+ <div class="form-group">
279
+ <label>Email:</label>
280
+ <input formControlName="email" type="email">
281
+ </div>
282
+
283
+ <div class="form-group">
284
+ <label>Telefone:</label>
285
+ <input formControlName="phone" type="tel">
286
+ </div>
287
+
288
+ <button (click)="validate()">Validar</button>
289
+
290
+ <div *ngIf="errorFields.length > 0" class="error-summary">
291
+ <h4>Campos com erro:</h4>
292
+ <p>{{ errorFields | toText }}</p>
293
+ <ul>
294
+ <li *ngFor="let field of errorFields">
295
+ {{ field }}: {{ getFieldError(field) }}
296
+ </li>
297
+ </ul>
298
+ </div>
299
+
300
+ <div *ngIf="isValid && errorFields.length === 0" class="success">
301
+ ✓ Formulário válido!
302
+ </div>
303
+ </form>
304
+ `
305
+ })
306
+ export class ArrayValidationComponent {
307
+ form: FormGroup;
308
+ errorFields: string[] = [];
309
+ isValid: boolean = false;
310
+
311
+ constructor(private fb: FormBuilder) {
312
+ this.form = this.fb.group({
313
+ name: ['', [Validators.required, Validators.minLength(3)]],
314
+ email: ['', [Validators.required, Validators.email]],
315
+ phone: ['', Validators.required]
316
+ });
317
+ }
318
+
319
+ validate() {
320
+ this.errorFields = [];
321
+ this.isValid = false;
322
+
323
+ Object.keys(this.form.controls).forEach(fieldName => {
324
+ const field = this.form.get(fieldName);
325
+ if (field && field.invalid) {
326
+ this.errorFields.push(fieldName);
327
+ }
328
+ });
329
+
330
+ this.isValid = this.errorFields.length === 0;
331
+ }
332
+
333
+ getFieldError(fieldName: string): string {
334
+ const field = this.form.get(fieldName);
335
+ if (field?.hasError('required')) {
336
+ return 'Campo obrigatório';
337
+ }
338
+ if (field?.hasError('minlength')) {
339
+ return 'Deve conter pelo menos 3 caracteres';
340
+ }
341
+ if (field?.hasError('email')) {
342
+ return 'Email inválido';
343
+ }
344
+ return 'Erro de validação';
345
+ }
346
+ }
347
+ ```
348
+
349
+ ## Notas de Implementação
350
+
351
+ - O pipe é **standalone** e pode ser importado diretamente em componentes
352
+ - A transformação ocorre no template usando a sintaxe de pipe Angular: `{{ array | toText }}`
353
+ - Se o array estiver vazio ou nulo, retorna o valor original sem transformação
354
+ - O pipe funciona com arrays de qualquer tipo (strings, números, objetos)
355
+ - A formatação usa ", " (vírgula com espaço) como separador entre items
356
+ - Usa " e " (espaço-e-espaço) como conjunção antes do último item
357
+ - Não há limite de items - funciona com arrays de qualquer tamanho
358
+ - O pipe é **imutável** - não modifica o array original
359
+ - Para arrays com um único item, retorna apenas esse item sem separadores
360
+ - A transformação responde a mudanças do array em tempo real (change detection)
361
+ - Pode ser combinado com outros pipes (ex: `{{ items | filter:condition | toText }}`)
@@ -0,0 +1,103 @@
1
+ # Breadcrumb
2
+
3
+ Componente de navegação breadcrumb que exibe o caminho hierárquico da página atual, permitindo navegação rápida entre níveis.
4
+
5
+ ## Características
6
+
7
+ - Exibe trilha de navegação hierárquica
8
+ - Ícone de "home" com link para o dashboard
9
+ - Separadores visuais entre itens (chevron)
10
+ - Último item aparece como texto (sem link), indicando a página atual
11
+ - Navegação por clique nos itens intermediários
12
+ - Serviço injetável (`TCloudUiBreadcrumbService`) para gerenciar os itens do breadcrumb de qualquer componente
13
+ - Suporte a adição e remoção dinâmica de níveis
14
+
15
+ ## Instalação
16
+
17
+ ```typescript
18
+ import { TCloudUiModule } from 'tcloud-ui';
19
+
20
+ @NgModule({
21
+ imports: [TCloudUiModule]
22
+ })
23
+ export class AppModule { }
24
+ ```
25
+
26
+ Ou importe o componente standalone diretamente:
27
+
28
+ ```typescript
29
+ import { TCloudUiBreadcrumbComponent } from 'tcloud-ui';
30
+
31
+ @Component({
32
+ imports: [TCloudUiBreadcrumbComponent]
33
+ })
34
+ export class MeuComponent { }
35
+ ```
36
+
37
+ ## API - Serviço (`TCloudUiBreadcrumbService`)
38
+
39
+ ### Interface `BreadcrumbItem`
40
+
41
+ | Propriedade | Tipo | Descrição |
42
+ |-------------|----------|------------------------------------------|
43
+ | `label` | `string` | Texto exibido no item do breadcrumb |
44
+ | `url` | `string` | URL de navegação (opcional no último item)|
45
+
46
+ ### Métodos
47
+
48
+ | Método | Parâmetro | Descrição |
49
+ |---------------------|------------------------|--------------------------------------------------|
50
+ | `setBreadcrumb` | `items: BreadcrumbItem[]` | Define a lista completa de itens do breadcrumb |
51
+ | `addLevel` | `item: BreadcrumbItem` | Adiciona um novo nível ao final do breadcrumb |
52
+ | `removeLastLevel` | — | Remove o último nível do breadcrumb |
53
+ | `clear` | — | Limpa todos os itens do breadcrumb |
54
+
55
+ ### Observable
56
+
57
+ | Nome | Tipo | Descrição |
58
+ |-----------------|-------------------------------|----------------------------------------|
59
+ | `breadcrumbs$` | `Observable<BreadcrumbItem[]>`| Observable com a lista atual de itens |
60
+
61
+ ## Exemplos de Uso
62
+
63
+ ### Uso Básico
64
+
65
+ No template:
66
+
67
+ ```html
68
+ <tcloud-ui-breadcrumb></tcloud-ui-breadcrumb>
69
+ ```
70
+
71
+ No componente, defina os itens via serviço:
72
+
73
+ ```typescript
74
+ import { TCloudUiBreadcrumbService } from 'tcloud-ui';
75
+
76
+ export class MinhaPaginaComponent implements OnInit {
77
+
78
+ constructor(private breadcrumbService: TCloudUiBreadcrumbService) {}
79
+
80
+ ngOnInit(): void {
81
+ this.breadcrumbService.setBreadcrumb([
82
+ { label: 'Home', url: '/dashboard' },
83
+ { label: 'Produtos', url: '/produtos' },
84
+ { label: 'Detalhes' }
85
+ ]);
86
+ }
87
+ }
88
+ ```
89
+
90
+ ### Uso Avançado
91
+
92
+ Adicionando níveis dinamicamente conforme a navegação:
93
+
94
+ ```typescript
95
+ // Ao entrar em um sub-nível
96
+ this.breadcrumbService.addLevel({ label: 'Edição', url: '/produtos/editar' });
97
+
98
+ // Ao voltar, remover o último nível
99
+ this.breadcrumbService.removeLastLevel();
100
+
101
+ // Limpar completamente ao sair de uma seção
102
+ this.breadcrumbService.clear();
103
+ ```
@@ -0,0 +1,109 @@
1
+ # BytesPipe
2
+
3
+ O pipe `bytes` converte valores numéricos representando tamanhos de dados em uma string legível com a unidade apropriada (Bytes, KB, MB, GB, TB, PB, EB, ZB, YB). A conversão é automática com base na magnitude do valor, utilizando potências de 1024. Aceita um parâmetro opcional para indicar que o valor de entrada já está em KB ou MB, realizando a conversão para bytes antes de formatar.
4
+
5
+ ## Características
6
+
7
+ - Conversão automática de bytes para a unidade mais adequada (Bytes, KB, MB, GB, TB, etc.)
8
+ - Suporte a parâmetro opcional `typeValue` para indicar a unidade de entrada (`'kb'` ou `'mb'`)
9
+ - Precisão de 2 casas decimais por padrão
10
+ - Retorna `'---'` para valores falsy (null, undefined, vazio)
11
+ - Retorna `'0 Bytes'` para o valor zero
12
+ - Pipe standalone
13
+
14
+ ## Instalação
15
+
16
+ Importe o pipe diretamente no módulo ou componente standalone:
17
+
18
+ ```typescript
19
+ import { BytesPipe } from 'tcloud-ui';
20
+ ```
21
+
22
+ ## API
23
+
24
+ ### Sintaxe do Pipe
25
+
26
+ ```
27
+ {{ valor | bytes }}
28
+ {{ valor | bytes:'kb' }}
29
+ {{ valor | bytes:'mb' }}
30
+ ```
31
+
32
+ ### Parâmetros
33
+
34
+ | Parâmetro | Tipo | Obrigatório | Descrição |
35
+ |-------------|----------|-------------|----------------------------------------------------------------------------------------------|
36
+ | `typeValue` | `string` | Não | Unidade do valor de entrada. Valores aceitos: `'kb'` (kilobytes) ou `'mb'` (megabytes). Quando informado, o valor é convertido para bytes antes da formatação |
37
+
38
+ ### Tabela de Conversão
39
+
40
+ | Unidade | Faixa |
41
+ |---------|------------------------------|
42
+ | Bytes | 0 – 1.023 |
43
+ | KB | 1.024 – 1.048.575 |
44
+ | MB | 1.048.576 – 1.073.741.823 |
45
+ | GB | 1.073.741.824 – 1.099.511.627.775 |
46
+ | TB | 1.099.511.627.776+ |
47
+
48
+ ## Exemplos de Uso
49
+
50
+ ### Básico — Conversão automática a partir de bytes
51
+
52
+ ```html
53
+ <p>{{ 123456789 | bytes }}</p>
54
+ <!-- Resultado: 117.74 MB -->
55
+
56
+ <p>{{ 1024 | bytes }}</p>
57
+ <!-- Resultado: 1 KB -->
58
+
59
+ <p>{{ 0 | bytes }}</p>
60
+ <!-- Resultado: 0 Bytes -->
61
+ ```
62
+
63
+ ```typescript
64
+ import { BytesPipe } from 'tcloud-ui';
65
+
66
+ @Component({
67
+ standalone: true,
68
+ imports: [BytesPipe],
69
+ template: `
70
+ <p>{{ valorBytes | bytes }}</p>
71
+ `
72
+ })
73
+ export class ExemploBasicoComponent {
74
+ valorBytes = 123456789;
75
+ }
76
+ ```
77
+
78
+ ### Avançado — Valor de entrada em KB ou MB
79
+
80
+ ```html
81
+ <!-- Entrada em kilobytes -->
82
+ <p>{{ 2048 | bytes:'kb' }}</p>
83
+ <!-- Resultado: 2 MB (2048 KB = 2.097.152 bytes = 2 MB) -->
84
+
85
+ <!-- Entrada em megabytes -->
86
+ <p>{{ 5 | bytes:'mb' }}</p>
87
+ <!-- Resultado: 5 MB (5 MB = 5.242.880 bytes = 5 MB) -->
88
+
89
+ <!-- Entrada em megabytes com valor grande -->
90
+ <p>{{ 2500 | bytes:'mb' }}</p>
91
+ <!-- Resultado: 2.44 GB -->
92
+ ```
93
+
94
+ ```typescript
95
+ import { BytesPipe } from 'tcloud-ui';
96
+
97
+ @Component({
98
+ standalone: true,
99
+ imports: [BytesPipe],
100
+ template: `
101
+ <p>{{ armazenamentoKB | bytes:'kb' }}</p>
102
+ <p>{{ armazenamentoMB | bytes:'mb' }}</p>
103
+ `
104
+ })
105
+ export class ExemploAvancadoComponent {
106
+ armazenamentoKB = 2048;
107
+ armazenamentoMB = 5;
108
+ }
109
+ ```