@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,345 @@
|
|
|
1
|
+
# Accordion
|
|
2
|
+
|
|
3
|
+
O componente **Accordion** fornece uma interface colapsável e expansível para organizar conteúdo em seções. Cada seção possui um título e um corpo que pode ser expandido ou contraído através de interação do usuário ou programaticamente.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- **Expansão/Contração suave**: Animação flu ida de altura com duração de 0.35s
|
|
8
|
+
- **Controle programático**: Propriedades `show` e `disabled` para contolar o estado
|
|
9
|
+
- **Estado de carregamento**: Modo loading para indicar operações assíncronas
|
|
10
|
+
- **Reatividade baseada em Serviço**: Utiliza um serviço compartilhado para sincronizar estado entre componentes
|
|
11
|
+
- **Composição flexível**: Estrutura de componentes filhos (title e body)
|
|
12
|
+
- **Eventos emitidos**: Notifica quando o accordion é aberto ou fechado através da propriedade `onAction`
|
|
13
|
+
- **Desabilitável**: Pode ser desabilitado para evitar interação do usuário
|
|
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
|
+
| `show` | `boolean` | Define se o accordion está expandido (true) ou contraído (false) | `false` |
|
|
34
|
+
| `disabled` | `boolean` | Desabilita a interação com o accordion, impedindo expansão/contração | `false` |
|
|
35
|
+
| `loading` | `boolean` | Ativa modo de carregamento, indicando operação assíncrona em andamento | `false` |
|
|
36
|
+
|
|
37
|
+
### Outputs
|
|
38
|
+
|
|
39
|
+
| Nome | Tipo de Evento | Descrição |
|
|
40
|
+
|------|--------|-----------|
|
|
41
|
+
| `onAction` | `'open' \| 'close'` | Emite quando o accordion é expandido (open) ou contraído (close) |
|
|
42
|
+
|
|
43
|
+
## Componentes Filhos
|
|
44
|
+
|
|
45
|
+
### tcloud-ui-accordion-title
|
|
46
|
+
|
|
47
|
+
Representa o título/cabeçalho do accordion. Contém um botão de toggle com ícone de chevron que se rotaciona conforme o estado.
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<tcloud-ui-accordion-title>
|
|
51
|
+
Título do Accordion
|
|
52
|
+
</tcloud-ui-accordion-title>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Características:**
|
|
56
|
+
- Exibe o conteúdo via `<ng-content>`
|
|
57
|
+
- Botão com ícone que indica estado (chevron-right quando fechado, chevron-down quando aberto)
|
|
58
|
+
- Responde a cliques para alternar estado
|
|
59
|
+
- Pode ser desabilitada junto com o accordion
|
|
60
|
+
|
|
61
|
+
### tcloud-ui-accordion-body
|
|
62
|
+
|
|
63
|
+
Representa o corpo/conteúdo do accordion. Aplica animação de expansão/contração.
|
|
64
|
+
|
|
65
|
+
```html
|
|
66
|
+
<tcloud-ui-accordion-body>
|
|
67
|
+
Conteúdo do Accordion
|
|
68
|
+
</tcloud-ui-accordion-body>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Características:**
|
|
72
|
+
- Aplica animação de altura: 0 (fechado) → auto (aberto)
|
|
73
|
+
- Duração da animação: 0.35s com easing ease-in-out
|
|
74
|
+
- Sincroniza automaticamente com o estado do accordion pai
|
|
75
|
+
|
|
76
|
+
## Exemplos de Uso
|
|
77
|
+
|
|
78
|
+
### Uso Básico
|
|
79
|
+
|
|
80
|
+
Accordion simples com título e conteúdo de texto:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
@Component({
|
|
84
|
+
selector: 'app-accordion-basic',
|
|
85
|
+
imports: [TCloudUiModule],
|
|
86
|
+
template: `
|
|
87
|
+
<tcloud-ui-accordion>
|
|
88
|
+
<tcloud-ui-accordion-title>
|
|
89
|
+
Seção 1
|
|
90
|
+
</tcloud-ui-accordion-title>
|
|
91
|
+
|
|
92
|
+
<tcloud-ui-accordion-body>
|
|
93
|
+
Conteúdo da primeira seção
|
|
94
|
+
</tcloud-ui-accordion-body>
|
|
95
|
+
</tcloud-ui-accordion>
|
|
96
|
+
|
|
97
|
+
<tcloud-ui-accordion>
|
|
98
|
+
<tcloud-ui-accordion-title>
|
|
99
|
+
Seção 2
|
|
100
|
+
</tcloud-ui-accordion-title>
|
|
101
|
+
|
|
102
|
+
<tcloud-ui-accordion-body>
|
|
103
|
+
Conteúdo da segunda seção
|
|
104
|
+
</tcloud-ui-accordion-body>
|
|
105
|
+
</tcloud-ui-accordion>
|
|
106
|
+
`
|
|
107
|
+
})
|
|
108
|
+
export class AccordionBasicComponent {}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Uso Avançado com Controle de Estado
|
|
112
|
+
|
|
113
|
+
Accordion com controle programático e sincronização de eventos:
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
@Component({
|
|
117
|
+
selector: 'app-accordion-advanced',
|
|
118
|
+
imports: [CommonModule, TCloudUiModule],
|
|
119
|
+
template: `
|
|
120
|
+
<div class="accordion-controls">
|
|
121
|
+
<button
|
|
122
|
+
(click)="expandAll()"
|
|
123
|
+
class="tc-btn tc-btn-primary"
|
|
124
|
+
>
|
|
125
|
+
Expandir Todos
|
|
126
|
+
</button>
|
|
127
|
+
|
|
128
|
+
<button
|
|
129
|
+
(click)="collapseAll()"
|
|
130
|
+
class="tc-btn"
|
|
131
|
+
>
|
|
132
|
+
Fechar Todos
|
|
133
|
+
</button>
|
|
134
|
+
|
|
135
|
+
<button
|
|
136
|
+
(click)="toggleDisable()"
|
|
137
|
+
[class.active]="isDisabled"
|
|
138
|
+
class="tc-btn"
|
|
139
|
+
>
|
|
140
|
+
{{ isDisabled ? 'Habilitar' : 'Desabilitar' }}
|
|
141
|
+
</button>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div class="accordion-container">
|
|
145
|
+
<tcloud-ui-accordion
|
|
146
|
+
*ngFor="let section of sections; let i = index"
|
|
147
|
+
[show]="expandedStates[i]"
|
|
148
|
+
[disabled]="isDisabled"
|
|
149
|
+
[loading]="loadingStates[i]"
|
|
150
|
+
(onAction)="handleAction($event, i)"
|
|
151
|
+
>
|
|
152
|
+
<tcloud-ui-accordion-title>
|
|
153
|
+
{{ section.title }}
|
|
154
|
+
</tcloud-ui-accordion-title>
|
|
155
|
+
|
|
156
|
+
<tcloud-ui-accordion-body>
|
|
157
|
+
{{ section.content }}
|
|
158
|
+
</tcloud-ui-accordion-body>
|
|
159
|
+
</tcloud-ui-accordion>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<div class="event-log" *ngIf="lastEvent">
|
|
163
|
+
<p>Último evento: {{ lastEvent }}</p>
|
|
164
|
+
</div>
|
|
165
|
+
`
|
|
166
|
+
})
|
|
167
|
+
export class AccordionAdvancedComponent {
|
|
168
|
+
sections = [
|
|
169
|
+
{ title: 'Informações Pessoais', content: 'Nome, e-mail, telefone' },
|
|
170
|
+
{ title: 'Endereço', content: 'Rua, número, cidade, estado' },
|
|
171
|
+
{ title: 'Documentação', content: 'CPF, RG, Comprovante de residência' }
|
|
172
|
+
];
|
|
173
|
+
|
|
174
|
+
expandedStates: boolean[] = [true, false, false];
|
|
175
|
+
loadingStates: boolean[] = [false, false, false];
|
|
176
|
+
isDisabled: boolean = false;
|
|
177
|
+
lastEvent: string = '';
|
|
178
|
+
|
|
179
|
+
expandAll() {
|
|
180
|
+
this.expandedStates = this.expandedStates.map(() => true);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
collapseAll() {
|
|
184
|
+
this.expandedStates = this.expandedStates.map(() => false);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
toggleDisable() {
|
|
188
|
+
this.isDisabled = !this.isDisabled;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
handleAction(action: 'open' | 'close', index: number) {
|
|
192
|
+
this.lastEvent = `Seção ${index + 1} ${action === 'open' ? 'expandida' : 'contraída'}`;
|
|
193
|
+
|
|
194
|
+
// Simular carregamento de dados
|
|
195
|
+
if (action === 'open') {
|
|
196
|
+
this.loadingStates[index] = true;
|
|
197
|
+
setTimeout(() => {
|
|
198
|
+
this.loadingStates[index] = false;
|
|
199
|
+
}, 2000);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Uso com Tabelas e Conteúdo Dinâmico
|
|
206
|
+
|
|
207
|
+
Accordion contendo tabelas e conteúdo complexo:
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
@Component({
|
|
211
|
+
selector: 'app-accordion-with-table',
|
|
212
|
+
imports: [CommonModule, TCloudUiModule],
|
|
213
|
+
template: `
|
|
214
|
+
<tcloud-ui-accordion
|
|
215
|
+
[show]="showProducts"
|
|
216
|
+
(onAction)="onProductsAction($event)"
|
|
217
|
+
>
|
|
218
|
+
<tcloud-ui-accordion-title>
|
|
219
|
+
Produtos ({{ products.length }})
|
|
220
|
+
</tcloud-ui-accordion-title>
|
|
221
|
+
|
|
222
|
+
<tcloud-ui-accordion-body>
|
|
223
|
+
<table class="products-table">
|
|
224
|
+
<thead>
|
|
225
|
+
<tr>
|
|
226
|
+
<th>Nome</th>
|
|
227
|
+
<th>Categoria</th>
|
|
228
|
+
<th>Preço</th>
|
|
229
|
+
<th>Estoque</th>
|
|
230
|
+
</tr>
|
|
231
|
+
</thead>
|
|
232
|
+
<tbody>
|
|
233
|
+
<tr *ngFor="let product of products">
|
|
234
|
+
<td>{{ product.name }}</td>
|
|
235
|
+
<td>{{ product.category }}</td>
|
|
236
|
+
<td>{{ product.price | currency }}</td>
|
|
237
|
+
<td>
|
|
238
|
+
<span [class.low-stock]="product.stock < 10">
|
|
239
|
+
{{ product.stock }}
|
|
240
|
+
</span>
|
|
241
|
+
</td>
|
|
242
|
+
</tr>
|
|
243
|
+
</tbody>
|
|
244
|
+
</table>
|
|
245
|
+
</tcloud-ui-accordion-body>
|
|
246
|
+
</tcloud-ui-accordion>
|
|
247
|
+
|
|
248
|
+
<tcloud-ui-accordion
|
|
249
|
+
[show]="showOrders"
|
|
250
|
+
[loading]="loadingOrders"
|
|
251
|
+
(onAction)="onOrdersAction($event)"
|
|
252
|
+
>
|
|
253
|
+
<tcloud-ui-accordion-title>
|
|
254
|
+
Pedidos Pendentes ({{ orders.length }})
|
|
255
|
+
</tcloud-ui-accordion-title>
|
|
256
|
+
|
|
257
|
+
<tcloud-ui-accordion-body>
|
|
258
|
+
<div *ngIf="loadingOrders" class="loading">
|
|
259
|
+
Carregando pedidos...
|
|
260
|
+
</div>
|
|
261
|
+
|
|
262
|
+
<div *ngIf="!loadingOrders" class="orders-list">
|
|
263
|
+
<div *ngFor="let order of orders" class="order-item">
|
|
264
|
+
<p><strong>Pedido #{{ order.id }}</strong> - {{ order.date | date:'dd/MM/yyyy' }}</p>
|
|
265
|
+
<p>Status: <span [class]="'status-' + order.status">{{ order.status }}</span></p>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</tcloud-ui-accordion-body>
|
|
269
|
+
</tcloud-ui-accordion>
|
|
270
|
+
`,
|
|
271
|
+
styles: [`
|
|
272
|
+
.products-table {
|
|
273
|
+
width: 100%;
|
|
274
|
+
border-collapse: collapse;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.low-stock {
|
|
278
|
+
color: #d32f2f;
|
|
279
|
+
font-weight: bold;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.orders-list {
|
|
283
|
+
padding: 12px 0;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.order-item {
|
|
287
|
+
padding: 8px;
|
|
288
|
+
border-bottom: 1px solid #eee;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.status-pending {
|
|
292
|
+
color: #ff9800;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.status-confirmed {
|
|
296
|
+
color: #4caf50;
|
|
297
|
+
}
|
|
298
|
+
`]
|
|
299
|
+
})
|
|
300
|
+
export class AccordionWithTableComponent {
|
|
301
|
+
showProducts: boolean = true;
|
|
302
|
+
showOrders: boolean = false;
|
|
303
|
+
loadingOrders: boolean = false;
|
|
304
|
+
|
|
305
|
+
products = [
|
|
306
|
+
{ name: 'Notebook', category: 'Eletrônicos', price: 2500, stock: 5 },
|
|
307
|
+
{ name: 'Mouse', category: 'Periféricos', price: 50, stock: 25 },
|
|
308
|
+
{ name: 'Teclado', category: 'Periféricos', price: 150, stock: 8 }
|
|
309
|
+
];
|
|
310
|
+
|
|
311
|
+
orders: any[] = [];
|
|
312
|
+
|
|
313
|
+
onProductsAction(action: 'open' | 'close') {
|
|
314
|
+
console.log('Produtos', action);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
onOrdersAction(action: 'open' | 'close') {
|
|
318
|
+
console.log('Pedidos', action);
|
|
319
|
+
|
|
320
|
+
if (action === 'open') {
|
|
321
|
+
this.loadingOrders = true;
|
|
322
|
+
// Simular carregamento de dados
|
|
323
|
+
setTimeout(() => {
|
|
324
|
+
this.orders = [
|
|
325
|
+
{ id: 'PED-001', date: new Date(), status: 'pending' },
|
|
326
|
+
{ id: 'PED-002', date: new Date(), status: 'confirmed' },
|
|
327
|
+
{ id: 'PED-003', date: new Date(), status: 'pending' }
|
|
328
|
+
];
|
|
329
|
+
this.loadingOrders = false;
|
|
330
|
+
}, 1500);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## Notas de Implementação
|
|
337
|
+
|
|
338
|
+
- O componente utiliza um **serviço compartilhado** (`TCloudUiAccordionService`) fornecido no nível do componente pai
|
|
339
|
+
- Todos os componentes filhos (title e body) injetam o mesmo serviço e se sincronizam através de **Observables (RxJS)**
|
|
340
|
+
- A animação é implementada através de **Angular Animations** (trigger `expandAccordion`)
|
|
341
|
+
- Quando `disabled` é definido como `true`, todas as operações são ignoradas e o accordion é visualmente desabilitado
|
|
342
|
+
- O evento `onAction` emite apenas quando o estado é alterado dentro do componente (não quando alterado via propriedade `show`)
|
|
343
|
+
- A propriedade `loading` não impede interação, apenas ativa um indicador visual
|
|
344
|
+
- Múltiplas instâncias de accordion são **independentes** - cada uma tem seu próprio serviço
|
|
345
|
+
- O titulo (title) também ativa alternância ao clicar, além do botão de toggle
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Actions (ProductAction Pipe)
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
O `ProductActionPipe` é um pipe Angular que traduz códigos de ações de produto para descrições legíveis em português. Suporta dois modos de operação:
|
|
6
|
+
|
|
7
|
+
- **single** (padrão): recebe uma string que pode conter múltiplas ações separadas por `&`. Quando há mais de uma ação, cada uma é traduzida individualmente e o resultado é unido com ` - `.
|
|
8
|
+
- **bulk**: traduz diretamente uma única ação, ignorando a lógica de split por `&`.
|
|
9
|
+
|
|
10
|
+
### Ações Reconhecidas
|
|
11
|
+
|
|
12
|
+
| Código | Tradução |
|
|
13
|
+
|-------------------------------------|---------------------------------|
|
|
14
|
+
| `update-release` / `update_release` | Atualizar versão da release |
|
|
15
|
+
| `update-patch` / `update_patch` | Atualizar versão do pacote |
|
|
16
|
+
| `update-database-dump` / `update-global-dump` / `update_global_dump` | Dump global |
|
|
17
|
+
| `update-patch & update-release` | Atualizar pacote/release |
|
|
18
|
+
|
|
19
|
+
Ações não reconhecidas são retornadas sem alteração.
|
|
20
|
+
|
|
21
|
+
## Instalação
|
|
22
|
+
|
|
23
|
+
Importe o `ProductActionPipe` no componente standalone:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { ProductActionPipe } from 'tcloud-ui';
|
|
27
|
+
|
|
28
|
+
@Component({
|
|
29
|
+
selector: 'app-exemplo',
|
|
30
|
+
standalone: true,
|
|
31
|
+
imports: [ProductActionPipe],
|
|
32
|
+
template: '...'
|
|
33
|
+
})
|
|
34
|
+
export class ExemploComponent {}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Propriedades (API)
|
|
38
|
+
|
|
39
|
+
### Inputs (Parâmetros do Pipe)
|
|
40
|
+
|
|
41
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
42
|
+
|-------|-----------------------|---------------------------------------------------------------------------|---------------|
|
|
43
|
+
| value | `string` | String contendo a(s) ação(ões) a ser(em) traduzida(s). | — |
|
|
44
|
+
| type | `'bulk' \| 'single'` | Modo de operação: `single` faz split por `&`, `bulk` traduz diretamente. | `'single'` |
|
|
45
|
+
|
|
46
|
+
## Exemplos de Uso
|
|
47
|
+
|
|
48
|
+
### Uso Básico — Ação Única
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<!-- Entrada: 'update-release' -->
|
|
52
|
+
<!-- Saída: 'Atualizar versão da release' -->
|
|
53
|
+
<span>{{ 'update-release' | productAction }}</span>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Uso com Múltiplas Ações
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<!-- Entrada: 'update-release&update-patch' -->
|
|
60
|
+
<!-- Saída: 'Atualizar versão da release - Atualizar versão do pacote' -->
|
|
61
|
+
<span>{{ 'update-release&update-patch' | productAction }}</span>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Uso com Tipo Bulk
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<!-- Entrada: 'update-database-dump' com type 'bulk' -->
|
|
68
|
+
<!-- Saída: 'Dump global' -->
|
|
69
|
+
<span>{{ 'update-database-dump' | productAction:'bulk' }}</span>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Uso Avançado — Binding Dinâmico
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
@Component({
|
|
76
|
+
selector: 'app-exemplo',
|
|
77
|
+
standalone: true,
|
|
78
|
+
imports: [ProductActionPipe],
|
|
79
|
+
template: `
|
|
80
|
+
<div *ngFor="let action of actions">
|
|
81
|
+
{{ action | productAction }}
|
|
82
|
+
</div>
|
|
83
|
+
`
|
|
84
|
+
})
|
|
85
|
+
export class ExemploComponent {
|
|
86
|
+
actions = ['update-release', 'update-patch', 'update-database-dump', 'custom-action'];
|
|
87
|
+
}
|
|
88
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Alert Banner
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
O `TCloudUiAlertBannerComponent` é um componente Angular standalone que exibe banners de alerta com ícone, mensagem e link opcional. Suporta diferentes tipos visuais de alerta:
|
|
6
|
+
|
|
7
|
+
- **warning**: fundo e borda em tons de alerta (amarelo/laranja).
|
|
8
|
+
- **danger**: fundo e borda em tons de perigo (vermelho).
|
|
9
|
+
- **info**: fundo e borda em tons informativos (azul).
|
|
10
|
+
- **success**: fundo e borda em tons de sucesso (verde).
|
|
11
|
+
|
|
12
|
+
O banner possui uma borda lateral esquerda colorida com ícone de exclamação e suporta um link clicável dentro da mensagem, emitindo um evento ao ser clicado.
|
|
13
|
+
|
|
14
|
+
## Instalação
|
|
15
|
+
|
|
16
|
+
Importe o `TCloudUiAlertBannerComponent` no componente standalone:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { TCloudUiAlertBannerComponent } from 'tcloud-ui';
|
|
20
|
+
|
|
21
|
+
@Component({
|
|
22
|
+
selector: 'app-exemplo',
|
|
23
|
+
standalone: true,
|
|
24
|
+
imports: [TCloudUiAlertBannerComponent],
|
|
25
|
+
template: '...'
|
|
26
|
+
})
|
|
27
|
+
export class ExemploComponent {}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Propriedades (API)
|
|
31
|
+
|
|
32
|
+
### Inputs
|
|
33
|
+
|
|
34
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
35
|
+
|-----------|---------------------------|----------------------------------------------------|---------------|
|
|
36
|
+
| alertType | `'warning' \| 'danger'` | Define o tipo visual do alerta (cor de fundo/borda).| `'warning'` |
|
|
37
|
+
| message | `string` | Texto da mensagem exibida no banner. | `''` |
|
|
38
|
+
| linkText | `string` | Texto do link exibido após a mensagem. | `''` |
|
|
39
|
+
| linkUrl | `string` | URL do link (disponível para binding). | `''` |
|
|
40
|
+
|
|
41
|
+
### Outputs
|
|
42
|
+
|
|
43
|
+
| Nome | Tipo de Evento | Descrição |
|
|
44
|
+
|-------------|----------------|--------------------------------------------|
|
|
45
|
+
| linkClicked | `void` | Emitido quando o link do banner é clicado. |
|
|
46
|
+
|
|
47
|
+
## Exemplos de Uso
|
|
48
|
+
|
|
49
|
+
### Uso Básico — Alerta Warning com Link
|
|
50
|
+
|
|
51
|
+
```html
|
|
52
|
+
<tcloud-ui-alert-banner
|
|
53
|
+
[alertType]="'warning'"
|
|
54
|
+
[message]="'Atenção: esta ação não poderá ser desfeita.'"
|
|
55
|
+
[linkText]="'Saiba mais'"
|
|
56
|
+
(linkClicked)="onLinkClicked()">
|
|
57
|
+
</tcloud-ui-alert-banner>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Uso Básico — Alerta Danger
|
|
61
|
+
|
|
62
|
+
```html
|
|
63
|
+
<tcloud-ui-alert-banner
|
|
64
|
+
[alertType]="'danger'"
|
|
65
|
+
[message]="'Erro crítico detectado no sistema.'"
|
|
66
|
+
[linkText]="'Ver detalhes'"
|
|
67
|
+
(linkClicked)="onLinkClicked()">
|
|
68
|
+
</tcloud-ui-alert-banner>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Uso Sem Link
|
|
72
|
+
|
|
73
|
+
```html
|
|
74
|
+
<tcloud-ui-alert-banner
|
|
75
|
+
[alertType]="'warning'"
|
|
76
|
+
[message]="'Mensagem de alerta simples sem link.'">
|
|
77
|
+
</tcloud-ui-alert-banner>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Uso Avançado — Tipo Dinâmico
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
@Component({
|
|
84
|
+
selector: 'app-exemplo',
|
|
85
|
+
standalone: true,
|
|
86
|
+
imports: [TCloudUiAlertBannerComponent],
|
|
87
|
+
template: `
|
|
88
|
+
<tcloud-ui-alert-banner
|
|
89
|
+
[alertType]="currentType"
|
|
90
|
+
[message]="currentMessage"
|
|
91
|
+
[linkText]="'Clique aqui'"
|
|
92
|
+
(linkClicked)="handleClick()">
|
|
93
|
+
</tcloud-ui-alert-banner>
|
|
94
|
+
`
|
|
95
|
+
})
|
|
96
|
+
export class ExemploComponent {
|
|
97
|
+
currentType: 'warning' | 'danger' = 'warning';
|
|
98
|
+
currentMessage = 'Mensagem dinâmica de alerta.';
|
|
99
|
+
|
|
100
|
+
handleClick(): void {
|
|
101
|
+
console.log('Link do banner clicado');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|