@po-ui/ng-components 21.21.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.
Files changed (43) hide show
  1. package/fesm2022/po-ui-ng-components.mjs +7407 -6039
  2. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  3. package/lib/components/po-dynamic/po-dynamic-form/interfaces/po-dynamic-form-field.interface.d.ts +5 -5
  4. package/lib/components/po-field/index.d.ts +7 -0
  5. package/lib/components/po-field/po-datetimepicker/po-datetimepicker-base.component.d.ts +1 -2
  6. package/lib/components/po-field/po-datetimepicker/po-datetimepicker.component.d.ts +12 -1
  7. package/lib/components/po-field/po-field.module.d.ts +1 -2
  8. package/lib/components/po-field/po-lookup/interfaces/po-lookup-column.interface.d.ts +36 -0
  9. package/lib/components/po-field/po-lookup/po-lookup.component.d.ts +6 -0
  10. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-column.interface.d.ts +39 -0
  11. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals-default.interface.d.ts +7 -0
  12. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals.interface.d.ts +13 -0
  13. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai.interface.d.ts +109 -0
  14. package/lib/components/po-field/po-search-ai/po-search-ai-base.component.d.ts +229 -0
  15. package/lib/components/po-field/po-search-ai/po-search-ai-odata-filter.d.ts +38 -0
  16. package/lib/components/po-field/po-search-ai/po-search-ai-utils.d.ts +12 -0
  17. package/lib/components/po-field/po-search-ai/po-search-ai.component.d.ts +58 -0
  18. package/lib/components/po-field/po-search-ai/po-search-ai.module.d.ts +9 -0
  19. package/lib/components/po-field/po-search-ai/po-search-ai.service.d.ts +34 -0
  20. package/lib/components/po-table/index.d.ts +1 -0
  21. package/lib/components/po-table/interfaces/po-table-column.interface.d.ts +55 -2
  22. package/lib/components/po-table/interfaces/po-table-literals.interface.d.ts +2 -0
  23. package/lib/components/po-table/interfaces/po-table-search-ai-field.interface.d.ts +122 -0
  24. package/lib/components/po-table/po-table-base.component.d.ts +69 -0
  25. package/lib/components/po-table/po-table.component.d.ts +53 -0
  26. package/package.json +4 -4
  27. package/po-ui-ng-components-21.23.0.tgz +0 -0
  28. package/schematics/ng-add/index.js +1 -1
  29. package/schematics/ng-update/v14/index.js +1 -1
  30. package/schematics/ng-update/v15/index.js +1 -1
  31. package/schematics/ng-update/v16/index.js +1 -1
  32. package/schematics/ng-update/v17/index.js +1 -1
  33. package/schematics/ng-update/v18/index.js +2 -2
  34. package/schematics/ng-update/v19/index.js +2 -2
  35. package/schematics/ng-update/v2/index.js +1 -1
  36. package/schematics/ng-update/v20/index.js +2 -2
  37. package/schematics/ng-update/v21/index.js +1 -1
  38. package/schematics/ng-update/v3/index.js +1 -1
  39. package/schematics/ng-update/v4/index.js +1 -1
  40. package/schematics/ng-update/v5/index.js +1 -1
  41. package/schematics/ng-update/v6/index.js +1 -1
  42. package/types/po-ui-ng-components.d.ts +10501 -9628
  43. package/po-ui-ng-components-21.21.0.tgz +0 -0
