@seniorsistemas/angular-components-mcp 1.0.0-beta.3 → 1.0.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/dist/data/component-rules/button.md +37 -0
- package/dist/data/component-rules/checkbox.md +30 -0
- package/dist/data/component-rules/confirm-dialog.md +86 -0
- package/dist/data/component-rules/index.json +3 -0
- package/dist/data/component-rules/radio-button.md +0 -0
- package/dist/data/component-technical/confirm-dialog.md +117 -0
- package/dist/data/component-technical/dialog.md +202 -0
- package/dist/data/component-technical/dynamic-form.md +292 -0
- package/dist/data/component-technical/index.json +4 -0
- package/dist/data/component-technical/kanban.md +116 -0
- package/dist/data/component-technical/loading-state.md +96 -0
- package/dist/data/component-technical/sidebar.md +82 -0
- package/dist/data/component-technical/table.md +19 -0
- package/dist/data/component-technical/toast.md +63 -0
- package/dist/data/components-metadata.json +4402 -0
- package/dist/data/dynamic-form-metadata.json +2281 -0
- package/dist/data/ux-rules.md +45 -0
- package/dist/handlers/handleDetectRequiredProviders.d.ts +12 -0
- package/dist/handlers/handleDetectRequiredProviders.d.ts.map +1 -0
- package/dist/handlers/handleGetComponentDetails.d.ts +13 -0
- package/dist/handlers/handleGetComponentDetails.d.ts.map +1 -0
- package/dist/handlers/handleGetComponentRules.d.ts +13 -0
- package/dist/handlers/handleGetComponentRules.d.ts.map +1 -0
- package/dist/handlers/handleGetComponentRulesIndex.d.ts +11 -0
- package/dist/handlers/handleGetComponentRulesIndex.d.ts.map +1 -0
- package/dist/handlers/handleGetComponentTechnicalGuide.d.ts +13 -0
- package/dist/handlers/handleGetComponentTechnicalGuide.d.ts.map +1 -0
- package/dist/handlers/handleGetComponentTechnicalIndex.d.ts +11 -0
- package/dist/handlers/handleGetComponentTechnicalIndex.d.ts.map +1 -0
- package/dist/handlers/handleGetComponents.d.ts +14 -0
- package/dist/handlers/handleGetComponents.d.ts.map +1 -0
- package/dist/handlers/handleGetDynamicFormTypes.d.ts +13 -0
- package/dist/handlers/handleGetDynamicFormTypes.d.ts.map +1 -0
- package/dist/handlers/handleGetUxRules.d.ts +10 -0
- package/dist/handlers/handleGetUxRules.d.ts.map +1 -0
- package/dist/handlers.d.ts +112 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/index.cjs +16703 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +16700 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Button — Regras de UX
|
|
2
|
+
|
|
3
|
+
**Seletor:** `s-button`
|
|
4
|
+
**Package:** `@seniorsistemas/angular-components/button`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Variantes
|
|
9
|
+
|
|
10
|
+
| Variante | Quando usar |
|
|
11
|
+
| ----------- | ---------------------------------------------------------------------------- |
|
|
12
|
+
| `primary` | Ação principal da página — máximo 1 por página/diálogo |
|
|
13
|
+
| `secondary` | Ações complementares à ação principal |
|
|
14
|
+
| `link` | Navegação secundária ou ações de baixa importância visual |
|
|
15
|
+
| `select` | Quando houver menu de ações — obrigatório usar ícone de chevron pré-definido |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Regras
|
|
20
|
+
|
|
21
|
+
### ⛔ Hierarquia (error)
|
|
22
|
+
|
|
23
|
+
Use no máximo 1 botão `primary` por página/diálogo. Os demais devem ser `secondary` ou `link`.
|
|
24
|
+
|
|
25
|
+
### ⚠️ Ícones (warning)
|
|
26
|
+
|
|
27
|
+
Use no máximo 1 ícone por botão (esquerda ou direita). Nunca 2 ícones no mesmo botão.
|
|
28
|
+
|
|
29
|
+
### ⛔ Tamanho `small` (error)
|
|
30
|
+
|
|
31
|
+
Permitido **somente** em células de tabela e section title.
|
|
32
|
+
Proibido em formulários, navegação primária ou qualquer outro contexto.
|
|
33
|
+
|
|
34
|
+
### ⛔ Labels
|
|
35
|
+
|
|
36
|
+
Use labels acionáveis e específicos. Prefira `"Salvar Cadastro"` a `"OK"`.
|
|
37
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Checkbox — Regras de UX
|
|
2
|
+
|
|
3
|
+
## Variantes
|
|
4
|
+
|
|
5
|
+
| Variante | Quando usar |
|
|
6
|
+
| -------------- | --------------------------------------------------------------- |
|
|
7
|
+
| **Horizontal** | Quando todos os itens possuem textos curtos ou palavras únicas. |
|
|
8
|
+
| **Vertical** | Quando um ou mais itens possuem textos longos. |
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Regras de uso
|
|
13
|
+
|
|
14
|
+
- **SEMPRE** use alinhamento vertical em telas pequenas.
|
|
15
|
+
- Cada checkbox deve possuir um label descrevendo a sua ação.
|
|
16
|
+
- Coloque opções importantes no topo.
|
|
17
|
+
|
|
18
|
+
## ⛔ Regras de erro
|
|
19
|
+
|
|
20
|
+
- Não use checkbox para escolhas mutuamente exclusivas. Nesses casos use Radio Button.
|
|
21
|
+
- Não use checkbox para ações que se aplicam imediatamente e alteram a interface em tempo real — isso é papel do Switch.
|
|
22
|
+
- Não apresente checkbox horizontalmente em dispositivos móveis.
|
|
23
|
+
- Não utilize checkbox sem um label claro e explícito.
|
|
24
|
+
- Não agrupe muitas opções horizontalmente. Neste caso use alinhamento vertical.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## ⚠️ Regras de recomendação
|
|
29
|
+
|
|
30
|
+
- Prefira usar checkbox em formulários ou contextos de escolha múltipla de forma persistente.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Dialog — Regras de UX
|
|
2
|
+
|
|
3
|
+
## Variantes
|
|
4
|
+
|
|
5
|
+
| Variante | Quando usar |
|
|
6
|
+
| ------------------------------ | ----------------------------------------------------------------------------- |
|
|
7
|
+
| **Confirmação simples** | Utilizar quando há apenas uma ação possível e não existe reversão. |
|
|
8
|
+
| **Confirmação + Cancelamento** | Utilizar quando o usuário deve ter a opção de prosseguir ou desistir da ação. |
|
|
9
|
+
|
|
10
|
+
# Regras
|
|
11
|
+
|
|
12
|
+
## ⛔ Regras de erro
|
|
13
|
+
|
|
14
|
+
- Não utilizar Dialog para formulários complexos ou com múltiplos campos.
|
|
15
|
+
- Não inserir no Dialog componentes além de título, texto e botões.
|
|
16
|
+
- Não exibir conteúdo secundário ou informações que não interrompam o fluxo do usuário.
|
|
17
|
+
- Não deixar o Dialog sem uma ação clara ou sem possibilidade de fechamento.
|
|
18
|
+
- Não usar quando a mensagem não for importante ou não exigir decisão imediata.
|
|
19
|
+
|
|
20
|
+
## ⚠️ Regras de recomendação
|
|
21
|
+
|
|
22
|
+
- Utilizar o Dialog apenas para interromper o usuário quando necessário.
|
|
23
|
+
- Manter o conteúdo sempre claro, objetivo e focado na decisão.
|
|
24
|
+
- A ação principal deve responder diretamente à pergunta apresentada no título.
|
|
25
|
+
- Usar confirmação única quando não houver alternativa reversível.
|
|
26
|
+
- Em casos críticos, destacar visualmente a ação verdadeira.
|
|
27
|
+
|
|
28
|
+
# Layout e Alinhamento
|
|
29
|
+
|
|
30
|
+
- O Dialog deve ser centralizado na tela em todos os dispositivos.
|
|
31
|
+
- A estrutura deve seguir a ordem: título → texto → ações.
|
|
32
|
+
- Em telas menores, o espaçamento interno pode ser reduzido, mantendo legibilidade.
|
|
33
|
+
|
|
34
|
+
# Responsividade
|
|
35
|
+
|
|
36
|
+
- Deve se adaptar a diferentes larguras sem comprometer a leitura.
|
|
37
|
+
- O fechamento deve ser possível em qualquer tamanho de dispositivo.
|
|
38
|
+
|
|
39
|
+
# Estados
|
|
40
|
+
|
|
41
|
+
| Estado | Descrição |
|
|
42
|
+
| ---------------------------------------- | ---------------------------------------------- |
|
|
43
|
+
| **Default (confirmação simples)** | Exibe texto e um botão de confirmação. |
|
|
44
|
+
| **Default (confirmação + cancelamento)** | Exibe dois botões: confirmar e cancelar. |
|
|
45
|
+
| **Focus** | O foco deve estar no botão principal ao abrir. |
|
|
46
|
+
|
|
47
|
+
# Labels
|
|
48
|
+
|
|
49
|
+
- O título deve apresentar claramente a ação ou decisão.
|
|
50
|
+
- O texto deve complementar o título e reforçar o impacto da ação.
|
|
51
|
+
- Os botões devem usar verbos claros e diretos.
|
|
52
|
+
|
|
53
|
+
# Acessibilidade
|
|
54
|
+
|
|
55
|
+
- O foco deve ser direcionado automaticamente ao botão principal ao abrir o Dialog.
|
|
56
|
+
- Deve permitir navegação por teclado.
|
|
57
|
+
- O overlay deve bloquear interações com o conteúdo principal.
|
|
58
|
+
- O conteúdo deve ser textual e acessível para leitores de tela.
|
|
59
|
+
|
|
60
|
+
# Do’s
|
|
61
|
+
|
|
62
|
+
- Usar para confirmar ações importantes, como exclusões.
|
|
63
|
+
- Manter estrutura simples e objetiva.
|
|
64
|
+
- Garantir mensagens curtas e diretas.
|
|
65
|
+
- Interromper o usuário apenas quando necessário para validação crítica.
|
|
66
|
+
|
|
67
|
+
# Don’ts
|
|
68
|
+
|
|
69
|
+
- Não usar para formulários longos.
|
|
70
|
+
- Não inserir múltiplos componentes ou conteúdos complexos.
|
|
71
|
+
- Não usar para mensagens informativas que não exigem ação.
|
|
72
|
+
- Não deixar ações ambíguas ou pouco claras.
|
|
73
|
+
|
|
74
|
+
# Boas práticas de UX
|
|
75
|
+
|
|
76
|
+
- Escrever mensagens diretas e sem redundância.
|
|
77
|
+
- Formular perguntas como “Deseja excluir este item?”.
|
|
78
|
+
- A ação principal deve refletir a escolha mais esperada pelo usuário.
|
|
79
|
+
- Evitar gerar ansiedade: comunicação simples, calma e objetiva.
|
|
80
|
+
|
|
81
|
+
# Anti-patterns
|
|
82
|
+
|
|
83
|
+
- Usar Dialog como substituto de modais complexos.
|
|
84
|
+
- Criar sequências de Dialogs em cadeia.
|
|
85
|
+
- Exibir feedback simples que poderia ser apresentado inline ou como toast.
|
|
86
|
+
- Interromper o usuário para ações triviais.
|
|
File without changes
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# ConfirmDialog — Guia Técnico
|
|
2
|
+
|
|
3
|
+
**Seletor:** `s-confirm-dialog`
|
|
4
|
+
**Package:** `@seniorsistemas/angular-components/confirm-dialog`
|
|
5
|
+
|
|
6
|
+
## Exports e Imports
|
|
7
|
+
|
|
8
|
+
| Tipo | Símbolo |
|
|
9
|
+
| ------- | ---------------------- |
|
|
10
|
+
| Service | `ConfirmDialogService` |
|
|
11
|
+
| Type | `ConfirmDialog` |
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';
|
|
15
|
+
import type { ConfirmDialog } from '@seniorsistemas/angular-components/confirm-dialog';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
> **Erro comum:** `Module has no exported member 'ConfirmDialogModule'` — use `ConfirmDialogService` diretamente; não existe `ConfirmDialogModule` público nesta versão.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
O ConfirmDialog é **SEMPRE** utilizado via `ConfirmDialogService`. O componente `s-confirm-dialog` **não deve ser instanciado diretamente** no template — ele é renderizado internamente pelo serviço.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Padrão único: Via `ConfirmDialogService` ✅ ÚNICO PADRÃO SUPORTADO
|
|
27
|
+
|
|
28
|
+
Abre um dialog de confirmação com mensagem, título e botões configuráveis. Retorna uma `Promise<boolean>` que resolve com `true` se o usuário confirmar e `false` se cancelar.
|
|
29
|
+
|
|
30
|
+
### Regras obrigatórias
|
|
31
|
+
|
|
32
|
+
- **NUNCA** adicionar `<s-confirm-dialog>` diretamente no template — o serviço gerencia isso automaticamente
|
|
33
|
+
- Importar `ConfirmDialogModule` no módulo ou componente raiz para registrar o componente
|
|
34
|
+
|
|
35
|
+
### Exemplo
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { ConfirmDialogModule, ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';
|
|
39
|
+
|
|
40
|
+
@Component({
|
|
41
|
+
imports: [ConfirmDialogModule],
|
|
42
|
+
template: `
|
|
43
|
+
<s-button
|
|
44
|
+
label="Deletar"
|
|
45
|
+
(clicked)="delete()"
|
|
46
|
+
/>
|
|
47
|
+
`,
|
|
48
|
+
})
|
|
49
|
+
export class MyComponent {
|
|
50
|
+
private readonly confirmDialog = inject(ConfirmDialogService);
|
|
51
|
+
|
|
52
|
+
protected async delete(): Promise<void> {
|
|
53
|
+
const confirmed = await this.confirmDialog.open({
|
|
54
|
+
header: 'Confirmar exclusão',
|
|
55
|
+
message: 'Tem certeza que deseja excluir este registro? Esta ação não pode ser desfeita.',
|
|
56
|
+
acceptLabel: 'Excluir',
|
|
57
|
+
rejectLabel: 'Cancelar',
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (confirmed) {
|
|
61
|
+
// prosseguir com a exclusão
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Notas de integração
|
|
70
|
+
|
|
71
|
+
- `ConfirmDialogService.open()` retorna `Promise<boolean>`: use `async/await` ou `.then()` para aguardar a resposta do usuário.
|
|
72
|
+
- Personalize os labels dos botões via `acceptLabel` e `rejectLabel` para dar clareza à ação (ex: `'Excluir'` ao invés de `'Ok'`).
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Erros Comuns
|
|
77
|
+
|
|
78
|
+
### `Property 'open' does not exist on type 'ConfirmDialogService'`
|
|
79
|
+
|
|
80
|
+
**Tipo:** method
|
|
81
|
+
**Solução:** Use `confirm()` em vez de `open()`.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
// ❌ Incorreto
|
|
85
|
+
await this.confirmDialogService.open({ ... })
|
|
86
|
+
|
|
87
|
+
// ✅ Correto
|
|
88
|
+
this.confirmDialogService.confirm({ ... })
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
> `ConfirmDialogService` desta versão expõe o método `confirm(confirmDialog)`.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### `Type 'Promise<boolean>' is not assignable...`
|
|
96
|
+
|
|
97
|
+
**Tipo:** return-type
|
|
98
|
+
**Solução:** Não use `await` no retorno de `confirm()`; o fluxo ocorre via callbacks `accept`/`reject`.
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// ❌ Incorreto
|
|
102
|
+
const ok = await confirmDialogService.confirm(config);
|
|
103
|
+
|
|
104
|
+
// ✅ Correto
|
|
105
|
+
confirmDialogService.confirm({
|
|
106
|
+
...config,
|
|
107
|
+
accept: () => {
|
|
108
|
+
/* ação confirmada */
|
|
109
|
+
},
|
|
110
|
+
reject: () => {
|
|
111
|
+
/* ação cancelada */
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
> O método `confirm()` não retorna `Promise` nesta implementação.
|
|
117
|
+
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Dialog — Guia Técnico
|
|
2
|
+
|
|
3
|
+
**Seletor:** `s-dialog`
|
|
4
|
+
**Package:** `@seniorsistemas/angular-components/dialog`
|
|
5
|
+
|
|
6
|
+
## Exports e Imports
|
|
7
|
+
|
|
8
|
+
| Tipo | Símbolo |
|
|
9
|
+
| --------- | ---------------------------- |
|
|
10
|
+
| Component | `DialogComponent` |
|
|
11
|
+
| Service | `DialogService` |
|
|
12
|
+
| Class | `ActiveDialog` |
|
|
13
|
+
| Types | `DialogOptions`, `DialogRef` |
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { DialogComponent } from '@seniorsistemas/angular-components/dialog';
|
|
17
|
+
import { DialogService } from '@seniorsistemas/angular-components/dialog';
|
|
18
|
+
import { ActiveDialog } from '@seniorsistemas/angular-components/dialog';
|
|
19
|
+
import type { DialogOptions, DialogRef } from '@seniorsistemas/angular-components/dialog';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
> **Erros comuns:**
|
|
23
|
+
>
|
|
24
|
+
> - `Module has no exported member 'DialogModule'` → use `DialogComponent` standalone
|
|
25
|
+
> - `Module has no exported member 'DynamicDialogRef'` → use `DialogRef` e `ActiveDialog`
|
|
26
|
+
> - `Module has no exported member 'DIALOG_DATA'` → use padrão `ActiveDialog`/`DialogRef`
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
O Dialog pode ser controlado de forma declarativa via binding de propriedade ou de forma programática via `DialogService`. A forma de uso deve ser escolhida conforme o contexto de onde o dialog será aberto.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Padrão 1: Declarativo via `[(visible)]`
|
|
35
|
+
|
|
36
|
+
**Preferido:** Não (use apenas para casos simples)
|
|
37
|
+
|
|
38
|
+
O estado de abertura é controlado por uma propriedade booleana no componente pai, vinculada via two-way binding `[(visible)]`.
|
|
39
|
+
|
|
40
|
+
### Exemplo
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { DialogModule } from '@seniorsistemas/angular-components/dialog';
|
|
44
|
+
|
|
45
|
+
@Component({
|
|
46
|
+
imports: [DialogModule],
|
|
47
|
+
template: `
|
|
48
|
+
<s-button
|
|
49
|
+
label="Abrir"
|
|
50
|
+
(clicked)="isOpen = true"
|
|
51
|
+
/>
|
|
52
|
+
<s-dialog
|
|
53
|
+
[(visible)]="isOpen"
|
|
54
|
+
header="Título"
|
|
55
|
+
>
|
|
56
|
+
<ng-template sTemplate="body"> Conteúdo do dialog </ng-template>
|
|
57
|
+
<ng-template sTemplate="footer">
|
|
58
|
+
<s-button
|
|
59
|
+
label="Fechar"
|
|
60
|
+
(clicked)="isOpen = false"
|
|
61
|
+
/>
|
|
62
|
+
</ng-template>
|
|
63
|
+
</s-dialog>
|
|
64
|
+
`,
|
|
65
|
+
})
|
|
66
|
+
export class MyComponent {
|
|
67
|
+
protected isOpen = false;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Padrão 2: Programático via `DialogService` ✅ PREFERIDO
|
|
74
|
+
|
|
75
|
+
O dialog é aberto injetando o `DialogService`, que cria e renderiza o componente dinamicamente. Permite abrir dialogs de qualquer lugar da aplicação, inclusive de serviços.
|
|
76
|
+
|
|
77
|
+
### Exemplo
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { DialogComponent, DialogService } from '@seniorsistemas/angular-components/dialog';
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
// No componente ou serviço que abre o dialog
|
|
84
|
+
@Component({ ... })
|
|
85
|
+
export class MyComponent {
|
|
86
|
+
private readonly dialogService = inject(DialogService);
|
|
87
|
+
|
|
88
|
+
protected openDialog(): void {
|
|
89
|
+
this.dialogService.open(MyDialogContentComponent, {
|
|
90
|
+
header: 'Título do Dialog',
|
|
91
|
+
data: { id: 1 }
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Componente de conteúdo do dialog
|
|
97
|
+
@Component({
|
|
98
|
+
imports: [DialogComponent, TemplateModule]
|
|
99
|
+
template: `
|
|
100
|
+
<s-dialog header="Dialog Header">
|
|
101
|
+
<!-- TODO: Campo opcional, utilizar quando [header] não for provido, caso queira HTML Customizado para o header. -->
|
|
102
|
+
<ng-template sTemplate="header"></ng-template>
|
|
103
|
+
|
|
104
|
+
<p>Id recebido: {{ data.id }}</p>
|
|
105
|
+
<!-- TODO: Campo opcional. -->
|
|
106
|
+
<ng-template
|
|
107
|
+
sTemplate="footer"
|
|
108
|
+
let-activeDialog="activeDialog">
|
|
109
|
+
<div class="grid grid-cols-12">
|
|
110
|
+
<div class="col-span-12 flex justify-around">
|
|
111
|
+
<s-button
|
|
112
|
+
label="Ação terciária"
|
|
113
|
+
priority="link"
|
|
114
|
+
/>
|
|
115
|
+
<s-button
|
|
116
|
+
(clicked)="activeDialog.dismiss('Dismissed dialog demo footer')"
|
|
117
|
+
label="Ação secundária"
|
|
118
|
+
/>
|
|
119
|
+
<s-button
|
|
120
|
+
label="Ação primária"
|
|
121
|
+
(clicked)="activeDialog.close('Closed dialog demo footer')"
|
|
122
|
+
priority="primary"
|
|
123
|
+
/>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</ng-template>
|
|
127
|
+
|
|
128
|
+
</s-dialog>
|
|
129
|
+
|
|
130
|
+
`
|
|
131
|
+
})
|
|
132
|
+
export class MyDialogContentComponent {
|
|
133
|
+
readonly activeDialog = inject(ActiveDialog);
|
|
134
|
+
|
|
135
|
+
// Função opcional, caso utilize let-activeDialog no ng-template nao precisa fechar por aqui, ambos possuem o mesmo valor de activeDialog
|
|
136
|
+
protected close(): void {
|
|
137
|
+
this.activeDialog.close('resultado opcional');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Notas de integração
|
|
145
|
+
|
|
146
|
+
- O `<s-dialog>` deve existir no template para que o `DialogService` possa renderizar conteúdo nele. Coloque-o em um componente de layout de nível superior.
|
|
147
|
+
- Para receber dados no componente de conteúdo, use `inject(DIALOG_DATA)` importado de `@seniorsistemas/angular-components/dialog`.
|
|
148
|
+
- Para fechar o dialog de dentro do componente de conteúdo, injete `DynamicDialogRef` e chame `ref.close(resultado)`.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Erros Comuns
|
|
153
|
+
|
|
154
|
+
### `Module has no exported member 'DialogModule'`
|
|
155
|
+
|
|
156
|
+
**Tipo:** import
|
|
157
|
+
**Solução:** Use standalone import com `DialogComponent`.
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
// ❌ Incorreto
|
|
161
|
+
imports: [DialogModule];
|
|
162
|
+
|
|
163
|
+
// ✅ Correto
|
|
164
|
+
imports: [DialogComponent];
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
> Nesta versão, o public API expõe `DialogComponent` para uso declarativo.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### `Property 'onClose' does not exist on type 'DialogRef'`
|
|
172
|
+
|
|
173
|
+
**Tipo:** property
|
|
174
|
+
**Solução:** Use o observable `closed`.
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// ❌ Incorreto
|
|
178
|
+
ref.onClose.subscribe(...)
|
|
179
|
+
|
|
180
|
+
// ✅ Correto
|
|
181
|
+
ref.closed.subscribe(...)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
> `DialogRef` expõe `closed` e `dismissed`.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### `Object literal may only specify known properties, and 'header' does not exist in type 'DialogOptions'`
|
|
189
|
+
|
|
190
|
+
**Tipo:** parameter
|
|
191
|
+
**Solução:** Use apenas as `DialogOptions` suportadas (`destroyClickOutside`, `escapeOnEsc`, `size`).
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// ❌ Incorreto
|
|
195
|
+
dialogService.open(MyDialogComponent, { header: 'Título' });
|
|
196
|
+
|
|
197
|
+
// ✅ Correto
|
|
198
|
+
dialogService.open(MyDialogComponent, { size: 'md' });
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
> `DialogOptions` nesta versão não inclui `header`/`data` no tipo público.
|
|
202
|
+
|