@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.
- package/docs/tcloud-ui-accordion.md +345 -0
- package/docs/tcloud-ui-actions.md +88 -0
- package/docs/tcloud-ui-alert-banner.md +104 -0
- package/docs/tcloud-ui-array-to-text.md +361 -0
- package/docs/tcloud-ui-breadcrumb.md +103 -0
- package/docs/tcloud-ui-bytes.md +109 -0
- package/docs/tcloud-ui-calendar.md +387 -0
- package/docs/tcloud-ui-card-accordion.md +266 -0
- package/docs/tcloud-ui-card-title.md +47 -0
- package/docs/tcloud-ui-card.md +40 -0
- package/docs/tcloud-ui-choice-issues.md +59 -0
- package/docs/tcloud-ui-cnpj.md +102 -0
- package/docs/tcloud-ui-container.md +171 -0
- package/docs/tcloud-ui-cpf.md +102 -0
- package/docs/tcloud-ui-currency.md +271 -0
- package/docs/tcloud-ui-data-list.md +91 -0
- package/docs/tcloud-ui-datebr.md +139 -0
- package/docs/tcloud-ui-datepicker-time.md +191 -0
- package/docs/tcloud-ui-datepicker.md +186 -0
- package/docs/tcloud-ui-dropdown-multi.md +444 -0
- package/docs/tcloud-ui-dropdown.md +369 -0
- package/docs/tcloud-ui-el-copy.md +113 -0
- package/docs/tcloud-ui-empty-content.md +412 -0
- package/docs/tcloud-ui-faq.md +496 -0
- package/docs/tcloud-ui-filter-bar.md +86 -0
- package/docs/tcloud-ui-filters.md +337 -0
- package/docs/tcloud-ui-hover-parent.md +467 -0
- package/docs/tcloud-ui-icon-button.md +104 -0
- package/docs/tcloud-ui-input-container.md +520 -0
- package/docs/tcloud-ui-input-password.md +258 -0
- package/docs/tcloud-ui-input-search.md +314 -0
- package/docs/tcloud-ui-label-token.md +286 -0
- package/docs/tcloud-ui-legend.md +72 -0
- package/docs/tcloud-ui-line-step-circle.md +98 -0
- package/docs/tcloud-ui-line-step-title.md +194 -0
- package/docs/tcloud-ui-linha-logo.md +550 -0
- package/docs/tcloud-ui-loading.md +88 -0
- package/docs/tcloud-ui-message.md +539 -0
- package/docs/tcloud-ui-modal.md +196 -0
- package/docs/tcloud-ui-monthname.md +123 -0
- package/docs/tcloud-ui-multi-input.md +290 -0
- package/docs/tcloud-ui-multi-select.md +311 -0
- package/docs/tcloud-ui-multiples-values.md +157 -0
- package/docs/tcloud-ui-not-found.md +88 -0
- package/docs/tcloud-ui-number-step.md +134 -0
- package/docs/tcloud-ui-pagination.md +579 -0
- package/docs/tcloud-ui-progress-bar.md +65 -0
- package/docs/tcloud-ui-radio.md +83 -0
- package/docs/tcloud-ui-reorder-items.md +418 -0
- package/docs/tcloud-ui-respective.md +167 -0
- package/docs/tcloud-ui-scroll-box.md +109 -0
- package/docs/tcloud-ui-search-bar.md +88 -0
- package/docs/tcloud-ui-search-in-object.md +143 -0
- package/docs/tcloud-ui-search-input.md +74 -0
- package/docs/tcloud-ui-skeleton-loading.md +394 -0
- package/docs/tcloud-ui-slide-toggle.md +210 -0
- package/docs/tcloud-ui-statusinfo.md +138 -0
- package/docs/tcloud-ui-tab-group.md +376 -0
- package/docs/tcloud-ui-tab-menu.md +109 -0
- package/docs/tcloud-ui-table.md +96 -0
- package/docs/tcloud-ui-tag.md +379 -0
- package/docs/tcloud-ui-tc-badge.md +168 -0
- package/docs/tcloud-ui-tc-btn.md +189 -0
- package/docs/tcloud-ui-tc-colors.md +204 -0
- package/docs/tcloud-ui-tc-form-control.md +200 -0
- package/docs/tcloud-ui-tc-text.md +139 -0
- package/docs/tcloud-ui-tc-title.md +118 -0
- package/docs/tcloud-ui-tcloud-form.md +55 -0
- package/docs/tcloud-ui-toast.md +83 -0
- package/docs/tcloud-ui-tooltip.md +88 -0
- package/docs/tcloud-ui-topology.md +232 -0
- package/docs/tcloud-ui-upload-area.md +195 -0
- package/docs/tcloud-ui-welcome.md +112 -0
- package/docs/tcloud-ui-wizard-steps.md +103 -0
- package/js/tcloud-ui-app.js +11 -0
- package/package.json +1 -1
- package/scss/tcloud-ui/styles/_claus-badge.scss +117 -0
- package/scss/tcloud-ui/styles/_claus-btn.scss +207 -0
- package/scss/tcloud-ui/styles/_claus-card.scss +12 -0
- package/scss/tcloud-ui/styles/_claus-colors.scss +192 -0
- package/scss/tcloud-ui/styles/_claus-form.scss +88 -0
- package/scss/tcloud-ui/styles/_claus-sizes.scss +28 -0
- package/scss/tcloud-ui/styles/_claus-spacers.scss +49 -0
- package/scss/tcloud-ui/styles/_claus-themes.scss +36 -0
- package/scss/tcloud-ui/styles/_claus-title.scss +24 -0
- package/scss/tcloud-ui/styles/_claus-typography.scss +70 -0
- package/scss/tcloud-ui/styles/_claus-variables.scss +131 -0
- package/scss/tcloud-ui/styles/_colors.scss +123 -0
- package/scss/tcloud-ui/styles/_tc-btn.scss +210 -0
- package/scss/tcloud-ui/styles/_tc-card.scss +7 -0
- package/scss/tcloud-ui/styles/_tc-title.scss +49 -0
- package/scss/tcloud-ui/styles.scss +35 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# StatusInfoPipe
|
|
2
|
+
|
|
3
|
+
O pipe `statusinfo` traduz chaves de status do sistema (em inglês) para descrições legíveis em português. Suporta dois temas de tradução: o padrão (`status_default`) e o de propostas (`proposal`), além de um modo especial `ALL` que concatena os valores de todos os temas. A comparação é case-insensitive.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- Tradução de status do sistema para português
|
|
8
|
+
- Dois mapas de tradução: padrão e proposta (`proposal`)
|
|
9
|
+
- Modo `ALL` que busca em todos os mapas e concatena os resultados
|
|
10
|
+
- Comparação case-insensitive
|
|
11
|
+
- Retorna o valor original quando não encontra correspondência
|
|
12
|
+
- Pipe standalone
|
|
13
|
+
|
|
14
|
+
## Instalação
|
|
15
|
+
|
|
16
|
+
Importe o pipe diretamente no módulo ou componente standalone:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { StatusInfoPipe } from 'tcloud-ui';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## API
|
|
23
|
+
|
|
24
|
+
### Sintaxe do Pipe
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
{{ valor | statusinfo }}
|
|
28
|
+
{{ valor | statusinfo:'proposal' }}
|
|
29
|
+
{{ valor | statusinfo:'ALL' }}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Parâmetros
|
|
33
|
+
|
|
34
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
35
|
+
|-----------|----------|-------------|------------------------------------------------------------------------------------------------------|
|
|
36
|
+
| `tema` | `string` | Não | Tema de tradução. Valores: `'proposal'` (mapa de propostas), `'ALL'` (concatena todos os mapas). Sem parâmetro usa o mapa padrão |
|
|
37
|
+
|
|
38
|
+
### Mapa Padrão (Default)
|
|
39
|
+
|
|
40
|
+
| Chave | Valor |
|
|
41
|
+
|----------------|---------------------|
|
|
42
|
+
| `SUCCEEDED` | Finalizado |
|
|
43
|
+
| `PENDING` | Pendente |
|
|
44
|
+
| `FAILED` | Erro |
|
|
45
|
+
| `RUNNING` | Em andamento |
|
|
46
|
+
| `REGISTRATION` | Cadastro Pendente |
|
|
47
|
+
| `SUCCEED` | Finalizado |
|
|
48
|
+
| `WAITING` | Aguardando |
|
|
49
|
+
| `REJECTED` | Rejeitado |
|
|
50
|
+
|
|
51
|
+
### Mapa de Propostas (`proposal`)
|
|
52
|
+
|
|
53
|
+
| Chave | Valor |
|
|
54
|
+
|----------------|----------------------------|
|
|
55
|
+
| `SUCCEEDED` | Finalizado |
|
|
56
|
+
| `PENDING` | Aguardando Aprovação |
|
|
57
|
+
| `FAILED` | Erro |
|
|
58
|
+
| `RUNNING` | Provisionando Ambientes |
|
|
59
|
+
| `REGISTRATION` | Cadastro Pendente |
|
|
60
|
+
| `SUCCEED` | Finalizado |
|
|
61
|
+
| `WAITING` | Provisionando Ambientes |
|
|
62
|
+
| `REJECTED` | Rejeitada |
|
|
63
|
+
|
|
64
|
+
## Exemplos de Uso
|
|
65
|
+
|
|
66
|
+
### Básico — Status padrão
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<p>{{ 'SUCCEEDED' | statusinfo }}</p>
|
|
70
|
+
<!-- Resultado: Finalizado -->
|
|
71
|
+
|
|
72
|
+
<p>{{ 'PENDING' | statusinfo }}</p>
|
|
73
|
+
<!-- Resultado: Pendente -->
|
|
74
|
+
|
|
75
|
+
<p>{{ 'RUNNING' | statusinfo }}</p>
|
|
76
|
+
<!-- Resultado: Em andamento -->
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { StatusInfoPipe } from 'tcloud-ui';
|
|
81
|
+
|
|
82
|
+
@Component({
|
|
83
|
+
standalone: true,
|
|
84
|
+
imports: [StatusInfoPipe],
|
|
85
|
+
template: `
|
|
86
|
+
<span>{{ status | statusinfo }}</span>
|
|
87
|
+
`
|
|
88
|
+
})
|
|
89
|
+
export class ExemploBasicoComponent {
|
|
90
|
+
status = 'SUCCEEDED';
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Avançado — Tema de propostas
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<p>{{ 'PENDING' | statusinfo:'proposal' }}</p>
|
|
98
|
+
<!-- Resultado: Aguardando Aprovação -->
|
|
99
|
+
|
|
100
|
+
<p>{{ 'RUNNING' | statusinfo:'proposal' }}</p>
|
|
101
|
+
<!-- Resultado: Provisionando Ambientes -->
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { StatusInfoPipe } from 'tcloud-ui';
|
|
106
|
+
|
|
107
|
+
@Component({
|
|
108
|
+
standalone: true,
|
|
109
|
+
imports: [CommonModule, StatusInfoPipe],
|
|
110
|
+
template: `
|
|
111
|
+
<table class="table">
|
|
112
|
+
<thead>
|
|
113
|
+
<tr><th>Proposta</th><th>Status</th></tr>
|
|
114
|
+
</thead>
|
|
115
|
+
<tbody>
|
|
116
|
+
<tr *ngFor="let proposta of propostas">
|
|
117
|
+
<td>{{ proposta.nome }}</td>
|
|
118
|
+
<td>{{ proposta.status | statusinfo:'proposal' }}</td>
|
|
119
|
+
</tr>
|
|
120
|
+
</tbody>
|
|
121
|
+
</table>
|
|
122
|
+
`
|
|
123
|
+
})
|
|
124
|
+
export class ExemploAvancadoComponent {
|
|
125
|
+
propostas = [
|
|
126
|
+
{ nome: 'Proposta A', status: 'PENDING' },
|
|
127
|
+
{ nome: 'Proposta B', status: 'RUNNING' },
|
|
128
|
+
{ nome: 'Proposta C', status: 'REJECTED' }
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Avançado — Modo ALL (busca em todos os temas)
|
|
134
|
+
|
|
135
|
+
```html
|
|
136
|
+
<p>{{ 'PENDING' | statusinfo:'ALL' }}</p>
|
|
137
|
+
<!-- Resultado: Pendente Aguardando Aprovação -->
|
|
138
|
+
```
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Tab Group
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
O componente `tcloud-ui-tab-group` é um componente de navegação por abas que permite organizar conteúdo em múltiplas abas. Funciona em conjunto com o componente `tcloud-ui-tab-item` para criar interfaces responsivas com scroll horizontal automático em telas grandes e deslize de toque em dispositivos móveis.
|
|
6
|
+
|
|
7
|
+
## Instalação
|
|
8
|
+
|
|
9
|
+
Para utilizar o componente Tab Group, 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-tab-group>
|
|
21
|
+
<tcloud-ui-tab-item>Aba 1</tcloud-ui-tab-item>
|
|
22
|
+
<tcloud-ui-tab-item>Aba 2</tcloud-ui-tab-item>
|
|
23
|
+
</tcloud-ui-tab-group>
|
|
24
|
+
`
|
|
25
|
+
})
|
|
26
|
+
export class ExampleComponent {}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Ou importe diretamente os componentes:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { TCloudUiTabGroupComponent, TCloudUiTabItemComponent } from '@tcloud-ui/lib';
|
|
33
|
+
|
|
34
|
+
@Component({
|
|
35
|
+
selector: 'app-example',
|
|
36
|
+
standalone: true,
|
|
37
|
+
imports: [TCloudUiTabGroupComponent, TCloudUiTabItemComponent],
|
|
38
|
+
template: `...`
|
|
39
|
+
})
|
|
40
|
+
export class ExampleComponent {}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Propriedades (API)
|
|
44
|
+
|
|
45
|
+
### TCloudUiTabGroupComponent
|
|
46
|
+
|
|
47
|
+
O componente principal que envolve as abas com controle de overflow e scroll.
|
|
48
|
+
|
|
49
|
+
**Propriedades:**
|
|
50
|
+
- `isCarouselOverflowed: boolean` - Indica se há overflow horizontal
|
|
51
|
+
- `scrollTabsCarousel(direction: 'left' | 'right'): void` - Método para scroll manual do carousel
|
|
52
|
+
|
|
53
|
+
### TCloudUiTabItemComponent
|
|
54
|
+
|
|
55
|
+
Componente individual de aba que pode funcionar como botão ou link.
|
|
56
|
+
|
|
57
|
+
**Inputs:**
|
|
58
|
+
|
|
59
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
60
|
+
|------|------|-----------|---------------|
|
|
61
|
+
| `active` | `boolean` | Estado ativo da aba | `false` |
|
|
62
|
+
| `url` | `string` | URL para navegação. Se vazio, funciona como botão | `''` |
|
|
63
|
+
| `disabled` | `boolean` | Se a aba está desabilitada | `false` |
|
|
64
|
+
| `fullWidth` | `boolean` | Se a aba ocupa toda a largura | `false` |
|
|
65
|
+
|
|
66
|
+
**Outputs:**
|
|
67
|
+
|
|
68
|
+
| Nome | Emite | Descrição |
|
|
69
|
+
|------|-------|-----------|
|
|
70
|
+
| `onClick` | `MouseEvent` | Emitido quando a aba é clicada |
|
|
71
|
+
|
|
72
|
+
## Exemplos de Uso
|
|
73
|
+
|
|
74
|
+
### Uso Básico
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { Component } from '@angular/core';
|
|
78
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
79
|
+
import { CommonModule } from '@angular/common';
|
|
80
|
+
|
|
81
|
+
@Component({
|
|
82
|
+
selector: 'app-basic-tabs',
|
|
83
|
+
standalone: true,
|
|
84
|
+
imports: [CommonModule, TCloudUiModule],
|
|
85
|
+
template: `
|
|
86
|
+
<tcloud-ui-tab-group>
|
|
87
|
+
<tcloud-ui-tab-item>Aba 1</tcloud-ui-tab-item>
|
|
88
|
+
<tcloud-ui-tab-item>Aba 2</tcloud-ui-tab-item>
|
|
89
|
+
<tcloud-ui-tab-item>Aba 3</tcloud-ui-tab-item>
|
|
90
|
+
<tcloud-ui-tab-item>Aba 4</tcloud-ui-tab-item>
|
|
91
|
+
<tcloud-ui-tab-item>Aba 5</tcloud-ui-tab-item>
|
|
92
|
+
</tcloud-ui-tab-group>
|
|
93
|
+
`
|
|
94
|
+
})
|
|
95
|
+
export class BasicTabsComponent {}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Abas com Estados
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
import { Component, signal } from '@angular/core';
|
|
102
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
103
|
+
import { CommonModule } from '@angular/common';
|
|
104
|
+
|
|
105
|
+
@Component({
|
|
106
|
+
selector: 'app-states-tabs',
|
|
107
|
+
standalone: true,
|
|
108
|
+
imports: [CommonModule, TCloudUiModule],
|
|
109
|
+
template: `
|
|
110
|
+
<tcloud-ui-tab-group>
|
|
111
|
+
<tcloud-ui-tab-item
|
|
112
|
+
[active]="activeTab() === 0"
|
|
113
|
+
(onClick)="activeTab.set(0)">
|
|
114
|
+
Dashboard
|
|
115
|
+
</tcloud-ui-tab-item>
|
|
116
|
+
<tcloud-ui-tab-item
|
|
117
|
+
[active]="activeTab() === 1"
|
|
118
|
+
(onClick)="activeTab.set(1)">
|
|
119
|
+
Relatórios
|
|
120
|
+
</tcloud-ui-tab-item>
|
|
121
|
+
<tcloud-ui-tab-item
|
|
122
|
+
[active]="activeTab() === 2"
|
|
123
|
+
(onClick)="activeTab.set(2)">
|
|
124
|
+
Configurações
|
|
125
|
+
</tcloud-ui-tab-item>
|
|
126
|
+
<tcloud-ui-tab-item
|
|
127
|
+
[disabled]="true">
|
|
128
|
+
Desabilitado
|
|
129
|
+
</tcloud-ui-tab-item>
|
|
130
|
+
</tcloud-ui-tab-group>
|
|
131
|
+
|
|
132
|
+
<div class="content">
|
|
133
|
+
@switch (activeTab()) {
|
|
134
|
+
@case (0) {
|
|
135
|
+
Conteúdo do Dashboard
|
|
136
|
+
}
|
|
137
|
+
@case (1) {
|
|
138
|
+
Conteúdo de Relatórios
|
|
139
|
+
}
|
|
140
|
+
@case (2) {
|
|
141
|
+
Conteúdo de Configurações
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
</div>
|
|
145
|
+
`,
|
|
146
|
+
styles: [`
|
|
147
|
+
.content {
|
|
148
|
+
padding: 1rem;
|
|
149
|
+
border-top: 1px solid var(--c-neutral-300);
|
|
150
|
+
}
|
|
151
|
+
`]
|
|
152
|
+
})
|
|
153
|
+
export class StatesTabsComponent {
|
|
154
|
+
activeTab = signal<number>(0);
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Abas com Links de Navegação
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
import { Component } from '@angular/core';
|
|
162
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
163
|
+
import { CommonModule } from '@angular/common';
|
|
164
|
+
|
|
165
|
+
@Component({
|
|
166
|
+
selector: 'app-navigation-tabs',
|
|
167
|
+
standalone: true,
|
|
168
|
+
imports: [CommonModule, TCloudUiModule],
|
|
169
|
+
template: `
|
|
170
|
+
<tcloud-ui-tab-group>
|
|
171
|
+
<tcloud-ui-tab-item
|
|
172
|
+
[url]="'/dashboard'"
|
|
173
|
+
[active]="isActive('/dashboard')">
|
|
174
|
+
Dashboard
|
|
175
|
+
</tcloud-ui-tab-item>
|
|
176
|
+
<tcloud-ui-tab-item
|
|
177
|
+
[url]="'/users'"
|
|
178
|
+
[active]="isActive('/users')">
|
|
179
|
+
Usuários
|
|
180
|
+
</tcloud-ui-tab-item>
|
|
181
|
+
<tcloud-ui-tab-item
|
|
182
|
+
[url]="'/reports'"
|
|
183
|
+
[active]="isActive('/reports')">
|
|
184
|
+
Relatórios
|
|
185
|
+
</tcloud-ui-tab-item>
|
|
186
|
+
<tcloud-ui-tab-item
|
|
187
|
+
[url]="'/settings'"
|
|
188
|
+
[active]="isActive('/settings')">
|
|
189
|
+
Configurações
|
|
190
|
+
</tcloud-ui-tab-item>
|
|
191
|
+
</tcloud-ui-tab-group>
|
|
192
|
+
`
|
|
193
|
+
})
|
|
194
|
+
export class NavigationTabsComponent {
|
|
195
|
+
isActive(url: string): boolean {
|
|
196
|
+
return false; // Implementar lógica real de verificação da rota ativa
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Abas com Conteúdo Dinâmico
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
import { Component, signal } from '@angular/core';
|
|
205
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
206
|
+
import { CommonModule } from '@angular/common';
|
|
207
|
+
|
|
208
|
+
@Component({
|
|
209
|
+
selector: 'app-dynamic-tabs',
|
|
210
|
+
standalone: true,
|
|
211
|
+
imports: [CommonModule, TCloudUiModule],
|
|
212
|
+
template: `
|
|
213
|
+
<tcloud-ui-tab-group>
|
|
214
|
+
@for (tab of tabs(); track tab.id) {
|
|
215
|
+
<tcloud-ui-tab-item
|
|
216
|
+
[active]="activeTab() === tab.id"
|
|
217
|
+
[disabled]="tab.disabled"
|
|
218
|
+
(onClick)="activeTab.set(tab.id)">
|
|
219
|
+
{{ tab.label }}
|
|
220
|
+
</tcloud-ui-tab-item>
|
|
221
|
+
}
|
|
222
|
+
</tcloud-ui-tab-group>
|
|
223
|
+
|
|
224
|
+
<div class="content">
|
|
225
|
+
@let activeContent = tabs().find(t => t.id === activeTab());
|
|
226
|
+
@if (activeContent) {
|
|
227
|
+
<h3>{{ activeContent.label }}</h3>
|
|
228
|
+
<p>{{ activeContent.content }}</p>
|
|
229
|
+
}
|
|
230
|
+
</div>
|
|
231
|
+
`,
|
|
232
|
+
styles: [`
|
|
233
|
+
.content {
|
|
234
|
+
padding: 1rem;
|
|
235
|
+
border-top: 1px solid var(--c-neutral-300);
|
|
236
|
+
}
|
|
237
|
+
`]
|
|
238
|
+
})
|
|
239
|
+
export class DynamicTabsComponent {
|
|
240
|
+
activeTab = signal<string>('tab1');
|
|
241
|
+
|
|
242
|
+
tabs = signal([
|
|
243
|
+
{ id: 'tab1', label: 'Produtos', content: 'Lista de produtos', disabled: false },
|
|
244
|
+
{ id: 'tab2', label: 'Categorias', content: 'Gerenciamento de categorias', disabled: false },
|
|
245
|
+
{ id: 'tab3', label: 'Estoque', content: 'Controle de estoque', disabled: false },
|
|
246
|
+
{ id: 'tab4', label: 'Relatórios', content: 'Geração de relatórios', disabled: true }
|
|
247
|
+
]);
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Abas em Largura Cheia
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
import { Component, signal } from '@angular/core';
|
|
255
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
256
|
+
import { CommonModule } from '@angular/common';
|
|
257
|
+
|
|
258
|
+
@Component({
|
|
259
|
+
selector: 'app-fullwidth-tabs',
|
|
260
|
+
standalone: true,
|
|
261
|
+
imports: [CommonModule, TCloudUiModule],
|
|
262
|
+
template: `
|
|
263
|
+
<tcloud-ui-tab-group>
|
|
264
|
+
<tcloud-ui-tab-item
|
|
265
|
+
[fullWidth]="true"
|
|
266
|
+
[active]="activeTab() === 0"
|
|
267
|
+
(onClick)="activeTab.set(0)">
|
|
268
|
+
Opção A
|
|
269
|
+
</tcloud-ui-tab-item>
|
|
270
|
+
<tcloud-ui-tab-item
|
|
271
|
+
[fullWidth]="true"
|
|
272
|
+
[active]="activeTab() === 1"
|
|
273
|
+
(onClick)="activeTab.set(1)">
|
|
274
|
+
Opção B
|
|
275
|
+
</tcloud-ui-tab-item>
|
|
276
|
+
</tcloud-ui-tab-group>
|
|
277
|
+
`
|
|
278
|
+
})
|
|
279
|
+
export class FullWidthTabsComponent {
|
|
280
|
+
activeTab = signal<number>(0);
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Tratamento de Click em Abas
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
import { Component } from '@angular/core';
|
|
288
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
289
|
+
import { CommonModule } from '@angular/common';
|
|
290
|
+
|
|
291
|
+
@Component({
|
|
292
|
+
selector: 'app-click-handler-tabs',
|
|
293
|
+
standalone: true,
|
|
294
|
+
imports: [CommonModule, TCloudUiModule],
|
|
295
|
+
template: `
|
|
296
|
+
<tcloud-ui-tab-group>
|
|
297
|
+
<tcloud-ui-tab-item
|
|
298
|
+
(onClick)="onTabClick('analytics')">
|
|
299
|
+
Analytics
|
|
300
|
+
</tcloud-ui-tab-item>
|
|
301
|
+
<tcloud-ui-tab-item
|
|
302
|
+
(onClick)="onTabClick('performance')">
|
|
303
|
+
Performance
|
|
304
|
+
</tcloud-ui-tab-item>
|
|
305
|
+
<tcloud-ui-tab-item
|
|
306
|
+
(onClick)="onTabClick('metrics')">
|
|
307
|
+
Métricas
|
|
308
|
+
</tcloud-ui-tab-item>
|
|
309
|
+
</tcloud-ui-tab-group>
|
|
310
|
+
|
|
311
|
+
@if (selectedTab) {
|
|
312
|
+
<p>Aba selecionada: {{ selectedTab }}</p>
|
|
313
|
+
}
|
|
314
|
+
`
|
|
315
|
+
})
|
|
316
|
+
export class ClickHandlerTabsComponent {
|
|
317
|
+
selectedTab: string | null = null;
|
|
318
|
+
|
|
319
|
+
onTabClick(tabName: string): void {
|
|
320
|
+
this.selectedTab = tabName;
|
|
321
|
+
console.log(`Navegando para ${tabName}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Responsividade
|
|
327
|
+
|
|
328
|
+
O componente `tcloud-ui-tab-group` é totalmente responsivo:
|
|
329
|
+
|
|
330
|
+
- **Desktop**: Exibe botões de scroll esquerda/direita quando há overflow
|
|
331
|
+
- **Mobile**: Permite deslize de toque para navegação entre abas
|
|
332
|
+
|
|
333
|
+
O breakpoint de transição entre os modos é **480px**.
|
|
334
|
+
|
|
335
|
+
## Comportamentos Especiais
|
|
336
|
+
|
|
337
|
+
1. **Detecção Automática de Overflow**: O componente detecta automaticamente quando há mais abas do que espaço disponível
|
|
338
|
+
2. **Scroll Suave**: O scroll é executado com comportamento smooth para melhor UX
|
|
339
|
+
3. **Estados Visuais**:
|
|
340
|
+
- Normal: Fundo cinza claro
|
|
341
|
+
- Hover/Focus: Fundo cinza mais escuro com texto azul
|
|
342
|
+
- Ativo: Fundo azul claro com borda azul
|
|
343
|
+
- Desabilitado: Cores acinzentadas com cursor not-allowed
|
|
344
|
+
|
|
345
|
+
## Integração com Roteamento
|
|
346
|
+
|
|
347
|
+
Para integrar com Angular Router, use a propriedade `url`:
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
import { Component } from '@angular/core';
|
|
351
|
+
import { Router } from '@angular/router';
|
|
352
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
353
|
+
|
|
354
|
+
@Component({
|
|
355
|
+
selector: 'app-router-tabs',
|
|
356
|
+
standalone: true,
|
|
357
|
+
imports: [TCloudUiModule],
|
|
358
|
+
template: `
|
|
359
|
+
<tcloud-ui-tab-group>
|
|
360
|
+
<tcloud-ui-tab-item url="/users">Usuários</tcloud-ui-tab-item>
|
|
361
|
+
<tcloud-ui-tab-item url="/products">Produtos</tcloud-ui-tab-item>
|
|
362
|
+
<tcloud-ui-tab-item url="/orders">Pedidos</tcloud-ui-tab-item>
|
|
363
|
+
</tcloud-ui-tab-group>
|
|
364
|
+
`
|
|
365
|
+
})
|
|
366
|
+
export class RouterTabsComponent {}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Casos de Uso
|
|
370
|
+
|
|
371
|
+
- Navegação principal de seções de uma aplicação
|
|
372
|
+
- Organização de conteúdo em painel de controle
|
|
373
|
+
- Tabulação de dados relacionados
|
|
374
|
+
- Filtros interativos
|
|
375
|
+
- Exibição de diferentes modos de visualização
|
|
376
|
+
- Configurações por categoria
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Tab Menu
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
- Sistema de abas standalone com cabeçalho, títulos/subtítulos e conteúdos associados.
|
|
5
|
+
- Gerencia estado via serviço interno (TabMenuService) com suporte a loading, scroll, linha inferior e modo full.
|
|
6
|
+
- Suporta registrar aba ativa na URL (`registerInUrl`) e alternar aba programaticamente por `active`.
|
|
7
|
+
- Componentes auxiliares: `tcloud-ui-tab-head`, `tcloud-ui-tab-title`, `tcloud-ui-tab-subtitle`, `tcloud-ui-tab-content`.
|
|
8
|
+
|
|
9
|
+
## Instalação
|
|
10
|
+
```ts
|
|
11
|
+
import {
|
|
12
|
+
TCloudUiTabMenuComponent,
|
|
13
|
+
TCloudUiTabHeadComponent,
|
|
14
|
+
TCloudUiTabTitleComponent,
|
|
15
|
+
TCloudUiTabSubtitleComponent,
|
|
16
|
+
TCloudUiTabContentComponent
|
|
17
|
+
} from 'projects/tcloud-ui/src/public-api';
|
|
18
|
+
|
|
19
|
+
@Component({
|
|
20
|
+
selector: 'app-example',
|
|
21
|
+
standalone: true,
|
|
22
|
+
imports: [
|
|
23
|
+
TCloudUiTabMenuComponent,
|
|
24
|
+
TCloudUiTabHeadComponent,
|
|
25
|
+
TCloudUiTabTitleComponent,
|
|
26
|
+
TCloudUiTabSubtitleComponent,
|
|
27
|
+
TCloudUiTabContentComponent
|
|
28
|
+
],
|
|
29
|
+
template: `<tcloud-ui-tab-menu></tcloud-ui-tab-menu>`
|
|
30
|
+
})
|
|
31
|
+
export class ExampleComponent {}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Propriedades (API)
|
|
35
|
+
### `tcloud-ui-tab-menu`
|
|
36
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| registerInUrl | boolean | Atualiza query param `tab` com a aba ativa. | false |
|
|
39
|
+
| loading | boolean | Propaga estado de carregamento para abas. | false |
|
|
40
|
+
| active | string | Id da aba ativa inicial (aceita atualização). | '' |
|
|
41
|
+
| full | boolean | Habilita modo full (layout mais largo). | false |
|
|
42
|
+
|
|
43
|
+
### `tcloud-ui-tab-head`
|
|
44
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
45
|
+
| --- | --- | --- | --- |
|
|
46
|
+
| scroll | boolean | Controla scroll horizontal do cabeçalho. | true |
|
|
47
|
+
| background | boolean | Aplica fundo padrão. | true |
|
|
48
|
+
| backgroundColor | '#FFFFFF'\|'#F1F1F1'\|'white'\|'transparent' | Cor de fundo quando `background=true`. | 'transparent' (ajustado para branco/cinza) |
|
|
49
|
+
| bottom_line | boolean | Exibe linha inferior. | false |
|
|
50
|
+
|
|
51
|
+
### `tcloud-ui-tab-title` / `tcloud-ui-tab-subtitle`
|
|
52
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
53
|
+
| --- | --- | --- | --- |
|
|
54
|
+
| tab | string | Identificador da aba. | '' |
|
|
55
|
+
| disabled | boolean | Desabilita seleção da aba. | false |
|
|
56
|
+
|
|
57
|
+
### `tcloud-ui-tab-content`
|
|
58
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
59
|
+
| --- | --- | --- | --- |
|
|
60
|
+
| tab | string | Identificador da aba que o conteúdo representa. | '' |
|
|
61
|
+
| hideContent | boolean | Esconde conteúdo mantendo estrutura. | false |
|
|
62
|
+
|
|
63
|
+
### Outputs
|
|
64
|
+
`TCloudUiTabMenuComponent`:
|
|
65
|
+
| Nome | Tipo de Evento | Descrição |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| onChange | EventEmitter<string> | Emite o id da aba ativa ao trocar. |
|
|
68
|
+
|
|
69
|
+
## Exemplos de Uso
|
|
70
|
+
### Uso Básico
|
|
71
|
+
```html
|
|
72
|
+
<tcloud-ui-tab-menu [active]="'tab-1'" (onChange)="onTab($event)">
|
|
73
|
+
<tcloud-ui-tab-head [bottom_line]="true" [background]="true">
|
|
74
|
+
<tcloud-ui-tab-title tab="tab-1">Tab 1</tcloud-ui-tab-title>
|
|
75
|
+
<tcloud-ui-tab-title tab="tab-2">Tab 2</tcloud-ui-tab-title>
|
|
76
|
+
</tcloud-ui-tab-head>
|
|
77
|
+
|
|
78
|
+
<tcloud-ui-tab-content tab="tab-1">Conteúdo 1</tcloud-ui-tab-content>
|
|
79
|
+
<tcloud-ui-tab-content tab="tab-2">Conteúdo 2</tcloud-ui-tab-content>
|
|
80
|
+
</tcloud-ui-tab-menu>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Subtítulos, full e desabilitado
|
|
84
|
+
```html
|
|
85
|
+
<tcloud-ui-tab-menu [active]="'a1'" [full]="true">
|
|
86
|
+
<tcloud-ui-tab-head [bottom_line]="false" [background]="false">
|
|
87
|
+
<tcloud-ui-tab-subtitle tab="a1">Alterar Senha</tcloud-ui-tab-subtitle>
|
|
88
|
+
<tcloud-ui-tab-subtitle tab="a2" [disabled]="true">Excluir usuários</tcloud-ui-tab-subtitle>
|
|
89
|
+
<tcloud-ui-tab-subtitle tab="a3">Aplicativos</tcloud-ui-tab-subtitle>
|
|
90
|
+
</tcloud-ui-tab-head>
|
|
91
|
+
|
|
92
|
+
<tcloud-ui-tab-content tab="a1">Content A1</tcloud-ui-tab-content>
|
|
93
|
+
<tcloud-ui-tab-content tab="a2">Content A2</tcloud-ui-tab-content>
|
|
94
|
+
<tcloud-ui-tab-content tab="a3">Content A3</tcloud-ui-tab-content>
|
|
95
|
+
</tcloud-ui-tab-menu>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Com registro na URL
|
|
99
|
+
```html
|
|
100
|
+
<tcloud-ui-tab-menu [active]="'tab-1'" [registerInUrl]="true"></tcloud-ui-tab-menu>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Tipos auxiliares
|
|
104
|
+
```ts
|
|
105
|
+
export interface ITab {
|
|
106
|
+
id: string;
|
|
107
|
+
disabled: boolean;
|
|
108
|
+
}
|
|
109
|
+
```
|