@dev-tcloud/tcloud-ui 6.14.3 → 6.17.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 (92) 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-ui/styles/_claus-badge.scss +117 -0
  78. package/scss/tcloud-ui/styles/_claus-btn.scss +207 -0
  79. package/scss/tcloud-ui/styles/_claus-card.scss +12 -0
  80. package/scss/tcloud-ui/styles/_claus-colors.scss +192 -0
  81. package/scss/tcloud-ui/styles/_claus-form.scss +88 -0
  82. package/scss/tcloud-ui/styles/_claus-sizes.scss +28 -0
  83. package/scss/tcloud-ui/styles/_claus-spacers.scss +49 -0
  84. package/scss/tcloud-ui/styles/_claus-themes.scss +36 -0
  85. package/scss/tcloud-ui/styles/_claus-title.scss +24 -0
  86. package/scss/tcloud-ui/styles/_claus-typography.scss +70 -0
  87. package/scss/tcloud-ui/styles/_claus-variables.scss +131 -0
  88. package/scss/tcloud-ui/styles/_colors.scss +123 -0
  89. package/scss/tcloud-ui/styles/_tc-btn.scss +210 -0
  90. package/scss/tcloud-ui/styles/_tc-card.scss +7 -0
  91. package/scss/tcloud-ui/styles/_tc-title.scss +49 -0
  92. package/scss/tcloud-ui/styles.scss +35 -0
