@po-ui/ng-components 21.22.0 → 21.23.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/fesm2022/po-ui-ng-components.mjs +7143 -5942
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-field/index.d.ts +7 -0
- package/lib/components/po-field/po-field.module.d.ts +1 -2
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-column.interface.d.ts +39 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals-default.interface.d.ts +7 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals.interface.d.ts +13 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai.interface.d.ts +109 -0
- package/lib/components/po-field/po-search-ai/po-search-ai-base.component.d.ts +229 -0
- package/lib/components/po-field/po-search-ai/po-search-ai-odata-filter.d.ts +38 -0
- package/lib/components/po-field/po-search-ai/po-search-ai-utils.d.ts +12 -0
- package/lib/components/po-field/po-search-ai/po-search-ai.component.d.ts +58 -0
- package/lib/components/po-field/po-search-ai/po-search-ai.module.d.ts +9 -0
- package/lib/components/po-field/po-search-ai/po-search-ai.service.d.ts +34 -0
- package/lib/components/po-table/index.d.ts +1 -0
- package/lib/components/po-table/interfaces/po-table-column.interface.d.ts +14 -0
- package/lib/components/po-table/interfaces/po-table-literals.interface.d.ts +2 -0
- package/lib/components/po-table/interfaces/po-table-search-ai-field.interface.d.ts +122 -0
- package/lib/components/po-table/po-table-base.component.d.ts +69 -0
- package/lib/components/po-table/po-table.component.d.ts +51 -0
- package/package.json +4 -4
- package/po-ui-ng-components-21.23.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v19/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v20/index.js +2 -2
- package/schematics/ng-update/v21/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/types/po-ui-ng-components.d.ts +10413 -9633
- package/po-ui-ng-components-21.22.0.tgz +0 -0
|
@@ -24,6 +24,13 @@ export * from './po-decimal/po-decimal.component';
|
|
|
24
24
|
export * from './po-email/po-email.component';
|
|
25
25
|
export * from './po-input/po-input.component';
|
|
26
26
|
export * from './po-input/po-mask';
|
|
27
|
+
export * from './po-search-ai/po-search-ai.component';
|
|
28
|
+
export * from './po-search-ai/po-search-ai.module';
|
|
29
|
+
export * from './po-search-ai/po-search-ai.service';
|
|
30
|
+
export * from './po-search-ai/po-search-ai-odata-filter';
|
|
31
|
+
export * from './po-search-ai/interfaces/po-search-ai-column.interface';
|
|
32
|
+
export * from './po-search-ai/interfaces/po-search-ai.interface';
|
|
33
|
+
export * from './po-search-ai/interfaces/po-search-ai-literals.interface';
|
|
27
34
|
export * from './po-login/po-login.component';
|
|
28
35
|
export * from './po-lookup/interfaces/po-lookup-column.interface';
|
|
29
36
|
export * from './po-lookup/interfaces/po-lookup-filter.interface';
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* @description
|
|
3
3
|
*
|
|
4
4
|
* Módulo dos componentes: po-checkbox, po-checkbox-group, po-combo, po-datepicker, po-datetimepicker, po-datepicker-range, po-email, po-input,
|
|
5
|
-
* po-lookup, po-number, po-multiselect, po-password, po-radio-group, po-select, po-switch, po-textarea, po-upload
|
|
6
|
-
* e po-url.
|
|
5
|
+
* po-lookup, po-number, po-multiselect, po-password, po-radio-group, po-select, po-switch, po-textarea, po-upload, po-url e po-search-ai.
|
|
7
6
|
*
|
|
8
7
|
* > Não esqueça de importar o módulo `FormsModule` para usar os componentes de formulários e caso esteja trabalhando com
|
|
9
8
|
* > formulários reativos, importe o módulo `ReactiveFormsModule`, ambos nativos do Angular.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @usedBy PoSearchAiComponent
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
*
|
|
6
|
+
* Interface que define os metadados de uma coluna/campo enviados ao endpoint de IA
|
|
7
|
+
* para contextualizar a interpretação da busca em linguagem natural.
|
|
8
|
+
*
|
|
9
|
+
* Esses metadados ajudam o provedor de IA a mapear os termos digitados pelo usuário
|
|
10
|
+
* para as propriedades reais dos dados e a gerar um filtro (por exemplo, OData) coerente.
|
|
11
|
+
*/
|
|
12
|
+
export interface PoSearchAiColumn {
|
|
13
|
+
/** Nome da propriedade do campo (ex: `name`, `age`, `city`). */
|
|
14
|
+
property: string;
|
|
15
|
+
/** Rótulo legível exibido ao usuário (ex: `Nome`, `Idade`, `Cidade`). */
|
|
16
|
+
label: string;
|
|
17
|
+
/**
|
|
18
|
+
* Tipo do campo, utilizado pela IA para gerar comparações adequadas.
|
|
19
|
+
*
|
|
20
|
+
* Valores comuns: `string`, `number`, `date`, `currency`, `boolean`.
|
|
21
|
+
*
|
|
22
|
+
* @default `string`
|
|
23
|
+
*/
|
|
24
|
+
type?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @docsPrivate
|
|
28
|
+
*
|
|
29
|
+
* Formato de entrada aceito por `extractColumnsMetadata`: superconjunto de `PoSearchAiColumn`
|
|
30
|
+
* que inclui campos de controle de visibilidade usados por consumidores como o `po-table`.
|
|
31
|
+
*/
|
|
32
|
+
export interface PoSearchAiColumnInput {
|
|
33
|
+
property?: string;
|
|
34
|
+
label?: string;
|
|
35
|
+
type?: string;
|
|
36
|
+
/** Quando `true`, a coluna é excluída dos metadados enviados à IA. Padrão: `false`. */
|
|
37
|
+
searchAiIgnore?: boolean;
|
|
38
|
+
visible?: boolean;
|
|
39
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @usedBy PoSearchAiComponent
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
*
|
|
6
|
+
* Interface para definição das literais usadas no `po-search-ai`.
|
|
7
|
+
*/
|
|
8
|
+
export interface PoSearchAiLiterals {
|
|
9
|
+
/** Texto de acessibilidade do botão de limpar o campo. */
|
|
10
|
+
clean?: string;
|
|
11
|
+
/** Mensagem exibida quando a busca com IA falha. */
|
|
12
|
+
errorMessage?: string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { PoSearchAiColumn } from './po-search-ai-column.interface';
|
|
2
|
+
/**
|
|
3
|
+
* @usedBy PoSearchAiComponent
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
*
|
|
7
|
+
* Enum que define os tipos de resposta suportados pelo endpoint de IA.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export declare enum PoSearchAiResponseType {
|
|
11
|
+
/** Resposta contendo um filtro estruturado (ex: OData). */
|
|
12
|
+
filter = "filter",
|
|
13
|
+
/** Resposta conversacional em linguagem natural. */
|
|
14
|
+
chat = "chat",
|
|
15
|
+
/** Payload genérico definido pelo consumidor. */
|
|
16
|
+
custom = "custom"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @usedBy PoSearchAiComponent
|
|
20
|
+
*
|
|
21
|
+
* @description
|
|
22
|
+
*
|
|
23
|
+
* Interface que define o payload enviado ao endpoint de IA configurado via `p-url`.
|
|
24
|
+
*
|
|
25
|
+
* O componente é **agnóstico ao provedor de IA**: o backend (proxy) recebe este payload,
|
|
26
|
+
* encaminha para a LLM e retorna um `PoSearchAiResponse`.
|
|
27
|
+
*/
|
|
28
|
+
export interface PoSearchAiRequest {
|
|
29
|
+
/** Texto em linguagem natural digitado pelo usuário. */
|
|
30
|
+
query: string;
|
|
31
|
+
/** Metadados dos campos disponíveis para a busca (ver `PoSearchAiColumn`). */
|
|
32
|
+
columns: Array<PoSearchAiColumn>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @usedBy PoSearchAiComponent
|
|
36
|
+
*
|
|
37
|
+
* @description
|
|
38
|
+
*
|
|
39
|
+
* Interface que define a resposta esperada do endpoint de IA configurado via `p-url`.
|
|
40
|
+
*/
|
|
41
|
+
export interface PoSearchAiResponse {
|
|
42
|
+
/**
|
|
43
|
+
* Tipo da resposta retornada pela IA.
|
|
44
|
+
*
|
|
45
|
+
* Quando omitido, o componente infere `'filter'` se `filter` estiver presente,
|
|
46
|
+
* caso contrário assume `'custom'`.
|
|
47
|
+
*
|
|
48
|
+
* @default `'filter'`
|
|
49
|
+
*/
|
|
50
|
+
type?: PoSearchAiResponseType;
|
|
51
|
+
/**
|
|
52
|
+
* Filtro gerado pela IA, normalmente no padrão OData
|
|
53
|
+
* (ex: `age gt 30 and city eq 'São Paulo'`).
|
|
54
|
+
*
|
|
55
|
+
* Utilizado quando `type` é `'filter'`.
|
|
56
|
+
*/
|
|
57
|
+
filter?: string;
|
|
58
|
+
/** Descrição legível, em linguagem natural, da resposta. */
|
|
59
|
+
description?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Nível de confiança da interpretação da IA, em um intervalo de `0.0` a `1.0`.
|
|
62
|
+
*
|
|
63
|
+
* Utilizado em conjunto com `p-min-confidence` para decidir se o resultado é confiável.
|
|
64
|
+
*/
|
|
65
|
+
confidence?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Payload genérico da resposta da IA (mensagem de chat, ações, dados customizados, etc.).
|
|
68
|
+
*
|
|
69
|
+
* Utilizado quando `type` é `'chat'` ou `'custom'`.
|
|
70
|
+
*/
|
|
71
|
+
data?: Record<string, any>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @usedBy PoSearchAiComponent
|
|
75
|
+
*
|
|
76
|
+
* @description
|
|
77
|
+
*
|
|
78
|
+
* Interface que define o objeto emitido pelos eventos `p-result` e `p-low-confidence`.
|
|
79
|
+
*/
|
|
80
|
+
export interface PoSearchAiResult {
|
|
81
|
+
/** Texto original digitado pelo usuário. */
|
|
82
|
+
query: string;
|
|
83
|
+
/** Tipo da resposta retornada pela IA. */
|
|
84
|
+
type: PoSearchAiResponseType;
|
|
85
|
+
/** Filtro retornado pela IA (ex: filtro OData). Presente quando `type` é `'filter'`. */
|
|
86
|
+
filter?: string;
|
|
87
|
+
/** Descrição legível da resposta. */
|
|
88
|
+
description?: string;
|
|
89
|
+
/** Nível de confiança da interpretação (`0.0` a `1.0`). */
|
|
90
|
+
confidence?: number;
|
|
91
|
+
/** Payload genérico da resposta (chat, ações, dados customizados, etc.). */
|
|
92
|
+
data?: Record<string, any>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @usedBy PoSearchAiComponent
|
|
96
|
+
*
|
|
97
|
+
* @description
|
|
98
|
+
*
|
|
99
|
+
* Interface que define o objeto emitido pelo evento `p-error` quando a chamada à
|
|
100
|
+
* API de IA falha (erro HTTP, timeout, resposta inválida, etc.).
|
|
101
|
+
*/
|
|
102
|
+
export interface PoSearchAiError {
|
|
103
|
+
/** Texto original digitado pelo usuário. */
|
|
104
|
+
query: string;
|
|
105
|
+
/** Código HTTP do erro (ex: `500`, `408` para timeout). */
|
|
106
|
+
statusCode: number;
|
|
107
|
+
/** Mensagem de erro. */
|
|
108
|
+
message: string;
|
|
109
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { AbstractControl } from '@angular/forms';
|
|
2
|
+
import { OnDestroy } from '@angular/core';
|
|
3
|
+
import { Subscription } from 'rxjs';
|
|
4
|
+
import { PoInputGeneric } from '../po-input-generic/po-input-generic';
|
|
5
|
+
import { PoSearchAiColumn } from './interfaces/po-search-ai-column.interface';
|
|
6
|
+
import { PoSearchAiLiterals } from './interfaces/po-search-ai-literals.interface';
|
|
7
|
+
import { PoSearchAiError, PoSearchAiResult } from './interfaces/po-search-ai.interface';
|
|
8
|
+
import { PoSearchAiService } from './po-search-ai.service';
|
|
9
|
+
/**
|
|
10
|
+
* @description
|
|
11
|
+
*
|
|
12
|
+
* O `po-search-ai` é um componente de **busca em linguagem natural** baseado em input.
|
|
13
|
+
* Ele permite que o usuário digite uma consulta em texto livre (por exemplo,
|
|
14
|
+
* *"clientes de SP com saldo acima de R$ 500"*) e a converte, através de um provedor de IA,
|
|
15
|
+
* em um filtro estruturado (normalmente OData) que pode ser aplicado por outro componente,
|
|
16
|
+
* como o [`po-table`](/documentation/po-table).
|
|
17
|
+
*
|
|
18
|
+
* > **Componente experimental:** o `po-search-ai` está em fase experimental. Sua API
|
|
19
|
+
* > (propriedades, eventos e contrato com o backend) pode sofrer alterações
|
|
20
|
+
* > entre versões. Utilize com cautela em ambientes de produção.
|
|
21
|
+
*
|
|
22
|
+
* O componente é **agnóstico ao provedor de IA**. Toda a comunicação ocorre através do
|
|
23
|
+
* endpoint informado em `p-url`, que recebe `{ query, columns }` e deve retornar
|
|
24
|
+
* `{ filter, description, confidence }`. Isso garante que nenhuma chave de IA seja
|
|
25
|
+
* exposta no client-side — a integração com a LLM é responsabilidade do backend (proxy).
|
|
26
|
+
*
|
|
27
|
+
* Por herdar de `po-input`, o componente suporta as propriedades comuns de formulário
|
|
28
|
+
* (label, help, helper, required, disabled, readonly, size, clean, loading, etc.) e
|
|
29
|
+
* integra-se a formulários `template-driven` e `reactive`.
|
|
30
|
+
*
|
|
31
|
+
* #### Endpoint de IA (backend)
|
|
32
|
+
*
|
|
33
|
+
* O componente **não conversa diretamente com a LLM**. Você deve disponibilizar um endpoint
|
|
34
|
+
* próprio (proxy) e informá-lo em `p-url`.
|
|
35
|
+
* É nesse backend que devem ficar a chave de acesso da IA e as regras usadas para montar
|
|
36
|
+
* o prompt. Essas informações nunca devem ficar expostas no client-side
|
|
37
|
+
*
|
|
38
|
+
* O contrato é simples. O componente faz um `POST` enviando:
|
|
39
|
+
*
|
|
40
|
+
* ```json
|
|
41
|
+
* {
|
|
42
|
+
* "query": "funcionários de São Paulo com salário acima de 5000",
|
|
43
|
+
* "columns": [
|
|
44
|
+
* { "property": "name", "label": "Nome", "type": "string" },
|
|
45
|
+
* { "property": "city", "label": "Cidade", "type": "string" },
|
|
46
|
+
* { "property": "salary", "label": "Salário", "type": "number" }
|
|
47
|
+
* ]
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* E o endpoint deve responder com:
|
|
52
|
+
*
|
|
53
|
+
* ```json
|
|
54
|
+
* {
|
|
55
|
+
* "filter": "city eq 'São Paulo' and salary gt 5000",
|
|
56
|
+
* "description": "Funcionários de São Paulo com salário acima de 5000",
|
|
57
|
+
* "confidence": 0.92
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* Onde `filter` é o filtro estruturado gerado pela IA (normalmente OData), `description` é um
|
|
62
|
+
* resumo legível e `confidence` (`0.0` a `1.0`) indica o quão confiável foi a interpretação —
|
|
63
|
+
* comparado com `p-min-confidence` para decidir entre os eventos `p-result` e `p-low-confidence`.
|
|
64
|
+
*
|
|
65
|
+
* > **Exemplo de implementação:** o PO UI mantém um backend de referência, open source, que recebe
|
|
66
|
+
* > esse contrato e o encaminha para um provedor de IA (Groq/Gemini).
|
|
67
|
+
* > - Endpoint público: [`/v1/ai/filter`](https://po-sample-api.onrender.com/api#/ai)
|
|
68
|
+
* > - Código-fonte: [po-sample-api/src/ai/ai.service.ts](https://github.com/po-ui/po-sample-api/blob/main/src/ai/ai.service.ts)
|
|
69
|
+
*
|
|
70
|
+
* #### Estados de comportamento
|
|
71
|
+
*
|
|
72
|
+
* - **Idle:** aguardando a digitação da consulta.
|
|
73
|
+
* - **Loading:** consulta em andamento (ícone de carregamento ativo).
|
|
74
|
+
* - **Aplicado:** após uma resposta bem-sucedida, exibe um feedback persistente de
|
|
75
|
+
* "filtro aplicado via IA" enquanto a consulta estiver ativa, com opção de limpeza rápida.
|
|
76
|
+
* - **Baixa confiança:** quando `confidence` for menor que `p-min-confidence`, emite
|
|
77
|
+
* `p-low-confidence` e não aplica o filtro automaticamente.
|
|
78
|
+
* - **Erro:** quando a chamada falha, emite `p-error`.
|
|
79
|
+
*
|
|
80
|
+
* #### Tokens customizáveis
|
|
81
|
+
*
|
|
82
|
+
* É possível alterar o estilo do componente usando os seguintes tokens (CSS):
|
|
83
|
+
*
|
|
84
|
+
* > Para maiores informações, acesse o guia [Personalizando o Tema Padrão com Tokens CSS](https://po-ui.io/guides/theme-customization).
|
|
85
|
+
*
|
|
86
|
+
* | Propriedade | Descrição | Valor Padrão |
|
|
87
|
+
* |-------------------------------|-----------------------------------------------------------------|------------------------------------|
|
|
88
|
+
* | **Default** | | |
|
|
89
|
+
* | `--font-family` | Família tipográfica do campo | `var(--font-family-theme)` |
|
|
90
|
+
* | `--font-size` | Tamanho da fonte do campo | `var(--font-size)` |
|
|
91
|
+
* | `--text-color` | Cor do texto digitado | `var(--color-neutral-dark-90)` |
|
|
92
|
+
* | `--text-color-placeholder` | Cor do texto do placeholder | `var(--color-neutral-light-30)` |
|
|
93
|
+
* | `--color` | Cor da borda do campo | `var(--color-neutral-dark-70)` |
|
|
94
|
+
* | `--background` | Cor de fundo do campo | `var(--color-neutral-light-05)` |
|
|
95
|
+
* | `--border-radius` | Raio da borda do campo | `var(--border-radius-md)` |
|
|
96
|
+
* | **Ícones e divisória** | | |
|
|
97
|
+
* | `--color-icon-read` | Cor do ícone de busca por IA | `var(--color-neutral-dark-70)` |
|
|
98
|
+
* | `--color-divider` | Cor da divisória vertical entre o campo e o botão de busca | `var(--color-neutral-mid-40)` |
|
|
99
|
+
* | `--color-icon-processing` | Cor do ícone exibido enquanto a consulta está sendo processada | `var(--color-action-default)` |
|
|
100
|
+
* | **Hover** | | |
|
|
101
|
+
* | `--color-hover` | Cor da borda no estado hover | `var(--color-brand-01-dark)` |
|
|
102
|
+
* | `--background-hover` | Cor de fundo no estado hover | `var(--color-brand-01-lightest)` |
|
|
103
|
+
* | **Focused** | | |
|
|
104
|
+
* | `--color-focused` | Cor da borda no estado de foco | `var(--color-action-default)` |
|
|
105
|
+
* | `--outline-color-focused` | Cor do outline no estado de foco | `var(--color-action-focus)` |
|
|
106
|
+
* | **Disabled** | | |
|
|
107
|
+
* | `--color-disabled` | Cor da borda no estado desabilitado | `var(--color-neutral-light-30)` |
|
|
108
|
+
* | `--background-disabled` | Cor de fundo no estado desabilitado | `var(--color-neutral-light-20)` |
|
|
109
|
+
*/
|
|
110
|
+
export declare abstract class PoSearchAiBaseComponent extends PoInputGeneric implements OnDestroy {
|
|
111
|
+
protected aiErrorMessage: string;
|
|
112
|
+
protected aiLoading: boolean;
|
|
113
|
+
protected aiSubscription: Subscription;
|
|
114
|
+
/**
|
|
115
|
+
* @optional
|
|
116
|
+
*
|
|
117
|
+
* @description
|
|
118
|
+
*
|
|
119
|
+
* Evento disparado quando o filtro aplicado via IA é limpo, seja pela ação do usuário
|
|
120
|
+
* ou programaticamente. Não emite valor.
|
|
121
|
+
*/
|
|
122
|
+
clearEvent: import("@angular/core").OutputEmitterRef<void>;
|
|
123
|
+
/**
|
|
124
|
+
* @optional
|
|
125
|
+
*
|
|
126
|
+
* @description
|
|
127
|
+
*
|
|
128
|
+
* Metadados das colunas/campos disponíveis para a busca por IA. Essas informações são
|
|
129
|
+
* enviadas ao endpoint configurado em `p-url` para que a IA mapeie os termos digitados
|
|
130
|
+
* para as propriedades reais dos dados.
|
|
131
|
+
*
|
|
132
|
+
* @default `[]`
|
|
133
|
+
*/
|
|
134
|
+
columns: import("@angular/core").InputSignal<PoSearchAiColumn[]>;
|
|
135
|
+
protected readonly effectiveLiterals: import("@angular/core").Signal<any>;
|
|
136
|
+
/**
|
|
137
|
+
* @optional
|
|
138
|
+
*
|
|
139
|
+
* @description
|
|
140
|
+
*
|
|
141
|
+
* Evento disparado quando a chamada à API de IA falha (erro HTTP, timeout, etc.).
|
|
142
|
+
* Emite um objeto `PoSearchAiError`.
|
|
143
|
+
*/
|
|
144
|
+
error: import("@angular/core").OutputEmitterRef<PoSearchAiError>;
|
|
145
|
+
private readonly language;
|
|
146
|
+
/**
|
|
147
|
+
* @optional
|
|
148
|
+
*
|
|
149
|
+
* @description
|
|
150
|
+
*
|
|
151
|
+
* Objeto com os literais usados no componente. Permite sobrescrever as mensagens padrão
|
|
152
|
+
* para internacionalização ou customização.
|
|
153
|
+
*/
|
|
154
|
+
literals: import("@angular/core").InputSignal<PoSearchAiLiterals>;
|
|
155
|
+
/**
|
|
156
|
+
* @optional
|
|
157
|
+
*
|
|
158
|
+
* @description
|
|
159
|
+
*
|
|
160
|
+
* Evento disparado quando a confiança da resposta da IA é menor que `p-min-confidence`.
|
|
161
|
+
* Emite um objeto `PoSearchAiResult`, permitindo ao desenvolvedor decidir o que fazer
|
|
162
|
+
* (ex: confirmar com o usuário antes de aplicar o filtro).
|
|
163
|
+
*/
|
|
164
|
+
lowConfidence: import("@angular/core").OutputEmitterRef<PoSearchAiResult>;
|
|
165
|
+
/**
|
|
166
|
+
* @optional
|
|
167
|
+
*
|
|
168
|
+
* @description
|
|
169
|
+
*
|
|
170
|
+
* Nível mínimo de confiança (`0.0` a `1.0`) para que o resultado da IA seja considerado
|
|
171
|
+
* confiável. Quando a confiança retornada for menor, o evento `p-low-confidence` é
|
|
172
|
+
* emitido em vez de `p-result`.
|
|
173
|
+
*
|
|
174
|
+
* @default `0.5`
|
|
175
|
+
*/
|
|
176
|
+
minConfidence: import("@angular/core").InputSignalWithTransform<number, number>;
|
|
177
|
+
/**
|
|
178
|
+
* @optional
|
|
179
|
+
*
|
|
180
|
+
* @description
|
|
181
|
+
*
|
|
182
|
+
* Evento disparado quando a IA retorna um resultado com confiança maior ou igual a
|
|
183
|
+
* `p-min-confidence`. Emite um objeto `PoSearchAiResult`.
|
|
184
|
+
*
|
|
185
|
+
* O campo `type` do resultado indica como o consumidor deve interpretar a resposta:
|
|
186
|
+
*
|
|
187
|
+
* - **`filter`** _(padrão)_: a IA retornou um filtro estruturado (ex: OData). Use `result.filter`
|
|
188
|
+
* para aplicar a consulta à fonte de dados — por exemplo, passando para um `po-table` via `p-filter`.
|
|
189
|
+
*
|
|
190
|
+
* - **`chat`**: a IA retornou uma resposta conversacional. Use `result.data` para exibir a mensagem
|
|
191
|
+
* ao usuário, por exemplo em um painel lateral ou tooltip.
|
|
192
|
+
*
|
|
193
|
+
* - **`custom`**: a IA retornou um payload genérico definido pelo backend. Use `result.data` para
|
|
194
|
+
* executar qualquer ação específica da aplicação (ex: navegação, abertura de modal, acionamento de comando).
|
|
195
|
+
*/
|
|
196
|
+
result: import("@angular/core").OutputEmitterRef<PoSearchAiResult>;
|
|
197
|
+
protected searchAiService: PoSearchAiService;
|
|
198
|
+
/**
|
|
199
|
+
* @optional
|
|
200
|
+
*
|
|
201
|
+
* @description
|
|
202
|
+
*
|
|
203
|
+
* Tempo máximo de espera (em milissegundos) pela resposta da IA antes de abortar a
|
|
204
|
+
* requisição e emitir `p-error` com `statusCode 408`.
|
|
205
|
+
*
|
|
206
|
+
* @default `10000`
|
|
207
|
+
*/
|
|
208
|
+
timeout: import("@angular/core").InputSignalWithTransform<number, number>;
|
|
209
|
+
/**
|
|
210
|
+
* @optional
|
|
211
|
+
*
|
|
212
|
+
* @description
|
|
213
|
+
*
|
|
214
|
+
* Endpoint (proxy) responsável por encaminhar a consulta para o provedor de IA.
|
|
215
|
+
* Recebe `{ query, columns }` via `POST` e deve retornar `{ filter, description, confidence }`.
|
|
216
|
+
*
|
|
217
|
+
* > A integração com a LLM e a guarda de chaves devem ocorrer **no backend**, nunca no client-side.
|
|
218
|
+
*/
|
|
219
|
+
url: import("@angular/core").InputSignal<string>;
|
|
220
|
+
constructor();
|
|
221
|
+
abstract clearSearch(): void;
|
|
222
|
+
abstract search(): void;
|
|
223
|
+
getErrorPattern(): string;
|
|
224
|
+
extraValidation(_c: AbstractControl): {
|
|
225
|
+
[key: string]: any;
|
|
226
|
+
};
|
|
227
|
+
hasValue(): boolean;
|
|
228
|
+
ngOnDestroy(): void;
|
|
229
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @docsPrivate
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo implementa um motor independente para interpretar filtros no formato OData v4 e aplicá-los sobre listas de objetos JavaScript.
|
|
5
|
+
* Na prática, ele permite que o po-search-ai receba uma condição de filtro em texto, como “nome contém Henrique" ou “idade maior que 18”, e transforme isso em uma função capaz de filtrar os dados localmente.
|
|
6
|
+
* A principal vantagem é que essa lógica não depende do Angular nem de outro framework. Com isso, o mesmo motor pode ser reutilizado por diferentes consumidores do po-search-ai, mantendo o comportamento de filtro padronizado.
|
|
7
|
+
* O arquivo suporta os principais recursos necessários para filtros simples e intermediários, como comparações, operadores lógicos, funções de texto, valores booleanos, nulos, números, datas e campos aninhados.
|
|
8
|
+
* Também há um cuidado para evitar que filtros inválidos quebrem a aplicação. Quando o filtro está vazio ou não pode ser interpretado, o motor apenas mantém a lista original, sem aplicar nenhuma filtragem.
|
|
9
|
+
* Em resumo, este arquivo centraliza a interpretação e execução dos filtros, reduzindo dependências externas e tornando o comportamento mais previsível, reutilizável e fácil de manter.
|
|
10
|
+
*
|
|
11
|
+
* Operadores suportados:
|
|
12
|
+
* - Comparação: eq, ne, gt, ge, lt, le
|
|
13
|
+
* - Lógicos: and, or, not, parênteses
|
|
14
|
+
* - Funções de string: contains, startswith, endswith
|
|
15
|
+
* - Funções de transformação: tolower, toupper
|
|
16
|
+
* - Literais: string ('...'), número, true, false, null, data ISO (yyyy-MM-dd)
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Compila uma string de filtro OData v4 em um predicado JavaScript reutilizável.
|
|
20
|
+
*
|
|
21
|
+
* Operadores suportados: `eq`, `ne`, `gt`, `ge`, `lt`, `le`, `and`, `or`, `not`,
|
|
22
|
+
* `contains`, `startswith`, `endswith`, `tolower`, `toupper`.
|
|
23
|
+
*
|
|
24
|
+
* Em caso de filtro inválido ou vazio, retorna `() => true` (sem filtragem).
|
|
25
|
+
*
|
|
26
|
+
* @param filter String de filtro OData (ex: `"city eq 'SP' and salary gt 5000"`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function poSearchAiCompileFilter(filter: string): (item: Record<string, unknown>) => boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Filtra um array de itens aplicando uma string de filtro OData v4.
|
|
31
|
+
*
|
|
32
|
+
* Utiliza `poSearchAiCompileFilter` internamente. Em caso de filtro inválido
|
|
33
|
+
* ou array vazio, retorna o array original sem modificação.
|
|
34
|
+
*
|
|
35
|
+
* @param items Array de itens a filtrar.
|
|
36
|
+
* @param filter String de filtro OData.
|
|
37
|
+
*/
|
|
38
|
+
export declare function poSearchAiFilterItems<T extends Record<string, unknown>>(items: Array<T>, filter: string): Array<T>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PoSearchAiColumn, PoSearchAiColumnInput } from './interfaces/po-search-ai-column.interface';
|
|
2
|
+
/**
|
|
3
|
+
* @docsPrivate
|
|
4
|
+
*
|
|
5
|
+
* Extrai e normaliza os metadados das colunas para envio à IA,
|
|
6
|
+
* descartando colunas sem `property`, invisíveis ou marcadas com `searchAiIgnore`.
|
|
7
|
+
*
|
|
8
|
+
* Função utilitária pura, reutilizada pelo `PoSearchAiService` e pelo `PoTableComponent`.
|
|
9
|
+
*
|
|
10
|
+
* @param columns Lista de colunas no formato bruto do componente consumidor.
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractSearchAiColumns(columns: Array<PoSearchAiColumnInput>): Array<PoSearchAiColumn>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ElementRef, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { PoButtonComponent } from '../../po-button/po-button.component';
|
|
3
|
+
import { PoSearchAiBaseComponent } from './po-search-ai-base.component';
|
|
4
|
+
/**
|
|
5
|
+
* @docsExtends PoSearchAiBaseComponent
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
*
|
|
9
|
+
* <example name="po-search-ai-basic" title="PO AI Search Basic">
|
|
10
|
+
* <file name="sample-po-search-ai-basic/sample-po-search-ai-basic.component.html"> </file>
|
|
11
|
+
* <file name="sample-po-search-ai-basic/sample-po-search-ai-basic.component.ts"> </file>
|
|
12
|
+
* </example>
|
|
13
|
+
*
|
|
14
|
+
* <example name="po-search-ai-labs" title="PO AI Search Labs">
|
|
15
|
+
* <file name="sample-po-search-ai-labs/sample-po-search-ai-labs.component.html"> </file>
|
|
16
|
+
* <file name="sample-po-search-ai-labs/sample-po-search-ai-labs.component.ts"> </file>
|
|
17
|
+
* </example>
|
|
18
|
+
*
|
|
19
|
+
* <example name="po-search-ai-result" title="PO AI Search - Result">
|
|
20
|
+
* <file name="sample-po-search-ai-result/sample-po-search-ai-result.component.html"> </file>
|
|
21
|
+
* <file name="sample-po-search-ai-result/sample-po-search-ai-result.component.ts"> </file>
|
|
22
|
+
* </example>
|
|
23
|
+
*
|
|
24
|
+
* <example name="po-search-ai-filter" title="PO AI Search - Filter">
|
|
25
|
+
* <file name="sample-po-search-ai-filter/sample-po-search-ai-filter.component.html"> </file>
|
|
26
|
+
* <file name="sample-po-search-ai-filter/sample-po-search-ai-filter.component.ts"> </file>
|
|
27
|
+
* </example>
|
|
28
|
+
*/
|
|
29
|
+
export declare class PoSearchAiComponent extends PoSearchAiBaseComponent implements OnChanges {
|
|
30
|
+
inp: ElementRef;
|
|
31
|
+
iconSearchAiEl: PoButtonComponent;
|
|
32
|
+
id: string;
|
|
33
|
+
constructor();
|
|
34
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
35
|
+
/**
|
|
36
|
+
* Envia a consulta atual (valor do campo) para o endpoint de IA configurado em `p-url`.
|
|
37
|
+
*
|
|
38
|
+
* Caso a consulta esteja vazia ou `p-url` não esteja definido, nada é feito.
|
|
39
|
+
* O resultado é emitido via `p-result` (ou `p-low-confidence` quando a confiança for baixa)
|
|
40
|
+
* e falhas são emitidas via `p-error`.
|
|
41
|
+
*/
|
|
42
|
+
search(): void;
|
|
43
|
+
clearAndFocus(): void;
|
|
44
|
+
handleCleanKeydown(event: KeyboardEvent): void;
|
|
45
|
+
/**
|
|
46
|
+
* Limpa o filtro aplicado via IA, esvazia o campo e emite o evento `p-clear`.
|
|
47
|
+
*/
|
|
48
|
+
clearSearch(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Manipula a tecla pressionada no campo: dispara a busca ao pressionar `Enter`.
|
|
51
|
+
*
|
|
52
|
+
* @param event Evento de teclado.
|
|
53
|
+
*/
|
|
54
|
+
onSearchKeydown(event: KeyboardEvent): void;
|
|
55
|
+
private finishProcessing;
|
|
56
|
+
private handleResponse;
|
|
57
|
+
private handleError;
|
|
58
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { PoSearchAiColumn, PoSearchAiColumnInput } from './interfaces/po-search-ai-column.interface';
|
|
4
|
+
import { PoSearchAiResponse } from './interfaces/po-search-ai.interface';
|
|
5
|
+
/**
|
|
6
|
+
* @docsPrivate
|
|
7
|
+
*
|
|
8
|
+
* Serviço responsável por enviar a consulta em linguagem natural para o endpoint de IA
|
|
9
|
+
* configurado no `PoSearchAiComponent` e tratar a resposta/erros.
|
|
10
|
+
*
|
|
11
|
+
* O serviço é agnóstico ao provedor de IA: ele apenas faz o `POST` do payload
|
|
12
|
+
* (`{ query, columns }`) e padroniza o tratamento de timeout e falhas.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PoSearchAiService {
|
|
15
|
+
private readonly http;
|
|
16
|
+
readonly headers: HttpHeaders;
|
|
17
|
+
constructor(http: HttpClient);
|
|
18
|
+
/**
|
|
19
|
+
* Envia a consulta para o endpoint de IA.
|
|
20
|
+
*
|
|
21
|
+
* @param url Endpoint configurado em `p-url`.
|
|
22
|
+
* @param query Texto em linguagem natural digitado pelo usuário.
|
|
23
|
+
* @param columns Metadados das colunas/campos disponíveis para a busca.
|
|
24
|
+
* @param timeoutMs Tempo máximo de espera (ms) antes de abortar a requisição.
|
|
25
|
+
*/
|
|
26
|
+
sendQuery(url: string, query: string, columns: Array<PoSearchAiColumn>, timeoutMs?: number): Observable<PoSearchAiResponse>;
|
|
27
|
+
/**
|
|
28
|
+
* Extrai e normaliza os metadados das colunas para envio à IA,
|
|
29
|
+
* descartando colunas sem `property` ou marcadas para serem ignoradas.
|
|
30
|
+
*
|
|
31
|
+
* @param columns Lista de colunas no formato bruto do componente consumidor.
|
|
32
|
+
*/
|
|
33
|
+
extractColumnsMetadata(columns: Array<PoSearchAiColumnInput>): Array<PoSearchAiColumn>;
|
|
34
|
+
}
|
|
@@ -6,6 +6,7 @@ export * from './interfaces/po-table-boolean.interface';
|
|
|
6
6
|
export * from './interfaces/po-table-column.interface';
|
|
7
7
|
export * from './interfaces/po-table-column-sort.interface';
|
|
8
8
|
export * from './interfaces/po-table-literals.interface';
|
|
9
|
+
export * from './interfaces/po-table-search-ai-field.interface';
|
|
9
10
|
export * from './po-table-column-icon/po-table-column-icon.interface';
|
|
10
11
|
export * from './po-table-column-label/po-table-column-label.interface';
|
|
11
12
|
export * from './po-table-detail/po-table-detail-column.interface';
|
|
@@ -299,4 +299,18 @@ export interface PoTableColumn {
|
|
|
299
299
|
* Caso a coluna possua um `type` diferente de `string`, a máscara será ignorada.
|
|
300
300
|
*/
|
|
301
301
|
mask?: string;
|
|
302
|
+
/**
|
|
303
|
+
* @optional
|
|
304
|
+
*
|
|
305
|
+
* @description
|
|
306
|
+
*
|
|
307
|
+
* Quando `true`, exclui a coluna dos metadados enviados ao endpoint de IA configurado
|
|
308
|
+
* em `p-search-ai-field`, independentemente de estar visível na tabela.
|
|
309
|
+
*
|
|
310
|
+
* Útil para ocultar colunas de controle interno (IDs, flags técnicos, etc.) da
|
|
311
|
+
* interpretação da linguagem natural.
|
|
312
|
+
*
|
|
313
|
+
* @default `false`
|
|
314
|
+
*/
|
|
315
|
+
searchAiIgnore?: boolean;
|
|
302
316
|
}
|
|
@@ -38,4 +38,6 @@ export interface PoTableLiterals {
|
|
|
38
38
|
deleteSuccessful?: string;
|
|
39
39
|
/** Texto de notificação de erro na requisição Delete */
|
|
40
40
|
deleteApiError?: string;
|
|
41
|
+
/** Texto exibido como placeholder padrão no campo de busca por IA (`p-search-ai-field`) quando nenhum `placeholder` é informado. */
|
|
42
|
+
searchAiPlaceholder?: string;
|
|
41
43
|
}
|