@praxisui/metadata-editor 9.0.5-rc.9 → 9.0.6
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/README.md
CHANGED
|
@@ -65,6 +65,7 @@ Peer dependencies (Angular v21): `@angular/core`, `@angular/common`.
|
|
|
65
65
|
- `FieldMetadataEditorComponent` — host do editor de metadados por tipo de campo.
|
|
66
66
|
- `DynamicEditorRendererComponent` — renderiza dinamicamente os editores de propriedades a partir de um schema de `EditorProperty[]`.
|
|
67
67
|
- `CascadeManagerTabComponent` — aba para gerenciar regras de cascata entre campos (dependências, mapeamentos e execução).
|
|
68
|
+
- `ReactiveDeterminationDiagnosticsComponent` — materializa, somente para leitura, `x-ui.reactiveDeterminations` do schema filtrado e os eventos de execução sem valores.
|
|
68
69
|
|
|
69
70
|
### Dynamic Editor Renderer (renderizador dinâmico)
|
|
70
71
|
|
|
@@ -165,6 +166,35 @@ Funcionalidades:
|
|
|
165
166
|
- Edição de dependentes, estratégia de merge, debounce, modo de carregamento (imediato/manual/respeitar loadOn).
|
|
166
167
|
- Mapeamento de filtros com dot‑path e valuePath por dependente, preview com exemplo gerado.
|
|
167
168
|
|
|
169
|
+
### Reactive Determination Diagnostics (somente leitura)
|
|
170
|
+
|
|
171
|
+
`ReactiveDeterminationDiagnosticsComponent` recebe o documento exato de
|
|
172
|
+
`/schemas/filtered` e materializa a projeção canônica de nível de operação. A
|
|
173
|
+
superfície mostra `id`, `operationId`, scope, bindings de entrada/saída,
|
|
174
|
+
proveniência e eventos de execução que contenham apenas metadados. Ela não
|
|
175
|
+
renderiza `href` ou URLs de schema e não oferece inputs, save, headers, JSON
|
|
176
|
+
editor ou qualquer output de authoring.
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
import { ReactiveDeterminationDiagnosticsComponent } from '@praxisui/metadata-editor';
|
|
180
|
+
|
|
181
|
+
@Component({
|
|
182
|
+
imports: [ReactiveDeterminationDiagnosticsComponent],
|
|
183
|
+
template: `
|
|
184
|
+
<praxis-reactive-determination-diagnostics
|
|
185
|
+
[schema]="filteredSchema"
|
|
186
|
+
[executionEvents]="determinationEvents" />
|
|
187
|
+
`,
|
|
188
|
+
})
|
|
189
|
+
export class OperationDiagnosticsHostComponent {}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
O documento continua pertencendo ao Metadata Starter e não deve ser copiado
|
|
193
|
+
para `FormConfig`. Pedidos do assistente para mudar uma decisão devem ser
|
|
194
|
+
encaminhados ao authoring governado no Praxis Config; no metadata editor, a IA
|
|
195
|
+
pode apenas explicar e diagnosticar a evidência. Veja
|
|
196
|
+
`docs/reactive-determination-diagnostics.praxis.md`.
|
|
197
|
+
|
|
168
198
|
## Serviços e Registries
|
|
169
199
|
- `ConfigRegistryService` — resolve a lista de propriedades por tipo de campo.
|
|
170
200
|
- `DynamicFormFactoryService` — cria `FormGroup` com tipos/validadores coerentes.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-19T23:21:15.260Z",
|
|
4
4
|
"packageName": "@praxisui/metadata-editor",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.6",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, inject, Component, forwardRef, ElementRef, Input, Optional, ViewEncapsulation, EventEmitter, DestroyRef, Output, signal, ENVIRONMENT_INITIALIZER } from '@angular/core';
|
|
2
|
+
import { Injectable, inject, Component, forwardRef, ElementRef, Input, Optional, ViewEncapsulation, EventEmitter, DestroyRef, Output, input, computed, ChangeDetectionStrategy, signal, ENVIRONMENT_INITIALIZER } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { FormControl, FormGroup, FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS, ReactiveFormsModule, FormArray, FormBuilder } from '@angular/forms';
|
|
5
5
|
import * as i3$1 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
7
|
import { DynamicFieldLoaderDirective } from '@praxisui/dynamic-fields';
|
|
8
8
|
import * as i2$2 from '@praxisui/core';
|
|
9
|
-
import { providePraxisI18n, PraxisI18nService, PraxisIconDirective, FieldControlType, INLINE_FILTER_CONTROL_TYPES, resolveInlineFilterControlType, normalizeControlTypeToken, ComponentMetadataRegistry } from '@praxisui/core';
|
|
9
|
+
import { providePraxisI18n, PraxisI18nService, PraxisIconDirective, FieldControlType, INLINE_FILTER_CONTROL_TYPES, resolveInlineFilterControlType, normalizeControlTypeToken, normalizeReactiveDeterminations, ComponentMetadataRegistry } from '@praxisui/core';
|
|
10
10
|
import * as i5$1 from '@angular/material/expansion';
|
|
11
11
|
import { MatExpansionModule } from '@angular/material/expansion';
|
|
12
12
|
import * as i4 from '@angular/material/icon';
|
|
@@ -526,6 +526,44 @@ const METADATA_EDITOR_EN_US = {
|
|
|
526
526
|
'praxis.metadataEditor.presentationRulesBuilder.appearance.soft': 'Soft',
|
|
527
527
|
'praxis.metadataEditor.presentationRulesBuilder.appearance.outlined': 'Outlined',
|
|
528
528
|
'praxis.metadataEditor.presentationRulesBuilder.appearance.filled': 'Filled',
|
|
529
|
+
'praxis.metadataEditor.reactiveDeterminations.ariaLabel': 'Reactive determination diagnostics',
|
|
530
|
+
'praxis.metadataEditor.reactiveDeterminations.eyebrow': 'Read-only canonical evidence',
|
|
531
|
+
'praxis.metadataEditor.reactiveDeterminations.title': 'Reactive determinations',
|
|
532
|
+
'praxis.metadataEditor.reactiveDeterminations.description': 'Structural bindings published by the backend for this form operation.',
|
|
533
|
+
'praxis.metadataEditor.reactiveDeterminations.count': '{{count}} determination(s)',
|
|
534
|
+
'praxis.metadataEditor.reactiveDeterminations.invalidProjection': '{{count}} entry or entries were rejected by canonical normalization.',
|
|
535
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyInvalidTitle': 'No valid determinations',
|
|
536
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyInvalidDescription': 'Review the canonical backend publication; this editor does not repair the contract locally.',
|
|
537
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyTitle': 'No determinations for this operation',
|
|
538
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyDescription': 'The filtered schema did not publish x-ui.reactiveDeterminations.',
|
|
539
|
+
'praxis.metadataEditor.reactiveDeterminations.mode.create': 'Create',
|
|
540
|
+
'praxis.metadataEditor.reactiveDeterminations.mode.edit': 'Edit',
|
|
541
|
+
'praxis.metadataEditor.reactiveDeterminations.scopeBadges': 'Determination scope',
|
|
542
|
+
'praxis.metadataEditor.reactiveDeterminations.operation': 'Capability',
|
|
543
|
+
'praxis.metadataEditor.reactiveDeterminations.flow': 'Structural flow',
|
|
544
|
+
'praxis.metadataEditor.reactiveDeterminations.sources': 'Observed sources',
|
|
545
|
+
'praxis.metadataEditor.reactiveDeterminations.capability': 'Resolved capability',
|
|
546
|
+
'praxis.metadataEditor.reactiveDeterminations.targets': 'Determined fields',
|
|
547
|
+
'praxis.metadataEditor.reactiveDeterminations.inputBindings': 'Input bindings',
|
|
548
|
+
'praxis.metadataEditor.reactiveDeterminations.outputBindings': 'Output bindings',
|
|
549
|
+
'praxis.metadataEditor.reactiveDeterminations.scope': 'Schema operation',
|
|
550
|
+
'praxis.metadataEditor.reactiveDeterminations.provenance': 'Provenance',
|
|
551
|
+
'praxis.metadataEditor.reactiveDeterminations.latestExecution': 'Latest execution',
|
|
552
|
+
'praxis.metadataEditor.reactiveDeterminations.correlation': 'Correlation',
|
|
553
|
+
'praxis.metadataEditor.reactiveDeterminations.status.pending': 'In progress',
|
|
554
|
+
'praxis.metadataEditor.reactiveDeterminations.status.success': 'Applied',
|
|
555
|
+
'praxis.metadataEditor.reactiveDeterminations.status.skipped': 'Skipped',
|
|
556
|
+
'praxis.metadataEditor.reactiveDeterminations.status.error': 'Failed',
|
|
557
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.invalid-source': 'The source is not valid yet.',
|
|
558
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.response-binding-missing': 'The response did not contain every expected binding.',
|
|
559
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.operation-failed': 'The capability returned an error.',
|
|
560
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.operation-empty': 'The capability completed without a response.',
|
|
561
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.operation-timeout': 'The capability exceeded the time limit.',
|
|
562
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.superseded': 'A newer execution superseded this one.',
|
|
563
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.input-changed-awaiting-trigger': 'A contextual input changed; the draft is waiting for a new authoritative trigger.',
|
|
564
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.unknown': 'Unclassified diagnostic.',
|
|
565
|
+
'praxis.metadataEditor.reactiveDeterminations.governanceTitle': 'Governance boundary',
|
|
566
|
+
'praxis.metadataEditor.reactiveDeterminations.governanceDescription': 'This surface explains and diagnoses the projection. Decision changes must be handed off to governed Praxis Config authoring; the final submit remains under backend authority.',
|
|
529
567
|
};
|
|
530
568
|
|
|
531
569
|
const METADATA_EDITOR_PT_BR = {
|
|
@@ -648,6 +686,44 @@ const METADATA_EDITOR_PT_BR = {
|
|
|
648
686
|
'praxis.metadataEditor.presentationRulesBuilder.appearance.soft': 'Suave',
|
|
649
687
|
'praxis.metadataEditor.presentationRulesBuilder.appearance.outlined': 'Contornado',
|
|
650
688
|
'praxis.metadataEditor.presentationRulesBuilder.appearance.filled': 'Preenchido',
|
|
689
|
+
'praxis.metadataEditor.reactiveDeterminations.ariaLabel': 'Diagn\u00f3sticos de determina\u00e7\u00f5es reativas',
|
|
690
|
+
'praxis.metadataEditor.reactiveDeterminations.eyebrow': 'Evid\u00eancia can\u00f4nica somente leitura',
|
|
691
|
+
'praxis.metadataEditor.reactiveDeterminations.title': 'Determina\u00e7\u00f5es reativas',
|
|
692
|
+
'praxis.metadataEditor.reactiveDeterminations.description': 'Bindings estruturais publicados pelo backend para esta opera\u00e7\u00e3o de formul\u00e1rio.',
|
|
693
|
+
'praxis.metadataEditor.reactiveDeterminations.count': '{{count}} determina\u00e7\u00e3o(\u00f5es)',
|
|
694
|
+
'praxis.metadataEditor.reactiveDeterminations.invalidProjection': '{{count}} entrada(s) foram rejeitadas pela normaliza\u00e7\u00e3o can\u00f4nica.',
|
|
695
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyInvalidTitle': 'Nenhuma determina\u00e7\u00e3o v\u00e1lida',
|
|
696
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyInvalidDescription': 'Revise a publica\u00e7\u00e3o can\u00f4nica no backend; este editor n\u00e3o corrige o contrato localmente.',
|
|
697
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyTitle': 'Sem determina\u00e7\u00f5es para esta opera\u00e7\u00e3o',
|
|
698
|
+
'praxis.metadataEditor.reactiveDeterminations.emptyDescription': 'O schema filtrado n\u00e3o publicou x-ui.reactiveDeterminations.',
|
|
699
|
+
'praxis.metadataEditor.reactiveDeterminations.mode.create': 'Cria\u00e7\u00e3o',
|
|
700
|
+
'praxis.metadataEditor.reactiveDeterminations.mode.edit': 'Edi\u00e7\u00e3o',
|
|
701
|
+
'praxis.metadataEditor.reactiveDeterminations.scopeBadges': 'Escopo da determina\u00e7\u00e3o',
|
|
702
|
+
'praxis.metadataEditor.reactiveDeterminations.operation': 'Capability',
|
|
703
|
+
'praxis.metadataEditor.reactiveDeterminations.flow': 'Fluxo estrutural',
|
|
704
|
+
'praxis.metadataEditor.reactiveDeterminations.sources': 'Origens observadas',
|
|
705
|
+
'praxis.metadataEditor.reactiveDeterminations.capability': 'Capability resolvida',
|
|
706
|
+
'praxis.metadataEditor.reactiveDeterminations.targets': 'Campos determinados',
|
|
707
|
+
'praxis.metadataEditor.reactiveDeterminations.inputBindings': 'Bindings de entrada',
|
|
708
|
+
'praxis.metadataEditor.reactiveDeterminations.outputBindings': 'Bindings de sa\u00edda',
|
|
709
|
+
'praxis.metadataEditor.reactiveDeterminations.scope': 'Opera\u00e7\u00e3o do schema',
|
|
710
|
+
'praxis.metadataEditor.reactiveDeterminations.provenance': 'Proveni\u00eancia',
|
|
711
|
+
'praxis.metadataEditor.reactiveDeterminations.latestExecution': '\u00daltima execu\u00e7\u00e3o',
|
|
712
|
+
'praxis.metadataEditor.reactiveDeterminations.correlation': 'Correla\u00e7\u00e3o',
|
|
713
|
+
'praxis.metadataEditor.reactiveDeterminations.status.pending': 'Em andamento',
|
|
714
|
+
'praxis.metadataEditor.reactiveDeterminations.status.success': 'Aplicada',
|
|
715
|
+
'praxis.metadataEditor.reactiveDeterminations.status.skipped': 'Ignorada',
|
|
716
|
+
'praxis.metadataEditor.reactiveDeterminations.status.error': 'Falhou',
|
|
717
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.invalid-source': 'A origem ainda n\u00e3o \u00e9 v\u00e1lida.',
|
|
718
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.response-binding-missing': 'A resposta n\u00e3o continha todos os bindings esperados.',
|
|
719
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.operation-failed': 'A capability retornou erro.',
|
|
720
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.operation-empty': 'A capability terminou sem resposta.',
|
|
721
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.operation-timeout': 'A capability excedeu o tempo limite.',
|
|
722
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.superseded': 'Uma execu\u00e7\u00e3o mais recente substituiu esta.',
|
|
723
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.input-changed-awaiting-trigger': 'Uma entrada contextual mudou; o draft aguarda um novo gatilho autoritativo.',
|
|
724
|
+
'praxis.metadataEditor.reactiveDeterminations.reason.unknown': 'Diagn\u00f3stico n\u00e3o classificado.',
|
|
725
|
+
'praxis.metadataEditor.reactiveDeterminations.governanceTitle': 'Fronteira de governan\u00e7a',
|
|
726
|
+
'praxis.metadataEditor.reactiveDeterminations.governanceDescription': 'Esta tela explica e diagnostica a proje\u00e7\u00e3o. Altera\u00e7\u00f5es da decis\u00e3o devem ser encaminhadas ao fluxo governado do Praxis Config; o submit final continua sob autoridade do backend.',
|
|
651
727
|
};
|
|
652
728
|
|
|
653
729
|
function createPraxisMetadataEditorI18nConfig(options = {}) {
|
|
@@ -10734,6 +10810,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
10734
10810
|
type: Output
|
|
10735
10811
|
}] } });
|
|
10736
10812
|
|
|
10813
|
+
/**
|
|
10814
|
+
* Read-only projection of the canonical x-ui.reactiveDeterminations contract.
|
|
10815
|
+
*
|
|
10816
|
+
* This component deliberately has no authoring output, form control, raw href or
|
|
10817
|
+
* persistence hook. Governed decision authoring remains owned by Praxis Config.
|
|
10818
|
+
*/
|
|
10819
|
+
class ReactiveDeterminationDiagnosticsComponent {
|
|
10820
|
+
/** Exact response document returned by /schemas/filtered. */
|
|
10821
|
+
schema = input(null, ...(ngDevMode ? [{ debugName: "schema" }] : /* istanbul ignore next */ []));
|
|
10822
|
+
/** Optional metadata-only runtime events. Values and response payloads are not accepted. */
|
|
10823
|
+
executionEvents = input([], ...(ngDevMode ? [{ debugName: "executionEvents" }] : /* istanbul ignore next */ []));
|
|
10824
|
+
projection = computed(() => this.extractProjection(this.schema()), ...(ngDevMode ? [{ debugName: "projection" }] : /* istanbul ignore next */ []));
|
|
10825
|
+
definitions = computed(() => normalizeReactiveDeterminations(this.projection().raw), ...(ngDevMode ? [{ debugName: "definitions" }] : /* istanbul ignore next */ []));
|
|
10826
|
+
cards = computed(() => this.definitions().map((definition) => ({
|
|
10827
|
+
definition,
|
|
10828
|
+
latestEvent: this.findLatestEvent(definition),
|
|
10829
|
+
})), ...(ngDevMode ? [{ debugName: "cards" }] : /* istanbul ignore next */ []));
|
|
10830
|
+
projectionPresent = computed(() => this.projection().present, ...(ngDevMode ? [{ debugName: "projectionPresent" }] : /* istanbul ignore next */ []));
|
|
10831
|
+
rejectedEntryCount = computed(() => Math.max(0, this.projection().rawEntryCount - this.definitions().length), ...(ngDevMode ? [{ debugName: "rejectedEntryCount" }] : /* istanbul ignore next */ []));
|
|
10832
|
+
i18n = inject(PraxisI18nService, { optional: true });
|
|
10833
|
+
text(key, fallback, params) {
|
|
10834
|
+
return this.i18n?.t(`praxis.metadataEditor.reactiveDeterminations.${key}`, params, fallback)
|
|
10835
|
+
?? fallback;
|
|
10836
|
+
}
|
|
10837
|
+
formModeLabel(mode) {
|
|
10838
|
+
return mode === 'create'
|
|
10839
|
+
? this.text('mode.create', 'Cria\u00e7\u00e3o')
|
|
10840
|
+
: this.text('mode.edit', 'Edi\u00e7\u00e3o');
|
|
10841
|
+
}
|
|
10842
|
+
statusLabel(status) {
|
|
10843
|
+
const fallbacks = {
|
|
10844
|
+
pending: 'Em andamento',
|
|
10845
|
+
success: 'Aplicada',
|
|
10846
|
+
skipped: 'Ignorada',
|
|
10847
|
+
error: 'Falhou',
|
|
10848
|
+
};
|
|
10849
|
+
return this.text(`status.${status}`, fallbacks[status]);
|
|
10850
|
+
}
|
|
10851
|
+
reasonLabel(reason) {
|
|
10852
|
+
if (!reason)
|
|
10853
|
+
return null;
|
|
10854
|
+
const knownReasons = {
|
|
10855
|
+
'invalid-source': 'A origem ainda n\u00e3o \u00e9 v\u00e1lida.',
|
|
10856
|
+
'response-binding-missing': 'A resposta n\u00e3o continha todos os bindings esperados.',
|
|
10857
|
+
'operation-failed': 'A capability retornou erro.',
|
|
10858
|
+
'operation-empty': 'A capability terminou sem resposta.',
|
|
10859
|
+
'operation-timeout': 'A capability excedeu o tempo limite.',
|
|
10860
|
+
superseded: 'Uma execu\u00e7\u00e3o mais recente substituiu esta.',
|
|
10861
|
+
'duplicate-determination-id': 'A proje\u00e7\u00e3o publicou um identificador duplicado.',
|
|
10862
|
+
'source-control-missing': 'Um campo de origem n\u00e3o existe neste formul\u00e1rio.',
|
|
10863
|
+
'input-control-missing': 'Um binding de entrada n\u00e3o existe neste formul\u00e1rio.',
|
|
10864
|
+
'target-control-missing': 'Um campo determinado n\u00e3o existe neste formul\u00e1rio.',
|
|
10865
|
+
'upstream-input-unavailable': 'Uma determina\u00e7\u00e3o anterior n\u00e3o produziu entrada autoritativa.',
|
|
10866
|
+
'request-binding-invalid': 'Os bindings n\u00e3o formaram uma requisi\u00e7\u00e3o v\u00e1lida.',
|
|
10867
|
+
'unchanged-inputs': 'As entradas autoritativas n\u00e3o mudaram desde a \u00faltima aplica\u00e7\u00e3o.',
|
|
10868
|
+
'commit-failed': 'O formul\u00e1rio rejeitou a aplica\u00e7\u00e3o at\u00f4mica do draft.',
|
|
10869
|
+
'input-changed-awaiting-trigger': 'Uma entrada contextual mudou; o draft aguarda um novo gatilho autoritativo.',
|
|
10870
|
+
};
|
|
10871
|
+
const fallback = knownReasons[reason];
|
|
10872
|
+
return fallback ? this.text(`reason.${reason}`, fallback) : this.text('reason.unknown', 'Diagn\u00f3stico n\u00e3o classificado.');
|
|
10873
|
+
}
|
|
10874
|
+
extractProjection(schema) {
|
|
10875
|
+
if (!this.isRecord(schema)) {
|
|
10876
|
+
return { present: false, raw: undefined, rawEntryCount: 0 };
|
|
10877
|
+
}
|
|
10878
|
+
const xUi = schema['x-ui'];
|
|
10879
|
+
if (!this.isRecord(xUi) || !Object.prototype.hasOwnProperty.call(xUi, 'reactiveDeterminations')) {
|
|
10880
|
+
return { present: false, raw: undefined, rawEntryCount: 0 };
|
|
10881
|
+
}
|
|
10882
|
+
const raw = xUi['reactiveDeterminations'];
|
|
10883
|
+
return {
|
|
10884
|
+
present: true,
|
|
10885
|
+
raw,
|
|
10886
|
+
rawEntryCount: Array.isArray(raw) ? raw.length : 1,
|
|
10887
|
+
};
|
|
10888
|
+
}
|
|
10889
|
+
findLatestEvent(definition) {
|
|
10890
|
+
const events = this.executionEvents();
|
|
10891
|
+
for (let index = events.length - 1; index >= 0; index -= 1) {
|
|
10892
|
+
const event = events[index];
|
|
10893
|
+
if (event?.determinationId === definition.id
|
|
10894
|
+
&& event.operationId === definition.capability.operationId
|
|
10895
|
+
&& this.isExecutionStatus(event.status)
|
|
10896
|
+
&& Number.isFinite(event.durationMs)
|
|
10897
|
+
&& event.durationMs >= 0) {
|
|
10898
|
+
return event;
|
|
10899
|
+
}
|
|
10900
|
+
}
|
|
10901
|
+
return undefined;
|
|
10902
|
+
}
|
|
10903
|
+
isExecutionStatus(value) {
|
|
10904
|
+
return value === 'pending' || value === 'success' || value === 'skipped' || value === 'error';
|
|
10905
|
+
}
|
|
10906
|
+
isRecord(value) {
|
|
10907
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
10908
|
+
}
|
|
10909
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ReactiveDeterminationDiagnosticsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10910
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: ReactiveDeterminationDiagnosticsComponent, isStandalone: true, selector: "praxis-reactive-determination-diagnostics", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: false, transformFunction: null }, executionEvents: { classPropertyName: "executionEvents", publicName: "executionEvents", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<section\n class=\"determination-diagnostics\"\n data-praxis-readonly-materialization=\"reactive-determinations\"\n [attr.aria-label]=\"text('ariaLabel', 'Diagn\\u00f3sticos de determina\\u00e7\\u00f5es reativas')\"\n>\n <header class=\"determination-diagnostics__header\">\n <div>\n <span class=\"determination-diagnostics__eyebrow\">\n {{ text('eyebrow', 'Evid\\u00eancia can\\u00f4nica somente leitura') }}\n </span>\n <h2>{{ text('title', 'Determina\\u00e7\\u00f5es reativas') }}</h2>\n <p>\n {{ text('description', 'Bindings estruturais publicados pelo backend para esta opera\\u00e7\\u00e3o de formul\\u00e1rio.') }}\n </p>\n </div>\n <span class=\"determination-diagnostics__count\">\n {{ text('count', '{{count}} determina\\u00e7\\u00e3o(\\u00f5es)', { count: cards().length }) }}\n </span>\n </header>\n\n @if (rejectedEntryCount() > 0) {\n <p class=\"determination-diagnostics__warning\" role=\"status\">\n {{ text('invalidProjection', '{{count}} entrada(s) foram rejeitadas pela normaliza\\u00e7\\u00e3o can\\u00f4nica.', { count: rejectedEntryCount() }) }}\n </p>\n }\n\n @if (!cards().length) {\n <div class=\"determination-diagnostics__empty\">\n @if (projectionPresent()) {\n <strong>{{ text('emptyInvalidTitle', 'Nenhuma determina\\u00e7\\u00e3o v\\u00e1lida') }}</strong>\n <span>{{ text('emptyInvalidDescription', 'Revise a publica\\u00e7\\u00e3o can\\u00f4nica no backend; este editor n\\u00e3o corrige o contrato localmente.') }}</span>\n } @else {\n <strong>{{ text('emptyTitle', 'Sem determina\\u00e7\\u00f5es para esta opera\\u00e7\\u00e3o') }}</strong>\n <span>{{ text('emptyDescription', 'O schema filtrado n\\u00e3o publicou x-ui.reactiveDeterminations.') }}</span>\n }\n </div>\n }\n\n <div class=\"determination-diagnostics__cards\">\n @for (card of cards(); track card.definition.id) {\n <article class=\"determination-card\">\n <header class=\"determination-card__header\">\n <div>\n <h3>{{ card.definition.id }}</h3>\n <p>\n {{ text('operation', 'Capability') }}\n <code>{{ card.definition.capability.operationId }}</code>\n </p>\n </div>\n <div\n class=\"determination-card__badges\"\n [attr.aria-label]=\"text('scopeBadges', 'Escopo da determina\\u00e7\\u00e3o')\"\n >\n <span>{{ formModeLabel(card.definition.scope.formMode) }}</span>\n <span>{{ card.definition.trigger.mode }}</span>\n <span>{{ card.definition.capability.method }}</span>\n </div>\n </header>\n\n <div class=\"determination-card__flow\" [attr.aria-label]=\"text('flow', 'Fluxo estrutural')\">\n <div>\n <span>{{ text('sources', 'Origens observadas') }}</span>\n @for (source of card.definition.trigger.sourcePaths; track source) {\n <code>{{ source }}</code>\n }\n </div>\n <span class=\"determination-card__arrow\" aria-hidden=\"true\">\u2192</span>\n <div>\n <span>{{ text('capability', 'Capability resolvida') }}</span>\n <strong>{{ card.definition.capability.operationId }}</strong>\n </div>\n <span class=\"determination-card__arrow\" aria-hidden=\"true\">\u2192</span>\n <div>\n <span>{{ text('targets', 'Campos determinados') }}</span>\n @for (output of card.definition.outputs; track output.fieldPath) {\n <code>{{ output.fieldPath }}</code>\n }\n </div>\n </div>\n\n <div class=\"determination-card__bindings\">\n <section>\n <h4>{{ text('inputBindings', 'Bindings de entrada') }}</h4>\n <dl>\n @for (input of card.definition.inputs; track input.requestPath) {\n <div>\n <dt><code>{{ input.fieldPath }}</code></dt>\n <dd><span aria-hidden=\"true\">\u2192</span> <code>{{ input.requestPath }}</code></dd>\n </div>\n }\n </dl>\n </section>\n <section>\n <h4>{{ text('outputBindings', 'Bindings de sa\\u00edda') }}</h4>\n <dl>\n @for (output of card.definition.outputs; track output.fieldPath) {\n <div>\n <dt><code>{{ output.responsePath }}</code></dt>\n <dd><span aria-hidden=\"true\">\u2192</span> <code>{{ output.fieldPath }}</code></dd>\n </div>\n }\n </dl>\n </section>\n </div>\n\n <footer class=\"determination-card__footer\">\n <span>\n {{ text('scope', 'Opera\\u00e7\\u00e3o do schema') }}:\n <code>{{ card.definition.scope.schemaOperationId }}</code>\n </span>\n <span>\n {{ text('provenance', 'Proveni\\u00eancia') }}:\n <code>{{ card.definition.provenance.kind }}:{{ card.definition.provenance.source }}@{{ card.definition.provenance.version || '\\u2014' }}</code>\n </span>\n </footer>\n\n @if (card.latestEvent; as event) {\n <aside class=\"determination-card__runtime\" [attr.data-status]=\"event.status\" aria-live=\"polite\">\n <strong>{{ text('latestExecution', '\\u00daltima execu\\u00e7\\u00e3o') }}</strong>\n <span>{{ statusLabel(event.status) }}</span>\n <span>{{ event.durationMs }} ms</span>\n @if (reasonLabel(event.reason); as reason) {\n <span>{{ reason }}</span>\n }\n <span>\n {{ text('correlation', 'Correla\\u00e7\\u00e3o') }}:\n <code>{{ event.correlationId }}</code>\n </span>\n </aside>\n }\n </article>\n }\n </div>\n\n <aside class=\"determination-diagnostics__governance\">\n <strong>{{ text('governanceTitle', 'Fronteira de governan\\u00e7a') }}</strong>\n <span>\n {{ text('governanceDescription', 'Esta tela explica e diagnostica a proje\\u00e7\\u00e3o. Altera\\u00e7\\u00f5es da decis\\u00e3o devem ser encaminhadas ao fluxo governado do Praxis Config; o submit final continua sob autoridade do backend.') }}\n </span>\n </aside>\n</section>\n", styles: [":host{display:block;min-width:0;container-type:inline-size}.determination-diagnostics{display:grid;gap:1rem;color:var(--mat-sys-on-surface, #1b1b1f)}.determination-diagnostics__header,.determination-card__header,.determination-card__footer,.determination-card__runtime,.determination-diagnostics__governance{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.determination-diagnostics__header h2,.determination-card__header h3,.determination-card__bindings h4{margin:0}.determination-card__header>div:first-child,.determination-card__header h3,.determination-card__header p,.determination-card__header code,.determination-card__flow strong{min-width:0;overflow-wrap:anywhere}.determination-diagnostics__header p,.determination-card__header p{margin:.25rem 0 0;color:var(--mat-sys-on-surface-variant, #46464f)}.determination-diagnostics__eyebrow{display:block;margin-bottom:.25rem;color:var(--mat-sys-primary, #4051b5);font-size:.75rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.determination-diagnostics__count,.determination-card__badges span{border-radius:999px;background:var(--mat-sys-secondary-container, #e1e2ec);color:var(--mat-sys-on-secondary-container, #1d1f2a);padding:.3rem .65rem;font-size:.75rem;font-weight:700;white-space:nowrap}.determination-diagnostics__warning,.determination-diagnostics__empty,.determination-diagnostics__governance{margin:0;border-radius:.75rem;padding:.85rem 1rem}.determination-diagnostics__warning{border:1px solid var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-error, #ba1a1a)}.determination-diagnostics__empty{display:grid;gap:.25rem;border:1px dashed var(--mat-sys-outline, #777680);color:var(--mat-sys-on-surface-variant, #46464f)}.determination-diagnostics__cards{display:grid;gap:1rem}.determination-card{display:grid;gap:1rem;border:1px solid var(--mat-sys-outline-variant, #c7c5d0);border-radius:1rem;background:var(--mat-sys-surface-container-low, #f6f3fb);padding:1rem}.determination-card__badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.35rem}.determination-card__flow{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:.75rem}.determination-card__flow>div{display:grid;gap:.35rem;min-width:0;border-radius:.75rem;background:var(--mat-sys-surface-container, #eeebf2);padding:.75rem}.determination-card__flow>div>span{color:var(--mat-sys-on-surface-variant, #46464f);font-size:.75rem}.determination-card__flow strong,.determination-card__flow code{line-height:1.35}.determination-card__arrow{color:var(--mat-sys-primary, #4051b5);font-size:1.35rem}.determination-card__bindings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.determination-card__bindings section{min-width:0}.determination-card__bindings dl{display:grid;gap:.35rem;margin:.5rem 0 0}.determination-card__bindings dl>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.5rem}.determination-card__bindings dt,.determination-card__bindings dd{min-width:0;margin:0}.determination-card__bindings dd{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.35rem}code{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.82em}.determination-card__footer{flex-wrap:wrap;padding-top:.75rem;border-top:1px solid var(--mat-sys-outline-variant, #c7c5d0);color:var(--mat-sys-on-surface-variant, #46464f);font-size:.8rem}.determination-card__runtime{justify-content:flex-start;flex-wrap:wrap;border-radius:.75rem;background:var(--mat-sys-tertiary-container, #ffdad6);padding:.7rem .85rem;font-size:.82rem}.determination-card__runtime[data-status=success]{background:var(--mat-sys-secondary-container, #d7e8d4)}.determination-card__runtime[data-status=pending]{background:var(--mat-sys-primary-container, #dce1ff)}.determination-diagnostics__governance{justify-content:flex-start;background:var(--mat-sys-surface-container, #eeebf2)}@media(max-width:760px){.determination-diagnostics__header,.determination-card__header,.determination-diagnostics__governance{flex-direction:column}.determination-card__flow{grid-template-columns:1fr}.determination-card__arrow{transform:rotate(90deg);justify-self:center}.determination-card__bindings{grid-template-columns:1fr}.determination-card__badges{justify-content:flex-start}}@container (max-width: 42rem){.determination-card__header,.determination-card__footer,.determination-card__runtime,.determination-diagnostics__governance{flex-direction:column}.determination-card__flow{grid-template-columns:1fr}.determination-card__arrow{transform:rotate(90deg);justify-self:center}.determination-card__bindings{grid-template-columns:1fr}.determination-card__badges{justify-content:flex-start}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10911
|
+
}
|
|
10912
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ReactiveDeterminationDiagnosticsComponent, decorators: [{
|
|
10913
|
+
type: Component,
|
|
10914
|
+
args: [{ selector: 'praxis-reactive-determination-diagnostics', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"determination-diagnostics\"\n data-praxis-readonly-materialization=\"reactive-determinations\"\n [attr.aria-label]=\"text('ariaLabel', 'Diagn\\u00f3sticos de determina\\u00e7\\u00f5es reativas')\"\n>\n <header class=\"determination-diagnostics__header\">\n <div>\n <span class=\"determination-diagnostics__eyebrow\">\n {{ text('eyebrow', 'Evid\\u00eancia can\\u00f4nica somente leitura') }}\n </span>\n <h2>{{ text('title', 'Determina\\u00e7\\u00f5es reativas') }}</h2>\n <p>\n {{ text('description', 'Bindings estruturais publicados pelo backend para esta opera\\u00e7\\u00e3o de formul\\u00e1rio.') }}\n </p>\n </div>\n <span class=\"determination-diagnostics__count\">\n {{ text('count', '{{count}} determina\\u00e7\\u00e3o(\\u00f5es)', { count: cards().length }) }}\n </span>\n </header>\n\n @if (rejectedEntryCount() > 0) {\n <p class=\"determination-diagnostics__warning\" role=\"status\">\n {{ text('invalidProjection', '{{count}} entrada(s) foram rejeitadas pela normaliza\\u00e7\\u00e3o can\\u00f4nica.', { count: rejectedEntryCount() }) }}\n </p>\n }\n\n @if (!cards().length) {\n <div class=\"determination-diagnostics__empty\">\n @if (projectionPresent()) {\n <strong>{{ text('emptyInvalidTitle', 'Nenhuma determina\\u00e7\\u00e3o v\\u00e1lida') }}</strong>\n <span>{{ text('emptyInvalidDescription', 'Revise a publica\\u00e7\\u00e3o can\\u00f4nica no backend; este editor n\\u00e3o corrige o contrato localmente.') }}</span>\n } @else {\n <strong>{{ text('emptyTitle', 'Sem determina\\u00e7\\u00f5es para esta opera\\u00e7\\u00e3o') }}</strong>\n <span>{{ text('emptyDescription', 'O schema filtrado n\\u00e3o publicou x-ui.reactiveDeterminations.') }}</span>\n }\n </div>\n }\n\n <div class=\"determination-diagnostics__cards\">\n @for (card of cards(); track card.definition.id) {\n <article class=\"determination-card\">\n <header class=\"determination-card__header\">\n <div>\n <h3>{{ card.definition.id }}</h3>\n <p>\n {{ text('operation', 'Capability') }}\n <code>{{ card.definition.capability.operationId }}</code>\n </p>\n </div>\n <div\n class=\"determination-card__badges\"\n [attr.aria-label]=\"text('scopeBadges', 'Escopo da determina\\u00e7\\u00e3o')\"\n >\n <span>{{ formModeLabel(card.definition.scope.formMode) }}</span>\n <span>{{ card.definition.trigger.mode }}</span>\n <span>{{ card.definition.capability.method }}</span>\n </div>\n </header>\n\n <div class=\"determination-card__flow\" [attr.aria-label]=\"text('flow', 'Fluxo estrutural')\">\n <div>\n <span>{{ text('sources', 'Origens observadas') }}</span>\n @for (source of card.definition.trigger.sourcePaths; track source) {\n <code>{{ source }}</code>\n }\n </div>\n <span class=\"determination-card__arrow\" aria-hidden=\"true\">\u2192</span>\n <div>\n <span>{{ text('capability', 'Capability resolvida') }}</span>\n <strong>{{ card.definition.capability.operationId }}</strong>\n </div>\n <span class=\"determination-card__arrow\" aria-hidden=\"true\">\u2192</span>\n <div>\n <span>{{ text('targets', 'Campos determinados') }}</span>\n @for (output of card.definition.outputs; track output.fieldPath) {\n <code>{{ output.fieldPath }}</code>\n }\n </div>\n </div>\n\n <div class=\"determination-card__bindings\">\n <section>\n <h4>{{ text('inputBindings', 'Bindings de entrada') }}</h4>\n <dl>\n @for (input of card.definition.inputs; track input.requestPath) {\n <div>\n <dt><code>{{ input.fieldPath }}</code></dt>\n <dd><span aria-hidden=\"true\">\u2192</span> <code>{{ input.requestPath }}</code></dd>\n </div>\n }\n </dl>\n </section>\n <section>\n <h4>{{ text('outputBindings', 'Bindings de sa\\u00edda') }}</h4>\n <dl>\n @for (output of card.definition.outputs; track output.fieldPath) {\n <div>\n <dt><code>{{ output.responsePath }}</code></dt>\n <dd><span aria-hidden=\"true\">\u2192</span> <code>{{ output.fieldPath }}</code></dd>\n </div>\n }\n </dl>\n </section>\n </div>\n\n <footer class=\"determination-card__footer\">\n <span>\n {{ text('scope', 'Opera\\u00e7\\u00e3o do schema') }}:\n <code>{{ card.definition.scope.schemaOperationId }}</code>\n </span>\n <span>\n {{ text('provenance', 'Proveni\\u00eancia') }}:\n <code>{{ card.definition.provenance.kind }}:{{ card.definition.provenance.source }}@{{ card.definition.provenance.version || '\\u2014' }}</code>\n </span>\n </footer>\n\n @if (card.latestEvent; as event) {\n <aside class=\"determination-card__runtime\" [attr.data-status]=\"event.status\" aria-live=\"polite\">\n <strong>{{ text('latestExecution', '\\u00daltima execu\\u00e7\\u00e3o') }}</strong>\n <span>{{ statusLabel(event.status) }}</span>\n <span>{{ event.durationMs }} ms</span>\n @if (reasonLabel(event.reason); as reason) {\n <span>{{ reason }}</span>\n }\n <span>\n {{ text('correlation', 'Correla\\u00e7\\u00e3o') }}:\n <code>{{ event.correlationId }}</code>\n </span>\n </aside>\n }\n </article>\n }\n </div>\n\n <aside class=\"determination-diagnostics__governance\">\n <strong>{{ text('governanceTitle', 'Fronteira de governan\\u00e7a') }}</strong>\n <span>\n {{ text('governanceDescription', 'Esta tela explica e diagnostica a proje\\u00e7\\u00e3o. Altera\\u00e7\\u00f5es da decis\\u00e3o devem ser encaminhadas ao fluxo governado do Praxis Config; o submit final continua sob autoridade do backend.') }}\n </span>\n </aside>\n</section>\n", styles: [":host{display:block;min-width:0;container-type:inline-size}.determination-diagnostics{display:grid;gap:1rem;color:var(--mat-sys-on-surface, #1b1b1f)}.determination-diagnostics__header,.determination-card__header,.determination-card__footer,.determination-card__runtime,.determination-diagnostics__governance{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.determination-diagnostics__header h2,.determination-card__header h3,.determination-card__bindings h4{margin:0}.determination-card__header>div:first-child,.determination-card__header h3,.determination-card__header p,.determination-card__header code,.determination-card__flow strong{min-width:0;overflow-wrap:anywhere}.determination-diagnostics__header p,.determination-card__header p{margin:.25rem 0 0;color:var(--mat-sys-on-surface-variant, #46464f)}.determination-diagnostics__eyebrow{display:block;margin-bottom:.25rem;color:var(--mat-sys-primary, #4051b5);font-size:.75rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.determination-diagnostics__count,.determination-card__badges span{border-radius:999px;background:var(--mat-sys-secondary-container, #e1e2ec);color:var(--mat-sys-on-secondary-container, #1d1f2a);padding:.3rem .65rem;font-size:.75rem;font-weight:700;white-space:nowrap}.determination-diagnostics__warning,.determination-diagnostics__empty,.determination-diagnostics__governance{margin:0;border-radius:.75rem;padding:.85rem 1rem}.determination-diagnostics__warning{border:1px solid var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-error, #ba1a1a)}.determination-diagnostics__empty{display:grid;gap:.25rem;border:1px dashed var(--mat-sys-outline, #777680);color:var(--mat-sys-on-surface-variant, #46464f)}.determination-diagnostics__cards{display:grid;gap:1rem}.determination-card{display:grid;gap:1rem;border:1px solid var(--mat-sys-outline-variant, #c7c5d0);border-radius:1rem;background:var(--mat-sys-surface-container-low, #f6f3fb);padding:1rem}.determination-card__badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.35rem}.determination-card__flow{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:.75rem}.determination-card__flow>div{display:grid;gap:.35rem;min-width:0;border-radius:.75rem;background:var(--mat-sys-surface-container, #eeebf2);padding:.75rem}.determination-card__flow>div>span{color:var(--mat-sys-on-surface-variant, #46464f);font-size:.75rem}.determination-card__flow strong,.determination-card__flow code{line-height:1.35}.determination-card__arrow{color:var(--mat-sys-primary, #4051b5);font-size:1.35rem}.determination-card__bindings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.determination-card__bindings section{min-width:0}.determination-card__bindings dl{display:grid;gap:.35rem;margin:.5rem 0 0}.determination-card__bindings dl>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.5rem}.determination-card__bindings dt,.determination-card__bindings dd{min-width:0;margin:0}.determination-card__bindings dd{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.35rem}code{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.82em}.determination-card__footer{flex-wrap:wrap;padding-top:.75rem;border-top:1px solid var(--mat-sys-outline-variant, #c7c5d0);color:var(--mat-sys-on-surface-variant, #46464f);font-size:.8rem}.determination-card__runtime{justify-content:flex-start;flex-wrap:wrap;border-radius:.75rem;background:var(--mat-sys-tertiary-container, #ffdad6);padding:.7rem .85rem;font-size:.82rem}.determination-card__runtime[data-status=success]{background:var(--mat-sys-secondary-container, #d7e8d4)}.determination-card__runtime[data-status=pending]{background:var(--mat-sys-primary-container, #dce1ff)}.determination-diagnostics__governance{justify-content:flex-start;background:var(--mat-sys-surface-container, #eeebf2)}@media(max-width:760px){.determination-diagnostics__header,.determination-card__header,.determination-diagnostics__governance{flex-direction:column}.determination-card__flow{grid-template-columns:1fr}.determination-card__arrow{transform:rotate(90deg);justify-self:center}.determination-card__bindings{grid-template-columns:1fr}.determination-card__badges{justify-content:flex-start}}@container (max-width: 42rem){.determination-card__header,.determination-card__footer,.determination-card__runtime,.determination-diagnostics__governance{flex-direction:column}.determination-card__flow{grid-template-columns:1fr}.determination-card__arrow{transform:rotate(90deg);justify-self:center}.determination-card__bindings{grid-template-columns:1fr}.determination-card__badges{justify-content:flex-start}}\n"] }]
|
|
10915
|
+
}], propDecorators: { schema: [{ type: i0.Input, args: [{ isSignal: true, alias: "schema", required: false }] }], executionEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "executionEvents", required: false }] }] } });
|
|
10916
|
+
|
|
10737
10917
|
class CascadeRulesService {
|
|
10738
10918
|
getFieldLabelMap(fields) {
|
|
10739
10919
|
const map = new Map();
|
|
@@ -12433,4 +12613,4 @@ function providePraxisMetadataEditorMetadata() {
|
|
|
12433
12613
|
* Generated bundle index. Do not edit.
|
|
12434
12614
|
*/
|
|
12435
12615
|
|
|
12436
|
-
export { CascadeManagerTabComponent, CascadeRulesService, ConfigRegistryService, ContextValidatorRegistryService, DynamicEditorRendererComponent, DynamicFormFactoryService, EditorComponentRegistryService, FieldMetadataEditorComponent, METADATA_EDITOR_AI_CAPABILITIES, METADATA_EDITOR_AI_CAPABILITY_CATALOG, PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST, PRAXIS_METADATA_EDITOR_COMPONENT_METADATA, SchemaNormalizerService, providePraxisMetadataEditorMetadata };
|
|
12616
|
+
export { CascadeManagerTabComponent, CascadeRulesService, ConfigRegistryService, ContextValidatorRegistryService, DynamicEditorRendererComponent, DynamicFormFactoryService, EditorComponentRegistryService, FieldMetadataEditorComponent, METADATA_EDITOR_AI_CAPABILITIES, METADATA_EDITOR_AI_CAPABILITY_CATALOG, PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST, PRAXIS_METADATA_EDITOR_COMPONENT_METADATA, ReactiveDeterminationDiagnosticsComponent, SchemaNormalizerService, providePraxisMetadataEditorMetadata };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/metadata-editor",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.6",
|
|
4
4
|
"description": "Metadata editor for Praxis UI fields and components with runtime integration.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"@angular/cdk": "^21.0.0",
|
|
9
9
|
"@angular/forms": "^21.0.0",
|
|
10
10
|
"@angular/material": "^21.0.0",
|
|
11
|
-
"@praxisui/ai": "^9.0.
|
|
12
|
-
"@praxisui/core": "^9.0.
|
|
13
|
-
"@praxisui/dynamic-fields": "^9.0.
|
|
14
|
-
"@praxisui/settings-panel": "^9.0.
|
|
11
|
+
"@praxisui/ai": "^9.0.6",
|
|
12
|
+
"@praxisui/core": "^9.0.6",
|
|
13
|
+
"@praxisui/dynamic-fields": "^9.0.6",
|
|
14
|
+
"@praxisui/settings-panel": "^9.0.6",
|
|
15
15
|
"rxjs": "~7.8.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ValidatorFn, FormBuilder, FormGroup, AbstractControl, FormControl } from '@angular/forms';
|
|
2
|
-
import { FieldControlType, FieldDefinition, FieldMetadata, IconPickerService, PraxisI18nService, AiCapabilityCatalog, ComponentAuthoringManifest, ComponentDocMeta } from '@praxisui/core';
|
|
2
|
+
import { FieldControlType, FieldDefinition, FieldMetadata, IconPickerService, PraxisI18nService, ReactiveDeterminationExecutionEvent, ReactiveDeterminationDefinition, ReactiveDeterminationExecutionStatus, AiCapabilityCatalog, ComponentAuthoringManifest, ComponentDocMeta } from '@praxisui/core';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Type, OnChanges, SimpleChanges, OnInit, EventEmitter, Provider } from '@angular/core';
|
|
5
5
|
import { MatDialog } from '@angular/material/dialog';
|
|
@@ -206,6 +206,39 @@ declare class FieldMetadataEditorComponent implements OnInit {
|
|
|
206
206
|
static ɵcmp: i0.ɵɵComponentDeclaration<FieldMetadataEditorComponent, "praxis-field-metadata-editor", never, { "controlType": { "alias": "controlType"; "required": false; }; "seed": { "alias": "seed"; "required": false; }; }, { "applied": "applied"; "cancel": "cancel"; }, never, never, true, never>;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
+
interface ReactiveDeterminationDiagnosticCard {
|
|
210
|
+
readonly definition: ReactiveDeterminationDefinition;
|
|
211
|
+
readonly latestEvent?: ReactiveDeterminationExecutionEvent;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Read-only projection of the canonical x-ui.reactiveDeterminations contract.
|
|
215
|
+
*
|
|
216
|
+
* This component deliberately has no authoring output, form control, raw href or
|
|
217
|
+
* persistence hook. Governed decision authoring remains owned by Praxis Config.
|
|
218
|
+
*/
|
|
219
|
+
declare class ReactiveDeterminationDiagnosticsComponent {
|
|
220
|
+
/** Exact response document returned by /schemas/filtered. */
|
|
221
|
+
readonly schema: i0.InputSignal<unknown>;
|
|
222
|
+
/** Optional metadata-only runtime events. Values and response payloads are not accepted. */
|
|
223
|
+
readonly executionEvents: i0.InputSignal<readonly ReactiveDeterminationExecutionEvent[]>;
|
|
224
|
+
private readonly projection;
|
|
225
|
+
private readonly definitions;
|
|
226
|
+
readonly cards: i0.Signal<readonly ReactiveDeterminationDiagnosticCard[]>;
|
|
227
|
+
readonly projectionPresent: i0.Signal<boolean>;
|
|
228
|
+
readonly rejectedEntryCount: i0.Signal<number>;
|
|
229
|
+
private readonly i18n;
|
|
230
|
+
text(key: string, fallback: string, params?: Record<string, string | number | boolean | null | undefined>): string;
|
|
231
|
+
formModeLabel(mode: ReactiveDeterminationDefinition['scope']['formMode']): string;
|
|
232
|
+
statusLabel(status: ReactiveDeterminationExecutionStatus): string;
|
|
233
|
+
reasonLabel(reason: string | undefined): string | null;
|
|
234
|
+
private extractProjection;
|
|
235
|
+
private findLatestEvent;
|
|
236
|
+
private isExecutionStatus;
|
|
237
|
+
private isRecord;
|
|
238
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ReactiveDeterminationDiagnosticsComponent, never>;
|
|
239
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ReactiveDeterminationDiagnosticsComponent, "praxis-reactive-determination-diagnostics", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "executionEvents": { "alias": "executionEvents"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
240
|
+
}
|
|
241
|
+
|
|
209
242
|
interface CascadeRuleViewModel {
|
|
210
243
|
targetField: string;
|
|
211
244
|
dependencyFields: string[];
|
|
@@ -326,5 +359,5 @@ declare const PRAXIS_METADATA_EDITOR_COMPONENT_METADATA: ComponentDocMeta;
|
|
|
326
359
|
/** Provider para auto-registrar metadados do componente Metadata Editor. */
|
|
327
360
|
declare function providePraxisMetadataEditorMetadata(): Provider;
|
|
328
361
|
|
|
329
|
-
export { CascadeManagerTabComponent, CascadeRulesService, ConfigRegistryService, ContextValidatorRegistryService, DynamicEditorRendererComponent, DynamicFormFactoryService, EditorComponentRegistryService, FieldMetadataEditorComponent, METADATA_EDITOR_AI_CAPABILITIES, METADATA_EDITOR_AI_CAPABILITY_CATALOG, PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST, PRAXIS_METADATA_EDITOR_COMPONENT_METADATA, SchemaNormalizerService, providePraxisMetadataEditorMetadata };
|
|
362
|
+
export { CascadeManagerTabComponent, CascadeRulesService, ConfigRegistryService, ContextValidatorRegistryService, DynamicEditorRendererComponent, DynamicFormFactoryService, EditorComponentRegistryService, FieldMetadataEditorComponent, METADATA_EDITOR_AI_CAPABILITIES, METADATA_EDITOR_AI_CAPABILITY_CATALOG, PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST, PRAXIS_METADATA_EDITOR_COMPONENT_METADATA, ReactiveDeterminationDiagnosticsComponent, SchemaNormalizerService, providePraxisMetadataEditorMetadata };
|
|
330
363
|
export type { CascadeRuleViewModel, ConfigMap, EditorProperty };
|