@@ -0,0 +1,83 @@
1
+ # Radio
2
+
3
+ Diretiva para estilizar inputs do tipo radio com o padrão visual do TCloud UI.
4
+
5
+ ## Características
6
+
7
+ - Aplica automaticamente a classe CSS `tcloud-ui-radio` ao elemento `<input type="radio">`
8
+ - Uso simples via atributo `tcloudUiRadio` no input
9
+ - Compatível com `ngModel` e `formControl` para two-way binding
10
+ - Suporte nativo a `disabled` e `checked`
11
+
12
+ ## Instalação
13
+
14
+ ```typescript
15
+ import { TCloudUiModule } from 'tcloud-ui';
16
+
17
+ @NgModule({
18
+ imports: [TCloudUiModule]
19
+ })
20
+ export class AppModule { }
21
+ ```
22
+
23
+ Ou importe a diretiva standalone diretamente:
24
+
25
+ ```typescript
26
+ import { TCloudUiRadioDirective } from 'tcloud-ui';
27
+
28
+ @Component({
29
+ imports: [TCloudUiRadioDirective]
30
+ })
31
+ export class MeuComponent { }
32
+ ```
33
+
34
+ ## Propriedades (API)
35
+
36
+ A diretiva não possui `@Input` ou `@Output` próprios. Ela atua como uma diretiva de atributo pura, adicionando a classe CSS `tcloud-ui-radio` ao host element.
37
+
38
+ | Seletor | Descrição |
39
+ |---|---|
40
+ | `input[type="radio"][tcloudUiRadio]` | Aplica a diretiva a inputs do tipo radio |
41
+
42
+ ## Exemplos de Uso
43
+
44
+ ### Uso Básico
45
+
46
+ ```html
47
+ <label>
48
+ <input type="radio" tcloudUiRadio name="opcao" value="1" /> Opção 1
49
+ </label>
50
+ <label>
51
+ <input type="radio" tcloudUiRadio name="opcao" value="2" /> Opção 2
52
+ </label>
53
+ ```
54
+
55
+ ### Uso com ngModel
56
+
57
+ ```typescript
58
+ selectedOption: string = 'option1';
59
+ ```
60
+
61
+ ```html
62
+ <label>
63
+ <input type="radio" tcloudUiRadio name="example" value="option1" [(ngModel)]="selectedOption" />
64
+ Opção 1
65
+ </label>
66
+ <label>
67
+ <input type="radio" tcloudUiRadio name="example" value="option2" [(ngModel)]="selectedOption" />
68
+ Opção 2
69
+ </label>
70
+
71
+ <p>Selecionado: {{ selectedOption }}</p>
72
+ ```
73
+
74
+ ### Uso com estado desabilitado
75
+
76
+ ```html
77
+ <label>
78
+ <input type="radio" tcloudUiRadio name="disabled" value="1" [disabled]="true" /> Desabilitado
79
+ </label>
80
+ <label>
81
+ <input type="radio" tcloudUiRadio name="disabled" value="2" [disabled]="true" [checked]="true" /> Desabilitado e marcado
82
+ </label>
83
+ ```
@@ -0,0 +1,418 @@
1
+ # Reorder Items
2
+
3
+ O componente **Reorder Items** fornece uma interface interativa para reordenar uma lista de itens através de botões de seta para cima e para baixo. Suporta tanto arrays de strings simples quanto arrays de objetos com descrição, permitindo comparação entre valores antes e depois da reordenação.
4
+
5
+ ## Características
6
+
7
+ - **Reordenação interativa**: Botões para mover itens para cima ou para baixo
8
+ - **Suporte a dois formatos**: Arrays de strings ou arrays de objetos com `name` e `description`
9
+ - **Descrições opcionais**: Exibe descrição adicional de cada item quando disponível
10
+ - **Two-way binding**: Funciona com `[(items)]` para sincronização bidirecional
11
+ - **Validação de limites**: Desabilita botões automaticamente nos extremos da lista
12
+ - **Reatividade em tempo real**: Emite mudanças imediatamente via `itemsChange`
13
+ - **Tabela intuitiva**: Apresentação clara com layout de nome/descrição e ações
14
+
15
+ ## Instalação
16
+
17
+ ```typescript
18
+ import { TCloudUiModule } from 'projects/tcloud-ui/src/public-api';
19
+
20
+ @Component({
21
+ imports: [TCloudUiModule],
22
+ // ... resto da configuração
23
+ })
24
+ export class MyComponent {}
25
+ ```
26
+
27
+ ## Propriedades (API)
28
+
29
+ ### Inputs
30
+
31
+ | Nome | Tipo | Descrição | Valor Default |
32
+ |------|------|-----------|---------------|
33
+ | `items` | `any[]` | Array de itens a reordenar. Pode ser strings ou objetos com `name` e `description` | `[]` |
34
+
35
+ ### Outputs
36
+
37
+ | Nome | Tipo de Evento | Descrição |
38
+ |------|--------|-----------|
39
+ | `itemsChange` | `any[]` | Emite o array reordenado quando um item é movido |
40
+
41
+ ### Formatos de Dados Suportados
42
+
43
+ #### Formato 1: Array de Strings
44
+
45
+ ```typescript
46
+ items: string[] = ['Item A', 'Item B', 'Item C'];
47
+ ```
48
+
49
+ #### Formato 2: Array de Objetos
50
+
51
+ ```typescript
52
+ items: Array<{ name: string; description: string }> = [
53
+ { name: 'Protheus', description: 'Produto - Protheus' },
54
+ { name: 'RM', description: 'Produto - RM' },
55
+ { name: 'Datasul', description: 'Produto - Datasul' }
56
+ ];
57
+ ```
58
+
59
+ ## Exemplos de Uso
60
+
61
+ ### Uso Básico com Array de Strings
62
+
63
+ Reordenação simples de um array de strings:
64
+
65
+ ```typescript
66
+ @Component({
67
+ selector: 'app-reorder-basic',
68
+ imports: [CommonModule, TCloudUiModule],
69
+ template: `
70
+ <div>
71
+ <h3>Reordenar Produtos</h3>
72
+
73
+ <tcloud-ui-reorder-items
74
+ [(items)]="products"
75
+ ></tcloud-ui-reorder-items>
76
+
77
+ <div class="result">
78
+ <h4>Ordem Atual:</h4>
79
+ <pre>{{ products | json }}</pre>
80
+ </div>
81
+ </div>
82
+ `
83
+ })
84
+ export class ReorderBasicComponent {
85
+ products: string[] = ['Protheus', 'RM', 'Datasul', 'Fluig'];
86
+ }
87
+ ```
88
+
89
+ ### Uso com Array de Objetos e Descrições
90
+
91
+ Reordenação com informações descritivas:
92
+
93
+ ```typescript
94
+ @Component({
95
+ selector: 'app-reorder-objects',
96
+ imports: [CommonModule, TCloudUiModule],
97
+ template: `
98
+ <div class="reorder-container">
99
+ <h3>Reordenar Módulos</h3>
100
+
101
+ <tcloud-ui-reorder-items
102
+ [(items)]="modules"
103
+ ></tcloud-ui-reorder-items>
104
+
105
+ <div class="preview">
106
+ <h4>Configuração Atual:</h4>
107
+ <div *ngFor="let module of modules" class="module-item">
108
+ <strong>{{ module.name }}</strong>
109
+ <p>{{ module.description }}</p>
110
+ </div>
111
+ </div>
112
+ </div>
113
+ `,
114
+ styles: [`
115
+ .module-item {
116
+ padding: 12px;
117
+ margin: 8px 0;
118
+ border-left: 4px solid #1976d2;
119
+ background: #f5f5f5;
120
+ }
121
+ `]
122
+ })
123
+ export class ReorderObjectsComponent {
124
+ modules = [
125
+ { name: 'Autenticação', description: 'Sistema de login e autenticação' },
126
+ { name: 'Dashboard', description: 'Painel principal da aplicação' },
127
+ { name: 'Relatórios', description: 'Módulo de geração de relatórios' },
128
+ { name: 'Configurações', description: 'Preferências e ajustes do sistema' }
129
+ ];
130
+ }
131
+ ```
132
+
133
+ ### Uso Avançado com Controle e Validação
134
+
135
+ Reordenação com verificação de alterações e persistência:
136
+
137
+ ```typescript
138
+ @Component({
139
+ selector: 'app-reorder-advanced',
140
+ imports: [CommonModule, ReactiveFormsModule, TCloudUiModule],
141
+ template: `
142
+ <div class="reorder-advanced">
143
+ <h3>Gerenciar Ordem de Prioridades</h3>
144
+
145
+ <div class="controls">
146
+ <button
147
+ (click)="resetOrder()"
148
+ [disabled]="!hasChanges"
149
+ class="tc-btn"
150
+ >
151
+ Restaurar Original
152
+ </button>
153
+
154
+ <button
155
+ (click)="saveOrder()"
156
+ [disabled]="!hasChanges"
157
+ class="tc-btn tc-btn-primary"
158
+ >
159
+ Salvar Ordem
160
+ </button>
161
+ </div>
162
+
163
+ <div class="status" *ngIf="hasChanges" class="warning-banner">
164
+ ⚠️ Existem alterações não salvas
165
+ </div>
166
+
167
+ <tcloud-ui-reorder-items
168
+ [(items)]="priorities"
169
+ (itemsChange)="onPrioritiesChange($event)"
170
+ ></tcloud-ui-reorder-items>
171
+
172
+ <div class="comparison">
173
+ <div class="column">
174
+ <h4>Original</h4>
175
+ <ol>
176
+ <li *ngFor="let item of originalPriorities">
177
+ {{ item.name }}
178
+ </li>
179
+ </ol>
180
+ </div>
181
+
182
+ <div class="column">
183
+ <h4>Modificado</h4>
184
+ <ol>
185
+ <li *ngFor="let item of priorities">
186
+ {{ item.name }}
187
+ <span class="changed" *ngIf="isItemMoved(item.name)">
188
+ (↻ reordenado)
189
+ </span>
190
+ </li>
191
+ </ol>
192
+ </div>
193
+ </div>
194
+
195
+ <div *ngIf="saveSuccess" class="success-message">
196
+ ✓ Ordem salva com sucesso!
197
+ </div>
198
+ </div>
199
+ `,
200
+ styles: [`
201
+ .controls {
202
+ margin-bottom: 16px;
203
+ }
204
+
205
+ .warning-banner {
206
+ background: #fff3cd;
207
+ border-left: 4px solid #ffc107;
208
+ padding: 12px;
209
+ margin: 12px 0;
210
+ border-radius: 4px;
211
+ }
212
+
213
+ .comparison {
214
+ display: grid;
215
+ grid-template-columns: 1fr 1fr;
216
+ gap: 16px;
217
+ margin-top: 24px;
218
+ }
219
+
220
+ .column {
221
+ background: #f5f5f5;
222
+ padding: 16px;
223
+ border-radius: 4px;
224
+ }
225
+
226
+ .column h4 {
227
+ margin-top: 0;
228
+ }
229
+
230
+ .column ol {
231
+ margin: 0;
232
+ padding-left: 20px;
233
+ }
234
+
235
+ .changed {
236
+ color: #ff9800;
237
+ font-size: 0.9em;
238
+ }
239
+
240
+ .success-message {
241
+ background: #c8e6c9;
242
+ border-left: 4px solid #4caf50;
243
+ padding: 12px;
244
+ margin-top: 12px;
245
+ border-radius: 4px;
246
+ color: #2e7d32;
247
+ }
248
+ `]
249
+ })
250
+ export class ReorderAdvancedComponent implements OnInit {
251
+ priorities: Array<{ name: string; description: string }> = [];
252
+ originalPriorities: Array<{ name: string; description: string }> = [];
253
+ hasChanges: boolean = false;
254
+ saveSuccess: boolean = false;
255
+
256
+ constructor(private changeDetector: ChangeDetectorRef) {}
257
+
258
+ ngOnInit() {
259
+ this.initializePriorities();
260
+ }
261
+
262
+ initializePriorities() {
263
+ this.originalPriorities = [
264
+ { name: 'Crítica', description: 'Impacto crítico no sistema' },
265
+ { name: 'Alta', description: 'Impacto significativo' },
266
+ { name: 'Média', description: 'Impacto moderado' },
267
+ { name: 'Baixa', description: 'Impacto mínimo' }
268
+ ];
269
+
270
+ this.priorities = JSON.parse(JSON.stringify(this.originalPriorities));
271
+ }
272
+
273
+ onPrioritiesChange(items: any[]) {
274
+ this.priorities = items;
275
+ this.hasChanges = this.checkHasChanges();
276
+ this.saveSuccess = false;
277
+ }
278
+
279
+ checkHasChanges(): boolean {
280
+ for (let i = 0; i < this.originalPriorities.length; i++) {
281
+ if (this.originalPriorities[i].name !== this.priorities[i]?.name) {
282
+ return true;
283
+ }
284
+ }
285
+ return false;
286
+ }
287
+
288
+ isItemMoved(name: string): boolean {
289
+ const originalIndex = this.originalPriorities.findIndex(p => p.name === name);
290
+ const currentIndex = this.priorities.findIndex(p => p.name === name);
291
+ return originalIndex !== currentIndex;
292
+ }
293
+
294
+ saveOrder() {
295
+ // Simular persistência em servidor
296
+ console.log('Salvando ordem:', this.priorities);
297
+
298
+ this.saveSuccess = true;
299
+ this.originalPriorities = JSON.parse(JSON.stringify(this.priorities));
300
+ this.hasChanges = false;
301
+
302
+ setTimeout(() => {
303
+ this.saveSuccess = false;
304
+ }, 3000);
305
+ }
306
+
307
+ resetOrder() {
308
+ this.priorities = JSON.parse(JSON.stringify(this.originalPriorities));
309
+ this.hasChanges = false;
310
+ }
311
+ }
312
+ ```
313
+
314
+ ### Uso com Filtro e Busca
315
+
316
+ Reordenação combinada com busca de itens:
317
+
318
+ ```typescript
319
+ @Component({
320
+ selector: 'app-reorder-with-search',
321
+ imports: [CommonModule, FormsModule, TCloudUiModule],
322
+ template: `
323
+ <div class="search-reorder">
324
+ <input
325
+ type="text"
326
+ placeholder="Buscar item..."
327
+ [(ngModel)]="searchTerm"
328
+ (ngModelChange)="filterItems()"
329
+ class="search-input"
330
+ >
331
+
332
+ <div *ngIf="filteredItems.length === 0 && searchTerm" class="no-results">
333
+ Nenhum item encontrado para "{{ searchTerm }}"
334
+ </div>
335
+
336
+ <tcloud-ui-reorder-items
337
+ *ngIf="filteredItems.length > 0"
338
+ [(items)]="filteredItems"
339
+ (itemsChange)="onReorderComplete($event)"
340
+ ></tcloud-ui-reorder-items>
341
+
342
+ <div class="stats">
343
+ <p>Total: {{ filteredItems.length }} itens</p>
344
+ </div>
345
+ </div>
346
+ `,
347
+ styles: [`
348
+ .search-input {
349
+ width: 100%;
350
+ padding: 8px 12px;
351
+ border: 1px solid #ddd;
352
+ border-radius: 4px;
353
+ margin-bottom: 16px;
354
+ }
355
+
356
+ .no-results {
357
+ background: #ffebee;
358
+ border-left: 4px solid #f44336;
359
+ padding: 12px;
360
+ color: #c62828;
361
+ border-radius: 4px;
362
+ }
363
+
364
+ .stats {
365
+ margin-top: 16px;
366
+ padding: 8px;
367
+ background: #e3f2fd;
368
+ border-radius: 4px;
369
+ text-align: center;
370
+ }
371
+ `]
372
+ })
373
+ export class ReorderWithSearchComponent {
374
+ items = [
375
+ { name: 'Angular', description: 'Framework JavaScript' },
376
+ { name: 'React', description: 'Biblioteca JavaScript' },
377
+ { name: 'Vue', description: 'Framework progressivo' },
378
+ { name: 'Svelte', description: 'Compilador Frontend' },
379
+ { name: 'TypeScript', description: 'Linguagem com tipos' }
380
+ ];
381
+
382
+ filteredItems: any[] = [];
383
+ searchTerm: string = '';
384
+
385
+ ngOnInit() {
386
+ this.filteredItems = [...this.items];
387
+ }
388
+
389
+ filterItems() {
390
+ if (!this.searchTerm.trim()) {
391
+ this.filteredItems = [...this.items];
392
+ } else {
393
+ this.filteredItems = this.items.filter(item =>
394
+ item.name.toLowerCase().includes(this.searchTerm.toLowerCase()) ||
395
+ item.description.toLowerCase().includes(this.searchTerm.toLowerCase())
396
+ );
397
+ }
398
+ }
399
+
400
+ onReorderComplete(reorderedItems: any[]) {
401
+ console.log('Itens reordenados:', reorderedItems);
402
+ // Atualizar dados persistidos
403
+ }
404
+ }
405
+ ```
406
+
407
+ ## Notas de Implementação
408
+
409
+ - O componente mantém dois arrays internos: `sort_items` (para exibição) e `items` (dados originais)
410
+ - Quando `items` contém strings, `sort_items` cria uma cópia das strings para exibição
411
+ - Quando `items` contém objetos com propriedade `name`, `sort_items` extrai apenas os nomes
412
+ - A descrição é buscada dinamicamente através do método `get_description()` durante a renderização
413
+ - Os botões de movimento (cima/baixo) são automaticamente desabilitados nos extremos da lista
414
+ - O evento `itemsChange` emite o array completo reordenado (strings ou objetos)
415
+ - Duas-way binding `[(items)]` fornece sincronização automática com o componente pai
416
+ - A reordenação atual é feita através de troca de posições (swap) mantendo referências
417
+ - Se os itens originais são objetos, o componente preserva todas as propriedades após reordenação
418
+ - Nenhuma validação de tipos é feita - o componente detecta automaticamente se é string ou objeto verificando a propriedade `name`
@@ -0,0 +1,167 @@
1
+ # RespectivePipe
2
+
3
+ O pipe `respective` traduz chaves internas do sistema (strings em inglês ou siglas) para seus nomes legíveis em português. Utiliza um mapa interno de pares chave-valor organizado por categorias: tipos de ambientes, implantação/migração, portes de clientes, produtos TOTVS, sistemas operacionais e tipos de responsáveis. A comparação é case-insensitive e normaliza underscores (`_`) para hifens (`-`).
4
+
5
+ ## Características
6
+
7
+ - Tradução de chaves do sistema para nomes legíveis em português
8
+ - Comparação case-insensitive (converte para lowercase antes de comparar)
9
+ - Normalização de underscores para hifens na comparação
10
+ - Remoção de espaços em branco nas extremidades
11
+ - Retorna o valor original quando não encontra correspondência no mapa
12
+ - Retorna string vazia para valores não-string (objetos, números)
13
+ - Pipe standalone
14
+
15
+ ## Instalação
16
+
17
+ Importe o pipe diretamente no módulo ou componente standalone:
18
+
19
+ ```typescript
20
+ import { RespectivePipe } from 'tcloud-ui';
21
+ ```
22
+
23
+ ## API
24
+
25
+ ### Sintaxe do Pipe
26
+
27
+ ```
28
+ {{ valor | respective }}
29
+ ```
30
+
31
+ ### Parâmetros
32
+
33
+ Este pipe não recebe parâmetros adicionais.
34
+
35
+ ### Mapa de Traduções
36
+
37
+ #### Tipos de Ambientes
38
+
39
+ | Chave | Valor |
40
+ |---------------|---------------------|
41
+ | `production` | Produção |
42
+ | `development` | Desenvolvimento |
43
+ | `qa` | Qualidade |
44
+
45
+ #### Implantação / Migração
46
+
47
+ | Chave | Valor |
48
+ |----------|-------------|
49
+ | `golive` | Pré GoLive |
50
+ | `kickoff`| Kickoff |
51
+
52
+ #### Portes de Clientes
53
+
54
+ | Chave | Valor |
55
+ |---------|----------|
56
+ | `prime` | Prime |
57
+ | `p` | Pequeno |
58
+ | `m` | Médio |
59
+ | `g` | Grande |
60
+
61
+ #### Produtos TOTVS
62
+
63
+ | Chave | Valor |
64
+ |-------------------|-------------------|
65
+ | `2c` | Carol |
66
+ | `carol` | carol |
67
+ | `consinco` | Consinco |
68
+ | `datasul` | Datasul |
69
+ | `fluig` | Fluig |
70
+ | `license-server` | License Server |
71
+ | `pep` | PEP |
72
+ | `protheus` | Protheus |
73
+ | `pvi` | PVI |
74
+ | `rm` | RM |
75
+ | `sfa` | SFA |
76
+ | `smartrm` | Smart RM |
77
+ | `smartrmcluster` | Smart RM Cluster |
78
+ | `smartrmcontrol` | Smart RM Control |
79
+ | `taf` | TAF |
80
+ | `treports` | Treports |
81
+ | `tss` | TSS |
82
+ | `winthor` | Winthor |
83
+
84
+ #### Sistemas Operacionais
85
+
86
+ | Chave | Valor |
87
+ |-----------|---------|
88
+ | `windows` | Windows |
89
+ | `linux` | Linux |
90
+
91
+ #### Tipos de Responsáveis
92
+
93
+ | Chave | Valor |
94
+ |--------------------------|----------------------|
95
+ | `prime_customer_success` | Customer Success |
96
+ | `project_manager` | Gerente de Projetos |
97
+ | `prime_engineer` | Engenheiro Prime |
98
+
99
+ ## Exemplos de Uso
100
+
101
+ ### Básico — Tradução de ambiente e produto
102
+
103
+ ```html
104
+ <p>{{ 'production' | respective }}</p>
105
+ <!-- Resultado: Produção -->
106
+
107
+ <p>{{ 'protheus' | respective }}</p>
108
+ <!-- Resultado: Protheus -->
109
+
110
+ <p>{{ 'prime_customer_success' | respective }}</p>
111
+ <!-- Resultado: Customer Success -->
112
+ ```
113
+
114
+ ```typescript
115
+ import { RespectivePipe } from 'tcloud-ui';
116
+
117
+ @Component({
118
+ standalone: true,
119
+ imports: [RespectivePipe],
120
+ template: `
121
+ <p>{{ ambiente | respective }}</p>
122
+ `
123
+ })
124
+ export class ExemploBasicoComponent {
125
+ ambiente = 'production';
126
+ }
127
+ ```
128
+
129
+ ### Avançado — Listagem de ambientes com tradução
130
+
131
+ ```html
132
+ <table class="table">
133
+ <thead>
134
+ <tr>
135
+ <th>Ambiente</th>
136
+ <th>Produto</th>
137
+ <th>SO</th>
138
+ <th>Porte</th>
139
+ </tr>
140
+ </thead>
141
+ <tbody>
142
+ <tr *ngFor="let item of servidores">
143
+ <td>{{ item.ambiente | respective }}</td>
144
+ <td>{{ item.produto | respective }}</td>
145
+ <td>{{ item.so | respective }}</td>
146
+ <td>{{ item.porte | respective }}</td>
147
+ </tr>
148
+ </tbody>
149
+ </table>
150
+ ```
151
+
152
+ ```typescript
153
+ import { RespectivePipe } from 'tcloud-ui';
154
+
155
+ @Component({
156
+ standalone: true,
157
+ imports: [CommonModule, RespectivePipe],
158
+ template: `...`
159
+ })
160
+ export class ExemploAvancadoComponent {
161
+ servidores = [
162
+ { ambiente: 'production', produto: 'protheus', so: 'linux', porte: 'g' },
163
+ { ambiente: 'development', produto: 'rm', so: 'windows', porte: 'm' },
164
+ { ambiente: 'qa', produto: 'datasul', so: 'linux', porte: 'p' }
165
+ ];
166
+ }
167
+ ```