@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,40 @@
|
|
|
1
|
+
# Card
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
- Container de conteúdo com padding responsivo: `shadow-md pad-16` em desktop e `shadow-sm pad-14` em telas menores.
|
|
5
|
+
- Suporta qualquer conteúdo projetado via `<ng-content>`.
|
|
6
|
+
- Standalone component, pronto para importação direta.
|
|
7
|
+
|
|
8
|
+
## Instalação
|
|
9
|
+
Importe o componente no standalone que for usá-lo:
|
|
10
|
+
```ts
|
|
11
|
+
import { TCloudUiCardComponent } from 'projects/tcloud-ui/src/public-api';
|
|
12
|
+
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'app-example',
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [TCloudUiCardComponent],
|
|
17
|
+
template: `<tcloud-ui-card>...</tcloud-ui-card>`
|
|
18
|
+
})
|
|
19
|
+
export class ExampleComponent {}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Propriedades (API)
|
|
23
|
+
### Inputs
|
|
24
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
25
|
+
| --- | --- | --- | --- |
|
|
26
|
+
| (não possui) | - | Componente não expõe inputs. | - |
|
|
27
|
+
|
|
28
|
+
### Outputs
|
|
29
|
+
| Nome | Tipo de Evento | Descrição |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| (não possui) | - | Componente não emite eventos. |
|
|
32
|
+
|
|
33
|
+
## Exemplos de Uso
|
|
34
|
+
### Uso Básico
|
|
35
|
+
```html
|
|
36
|
+
<tcloud-ui-card>
|
|
37
|
+
<h2>Card Title</h2>
|
|
38
|
+
<p>Conteúdo livre dentro do card.</p>
|
|
39
|
+
</tcloud-ui-card>
|
|
40
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Choice Issues
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
- Componente de decisão binária (Sim/Não) com rótulos configuráveis.
|
|
5
|
+
- Suporta `ngModel` (ControlValueAccessor) para two-way binding do valor booleano.
|
|
6
|
+
- Modo visualização (`view=true`) exibe apenas o estado atual sem permitir interação.
|
|
7
|
+
- Emite evento de mudança para integração com fluxos externos.
|
|
8
|
+
|
|
9
|
+
## Instalação
|
|
10
|
+
```ts
|
|
11
|
+
import { TCloudUiChoiceIssuesComponent } from 'projects/tcloud-ui/src/public-api';
|
|
12
|
+
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'app-example',
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [TCloudUiChoiceIssuesComponent],
|
|
17
|
+
template: `<tcloud-ui-choice-issues></tcloud-ui-choice-issues>`
|
|
18
|
+
})
|
|
19
|
+
export class ExampleComponent {}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Propriedades (API)
|
|
23
|
+
### Inputs
|
|
24
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
25
|
+
| --- | --- | --- | --- |
|
|
26
|
+
| view | boolean | Quando verdadeiro, bloqueia interação e apenas exibe o estado. | false |
|
|
27
|
+
| titulo | string | Título exibido no topo do card. | '' |
|
|
28
|
+
| subTitulo | string | Subtítulo/descrição auxiliar. | '' |
|
|
29
|
+
| disabled | boolean | Desabilita interação. | false |
|
|
30
|
+
| ngModel | boolean | Valor selecionado (Sim/Não) com two-way binding. | false |
|
|
31
|
+
|
|
32
|
+
### Outputs
|
|
33
|
+
| Nome | Tipo de Evento | Descrição |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| onChange | EventEmitter<any> | Emite o valor ao alterar (Sim/Não). |
|
|
36
|
+
| ngModelChange | EventEmitter<any> | Suporte ao two-way binding de `ngModel`. |
|
|
37
|
+
|
|
38
|
+
## Exemplos de Uso
|
|
39
|
+
### Uso Básico com binding
|
|
40
|
+
```html
|
|
41
|
+
<tcloud-ui-choice-issues
|
|
42
|
+
titulo="Deseja sinalizar como concluído?"
|
|
43
|
+
subTitulo="As ações concluídas serão enviadas para a fila de processamento"
|
|
44
|
+
[(ngModel)]="checked"
|
|
45
|
+
(onChange)="handleChange($event)">
|
|
46
|
+
</tcloud-ui-choice-issues>
|
|
47
|
+
|
|
48
|
+
<pre>checked: {{ checked }}</pre>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Modo visualização (somente leitura)
|
|
52
|
+
```html
|
|
53
|
+
<tcloud-ui-choice-issues
|
|
54
|
+
[view]="true"
|
|
55
|
+
[titulo]="'Operação concluída'"
|
|
56
|
+
[subTitulo]="'Status final'"
|
|
57
|
+
[ngModel]="true">
|
|
58
|
+
</tcloud-ui-choice-issues>
|
|
59
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# CNPJPipe
|
|
2
|
+
|
|
3
|
+
O pipe `cnpj` formata uma string numérica de 14 dígitos no padrão de CNPJ brasileiro (`##.###.###/####-##`). Se o valor informado não possuir exatamente 14 caracteres, o pipe retorna o valor original sem formatação.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- Formatação automática no padrão `##.###.###/####-##`
|
|
8
|
+
- Validação de comprimento: aplica a máscara apenas quando o valor possui exatamente 14 dígitos
|
|
9
|
+
- Remoção de espaços em branco antes da formatação
|
|
10
|
+
- Retorno do valor original caso não possua 14 dígitos
|
|
11
|
+
- Pipe standalone
|
|
12
|
+
|
|
13
|
+
## Instalação
|
|
14
|
+
|
|
15
|
+
Importe o pipe diretamente no módulo ou componente standalone:
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { CNPJPipe } from 'tcloud-ui';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
### Sintaxe do Pipe
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
{{ valor | cnpj }}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Parâmetros
|
|
30
|
+
|
|
31
|
+
Este pipe não recebe parâmetros adicionais.
|
|
32
|
+
|
|
33
|
+
### Entrada e Saída
|
|
34
|
+
|
|
35
|
+
| Entrada | Saída |
|
|
36
|
+
|------------------|------------------------|
|
|
37
|
+
| `'12345678000195'` | `'12.345.678/0001-95'` |
|
|
38
|
+
| `'00123456000178'` | `'00.123.456/0001-78'` |
|
|
39
|
+
| `'123'` | `'123'` (sem formatação) |
|
|
40
|
+
|
|
41
|
+
## Exemplos de Uso
|
|
42
|
+
|
|
43
|
+
### Básico — Formatação de CNPJ
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<p>{{ '12345678000195' | cnpj }}</p>
|
|
47
|
+
<!-- Resultado: 12.345.678/0001-95 -->
|
|
48
|
+
|
|
49
|
+
<p>{{ '00123456000178' | cnpj }}</p>
|
|
50
|
+
<!-- Resultado: 00.123.456/0001-78 -->
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { CNPJPipe } from 'tcloud-ui';
|
|
55
|
+
|
|
56
|
+
@Component({
|
|
57
|
+
standalone: true,
|
|
58
|
+
imports: [CNPJPipe],
|
|
59
|
+
template: `
|
|
60
|
+
<p>{{ cnpj | cnpj }}</p>
|
|
61
|
+
`
|
|
62
|
+
})
|
|
63
|
+
export class ExemploBasicoComponent {
|
|
64
|
+
cnpj = '12345678000195';
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Avançado — Exibição condicional em listagem
|
|
69
|
+
|
|
70
|
+
```html
|
|
71
|
+
<table class="table">
|
|
72
|
+
<thead>
|
|
73
|
+
<tr>
|
|
74
|
+
<th>Empresa</th>
|
|
75
|
+
<th>CNPJ</th>
|
|
76
|
+
</tr>
|
|
77
|
+
</thead>
|
|
78
|
+
<tbody>
|
|
79
|
+
<tr *ngFor="let empresa of empresas">
|
|
80
|
+
<td>{{ empresa.nome }}</td>
|
|
81
|
+
<td>{{ empresa.cnpj | cnpj }}</td>
|
|
82
|
+
</tr>
|
|
83
|
+
</tbody>
|
|
84
|
+
</table>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { CNPJPipe } from 'tcloud-ui';
|
|
89
|
+
|
|
90
|
+
@Component({
|
|
91
|
+
standalone: true,
|
|
92
|
+
imports: [CommonModule, CNPJPipe],
|
|
93
|
+
template: `...`
|
|
94
|
+
})
|
|
95
|
+
export class ExemploAvancadoComponent {
|
|
96
|
+
empresas = [
|
|
97
|
+
{ nome: 'Empresa Alpha', cnpj: '12345678000195' },
|
|
98
|
+
{ nome: 'Empresa Beta', cnpj: '98765432000110' },
|
|
99
|
+
{ nome: 'Empresa Gamma', cnpj: '00123456000178' }
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
```
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Container
|
|
2
|
+
|
|
3
|
+
O componente **Container** fornece uma estrutura de layout responsivo com sidebar colapsável, ideal para aplicações com navegação lateral. Ele gerencia automaticamente o estado de expansão/contração da coluna lateral e sincroniza este estado entre seus componentes filhos.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- **Layout de duas colunas**: Suporta uma coluna lateral (navbar/menu) e uma área de conteúdo principal
|
|
8
|
+
- **Responsividade**: A coluna lateral pode ser expandida ou contraída dinamicamente
|
|
9
|
+
- **Sincronização de estado**: Utiliza um serviço centralizado para gerenciar o estado expandido/contraído
|
|
10
|
+
- **Composição flexível**: Aceita conteúdo através de sub-componentes (`tcloud-ui-container-col` e `tcloud-ui-container-content`)
|
|
11
|
+
- **Sinal reativo**: Implementa Angular Signals para reatividade eficiente
|
|
12
|
+
|
|
13
|
+
## Instalação
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { TCloudUiModule } from 'projects/tcloud-ui/src/public-api';
|
|
17
|
+
|
|
18
|
+
@Component({
|
|
19
|
+
imports: [TCloudUiModule],
|
|
20
|
+
// ... resto da configuração
|
|
21
|
+
})
|
|
22
|
+
export class MyComponent {}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Propriedades (API)
|
|
26
|
+
|
|
27
|
+
### Inputs
|
|
28
|
+
|
|
29
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
30
|
+
|------|------|-----------|---------------|
|
|
31
|
+
| `expanded` | `boolean` | Define se o container (coluna lateral) está expandido ou contraído | `false` |
|
|
32
|
+
|
|
33
|
+
### Métodos
|
|
34
|
+
|
|
35
|
+
| Nome | Descrição |
|
|
36
|
+
|------|-----------|
|
|
37
|
+
| `to_expanded()` | Método manual para disparar a atualização do estado expandido. Mantido por retrocompatibilidade |
|
|
38
|
+
|
|
39
|
+
## Componentes Filhos
|
|
40
|
+
|
|
41
|
+
### tcloud-ui-container-col
|
|
42
|
+
|
|
43
|
+
Represente a coluna lateral do container. Acessa o estado de expansão através do serviço compartilhado.
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<tcloud-ui-container-col>
|
|
47
|
+
<!-- Conteúdo da coluna lateral -->
|
|
48
|
+
</tcloud-ui-container-col>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### tcloud-ui-container-content
|
|
52
|
+
|
|
53
|
+
Represente a área de conteúdo principal do container. Ajusta seu layout baseado no estado de expansão da coluna.
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<tcloud-ui-container-content>
|
|
57
|
+
<!-- Conteúdo principal -->
|
|
58
|
+
</tcloud-ui-container-content>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Exemplos de Uso
|
|
62
|
+
|
|
63
|
+
### Uso Básico
|
|
64
|
+
|
|
65
|
+
Estrutura simples com navbar e conteúdo principal:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
@Component({
|
|
69
|
+
selector: 'app-my-layout',
|
|
70
|
+
imports: [TCloudUiModule],
|
|
71
|
+
template: `
|
|
72
|
+
<tcloud-ui-container [expanded]="isExpanded">
|
|
73
|
+
<tcloud-ui-container-col>
|
|
74
|
+
<nav>
|
|
75
|
+
<!-- Menu items -->
|
|
76
|
+
</nav>
|
|
77
|
+
</tcloud-ui-container-col>
|
|
78
|
+
|
|
79
|
+
<tcloud-ui-container-content>
|
|
80
|
+
<main>
|
|
81
|
+
<!-- Conteúdo principal -->
|
|
82
|
+
</main>
|
|
83
|
+
</tcloud-ui-container-content>
|
|
84
|
+
</tcloud-ui-container>
|
|
85
|
+
`
|
|
86
|
+
})
|
|
87
|
+
export class MyLayoutComponent {
|
|
88
|
+
isExpanded: boolean = true;
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Uso Avançado com Sub-Navbar
|
|
93
|
+
|
|
94
|
+
Integração com o componente de sub-navbar para navegação colapsável:
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
@Component({
|
|
98
|
+
selector: 'app-advanced-layout',
|
|
99
|
+
imports: [CommonModule, TCloudUiModule],
|
|
100
|
+
template: `
|
|
101
|
+
<tcloud-ui-container [expanded]="submenuExpanded">
|
|
102
|
+
<tcloud-ui-container-col>
|
|
103
|
+
<tcloud-ui-sub-navbar (onSubMenuExpandChange)="submenuExpanded = $event">
|
|
104
|
+
<tcloud-ui-sub-navbar-item label="Dashboard">
|
|
105
|
+
<i class="fa-solid fa-chart-line" icon></i>
|
|
106
|
+
</tcloud-ui-sub-navbar-item>
|
|
107
|
+
|
|
108
|
+
<tcloud-ui-sub-navbar-item label="Usuários">
|
|
109
|
+
<i class="fa-solid fa-users" icon></i>
|
|
110
|
+
</tcloud-ui-sub-navbar-item>
|
|
111
|
+
|
|
112
|
+
<tcloud-ui-sub-navbar-item label="Configurações">
|
|
113
|
+
<i class="fa-solid fa-cog" icon></i>
|
|
114
|
+
</tcloud-ui-sub-navbar-item>
|
|
115
|
+
</tcloud-ui-sub-navbar>
|
|
116
|
+
</tcloud-ui-container-col>
|
|
117
|
+
|
|
118
|
+
<tcloud-ui-container-content>
|
|
119
|
+
<tcloud-ui-card>
|
|
120
|
+
<tcloud-ui-card-title title="Bem-vindo">
|
|
121
|
+
<i class="fas fa-home" icon></i>
|
|
122
|
+
</tcloud-ui-card-title>
|
|
123
|
+
<p>Conteúdo principal da aplicação</p>
|
|
124
|
+
</tcloud-ui-card>
|
|
125
|
+
</tcloud-ui-container-content>
|
|
126
|
+
</tcloud-ui-container>
|
|
127
|
+
`
|
|
128
|
+
})
|
|
129
|
+
export class AdvancedLayoutComponent {
|
|
130
|
+
submenuExpanded: boolean = false;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Controle Programático do Expansion
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
@Component({
|
|
138
|
+
selector: 'app-controllable-layout',
|
|
139
|
+
imports: [CommonModule, TCloudUiModule],
|
|
140
|
+
template: `
|
|
141
|
+
<button (click)="toggleExpanded()" class="tc-btn">
|
|
142
|
+
{{ isExpanded ? 'Fechar Menu' : 'Abrir Menu' }}
|
|
143
|
+
</button>
|
|
144
|
+
|
|
145
|
+
<tcloud-ui-container [expanded]="isExpanded">
|
|
146
|
+
<tcloud-ui-container-col>
|
|
147
|
+
<!-- Coluna lateral -->
|
|
148
|
+
</tcloud-ui-container-col>
|
|
149
|
+
|
|
150
|
+
<tcloud-ui-container-content>
|
|
151
|
+
<!-- Conteúdo -->
|
|
152
|
+
</tcloud-ui-container-content>
|
|
153
|
+
</tcloud-ui-container>
|
|
154
|
+
`
|
|
155
|
+
})
|
|
156
|
+
export class ControllableLayoutComponent {
|
|
157
|
+
isExpanded: boolean = false;
|
|
158
|
+
|
|
159
|
+
toggleExpanded() {
|
|
160
|
+
this.isExpanded = !this.isExpanded;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Notas de Implementação
|
|
166
|
+
|
|
167
|
+
- O componente utiliza **Angular Signals** para gerenciamento reativo de estado através do `ContainerService`
|
|
168
|
+
- O serviço é fornecido no nível do componente, garantindo isolamento de estado entre instâncias múltiplas de Container
|
|
169
|
+
- Ambas as colunas (`col` e `content`) acessam o mesmo sinal de estado através da injeção de dependência do serviço
|
|
170
|
+
- A coerção de booleanos é automática: qualquer valor truthy/falsy é convertido para `true` ou `false`
|
|
171
|
+
- O componente detecta mudanças no `expanded` input e dispara a sincronização de estado apenas quando o valor efetivamente muda
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# CPFPipe
|
|
2
|
+
|
|
3
|
+
O pipe `cpf` formata uma string numérica de 11 dígitos no padrão de CPF brasileiro (`###.###.###-##`). Se o valor informado não possuir exatamente 11 caracteres, o pipe retorna o valor original sem formatação.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- Formatação automática no padrão `###.###.###-##`
|
|
8
|
+
- Validação de comprimento: aplica a máscara apenas quando o valor possui exatamente 11 dígitos
|
|
9
|
+
- Remoção de espaços em branco antes da formatação
|
|
10
|
+
- Retorno do valor original caso não possua 11 dígitos
|
|
11
|
+
- Pipe standalone
|
|
12
|
+
|
|
13
|
+
## Instalação
|
|
14
|
+
|
|
15
|
+
Importe o pipe diretamente no módulo ou componente standalone:
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { CPFPipe } from 'tcloud-ui';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
### Sintaxe do Pipe
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
{{ valor | cpf }}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Parâmetros
|
|
30
|
+
|
|
31
|
+
Este pipe não recebe parâmetros adicionais.
|
|
32
|
+
|
|
33
|
+
### Entrada e Saída
|
|
34
|
+
|
|
35
|
+
| Entrada | Saída |
|
|
36
|
+
|------------------|----------------------|
|
|
37
|
+
| `'12345678901'` | `'123.456.789-01'` |
|
|
38
|
+
| `'00012345678'` | `'000.123.456-78'` |
|
|
39
|
+
| `'123'` | `'123'` (sem formatação) |
|
|
40
|
+
|
|
41
|
+
## Exemplos de Uso
|
|
42
|
+
|
|
43
|
+
### Básico — Formatação de CPF
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<p>{{ '12345678901' | cpf }}</p>
|
|
47
|
+
<!-- Resultado: 123.456.789-01 -->
|
|
48
|
+
|
|
49
|
+
<p>{{ '00012345678' | cpf }}</p>
|
|
50
|
+
<!-- Resultado: 000.123.456-78 -->
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { CPFPipe } from 'tcloud-ui';
|
|
55
|
+
|
|
56
|
+
@Component({
|
|
57
|
+
standalone: true,
|
|
58
|
+
imports: [CPFPipe],
|
|
59
|
+
template: `
|
|
60
|
+
<p>{{ cpf | cpf }}</p>
|
|
61
|
+
`
|
|
62
|
+
})
|
|
63
|
+
export class ExemploBasicoComponent {
|
|
64
|
+
cpf = '12345678901';
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Avançado — Exibição em listagem de usuários
|
|
69
|
+
|
|
70
|
+
```html
|
|
71
|
+
<table class="table">
|
|
72
|
+
<thead>
|
|
73
|
+
<tr>
|
|
74
|
+
<th>Nome</th>
|
|
75
|
+
<th>CPF</th>
|
|
76
|
+
</tr>
|
|
77
|
+
</thead>
|
|
78
|
+
<tbody>
|
|
79
|
+
<tr *ngFor="let usuario of usuarios">
|
|
80
|
+
<td>{{ usuario.nome }}</td>
|
|
81
|
+
<td>{{ usuario.cpf | cpf }}</td>
|
|
82
|
+
</tr>
|
|
83
|
+
</tbody>
|
|
84
|
+
</table>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { CPFPipe } from 'tcloud-ui';
|
|
89
|
+
|
|
90
|
+
@Component({
|
|
91
|
+
standalone: true,
|
|
92
|
+
imports: [CommonModule, CPFPipe],
|
|
93
|
+
template: `...`
|
|
94
|
+
})
|
|
95
|
+
export class ExemploAvancadoComponent {
|
|
96
|
+
usuarios = [
|
|
97
|
+
{ nome: 'Rodrigo Rea', cpf: '12345678901' },
|
|
98
|
+
{ nome: 'Maria Silva', cpf: '98765432100' },
|
|
99
|
+
{ nome: 'João Santos', cpf: '00012345678' }
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
```
|