@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,189 @@
|
|
|
1
|
+
# Layout — `.tc-btn`
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
- Classe base para botões e links estilizados, aplicável às tags `<button>` e `<a>`.
|
|
6
|
+
- Cinco variantes **filled** e três variantes **outline**, cobrindo todos os contextos semânticos: ação principal, destrutiva, alerta, sucesso e neutra.
|
|
7
|
+
- Três tamanhos: `tc-btn-sm`, padrão e `tc-btn-lg`.
|
|
8
|
+
- Classe complementar `.tc-link` para links inline com variantes de cor.
|
|
9
|
+
- Compatível com dark mode e variantes de tema — cores baseadas nos tokens `--c-*`.
|
|
10
|
+
- Estado `disabled` com `opacity: 0.45` e `cursor: not-allowed`, aplicável a qualquer variante.
|
|
11
|
+
- Não há componente Angular envolvido — as classes são aplicadas diretamente no HTML.
|
|
12
|
+
|
|
13
|
+
## Instalação
|
|
14
|
+
|
|
15
|
+
As classes são fornecidas pelo stylesheet global do projeto. Nenhuma importação de módulo Angular é necessária.
|
|
16
|
+
Certifique-se de que o stylesheet principal do `tcloud-ui` está incluído na aplicação:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
// angular.json — styles
|
|
20
|
+
"styles": [
|
|
21
|
+
"projects/tcloud-ui/assets/scss/tcloud-ui.scss"
|
|
22
|
+
]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## API — Classes
|
|
28
|
+
|
|
29
|
+
### Propriedades base — `.tc-btn`
|
|
30
|
+
|
|
31
|
+
| Propriedade CSS | Valor | Descrição |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `display` | `inline-flex` | Permite alinhar ícones ao lado do texto |
|
|
34
|
+
| `padding` | `8px 18px` | Espaçamento interno padrão |
|
|
35
|
+
| `border-radius` | `8px` | Bordas arredondadas |
|
|
36
|
+
| `border` | `2px solid transparent` | Reserva espaço para variantes outline sem deslocar layout |
|
|
37
|
+
| `font-weight` | `600` | Texto semi-negrito |
|
|
38
|
+
| `font-size` | `0.9rem` | Tamanho padrão |
|
|
39
|
+
| `transition` | `background, color, border-color, transform, opacity — 0.15s` | Animação suave de estados |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### Estados
|
|
44
|
+
|
|
45
|
+
| Estado | Seletor CSS | Comportamento |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| Default | `.tc-btn` | Estado inicial do botão |
|
|
48
|
+
| Hover | `.tc-btn:hover` | Escurece o background em ~10% |
|
|
49
|
+
| Active | `.tc-btn:active` | Escurece mais e aplica `scale(0.98)` |
|
|
50
|
+
| Focus | `.tc-btn:focus-visible` | Outline de 3px usando `--c-primary-400` |
|
|
51
|
+
| Disabled | `.tc-btn:disabled` | `opacity: 0.45` + `cursor: not-allowed` |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Variantes Filled
|
|
56
|
+
|
|
57
|
+
| Classe completa | Uso recomendado |
|
|
58
|
+
|---|---|
|
|
59
|
+
| `tc-btn tc-btn-primary` | Ação principal da tela |
|
|
60
|
+
| `tc-btn tc-btn-danger` | Ação destrutiva ou irreversível |
|
|
61
|
+
| `tc-btn tc-btn-alert` | Ação que requer atenção |
|
|
62
|
+
| `tc-btn tc-btn-success` | Confirmação ou conclusão |
|
|
63
|
+
| `tc-btn tc-btn-neutral` | Ação secundária sem destaque |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### Variantes Outline
|
|
68
|
+
|
|
69
|
+
| Classe completa | Uso recomendado |
|
|
70
|
+
|---|---|
|
|
71
|
+
| `tc-btn tc-btn-outline-primary` | Alternativa à primary com menos peso visual |
|
|
72
|
+
| `tc-btn tc-btn-outline-danger` | Destrutiva de baixo impacto visual |
|
|
73
|
+
| `tc-btn tc-btn-outline-neutral` | Ação terciária discreta |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### Tamanhos
|
|
78
|
+
|
|
79
|
+
| Classe modificadora | Descrição |
|
|
80
|
+
|---|---|
|
|
81
|
+
| `tc-btn-sm` | Tamanho pequeno |
|
|
82
|
+
| *(sem modificador)* | Tamanho padrão |
|
|
83
|
+
| `tc-btn-lg` | Tamanho grande |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### `.tc-link` — Links inline
|
|
88
|
+
|
|
89
|
+
Classe para links inline. Utiliza `border-bottom` em vez de `text-decoration` para controle preciso de espessura e cor.
|
|
90
|
+
|
|
91
|
+
| Classe completa | Uso recomendado |
|
|
92
|
+
|---|---|
|
|
93
|
+
| `tc-link` | Link padrão — cor primária |
|
|
94
|
+
| `tc-link tc-link-danger` | Link de ação destrutiva |
|
|
95
|
+
| `tc-link tc-link-muted` | Link discreto — ação secundária |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Exemplos de Uso
|
|
100
|
+
|
|
101
|
+
### Uso Básico
|
|
102
|
+
|
|
103
|
+
```html
|
|
104
|
+
<!-- Botões filled -->
|
|
105
|
+
<button class="tc-btn tc-btn-primary">Salvar</button>
|
|
106
|
+
<button class="tc-btn tc-btn-danger">Excluir</button>
|
|
107
|
+
<button class="tc-btn tc-btn-success">Confirmar</button>
|
|
108
|
+
<button class="tc-btn tc-btn-neutral">Cancelar</button>
|
|
109
|
+
|
|
110
|
+
<!-- Botões outline -->
|
|
111
|
+
<button class="tc-btn tc-btn-outline-primary">Cancelar</button>
|
|
112
|
+
<button class="tc-btn tc-btn-outline-danger">Remover</button>
|
|
113
|
+
|
|
114
|
+
<!-- Desabilitado -->
|
|
115
|
+
<button class="tc-btn tc-btn-primary" disabled>Processando…</button>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Uso Avançado
|
|
121
|
+
|
|
122
|
+
#### Tamanhos
|
|
123
|
+
|
|
124
|
+
```html
|
|
125
|
+
<button class="tc-btn tc-btn-primary tc-btn-sm">Pequeno</button>
|
|
126
|
+
<button class="tc-btn tc-btn-primary">Padrão</button>
|
|
127
|
+
<button class="tc-btn tc-btn-primary tc-btn-lg">Grande</button>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### Link estilizado como botão
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<a href="/nova-rota" class="tc-btn tc-btn-primary">Navegar</a>
|
|
134
|
+
<a href="/voltar" class="tc-btn tc-btn-outline-neutral">Voltar</a>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### Links inline
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<p class="f-14 font-regular text-neutral-700">
|
|
141
|
+
Não possui cadastro? <a href="#" class="tc-link">Crie sua conta</a>
|
|
142
|
+
</p>
|
|
143
|
+
|
|
144
|
+
<a href="#" class="tc-link tc-link-danger">Remover item</a>
|
|
145
|
+
<a href="#" class="tc-link tc-link-muted">Ver detalhes</a>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Par de ações em formulário (padrão primária + outline)
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<div style="display: flex; gap: 8px;">
|
|
152
|
+
<button class="tc-btn tc-btn-primary" type="submit">Salvar</button>
|
|
153
|
+
<button class="tc-btn tc-btn-outline-neutral" type="button" (click)="cancel()">Cancelar</button>
|
|
154
|
+
</div>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### Ação destrutiva com confirmação
|
|
158
|
+
|
|
159
|
+
```html
|
|
160
|
+
<div style="display: flex; gap: 8px;">
|
|
161
|
+
<button class="tc-btn tc-btn-danger" (click)="delete()">Excluir registro</button>
|
|
162
|
+
<button class="tc-btn tc-btn-outline-neutral" (click)="goBack()">Voltar</button>
|
|
163
|
+
</div>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### Estado de carregamento via classe e `disabled`
|
|
167
|
+
|
|
168
|
+
```html
|
|
169
|
+
<button
|
|
170
|
+
class="tc-btn tc-btn-primary"
|
|
171
|
+
[disabled]="isLoading"
|
|
172
|
+
(click)="save()"
|
|
173
|
+
>
|
|
174
|
+
{{ isLoading ? 'Salvando…' : 'Salvar' }}
|
|
175
|
+
</button>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
export class ExampleComponent {
|
|
180
|
+
isLoading = false;
|
|
181
|
+
|
|
182
|
+
save() {
|
|
183
|
+
this.isLoading = true;
|
|
184
|
+
this.myService.save().subscribe(() => {
|
|
185
|
+
this.isLoading = false;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Design System — Cores `--c-*`
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
- Paleta completa de tokens CSS definidos como variáveis `--c-{grupo}-{shade}`, organizados em grupos semânticos: neutros, primária, danger, alert, info e success.
|
|
6
|
+
- Os tokens são remapeados automaticamente no dark mode e nas variantes de tema — componentes não precisam de alterações específicas.
|
|
7
|
+
- Nunca use valores hexadecimais diretamente em componentes — sempre referencie os tokens CSS.
|
|
8
|
+
- Três classes utilitárias geradas automaticamente para cada combinação de cor e shade: `.text-*`, `.bg-*` e `.border-*`.
|
|
9
|
+
- Dark mode ativado pela classe `tc-dark` no `<body>`.
|
|
10
|
+
- Variante **Prime Modern** ativada pela classe `tc-prime-modern` no `<body>`, substituindo apenas os tokens `--c-primary-*` pela paleta roxa.
|
|
11
|
+
|
|
12
|
+
## Instalação
|
|
13
|
+
|
|
14
|
+
Os tokens e classes utilitárias são fornecidos pelo stylesheet global do projeto. Nenhuma importação de módulo Angular é necessária.
|
|
15
|
+
Certifique-se de que o stylesheet principal do `tcloud-ui` está incluído na aplicação:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
// angular.json — styles
|
|
19
|
+
"styles": [
|
|
20
|
+
"projects/tcloud-ui/assets/scss/tcloud-ui.scss"
|
|
21
|
+
]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Tokens CSS — Paleta completa
|
|
27
|
+
|
|
28
|
+
### Neutros
|
|
29
|
+
|
|
30
|
+
| Token | Uso recomendado |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `--c-neutral-50` | Fundo principal da página / superfície mais clara |
|
|
33
|
+
| `--c-neutral-100` | Fundo de cards, headers de tabelas |
|
|
34
|
+
| `--c-neutral-200` | Bordas, divisórias, separadores |
|
|
35
|
+
| `--c-neutral-300` | Borda padrão de inputs — estado padrão |
|
|
36
|
+
| `--c-neutral-400` | Ícones, placeholders, textos auxiliares |
|
|
37
|
+
| `--c-neutral-500` | Textos secundários, descrições |
|
|
38
|
+
| `--c-neutral-600` | Textos de ênfase moderada, labels |
|
|
39
|
+
| `--c-neutral-700` | Texto principal — cor base do corpo |
|
|
40
|
+
| `--c-neutral-800` | Texto de alto contraste |
|
|
41
|
+
| `--c-neutral-900` | Máximo contraste — preto absoluto no light |
|
|
42
|
+
|
|
43
|
+
### Primária
|
|
44
|
+
|
|
45
|
+
| Token | Uso recomendado |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `--c-primary-300` | Fundo de glow de foco, highlight suave |
|
|
48
|
+
| `--c-primary-400` | Variante clara — hover sobre elementos primários |
|
|
49
|
+
| `--c-primary-500` | Cor principal da marca — botões, links, foco |
|
|
50
|
+
| `--c-primary-600` | Hover / pressed sobre elementos primários |
|
|
51
|
+
| `--c-primary-700` | Versão mais escura — alto contraste |
|
|
52
|
+
|
|
53
|
+
### Danger
|
|
54
|
+
|
|
55
|
+
| Token | Uso recomendado |
|
|
56
|
+
|---|---|
|
|
57
|
+
| `--c-danger-300` | Fundo de campos com erro |
|
|
58
|
+
| `--c-danger-400` | Ícone de erro, badges de alerta |
|
|
59
|
+
| `--c-danger-500` | Borda e texto de erro — ação destrutiva |
|
|
60
|
+
| `--c-danger-600` | Hover de botões destrutivos |
|
|
61
|
+
| `--c-danger-700` | Pressed / alto contraste em danger |
|
|
62
|
+
|
|
63
|
+
### Alert
|
|
64
|
+
|
|
65
|
+
| Token | Uso recomendado |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `--c-alert-300` | Fundo de notificações de aviso |
|
|
68
|
+
| `--c-alert-400` | Ícone de aviso, badge de atenção |
|
|
69
|
+
| `--c-alert-500` | Cor principal de aviso — atenção necessária |
|
|
70
|
+
| `--c-alert-600` | Hover sobre alertas |
|
|
71
|
+
| `--c-alert-700` | Alto contraste em alert |
|
|
72
|
+
|
|
73
|
+
### Info
|
|
74
|
+
|
|
75
|
+
| Token | Uso recomendado |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `--c-info-300` | Fundo de banners informativos |
|
|
78
|
+
| `--c-info-400` | Ícone informativo, detalhe suave |
|
|
79
|
+
| `--c-info-500` | Cor principal informativa |
|
|
80
|
+
|
|
81
|
+
### Success
|
|
82
|
+
|
|
83
|
+
| Token | Uso recomendado |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `--c-success-300` | Fundo de confirmações e sucessos |
|
|
86
|
+
| `--c-success-400` | Ícone de sucesso, badge de confirmação |
|
|
87
|
+
| `--c-success-500` | Cor principal de sucesso — ação concluída |
|
|
88
|
+
| `--c-success-600` | Hover sobre elementos de sucesso |
|
|
89
|
+
| `--c-success-700` | Alto contraste em success |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Classes Utilitárias
|
|
94
|
+
|
|
95
|
+
Geradas automaticamente para cada combinação de cor e shade.
|
|
96
|
+
|
|
97
|
+
| Padrão da classe | Propriedade CSS | Exemplo |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `.text-{cor}-{shade}` | `color` | `.text-primary-500` |
|
|
100
|
+
| `.bg-{cor}-{shade}` | `background-color` | `.bg-neutral-100` |
|
|
101
|
+
| `.border-{cor}-{shade}` | `border-color` | `.border-danger-500` |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Temas e Dark Mode
|
|
106
|
+
|
|
107
|
+
### Dark mode
|
|
108
|
+
|
|
109
|
+
Adicione a classe `tc-dark` ao `<body>` para ativar o tema escuro. Todos os tokens `--c-*` são remapeados automaticamente — nenhum componente precisa de alteração.
|
|
110
|
+
|
|
111
|
+
```html
|
|
112
|
+
<body class="tc-dark">
|
|
113
|
+
<!-- Toda a aplicação renderiza no tema escuro -->
|
|
114
|
+
</body>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Variante Prime Modern
|
|
118
|
+
|
|
119
|
+
Adicione `tc-prime-modern` ao `<body>` para substituir apenas os tokens `--c-primary-*` pela paleta roxa. Compatível com dark mode.
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<!-- Apenas a cor primária é substituída (paleta roxa) -->
|
|
123
|
+
<body class="tc-prime-modern">...</body>
|
|
124
|
+
|
|
125
|
+
<!-- Combinando dark mode + Prime Modern -->
|
|
126
|
+
<body class="tc-dark tc-prime-modern">...</body>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Exemplos de Uso
|
|
132
|
+
|
|
133
|
+
### Uso Básico — tokens CSS inline
|
|
134
|
+
|
|
135
|
+
```html
|
|
136
|
+
<!-- Cor de texto via token -->
|
|
137
|
+
<p style="color: var(--c-primary-500);">Texto em cor primária</p>
|
|
138
|
+
|
|
139
|
+
<!-- Fundo via token -->
|
|
140
|
+
<div style="background-color: var(--c-neutral-100);">Card com fundo neutro</div>
|
|
141
|
+
|
|
142
|
+
<!-- Borda via token -->
|
|
143
|
+
<div style="border: 1px solid var(--c-neutral-300);">Container com borda</div>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Uso com classes utilitárias
|
|
147
|
+
|
|
148
|
+
```html
|
|
149
|
+
<!-- Texto colorido -->
|
|
150
|
+
<span class="text-primary-500">Link ou ação primária</span>
|
|
151
|
+
<span class="text-danger-500">Mensagem de erro</span>
|
|
152
|
+
<span class="text-success-500">Operação concluída</span>
|
|
153
|
+
<span class="text-neutral-500">Texto secundário</span>
|
|
154
|
+
|
|
155
|
+
<!-- Fundo semântico -->
|
|
156
|
+
<div class="bg-success-300 text-success-700">Confirmação realizada com sucesso.</div>
|
|
157
|
+
<div class="bg-danger-300 text-danger-600">Falha ao processar a solicitação.</div>
|
|
158
|
+
<div class="bg-alert-300 text-alert-700">Atenção: verifique os dados antes de prosseguir.</div>
|
|
159
|
+
<div class="bg-info-300 text-info-500">Dica: este campo aceita CPF ou CNPJ.</div>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Uso avançado — tokens em CSS customizado
|
|
163
|
+
|
|
164
|
+
```scss
|
|
165
|
+
// styles.scss — nunca use hex, sempre os tokens
|
|
166
|
+
.meu-componente {
|
|
167
|
+
color: var(--c-neutral-700);
|
|
168
|
+
background-color: var(--c-neutral-50);
|
|
169
|
+
border: 1px solid var(--c-neutral-300);
|
|
170
|
+
|
|
171
|
+
&:hover {
|
|
172
|
+
border-color: var(--c-primary-500);
|
|
173
|
+
background-color: var(--c-primary-300);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
&.is-error {
|
|
177
|
+
border-color: var(--c-danger-500);
|
|
178
|
+
background-color: var(--c-danger-300);
|
|
179
|
+
color: var(--c-danger-600);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Integração com Angular — class binding condicional
|
|
185
|
+
|
|
186
|
+
```html
|
|
187
|
+
<div
|
|
188
|
+
[class]="'f-14 font-regular ' + (hasError ? 'text-danger-500' : 'text-neutral-700')"
|
|
189
|
+
>
|
|
190
|
+
{{ mensagem }}
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<div
|
|
194
|
+
[ngClass]="{
|
|
195
|
+
'bg-success-300 text-success-700': status === 'success',
|
|
196
|
+
'bg-danger-300 text-danger-600': status === 'error',
|
|
197
|
+
'bg-alert-300 text-alert-700': status === 'warning',
|
|
198
|
+
'bg-info-300 text-info-500': status === 'info'
|
|
199
|
+
}"
|
|
200
|
+
class="f-14 font-regular"
|
|
201
|
+
>
|
|
202
|
+
{{ mensagem }}
|
|
203
|
+
</div>
|
|
204
|
+
```
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Layout — `.tc-form-control`
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
- Classe CSS aplicada a qualquer `<input>` para estilização padronizada de campos de texto no projeto.
|
|
6
|
+
- Visual em pílula (`border-radius: 40px`) com altura fixa de `40px` e padding horizontal consistente.
|
|
7
|
+
- Adaptável ao dark mode — `color`, `background` e `border` utilizam tokens CSS do design system.
|
|
8
|
+
- Suporte a estados visuais: padrão, foco, erro e desabilitado.
|
|
9
|
+
- Classe modificadora `.tc-form-control--error` para indicação de validação inválida.
|
|
10
|
+
- Combina com `.tc-form-field` para agrupar label, dica (`.tc-form-hint`) e mensagem de erro (`.tc-form-error`) de forma semântica e acessível.
|
|
11
|
+
- Não há componente Angular envolvido — as classes são aplicadas diretamente no HTML.
|
|
12
|
+
|
|
13
|
+
## Instalação
|
|
14
|
+
|
|
15
|
+
As classes são fornecidas pelo stylesheet global do projeto. Nenhuma importação de módulo Angular é necessária.
|
|
16
|
+
Certifique-se de que o stylesheet principal do `tcloud-ui` está incluído na aplicação:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
// angular.json — styles
|
|
20
|
+
"styles": [
|
|
21
|
+
"projects/tcloud-ui/assets/scss/tcloud-ui.scss"
|
|
22
|
+
]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## API — Classes
|
|
28
|
+
|
|
29
|
+
### `.tc-form-control`
|
|
30
|
+
|
|
31
|
+
Classe principal aplicada ao `<input>`.
|
|
32
|
+
|
|
33
|
+
| Propriedade CSS | Valor / Token | Descrição |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `border` | `1px solid var(--c-neutral-400)` | Borda padrão — cor do token neutral |
|
|
36
|
+
| `border-radius` | `var(--bor-radius-pill)` | Bordas arredondadas em pílula (40px) |
|
|
37
|
+
| `height` | `var(--size-40)` | Altura fixa de 2.5rem (40px) |
|
|
38
|
+
| `padding` | `0 var(--size-16)` | Espaçamento interno horizontal |
|
|
39
|
+
| `font-size` | `var(--f-size-14)` | Tamanho de texto padrão (0.875rem) |
|
|
40
|
+
| `line-height` | `var(--l-height-20)` | Altura de linha (1.43) |
|
|
41
|
+
| `color` | `var(--c-neutral-700)` | Cor do texto — adapta ao dark mode |
|
|
42
|
+
| `background` | `var(--c-neutral-50)` | Fundo — adapta ao dark mode |
|
|
43
|
+
| `transition` | `.2s ease` | Animação suave de estados |
|
|
44
|
+
| `max-width` | `100%` | Respeita o container pai |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### Classes modificadoras e auxiliares
|
|
49
|
+
|
|
50
|
+
| Classe | Elemento | Descrição |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `.tc-form-control--error` | `<input>` | Aplica borda e fundo com cor `danger` — campo com validação inválida |
|
|
53
|
+
| `.tc-form-field` | `<div>` container | Agrupa label + input + mensagens de forma semântica |
|
|
54
|
+
| `.tc-form-hint` | `<p>` | Texto auxiliar abaixo do campo (dica ou instrução) |
|
|
55
|
+
| `.tc-form-error` | `<p>` | Mensagem de erro de validação abaixo do campo |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### Estados
|
|
60
|
+
|
|
61
|
+
| Estado | Descrição |
|
|
62
|
+
|---|---|
|
|
63
|
+
| Padrão | Estado inicial do campo |
|
|
64
|
+
| Com valor | Campo preenchido pelo usuário |
|
|
65
|
+
| Foco | Borda primary + glow — ao clicar no campo |
|
|
66
|
+
| Erro | Borda e fundo danger — validação inválida (`tc-form-control--error`) |
|
|
67
|
+
| Desabilitado | Fundo neutro + cursor `not-allowed` (atributo `disabled`) |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### Tipos de input suportados
|
|
72
|
+
|
|
73
|
+
| `type` | Uso recomendado |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `text` | Texto livre — campos genéricos |
|
|
76
|
+
| `email` | Endereço de e-mail |
|
|
77
|
+
| `password` | Senhas — oculta o conteúdo |
|
|
78
|
+
| `number` | Valores numéricos |
|
|
79
|
+
| `search` | Campo de busca |
|
|
80
|
+
| `tel` | Número de telefone |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Exemplos de Uso
|
|
85
|
+
|
|
86
|
+
### Uso Básico
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<!-- Campo simples -->
|
|
90
|
+
<input class="tc-form-control" type="text" placeholder="Digite algo…" />
|
|
91
|
+
|
|
92
|
+
<!-- Campo desabilitado -->
|
|
93
|
+
<input class="tc-form-control" type="text" disabled placeholder="Campo desabilitado" />
|
|
94
|
+
|
|
95
|
+
<!-- Campo com erro -->
|
|
96
|
+
<input class="tc-form-control tc-form-control--error" type="text" value="dado inválido" />
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### Uso Avançado
|
|
102
|
+
|
|
103
|
+
#### Campo completo com `.tc-form-field`, label e dica
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<div class="tc-form-field">
|
|
107
|
+
<label for="nome">Nome completo</label>
|
|
108
|
+
<input class="tc-form-control" id="nome" type="text" placeholder="Ex.: João Silva" />
|
|
109
|
+
<p class="tc-form-hint">Informe seu nome como consta no documento.</p>
|
|
110
|
+
</div>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### Campo com mensagem de erro de validação
|
|
114
|
+
|
|
115
|
+
```html
|
|
116
|
+
<div class="tc-form-field">
|
|
117
|
+
<label for="cpf">CPF</label>
|
|
118
|
+
<input
|
|
119
|
+
class="tc-form-control tc-form-control--error"
|
|
120
|
+
id="cpf"
|
|
121
|
+
type="text"
|
|
122
|
+
value="123.456"
|
|
123
|
+
/>
|
|
124
|
+
<p class="tc-form-error">CPF inválido. Verifique o número informado.</p>
|
|
125
|
+
</div>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### Campo somente leitura / gerado automaticamente
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<div class="tc-form-field">
|
|
132
|
+
<label for="codigo">Código de cliente</label>
|
|
133
|
+
<input
|
|
134
|
+
class="tc-form-control"
|
|
135
|
+
id="codigo"
|
|
136
|
+
type="text"
|
|
137
|
+
value="CLI-00421"
|
|
138
|
+
disabled
|
|
139
|
+
/>
|
|
140
|
+
<p class="tc-form-hint">Gerado automaticamente — não editável.</p>
|
|
141
|
+
</div>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Formulário com múltiplos campos
|
|
145
|
+
|
|
146
|
+
```html
|
|
147
|
+
<form>
|
|
148
|
+
<div class="tc-form-field">
|
|
149
|
+
<label for="nome">Nome completo</label>
|
|
150
|
+
<input class="tc-form-control" id="nome" type="text" placeholder="Ex.: João Silva" />
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div class="tc-form-field">
|
|
154
|
+
<label for="email">E-mail</label>
|
|
155
|
+
<input class="tc-form-control" id="email" type="email" placeholder="email@exemplo.com" />
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<div class="tc-form-field">
|
|
159
|
+
<label for="tel">Telefone</label>
|
|
160
|
+
<input class="tc-form-control" id="tel" type="tel" placeholder="(00) 00000-0000" />
|
|
161
|
+
<p class="tc-form-hint">DDD + número com 9 dígitos.</p>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
<div class="tc-form-field">
|
|
165
|
+
<label for="senha">Senha</label>
|
|
166
|
+
<input class="tc-form-control" id="senha" type="password" placeholder="Mínimo 8 caracteres" />
|
|
167
|
+
</div>
|
|
168
|
+
</form>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Integração com Angular Reactive Forms
|
|
172
|
+
|
|
173
|
+
```html
|
|
174
|
+
<form [formGroup]="form">
|
|
175
|
+
<div class="tc-form-field">
|
|
176
|
+
<label for="email">E-mail</label>
|
|
177
|
+
<input
|
|
178
|
+
class="tc-form-control"
|
|
179
|
+
[class.tc-form-control--error]="form.get('email')?.invalid && form.get('email')?.touched"
|
|
180
|
+
id="email"
|
|
181
|
+
type="email"
|
|
182
|
+
formControlName="email"
|
|
183
|
+
placeholder="email@exemplo.com"
|
|
184
|
+
/>
|
|
185
|
+
<p class="tc-form-error" *ngIf="form.get('email')?.invalid && form.get('email')?.touched">
|
|
186
|
+
E-mail inválido. Verifique e tente novamente.
|
|
187
|
+
</p>
|
|
188
|
+
</div>
|
|
189
|
+
</form>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```ts
|
|
193
|
+
export class ExampleComponent {
|
|
194
|
+
form = this.fb.group({
|
|
195
|
+
email: ['', [Validators.required, Validators.email]]
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
constructor(private fb: FormBuilder) {}
|
|
199
|
+
}
|
|
200
|
+
```
|