@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,550 @@
|
|
|
1
|
+
# TCloud UI Linha Logo
|
|
2
|
+
|
|
3
|
+
Componente Angular standalone para exibir logo de linha de produtos TOTVS com dimensionamento automático e URL configurável. Renderiza imagens SVG de logos de linhas de produtos com resposta adaptativa.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- ✅ **Logo responsivo** - Imagens SVG dinâmicas ajustadas ao container
|
|
8
|
+
- ✅ **URL configurável** - Aponta para AWS S3 da Ateleia por padrão
|
|
9
|
+
- ✅ **Standalone** - Componente independente sem dependências
|
|
10
|
+
- ✅ **Otimizado** - Apenas renderiza se `product` estiver preenchido
|
|
11
|
+
- ✅ **Nomeação automática** - Converte nome do produto para nome do arquivo
|
|
12
|
+
- ✅ **Alt text automático** - Acessibilidade garantida
|
|
13
|
+
|
|
14
|
+
## Informações Técnicas
|
|
15
|
+
|
|
16
|
+
| Propriedade | Valor |
|
|
17
|
+
|------------|-------|
|
|
18
|
+
| **Dimensão** | 150px de largura (responsiva) |
|
|
19
|
+
| **Formato** | SVG |
|
|
20
|
+
| **URL Padrão** | `https://ateleia-email.s3-sa-east-1.amazonaws.com/` |
|
|
21
|
+
| **Template** | `logo-linha-{produto}.svg` |
|
|
22
|
+
| **Renderização** | Condicional (*ngIf product !== '') |
|
|
23
|
+
|
|
24
|
+
## Instalação
|
|
25
|
+
|
|
26
|
+
O componente já está disponível no módulo `TCloudUiModule`:
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { TCloudUiModule } from 'projects/tcloud-ui/src/public-api';
|
|
30
|
+
|
|
31
|
+
@NgModule({
|
|
32
|
+
imports: [TCloudUiModule]
|
|
33
|
+
})
|
|
34
|
+
export class MyModule { }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Ou importar direto como component standalone:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import { TCloudUiLinhaLogoComponent } from 'projects/tcloud-ui/src/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component';
|
|
41
|
+
|
|
42
|
+
@Component({
|
|
43
|
+
imports: [TCloudUiLinhaLogoComponent]
|
|
44
|
+
})
|
|
45
|
+
export class MyComponent { }
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Uso Básico
|
|
49
|
+
|
|
50
|
+
### Exemplo Simples - Logo do Protheus
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
@Component({
|
|
54
|
+
selector: 'app-product-logo',
|
|
55
|
+
standalone: true,
|
|
56
|
+
imports: [TCloudUiLinhaLogoComponent],
|
|
57
|
+
template: `<tcloud-ui-linha-logo [product]="'protheus'"></tcloud-ui-linha-logo>`
|
|
58
|
+
})
|
|
59
|
+
export class ProductLogoComponent { }
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Resultado HTML:**
|
|
63
|
+
```html
|
|
64
|
+
<div class="tcloud-ui-linha-logo logo-product">
|
|
65
|
+
<img class="img-logo"
|
|
66
|
+
src="https://ateleia-email.s3-sa-east-1.amazonaws.com/logo-linha-protheus.svg"
|
|
67
|
+
alt="PROTHEUS">
|
|
68
|
+
</div>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Exemplo com Propriedade Binária
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
@Component({
|
|
75
|
+
selector: 'app-my-component',
|
|
76
|
+
standalone: true,
|
|
77
|
+
imports: [CommonModule, TCloudUiLinhaLogoComponent],
|
|
78
|
+
template: `
|
|
79
|
+
<tcloud-ui-linha-logo [product]="selectedProduct"></tcloud-ui-linha-logo>
|
|
80
|
+
<button (click)="changeProduct('rm')">Mudar para RM</button>
|
|
81
|
+
`
|
|
82
|
+
})
|
|
83
|
+
export class MyComponent {
|
|
84
|
+
selectedProduct: string = 'protheus';
|
|
85
|
+
|
|
86
|
+
changeProduct(product: string) {
|
|
87
|
+
this.selectedProduct = product;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Exemplo com URL Customizada
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
@Component({
|
|
96
|
+
standalone: true,
|
|
97
|
+
imports: [TCloudUiLinhaLogoComponent],
|
|
98
|
+
template: `
|
|
99
|
+
<tcloud-ui-linha-logo
|
|
100
|
+
[product]="'fluig'"
|
|
101
|
+
[url]="'https://seu-servidor.com/logos/'">
|
|
102
|
+
</tcloud-ui-linha-logo>
|
|
103
|
+
`
|
|
104
|
+
})
|
|
105
|
+
export class CustomUrlComponent {
|
|
106
|
+
// Renderizará: https://seu-servidor.com/logos/logo-linha-fluig.svg
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Exemplo Avançado - Grid de Produtos
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
@Component({
|
|
114
|
+
selector: 'app-product-grid',
|
|
115
|
+
standalone: true,
|
|
116
|
+
imports: [CommonModule, TCloudUiLinhaLogoComponent],
|
|
117
|
+
template: `
|
|
118
|
+
<div class="product-grid">
|
|
119
|
+
<div class="product-item" *ngFor="let product of products">
|
|
120
|
+
<tcloud-ui-linha-logo
|
|
121
|
+
[product]="product"
|
|
122
|
+
(click)="selectProduct(product)">
|
|
123
|
+
</tcloud-ui-linha-logo>
|
|
124
|
+
<p class="product-label">{{ product | titlecase }}</p>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
`,
|
|
128
|
+
styles: [`
|
|
129
|
+
.product-grid {
|
|
130
|
+
display: grid;
|
|
131
|
+
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
|
132
|
+
gap: 20px;
|
|
133
|
+
padding: 20px;
|
|
134
|
+
}
|
|
135
|
+
.product-item {
|
|
136
|
+
text-align: center;
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
transition: transform 0.2s;
|
|
139
|
+
}
|
|
140
|
+
.product-item:hover {
|
|
141
|
+
transform: scale(1.05);
|
|
142
|
+
}
|
|
143
|
+
.product-label {
|
|
144
|
+
margin-top: 10px;
|
|
145
|
+
font-weight: 600;
|
|
146
|
+
color: #333;
|
|
147
|
+
}
|
|
148
|
+
`]
|
|
149
|
+
})
|
|
150
|
+
export class ProductGridComponent {
|
|
151
|
+
products = ['protheus', 'rm', 'fluig', 'datasul', 'consinco'];
|
|
152
|
+
|
|
153
|
+
selectProduct(product: string) {
|
|
154
|
+
console.log('Produto selecionado:', product);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## API
|
|
160
|
+
|
|
161
|
+
### Componente: `tcloud-ui-linha-logo`
|
|
162
|
+
|
|
163
|
+
#### Inputs
|
|
164
|
+
|
|
165
|
+
| Propriedade | Tipo | Padrão | Obrigatório | Descrição |
|
|
166
|
+
|-----------|------|--------|-----------|-----------|
|
|
167
|
+
| `product` | `string` | `''` | ❌ | Nome do produto (ex: 'protheus', 'rm') |
|
|
168
|
+
| `url` | `string` | AWS S3 Ateleia | ❌ | URL base para os logos SVG |
|
|
169
|
+
|
|
170
|
+
#### Propriedades Internas (somente leitura)
|
|
171
|
+
|
|
172
|
+
| Propriedade | Tipo | Descrição |
|
|
173
|
+
|-----------|------|-----------|
|
|
174
|
+
| `logo_name` | `string` | Nome do arquivo gerado (ex: 'logo-linha-protheus') |
|
|
175
|
+
| `product_name` | `string` | Nome do produto formatado (utilizado internamente) |
|
|
176
|
+
| `alt_product_name` | `string` | Nome em UPPERCASE para atributo alt da imagem |
|
|
177
|
+
| `font_size` | `string` | Tamanho da fonte (legado, não utilizado na renderização atual) |
|
|
178
|
+
|
|
179
|
+
## Lógica de Processamento
|
|
180
|
+
|
|
181
|
+
### 1. Transformação de Nome do Produto
|
|
182
|
+
|
|
183
|
+
O componente converte o nome do produto para o nome do arquivo:
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
// Entrada e transformação
|
|
187
|
+
'protheus' → 'logo-linha-protheus'
|
|
188
|
+
'rm' → 'logo-linha-rm'
|
|
189
|
+
'fluig' → 'logo-linha-fluig'
|
|
190
|
+
'datasul_grande' → 'logo-linha-datasul-grande' // underscores → hífens
|
|
191
|
+
'RM' → 'logo-linha-rm' // maiúsculas → minúsculas
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Método:** `getLogoName()`
|
|
195
|
+
- Substitui `_` por `-`
|
|
196
|
+
- Converte para minúsculas
|
|
197
|
+
- Prepend `logo-linha-`
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
export class MyComponent {
|
|
201
|
+
product: string = 'rm';
|
|
202
|
+
customUrl: string = 'https://seu-dominio.com/logos/';
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<tcloud-ui-linha-logo
|
|
208
|
+
[product]="product"
|
|
209
|
+
[url]="customUrl">
|
|
210
|
+
</tcloud-ui-linha-logo>
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Exemplo Avançado - Múltiplos Produtos
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
export class MyComponent {
|
|
217
|
+
produtos: string[] = [
|
|
218
|
+
'protheus',
|
|
219
|
+
'rm',
|
|
220
|
+
'fluig',
|
|
221
|
+
'datasul',
|
|
222
|
+
'consinco',
|
|
223
|
+
'winthor',
|
|
224
|
+
'taf',
|
|
225
|
+
'tss',
|
|
226
|
+
'license'
|
|
227
|
+
];
|
|
228
|
+
|
|
229
|
+
customUrl: string = 'https://ateleia-email.s3-sa-east-1.amazonaws.com/';
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```html
|
|
234
|
+
<div class="logo-grid">
|
|
235
|
+
<tcloud-ui-linha-logo
|
|
236
|
+
*ngFor="let produto of produtos"
|
|
237
|
+
[product]="produto"
|
|
238
|
+
[url]="customUrl">
|
|
239
|
+
</tcloud-ui-linha-logo>
|
|
240
|
+
</div>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## API
|
|
244
|
+
|
|
245
|
+
### Componente: `tcloud-ui-linha-logo`
|
|
246
|
+
|
|
247
|
+
#### Inputs
|
|
248
|
+
|
|
249
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
250
|
+
|-----------|------|--------|-----------|
|
|
251
|
+
| `product` | `string` | `''` | Nome do produto (obrigatório) |
|
|
252
|
+
| `url` | `string` | AWS S3 padrão | URL base para as imagens SVG |
|
|
253
|
+
|
|
254
|
+
#### Saídas
|
|
255
|
+
|
|
256
|
+
Nenhuma saída de evento.
|
|
257
|
+
|
|
258
|
+
#### Propriedades Internas
|
|
259
|
+
|
|
260
|
+
| Propriedade | Tipo | Descrição |
|
|
261
|
+
|-----------|------|-----------|
|
|
262
|
+
| `logo_name` | `string` | Nome do arquivo do logo gerado |
|
|
263
|
+
| `product_name` | `string` | Nome do produto formatado |
|
|
264
|
+
| `alt_product_name` | `string` | Nome do produto em UPPERCASE para alt text |
|
|
265
|
+
| `font_size` | `string` | Tamanho da fonte calculado dinamicamente |
|
|
266
|
+
|
|
267
|
+
## Comportamento Detalhado
|
|
268
|
+
|
|
269
|
+
### Nomeação de Logo
|
|
270
|
+
|
|
271
|
+
O componente converte o `product` para o nome do arquivo:
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
// Entrada: 'protheus'
|
|
275
|
+
// Nome gerado: 'logo-linha-protheus'
|
|
276
|
+
// URL final: '{url}logo-linha-protheus.svg'
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Conversões realizadas:
|
|
280
|
+
- Underscores (`_`) são convertidos para hífens (`-`)
|
|
281
|
+
- Tudo é convertido para minúsculas
|
|
282
|
+
- Prefixo `logo-linha-` é adicionado
|
|
283
|
+
|
|
284
|
+
### Dimensionamento Automático
|
|
285
|
+
|
|
286
|
+
O `font_size` é calculado baseado no comprimento do nome do produto:
|
|
287
|
+
|
|
288
|
+
| Comprimento | Tamanho | Cálculo |
|
|
289
|
+
|------------|--------|---------|
|
|
290
|
+
| ≤ 8 caracteres | 28px | Tamanho padrão |
|
|
291
|
+
| 9-12 caracteres | 28px | Tamanho padrão |
|
|
292
|
+
| 13-15 caracteres | ~19-24px | 28 - (28 * (5 + len*2) / 100) |
|
|
293
|
+
| > 15 caracteres | ~16-22px | 28 - (28 * (10 + len*2) / 100) |
|
|
294
|
+
|
|
295
|
+
Exemplo:
|
|
296
|
+
```
|
|
297
|
+
- 'protheus' (8 chars) → 28px
|
|
298
|
+
- 'fluig' (5 chars) → 28px
|
|
299
|
+
- 'consinco' (8 chars) → 28px
|
|
300
|
+
- 'winthor_super_mega_produto' (26 chars) → reduzido dinamicamente
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Estrutura HTML Renderizada
|
|
304
|
+
|
|
305
|
+
```html
|
|
306
|
+
<div class="tcloud-ui-linha-logo logo-product">
|
|
307
|
+
<img class="img-logo"
|
|
308
|
+
data-name-image="logo-linha-protheus"
|
|
309
|
+
src="https://ateleia-email.s3-sa-east-1.amazonaws.com/logo-linha-protheus.svg"
|
|
310
|
+
alt="PROTHEUS">
|
|
311
|
+
</div>
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Exemplos Práticos
|
|
315
|
+
|
|
316
|
+
### 1. Seletor de Produtos com Logo
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
@Component({
|
|
320
|
+
selector: 'app-product-selector',
|
|
321
|
+
standalone: true,
|
|
322
|
+
imports: [CommonModule, TCloudUiLinhaLogoComponent],
|
|
323
|
+
template: `
|
|
324
|
+
<div class="product-selector">
|
|
325
|
+
<h2>Escolha um Produto</h2>
|
|
326
|
+
<div class="products-grid">
|
|
327
|
+
<div class="product-card" *ngFor="let prod of availableProducts">
|
|
328
|
+
<tcloud-ui-linha-logo [product]="prod"></tcloud-ui-linha-logo>
|
|
329
|
+
<p class="product-name">{{ prod | titlecase }}</p>
|
|
330
|
+
<button (click)="selectProduct(prod)">Selecionar</button>
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
`
|
|
335
|
+
})
|
|
336
|
+
export class ProductSelectorComponent {
|
|
337
|
+
availableProducts = ['protheus', 'rm', 'fluig', 'datasul'];
|
|
338
|
+
|
|
339
|
+
selectProduct(product: string) {
|
|
340
|
+
console.log('Produto selecionado:', product);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### 2. Logo em Header com Branding
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
@Component({
|
|
349
|
+
selector: 'app-header',
|
|
350
|
+
standalone: true,
|
|
351
|
+
imports: [CommonModule, TCloudUiLinhaLogoComponent],
|
|
352
|
+
template: `
|
|
353
|
+
<header class="app-header">
|
|
354
|
+
<div class="logo-section">
|
|
355
|
+
<img src="/assets/totvs-logo.svg" alt="TOTVS" class="main-logo">
|
|
356
|
+
<div class="product-line">
|
|
357
|
+
<span class="line-text">Linha</span>
|
|
358
|
+
<tcloud-ui-linha-logo [product]="currentProduct"></tcloud-ui-linha-logo>
|
|
359
|
+
</div>
|
|
360
|
+
</div>
|
|
361
|
+
<nav class="navigation">
|
|
362
|
+
<!-- Navegação aqui -->
|
|
363
|
+
</nav>
|
|
364
|
+
</header>
|
|
365
|
+
`,
|
|
366
|
+
styles: [`
|
|
367
|
+
.app-header {
|
|
368
|
+
display: flex;
|
|
369
|
+
justify-content: space-between;
|
|
370
|
+
align-items: center;
|
|
371
|
+
padding: 16px;
|
|
372
|
+
border-bottom: 1px solid #ddd;
|
|
373
|
+
}
|
|
374
|
+
.logo-section {
|
|
375
|
+
display: flex;
|
|
376
|
+
align-items: center;
|
|
377
|
+
gap: 24px;
|
|
378
|
+
}
|
|
379
|
+
.main-logo {
|
|
380
|
+
height: 40px;
|
|
381
|
+
}
|
|
382
|
+
.product-line {
|
|
383
|
+
display: flex;
|
|
384
|
+
align-items: center;
|
|
385
|
+
gap: 12px;
|
|
386
|
+
}
|
|
387
|
+
`]
|
|
388
|
+
})
|
|
389
|
+
export class HeaderComponent {
|
|
390
|
+
currentProduct = 'protheus';
|
|
391
|
+
}
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### 3. Tooltip com Logo
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
@Component({
|
|
398
|
+
selector: 'app-logo-tooltip',
|
|
399
|
+
standalone: true,
|
|
400
|
+
imports: [CommonModule, TCloudUiLinhaLogoComponent, NgFor],
|
|
401
|
+
template: `
|
|
402
|
+
<div class="logo-display">
|
|
403
|
+
<tcloud-ui-linha-logo
|
|
404
|
+
[product]="selectedProduct"
|
|
405
|
+
(mouseenter)="showInfo = true"
|
|
406
|
+
(mouseleave)="showInfo = false">
|
|
407
|
+
</tcloud-ui-linha-logo>
|
|
408
|
+
|
|
409
|
+
<div class="tooltip" *ngIf="showInfo">
|
|
410
|
+
<p><strong>Produto:</strong> {{ selectedProduct | uppercase }}</p>
|
|
411
|
+
<p><strong>URL:</strong> {{ baseUrl }}logo-linha-{{ selectedProduct }}.svg</p>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
`,
|
|
415
|
+
styles: [`
|
|
416
|
+
.logo-display {
|
|
417
|
+
position: relative;
|
|
418
|
+
display: inline-block;
|
|
419
|
+
}
|
|
420
|
+
.tooltip {
|
|
421
|
+
position: absolute;
|
|
422
|
+
bottom: 100%;
|
|
423
|
+
left: 0;
|
|
424
|
+
background: #333;
|
|
425
|
+
color: white;
|
|
426
|
+
padding: 12px;
|
|
427
|
+
border-radius: 4px;
|
|
428
|
+
white-space: nowrap;
|
|
429
|
+
font-size: 12px;
|
|
430
|
+
}
|
|
431
|
+
`]
|
|
432
|
+
})
|
|
433
|
+
export class LogoTooltipComponent {
|
|
434
|
+
selectedProduct = 'fluig';
|
|
435
|
+
baseUrl = 'https://ateleia-email.s3-sa-east-1.amazonaws.com/';
|
|
436
|
+
showInfo = false;
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
## Produtos Suportados
|
|
441
|
+
|
|
442
|
+
Os seguintes produtos têm logos disponíveis na AWS S3:
|
|
443
|
+
|
|
444
|
+
- ✅ `protheus` - Protheus
|
|
445
|
+
- ✅ `rm` - RM
|
|
446
|
+
- ✅ `fluig` - Fluig
|
|
447
|
+
- ✅ `datasul` - Datasul
|
|
448
|
+
- ✅ `consinco` - Consinco
|
|
449
|
+
- ✅ `winthor` - Winthor
|
|
450
|
+
- ✅ `taf` - TAF (Tax)
|
|
451
|
+
- ✅ `tss` - TSS
|
|
452
|
+
- ✅ `license` - License Manager
|
|
453
|
+
|
|
454
|
+
## Customização de URL
|
|
455
|
+
|
|
456
|
+
Se você quiser hospedar os logos em seu próprio servidor:
|
|
457
|
+
|
|
458
|
+
```typescript
|
|
459
|
+
const customBaseUrl = 'https://seu-servidor.com/logos/';
|
|
460
|
+
|
|
461
|
+
@Component({
|
|
462
|
+
template: `
|
|
463
|
+
<tcloud-ui-linha-logo
|
|
464
|
+
product="protheus"
|
|
465
|
+
[url]="customBaseUrl">
|
|
466
|
+
</tcloud-ui-linha-logo>
|
|
467
|
+
`
|
|
468
|
+
})
|
|
469
|
+
export class MyComponent {
|
|
470
|
+
customBaseUrl = customBaseUrl;
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
**Importante:** Os arquivos SVG devem estar nomeados como:
|
|
475
|
+
- `logo-linha-{produto}.svg`
|
|
476
|
+
|
|
477
|
+
Exemplo: `logo-linha-protheus.svg`, `logo-linha-rm.svg`, etc.
|
|
478
|
+
|
|
479
|
+
## Tratamento de Erros
|
|
480
|
+
|
|
481
|
+
### Produto Vazio
|
|
482
|
+
|
|
483
|
+
Se `product` estiver vazio, o componente não renderiza nada:
|
|
484
|
+
|
|
485
|
+
```html
|
|
486
|
+
<!-- Isso não renderiza nada -->
|
|
487
|
+
<tcloud-ui-linha-logo product=""></tcloud-ui-linha-logo>
|
|
488
|
+
|
|
489
|
+
<!-- Valide antes de usar -->
|
|
490
|
+
<tcloud-ui-linha-logo *ngIf="product" [product]="product"></tcloud-ui-linha-logo>
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
### Arquivo Não Encontrado
|
|
494
|
+
|
|
495
|
+
Se o arquivo SVG não existir, o navegador exibirá um ícone de erro:
|
|
496
|
+
|
|
497
|
+
```typescript
|
|
498
|
+
// Certifique-se de que os arquivos existem em:
|
|
499
|
+
// {url}logo-linha-{produto}.svg
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
## Boas Práticas
|
|
503
|
+
|
|
504
|
+
1. **Sempre trate produtos vazios** com `*ngIf`
|
|
505
|
+
2. **Use URLs HTTPS** para evitar avisos de segurança
|
|
506
|
+
3. **Mantenha nomes de produtos consistentes** (minúsculas, sem espaços)
|
|
507
|
+
4. **Armazene em cache** se usar URL customizada
|
|
508
|
+
5. **Forneça alt text** válido (feito automaticamente)
|
|
509
|
+
|
|
510
|
+
## Styling
|
|
511
|
+
|
|
512
|
+
Para customizar a aparência:
|
|
513
|
+
|
|
514
|
+
```scss
|
|
515
|
+
// Estilo global
|
|
516
|
+
.tcloud-ui-linha-logo {
|
|
517
|
+
&.logo-product {
|
|
518
|
+
.img-logo {
|
|
519
|
+
max-width: 100%;
|
|
520
|
+
height: auto;
|
|
521
|
+
display: block;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Ou no escopo do componente
|
|
527
|
+
:host {
|
|
528
|
+
--logo-max-width: 200px;
|
|
529
|
+
--logo-height: auto;
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
## Troubleshooting
|
|
534
|
+
|
|
535
|
+
| Problema | Solução |
|
|
536
|
+
|----------|---------|
|
|
537
|
+
| Logo não aparece | Verifique se `product` não está vazio |
|
|
538
|
+
| URL 404 | Confirme que o arquivo SVG existe no caminho correto |
|
|
539
|
+
| Logo muito pequeno/grande | Ajuste via CSS ou verifique o comprimento do nome |
|
|
540
|
+
| Imagem quebrada | Verifique a URL base e a conexão com a internet |
|
|
541
|
+
|
|
542
|
+
## Versionamento
|
|
543
|
+
|
|
544
|
+
| Versão | Data | Mudanças |
|
|
545
|
+
|--------|------|----------|
|
|
546
|
+
| 1.0.0 | 2026-02-12 | Versão inicial com suporte a logos de linha |
|
|
547
|
+
|
|
548
|
+
## Licença
|
|
549
|
+
|
|
550
|
+
Parte do TCloud UI Component Library
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Loading
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
- Indicador de carregamento standalone com suportes: ícone isolado, inline e overlay (parcial ou full-screen).
|
|
5
|
+
- Modo `mode` auxilia conveniência: `icon` ativa `onlyIcon`; `inline` ativa `onlyInline`.
|
|
6
|
+
- Suporta múltiplos tipos de animação através da propriedade `gif`: `'circle'` (spinner) ou `'totvs'` (logo TOTVS animado).
|
|
7
|
+
- Permite sobrepor container relativo ou tela inteira (`full=true`).
|
|
8
|
+
- Componentes internos: `tcloud-ui-circle` (default) e `tcloud-ui-totvs` disponíveis.
|
|
9
|
+
- Independente de z-index ou posicionamento, o overlay se ajusta ao contexto do container pai.
|
|
10
|
+
|
|
11
|
+
## Instalação
|
|
12
|
+
```ts
|
|
13
|
+
import { TCloudUiLoadingComponent } from 'projects/tcloud-ui/src/public-api';
|
|
14
|
+
|
|
15
|
+
@Component({
|
|
16
|
+
selector: 'app-example',
|
|
17
|
+
standalone: true,
|
|
18
|
+
imports: [TCloudUiLoadingComponent],
|
|
19
|
+
template: `<tcloud-ui-loading [loading]="true"></tcloud-ui-loading>`
|
|
20
|
+
})
|
|
21
|
+
export class ExampleComponent {}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Propriedades (API)
|
|
25
|
+
### Inputs
|
|
26
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
27
|
+
| --- | --- | --- | --- |
|
|
28
|
+
| gif | 'totvs' \| 'circle' | Define o tipo de animação exibida. `'circle'` = spinner circular; `'totvs'` = logo TOTVS animado. | 'circle' |
|
|
29
|
+
| mode | string | Conveniência: `'icon'` força `onlyIcon=true`; `'inline'` força `onlyInline=true`. | '' |
|
|
30
|
+
| onlyInline | boolean | Mostra loader inline (conteúdo compacto). | false |
|
|
31
|
+
| onlyIcon | boolean | Mostra apenas o ícone (mini). | false |
|
|
32
|
+
| full | boolean | Mostra overlay em tela cheia. | false |
|
|
33
|
+
| loading | boolean | Controla exibição do loader. | false |
|
|
34
|
+
|
|
35
|
+
### Outputs
|
|
36
|
+
| Nome | Tipo de Evento | Descrição |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| (não possui) | - | Componente não emite eventos. |
|
|
39
|
+
|
|
40
|
+
## Exemplos de Uso
|
|
41
|
+
### Uso Básico (overlay padrão)
|
|
42
|
+
```html
|
|
43
|
+
<tcloud-ui-loading [loading]="loading"></tcloud-ui-loading>
|
|
44
|
+
<button type="button" (click)="loading = true">Start</button>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Com animação TOTVS
|
|
48
|
+
```html
|
|
49
|
+
<tcloud-ui-loading [loading]="true" [gif]="'totvs'"></tcloud-ui-loading>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Ícone isolado
|
|
53
|
+
```html
|
|
54
|
+
<tcloud-ui-loading [loading]="true" [onlyIcon]="true"></tcloud-ui-loading>
|
|
55
|
+
<!-- ou -->
|
|
56
|
+
<tcloud-ui-loading [loading]="true" mode="icon"></tcloud-ui-loading>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Ícone isolado com TOTVS
|
|
60
|
+
```html
|
|
61
|
+
<tcloud-ui-loading [loading]="true" [onlyIcon]="true" [gif]="'totvs'"></tcloud-ui-loading>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Inline
|
|
65
|
+
```html
|
|
66
|
+
<tcloud-ui-loading [loading]="true" [onlyInline]="true"></tcloud-ui-loading>
|
|
67
|
+
<!-- ou -->
|
|
68
|
+
<tcloud-ui-loading [loading]="true" mode="inline"></tcloud-ui-loading>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Inline com TOTVS
|
|
72
|
+
```html
|
|
73
|
+
<tcloud-ui-loading [loading]="true" [onlyInline]="true" [gif]="'totvs'"></tcloud-ui-loading>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Full-screen
|
|
77
|
+
```html
|
|
78
|
+
<tcloud-ui-loading [loading]="loadingFull" [full]="true"></tcloud-ui-loading>
|
|
79
|
+
<button type="button" (click)="loadingFull = true">Start full</button>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Dentro de container relativo
|
|
83
|
+
```html
|
|
84
|
+
<div style="position: relative; width: 200px; height: 120px;">
|
|
85
|
+
<tcloud-ui-loading [loading]="loadingRelative"></tcloud-ui-loading>
|
|
86
|
+
</div>
|
|
87
|
+
<button type="button" (click)="loadingRelative = true">Start</button>
|
|
88
|
+
```
|