@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,539 @@
1
+ # Message
2
+
3
+ ## Características
4
+
5
+ O componente `tcloud-ui-message` é um componente de mensagem de feedback que exibe notificações ao usuário em quatro tipos diferentes: sucesso, erro, informação e aviso. Cada tipo possui ícone e paleta de cores específicos para comunicar claramente o tipo de mensagem.
6
+
7
+ ## Instalação
8
+
9
+ Para utilizar o componente Message, importe o módulo `TCloudUiModule`:
10
+
11
+ ```typescript
12
+ import { TCloudUiModule } from '@tcloud-ui/lib';
13
+ import { Component } from '@angular/core';
14
+
15
+ @Component({
16
+ selector: 'app-example',
17
+ standalone: true,
18
+ imports: [TCloudUiModule],
19
+ template: `
20
+ <tcloud-ui-message
21
+ message="Operação concluída com sucesso!"
22
+ type="success">
23
+ </tcloud-ui-message>
24
+ `
25
+ })
26
+ export class ExampleComponent {}
27
+ ```
28
+
29
+ Ou importe diretamente o componente:
30
+
31
+ ```typescript
32
+ import { TCloudUiMessageComponent } from '@tcloud-ui/lib';
33
+
34
+ @Component({
35
+ selector: 'app-example',
36
+ standalone: true,
37
+ imports: [TCloudUiMessageComponent],
38
+ template: `...`
39
+ })
40
+ export class ExampleComponent {}
41
+ ```
42
+
43
+ ## Propriedades (API)
44
+
45
+ ### Inputs
46
+
47
+ | Nome | Tipo | Descrição | Valor Default |
48
+ |------|------|-----------|---------------|
49
+ | `message` | `string` | Texto da mensagem a ser exibida | `''` (vazio) |
50
+ | `type` | `'success' \| 'error' \| 'info' \| 'warning'` | Tipo da mensagem que determina estilo e ícone | `'info'` |
51
+
52
+ ## Tipos de Mensagem
53
+
54
+ ### Success (Sucesso)
55
+ - **Ícone**: ✓ Check
56
+ - **Cor de Fundo**: Verde claro (`var(--c-success-300)`)
57
+ - **Cor do Texto**: Verde (`var(--c-success-500)`)
58
+ - **Uso**: Confirmar ações bem-sucedidas
59
+
60
+ ### Error (Erro)
61
+ - **Ícone**: ✕ Times
62
+ - **Cor de Fundo**: Vermelho claro (`var(--c-danger-300)`)
63
+ - **Cor do Texto**: Vermelho (`var(--c-danger-500)`)
64
+ - **Uso**: Indicar erros e problemas
65
+
66
+ ### Info (Informação)
67
+ - **Ícone**: ⓘ Info Circle
68
+ - **Cor de Fundo**: Azul claro (`var(--c-info-300)`)
69
+ - **Cor do Texto**: Azul (`var(--c-info-500)`)
70
+ - **Uso**: Exibir informações gerais
71
+
72
+ ### Warning (Aviso)
73
+ - **Ícone**: ⚠ Exclamation Triangle
74
+ - **Cor de Fundo**: Laranja claro (`var(--c-alert-300)`)
75
+ - **Cor do Texto**: Laranja (`var(--c-alert-500)`)
76
+ - **Uso**: Alertar o usuário sobre ações importantes
77
+
78
+ ## Exemplos de Uso
79
+
80
+ ### Uso Básico
81
+
82
+ ```typescript
83
+ import { Component } from '@angular/core';
84
+ import { TCloudUiModule } from '@tcloud-ui/lib';
85
+
86
+ @Component({
87
+ selector: 'app-basic-message',
88
+ standalone: true,
89
+ imports: [TCloudUiModule],
90
+ template: `
91
+ <tcloud-ui-message
92
+ message="Ação realizada com sucesso!"
93
+ type="success">
94
+ </tcloud-ui-message>
95
+
96
+ <tcloud-ui-message
97
+ message="Ocorreu um erro ao processar"
98
+ type="error">
99
+ </tcloud-ui-message>
100
+
101
+ <tcloud-ui-message
102
+ message="Esta é uma mensagem informativa"
103
+ type="info">
104
+ </tcloud-ui-message>
105
+
106
+ <tcloud-ui-message
107
+ message="Tenha cuidado ao prosseguir"
108
+ type="warning">
109
+ </tcloud-ui-message>
110
+ `
111
+ })
112
+ export class BasicMessageComponent {}
113
+ ```
114
+
115
+ ### Mensagens Dinâmicas
116
+
117
+ ```typescript
118
+ import { Component, signal } from '@angular/core';
119
+ import { TCloudUiModule } from '@tcloud-ui/lib';
120
+ import { CommonModule } from '@angular/common';
121
+
122
+ @Component({
123
+ selector: 'app-dynamic-message',
124
+ standalone: true,
125
+ imports: [CommonModule, TCloudUiModule],
126
+ template: `
127
+ <div class="message-demo">
128
+ <button (click)="showSuccess()">Mostrar Sucesso</button>
129
+ <button (click)="showError()">Mostrar Erro</button>
130
+ <button (click)="showWarning()">Mostrar Aviso</button>
131
+ <button (click)="clear()">Limpar</button>
132
+
133
+ @if (currentMessage()) {
134
+ <tcloud-ui-message
135
+ [message]="currentMessage()"
136
+ [type]="currentType()">
137
+ </tcloud-ui-message>
138
+ }
139
+ </div>
140
+ `,
141
+ styles: [`
142
+ .message-demo {
143
+ display: flex;
144
+ flex-direction: column;
145
+ gap: 1rem;
146
+ }
147
+
148
+ button {
149
+ padding: 0.5rem 1rem;
150
+ background: var(--c-primary-500);
151
+ color: white;
152
+ border: none;
153
+ border-radius: var(--bor-radius-4);
154
+ cursor: pointer;
155
+ font-weight: 600;
156
+ }
157
+
158
+ button:hover {
159
+ background: var(--c-primary-600);
160
+ }
161
+ `]
162
+ })
163
+ export class DynamicMessageComponent {
164
+ currentMessage = signal<string>('');
165
+ currentType = signal<'success' | 'error' | 'info' | 'warning'>('info');
166
+
167
+ showSuccess() {
168
+ this.currentMessage.set('Operação concluída com sucesso!');
169
+ this.currentType.set('success');
170
+ }
171
+
172
+ showError() {
173
+ this.currentMessage.set('Ocorreu um erro ao processar sua solicitação');
174
+ this.currentType.set('error');
175
+ }
176
+
177
+ showWarning() {
178
+ this.currentMessage.set('Altere a senha para aumentar a segurança');
179
+ this.currentType.set('warning');
180
+ }
181
+
182
+ clear() {
183
+ this.currentMessage.set('');
184
+ }
185
+ }
186
+ ```
187
+
188
+ ### Validação de Formulário
189
+
190
+ ```typescript
191
+ import { Component, signal } from '@angular/core';
192
+ import { TCloudUiModule } from '@tcloud-ui/lib';
193
+ import { CommonModule } from '@angular/common';
194
+ import { FormsModule } from '@angular/forms';
195
+
196
+ @Component({
197
+ selector: 'app-form-validation-message',
198
+ standalone: true,
199
+ imports: [CommonModule, TCloudUiModule, FormsModule],
200
+ template: `
201
+ <div class="form">
202
+ <input
203
+ type="email"
204
+ [(ngModel)]="email"
205
+ (blur)="validateEmail()"
206
+ placeholder="Digite seu email"
207
+ class="input"
208
+ />
209
+
210
+ @if (emailError()) {
211
+ <tcloud-ui-message
212
+ [message]="emailError()"
213
+ type="error">
214
+ </tcloud-ui-message>
215
+ } @else if (emailValid()) {
216
+ <tcloud-ui-message
217
+ message="Email válido!"
218
+ type="success">
219
+ </tcloud-ui-message>
220
+ }
221
+
222
+ <input
223
+ type="password"
224
+ [(ngModel)]="password"
225
+ (change)="validatePassword()"
226
+ placeholder="Senha"
227
+ class="input"
228
+ />
229
+
230
+ @if (passwordMessage()) {
231
+ <tcloud-ui-message
232
+ [message]="passwordMessage()"
233
+ [type]="passwordStrength() > 2 ? 'success' : 'warning'">
234
+ </tcloud-ui-message>
235
+ }
236
+ </div>
237
+ `,
238
+ styles: [`
239
+ .form {
240
+ display: flex;
241
+ flex-direction: column;
242
+ gap: 1rem;
243
+ max-width: 400px;
244
+ }
245
+
246
+ .input {
247
+ padding: 0.75rem;
248
+ border: 1px solid var(--c-neutral-300);
249
+ border-radius: var(--bor-radius-4);
250
+ font-size: 1rem;
251
+ }
252
+
253
+ .input:focus {
254
+ outline: none;
255
+ border-color: var(--c-primary-500);
256
+ }
257
+ `]
258
+ })
259
+ export class FormValidationMessageComponent {
260
+ email = signal<string>('');
261
+ password = signal<string>('');
262
+ emailError = signal<string>('');
263
+ emailValid = signal<boolean>(false);
264
+ passwordMessage = signal<string>('');
265
+ passwordStrength = signal<number>(0);
266
+
267
+ validateEmail() {
268
+ const email = this.email();
269
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
270
+
271
+ if (!email) {
272
+ this.emailError.set('Email é obrigatório');
273
+ this.emailValid.set(false);
274
+ } else if (!emailRegex.test(email)) {
275
+ this.emailError.set('Email inválido');
276
+ this.emailValid.set(false);
277
+ } else {
278
+ this.emailError.set('');
279
+ this.emailValid.set(true);
280
+ }
281
+ }
282
+
283
+ validatePassword() {
284
+ const pwd = this.password();
285
+ let strength = 0;
286
+ let message = '';
287
+
288
+ if (pwd.length < 8) {
289
+ message = '❌ Muito curta (minuto 8 caracteres)';
290
+ } else {
291
+ strength++;
292
+ if (/[A-Z]/.test(pwd)) strength++;
293
+ if (/[0-9]/.test(pwd)) strength++;
294
+ if (/[^A-Za-z0-9]/.test(pwd)) strength++;
295
+
296
+ const messages = [
297
+ 'Senha fraca',
298
+ 'Senha regular',
299
+ 'Senha boa',
300
+ 'Senha forte'
301
+ ];
302
+ message = messages[strength - 1] || 'Senha muito forte';
303
+ }
304
+
305
+ this.passwordStrength.set(strength);
306
+ this.passwordMessage.set(message);
307
+ }
308
+ }
309
+ ```
310
+
311
+ ### Notificações de Status
312
+
313
+ ```typescript
314
+ import { Component, signal } from '@angular/core';
315
+ import { TCloudUiModule } from '@tcloud-ui/lib';
316
+ import { CommonModule } from '@angular/common';
317
+
318
+ @Component({
319
+ selector: 'app-status-notification',
320
+ standalone: true,
321
+ imports: [CommonModule, TCloudUiModule],
322
+ template: `
323
+ <div class="status-container">
324
+ <h3>Status das Operações</h3>
325
+
326
+ @for (operation of operations(); track operation.id) {
327
+ <div class="operation">
328
+ <span>{{ operation.name }}</span>
329
+ <tcloud-ui-message
330
+ [message]="operation.message"
331
+ [type]="operation.type">
332
+ </tcloud-ui-message>
333
+ </div>
334
+ }
335
+ </div>
336
+ `,
337
+ styles: [`
338
+ .status-container {
339
+ max-width: 500px;
340
+ }
341
+
342
+ .operation {
343
+ display: grid;
344
+ grid-template-columns: 200px 1fr;
345
+ align-items: center;
346
+ gap: 1rem;
347
+ margin-bottom: 1rem;
348
+ padding-bottom: 1rem;
349
+ border-bottom: 1px solid var(--c-neutral-200);
350
+ }
351
+
352
+ span {
353
+ font-weight: 600;
354
+ color: var(--c-neutral-700);
355
+ }
356
+ `]
357
+ })
358
+ export class StatusNotificationComponent {
359
+ operations = signal([
360
+ { id: 1, name: 'Download', message: 'Arquivo baixado com sucesso', type: 'success' as const },
361
+ { id: 2, name: 'Upload', message: 'Erro ao fazer upload do arquivo', type: 'error' as const },
362
+ { id: 3, name: 'Sincronização', message: 'Sincronizando dados...', type: 'info' as const },
363
+ { id: 4, name: 'Atualização', message: 'Atualização importante disponível', type: 'warning' as const }
364
+ ]);
365
+ }
366
+ ```
367
+
368
+ ### Mensagens com Ações
369
+
370
+ ```typescript
371
+ import { Component, signal } from '@angular/core';
372
+ import { TCloudUiModule } from '@tcloud-ui/lib';
373
+ import { CommonModule } from '@angular/common';
374
+
375
+ @Component({
376
+ selector: 'app-message-with-action',
377
+ standalone: true,
378
+ imports: [CommonModule, TCloudUiModule],
379
+ template: `
380
+ <div class="message-container">
381
+ @if (sessionExpiring()) {
382
+ <div class="message-wrapper">
383
+ <tcloud-ui-message
384
+ message="Sua sessão expirará em 2 minutos. Deseja continuar?"
385
+ type="warning">
386
+ </tcloud-ui-message>
387
+ <div class="actions">
388
+ <button (click)="continueSession()" class="btn-primary">
389
+ Continuar
390
+ </button>
391
+ <button (click)="logout()" class="btn-secondary">
392
+ Sair
393
+ </button>
394
+ </div>
395
+ </div>
396
+ }
397
+
398
+ @if (deleteConfirm()) {
399
+ <div class="message-wrapper">
400
+ <tcloud-ui-message
401
+ message="Tem certeza que deseja deletar este item? Esta ação é irreversível."
402
+ type="error">
403
+ </tcloud-ui-message>
404
+ <div class="actions">
405
+ <button (click)="confirmDelete()" class="btn-danger">
406
+ Deletar
407
+ </button>
408
+ <button (click)="cancelDelete()" class="btn-secondary">
409
+ Cancelar
410
+ </button>
411
+ </div>
412
+ </div>
413
+ }
414
+ </div>
415
+ `,
416
+ styles: [`
417
+ .message-wrapper {
418
+ padding: 1.5rem;
419
+ border: 1px solid var(--c-neutral-300);
420
+ border-radius: var(--bor-radius-8);
421
+ background: white;
422
+ margin-bottom: 1rem;
423
+ }
424
+
425
+ .actions {
426
+ display: flex;
427
+ gap: 1rem;
428
+ margin-top: 1rem;
429
+ }
430
+
431
+ button {
432
+ padding: 0.5rem 1rem;
433
+ border: none;
434
+ border-radius: var(--bor-radius-4);
435
+ cursor: pointer;
436
+ font-weight: 600;
437
+ transition: background 200ms;
438
+ }
439
+
440
+ .btn-primary {
441
+ background: var(--c-primary-500);
442
+ color: white;
443
+ }
444
+
445
+ .btn-primary:hover {
446
+ background: var(--c-primary-600);
447
+ }
448
+
449
+ .btn-danger {
450
+ background: var(--c-danger-500);
451
+ color: white;
452
+ }
453
+
454
+ .btn-danger:hover {
455
+ background: var(--c-danger-600);
456
+ }
457
+
458
+ .btn-secondary {
459
+ background: var(--c-neutral-200);
460
+ color: var(--c-neutral-700);
461
+ }
462
+
463
+ .btn-secondary:hover {
464
+ background: var(--c-neutral-300);
465
+ }
466
+ `]
467
+ })
468
+ export class MessageWithActionComponent {
469
+ sessionExpiring = signal(false);
470
+ deleteConfirm = signal(false);
471
+
472
+ continueSession() {
473
+ this.sessionExpiring.set(false);
474
+ }
475
+
476
+ logout() {
477
+ console.log('Logout...');
478
+ }
479
+
480
+ confirmDelete() {
481
+ console.log('Item deletado');
482
+ this.deleteConfirm.set(false);
483
+ }
484
+
485
+ cancelDelete() {
486
+ this.deleteConfirm.set(false);
487
+ }
488
+ }
489
+ ```
490
+
491
+ ## Estilos Padrão
492
+
493
+ - **Padding**: 0.75rem vertical, 1rem horizontal
494
+ - **Border Radius**: 6px
495
+ - **Font Size**: 14px
496
+ - **Margin Vertical**: 8px
497
+ - **Display**: Flex com align-items center
498
+ - **Gap entre ícone e texto**: 0.5rem
499
+ - **Ícone Font Size**: 16px
500
+
501
+ ## Comportamentos
502
+
503
+ - O componente só renderiza se `message` não estiver vazio
504
+ - Usa `ChangeDetectionStrategy.OnPush` para melhor performance
505
+ - Suporta renderização condicional com `*ngIf`
506
+ - Ícones vêm da biblioteca FontAwesome (classes fas)
507
+
508
+ ## Casos de Uso
509
+
510
+ - Feedback de ações do usuário
511
+ - Validação de formulários
512
+ - Notificações de sistema
513
+ - Erros de conexão
514
+ - Avisos de segurança
515
+ - Confirmação de ações
516
+ - Status de operações
517
+ - Mensagens de sucesso
518
+ - Alertas de atualização
519
+ - Feedback de upload/download
520
+
521
+ ## Performance
522
+
523
+ - Usa `ChangeDetectionStrategy.OnPush` para renderização otimizada
524
+ - Renderização condicional com `*ngIf` evita elementos desnecessários
525
+ - Suporta signals para reatividade eficiente
526
+
527
+ ## Acessibilidade
528
+
529
+ - Ícones semânticos indicam tipo de mensagem
530
+ - Cores seguem padrão de contraste adequado
531
+ - Texto descreve claramente a mensagem
532
+ - Suporta leitura de tela com `role="alert"` (recomendado adicionar)
533
+
534
+ ## Dicas de Customização
535
+
536
+ 1. **Auto-fechar**: Kombine com `setTimeout` para auto-fechar após 3-5 segundos
537
+ 2. **Animação**: Adicione transição CSS para efeito fade in/out
538
+ 3. **Múltiplas**: Empilhe vários componentes para exibir múltiplas mensagens
539
+ 4. **Personalizado**: Use com `<ng-content>` para conteúdo customizado