@@ -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,9 @@
1
+ /**
2
+ * @description
3
+ * Módulo do componente `po-search-ai`.
4
+ *
5
+ * Pode ser importado de forma independente por qualquer módulo que precise renderizar
6
+ * o campo de busca por IA.
7
+ */
8
+ export declare class PoSearchAiModule {
9
+ }
@@ -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';
@@ -106,6 +106,7 @@ export interface PoTableColumn {
106
106
  * |------------|-----------------|-----------|----------|
107
107
  * | Monetário | `currency` | Formato para valores monetários. Informe o código da moeda (ISO 4217). | `'BRL'`, `'USD'`, `'EUR'`, `'RUB'` |
108
108
  * | Data | `date` | Aceita apenas os caracteres de dia(dd), mês(MM) e ano (yyyy ou yy), caso não seja informado um formato o mesmo será 'dd/MM/yyyy' | `'dd/MM/yyyy'`, `'dd-MM-yy'`, `'mm/dd/yyyy'` |
109
+ * | Data/Hora | `dateTime` | Aceita os caracteres de dia(dd), mês(MM), ano(yyyy), hora(HH para 24h ou hh para 12h), minutos(mm), segundos(ss), milissegundos(SSS) e período(a para AM/PM). Caso não seja informado um formato o mesmo será 'dd/MM/yyyy HH:mm:ss' | `'dd/MM/yyyy HH:mm'`, `'dd/MM/yyyy HH:mm:ss'`, `'dd/MM/yyyy HH:mm:ss.SSS'`, `'MM/dd/yyyy hh:mm a'`, `'yyyy-MM-dd HH:mm'`, `'short'`, `'medium'` |
109
110
  * | Hora | `time` | Aceita apenas os caracteres de hora(HH), minutos(mm), segundos(ss) e milisegundos(f-ffffff), os milisegundos são opcionais, caso não seja informado um formato o mesmo será 'HH:mm:ss' | `'HH:mm'`, `'HH:mm:ss.ffffff'`, `'HH:mm:ss.ff'`, `'mm:ss.fff'` |
110
111
  * | Número | `number` | Aceita um valor seguindo o padrão [**DecimalPipe**](https://angular.dev/api/common/DecimalPipe) para formatação, e caso não seja informado, o número será exibido na sua forma original. | `'1.2-5'` (ex.: `50` → `50.00`) |
111
112
  *
@@ -214,8 +215,10 @@ export interface PoTableColumn {
214
215
  * por exemplo: `'2017-11-28'` ou `new Date(2017, 10, 28)`.
215
216
  *
216
217
  * - `dateTime`: valor de data com horário.
217
- * + Aceita o tipo _string_ no formato **ISO-8601** extendido **'yyyy-mm-ddThh:mm:ss+|-hh:mm'**
218
- * e o tipo _Date_ padrão do Javascript, por exemplo: `'2017-11-28T00:00:00-02:00'` ou `new Date(2017, 10, 28)`.
218
+ * + Aceita o tipo _string_ no formato **ISO-8601** extendido **'yyyy-mm-ddTHH:mm:ss+|-hh:mm'**
219
+ * ou **'yyyy-mm-ddTHH:mm+|-hh:mm'** (sem segundos),
220
+ * e o tipo _Date_ padrão do Javascript, por exemplo: `'2017-11-28T00:00:00-02:00'`, `'2017-11-28T14:30-02:00'` ou `new Date(2017, 10, 28)`.
221
+ * + A formatação de exibição pode ser configurada pela propriedade `format`.
219
222
  *
220
223
  * - `detail`: array de objetos para o master-detail.
221
224
  * + Incompatível com `virtual-scroll`, que requer altura fixa nas linhas.
@@ -260,4 +263,54 @@ export interface PoTableColumn {
260
263
  */
261
264
  width?: string;
262
265
  fixed?: boolean;
266
+ /**
267
+ * @optional
268
+ *
269
+ * @description
270
+ *
271
+ * Define uma máscara para formatação do valor exibido na coluna.
272
+ *
273
+ * A máscara é aplicada somente para **exibição** na tabela, formatando o valor bruto
274
+ * armazenado no model antes de apresentá-lo ao usuário.
275
+ *
276
+ * Caracteres válidos para a máscara:
277
+ * - `9` : aceita um dígito numérico (0-9).
278
+ * - `@` : aceita um caractere alfabético (a-z, A-Z).
279
+ * - `w` : aceita um caractere alfanumérico (a-z, A-Z, 0-9).
280
+ * - Demais caracteres são considerados fixos e inseridos automaticamente na formatação
281
+ * (por exemplo: `.`, `-`, `/`, `(`, `)`, `+`, ` `).
282
+ *
283
+ * Exemplos de uso:
284
+ * ```
285
+ * // CPF
286
+ * { property: 'cpf', label: 'CPF', mask: '999.999.999-99' }
287
+ *
288
+ * // CNPJ
289
+ * { property: 'cnpj', label: 'CNPJ', mask: '99.999.999/9999-99' }
290
+ *
291
+ * // Telefone
292
+ * { property: 'phone', label: 'Telefone', mask: '(99) 99999-9999' }
293
+ *
294
+ * // CEP
295
+ * { property: 'zipCode', label: 'CEP', mask: '99999-999' }
296
+ * ```
297
+ *
298
+ * > Esta propriedade é utilizada apenas para colunas do tipo `string` (padrão).
299
+ * Caso a coluna possua um `type` diferente de `string`, a máscara será ignorada.
300
+ */
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;
263
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
  }
@@ -0,0 +1,122 @@
1
+ import { PoSearchAiColumn } from '../../po-field/po-search-ai/interfaces/po-search-ai-column.interface';
2
+ import { PoSearchAiLiterals } from '../../po-field/po-search-ai/interfaces/po-search-ai-literals.interface';
3
+ import { PoSearchAiResult } from '../../po-field/po-search-ai/interfaces/po-search-ai.interface';
4
+ /**
5
+ * @usedBy PoTableComponent
6
+ *
7
+ * @description
8
+ *
9
+ * Interface de configuração da busca por IA integrada ao `po-table`, utilizada pela
10
+ * propriedade `p-search-ai-field`.
11
+ *
12
+ * Quando configurada, a tabela renderiza um campo `po-search-ai` na barra de ações,
13
+ * no lugar da busca textual padrão (`po-search`). O filtro gerado pela IA é aplicado
14
+ * automaticamente aos dados da tabela, conforme a estratégia definida em `apply`.
15
+ *
16
+ * #### Endpoint de IA (`url`)
17
+ *
18
+ * O campo `url` deve apontar para um endpoint (proxy) que implemente o contrato do
19
+ * `po-search-ai`: recebe `{ query, columns }` via `POST` e responde com
20
+ * `{ filter, description, confidence }`.
21
+ *
22
+ * > A integração com a LLM e a guarda de chaves devem ocorrer **no backend**, nunca
23
+ * > no client-side. O backend de referência open source está disponível em
24
+ * > [`po-sample-api`](https://github.com/po-ui/po-sample-api).
25
+ *
26
+ * #### Colunas enviadas à IA
27
+ *
28
+ * Por padrão, os metadados enviados ao endpoint são derivados automaticamente de
29
+ * `p-columns` da tabela, respeitando as colunas visíveis e excluindo aquelas com
30
+ * `searchAiIgnore: true`. O campo `columns` permite sobrescrever esse comportamento.
31
+ *
32
+ * #### Estratégia de aplicação do filtro (`apply`)
33
+ *
34
+ * | Valor | Comportamento |
35
+ * |-------|---------------|
36
+ * | `'auto'` (padrão) | Modo serviço: envia `$filter` ao `p-service-api`; modo local: aplica o parser OData interno sobre `p-items`. |
37
+ * | `'parser'` | Sempre usa o parser OData interno. No modo serviço, busca todos os dados e filtra localmente. |
38
+ * | `'server'` | Sempre delega o filtro ao `p-service-api` via `$filter`. |
39
+ * | `'none'` | Não aplica o filtro; apenas emite `p-search-ai-result` para o desenvolvedor tratar. |
40
+ * | `(result) => void` | Override total: o desenvolvedor recebe o resultado e assume o controle. |
41
+ */
42
+ export interface PoTableSearchAiField {
43
+ /**
44
+ * Endpoint (proxy) de IA responsável por converter a consulta em linguagem natural
45
+ * em um filtro estruturado (OData). Repassado ao `po-search-ai` via `p-url`.
46
+ *
47
+ * O endpoint deve seguir o contrato do backend de referência (`po-sample-api`):
48
+ * - Recebe: `POST { query: string, columns: PoSearchAiColumn[] }`
49
+ * - Responde: `{ filter: string, description: string, confidence: number }`
50
+ */
51
+ url: string;
52
+ /**
53
+ * @optional
54
+ *
55
+ * @description
56
+ *
57
+ * Override das colunas enviadas ao endpoint de IA. Quando omitido, os metadados
58
+ * são derivados automaticamente de `p-columns` da tabela, excluindo colunas com
59
+ * `visible: false` ou `searchAiIgnore: true`.
60
+ */
61
+ columns?: Array<PoSearchAiColumn>;
62
+ /**
63
+ * @optional
64
+ *
65
+ * @description
66
+ *
67
+ * Nível mínimo de confiança (`0.0` a `1.0`) para que o filtro gerado pela IA seja
68
+ * aplicado automaticamente. Quando a confiança for inferior, o evento
69
+ * `p-search-ai-low-confidence` é emitido em vez de `p-search-ai-result`.
70
+ *
71
+ * @default `0.5`
72
+ */
73
+ minConfidence?: number;
74
+ /**
75
+ * @optional
76
+ *
77
+ * @description
78
+ *
79
+ * Tempo máximo de espera (em milissegundos) pela resposta do endpoint de IA.
80
+ *
81
+ * @default `10000`
82
+ */
83
+ timeout?: number;
84
+ /**
85
+ * @optional
86
+ *
87
+ * @description
88
+ *
89
+ * Texto exibido como placeholder no campo de busca por IA.
90
+ */
91
+ placeholder?: string;
92
+ /**
93
+ * @optional
94
+ *
95
+ * @description
96
+ *
97
+ * Objeto com os literais usados pelo `po-search-ai` integrado à tabela. Permite
98
+ * sobrescrever as mensagens padrão para internacionalização ou customização.
99
+ */
100
+ literals?: PoSearchAiLiterals;
101
+ /**
102
+ * @optional
103
+ *
104
+ * @description
105
+ *
106
+ * Define como o filtro OData retornado pela IA é aplicado à tabela.
107
+ *
108
+ * - `'auto'` _(padrão)_: aplica automaticamente conforme o modo da tabela —
109
+ * modo serviço envia `$filter` ao `p-service-api`; modo local usa o parser
110
+ * OData interno sobre `p-items`.
111
+ * - `'parser'`: sempre usa o parser OData interno. No modo serviço, busca todos
112
+ * os dados primeiro e filtra localmente em seguida.
113
+ * - `'server'`: sempre envia `$filter` ao `p-service-api`, independentemente
114
+ * do modo da tabela.
115
+ * - `'none'`: não aplica o filtro; apenas emite `p-search-ai-result`.
116
+ * - `(result: PoSearchAiResult) => void`: override total — o desenvolvedor recebe
117
+ * o resultado e assume o controle da aplicação do filtro.
118
+ *
119
+ * @default `'auto'`
120
+ */
121
+ apply?: 'auto' | 'parser' | 'server' | 'none' | ((result: PoSearchAiResult) => void);
122
+ }
@@ -6,8 +6,10 @@ import { PoSearchFilterMode } from '../po-search/enums/po-search-filter-mode.enu
6
6
  import { PoTableAction } from './interfaces/po-table-action.interface';
7
7
  import { PoTableColumnSort } from './interfaces/po-table-column-sort.interface';
8
8
  import { PoTableColumn } from './interfaces/po-table-column.interface';
9
+ import { PoSearchAiError, PoSearchAiResult } from '../po-field/po-search-ai/interfaces/po-search-ai.interface';
9
10
  import { PoTableLiterals } from './interfaces/po-table-literals.interface';
10
11
  import { PoTableResponseApi } from './interfaces/po-table-response-api.interface';
12
+ import { PoTableSearchAiField } from './interfaces/po-table-search-ai-field.interface';
11
13
  import { PoTableService } from './services/po-table.service';
12
14
  export type QueryParamsType = string | number | boolean;
13
15
  export declare const poTableContainer: string[];
@@ -239,6 +241,30 @@ export declare abstract class PoTableBaseComponent implements OnChanges, OnDestr
239
241
  * @default `startsWith`
240
242
  */
241
243
  filterType: PoSearchFilterMode;
244
+ /**
245
+ * @optional
246
+ *
247
+ * @description
248
+ *
249
+ * Configura a busca por linguagem natural integrada à tabela, substituindo o campo de busca padrão
250
+ * (`po-search`) pelo componente `po-search-ai` na barra de ações.
251
+ *
252
+ * Recebe um objeto do tipo `PoTableSearchAiField` com as configurações necessárias:
253
+ * - `url` _(obrigatório)_: endpoint (proxy) de IA que traduz a consulta em linguagem natural para um filtro
254
+ * estruturado (OData v4). O backend deve seguir o contrato do
255
+ * [`po-sample-api`](https://github.com/po-ui/po-sample-api).
256
+ * - `columns`: lista de colunas enviadas à IA; quando omitida, são derivadas de `p-columns`.
257
+ * - `minConfidence`: confiança mínima para aplicação automática do filtro (padrão `0.5`).
258
+ * - `timeout`: tempo máximo de espera pela resposta da IA em ms (padrão `10000`).
259
+ * - `placeholder`: texto exibido como placeholder no campo.
260
+ * - `literals`: literais customizadas do `po-search-ai`.
261
+ * - `apply`: estratégia de aplicação do filtro — `'auto'` (padrão), `'parser'`, `'server'`, `'none'`
262
+ * ou uma função `(result: PoSearchAiResult) => void`.
263
+ *
264
+ * Quando esta propriedade está definida, os eventos `p-search-ai-result`, `p-search-ai-low-confidence`
265
+ * e `p-search-ai-error` ficam disponíveis para tratamento customizado.
266
+ */
267
+ searchAiField: import("@angular/core").InputSignal<PoTableSearchAiField>;
242
268
  /**
243
269
  * @optional
244
270
  *
@@ -375,6 +401,49 @@ export declare abstract class PoTableBaseComponent implements OnChanges, OnDestr
375
401
  * Por exemplo: ["idCard", "name", "hireStatus", "age"].
376
402
  */
377
403
  columnRestoreManager: EventEmitter<string[]>;
404
+ /**
405
+ * @optional
406
+ *
407
+ * @description
408
+ *
409
+ * Evento emitido quando o `po-search-ai` retorna um resultado com confiança igual ou superior
410
+ * ao `minConfidence` configurado em `p-search-ai-field`.
411
+ *
412
+ * O parâmetro enviado é um objeto `PoSearchAiResult` contendo:
413
+ * - `filter`: string de filtro OData v4 gerada pela IA (ex: `"city eq 'SP' and salary gt 5000"`).
414
+ * - `description`: descrição em linguagem natural do filtro aplicado.
415
+ * - `confidence`: nível de confiança da resposta (0.0 a 1.0).
416
+ *
417
+ * > Quando `apply` for diferente de `'none'`, o filtro já é aplicado automaticamente pela tabela
418
+ * > antes deste evento ser emitido.
419
+ */
420
+ searchAiResult: EventEmitter<PoSearchAiResult>;
421
+ /**
422
+ * @optional
423
+ *
424
+ * @description
425
+ *
426
+ * Evento emitido quando o `po-search-ai` retorna um resultado cuja confiança é inferior ao
427
+ * `minConfidence` configurado em `p-search-ai-field`. Nesse caso, o filtro **não** é aplicado
428
+ * automaticamente.
429
+ *
430
+ * O parâmetro enviado é um objeto `PoSearchAiResult` com os mesmos campos de `p-search-ai-result`,
431
+ * permitindo que o desenvolvedor decida como tratar o resultado de baixa confiança.
432
+ */
433
+ searchAiLowConfidence: EventEmitter<PoSearchAiResult>;
434
+ /**
435
+ * @optional
436
+ *
437
+ * @description
438
+ *
439
+ * Evento emitido quando ocorre um erro na requisição ao endpoint de IA configurado em
440
+ * `p-search-ai-field`.
441
+ *
442
+ * O parâmetro enviado é um objeto `PoSearchAiError` contendo:
443
+ * - `statusCode`: código HTTP do erro (ex: `408` para timeout, `500` para erro interno).
444
+ * - `message`: mensagem descritiva do erro.
445
+ */
446
+ searchAiError: EventEmitter<PoSearchAiError>;
378
447
  allColumnsWidthPixels: boolean;
379
448
  columnMasterDetail: PoTableColumn;
380
449
  hasMainColumns: boolean;
@@ -8,6 +8,9 @@ import { PoNotificationService } from '../../services/po-notification/po-notific
8
8
  import { PoModalAction, PoModalComponent } from '../po-modal';
9
9
  import { PoPopupComponent } from '../po-popup/po-popup.component';
10
10
  import { PoTableColumnLabel } from './po-table-column-label/po-table-column-label.interface';
11
+ import { PoSearchAiColumn } from '../po-field/po-search-ai/interfaces/po-search-ai-column.interface';
12
+ import { PoSearchAiError, PoSearchAiResult } from '../po-field/po-search-ai/interfaces/po-search-ai.interface';
13
+ import { PoSearchAiComponent } from '../po-field/po-search-ai/po-search-ai.component';
11
14
  import { PoTableAction } from './interfaces/po-table-action.interface';
12
15
  import { PoTableColumn } from './interfaces/po-table-column.interface';
13
16
  import { PoTableBaseComponent, QueryParamsType } from './po-table-base.component';
@@ -68,6 +71,11 @@ import { PoTableColumnSpacing } from './enums/po-table-spacing.enum';
68
71
  * <file name="sample-po-table-draggable/sample-po-table-draggable.component.html"> </file>
69
72
  * <file name="sample-po-table-draggable/sample-po-table-draggable.component.ts"> </file>
70
73
  * </example>
74
+ *
75
+ * <example name="po-table-search-ai" title="PO Table - Search A.I. (EXPERIMENTAL)">
76
+ * <file name="sample-po-table-search-ai/sample-po-table-search-ai.component.html"> </file>
77
+ * <file name="sample-po-table-search-ai/sample-po-table-search-ai.component.ts"> </file>
78
+ * </example>
71
79
  */
72
80
  export declare class PoTableComponent extends PoTableBaseComponent implements AfterViewInit, DoCheck, OnDestroy, OnInit {
73
81
  private readonly changeDetector;
@@ -91,6 +99,7 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
91
99
  actionsElement: QueryList<any>;
92
100
  filterInput: ElementRef;
93
101
  poSearchInput: ElementRef;
102
+ searchAiComponent: PoSearchAiComponent;
94
103
  viewPort: CdkVirtualScrollViewport;
95
104
  poNotification: PoNotificationService;
96
105
  heightTableContainer: number;
@@ -118,6 +127,7 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
118
127
  private scrollEvent$;
119
128
  private subscriptionScrollEvent;
120
129
  private readonly subscriptionService;
130
+ private aiParserSubscription?;
121
131
  private readonly clickListener;
122
132
  private readonly resizeListener;
123
133
  set columnManagerTarget(value: ElementRef);
@@ -231,6 +241,8 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
231
241
  */
232
242
  deleteItems(): void;
233
243
  formatNumber(value: any, format: string): any;
244
+ protected formatWithMask(value: any, mask: string): string;
245
+ private isValidMaskChar;
234
246
  getCellData(row: any, column: PoTableColumn): any;
235
247
  getBooleanLabel(rowValue: any, columnBoolean: PoTableColumn): string;
236
248
  getColumnIcons(row: any, column: PoTableColumn): any;
@@ -250,6 +262,47 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
250
262
  validateTableAction(row: any, tableAction: any): any;
251
263
  onOpenColumnManager(): void;
252
264
  onFilteredItemsChange(items: Array<any>): void;
265
+ get searchAiColumns(): Array<PoSearchAiColumn>;
266
+ get searchAiPlaceholder(): string;
267
+ onAiResult(result: PoSearchAiResult): void;
268
+ onAiLowConfidence(result: PoSearchAiResult): void;
269
+ onAiError(error: PoSearchAiError): void;
270
+ onAiClear(): void;
271
+ private shouldDelegateToServer;
272
+ private applyFilterViaServer;
273
+ private applyFilterViaParser;
274
+ private applyFilterLocally;
275
+ /**
276
+ * Atualiza programaticamente o valor do campo de busca por IA (`po-search-ai`) integrado à tabela
277
+ * via `p-search-ai-field`.
278
+ *
279
+ * Útil quando a aplicação precisa preencher a busca a partir de uma ação externa (por exemplo, o
280
+ * clique em um botão que sugere uma consulta pronta), opcionalmente disparando a busca em seguida.
281
+ *
282
+ * > Só tem efeito quando a propriedade `p-search-ai-field` está configurada. Caso contrário, o método
283
+ * > não executa nenhuma ação.
284
+ *
285
+ * @param { string } value Texto da consulta a ser inserido no campo de busca por IA.
286
+ * @param { boolean } triggerSearch Quando `true`, dispara automaticamente a busca após preencher o
287
+ * valor. Quando `false` _(padrão)_, apenas preenche o campo.
288
+ *
289
+ * @default `triggerSearch = false`
290
+ *
291
+ * @example
292
+ *
293
+ * ```typescript
294
+ * @ViewChild(PoTableComponent) table: PoTableComponent;
295
+ *
296
+ * onSuggestionClick() {
297
+ * // apenas preenche o campo
298
+ * this.table.updateSearchAIQuery('clientes de SP com saldo acima de 500');
299
+ *
300
+ * // preenche e já dispara a busca
301
+ * this.table.updateSearchAIQuery('clientes de SP com saldo acima de 500', true);
302
+ * }
303
+ * ```
304
+ */
305
+ updateSearchAIQuery(value: string, triggerSearch?: boolean): void;
253
306
  /**
254
307
  * Método que remove um item da tabela.
255
308
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@po-ui/ng-components",
3
- "version": "21.21.0",
3
+ "version": "21.23.0",
4
4
  "description": "PO UI - Components",
5
5
  "author": "PO UI",
6
6
  "license": "MIT",
@@ -22,8 +22,8 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@angular/cdk": "~21.2.4",
25
- "@po-ui/style": "21.21.0",
26
- "@po-ui/ng-schematics": "21.21.0",
25
+ "@po-ui/style": "21.23.0",
26
+ "@po-ui/ng-schematics": "21.23.0",
27
27
  "driver.js": "~1.4.0",
28
28
  "echarts": "^5.6.0",
29
29
  "tslib": "^2.6.2"
@@ -39,7 +39,7 @@
39
39
  "@angular/platform-browser-dynamic": "^21",
40
40
  "@angular/router": "^21",
41
41
  "@angular-devkit/schematics": "^21",
42
- "@po-ui/style": "21.21.0",
42
+ "@po-ui/style": "21.23.0",
43
43
  "rxjs": "~7.8.1",
44
44
  "zone.js": "~0.15.0"
45
45
  },
Binary file
@@ -18,7 +18,7 @@ function default_1(options) {
18
18
  }
19
19
  function addPoPackageAndInstall() {
20
20
  return (tree, context) => {
21
- (0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-components', '21.21.0');
21
+ (0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-components', '21.23.0');
22
22
  // install packages
23
23
  context.addTask(new tasks_1.NodePackageInstallTask());
24
24
  };
@@ -6,7 +6,7 @@ const tasks_1 = require("@angular-devkit/schematics/tasks");
6
6
  const package_config_1 = require("@po-ui/ng-schematics/package-config");
7
7
  const changes_1 = require("./changes");
8
8
  function default_1() {
9
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), postUpdate()]);
9
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), postUpdate()]);
10
10
  }
11
11
  function postUpdate() {
12
12
  return (_, context) => {
@@ -11,7 +11,7 @@ const changes_1 = require("./changes");
11
11
  const httpClientModuleName = 'HttpClientModule';
12
12
  const httpClientModuleSourcePath = '@angular/common/http';
13
13
  function default_1() {
14
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
14
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
15
15
  }
16
16
  function postUpdate() {
17
17
  return (_, context) => {
@@ -6,7 +6,7 @@ const tasks_1 = require("@angular-devkit/schematics/tasks");
6
6
  const package_config_1 = require("@po-ui/ng-schematics/package-config");
7
7
  const changes_1 = require("./changes");
8
8
  function default_1() {
9
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), postUpdate()]);
9
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), postUpdate()]);
10
10
  }
11
11
  function postUpdate() {
12
12
  return (_, context) => {
@@ -6,7 +6,7 @@ const tasks_1 = require("@angular-devkit/schematics/tasks");
6
6
  const package_config_1 = require("@po-ui/ng-schematics/package-config");
7
7
  const changes_1 = require("./changes");
8
8
  function default_1() {
9
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), postUpdate()]);
9
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), postUpdate()]);
10
10
  }
11
11
  function postUpdate() {
12
12
  return (_, context) => {
@@ -40,11 +40,11 @@ function main(options) {
40
40
  configureNewIcon.toLowerCase() === 'y' ||
41
41
  configureNewIcon.toLowerCase() === 'sim' ||
42
42
  configureNewIcon.toLowerCase() === '') {
43
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
43
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
44
44
  }
45
45
  else {
46
46
  return (0, schematics_1.chain)([
47
- (0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion),
47
+ (0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion),
48
48
  addImportOnly(options, [IconsDictionaryName, poIconDictionary], poModuleSourcePath),
49
49
  addProviderToAppModule(options, newProviderDictionary),
50
50
  updateAppConfigFileRule(),
@@ -40,11 +40,11 @@ function main(options) {
40
40
  configureNewIcon.toLowerCase() === 'y' ||
41
41
  configureNewIcon.toLowerCase() === 'sim' ||
42
42
  configureNewIcon.toLowerCase() === '') {
43
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
43
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
44
44
  }
45
45
  else {
46
46
  return (0, schematics_1.chain)([
47
- (0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion),
47
+ (0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion),
48
48
  addImportOnly(options, [IconsDictionaryName, poIconDictionary], poModuleSourcePath),
49
49
  addProviderToAppModule(options, newProviderDictionary),
50
50
  updateAppConfigFileRule(),
@@ -10,7 +10,7 @@ const package_config_1 = require("@po-ui/ng-schematics/package-config");
10
10
  const changes_1 = require("./changes");
11
11
  function updateToV2() {
12
12
  return (0, schematics_1.chain)([
13
- updatePackageJson('21.21.0', changes_1.dependeciesChanges),
13
+ updatePackageJson('21.23.0', changes_1.dependeciesChanges),
14
14
  (0, replace_1.replaceInFile)('tslint.json', changes_1.tsLintReplaces),
15
15
  (0, replace_1.replaceInFile)('angular.json', changes_1.angularJsonReplaces),
16
16
  createUpgradeRule(),
@@ -40,11 +40,11 @@ function main(options) {
40
40
  configureNewIcon.toLowerCase() === 'y' ||
41
41
  configureNewIcon.toLowerCase() === 'sim' ||
42
42
  configureNewIcon.toLowerCase() === '') {
43
- return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
43
+ return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
44
44
  }
45
45
  else {
46
46
  return (0, schematics_1.chain)([
47
- (0, package_config_1.updatePackageJson)('21.21.0', changes_1.updateDepedenciesVersion),
47
+ (0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion),
48
48
  addImportOnly(options, [IconsDictionaryName, poIconDictionary], poModuleSourcePath),
49
49
  addProviderToAppModule(options, newProviderDictionary),
50
50
  updateAppConfigFileRule(),